From e9baf714c2418ee007c38ace2f3b95742e968f26 Mon Sep 17 00:00:00 2001 From: Tomachi Anura <96837454+tomachianura@users.noreply.github.com> Date: Thu, 21 Dec 2023 18:50:37 +0100 Subject: [PATCH 0001/1590] added hsuite as a dex --- dexs/hbarsuite-dex/index.ts | 78 +++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 dexs/hbarsuite-dex/index.ts diff --git a/dexs/hbarsuite-dex/index.ts b/dexs/hbarsuite-dex/index.ts new file mode 100644 index 0000000000..9fa74391f9 --- /dev/null +++ b/dexs/hbarsuite-dex/index.ts @@ -0,0 +1,78 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import axios from "axios"; +import asyncRetry from "async-retry"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +/* + * HbarSuite is a decentralized network of features built on Hedera Hashgraph. + * It is a suite of products that are built on top of the layer 1, + * relying on the security and speed of the Hedera network. + * + * HbarSute Network relies entirely on HCS (Hedera Consensus Service) for its data storage, + * and HFS (Hedera File Service) for its file storage. + * + * It also uses NFTs (Non-Fungible Tokens) to represent the Liquidity Providers' shares in the pools, + * storing the data on IPFS. + */ + +// Listing the urls of the nodes that are used by HbarSuite to connect to the Hedera Mainnet. +const nodes = [ + 'https://mainnet-sn1.hbarsuite.network', + 'https://mainnet-sn2.hbarsuite.network', + 'https://mainnet-sn3.hbarsuite.network', + 'https://mainnet-sn4.hbarsuite.network', + 'https://mainnet-sn5.hbarsuite.network', + 'https://mainnet-sn6.hbarsuite.network', + 'https://mainnet-sn7.hbarsuite.network', + 'https://mainnet-sn8.hbarsuite.network' +] + +interface IHbarSuiteVolumes { + allTimeVolume: number + allTimeVolumesByPools: Array<{ + pool_id: string + pool_name: string + volume: number + }> + dailyVolumes: Array<{ + timestamp: number + volume: number + }> +} + +const fetch = async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + + // generating a random number, so to grab a random smart-node from the network.. + let randomNode = nodes[Math.floor(Math.random() * nodes.length)]; + + // fetching the HBAR price from coingecko.. + let price_feed = await asyncRetry(async() => await axios.get( + 'https://api.coingecko.com/api/v3/simple/price?ids=hedera-hashgraph&vs_currencies=usd' + )); + + let volumes: IHbarSuiteVolumes = (await asyncRetry(async() => await axios.get( + `${randomNode}/pools/volumes` + ))).data; + + let dailyVolume = volumes.dailyVolumes.find((volume) => volume.timestamp >= dayTimestamp); + + return { + totalVolume: (volumes.allTimeVolume * price_feed.data['hedera-hashgraph'].usd).toString(), + dailyVolume: dailyVolume ? (dailyVolume.volume * price_feed.data['hedera-hashgraph'].usd).toString() : "0", + timestamp: dayTimestamp + }; +}; + + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.HEDERA]: { + fetch, + start: async () => 1672531200, + }, + }, +}; + +export default adapter; From 13b38e066e1a367811566cf50cf0629679747d5e Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 4 Mar 2024 14:41:32 +0000 Subject: [PATCH 0002/1590] v2 uni --- helpers/getUniSubgraph/index.ts | 9 ++++----- protocols/uniswap/index.ts | 28 +++++++++++++++++++--------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 4127a9f8b8..ca424f28b1 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -182,12 +182,11 @@ function getGraphDimensions({ } } `: undefined - return async (timestamp: number, chainBlocks: ChainBlocks) => { + return async (timestamp: number, getBlock: any) => { + const customBlockFunc = getCustomBlock ? getCustomBlock : getBlock + const block = await customBlockFunc(timestamp).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 => console.log(wrapGraphError(e).message)) ?? undefined // Execute queries // DAILY VOLUME let graphResDailyVolume @@ -212,7 +211,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: cleanTimestamp }, 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 }, 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); } diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 6318300f7e..93e04093df 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -157,12 +157,20 @@ const startTimeV3:TStartTime = { [CHAIN.ERA]: 1693440000 } const adapter: BreakdownAdapter = { + 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"] + fetch: async ({ chain, endTimestamp, getEndBlock }) => { + const response = await v1Graph(chain)(endTimestamp, getEndBlock); + const keys = [ + "dailyUserFees", + "dailyProtocolRevenue", + "dailySupplySideRevenue", + "dailyHoldersRevenue", + "dailyRevenue", + "dailyFees", + ]; for (const key of keys) { if (typeof response[key] === 'string') { response[key] = await sdk.Balances.getUSDString({ @@ -180,9 +188,10 @@ const adapter: BreakdownAdapter = { }, v2: { [CHAIN.ETHEREUM]: { - fetch: async (timestamp, chainBlocks) => { - const response = await v2Graph(CHAIN.ETHEREUM)(timestamp, chainBlocks) - response.totalVolume = Number(response.dailyVolume) + 1079453198606.2229; + fetch: async ({ chain, endTimestamp, getEndBlock }) => { + const response = await v2Graph(chain)(endTimestamp, getEndBlock); + 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; @@ -201,7 +210,8 @@ const adapter: BreakdownAdapter = { }, v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { - fetch: v3Graphs(chain as Chain), + fetch: async ({ endTimestamp, getEndBlock }) => + v3Graphs(chain as Chain)(endTimestamp, getEndBlock), start: startTimeV3[chain], meta: { methodology: { @@ -214,8 +224,8 @@ const adapter: BreakdownAdapter = { }, {} as BaseAdapter) } } -// adapter.breakdown.v3.bsc.fetch = async (timestamp, chainBlocks) => { -// const response = await v3Graphs(CHAIN.BSC)(timestamp, chainBlocks) +// adapter.breakdown.v3.bsc.fetch = async ({ endTimestamp, getEndBlock }) => { +// const response = await v3Graphs(CHAIN.BSC)(endTimestamp, getEndBlock); // const totalVolume = Number(response.totalVolume) - 10_000_000_000; // return { // ...response, From 4137121dbe5af9a2690ecb57f98724565578e129 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 4 Mar 2024 15:54:01 +0000 Subject: [PATCH 0003/1590] osmosis --- fees/osmosis.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fees/osmosis.ts b/fees/osmosis.ts index dc32919601..c695bc3efd 100644 --- a/fees/osmosis.ts +++ b/fees/osmosis.ts @@ -1,4 +1,4 @@ -import { Adapter } from "../adapters/types"; +import { Adapter, FetchV2 } from "../adapters/types"; import { getTimestampAtStartOfPreviousDayUTC } from "../utils/date"; import fetchURL from "../utils/fetchURL"; import { CHAIN } from "../helpers/chains"; @@ -10,8 +10,8 @@ interface IChartItem { fees_spent: number } -const fetch = async (timestamp: number) => { - const dayTimestamp = getTimestampAtStartOfPreviousDayUTC(timestamp) +const fetch: FetchV2 = async ({ startTimestamp }) => { + const dayTimestamp = getTimestampAtStartOfPreviousDayUTC(startTimestamp) const historicalFees: IChartItem[] = (await fetchURL(feeEndpoint)) const totalFee = historicalFees @@ -31,6 +31,7 @@ const fetch = async (timestamp: number) => { }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.COSMOS]: { fetch, From b9b79443244a146b335c19dd833d420e229669e0 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 4 Mar 2024 16:06:22 +0000 Subject: [PATCH 0004/1590] gmx v2 --- fees/gmx.ts | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/fees/gmx.ts b/fees/gmx.ts index c12349b003..736998eb0e 100644 --- a/fees/gmx.ts +++ b/fees/gmx.ts @@ -1,8 +1,7 @@ import { Adapter } from "../adapters/types"; import { ARBITRUM, AVAX } 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, FetchV2 } from "../adapters/types" import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints = { @@ -20,9 +19,8 @@ const methodology = { } const graphs = (graphUrls: ChainEndpoints) => { - return (chain: Chain) => { - return async (timestamp: number) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp) + const fetch: FetchV2 = async ({ chain, startTimestamp }) => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(startTimestamp) const searchTimestamp = chain == "arbitrum" ? todaysTimestamp : todaysTimestamp + ":daily" const graphQuery = gql @@ -43,7 +41,6 @@ const graphs = (graphUrls: ChainEndpoints) => { const finalUserFee = (userFee / 1e30); return { - timestamp, dailyFees: finalDailyFee.toString(), dailyUserFees: finalUserFee.toString(), dailyRevenue: (finalDailyFee * 0.3).toString(), @@ -53,21 +50,22 @@ const graphs = (graphUrls: ChainEndpoints) => { dailySupplySideRevenue: (finalDailyFee * 0.7).toString(), }; }; - }; + return fetch }; const adapter: Adapter = { + version: 2, adapter: { [ARBITRUM]: { - fetch: graphs(endpoints)(ARBITRUM), + fetch: graphs(endpoints), start: 1630468800, meta: { methodology } }, [AVAX]: { - fetch: graphs(endpoints)(AVAX), + fetch: graphs(endpoints), start: 1641445200, meta: { methodology From a5132f3493d2b2644996a8e4a75490ee5b909233 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 4 Mar 2024 16:38:15 +0000 Subject: [PATCH 0005/1590] pcs --- fees/instadapp/index.ts | 1 - protocols/pancakeswap/index.ts | 23 +++++++++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/fees/instadapp/index.ts b/fees/instadapp/index.ts index e2f9ab7206..a3c84d6a20 100644 --- a/fees/instadapp/index.ts +++ b/fees/instadapp/index.ts @@ -5,7 +5,6 @@ import { SimpleAdapter, } from "../../adapters/types"; import { Balances } from "@defillama/sdk"; -import { call } from "@defillama/sdk/build/abi/abi2"; const instaFlashAggregators: { [chain: Chain]: { address: string; deployedAt: number }; diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index 13a73de495..c7c64204d0 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -1,5 +1,4 @@ -import { Chain } from "@defillama/sdk/build/general"; -import { BaseAdapter, BreakdownAdapter, DISABLED_ADAPTER_KEY, FetchResultVolume, IJSON } from "../../adapters/types"; +import { BaseAdapter, BreakdownAdapter, DISABLED_ADAPTER_KEY, FetchV2, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; @@ -161,7 +160,7 @@ const getResources = async (account: string): Promise => { return data } -const fetchVolume = async (timestamp: number) => { +const fetchVolume: FetchV2 = async ({ endTimestamp: timestamp, createBalances }) => { const fromTimestamp = timestamp - 86400; const toTimestamp = timestamp; const account_resource: any[] = (await getResources(account)) @@ -192,7 +191,7 @@ const fetchVolume = async (timestamp: number) => { numberOfTrade[e]['count'] = 0; numberOfTrade[e]['volume'] = 0; }) - const balances = new sdk.Balances({ chain: CHAIN.APTOS, timestamp }) + const balances: sdk.Balances = createBalances() logs_swap.map((e: ISwapEventData) => { const [token0, token1] = getToken(e.type); balances.add(token0, e.amount_x_out) @@ -200,7 +199,6 @@ const fetchVolume = async (timestamp: number) => { }) return { - timestamp, dailyVolume: await balances.getUSDString(), dailyFees: "0", } @@ -247,15 +245,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: number) => { + fetch: async ({ startTimestamp }) => { const totalVolume = 103394400000; return { totalVolume: `${totalVolume}`, - timestamp: timestamp + timestamp: startTimestamp } }, start: 1680307200, @@ -263,7 +262,7 @@ const adapter: BreakdownAdapter = { }, v2: Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { - fetch: graphs(chain as Chain), + fetch: async ({ chain, startTimestamp, getBlock }) => graphs(chain)(startTimestamp, getBlock), start: startTimes[chain], meta: { methodology @@ -273,12 +272,12 @@ const adapter: BreakdownAdapter = { }, {} as BaseAdapter), v3: Object.keys(v3Endpoint).reduce((acc, chain) => { acc[chain] = { - fetch: async (timestamp: number) => { - const v3stats = await v3Graph(chain)(timestamp, {}) + fetch: async ({ chain, startTimestamp, getBlock }) => { + const v3stats = await v3Graph(chain)(startTimestamp, getBlock) if (chain === CHAIN.ETHEREUM) v3stats.totalVolume = (Number(v3stats.totalVolume) - 7385565913).toString() return { ...v3stats, - timestamp + timestamp: startTimestamp } }, @@ -288,7 +287,7 @@ const adapter: BreakdownAdapter = { }, {} as BaseAdapter), stableswap: Object.keys(stablesSwapEndpoints).reduce((acc, chain) => { acc[chain] = { - fetch: graphsStableSwap(chain as Chain), + fetch: async ({ chain, startTimestamp, getBlock }) => graphsStableSwap(chain)(startTimestamp, getBlock), start: stableTimes[chain], meta: { methodology: { From 4fa7c491ae0c56e20a42ee91b395085c54192bf4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 4 Mar 2024 17:19:43 +0000 Subject: [PATCH 0006/1590] fix starttime --- fees/lens-protocol.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/lens-protocol.ts b/fees/lens-protocol.ts index bb90f68517..c95619e2ac 100644 --- a/fees/lens-protocol.ts +++ b/fees/lens-protocol.ts @@ -23,7 +23,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.POLYGON]: { fetch: fetch, - start: 1693180800, + start: 1708819200, }, }, version: 2 From c6059b18d283cab1ac70b7785984020f08c4d9b8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 4 Mar 2024 18:09:18 +0000 Subject: [PATCH 0007/1590] fix hyperliquid --- dexs/hyperliquid/index.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dexs/hyperliquid/index.ts b/dexs/hyperliquid/index.ts index 0702d0c1bb..9c73b712b5 100644 --- a/dexs/hyperliquid/index.ts +++ b/dexs/hyperliquid/index.ts @@ -1,7 +1,7 @@ import type { SimpleAdapter } from "../../adapters/types"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; -import { httpPost } from "../../utils/fetchURL"; +import { httpGet, httpPost } from "../../utils/fetchURL"; const URL = "https://api.hyperliquid.xyz/info"; @@ -10,8 +10,15 @@ interface Response { dailyVolume?: number; } +const url = (end_date: string) => `https://stats-api.hyperliquid.xyz/hyperliquid/daily_usd_volume?start_date=2023-06-14&end_date=${end_date}` const fetch = async (timestamp: number) => { - const {totalVolume, dailyVolume}: Response = (await httpPost(URL, {"type": "globalStats"})); + const nextData = timestamp + 86400; + const dateStr = new Date(nextData * 1000).toISOString().split('T')[0] + const data = (await httpGet(url(dateStr))).chart_data; + const toDate = new Date(timestamp * 1000).toISOString().split('T')[0]; + const dailyVolume = data.filter((item: any) => item.time.split('T')[0] === toDate) + .reduce((acc: number, item: any) => acc + item.daily_usd_volume, 0); + const {totalVolume}: Response = (await httpPost(URL, {"type": "globalStats"})); const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); return { From 023dce177801c47607ba3b094b026a5fbc283448 Mon Sep 17 00:00:00 2001 From: NeoDashboard Date: Tue, 5 Mar 2024 10:30:42 +0100 Subject: [PATCH 0008/1590] Fix GhostMarket adapter and add BASE chain --- fees/ghostmarket/index.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fees/ghostmarket/index.ts b/fees/ghostmarket/index.ts index caf8c94009..bb868b2a30 100644 --- a/fees/ghostmarket/index.ts +++ b/fees/ghostmarket/index.ts @@ -12,6 +12,7 @@ const endpoints = { [CHAIN.POLYGON]: "https://api-external.ghostmarket.io/defillama/fees?chain=polygon×tamp=", [CHAIN.ETHEREUM]: "https://api-external.ghostmarket.io/defillama/fees?chain=eth×tamp=", [CHAIN.PHANTASMA]: "https://api-external.ghostmarket.io/defillama/fees?chain=pha×tamp=", + [CHAIN.BASE]: "https://api-external.ghostmarket.io/defillama/fees?chain=base×tamp=", } const buildUrl = async (apiUrl: string, timestamp: number) => { @@ -97,6 +98,13 @@ const adapter: Adapter = { meta: { methodology } + }, + [CHAIN.BASE]: { + fetch: apis(endpoints)(CHAIN.BASE), + start: 1691660245, + meta: { + methodology + } } } } From 9d1b4a86c5a5e829cb286d0c5e59084454884bc1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 5 Mar 2024 13:22:39 +0000 Subject: [PATCH 0009/1590] add ethena --- fees/ethena.ts | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 fees/ethena.ts diff --git a/fees/ethena.ts b/fees/ethena.ts new file mode 100644 index 0000000000..8e452e978b --- /dev/null +++ b/fees/ethena.ts @@ -0,0 +1,43 @@ +import { ChainBlocks, FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { queryIndexer } from "../helpers/indexer"; + +const mint_event = 'event Mint( address indexed minter,address indexed benefactor,address indexed beneficiary,address collateral_asset,uint256 collateral_amount,uint256 usde_amount)'; +const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { + const logs = await options.getLogs({ + eventAbi: mint_event, + target: '0x2cc440b721d2cafd6d64908d6d8c4acc57f8afc3', + }); + const in_flow = await queryIndexer(` + SELECT + '0x' || encode(data, 'hex') AS data, + '0x' || encode(contract_address, 'hex') AS token + FROM + ethereum.event_logs + WHERE + block_number > 14932175 + AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' + AND topic_2 = '\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87' + AND block_time BETWEEN llama_replace_date_range; +`, options); +// AND contract_address in ('\\xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', '\\x4c9edd5852cd905f086c759e8383e09bff1e68b3') + const dailyFees = options.createBalances(); + in_flow.map((log: any) => { + const amount = Number(log.data); + dailyFees.add(log.token, amount); + }); + return { + dailyFees: dailyFees, + timestamp + } +} + +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: fetch, + start: 0 + } + } +} +export default adapters From 867451a88db784df4a70f94e3d0fd9d9c973a79f Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 5 Mar 2024 14:26:24 +0000 Subject: [PATCH 0010/1590] patch test script --- cli/testAdapter.ts | 2 +- fees/osmosis.ts | 27 +++++++++++++++------------ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index 28c727649d..438510e10f 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -34,7 +34,7 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ const adapterVersion = module.version let timestamp = endCleanDayTimestamp if (adapterVersion === 2) { - timestamp = process.argv[4] ? +process.argv[4] : getTimestamp30MinutesAgo() + timestamp = (process.argv[4] ? +process.argv[4] : getTimestamp30MinutesAgo()) - 86400 // 1 day; } console.info(`${upperCaseFirst(adapterType)} for ${formatTimestampAsDate(String(getUniqStartOfTodayTimestamp(new Date(timestamp * 1000))))}`) console.info(`_______________________________________\n`) diff --git a/fees/osmosis.ts b/fees/osmosis.ts index c695bc3efd..2b93e7ea5c 100644 --- a/fees/osmosis.ts +++ b/fees/osmosis.ts @@ -3,23 +3,26 @@ import { getTimestampAtStartOfPreviousDayUTC } from "../utils/date"; import fetchURL from "../utils/fetchURL"; import { CHAIN } from "../helpers/chains"; -const feeEndpoint = "https://api-osmosis.imperator.co/fees/v1/total/historical" +const feeEndpoint = "https://api-osmosis.imperator.co/fees/v1/total/historical"; interface IChartItem { - time: string - fees_spent: number + time: string; + fees_spent: number; } -const fetch: FetchV2 = async ({ startTimestamp }) => { - const dayTimestamp = getTimestampAtStartOfPreviousDayUTC(startTimestamp) - const historicalFees: IChartItem[] = (await fetchURL(feeEndpoint)) +const fetch: FetchV2 = async ({ endTimestamp }) => { + const dayTimestamp = getTimestampAtStartOfPreviousDayUTC(endTimestamp); + const historicalFees: IChartItem[] = await fetchURL(feeEndpoint); const totalFee = historicalFees - .filter(feeItem => (new Date(feeItem.time).getTime() / 1000) <= dayTimestamp) - .reduce((acc, { fees_spent }) => acc + fees_spent, 0) + .filter( + (feeItem) => new Date(feeItem.time).getTime() / 1000 <= dayTimestamp, + ) + .reduce((acc, { fees_spent }) => acc + fees_spent, 0); - const dailyFee = historicalFees - .find(dayItem => (new Date(dayItem.time).getTime() / 1000) === dayTimestamp)?.fees_spent + const dailyFee = historicalFees.find( + (dayItem) => new Date(dayItem.time).getTime() / 1000 === dayTimestamp, + )?.fees_spent; return { timestamp: dayTimestamp, @@ -38,7 +41,7 @@ const adapter: Adapter = { runAtCurrTime: true, start: 1665964800, }, - } -} + }, +}; export default adapter; From dda2f9d958a2e2d84193afc415721699e7c2fc0e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 5 Mar 2024 14:39:51 +0000 Subject: [PATCH 0011/1590] fix solana --- fees/banana-gun-trading.ts | 39 +++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/fees/banana-gun-trading.ts b/fees/banana-gun-trading.ts index 6d084af7a1..5e8a5009c0 100644 --- a/fees/banana-gun-trading.ts +++ b/fees/banana-gun-trading.ts @@ -1,21 +1,13 @@ -import { FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { ChainBlocks, FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; import { queryDune } from "../helpers/dune"; import { queryIndexer } from "../helpers/indexer"; - -interface IData { - data: string; -} const fetch: any = async (timestamp: number, _: any, options: FetchOptions): Promise => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const deployer = [ "xf414d478934c29d9a80244a3626c681a71e53bb2", "x37aab97476ba8dc785476611006fd5dda4eed66b" ].map(i => `'\\${i}'::bytea`).join(', ') - console.log(deployer) - const transactions = await queryIndexer(` SELECT encode(data, 'hex') AS data @@ -43,12 +35,25 @@ const fetch: any = async (timestamp: number, _: any, options: FetchOptions): Pro } -const fethcFeesSolana = async (timestamp: number): Promise => { +interface IFees { + block_date: string; + feesSOL: number; +} + +const fethcFeesSolana = async (timestamp: number, _: ChainBlocks, options: FetchOptions): Promise => { const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); try { - const value = await queryDune("3410455", { endTime: todaysTimestamp + 86400 }); + const dateStr = new Date(todaysTimestamp * 1000).toISOString().split('T')[0]; + const value: IFees[] = (await queryDune("2685322")); + const dayItem = value.find((item: any) => item.block_date.split(' ')[0] === dateStr); + const dailyFees = options.createBalances(); + const dailyRevenue = options.createBalances(); + const fees = (dayItem?.feesSOL || 0) * 1e9; + dailyFees.add('So11111111111111111111111111111111111111112', fees); + dailyRevenue.add('So11111111111111111111111111111111111111112', fees) ; return { - dailyFees: value[0]?.fees_usd || "0", + dailyFees: dailyFees, + dailyRevenue: dailyRevenue, timestamp } } catch (error: any) { @@ -65,11 +70,11 @@ const adapter: SimpleAdapter = { fetch: fetch, start: 1685577600, }, - // [CHAIN.SOLANA]: { - // fetch: fethcFeesSolana, - // runAtCurrTime: true, - // start: async () => 1685577600, - // }, + [CHAIN.SOLANA]: { + fetch: fethcFeesSolana, + runAtCurrTime: true, + start: 1685577600, + }, }, isExpensiveAdapter: true, }; From 97515c427a7d0fb5180c4bbdf4224438d7f29b3f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 5 Mar 2024 14:53:25 +0000 Subject: [PATCH 0012/1590] fix fees --- fees/ethena.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/fees/ethena.ts b/fees/ethena.ts index 8e452e978b..5db9481425 100644 --- a/fees/ethena.ts +++ b/fees/ethena.ts @@ -20,14 +20,22 @@ const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) = AND topic_2 = '\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87' AND block_time BETWEEN llama_replace_date_range; `, options); -// AND contract_address in ('\\xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', '\\x4c9edd5852cd905f086c759e8383e09bff1e68b3') - const dailyFees = options.createBalances(); + const dailyFeesInflow = options.createBalances(); + in_flow.map((log: any) => { const amount = Number(log.data); - dailyFees.add(log.token, amount); + dailyFeesInflow.add(log.token, amount); + }); + const dailyFeesMint = options.createBalances(); + logs.map((log) => { + dailyFeesMint.add(log.collateral_asset, log.collateral_amount); }); + + dailyFeesMint.resizeBy(0.001) + dailyFeesMint.addBalances(dailyFeesInflow); return { - dailyFees: dailyFees, + dailyFees: dailyFeesMint, + dailyRevenue: dailyFeesMint, timestamp } } @@ -36,7 +44,7 @@ const adapters: SimpleAdapter = { adapter: { [CHAIN.ETHEREUM]: { fetch: fetch, - start: 0 + start: 1700784000 } } } From 8b1a48019bee78c2c68d80154aa02d6b46c79195 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 5 Mar 2024 14:55:39 +0000 Subject: [PATCH 0013/1590] fix block range --- fees/ethena.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/ethena.ts b/fees/ethena.ts index 5db9481425..5d15fa65d4 100644 --- a/fees/ethena.ts +++ b/fees/ethena.ts @@ -15,7 +15,7 @@ const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) = FROM ethereum.event_logs WHERE - block_number > 14932175 + block_number > 18637861 AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' AND topic_2 = '\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87' AND block_time BETWEEN llama_replace_date_range; From 48d2e6f25eb91762510855328b33bf54c3357007 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 5 Mar 2024 15:21:38 +0000 Subject: [PATCH 0014/1590] some uni adapters --- dexs/DerpDEX/index.ts | 44 +++++++++--------- dexs/agni-fi/index.ts | 1 + dexs/dackieswap/index.ts | 30 +++++------- helpers/getUniSubgraph/index.ts | 81 +++++++++++++++++++++------------ protocols/uniswap/index.ts | 11 ++--- 5 files changed, 91 insertions(+), 76 deletions(-) diff --git a/dexs/DerpDEX/index.ts b/dexs/DerpDEX/index.ts index 69d4718321..7f47fa594e 100644 --- a/dexs/DerpDEX/index.ts +++ b/dexs/DerpDEX/index.ts @@ -3,9 +3,17 @@ import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; const endpoints = { - [CHAIN.ERA]: "https://api.studio.thegraph.com/query/49147/derpdex-v3-amm/v0.0.10", - [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/geckocoding/derpdex-amm-base", - [CHAIN.OP_BNB]: "https://opbnb.subgraph.derpdex.com/subgraphs/name/geckocoding/derpdex-opbnb" + [CHAIN.ERA]: + "https://api.studio.thegraph.com/query/49147/derpdex-v3-amm/v0.0.10", + [CHAIN.BASE]: + "https://api.thegraph.com/subgraphs/name/geckocoding/derpdex-amm-base", + [CHAIN.OP_BNB]: + "https://opbnb.subgraph.derpdex.com/subgraphs/name/geckocoding/derpdex-opbnb", +}; +const v3StartTimes = { + [CHAIN.ERA]: 1688515200, + [CHAIN.BASE]: 1692296100, + [CHAIN.OP_BNB]: 1695275237, }; const v3Graphs = getGraphDimensions({ @@ -17,7 +25,7 @@ const v3Graphs = getGraphDimensions({ dailyVolume: { factory: "uniswapDayData", field: "volumeUSD", - dateField: "date" + dateField: "date", }, dailyFees: { factory: "uniswapDayData", @@ -29,25 +37,17 @@ const v3Graphs = getGraphDimensions({ HoldersRevenue: 0, UserFees: 100, // User fees are 0% of collected fees SupplySideRevenue: 100, // 100% of fees are going to LPs - Revenue: 0 // Revenue is 0% of collected fees - } + Revenue: 0, // Revenue is 0% of collected fees + }, }); -const adapter: Adapter = { - adapter: { - [CHAIN.ERA]: { - fetch: v3Graphs(CHAIN.ERA), - start: 1688515200 - }, - [CHAIN.BASE]: { - fetch: v3Graphs(CHAIN.BASE), - start: 1692296100 - }, - [CHAIN.OP_BNB]: { - fetch: v3Graphs(CHAIN.OP_BNB), - start: 1695275237 - } - } -}; +const adapter: Adapter = { adapter: {}, version: 2 }; + +Object.keys(endpoints).map((chain: string) => { + adapter.adapter[chain] = { + fetch: v3Graphs(chain), + start: v3StartTimes[chain], + }; +}); export default adapter; 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/dackieswap/index.ts b/dexs/dackieswap/index.ts index 7e5a2406f6..f813b72b19 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -9,7 +9,7 @@ const v3Endpoint = { [CHAIN.OPTIMISM]: "https://api.studio.thegraph.com/query/50473/v3-optimism/version/latest", [CHAIN.ARBITRUM]: - "https://api.studio.thegraph.com/query/50473/v3-arbitrum/version/latest", + "https://api.studio.thegraph.com/query/50473/v3-arbitrum/version/latest", }; const VOLUME_USD = "volumeUSD"; @@ -23,12 +23,12 @@ const v3Graph = getGraphDimensions({ factory: "pancakeDayData", field: VOLUME_USD, }, - totalFees:{ + totalFees: { factory: "factories", }, dailyFees: { factory: "pancakeDayData", - field: "feesUSD" + field: "feesUSD", }, }); @@ -38,21 +38,13 @@ const v3StartTimes = { [CHAIN.ARBITRUM]: 1707885300, } as IJSON; -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.BASE]: { - fetch: v3Graph(CHAIN.BASE), - start: async () => v3StartTimes[CHAIN.BASE] - }, - [CHAIN.OPTIMISM]: { - fetch: v3Graph(CHAIN.OPTIMISM), - start: async () => v3StartTimes[CHAIN.OPTIMISM] - }, - [CHAIN.ARBITRUM]: { - fetch: v3Graph(CHAIN.ARBITRUM), - start: async () => v3StartTimes[CHAIN.ARBITRUM] - }, - }, -}; +const adapter: SimpleAdapter = { adapter: {}, version: 2 }; + +Object.keys(v3StartTimes).map((chain: string) => { + adapter.adapter[chain] = { + fetch: v3Graph(chain), + start: v3StartTimes[chain], + }; +}); export default adapter; diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index ca424f28b1..d3e322595b 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -1,10 +1,9 @@ import { Chain } from "@defillama/sdk/build/general"; import { request, gql } from "graphql-request"; -import { getBlock } from "../getBlock"; -import { BaseAdapter, ChainBlocks, 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 { getUniswapDateId, handle200Errors } from "./utils"; import { getStartTimestamp } from "../getStartTimestamp"; const DEFAULT_TOTAL_VOLUME_FACTORY = "uniswapFactories"; @@ -13,7 +12,7 @@ const DEFAULT_TOTAL_VOLUME_FIELD = "totalVolumeUSD"; const DEFAULT_DAILY_VOLUME_FACTORY = "uniswapDayData"; const DEFAULT_DAILY_VOLUME_FIELD = "dailyVolumeUSD"; const DEFAULT_DAILY_DATE_FIELD = "date"; -const DEFAULT_DAILY_PAIR_FACTORY = "pairDayDatas" +const DEFAULT_DAILY_PAIR_FACTORY = "pairDayDatas"; const DEFAULT_ID_TYPE = 'ID!' const DEFAULT_BLOCK_TYPE = 'Int' @@ -181,25 +180,49 @@ function getGraphDimensions({ ${graphFieldsDailyVolume.field} } } - `: undefined - return async (timestamp: number, getBlock: any) => { - const customBlockFunc = getCustomBlock ? getCustomBlock : getBlock - const block = await customBlockFunc(timestamp).catch((e: any) => console.log(wrapGraphError(e).message)) ?? undefined + ` + : 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; // Get params - const id = String(getUniswapDateId(new Date(timestamp * 1000))); + const id = String(getUniswapDateId(new Date(endTimestamp * 1000))); // Execute queries // DAILY VOLUME - let graphResDailyVolume - let dailyVolume: any + let graphResDailyVolume; + let dailyVolume: any; if (dailyVolumePairsQuery) { - console.info("Calculating volume excluding blacklisted tokens...") - graphResDailyVolume = await request(graphUrls[chain], dailyVolumePairsQuery, { - timestamp_gt: timestamp - 3600 * 24, - timestamp_lte: timestamp - }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`GraphFetchError: Failed to get daily volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)) - dailyVolume = graphResDailyVolume?.[graphFieldsDailyVolume.pairs]?.reduce((acc: number | undefined, current: pair) => { - if (blacklistTokens[chain].includes(current.token0.id) || blacklistTokens[chain].includes(current.token1.id)) - return acc + console.info("Calculating volume excluding blacklisted tokens..."); + graphResDailyVolume = await request( + graphUrls[chain], + dailyVolumePairsQuery, + { + timestamp_gt: endTimestamp - 3600 * 24, + timestamp_lte: endTimestamp, + }, + graphRequestHeaders?.[chain], + ) + .catch(handle200Errors) + .catch((e) => + console.error( + `GraphFetchError: Failed to get daily volume on ${chain} with graph ${ + graphUrls[chain] + }: ${wrapGraphError(e).message}`, + ), + ); + dailyVolume = graphResDailyVolume?.[ + graphFieldsDailyVolume.pairs + ]?.reduce((acc: number | undefined, current: pair) => { + if ( + blacklistTokens[chain].includes(current.token0.id) || + blacklistTokens[chain].includes(current.token1.id) + ) + return acc; if (current?.[graphFieldsDailyVolume.field]) { if (acc) return acc += +current?.[graphFieldsDailyVolume.field] return +current?.[graphFieldsDailyVolume.field] @@ -211,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 }, 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: endTimestamp }, 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); } @@ -236,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, @@ -275,23 +298,23 @@ function univ2DimensionAdapter(params: IGetChainVolumeParams, meta: BaseAdapter[ chain, volumeField: params.dailyVolume?.field, dailyDataField: params.dailyVolume?.factory + "s", - dateField: params.dailyVolume?.dateField + dateField: params.dailyVolume?.dateField, }), - meta - } - } - }, {} as BaseAdapter) + meta, + }, + }; + }, {} as BaseAdapter), }; return adapter; } function wrapGraphError(e: Error) { - const message = (e as any).response?.errors?.[0]?.message ?? e.message - return new Error(shortenString(message)) + const message = (e as any).response?.errors?.[0]?.message ?? e.message; + return new Error(shortenString(message)); function shortenString(str: string, maxLength: number = 420) { - return str.length > maxLength ? str.slice(0, maxLength) + '...' : str + return str.length > maxLength ? str.slice(0, maxLength) + "..." : str; } } diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 93e04093df..e07b9199ae 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -161,8 +161,8 @@ const adapter: BreakdownAdapter = { breakdown: { v1: { [CHAIN.ETHEREUM]: { - fetch: async ({ chain, endTimestamp, getEndBlock }) => { - const response = await v1Graph(chain)(endTimestamp, getEndBlock); + fetch: async (options) => { + const response = await v1Graph(options.chain)(options); const keys = [ "dailyUserFees", "dailyProtocolRevenue", @@ -188,8 +188,8 @@ const adapter: BreakdownAdapter = { }, v2: { [CHAIN.ETHEREUM]: { - fetch: async ({ chain, endTimestamp, getEndBlock }) => { - const response = await v2Graph(chain)(endTimestamp, getEndBlock); + fetch: async (options) => { + const response = await v2Graph(options.chain)(options); response.totalVolume = Number(response.dailyVolume) + 1079453198606.2229; response.totalFees = Number(response.totalVolume) * 0.003; @@ -210,8 +210,7 @@ const adapter: BreakdownAdapter = { }, v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { - fetch: async ({ endTimestamp, getEndBlock }) => - v3Graphs(chain as Chain)(endTimestamp, getEndBlock), + fetch: v3Graphs(chain as Chain), start: startTimeV3[chain], meta: { methodology: { From 70a7a68c261d5346f33078e351bb6f869b155d8b Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 5 Mar 2024 15:48:39 +0000 Subject: [PATCH 0015/1590] v2 unis --- dexs/ArbitrumExchange/index.ts | 1 + dexs/SmarDex/index.ts | 40 ++++++------- dexs/archly-finance/index.ts | 1 + dexs/butterxyz/index.ts | 1 + dexs/doveswap/index.ts | 1 + dexs/dragonswap/index.ts | 10 +--- dexs/fusionx-v2/index.ts | 1 + dexs/fusionx-v3/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/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 | 7 ++- 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 | 2 + dexs/sushiswap/v3.ts | 37 ++++++------ dexs/tangleswap/index.ts | 1 + dexs/throne-v3/index.ts | 1 + dexs/vapordex/v2.ts | 2 +- dexs/xswap-protocol/index.ts | 1 + dexs/zkswap/index.ts | 7 ++- fees/ascent-v3.ts | 1 + fees/cleopatra-exchange.ts | 97 ++++++++++++++++---------------- fees/dragonswap/index.ts | 12 +--- fees/kyotoswap.ts | 1 + fees/pharaoh-exchange.ts | 97 ++++++++++++++++---------------- fees/quickswap.ts | 1 + fees/ramses-exchange-v2/index.ts | 5 +- fees/zyberswap.ts | 1 + protocols/pancakeswap/index.ts | 16 ++---- protocols/smbswap/index.ts | 8 +-- 42 files changed, 190 insertions(+), 179 deletions(-) diff --git a/dexs/ArbitrumExchange/index.ts b/dexs/ArbitrumExchange/index.ts index 947ae22ea9..7c72ca2016 100644 --- a/dexs/ArbitrumExchange/index.ts +++ b/dexs/ArbitrumExchange/index.ts @@ -66,6 +66,7 @@ const startTimeV3:TStartTime = { [CHAIN.ARBITRUM]: 1683590400, } const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: { [CHAIN.ARBITRUM]: { diff --git a/dexs/SmarDex/index.ts b/dexs/SmarDex/index.ts index fe070ffdc6..7bc1ae13a0 100644 --- a/dexs/SmarDex/index.ts +++ b/dexs/SmarDex/index.ts @@ -39,6 +39,14 @@ const graphRequestHeaders:IMap = { [CHAIN.POLYGON]: defaultHeaders, }; +const startTimes = { + [CHAIN.ARBITRUM]: 1689582249, + [CHAIN.BASE]: 1691491872, + [CHAIN.BSC]: 1689581494, + [CHAIN.ETHEREUM]: 1678404995, + [CHAIN.POLYGON]: 1689582144, +} + /** * @note We are using this method that allow us to use http headers * The method `getGraphDimensions` try returns daily fees and total fees @@ -58,29 +66,13 @@ const graphs = getGraphDimensions({ }, }); -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.ETHEREUM]: { - fetch: graphs(CHAIN.ETHEREUM), - start: 1678404995, // birthBlock timestamp - }, - [CHAIN.BSC]: { - fetch: graphs(CHAIN.BSC), - start: 1689581494, - }, - [CHAIN.POLYGON]: { - fetch: graphs(CHAIN.POLYGON), - start: 1689582144, - }, - [CHAIN.ARBITRUM]: { - fetch: graphs(CHAIN.ARBITRUM), - start: 1689582249, - }, - [CHAIN.BASE]: { - fetch: graphs(CHAIN.BASE), - start: 1691491872, - }, - }, -}; +const adapter: SimpleAdapter = { adapter: {}, version: 2 } + +Object.keys(graphUrls).map((chain: string) => { + adapter.adapter[chain] = { + fetch: graphs(chain), + start: startTimes[chain] + } +}) export default adapter; 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/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/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 5860ea9e3f..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] = { @@ -86,14 +87,7 @@ const adapter: BreakdownAdapter = { }, {} as BaseAdapter), v3: Object.keys(v3Endpoint).reduce((acc, chain) => { acc[chain] = { - fetch: async (timestamp: number) => { - const v3stats = await v3Graph(chain)(timestamp, {}) - return { - ...v3stats, - timestamp - } - - }, + fetch: v3Graph(chain), start: v3StartTimes[chain], } return acc 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/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 e422a69461..b0b3fe33c2 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 50f0ad489b..99b46ae329 100644 --- a/dexs/kinetix-v3/index.ts +++ b/dexs/kinetix-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 e816a089d8..09d40286bd 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 e69c44baa8..0dd002315f 100644 --- a/dexs/metavault-v3/index.ts +++ b/dexs/metavault-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/miaswap/index.ts b/dexs/miaswap/index.ts index 335f43b31a..da01785875 100644 --- a/dexs/miaswap/index.ts +++ b/dexs/miaswap/index.ts @@ -34,6 +34,7 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ONUS]: { fetch: v3Graphs(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 29ed48eba9..bfed4ade50 100644 --- a/dexs/nomiswap/index.ts +++ b/dexs/nomiswap/index.ts @@ -1,7 +1,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { time } from "console"; const endpoints = { @@ -28,10 +28,11 @@ const graphsClassic = getGraphDimensions({ }); const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BSC]: { - fetch: async (timestamp: number) => { - const data = await graphsClassic(CHAIN.BSC)(timestamp, {}); + fetch: async (options: FetchOptions) => { + const data = await graphsClassic(CHAIN.BSC)(options); const removeSpike = Number(data.totalVolume) - 2035654137.527446631277942307129497; data.totalVolume = removeSpike > 0 ? removeSpike : data.totalVolume; return { diff --git a/dexs/quickswap/index.ts b/dexs/quickswap/index.ts index a873d09f94..91ec9a8903 100644 --- a/dexs/quickswap/index.ts +++ b/dexs/quickswap/index.ts @@ -84,6 +84,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 38797f1c8b..103a65b215 100644 --- a/dexs/retro/index.ts +++ b/dexs/retro/index.ts @@ -27,6 +27,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 14cd66008e..c837061bc7 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 60c6843f9f..cfad7ffd19 100644 --- a/dexs/squadswap-v2/index.ts +++ b/dexs/squadswap-v2/index.ts @@ -29,6 +29,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 c65dd3f019..4598f8920f 100644 --- a/dexs/squadswap-v3/index.ts +++ b/dexs/squadswap-v3/index.ts @@ -33,6 +33,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 dd67edfb45..daebdfb3f7 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -166,4 +166,6 @@ classic[CHAIN.FANTOM] = { start: 0 } +classic.version = 2 + export default classic diff --git a/dexs/sushiswap/v3.ts b/dexs/sushiswap/v3.ts index a0cce49c6d..06cdf1ccde 100644 --- a/dexs/sushiswap/v3.ts +++ b/dexs/sushiswap/v3.ts @@ -1,6 +1,7 @@ import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { Adapter, SimpleAdapter } from "../../adapters/types"; const endpointsV3 = { [CHAIN.ARBITRUM_NOVA]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v3/v3-arbitrum-nova', @@ -58,25 +59,23 @@ const startTimeV3: {[key: string]: number} = { [CHAIN.BASE]: 1691020800, } -const v3 = Object.keys(endpointsV3).reduce( - (acc, chain) => ({ - ...acc, - [chain]: { - fetch: v3Graphs(chain as Chain), - start: startTimeV3[chain], - meta: { - methodology: { - Fees: "Each pool charge between 0.01% to 1% fee", - UserFees: "Users pay between 0.01% to 1% fee", - Revenue: "0 to 1/4 of the fee goes to treasury", - HoldersRevenue: "None", - ProtocolRevenue: "Treasury receives a share of the fees", - SupplySideRevenue: "Liquidity providers get most of the fees of all trades in their pools" - } +const v3: SimpleAdapter = { adapter: {}, version: 2 } + +Object.keys(endpointsV3).map((chain: string) => { + v3.adapter[chain] = { + fetch: v3Graphs(chain as Chain), + start: startTimeV3[chain], + meta: { + methodology: { + Fees: "Each pool charge between 0.01% to 1% fee", + UserFees: "Users pay between 0.01% to 1% fee", + Revenue: "0 to 1/4 of the fee goes to treasury", + HoldersRevenue: "None", + ProtocolRevenue: "Treasury receives a share of the fees", + SupplySideRevenue: "Liquidity providers get most of the fees of all trades in their pools" } - }, - }), - {} -); + } + } +}) export default v3 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 2df22f6b8c..87d959a8b3 100644 --- a/dexs/throne-v3/index.ts +++ b/dexs/throne-v3/index.ts @@ -33,6 +33,7 @@ const v3StartTimes = { } as IJSON; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BASE]: { fetch: v3Graph(CHAIN.BASE), diff --git a/dexs/vapordex/v2.ts b/dexs/vapordex/v2.ts index 5bab677215..350f1e760e 100644 --- a/dexs/vapordex/v2.ts +++ b/dexs/vapordex/v2.ts @@ -43,7 +43,7 @@ const v2 = Object.keys(endpointsV2).reduce( start: startTimeV2[chain], }, }), - {} + { version: 2 } ); export default v2; 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 481d6fc0db..7ab3d543b8 100644 --- a/dexs/zkswap/index.ts +++ b/dexs/zkswap/index.ts @@ -1,5 +1,5 @@ import { time } from "console"; -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; @@ -27,10 +27,11 @@ const graph = getGraphDimensions({ }); const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ERA]: { - fetch: async (timestamp: number) => { - const data = await graph(CHAIN.ERA)(timestamp, {}); + 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 5af83abbbc..1243220066 100644 --- a/fees/cleopatra-exchange.ts +++ b/fees/cleopatra-exchange.ts @@ -1,64 +1,65 @@ import { SimpleAdapter, FetchResultFees, BaseAdapter } from "../adapters/types"; import { MANTLE, CHAIN } from "../helpers/chains"; - import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, - DEFAULT_TOTAL_VOLUME_FIELD, - } from "../helpers/getUniSubgraph" + getGraphDimensions, + DEFAULT_DAILY_VOLUME_FACTORY, + DEFAULT_TOTAL_VOLUME_FIELD, +} from "../helpers/getUniSubgraph"; type TStartTime = { -[key: string]: number; -} -const startTimeV2:TStartTime = { -[CHAIN.MANTLE]: 1704326400, -} - + [key: string]: number; +}; +const startTimeV2: TStartTime = { + [CHAIN.MANTLE]: 1704326400, +}; const v2Endpoints = { - [CHAIN.MANTLE]: "https://subgraph-api.mantle.xyz/subgraphs/name/cleoexchange/cl-subgraph", - }; + [CHAIN.MANTLE]: + "https://subgraph-api.mantle.xyz/subgraphs/name/cleoexchange/cl-subgraph", +}; const VOLUME_USD = "volumeUSD"; const v2Graphs = getGraphDimensions({ - graphUrls: v2Endpoints, - totalVolume: { - factory: "factories", - field: DEFAULT_TOTAL_VOLUME_FIELD, - }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, - feesPercent: { - type: "fees", - HoldersRevenue: 50, - UserFees: 100, // User fees are 100% of collected fees - Revenue: 50, // Revenue is 50% of collected fees - SupplySideRevenue: 50, - } - }); + graphUrls: v2Endpoints, + totalVolume: { + factory: "factories", + field: DEFAULT_TOTAL_VOLUME_FIELD, + }, + dailyVolume: { + factory: DEFAULT_DAILY_VOLUME_FACTORY, + field: VOLUME_USD, + }, + feesPercent: { + type: "fees", + HoldersRevenue: 50, + UserFees: 100, // User fees are 100% of collected fees + Revenue: 50, // Revenue is 50% of collected fees + SupplySideRevenue: 50, + }, +}); - const methodology = { - UserFees: "User pays 0.3% fees on each swap.", - ProtocolRevenue: "Revenue going to the protocol.", - HoldersRevenue: "User fees are distributed among holders." - } +const methodology = { + UserFees: "User pays 0.3% fees on each swap.", + ProtocolRevenue: "Revenue going to the protocol.", + HoldersRevenue: "User fees are distributed among holders.", +}; - const adapter: SimpleAdapter = { - adapter: { - [CHAIN.MANTLE]: {fetch: v2Graphs(MANTLE), - start: startTimeV2[CHAIN.MANTLE], - meta: { - methodology: { - ...methodology, - UserFees: "User pays 0.05%, 0.30%, or 1% on each swap." - } - } - }, - } - }; +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.MANTLE]: { + fetch: v2Graphs(MANTLE), + start: startTimeV2[CHAIN.MANTLE], + meta: { + methodology: { + ...methodology, + UserFees: "User pays 0.05%, 0.30%, or 1% on each swap.", + }, + }, + }, + }, +}; export default adapter; diff --git a/fees/dragonswap/index.ts b/fees/dragonswap/index.ts index 5860ea9e3f..9648b3661c 100644 --- a/fees/dragonswap/index.ts +++ b/fees/dragonswap/index.ts @@ -1,5 +1,5 @@ import { Chain } from "@defillama/sdk/build/types"; -import { BaseAdapter, BreakdownAdapter, IJSON } from "../../adapters/types"; +import { BaseAdapter, BreakdownAdapter, FetchOptions, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; @@ -73,6 +73,7 @@ const v3Graph = getGraphDimensions({ }); const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { @@ -86,14 +87,7 @@ const adapter: BreakdownAdapter = { }, {} as BaseAdapter), v3: Object.keys(v3Endpoint).reduce((acc, chain) => { acc[chain] = { - fetch: async (timestamp: number) => { - const v3stats = await v3Graph(chain)(timestamp, {}) - return { - ...v3stats, - timestamp - } - - }, + fetch: v3Graph(chain), start: v3StartTimes[chain], } return acc diff --git a/fees/kyotoswap.ts b/fees/kyotoswap.ts index 7b89cdee87..1f597c37f7 100644 --- a/fees/kyotoswap.ts +++ b/fees/kyotoswap.ts @@ -46,6 +46,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/pharaoh-exchange.ts b/fees/pharaoh-exchange.ts index c00c818e5b..bffdda48ec 100644 --- a/fees/pharaoh-exchange.ts +++ b/fees/pharaoh-exchange.ts @@ -1,64 +1,65 @@ import { SimpleAdapter, FetchResultFees, BaseAdapter } from "../adapters/types"; import { AVAX, CHAIN } from "../helpers/chains"; - import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, - DEFAULT_TOTAL_VOLUME_FIELD, - } from "../helpers/getUniSubgraph" + getGraphDimensions, + DEFAULT_DAILY_VOLUME_FACTORY, + DEFAULT_TOTAL_VOLUME_FIELD, +} from "../helpers/getUniSubgraph"; type TStartTime = { -[key: string]: number; -} -const startTimeV2:TStartTime = { -[CHAIN.AVAX]: 1702339200, -} - + [key: string]: number; +}; +const startTimeV2: TStartTime = { + [CHAIN.AVAX]: 1702339200, +}; const v2Endpoints = { - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/ramsesexchange/pharaoh-cl-subgraph", - }; + [CHAIN.AVAX]: + "https://api.thegraph.com/subgraphs/name/ramsesexchange/pharaoh-cl-subgraph", +}; const VOLUME_USD = "volumeUSD"; const v2Graphs = getGraphDimensions({ - graphUrls: v2Endpoints, - totalVolume: { - factory: "factories", - field: DEFAULT_TOTAL_VOLUME_FIELD, - }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, - feesPercent: { - type: "fees", - HoldersRevenue: 50, - UserFees: 100, // User fees are 100% of collected fees - Revenue: 50, // Revenue is 50% of collected fees - SupplySideRevenue: 50, - } - }); + graphUrls: v2Endpoints, + totalVolume: { + factory: "factories", + field: DEFAULT_TOTAL_VOLUME_FIELD, + }, + dailyVolume: { + factory: DEFAULT_DAILY_VOLUME_FACTORY, + field: VOLUME_USD, + }, + feesPercent: { + type: "fees", + HoldersRevenue: 50, + UserFees: 100, // User fees are 100% of collected fees + Revenue: 50, // Revenue is 50% of collected fees + SupplySideRevenue: 50, + }, +}); - const methodology = { - UserFees: "User pays 0.3% fees on each swap.", - ProtocolRevenue: "Revenue going to the protocol.", - HoldersRevenue: "User fees are distributed among holders." - } +const methodology = { + UserFees: "User pays 0.3% fees on each swap.", + ProtocolRevenue: "Revenue going to the protocol.", + HoldersRevenue: "User fees are distributed among holders.", +}; - const adapter: SimpleAdapter = { - adapter: { - [CHAIN.AVAX]: {fetch: v2Graphs(AVAX), - start: startTimeV2[CHAIN.AVAX], - meta: { - methodology: { - ...methodology, - UserFees: "User pays 0.05%, 0.30%, or 1% on each swap." - } - } - }, - } - }; +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.AVAX]: { + fetch: v2Graphs(AVAX), + start: startTimeV2[CHAIN.AVAX], + meta: { + methodology: { + ...methodology, + UserFees: "User pays 0.05%, 0.30%, or 1% on each swap.", + }, + }, + }, + }, +}; export default adapter; diff --git a/fees/quickswap.ts b/fees/quickswap.ts index b4b914de1d..bafac82a51 100644 --- a/fees/quickswap.ts +++ b/fees/quickswap.ts @@ -75,6 +75,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 361876e250..523d7fdcbb 100644 --- a/fees/ramses-exchange-v2/index.ts +++ b/fees/ramses-exchange-v2/index.ts @@ -61,10 +61,11 @@ const methodology = { } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { - fetch: async (timestamp: number, chainBlocks: any, options: FetchOptions) => { - const v2Result = await v2Graphs(ARBITRUM)(timestamp, chainBlocks); // Pass chainBlocks as the second argument + fetch: async (options: FetchOptions) => { + const v2Result = await v2Graphs(ARBITRUM)(options) const bribesResult = await getBribes(options); v2Result.dailyBribesRevenue = bribesResult.dailyBribesRevenue; diff --git a/fees/zyberswap.ts b/fees/zyberswap.ts index ef25180e3d..722c284641 100644 --- a/fees/zyberswap.ts +++ b/fees/zyberswap.ts @@ -107,6 +107,7 @@ const methodologyStable = { } const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: { [CHAIN.ARBITRUM]: { diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index c7c64204d0..01d2d9a9d1 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -1,4 +1,4 @@ -import { BaseAdapter, BreakdownAdapter, DISABLED_ADAPTER_KEY, FetchV2, IJSON } from "../../adapters/types"; +import { BaseAdapter, BreakdownAdapter, DISABLED_ADAPTER_KEY, FetchOptions, FetchV2, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; @@ -262,7 +262,7 @@ const adapter: BreakdownAdapter = { }, v2: Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { - fetch: async ({ chain, startTimestamp, getBlock }) => graphs(chain)(startTimestamp, getBlock), + fetch: graphs(chain), start: startTimes[chain], meta: { methodology @@ -272,14 +272,10 @@ const adapter: BreakdownAdapter = { }, {} as BaseAdapter), v3: Object.keys(v3Endpoint).reduce((acc, chain) => { acc[chain] = { - fetch: async ({ chain, startTimestamp, getBlock }) => { - const v3stats = await v3Graph(chain)(startTimestamp, getBlock) + fetch: async (options: FetchOptions) => { + const v3stats = await v3Graph(chain)(options) if (chain === CHAIN.ETHEREUM) v3stats.totalVolume = (Number(v3stats.totalVolume) - 7385565913).toString() - return { - ...v3stats, - timestamp: startTimestamp - } - + return v3stats }, start: v3StartTimes[chain], } @@ -287,7 +283,7 @@ const adapter: BreakdownAdapter = { }, {} as BaseAdapter), stableswap: Object.keys(stablesSwapEndpoints).reduce((acc, chain) => { acc[chain] = { - fetch: async ({ chain, startTimestamp, getBlock }) => graphsStableSwap(chain)(startTimestamp, getBlock), + fetch: graphsStableSwap(chain), start: stableTimes[chain], meta: { methodology: { diff --git a/protocols/smbswap/index.ts b/protocols/smbswap/index.ts index 4b0ed19bd1..3e0c0b4201 100644 --- a/protocols/smbswap/index.ts +++ b/protocols/smbswap/index.ts @@ -1,5 +1,5 @@ import { Chain } from "@defillama/sdk/build/general"; -import { BaseAdapter, BreakdownAdapter, DISABLED_ADAPTER_KEY, IJSON } from "../../adapters/types"; +import { BaseAdapter, BreakdownAdapter, DISABLED_ADAPTER_KEY, FetchOptions, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; @@ -109,6 +109,7 @@ const methodology = { } const adapter: BreakdownAdapter = { + version: 2, breakdown: { v1: { [DISABLED_ADAPTER_KEY]: disabledAdapter, @@ -116,10 +117,9 @@ const adapter: BreakdownAdapter = { }, v2: { [CHAIN.BSC]: { - fetch: async (timestamp: number) => { - const volume = await graphs(CHAIN.BSC)(timestamp, {}) + fetch: async (options: FetchOptions) => { + const volume = await graphs(CHAIN.BSC)(options) return { - timestamp, dailyFees: volume.dailyFees, dailyVolume: volume.dailyVolume, } From f35b6b1b49bfa2687e79ebe98cd02bdc2f7846ed Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 5 Mar 2024 16:08:10 +0000 Subject: [PATCH 0016/1590] custombackfill --- adapters/types.ts | 2 +- dexs/baseswap/index.ts | 1 + dexs/beamswap-v3/index.ts | 1 + dexs/beamswap/index.ts | 1 + dexs/dackieswap-v2/index.ts | 1 + dexs/swapbased/index.ts | 184 +++++++++++++++++++++++------------- helpers/customBackfill.ts | 25 +++-- 7 files changed, 140 insertions(+), 75 deletions(-) diff --git a/adapters/types.ts b/adapters/types.ts index 5baf45bb48..c7c69e7543 100644 --- a/adapters/types.ts +++ b/adapters/types.ts @@ -72,7 +72,7 @@ export type BaseAdapter = { start: IStartTimestamp | number fetch: Fetch|FetchV2; runAtCurrTime?: boolean; - customBackfill?: Fetch; + customBackfill?: Fetch|FetchV2; meta?: { methodology?: string | IJSON hallmarks?: [number, string][] diff --git a/dexs/baseswap/index.ts b/dexs/baseswap/index.ts index 3997bd6246..b52df5505e 100644 --- a/dexs/baseswap/index.ts +++ b/dexs/baseswap/index.ts @@ -78,6 +78,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 428b809bfd..7fd34e6a12 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 cab000b1d5..715308ab6a 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/dackieswap-v2/index.ts b/dexs/dackieswap-v2/index.ts index ce39b804fd..e9e3dec49b 100644 --- a/dexs/dackieswap-v2/index.ts +++ b/dexs/dackieswap-v2/index.ts @@ -47,6 +47,7 @@ const methodology = { }; const adapter: SimpleAdapter = { + version: 2, adapter: Object.keys(endpoints).reduce((acc, chain) => { return { ...acc, diff --git a/dexs/swapbased/index.ts b/dexs/swapbased/index.ts index 3e18398fb6..189458f6fd 100644 --- a/dexs/swapbased/index.ts +++ b/dexs/swapbased/index.ts @@ -1,7 +1,17 @@ import customBackfill from "../../helpers/customBackfill"; -import { DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { + DEFAULT_TOTAL_VOLUME_FACTORY, + DEFAULT_TOTAL_VOLUME_FIELD, + DEFAULT_DAILY_VOLUME_FACTORY, + DEFAULT_DAILY_VOLUME_FIELD, + getChainVolume, +} from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; -import type { Fetch, ChainEndpoints, BreakdownAdapter } from "../../adapters/types"; +import type { + Fetch, + ChainEndpoints, + BreakdownAdapter, +} from "../../adapters/types"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; import request, { gql } from "graphql-request"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; @@ -24,16 +34,17 @@ const graphs = getGraphDimensions({ }, feesPercent: { type: "volume", - UserFees: 0.30, + UserFees: 0.3, SupplySideRevenue: 0.25, ProtocolRevenue: 0.05, Revenue: 0.25, - Fees: 0.30, - } + Fees: 0.3, + }, }); const endpointsV3 = { - [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/chimpydev/swapbased-algebra-core", + [CHAIN.BASE]: + "https://api.thegraph.com/subgraphs/name/chimpydev/swapbased-algebra-core", }; const graphsV3 = getChainVolume({ graphUrls: endpointsV3, @@ -44,7 +55,7 @@ const graphsV3 = getChainVolume({ dailyVolume: { factory: "algebraDayData", field: "volumeUSD", - dateField: "date" + dateField: "date", }, }); @@ -59,85 +70,128 @@ const methodology = { /* PERPS */ const endpointsPerps: { [key: string]: string } = { - [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/chimpydev/swapbased-perps-core", -} + [CHAIN.BASE]: + "https://api.thegraph.com/subgraphs/name/chimpydev/swapbased-perps-core", +}; const historicalDataSwap = gql` query get_volume($period: String!, $id: String!) { - volumeStats(where: {period: $period, id: $id}) { - liquidation - margin - } + volumeStats(where: { period: $period, id: $id }) { + liquidation + margin + } } -` +`; const historicalOI = gql` query get_trade_stats($period: String!, $id: String!) { - tradingStats(where: {period: $period, id: $id}) { + tradingStats(where: { period: $period, id: $id }) { id longOpenInterest shortOpenInterest } } -` - +`; interface IGraphResponse { volumeStats: Array<{ - burn: string, - liquidation: string, - margin: string, - mint: string, - swap: string, - }> + burn: string; + liquidation: string; + margin: string; + mint: string; + swap: string; + }>; } interface IGraphResponseOI { tradingStats: Array<{ - id: string, - longOpenInterest: string, - shortOpenInterest: string, - }> + id: string; + longOpenInterest: string; + shortOpenInterest: string; + }>; } -const getFetch = (query: string)=> (chain: string): any => async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000))) - const dailyData: IGraphResponse = await request(endpointsPerps[chain], query, { - id: String(dayTimestamp) + ':daily', - period: 'daily', - }) - const totalData: IGraphResponse = await request(endpointsPerps[chain], query, { - id: 'total', - period: 'total', - }) - - const tradingStats: IGraphResponseOI = await request(endpointsPerps[chain], historicalOI, { - id: String(dayTimestamp) + ':daily', - period: 'daily', - }) - - const dailyOpenInterest = Number(tradingStats.tradingStats[0]?.longOpenInterest || 0) + Number(tradingStats.tradingStats[0]?.shortOpenInterest || 0); - const dailyLongOpenInterest = Number(tradingStats.tradingStats[0]?.longOpenInterest || 0); - const dailyShortOpenInterest = Number(tradingStats.tradingStats[0]?.shortOpenInterest || 0); - - return { - timestamp: dayTimestamp, - dailyLongOpenInterest: dailyLongOpenInterest ? String(dailyLongOpenInterest * 10 ** -30) : undefined, - dailyShortOpenInterest: dailyShortOpenInterest ? String(dailyShortOpenInterest * 10 ** -30) : undefined, - dailyOpenInterest: dailyOpenInterest ? String(dailyOpenInterest * 10 ** -30) : undefined, - dailyVolume: - dailyData.volumeStats.length == 1 - ? String(Number(Object.values(dailyData.volumeStats[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30) +const getFetch = + (query: string) => + (chain: string): any => + async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp( + new Date(timestamp * 1000), + ); + const dailyData: IGraphResponse = await request( + endpointsPerps[chain], + query, + { + id: String(dayTimestamp) + ":daily", + period: "daily", + }, + ); + const totalData: IGraphResponse = await request( + endpointsPerps[chain], + query, + { + id: "total", + period: "total", + }, + ); + + const tradingStats: IGraphResponseOI = await request( + endpointsPerps[chain], + historicalOI, + { + id: String(dayTimestamp) + ":daily", + period: "daily", + }, + ); + + const dailyOpenInterest = + Number(tradingStats.tradingStats[0]?.longOpenInterest || 0) + + Number(tradingStats.tradingStats[0]?.shortOpenInterest || 0); + const dailyLongOpenInterest = Number( + tradingStats.tradingStats[0]?.longOpenInterest || 0, + ); + const dailyShortOpenInterest = Number( + tradingStats.tradingStats[0]?.shortOpenInterest || 0, + ); + + return { + timestamp: dayTimestamp, + dailyLongOpenInterest: dailyLongOpenInterest + ? String(dailyLongOpenInterest * 10 ** -30) : undefined, - totalVolume: - totalData.volumeStats.length == 1 - ? String(Number(Object.values(totalData.volumeStats[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30) + dailyShortOpenInterest: dailyShortOpenInterest + ? String(dailyShortOpenInterest * 10 ** -30) : undefined, - - } -} + dailyOpenInterest: dailyOpenInterest + ? String(dailyOpenInterest * 10 ** -30) + : undefined, + dailyVolume: + dailyData.volumeStats.length == 1 + ? String( + Number( + Object.values(dailyData.volumeStats[0]).reduce((sum, element) => + String(Number(sum) + Number(element)), + ), + ) * + 10 ** -30, + ) + : undefined, + totalVolume: + totalData.volumeStats.length == 1 + ? String( + Number( + Object.values(totalData.volumeStats[0]).reduce((sum, element) => + String(Number(sum) + Number(element)), + ), + ) * + 10 ** -30, + ) + : undefined, + }; + }; const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: { [CHAIN.BASE]: { @@ -145,20 +199,20 @@ const adapter: BreakdownAdapter = { start: 1690495200, customBackfill: customBackfill(CHAIN.BASE, graphs), meta: { methodology }, - } + }, }, v3: { [CHAIN.BASE]: { fetch: graphsV3(CHAIN.BASE), start: 1690443269, - } + }, }, perps: { [CHAIN.BASE]: { fetch: getFetch(historicalDataSwap)(CHAIN.BASE), start: 1688913853, - } - } + }, + }, }, }; diff --git a/helpers/customBackfill.ts b/helpers/customBackfill.ts index 74ba31f2bf..77693c573c 100644 --- a/helpers/customBackfill.ts +++ b/helpers/customBackfill.ts @@ -1,4 +1,4 @@ -import { ChainBlocks, Fetch, FetchResultGeneric } from "../adapters/types" +import { FetchOptions, FetchResultGeneric, Fetch, FetchV2, ChainBlocks } from "../adapters/types" import { getBlock } from "./getBlock" import { util } from '@defillama/sdk'; import { Chain } from "@defillama/sdk/build/general"; @@ -7,16 +7,23 @@ import BigNumber from "bignumber.js"; const { blocks: { chainsForBlocks } } = util const ONE_DAY_IN_SECONDS = 60 * 60 * 24 -export type IGraphs = (chain: Chain) => (timestamp: number, chainBlocks: ChainBlocks) => Promise +export type IGraphs = (chain: Chain) => (options: FetchOptions|number, chainBlocks: ChainBlocks) => Promise -export default (chain: Chain, graphs: IGraphs): Fetch => async (timestamp: number, chainBlocks: ChainBlocks): Promise => { +export default (chain: Chain, graphs: any): Fetch|FetchV2 => async (options: FetchOptions|number, chainBlocks: ChainBlocks): Promise => { const fetchGetVolume = graphs(chain) - const resultDayN = await fetchGetVolume(timestamp, chainBlocks) - const timestampPreviousDay = timestamp - ONE_DAY_IN_SECONDS - let chainBlocksPreviousDay = {} - if (chainsForBlocks.includes(chain) || chain === "ethereum") - chainBlocksPreviousDay = { [chain]: await getBlock(timestampPreviousDay, chain, {}).catch(() => { }) } - const resultPreviousDayN = await fetchGetVolume(timestampPreviousDay, chainBlocksPreviousDay) + let resultPreviousDayN + let resultDayN + if (typeof options == 'number') { + resultDayN = await fetchGetVolume(options, chainBlocks) + const timestampPreviousDay = options - ONE_DAY_IN_SECONDS + let chainBlocksPreviousDay = {} + if (chainsForBlocks.includes(chain) || chain === "ethereum") + chainBlocksPreviousDay = { [chain]: await getBlock(timestampPreviousDay, chain, {}).catch(() => { }) } + resultPreviousDayN = await fetchGetVolume(timestampPreviousDay, chainBlocksPreviousDay) + } else { + resultDayN = await fetchGetVolume(options) + resultPreviousDayN = await fetchGetVolume(options) + } const response: FetchResultGeneric = resultDayN Object.keys(resultPreviousDayN).filter((key) => key.includes('total')).forEach(key => { const dimension = `daily${key.slice(5)}` From 9541ac5e46380e9f51e823565c74bfbfaa5fe6f8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 5 Mar 2024 16:14:03 +0000 Subject: [PATCH 0017/1590] add blast --- fees/banana-gun-trading.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/fees/banana-gun-trading.ts b/fees/banana-gun-trading.ts index 5e8a5009c0..83b53fba02 100644 --- a/fees/banana-gun-trading.ts +++ b/fees/banana-gun-trading.ts @@ -64,6 +64,25 @@ const fethcFeesSolana = async (timestamp: number, _: ChainBlocks, options: Fetch } } +const fetchBlats = async (timestamp: number, _: ChainBlocks, options: FetchOptions): Promise => { + const dailyFees = options.createBalances(); + const dailyRevenue = options.createBalances(); + const logs = await options.getLogs({ + topic: '0x72015ace03712f361249380657b3d40777dd8f8a686664cab48afd9dbbe4499f', + target: '0x461efe0100be0682545972ebfc8b4a13253bd602', + }); + logs.map((log: any) => { + const data = log.data.replace('0x', ''); + const gasToken = data.slice(0, 64); + dailyFees.addGasToken(Number('0x' + gasToken)); + }); + return { + dailyFees: dailyFees, + dailyRevenue: dailyRevenue, + timestamp + } +} + const adapter: SimpleAdapter = { adapter: { [CHAIN.ETHEREUM]: { @@ -75,6 +94,10 @@ const adapter: SimpleAdapter = { runAtCurrTime: true, start: 1685577600, }, + [CHAIN.BLAST]: { + fetch: fetchBlats, + start: 1685577600, + } }, isExpensiveAdapter: true, }; From a791bea25a852d01e089b99908be71a2bfd5d165 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 5 Mar 2024 16:55:16 +0000 Subject: [PATCH 0018/1590] fix logs --- fees/banana-gun-trading.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/banana-gun-trading.ts b/fees/banana-gun-trading.ts index 83b53fba02..30ec615dd5 100644 --- a/fees/banana-gun-trading.ts +++ b/fees/banana-gun-trading.ts @@ -14,7 +14,7 @@ const fetch: any = async (timestamp: number, _: any, options: FetchOptions): Pro FROM ethereum.event_logs WHERE - block_number > 17345415 + block_number > 19170281 AND contract_address IN ( SELECT DISTINCT address FROM ethereum.traces From 135b6b24ad9dfc8711f14f548daba1f62d9a6315 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 5 Mar 2024 16:58:28 +0000 Subject: [PATCH 0019/1590] morreeeee --- dexs/3xcalibur/index.ts | 1 + dexs/ascent/index.ts | 1 + dexs/auragi/index.ts | 1 + dexs/balancer/index.ts | 8 ++++---- dexs/carthage/index.ts | 1 + dexs/cherryswap/index.ts | 1 + dexs/clipper/index.ts | 1 + dexs/crescent-swap/index.ts | 1 + dexs/cryptoswap/index.ts | 1 + dexs/elektrik/index.ts | 1 + dexs/fairyswap/index.ts | 1 + dexs/ferro/index.ts | 1 + dexs/forge/index.ts | 1 + dexs/hadouken-amm/index.ts | 1 + dexs/holdr/index.ts | 1 + dexs/integral/index.ts | 1 + dexs/katana/index.ts | 1 + dexs/klex-finance/index.ts | 1 + dexs/knightswap-finance/index.ts | 1 + dexs/koyo/index.ts | 1 + dexs/kyberswap/index.ts | 10 +++++----- dexs/mimo/index.ts | 1 + dexs/mobius-money/index.ts | 1 + dexs/mooniswap/index.ts | 1 + dexs/okcswap/index.ts | 1 + dexs/pegasys-v3/index.ts | 1 + dexs/radioshack/index.ts | 1 + dexs/reax-one-dex/index.ts | 1 + dexs/saddle-finance/index.ts | 1 + dexs/sobal/index.ts | 1 + dexs/soulswap/index.ts | 1 + dexs/spiritswap/index.ts | 1 + dexs/spookyswap/index.ts | 1 + dexs/sushiswap/classic.ts | 5 +++-- dexs/swaap/index.ts | 1 + dexs/templedao-trade/index.ts | 1 + dexs/traderjoe/index.ts | 1 + dexs/velodrome/index.ts | 9 +++++---- dexs/verse/index.ts | 1 + dexs/viperswap/index.ts | 1 + dexs/voltswap/index.ts | 1 + dexs/wardenswap/index.ts | 1 + dexs/wavelength-dao/index.ts | 1 + dexs/whaleswap/index.ts | 1 + dexs/wojak-finance/index.ts | 1 + dexs/woofi/index.ts | 1 + dexs/yieldfields/index.ts | 1 + dexs/zyberswap/index.ts | 1 + helpers/getUniSubgraphVolume.ts | 28 +++++++++++++++------------- options/lyra/index.ts | 1 + 50 files changed, 77 insertions(+), 28 deletions(-) diff --git a/dexs/3xcalibur/index.ts b/dexs/3xcalibur/index.ts index 279b09af12..df7b06c750 100644 --- a/dexs/3xcalibur/index.ts +++ b/dexs/3xcalibur/index.ts @@ -20,6 +20,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: graphs(CHAIN.ARBITRUM), diff --git a/dexs/ascent/index.ts b/dexs/ascent/index.ts index a4cee08c5e..7eef0dc886 100644 --- a/dexs/ascent/index.ts +++ b/dexs/ascent/index.ts @@ -41,6 +41,7 @@ const graphsV3 = getChainVolume({ const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: { [CHAIN.EON]: { diff --git a/dexs/auragi/index.ts b/dexs/auragi/index.ts index 97164ab902..26ee709ebc 100644 --- a/dexs/auragi/index.ts +++ b/dexs/auragi/index.ts @@ -20,6 +20,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: graphs(CHAIN.ARBITRUM), diff --git a/dexs/balancer/index.ts b/dexs/balancer/index.ts index bda454de3e..422002420a 100644 --- a/dexs/balancer/index.ts +++ b/dexs/balancer/index.ts @@ -1,6 +1,6 @@ import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; -import { BaseAdapter, BreakdownAdapter, ChainEndpoints, FetchResultVolume } from "../../adapters/types"; +import { BaseAdapter, BreakdownAdapter, ChainEndpoints, FetchResultV2, FetchResultVolume, FetchV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; @@ -37,8 +37,8 @@ interface IPoolSnapshot { const v2Graphs = (chain: Chain) => { - return async (timestamp: number): Promise => { - const startTimestamp = getTimestampAtStartOfDayUTC(timestamp) + return async ({ endTimestamp }): Promise => { + const startTimestamp = getTimestampAtStartOfDayUTC(endTimestamp) const fromTimestamp = startTimestamp - 60 * 60 * 24 const toTimestamp = startTimestamp const graphQuery = gql @@ -62,7 +62,6 @@ const v2Graphs = (chain: Chain) => { return { dailyVolume: `${dailyVolume}`, - timestamp, }; }; }; @@ -76,6 +75,7 @@ const v1graphs = getChainVolume({ }); const adapter: BreakdownAdapter = { + version: 2, breakdown: { v1: { [CHAIN.ETHEREUM]: { diff --git a/dexs/carthage/index.ts b/dexs/carthage/index.ts index 576b76ad83..4d5de83f59 100644 --- a/dexs/carthage/index.ts +++ b/dexs/carthage/index.ts @@ -33,6 +33,7 @@ const v3Graphs = getChainVolume({ }); const adapter: BreakdownAdapter = { + version: 2, breakdown: { v3: { [CANDLE]: { diff --git a/dexs/cherryswap/index.ts b/dexs/cherryswap/index.ts index 1908294c87..eea87da652 100644 --- a/dexs/cherryswap/index.ts +++ b/dexs/cherryswap/index.ts @@ -56,6 +56,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.OKEXCHAIN]: { fetch: graphs(CHAIN.OKEXCHAIN), diff --git a/dexs/clipper/index.ts b/dexs/clipper/index.ts index 546b4d3ec6..cf50cae129 100644 --- a/dexs/clipper/index.ts +++ b/dexs/clipper/index.ts @@ -26,6 +26,7 @@ const graphs = getChainVolume({ const adapter: SimpleAdapter = { + version: 2, adapter: Object.keys(endpoints).reduce((acc, chain: any) => { return { ...acc, diff --git a/dexs/crescent-swap/index.ts b/dexs/crescent-swap/index.ts index 5bc0e73a8f..200a407275 100644 --- a/dexs/crescent-swap/index.ts +++ b/dexs/crescent-swap/index.ts @@ -19,6 +19,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: graphs(CHAIN.ARBITRUM), diff --git a/dexs/cryptoswap/index.ts b/dexs/cryptoswap/index.ts index 41009b24f3..de8f4963ee 100644 --- a/dexs/cryptoswap/index.ts +++ b/dexs/cryptoswap/index.ts @@ -27,6 +27,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BSC]: { fetch: graphs(CHAIN.BSC), diff --git a/dexs/elektrik/index.ts b/dexs/elektrik/index.ts index 799229d408..b7f0e0f974 100644 --- a/dexs/elektrik/index.ts +++ b/dexs/elektrik/index.ts @@ -19,6 +19,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.LIGHTLINK_PHOENIX]: { fetch: graphs(CHAIN.LIGHTLINK_PHOENIX), diff --git a/dexs/fairyswap/index.ts b/dexs/fairyswap/index.ts index 7a95960946..22c14d3349 100644 --- a/dexs/fairyswap/index.ts +++ b/dexs/fairyswap/index.ts @@ -56,6 +56,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.FINDORA]: { fetch: graphs(CHAIN.FINDORA), diff --git a/dexs/ferro/index.ts b/dexs/ferro/index.ts index 672344e266..9a8925d1d0 100644 --- a/dexs/ferro/index.ts +++ b/dexs/ferro/index.ts @@ -21,6 +21,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.CRONOS]: { fetch: graphs(CHAIN.CRONOS), diff --git a/dexs/forge/index.ts b/dexs/forge/index.ts index 27aab5e22c..a41be4dc7b 100644 --- a/dexs/forge/index.ts +++ b/dexs/forge/index.ts @@ -22,6 +22,7 @@ const v1Graph = getChainVolume({ const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.EVMOS]: { fetch: v1Graph(CHAIN.EVMOS), diff --git a/dexs/hadouken-amm/index.ts b/dexs/hadouken-amm/index.ts index 8a3282276f..1656f2ee32 100644 --- a/dexs/hadouken-amm/index.ts +++ b/dexs/hadouken-amm/index.ts @@ -24,6 +24,7 @@ const v1graphs = getChainVolume({ const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.GODWOKEN_V1]: { fetch: v1graphs(CHAIN.GODWOKEN_V1 as Chain), diff --git a/dexs/holdr/index.ts b/dexs/holdr/index.ts index 135ea7495a..87f32a937a 100644 --- a/dexs/holdr/index.ts +++ b/dexs/holdr/index.ts @@ -23,6 +23,7 @@ const v1graphs = getChainVolume({ const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.AURORA]: { fetch: v1graphs(CHAIN.AURORA as Chain), diff --git a/dexs/integral/index.ts b/dexs/integral/index.ts index a1269a2663..4f3d734774 100644 --- a/dexs/integral/index.ts +++ b/dexs/integral/index.ts @@ -32,6 +32,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: chains.reduce((acc, chain) => { return { ...acc, diff --git a/dexs/katana/index.ts b/dexs/katana/index.ts index 932313b640..86d1260100 100644 --- a/dexs/katana/index.ts +++ b/dexs/katana/index.ts @@ -64,6 +64,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [RONIN]: { fetch: graphs(RONIN), diff --git a/dexs/klex-finance/index.ts b/dexs/klex-finance/index.ts index f33904fc51..c95bff5e4a 100644 --- a/dexs/klex-finance/index.ts +++ b/dexs/klex-finance/index.ts @@ -25,6 +25,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: Object.keys(endpoints).reduce((acc, chain: any) => { return { ...acc, diff --git a/dexs/knightswap-finance/index.ts b/dexs/knightswap-finance/index.ts index 1473ad90b7..97fa01d267 100644 --- a/dexs/knightswap-finance/index.ts +++ b/dexs/knightswap-finance/index.ts @@ -23,6 +23,7 @@ const v2Graph = getChainVolume({ const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BSC]: { fetch: v2Graph(CHAIN.BSC), diff --git a/dexs/koyo/index.ts b/dexs/koyo/index.ts index ff4812bb77..fa6b8d074a 100644 --- a/dexs/koyo/index.ts +++ b/dexs/koyo/index.ts @@ -18,6 +18,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BOBA]: { fetch: graphs(CHAIN.BOBA), diff --git a/dexs/kyberswap/index.ts b/dexs/kyberswap/index.ts index 1de592c7ee..2de8e244d3 100644 --- a/dexs/kyberswap/index.ts +++ b/dexs/kyberswap/index.ts @@ -1,6 +1,6 @@ import ADDRESSES from '../../helpers/coreAssets.json' import request from "graphql-request"; -import { BaseAdapter, BreakdownAdapter, FetchResultVolume } from "../../adapters/types"; +import { BaseAdapter, BreakdownAdapter, FetchOptions, FetchResultVolume } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { @@ -210,15 +210,14 @@ const customeElasicVolumeFunctions: {[s: Chain]: any} = { function buildFromEndpoints(endpoints: typeof classicEndpoints, graphs: typeof classicGraphs, volumeField:string, dailyDataField:string, isElastic: boolean){ return Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { - fetch: async (timestamp: number) => { - const a = (customeElasicVolumeFunctions[chain] !== undefined) && isElastic ? await customeElasicVolumeFunctions[chain](timestamp) : (await graphs(chain as any)(timestamp, {})) - const elasticV2 = (kyberswapElasticV2.adapter[chain as Chain]?.fetch != undefined && isElastic) ? (await kyberswapElasticV2.adapter[chain as Chain]?.fetch(timestamp, {})) : {} as FetchResultVolume; + fetch: async (options: FetchOptions) => { + const a = (customeElasicVolumeFunctions[chain] !== undefined) && isElastic ? await customeElasicVolumeFunctions[chain](options.endTimestamp) : (await graphs(chain as any)(options)) + const elasticV2 = (kyberswapElasticV2.adapter[chain as Chain]?.fetch != undefined && isElastic) ? (await kyberswapElasticV2.adapter[chain as Chain]?.fetch(options as any, {}, options)) : {} as FetchResultVolume; const dailyVolume = Number(a.dailyVolume) + Number(elasticV2?.dailyVolume || 0) const totalVolume = Number(a.totalVolume) + Number(elasticV2?.totalVolume || 0) return { dailyVolume: `${dailyVolume}`, totalVolume: chain === CHAIN.ARBITRUM ? undefined : `${totalVolume}`, - timestamp }; }, start: getStartTimestamp({ @@ -233,6 +232,7 @@ function buildFromEndpoints(endpoints: typeof classicEndpoints, graphs: typeof c } const adapter: BreakdownAdapter = { + version: 2, breakdown: { classic: buildFromEndpoints(classicEndpoints, classicGraphs, DEFAULT_DAILY_VOLUME_FIELD, "dmmDayDatas", false), elastic: buildFromEndpoints(elasticEndpoints, elasticGraphs, "volumeUSD", "kyberSwapDayDatas", true) diff --git a/dexs/mimo/index.ts b/dexs/mimo/index.ts index b0a49e34b1..7e92afd004 100644 --- a/dexs/mimo/index.ts +++ b/dexs/mimo/index.ts @@ -24,6 +24,7 @@ const graphs = getChainVolume({ const adapter: SimpleAdapter = { + version: 2, adapter: Object.keys(endpoints).reduce((acc, chain: any) => { return { ...acc, diff --git a/dexs/mobius-money/index.ts b/dexs/mobius-money/index.ts index 62716277cb..b82ecc5107 100644 --- a/dexs/mobius-money/index.ts +++ b/dexs/mobius-money/index.ts @@ -22,6 +22,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.CELO]: { fetch: graphs(CHAIN.CELO), diff --git a/dexs/mooniswap/index.ts b/dexs/mooniswap/index.ts index 9eda0ad558..a4cfaf84a9 100644 --- a/dexs/mooniswap/index.ts +++ b/dexs/mooniswap/index.ts @@ -25,6 +25,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [ETHEREUM]: { fetch: graphs(ETHEREUM), diff --git a/dexs/okcswap/index.ts b/dexs/okcswap/index.ts index a3c6e271b3..000558e8a0 100644 --- a/dexs/okcswap/index.ts +++ b/dexs/okcswap/index.ts @@ -55,6 +55,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.OKEXCHAIN]: { fetch: graphs(CHAIN.OKEXCHAIN), diff --git a/dexs/pegasys-v3/index.ts b/dexs/pegasys-v3/index.ts index c8b7257fa5..34927e4626 100644 --- a/dexs/pegasys-v3/index.ts +++ b/dexs/pegasys-v3/index.ts @@ -19,6 +19,7 @@ const graphs = getChainVolume({ }); // rollux const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ROLLUX]: { fetch: graphs(CHAIN.ROLLUX), diff --git a/dexs/radioshack/index.ts b/dexs/radioshack/index.ts index 6122343855..9b7ef01513 100644 --- a/dexs/radioshack/index.ts +++ b/dexs/radioshack/index.ts @@ -24,6 +24,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.POLYGON]: { fetch: graphs(CHAIN.POLYGON), diff --git a/dexs/reax-one-dex/index.ts b/dexs/reax-one-dex/index.ts index 392352c72c..167d73dca9 100644 --- a/dexs/reax-one-dex/index.ts +++ b/dexs/reax-one-dex/index.ts @@ -24,6 +24,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: Object.keys(endpoints).reduce((acc, chain: any) => { return { ...acc, diff --git a/dexs/saddle-finance/index.ts b/dexs/saddle-finance/index.ts index d952a8cc8b..70634220cd 100644 --- a/dexs/saddle-finance/index.ts +++ b/dexs/saddle-finance/index.ts @@ -22,6 +22,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: graphs(CHAIN.ARBITRUM), diff --git a/dexs/sobal/index.ts b/dexs/sobal/index.ts index 94deb2599f..b34281f9e5 100644 --- a/dexs/sobal/index.ts +++ b/dexs/sobal/index.ts @@ -23,6 +23,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.NEON]: { fetch: graphs(CHAIN.NEON), diff --git a/dexs/soulswap/index.ts b/dexs/soulswap/index.ts index fe4a658be1..19838476a9 100644 --- a/dexs/soulswap/index.ts +++ b/dexs/soulswap/index.ts @@ -45,6 +45,7 @@ const volume = Object.keys(endpoints).reduce( ); const adapter: SimpleAdapter = { + version: 2, adapter: volume, }; diff --git a/dexs/spiritswap/index.ts b/dexs/spiritswap/index.ts index deacfecce3..572b1f7248 100644 --- a/dexs/spiritswap/index.ts +++ b/dexs/spiritswap/index.ts @@ -25,6 +25,7 @@ const graphs = getChainVolumeWithGasToken({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { fantom: { fetch: graphs("fantom"), diff --git a/dexs/spookyswap/index.ts b/dexs/spookyswap/index.ts index 0635d1441d..0f9dde0882 100644 --- a/dexs/spookyswap/index.ts +++ b/dexs/spookyswap/index.ts @@ -32,6 +32,7 @@ const graphsV3 = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [FANTOM]: { fetch: graphs(FANTOM), diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index daebdfb3f7..d21e9ace31 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -7,6 +7,7 @@ import { getGraphDimensions } from "../../helpers/getUniSubgraph"; import { getChainVolumeWithGasToken, } from "../../helpers/getUniSubgraphVolume"; +import { FetchOptions } from "../../adapters/types"; const blacklistTokens = { [CHAIN.ARBITRUM]: [ @@ -150,8 +151,8 @@ const fantomGraphs = getChainVolumeWithGasToken({ priceToken: "coingecko:fantom" } as any); classic[CHAIN.FANTOM] = { - fetch: async (timestamp: number) => { - const values = await fantomGraphs(CHAIN.FANTOM)(timestamp, {}); + fetch: async (options: FetchOptions) => { + const values = await fantomGraphs(CHAIN.FANTOM)(options); const vol = Number(values.dailyVolume) return { ...values, diff --git a/dexs/swaap/index.ts b/dexs/swaap/index.ts index 226e586837..5b238513a1 100644 --- a/dexs/swaap/index.ts +++ b/dexs/swaap/index.ts @@ -143,6 +143,7 @@ const v1graphs = getChainVolume({ }); const adapter: BreakdownAdapter = { + version: 2, breakdown: { v1: { [CHAIN.POLYGON]: { diff --git a/dexs/templedao-trade/index.ts b/dexs/templedao-trade/index.ts index a09339c6c0..ba0d01019a 100644 --- a/dexs/templedao-trade/index.ts +++ b/dexs/templedao-trade/index.ts @@ -22,6 +22,7 @@ const graphs = getChainVolume({ const adapter: SimpleAdapter = { + version: 2, adapter: Object.keys(endpoints).reduce((acc, chain: any) => { return { ...acc, diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index 376566db99..0c1c879b25 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -68,6 +68,7 @@ const graphsV2 = getChainVolume({ }); const adapter: BreakdownAdapter = { + version: 2, breakdown: { v1: { [CHAIN.AVAX]: { diff --git a/dexs/velodrome/index.ts b/dexs/velodrome/index.ts index 79619e8d73..233394147a 100644 --- a/dexs/velodrome/index.ts +++ b/dexs/velodrome/index.ts @@ -1,4 +1,4 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; @@ -19,18 +19,19 @@ const graphs = getChainVolume({ }, }); + const fetch = (chain: Chain) => { - return async (timestamp: number) => { - const [v1] = await Promise.all([graphs(chain)(timestamp, {})]) + return async (options: FetchOptions) => { + const [v1] = await Promise.all([graphs(chain)(options)]) const dailyVolume = Number(v1.dailyVolume); return { dailyVolume: `${dailyVolume}`, - timestamp } } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.OPTIMISM]: { fetch: fetch(CHAIN.OPTIMISM), diff --git a/dexs/verse/index.ts b/dexs/verse/index.ts index b293ad6bf0..eaa5dc7887 100644 --- a/dexs/verse/index.ts +++ b/dexs/verse/index.ts @@ -31,6 +31,7 @@ const volumeAdapter: BaseAdapter = { } const adapter: SimpleAdapter = { + version: 2, adapter: volumeAdapter, } diff --git a/dexs/viperswap/index.ts b/dexs/viperswap/index.ts index 3196836015..08d2467051 100644 --- a/dexs/viperswap/index.ts +++ b/dexs/viperswap/index.ts @@ -56,6 +56,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.HARMONY]: { diff --git a/dexs/voltswap/index.ts b/dexs/voltswap/index.ts index 6fbb381413..4ea7d9699c 100644 --- a/dexs/voltswap/index.ts +++ b/dexs/voltswap/index.ts @@ -26,6 +26,7 @@ const graphs = getChainVolume({ }); const adapter: BreakdownAdapter = { + version: 2, breakdown: { v1: { [DISABLED_ADAPTER_KEY]: disabledAdapter, diff --git a/dexs/wardenswap/index.ts b/dexs/wardenswap/index.ts index e547013e41..4dd2cc7a67 100644 --- a/dexs/wardenswap/index.ts +++ b/dexs/wardenswap/index.ts @@ -30,6 +30,7 @@ const graphs = getChainVolume({ const adapter: SimpleAdapter = { + version: 2, adapter: Object.keys(endpoints).reduce((acc, chain: any) => { return { ...acc, diff --git a/dexs/wavelength-dao/index.ts b/dexs/wavelength-dao/index.ts index 48c426ec91..9aab70f54c 100644 --- a/dexs/wavelength-dao/index.ts +++ b/dexs/wavelength-dao/index.ts @@ -49,6 +49,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.VELAS]: { fetch: graphs(CHAIN.VELAS), diff --git a/dexs/whaleswap/index.ts b/dexs/whaleswap/index.ts index a087b00bf4..7598c16549 100644 --- a/dexs/whaleswap/index.ts +++ b/dexs/whaleswap/index.ts @@ -30,6 +30,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [BSC]: { fetch: graphs(BSC), diff --git a/dexs/wojak-finance/index.ts b/dexs/wojak-finance/index.ts index b556b6a315..8d017cbc7f 100644 --- a/dexs/wojak-finance/index.ts +++ b/dexs/wojak-finance/index.ts @@ -61,6 +61,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.DOGECHAIN]: { diff --git a/dexs/woofi/index.ts b/dexs/woofi/index.ts index ed2071f30a..f6b3429281 100644 --- a/dexs/woofi/index.ts +++ b/dexs/woofi/index.ts @@ -78,6 +78,7 @@ const volume = Object.keys(endpoints).reduce( ); const adapter: SimpleAdapter = { + version: 2, adapter: volume, }; export default adapter; diff --git a/dexs/yieldfields/index.ts b/dexs/yieldfields/index.ts index 6337a35770..e82c815f8d 100644 --- a/dexs/yieldfields/index.ts +++ b/dexs/yieldfields/index.ts @@ -29,6 +29,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [BSC]: { fetch: graphs(BSC), diff --git a/dexs/zyberswap/index.ts b/dexs/zyberswap/index.ts index ad4aa2b261..c5297cec94 100644 --- a/dexs/zyberswap/index.ts +++ b/dexs/zyberswap/index.ts @@ -54,6 +54,7 @@ const graphsStable = getChainVolume({ const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: { [CHAIN.ARBITRUM]: { diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index 7991c680fe..2761ffcc52 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -1,7 +1,7 @@ import { Chain } from "@defillama/sdk/build/general"; import { request, gql } from "graphql-request"; import { getBlock } from "./getBlock"; -import { BaseAdapter, ChainBlocks } from "../adapters/types"; +import { BaseAdapter, ChainBlocks, FetchOptions } from "../adapters/types"; import { SimpleAdapter } from "../adapters/types"; import { DEFAULT_DATE_FIELD, getStartTimestamp } from "./getStartTimestamp"; import { Balances } from "@defillama/sdk"; @@ -50,7 +50,7 @@ interface IGetChainVolumeParams { hasTotalVolume?: boolean getCustomBlock?: (timestamp: number) => Promise } - +// HERE function getChainVolume({ graphUrls, totalVolume = { @@ -93,12 +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 block = - (getCustomBlock ? - await getCustomBlock(timestamp).catch(e => console.log(e.message)) : - await getBlock(timestamp, chain, chainBlocks).catch(e => console.log(e.message))) ?? undefined; - const id = getUniswapDateId(new Date(timestamp * 1000)); + return async (options: FetchOptions) => { + const { endTimestamp, getEndBlock } = 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 @@ -115,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) { @@ -127,7 +128,7 @@ function getChainVolume({ } return { - timestamp, + timestamp: endTimestamp, block, totalVolume: graphResTotal ? graphResTotal[totalVolume.factory]?.reduce((total: number, factory: any) => total + Number(factory[totalVolume.field]), 0) : undefined, dailyVolume: dailyVolumeValue, @@ -155,14 +156,15 @@ 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 balances = new Balances({ chain, timestamp}) + const timestamp = options.endTimestamp + const balances = new Balances({ chain, timestamp }) balances.add(priceToken, Number(dailyVolume).toFixed(0), { skipChain: true }) return { diff --git a/options/lyra/index.ts b/options/lyra/index.ts index 26e5224d05..ade2020a01 100644 --- a/options/lyra/index.ts +++ b/options/lyra/index.ts @@ -14,6 +14,7 @@ const subgraph = getChainVolume({ }); const adapters: SimpleAdapter = { + version: 2, adapter: Object.keys(endpoints).reduce((acc, chain) => { return { ...acc, From 8d259c6b75cd94bbe62aa35a7d8d673be9b71111 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 5 Mar 2024 16:59:53 +0000 Subject: [PATCH 0020/1590] missing one --- dexs/champagneswap/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/champagneswap/index.ts b/dexs/champagneswap/index.ts index 480c7938a4..9e432d3f78 100644 --- a/dexs/champagneswap/index.ts +++ b/dexs/champagneswap/index.ts @@ -29,6 +29,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [BSC]: { From 057326d5bcc6fe6dddf91a8a4431cfc28c0dd7cd Mon Sep 17 00:00:00 2001 From: skords Date: Tue, 5 Mar 2024 23:56:50 +0530 Subject: [PATCH 0021/1590] avantis --- dexs/avantis/index.ts | 58 ++++++++++++++++++++++++++++++++++++++++++ fees/avantis/index.ts | 59 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 dexs/avantis/index.ts create mode 100644 fees/avantis/index.ts diff --git a/dexs/avantis/index.ts b/dexs/avantis/index.ts new file mode 100644 index 0000000000..adfd6c0346 --- /dev/null +++ b/dexs/avantis/index.ts @@ -0,0 +1,58 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { CHAIN } from "../../helpers/chains"; +import { SimpleAdapter } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; +import { FetchResultVolume } from "../../adapters/types"; + +interface IData { + success: boolean; + cumulativeVolume: number; + history: { + date: string; + volume: number; + buyVolume: number; + sellVolume: number; + cumulativeVolume: number; + }[]; +} + +const API_URL = "https://api.avantisfi.com/v1"; + +const fetchData = (_: Chain) => { + return async (timestamp: number): Promise => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); + + // Convert timestamp to Date object and format to YYYY-MM-DD in UTC + const date = new Date(todaysTimestamp * 1000); + const dateStr = date.toISOString().split("T")[0]; + + // Find difference in days between today and the timestamp + const today = new Date(); + const diffTime = Math.abs(today.getTime() - date.getTime()); + const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); + + const url = `${API_URL}/history/analytics/daily-volumes/${diffDays}`; + const value: IData = await fetchURL(url); + if (!value.success) throw new Error("Failed to fetch data"); + + const dailyVolume = value.history.find((d) => d.date === dateStr)?.volume; + const totalVolume = value.history[value.history.length - 1]?.cumulativeVolume; + return { + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + totalVolume: totalVolume ? `${totalVolume}` : undefined, + timestamp: todaysTimestamp, + }; + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.BASE]: { + fetch: fetchData(CHAIN.BASE), + start: 1706313600, + }, + }, +}; + +export default adapter; diff --git a/fees/avantis/index.ts b/fees/avantis/index.ts new file mode 100644 index 0000000000..3fcaa4d937 --- /dev/null +++ b/fees/avantis/index.ts @@ -0,0 +1,59 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { CHAIN } from "../../helpers/chains"; +import { SimpleAdapter } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; +import { FetchResultFees } from "../../adapters/types"; + +interface IData { + success: boolean; + cumulativeFee: number; + history: { + date: string; + totalFees: number; + cumulativeFee: number; + totalClosingFee: number; + totalOpeningFee: number; + totalRolloverFee: number; + }[]; +} + +const API_URL = "https://api.avantisfi.com/v1"; + +const fetchData = (_: Chain) => { + return async (timestamp: number): Promise => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); + + // Convert timestamp to Date object and format to YYYY-MM-DD in UTC + const date = new Date(todaysTimestamp * 1000); + const dateStr = date.toISOString().split("T")[0]; + + // Find difference in days between today and the timestamp + const today = new Date(); + const diffTime = Math.abs(today.getTime() - date.getTime()); + const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); + + const url = `${API_URL}/history/analytics/total-fees/${diffDays}`; + const value: IData = await fetchURL(url); + if (!value.success) throw new Error("Failed to fetch data"); + + const dailyFee = value.history.find((d) => d.date === dateStr)?.totalFees; + const totalFees = value.history[value.history.length - 1]?.cumulativeFee; + return { + dailyUserFees: dailyFee ? `${dailyFee}` : undefined, + totalUserFees: totalFees ? `${totalFees}` : undefined, + timestamp: todaysTimestamp, + }; + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.BASE]: { + fetch: fetchData(CHAIN.BASE), + start: 1706313600, + }, + }, +}; + +export default adapter; From a988e41c09c76e11fe21ccbadb09e19e89abafbb Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 6 Mar 2024 05:35:30 +0000 Subject: [PATCH 0022/1590] disable PHANTASMA --- fees/ghostmarket/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fees/ghostmarket/index.ts b/fees/ghostmarket/index.ts index bb868b2a30..182e055bdc 100644 --- a/fees/ghostmarket/index.ts +++ b/fees/ghostmarket/index.ts @@ -92,13 +92,13 @@ const adapter: Adapter = { methodology } }, - [CHAIN.PHANTASMA]: { - fetch: apis(endpoints)(CHAIN.PHANTASMA), - start: 1577664000, - meta: { - methodology - } - }, + // [CHAIN.PHANTASMA]: { + // fetch: apis(endpoints)(CHAIN.PHANTASMA), + // start: 1577664000, + // meta: { + // methodology + // } + // }, [CHAIN.BASE]: { fetch: apis(endpoints)(CHAIN.BASE), start: 1691660245, From a46529d8bbbf887651719318e116f8c0597b1d7f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 6 Mar 2024 13:48:45 +0000 Subject: [PATCH 0023/1590] fix fees --- fees/ghostmarket/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fees/ghostmarket/index.ts b/fees/ghostmarket/index.ts index 182e055bdc..bb868b2a30 100644 --- a/fees/ghostmarket/index.ts +++ b/fees/ghostmarket/index.ts @@ -92,13 +92,13 @@ const adapter: Adapter = { methodology } }, - // [CHAIN.PHANTASMA]: { - // fetch: apis(endpoints)(CHAIN.PHANTASMA), - // start: 1577664000, - // meta: { - // methodology - // } - // }, + [CHAIN.PHANTASMA]: { + fetch: apis(endpoints)(CHAIN.PHANTASMA), + start: 1577664000, + meta: { + methodology + } + }, [CHAIN.BASE]: { fetch: apis(endpoints)(CHAIN.BASE), start: 1691660245, From 46f24f59ab5b2660962d1e1e90fb031bc65a8352 Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Wed, 6 Mar 2024 22:17:47 +0700 Subject: [PATCH 0024/1590] add volume for DackieSwap on Blast --- dexs/dackieswap-v2/index.ts | 10 +++------- dexs/dackieswap/index.ts | 7 +++++++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/dexs/dackieswap-v2/index.ts b/dexs/dackieswap-v2/index.ts index ce39b804fd..b7c58c4155 100644 --- a/dexs/dackieswap-v2/index.ts +++ b/dexs/dackieswap-v2/index.ts @@ -1,10 +1,4 @@ import customBackfill from "../../helpers/customBackfill"; -import { - DEFAULT_TOTAL_VOLUME_FACTORY, - DEFAULT_TOTAL_VOLUME_FIELD, - DEFAULT_DAILY_VOLUME_FACTORY, - DEFAULT_DAILY_VOLUME_FIELD -} from "../../helpers/getUniSubgraphVolume"; import {CHAIN} from "../../helpers/chains"; import type {ChainEndpoints, SimpleAdapter} from "../../adapters/types"; import type {Chain} from "@defillama/sdk/build/general"; @@ -15,6 +9,7 @@ const endpoints: ChainEndpoints = { [CHAIN.BASE]: "https://api.studio.thegraph.com/query/50473/subgraphs-exchange-v2/version/latest", [CHAIN.OPTIMISM]: "https://api.studio.thegraph.com/query/50473/v2-optimism/version/latest", [CHAIN.ARBITRUM]: "https://api.studio.thegraph.com/query/50473/v2-arbitrum/version/latest", + [CHAIN.BLAST]: "https://api.studio.thegraph.com/query/50473/v2-blast/version/latest", }; // Fetch function to query the subgraphs @@ -56,7 +51,8 @@ const adapter: SimpleAdapter = { chain === CHAIN.BASE ? 1690173000 : chain === CHAIN.OPTIMISM ? 1705993200 : chain === CHAIN.ARBITRUM ? 1707885300 - : 0, + : chain === CHAIN.BLAST ? 193913 + : 0, customBackfill: customBackfill(chain, graphs), meta: {methodology}, } diff --git a/dexs/dackieswap/index.ts b/dexs/dackieswap/index.ts index 7e5a2406f6..2c2f0e9eec 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -10,6 +10,8 @@ const v3Endpoint = { "https://api.studio.thegraph.com/query/50473/v3-optimism/version/latest", [CHAIN.ARBITRUM]: "https://api.studio.thegraph.com/query/50473/v3-arbitrum/version/latest", + [CHAIN.BLAST]: + "https://api.studio.thegraph.com/query/50473/v3-blast/version/latest", }; const VOLUME_USD = "volumeUSD"; @@ -36,6 +38,7 @@ const v3StartTimes = { [CHAIN.BASE]: 1691712000, [CHAIN.OPTIMISM]: 1705993200, [CHAIN.ARBITRUM]: 1707885300, + [CHAIN.BLAST]: 193913, } as IJSON; const adapter: SimpleAdapter = { @@ -52,6 +55,10 @@ const adapter: SimpleAdapter = { fetch: v3Graph(CHAIN.ARBITRUM), start: async () => v3StartTimes[CHAIN.ARBITRUM] }, + [CHAIN.BLAST]: { + fetch: v3Graph(CHAIN.BLAST), + start: async () => v3StartTimes[CHAIN.BLAST] + }, }, }; From 9315601a6aaa0734a7e821ee86c05edcac840ac9 Mon Sep 17 00:00:00 2001 From: thenaursa Date: Wed, 6 Mar 2024 16:46:12 +0100 Subject: [PATCH 0025/1590] fusion subgraph replace --- dexs/thena-v3/index.ts | 4 +- fees/thena-v3.ts | 6 +- yarn.lock | 2399 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2404 insertions(+), 5 deletions(-) create mode 100644 yarn.lock diff --git a/dexs/thena-v3/index.ts b/dexs/thena-v3/index.ts index 813d85c7b8..7ecd6d7733 100644 --- a/dexs/thena-v3/index.ts +++ b/dexs/thena-v3/index.ts @@ -2,10 +2,10 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/thenaursa/thena-fusion" + [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/iliaazhel/thena-info" }, { factoriesName: "factories", - dayData: "fusionDayData", + dayData: "algebraDayData", dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); diff --git a/fees/thena-v3.ts b/fees/thena-v3.ts index 7c0224307e..cc0174be93 100644 --- a/fees/thena-v3.ts +++ b/fees/thena-v3.ts @@ -16,7 +16,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/thenaursa/thena-fusion" + [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/iliaazhel/thena-info" } const fetch = (chain: Chain) => { @@ -26,14 +26,14 @@ const fetch = (chain: Chain) => { const graphQuery = gql ` { - fusionDayData(id: ${dateId}) { + algebraDayData(id: ${dateId}) { id feesUSD } } `; - const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).fusionDayData; + const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).algebraDayData; const dailyFeeUSD = graphRes; const dailyFee = dailyFeeUSD?.feesUSD ? new BigNumber(dailyFeeUSD.feesUSD) : undefined if (dailyFee === undefined) return { timestamp } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..b6cfb32d24 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2399 @@ +# 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@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-s3@^3.400.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.525.0.tgz#965ed5b70c067d74c7a3c4aea26dfce53db4cd06" + integrity sha512-hoMGH8G9rezZDiJPsMjsyRVNfVHHa4u6lcZ09SQMmtFHWK0FUcC0DIKR5ripV5qGDbnV54i2JotXlLzAv0aNCQ== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.525.0" + "@aws-sdk/core" "3.525.0" + "@aws-sdk/credential-provider-node" "3.525.0" + "@aws-sdk/middleware-bucket-endpoint" "3.525.0" + "@aws-sdk/middleware-expect-continue" "3.523.0" + "@aws-sdk/middleware-flexible-checksums" "3.523.0" + "@aws-sdk/middleware-host-header" "3.523.0" + "@aws-sdk/middleware-location-constraint" "3.523.0" + "@aws-sdk/middleware-logger" "3.523.0" + "@aws-sdk/middleware-recursion-detection" "3.523.0" + "@aws-sdk/middleware-sdk-s3" "3.525.0" + "@aws-sdk/middleware-signing" "3.523.0" + "@aws-sdk/middleware-ssec" "3.523.0" + "@aws-sdk/middleware-user-agent" "3.525.0" + "@aws-sdk/region-config-resolver" "3.525.0" + "@aws-sdk/signature-v4-multi-region" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-endpoints" "3.525.0" + "@aws-sdk/util-user-agent-browser" "3.523.0" + "@aws-sdk/util-user-agent-node" "3.525.0" + "@aws-sdk/xml-builder" "3.523.0" + "@smithy/config-resolver" "^2.1.4" + "@smithy/core" "^1.3.5" + "@smithy/eventstream-serde-browser" "^2.1.3" + "@smithy/eventstream-serde-config-resolver" "^2.1.3" + "@smithy/eventstream-serde-node" "^2.1.3" + "@smithy/fetch-http-handler" "^2.4.3" + "@smithy/hash-blob-browser" "^2.1.3" + "@smithy/hash-node" "^2.1.3" + "@smithy/hash-stream-node" "^2.1.3" + "@smithy/invalid-dependency" "^2.1.3" + "@smithy/md5-js" "^2.1.3" + "@smithy/middleware-content-length" "^2.1.3" + "@smithy/middleware-endpoint" "^2.4.4" + "@smithy/middleware-retry" "^2.1.4" + "@smithy/middleware-serde" "^2.1.3" + "@smithy/middleware-stack" "^2.1.3" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/node-http-handler" "^2.4.1" + "@smithy/protocol-http" "^3.2.1" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/url-parser" "^2.1.3" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.4" + "@smithy/util-defaults-mode-node" "^2.2.3" + "@smithy/util-endpoints" "^1.1.4" + "@smithy/util-retry" "^2.1.3" + "@smithy/util-stream" "^2.1.3" + "@smithy/util-utf8" "^2.1.1" + "@smithy/util-waiter" "^2.1.3" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + +"@aws-sdk/client-sso-oidc@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.525.0.tgz#0f80242d997adc7cf259f50f9e590d515a123fac" + integrity sha512-zz13k/6RkjPSLmReSeGxd8wzGiiZa4Odr2Tv3wTcxClM4wOjD+zOgGv4Fe32b9AMqaueiCdjbvdu7AKcYxFA4A== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.525.0" + "@aws-sdk/core" "3.525.0" + "@aws-sdk/middleware-host-header" "3.523.0" + "@aws-sdk/middleware-logger" "3.523.0" + "@aws-sdk/middleware-recursion-detection" "3.523.0" + "@aws-sdk/middleware-user-agent" "3.525.0" + "@aws-sdk/region-config-resolver" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-endpoints" "3.525.0" + "@aws-sdk/util-user-agent-browser" "3.523.0" + "@aws-sdk/util-user-agent-node" "3.525.0" + "@smithy/config-resolver" "^2.1.4" + "@smithy/core" "^1.3.5" + "@smithy/fetch-http-handler" "^2.4.3" + "@smithy/hash-node" "^2.1.3" + "@smithy/invalid-dependency" "^2.1.3" + "@smithy/middleware-content-length" "^2.1.3" + "@smithy/middleware-endpoint" "^2.4.4" + "@smithy/middleware-retry" "^2.1.4" + "@smithy/middleware-serde" "^2.1.3" + "@smithy/middleware-stack" "^2.1.3" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/node-http-handler" "^2.4.1" + "@smithy/protocol-http" "^3.2.1" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/url-parser" "^2.1.3" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.4" + "@smithy/util-defaults-mode-node" "^2.2.3" + "@smithy/util-endpoints" "^1.1.4" + "@smithy/util-middleware" "^2.1.3" + "@smithy/util-retry" "^2.1.3" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/client-sso@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.525.0.tgz#2af5028a56a72a8067cb6b149ca1cc433beb9fa4" + integrity sha512-6KwGQWFoNLH1UupdWPFdKPfTgjSz1kN8/r8aCzuvvXBe4Pz+iDUZ6FEJzGWNc9AapjvZDNO1hs23slomM9rTaA== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.525.0" + "@aws-sdk/middleware-host-header" "3.523.0" + "@aws-sdk/middleware-logger" "3.523.0" + "@aws-sdk/middleware-recursion-detection" "3.523.0" + "@aws-sdk/middleware-user-agent" "3.525.0" + "@aws-sdk/region-config-resolver" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-endpoints" "3.525.0" + "@aws-sdk/util-user-agent-browser" "3.523.0" + "@aws-sdk/util-user-agent-node" "3.525.0" + "@smithy/config-resolver" "^2.1.4" + "@smithy/core" "^1.3.5" + "@smithy/fetch-http-handler" "^2.4.3" + "@smithy/hash-node" "^2.1.3" + "@smithy/invalid-dependency" "^2.1.3" + "@smithy/middleware-content-length" "^2.1.3" + "@smithy/middleware-endpoint" "^2.4.4" + "@smithy/middleware-retry" "^2.1.4" + "@smithy/middleware-serde" "^2.1.3" + "@smithy/middleware-stack" "^2.1.3" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/node-http-handler" "^2.4.1" + "@smithy/protocol-http" "^3.2.1" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/url-parser" "^2.1.3" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.4" + "@smithy/util-defaults-mode-node" "^2.2.3" + "@smithy/util-endpoints" "^1.1.4" + "@smithy/util-middleware" "^2.1.3" + "@smithy/util-retry" "^2.1.3" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/client-sts@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.525.0.tgz#5c59c39950f24d9fb4a42b226ada6a72955c0672" + integrity sha512-a8NUGRvO6rkfTZCbMaCsjDjLbERCwIUU9dIywFYcRgbFhkupJ7fSaZz3Het98U51M9ZbTEpaTa3fz0HaJv8VJw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.525.0" + "@aws-sdk/middleware-host-header" "3.523.0" + "@aws-sdk/middleware-logger" "3.523.0" + "@aws-sdk/middleware-recursion-detection" "3.523.0" + "@aws-sdk/middleware-user-agent" "3.525.0" + "@aws-sdk/region-config-resolver" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-endpoints" "3.525.0" + "@aws-sdk/util-user-agent-browser" "3.523.0" + "@aws-sdk/util-user-agent-node" "3.525.0" + "@smithy/config-resolver" "^2.1.4" + "@smithy/core" "^1.3.5" + "@smithy/fetch-http-handler" "^2.4.3" + "@smithy/hash-node" "^2.1.3" + "@smithy/invalid-dependency" "^2.1.3" + "@smithy/middleware-content-length" "^2.1.3" + "@smithy/middleware-endpoint" "^2.4.4" + "@smithy/middleware-retry" "^2.1.4" + "@smithy/middleware-serde" "^2.1.3" + "@smithy/middleware-stack" "^2.1.3" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/node-http-handler" "^2.4.1" + "@smithy/protocol-http" "^3.2.1" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/url-parser" "^2.1.3" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.4" + "@smithy/util-defaults-mode-node" "^2.2.3" + "@smithy/util-endpoints" "^1.1.4" + "@smithy/util-middleware" "^2.1.3" + "@smithy/util-retry" "^2.1.3" + "@smithy/util-utf8" "^2.1.1" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + +"@aws-sdk/core@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.525.0.tgz#710740ff96551e04f595fc156a40b54793a37b01" + integrity sha512-E3LtEtMWCriQOFZpVKpLYzbdw/v2PAOEAMhn2VRRZ1g0/g1TXzQrfhEU2yd8l/vQEJaCJ82ooGGg7YECviBUxA== + dependencies: + "@smithy/core" "^1.3.5" + "@smithy/protocol-http" "^3.2.1" + "@smithy/signature-v4" "^2.1.3" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-env@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.523.0.tgz#4bc04b32c15ff7237ba1de866b96ccea24e433c7" + integrity sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-http@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.525.0.tgz#3a785ea8724200596ad1a48cf8485658401eb589" + integrity sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/fetch-http-handler" "^2.4.3" + "@smithy/node-http-handler" "^2.4.1" + "@smithy/property-provider" "^2.1.3" + "@smithy/protocol-http" "^3.2.1" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/util-stream" "^2.1.3" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-ini@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.525.0.tgz#e672842bfdc3bcde221def0284f4a8af30bee2bb" + integrity sha512-JDnccfK5JRb9jcgpc9lirL9PyCwGIqY0nKdw3LlX5WL5vTpTG4E1q7rLAlpNh7/tFD1n66Itarfv2tsyHMIqCw== + dependencies: + "@aws-sdk/client-sts" "3.525.0" + "@aws-sdk/credential-provider-env" "3.523.0" + "@aws-sdk/credential-provider-process" "3.523.0" + "@aws-sdk/credential-provider-sso" "3.525.0" + "@aws-sdk/credential-provider-web-identity" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@smithy/credential-provider-imds" "^2.2.3" + "@smithy/property-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.3.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-node@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.525.0.tgz#fde02124df4f8afd4a58475452c9cd7f91a60b01" + integrity sha512-RJXlO8goGXpnoHQAyrCcJ0QtWEOFa34LSbfdqBIjQX/fwnjUuEmiGdXTV3AZmwYQ7juk49tfBneHbtOP3AGqsQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.523.0" + "@aws-sdk/credential-provider-http" "3.525.0" + "@aws-sdk/credential-provider-ini" "3.525.0" + "@aws-sdk/credential-provider-process" "3.523.0" + "@aws-sdk/credential-provider-sso" "3.525.0" + "@aws-sdk/credential-provider-web-identity" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@smithy/credential-provider-imds" "^2.2.3" + "@smithy/property-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.3.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-process@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.523.0.tgz#8cf85637f5075065a164d008f392d3ae3539ea23" + integrity sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.3.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-sso@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.525.0.tgz#b79f263fcde291250b35af41ee83743bdfec7d13" + integrity sha512-7V7ybtufxdD3plxeIeB6aqHZeFIUlAyPphXIUgXrGY10iNcosL970rQPBeggsohe4gCM6UvY2TfMeEcr+ZE8FA== + dependencies: + "@aws-sdk/client-sso" "3.525.0" + "@aws-sdk/token-providers" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.3.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-web-identity@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.525.0.tgz#f71a7a322209468de89b2dee6acd961e386a89cc" + integrity sha512-sAukOjR1oKb2JXG4nPpuBFpSwGUhrrY17PG/xbTy8NAoLLhrqRwnErcLfdTfmj6tH+3094k6ws/Sh8a35ae7fA== + dependencies: + "@aws-sdk/client-sts" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-bucket-endpoint@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.525.0.tgz#f354fbc0b4a55b0b13ab704672382c5aeafae0b3" + integrity sha512-nYfQ2Xspfef7j8mZO7varUWLPH6HQlXateH7tBVtBNUAazyQE4UJEvC0fbQ+Y01e+FKlirim/m2umkdMXqAlTg== + dependencies: + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-arn-parser" "3.495.0" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + "@smithy/util-config-provider" "^2.2.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-expect-continue@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.523.0.tgz#9db5a9dd54a41fb71d40e744ff800a697a82e969" + integrity sha512-E5DyRAHU39VHaAlQLqXYS/IKpgk3vsryuU6kkOcIIK8Dgw0a2tjoh5AOCaNa8pD+KgAGrFp35JIMSX1zui5diA== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-flexible-checksums@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.523.0.tgz#7f0e4a98aac00f08b154cb283d33a36993dd730d" + integrity sha512-lIa1TdWY9q4zsDFarfSnYcdrwPR+nypaU4n6hb95i620/1F5M5s6H8P0hYtwTNNvx+slrR8F3VBML9pjBtzAHw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.523.0" + "@smithy/is-array-buffer" "^2.1.1" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-host-header@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.523.0.tgz#9aaa29edd668905eed8ee8af482b96162dafdeb1" + integrity sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-location-constraint@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.523.0.tgz#c5b2395119ece973773f80f67eef43603d159c12" + integrity sha512-1QAUXX3U0jkARnU0yyjk81EO4Uw5dCeQOtvUY5s3bUOHatR3ThosQeIr6y9BCsbXHzNnDe1ytCjqAPyo8r/bYw== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-logger@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.523.0.tgz#ad61bfdd73b5983ab8a8926b9c01825bc048babf" + integrity sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-recursion-detection@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.523.0.tgz#21d9ec52700545d7935d6c943cb40bffa69ab4b4" + integrity sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-sdk-s3@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.525.0.tgz#c3ce03940240fa7a42bfa3f1916d2ce9fa0fafbf" + integrity sha512-ewFyyFM6wdFTOqCiId5GQNi7owDdLEonQhB4h8tF6r3HV52bRlDvZA4aDos+ft6N/XY2J6L0qlFTFq+/oiurXw== + dependencies: + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-arn-parser" "3.495.0" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/protocol-http" "^3.2.1" + "@smithy/signature-v4" "^2.1.3" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/util-config-provider" "^2.2.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-signing@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.523.0.tgz#1b2c458eb6a00da45b0800916ee463ff727c0717" + integrity sha512-pFXV4don6qcmew/OvEjLUr2foVjzoJ8o5k57Oz9yAHz8INx3RHK8MP/K4mVhHo6n0SquRcWrm4kY/Tw+89gkEA== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/protocol-http" "^3.2.1" + "@smithy/signature-v4" "^2.1.3" + "@smithy/types" "^2.10.1" + "@smithy/util-middleware" "^2.1.3" + tslib "^2.5.0" + +"@aws-sdk/middleware-ssec@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.523.0.tgz#1bc0b57859a3e90af7e6103341903896f601e622" + integrity sha512-FaqAZQeF5cQzZLOIboIJRaWVOQ2F2pJZAXGF5D7nJsxYNFChotA0O0iWimBRxU35RNn7yirVxz35zQzs20ddIw== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-user-agent@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.525.0.tgz#3ac154829460271c53ad49d8301d4c849e9afb9f" + integrity sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ== + dependencies: + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-endpoints" "3.525.0" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/region-config-resolver@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.525.0.tgz#ebd7edd0059857f59ed605c37cf5752542cf8914" + integrity sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/types" "^2.10.1" + "@smithy/util-config-provider" "^2.2.1" + "@smithy/util-middleware" "^2.1.3" + tslib "^2.5.0" + +"@aws-sdk/signature-v4-multi-region@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.525.0.tgz#b9b7e1079b0a8a1df4bb282216aa20b56d139ba5" + integrity sha512-j8gkdfiokaherRgokfZBl2azYBMHlegT7pOnR/3Y79TSz6G+bJeIkuNk8aUbJArr6R8nvAM1j4dt1rBM+efolQ== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@smithy/protocol-http" "^3.2.1" + "@smithy/signature-v4" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/token-providers@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.525.0.tgz#370d206a06e77e29ec0f76408654b16d6612f0d2" + integrity sha512-puVjbxuK0Dq7PTQ2HdddHy2eQjOH8GZbump74yWJa6JVpRW84LlOcNmP+79x4Kscvz2ldWB8XDFw/pcCiSDe5A== + dependencies: + "@aws-sdk/client-sso-oidc" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.3.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/types@3.523.0", "@aws-sdk/types@^3.222.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.523.0.tgz#2bb11390023949f31d9211212f41e245a7f03489" + integrity sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/util-arn-parser@3.495.0": + version "3.495.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz#539f2d6dfef343a80324348f1f9a1b7eed2390f3" + integrity sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-endpoints@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.525.0.tgz#d9f53b60e69dbe4623a4200d10be1be2ac73438f" + integrity sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/types" "^2.10.1" + "@smithy/util-endpoints" "^1.1.4" + tslib "^2.5.0" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.495.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz#9034fd8db77991b28ed20e067acdd53e8b8f824b" + integrity sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-browser@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.523.0.tgz#77188e83f9d470ddf140fe8c5d4d51049c9d5898" + integrity sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/types" "^2.10.1" + bowser "^2.11.0" + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-node@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.525.0.tgz#aa96c28bad8360d2a350c30c3c209c35f99ac5ee" + integrity sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.523.0.tgz#6abdaf5716f6c7153c328bbbd499345fae755dce" + integrity sha512-wfvyVymj2TUw7SuDor9IuFcAzJZvWRBZotvY/wQJOlYa3UP3Oezzecy64N4FWfBJEsZdrTN+HOZFl+IzTWWnUA== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@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.38" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.38.tgz#364d57b04736bbbbfa5a5777d038b03c9d81619b" + integrity sha512-XhcqNwaKvbnXwcHO+oIUx5vcdP/PpkdtNHAPR7sdZ5vjnAvSQgSMCgSqH0qu0gvqiJgblULdqJ5rf77QSIAHgg== + dependencies: + "@aws-sdk/client-s3" "^3.400.0" + "@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" + +"@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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.1.3.tgz#19997b701b36294c8d27bbc5e59167da2c719fae" + integrity sha512-c2aYH2Wu1RVE3rLlVgg2kQOBJGM0WbjReQi5DnPTm2Zb7F0gk7J2aeQeaX2u/lQZoHl6gv8Oac7mt9alU3+f4A== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/chunked-blob-reader-native@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.1.tgz#6b98479c8f6ea94832dd6a6e5ca78969a44eafe1" + integrity sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ== + dependencies: + "@smithy/util-base64" "^2.1.1" + tslib "^2.5.0" + +"@smithy/chunked-blob-reader@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz#997faba8e197e0cb9824dad30ae581466e386e57" + integrity sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ== + dependencies: + tslib "^2.5.0" + +"@smithy/config-resolver@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.1.4.tgz#cb870f82494b10c223c60ba4298b438d9185b4be" + integrity sha512-AW2WUZmBAzgO3V3ovKtsUbI3aBNMeQKFDumoqkNxaVDWF/xfnxAWqBKDr/NuG7c06N2Rm4xeZLPiJH/d+na0HA== + dependencies: + "@smithy/node-config-provider" "^2.2.4" + "@smithy/types" "^2.10.1" + "@smithy/util-config-provider" "^2.2.1" + "@smithy/util-middleware" "^2.1.3" + tslib "^2.5.0" + +"@smithy/core@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.3.5.tgz#7523da67b49e165e09ee8019601bea410bf92c38" + integrity sha512-Rrc+e2Jj6Gu7Xbn0jvrzZlSiP2CZocIOfZ9aNUA82+1sa6GBnxqL9+iZ9EKHeD9aqD1nU8EK4+oN2EiFpSv7Yw== + dependencies: + "@smithy/middleware-endpoint" "^2.4.4" + "@smithy/middleware-retry" "^2.1.4" + "@smithy/middleware-serde" "^2.1.3" + "@smithy/protocol-http" "^3.2.1" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/util-middleware" "^2.1.3" + tslib "^2.5.0" + +"@smithy/credential-provider-imds@^2.2.3", "@smithy/credential-provider-imds@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.4.tgz#7b237ad8623b782578335b61a616c5463b13451b" + integrity sha512-DdatjmBZQnhGe1FhI8gO98f7NmvQFSDiZTwC3WMvLTCKQUY+Y1SVkhJqIuLu50Eb7pTheoXQmK+hKYUgpUWsNA== + dependencies: + "@smithy/node-config-provider" "^2.2.4" + "@smithy/property-provider" "^2.1.3" + "@smithy/types" "^2.10.1" + "@smithy/url-parser" "^2.1.3" + tslib "^2.5.0" + +"@smithy/eventstream-codec@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.1.3.tgz#6be114d3c4d94f3bfd2e32cb258851baa6129acf" + integrity sha512-rGlCVuwSDv6qfKH4/lRxFjcZQnIE0LZ3D4lkMHg7ZSltK9rA74r0VuGSvWVQ4N/d70VZPaniFhp4Z14QYZsa+A== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.10.1" + "@smithy/util-hex-encoding" "^2.1.1" + tslib "^2.5.0" + +"@smithy/eventstream-serde-browser@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.3.tgz#97427465aa277e66d3dcacab5f2bae890949a890" + integrity sha512-qAgKbZ9m2oBfSyJWWurX/MvQFRPrYypj79cDSleEgDwBoez6Tfd+FTpu2L/j3ZeC3mDlDHIKWksoeaXZpLLAHw== + dependencies: + "@smithy/eventstream-serde-universal" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/eventstream-serde-config-resolver@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.3.tgz#09487fd5e3c22c7e53ff74d14de3924ab16b8751" + integrity sha512-48rvsNv/MgAFCxOE0qwR7ZwKhaEdDoTxqH5HM+T6SDxICmPGb7gEuQzjTxQhcieCPgqyXeZFW8cU0QJxdowuIg== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/eventstream-serde-node@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.3.tgz#f51bf8e4eba9d1aaa995200a36c3d3fb5a29734d" + integrity sha512-RPJWWDhj8isk3NtGfm3Xt1WdHyX9ZE42V+m1nLU1I0zZ1hEol/oawHsTnhva/VR5bn+bJ2zscx+BYr0cEPRtmg== + dependencies: + "@smithy/eventstream-serde-universal" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/eventstream-serde-universal@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.3.tgz#79ab2e313c4e6621d8d9ecb98e0c826e9d8d21da" + integrity sha512-ssvSMk1LX2jRhiOVgVLGfNJXdB8SvyjieKcJDHq698Gi3LOog6g/+l7ggrN+hZxyjUiDF4cUxgKaZTBUghzhLw== + dependencies: + "@smithy/eventstream-codec" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/fetch-http-handler@^2.4.3": + version "2.4.3" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.3.tgz#568bd2031af242fc9172e41dfb364d36d48631d1" + integrity sha512-Fn/KYJFo6L5I4YPG8WQb2hOmExgRmNpVH5IK2zU3JKrY5FKW7y9ar5e0BexiIC9DhSKqKX+HeWq/Y18fq7Dkpw== + dependencies: + "@smithy/protocol-http" "^3.2.1" + "@smithy/querystring-builder" "^2.1.3" + "@smithy/types" "^2.10.1" + "@smithy/util-base64" "^2.1.1" + tslib "^2.5.0" + +"@smithy/hash-blob-browser@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.3.tgz#f63b391a8bedf640ad120d576c485a10f16c280b" + integrity sha512-sHLTM5xQYw5Wxz07DFo+eh1PVC6P5+kazQRF1k5nsvOhZG5VnkIy4LZ7N0ZNWqJx16g9otGd5MvqUOpb3WWtgA== + dependencies: + "@smithy/chunked-blob-reader" "^2.1.1" + "@smithy/chunked-blob-reader-native" "^2.1.1" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/hash-node@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.1.3.tgz#649b056966e1cba9f738236cbf4f05e8e9820deb" + integrity sha512-FsAPCUj7VNJIdHbSxMd5uiZiF20G2zdSDgrgrDrHqIs/VMxK85Vqk5kMVNNDMCZmMezp6UKnac0B4nAyx7HJ9g== + dependencies: + "@smithy/types" "^2.10.1" + "@smithy/util-buffer-from" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@smithy/hash-stream-node@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.1.3.tgz#c61f5d10cc236cef69af1278a552a42162bc254c" + integrity sha512-fWpUx2ca/u5lcD5RhNJogEG5FD7H0RDDpYmfQgxFqIUv3Ow7bZsapMukh8uzQPVO8R+NDAvSdxmgXoy4Hz8sFw== + dependencies: + "@smithy/types" "^2.10.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@smithy/invalid-dependency@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.1.3.tgz#0f0895d3db2e03493f933e10c27551f059b92b6c" + integrity sha512-wkra7d/G4CbngV4xsjYyAYOvdAhahQje/WymuQdVEnXFExJopEu7fbL5AEAlBPgWHXwu94VnCSG00gVzRfExyg== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/is-array-buffer@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz#07b4c77ae67ed58a84400c76edd482271f9f957b" + integrity sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ== + dependencies: + tslib "^2.5.0" + +"@smithy/md5-js@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.1.3.tgz#edf6a570a06fe84a126db90e335d6a5a12b25c69" + integrity sha512-zmn3M6+mP4IJlSmXBN9964AztgkIO8b5lRzAgdJn9AdCFwA6xLkcW2B6uEnpBjvotxtQMmXTUP19tIO7NmFPpw== + dependencies: + "@smithy/types" "^2.10.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@smithy/middleware-content-length@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.1.3.tgz#243d74789a311366948dec5a85b03146ac580c51" + integrity sha512-aJduhkC+dcXxdnv5ZpM3uMmtGmVFKx412R1gbeykS5HXDmRU6oSsyy2SoHENCkfOGKAQOjVE2WVqDJibC0d21g== + dependencies: + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/middleware-endpoint@^2.4.4": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.4.tgz#aa42dc8340a8511a8c66d597cf774e27f0109dd9" + integrity sha512-4yjHyHK2Jul4JUDBo2sTsWY9UshYUnXeb/TAK/MTaPEb8XQvDmpwSFnfIRDU45RY1a6iC9LCnmJNg/yHyfxqkw== + dependencies: + "@smithy/middleware-serde" "^2.1.3" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/shared-ini-file-loader" "^2.3.4" + "@smithy/types" "^2.10.1" + "@smithy/url-parser" "^2.1.3" + "@smithy/util-middleware" "^2.1.3" + tslib "^2.5.0" + +"@smithy/middleware-retry@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.1.4.tgz#a468c64b0186b8edeef444ee9249a88675f3fe23" + integrity sha512-Cyolv9YckZTPli1EkkaS39UklonxMd08VskiuMhURDjC0HHa/AD6aK/YoD21CHv9s0QLg0WMLvk9YeLTKkXaFQ== + dependencies: + "@smithy/node-config-provider" "^2.2.4" + "@smithy/protocol-http" "^3.2.1" + "@smithy/service-error-classification" "^2.1.3" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/util-middleware" "^2.1.3" + "@smithy/util-retry" "^2.1.3" + tslib "^2.5.0" + uuid "^8.3.2" + +"@smithy/middleware-serde@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.1.3.tgz#dbb3c4257b66fdab3019809106b02f953bd42a44" + integrity sha512-s76LId+TwASrHhUa9QS4k/zeXDUAuNuddKklQzRgumbzge5BftVXHXIqL4wQxKGLocPwfgAOXWx+HdWhQk9hTg== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/middleware-stack@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.1.3.tgz#7cf77e6ad5c885bc0b8b0857e9349017d530f7d1" + integrity sha512-opMFufVQgvBSld/b7mD7OOEBxF6STyraVr1xel1j0abVILM8ALJvRoFbqSWHGmaDlRGIiV9Q5cGbWi0sdiEaLQ== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/node-config-provider@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.2.4.tgz#6c2406a47c4ece45f158a282bb148a6be7867817" + integrity sha512-nqazHCp8r4KHSFhRQ+T0VEkeqvA0U+RhehBSr1gunUuNW3X7j0uDrWBxB2gE9eutzy6kE3Y7L+Dov/UXT871vg== + dependencies: + "@smithy/property-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.3.4" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/node-http-handler@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.4.1.tgz#08409108460fcfaa9068f78e1ef655d7af952fef" + integrity sha512-HCkb94soYhJMxPCa61wGKgmeKpJ3Gftx1XD6bcWEB2wMV1L9/SkQu/6/ysKBnbOzWRE01FGzwrTxucHypZ8rdg== + dependencies: + "@smithy/abort-controller" "^2.1.3" + "@smithy/protocol-http" "^3.2.1" + "@smithy/querystring-builder" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/property-provider@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.1.3.tgz#faaa9b7f605725168493e74600a74beca1b059fb" + integrity sha512-bMz3se+ySKWNrgm7eIiQMa2HO/0fl2D0HvLAdg9pTMcpgp4SqOAh6bz7Ik6y7uQqSrk4rLjIKgbQ6yzYgGehCQ== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/protocol-http@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.2.1.tgz#946fcd076525f8208d659fbc70e2a32d21ed1291" + integrity sha512-KLrQkEw4yJCeAmAH7hctE8g9KwA7+H2nSJwxgwIxchbp/L0B5exTdOQi9D5HinPLlothoervGmhpYKelZ6AxIA== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/querystring-builder@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.1.3.tgz#e64e126f565b2aae6e9abd1bebc9aa0839842e8d" + integrity sha512-kFD3PnNqKELe6m9GRHQw/ftFFSZpnSeQD4qvgDB6BQN6hREHELSosVFUMPN4M3MDKN2jAwk35vXHLoDrNfKu0A== + dependencies: + "@smithy/types" "^2.10.1" + "@smithy/util-uri-escape" "^2.1.1" + tslib "^2.5.0" + +"@smithy/querystring-parser@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.1.3.tgz#2786dfa36ac6c7a691eb651339fbcaf160891e69" + integrity sha512-3+CWJoAqcBMR+yvz6D+Fc5VdoGFtfenW6wqSWATWajrRMGVwJGPT3Vy2eb2bnMktJc4HU4bpjeovFa566P3knQ== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/service-error-classification@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.3.tgz#13dd43ad56576e2b1b7c5a1581affdb9e34dc8ed" + integrity sha512-iUrpSsem97bbXHHT/v3s7vaq8IIeMo6P6cXdeYHrx0wOJpMeBGQF7CB0mbJSiTm3//iq3L55JiEm8rA7CTVI8A== + dependencies: + "@smithy/types" "^2.10.1" + +"@smithy/shared-ini-file-loader@^2.3.3", "@smithy/shared-ini-file-loader@^2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.4.tgz#2357bd9dfbb67a951ccd06ca9c872aa845fad888" + integrity sha512-CiZmPg9GeDKbKmJGEFvJBsJcFnh0AQRzOtQAzj1XEa8N/0/uSN/v1LYzgO7ry8hhO8+9KB7+DhSW0weqBra4Aw== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/signature-v4@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.1.3.tgz#ff6b812ce562be97ce182376aeb22e558b64776b" + integrity sha512-Jq4iPPdCmJojZTsPePn4r1ULShh6ONkokLuxp1Lnk4Sq7r7rJp4HlA1LbPBq4bD64TIzQezIpr1X+eh5NYkNxw== + dependencies: + "@smithy/eventstream-codec" "^2.1.3" + "@smithy/is-array-buffer" "^2.1.1" + "@smithy/types" "^2.10.1" + "@smithy/util-hex-encoding" "^2.1.1" + "@smithy/util-middleware" "^2.1.3" + "@smithy/util-uri-escape" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@smithy/smithy-client@^2.4.2": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.4.2.tgz#79e960c8761ae7dc06f592d2691419706745aab7" + integrity sha512-ntAFYN51zu3N3mCd95YFcFi/8rmvm//uX+HnK24CRbI6k5Rjackn0JhgKz5zOx/tbNvOpgQIwhSX+1EvEsBLbA== + dependencies: + "@smithy/middleware-endpoint" "^2.4.4" + "@smithy/middleware-stack" "^2.1.3" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + "@smithy/util-stream" "^2.1.3" + tslib "^2.5.0" + +"@smithy/types@^2.10.1": + version "2.10.1" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.10.1.tgz#f2a923fd080447ad2ca19bfd8a77abf15be0b8e8" + integrity sha512-hjQO+4ru4cQ58FluQvKKiyMsFg0A6iRpGm2kqdH8fniyNd2WyanoOsYJfMX/IFLuLxEoW6gnRkNZy1y6fUUhtA== + dependencies: + tslib "^2.5.0" + +"@smithy/url-parser@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.1.3.tgz#f8a7176fb6fdd38a960d546606576541ae6eb7c0" + integrity sha512-X1NRA4WzK/ihgyzTpeGvI9Wn45y8HmqF4AZ/FazwAv8V203Ex+4lXqcYI70naX9ETqbqKVzFk88W6WJJzCggTQ== + dependencies: + "@smithy/querystring-parser" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/util-base64@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.1.1.tgz#af729085cc9d92ebd54a5d2c5d0aa5a0c31f83bf" + integrity sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g== + dependencies: + "@smithy/util-buffer-from" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-body-length-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz#1fc77072768013ae646415eedb9833cd252d055d" + integrity sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag== + dependencies: + tslib "^2.5.0" + +"@smithy/util-body-length-node@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz#a6f5c9911f1c3e23efb340d5ce7a590b62f2056e" + integrity sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-buffer-from@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz#f9346bf8b23c5ba6f6bdb61dd9db779441ba8d08" + integrity sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg== + dependencies: + "@smithy/is-array-buffer" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-config-provider@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz#aea0a80236d6cedaee60473802899cff4a8cc0ba" + integrity sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-defaults-mode-browser@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.4.tgz#e3e85f44480bf8c83a2e22247dd5a7a820ceb655" + integrity sha512-J6XAVY+/g7jf03QMnvqPyU+8jqGrrtXoKWFVOS+n1sz0Lg8HjHJ1ANqaDN+KTTKZRZlvG8nU5ZrJOUL6VdwgcQ== + dependencies: + "@smithy/property-provider" "^2.1.3" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + bowser "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-defaults-mode-node@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.3.tgz#23f876eb107ef066c042b4dfdeef637a7c330bb5" + integrity sha512-ttUISrv1uVOjTlDa3nznX33f0pthoUlP+4grhTvOzcLhzArx8qHB94/untGACOG3nlf8vU20nI2iWImfzoLkYA== + dependencies: + "@smithy/config-resolver" "^2.1.4" + "@smithy/credential-provider-imds" "^2.2.4" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/property-provider" "^2.1.3" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/util-endpoints@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.1.4.tgz#4a75de883ac59d042ae5426c9a7d8e274d047980" + integrity sha512-/qAeHmK5l4yQ4/bCIJ9p49wDe9rwWtOzhPHblu386fwPNT3pxmodgcs9jDCV52yK9b4rB8o9Sj31P/7Vzka1cg== + dependencies: + "@smithy/node-config-provider" "^2.2.4" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/util-hex-encoding@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz#978252b9fb242e0a59bae4ead491210688e0d15f" + integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-middleware@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.1.3.tgz#6169d7b1088d2bb29d0129c9146c856a61026e98" + integrity sha512-/+2fm7AZ2ozl5h8wM++ZP0ovE9/tiUUAHIbCfGfb3Zd3+Dyk17WODPKXBeJ/TnK5U+x743QmA0xHzlSm8I/qhw== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/util-retry@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.1.3.tgz#715a5c02c194ae56b9be49fda510b362fb075af3" + integrity sha512-Kbvd+GEMuozbNUU3B89mb99tbufwREcyx2BOX0X2+qHjq6Gvsah8xSDDgxISDwcOHoDqUWO425F0Uc/QIRhYkg== + dependencies: + "@smithy/service-error-classification" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@smithy/util-stream@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.1.3.tgz#fd0de1d8dcb0015a95735df7229b4a1ded06b50e" + integrity sha512-HvpEQbP8raTy9n86ZfXiAkf3ezp1c3qeeO//zGqwZdrfaoOpGKQgF2Sv1IqZp7wjhna7pvczWaGUHjcOPuQwKw== + dependencies: + "@smithy/fetch-http-handler" "^2.4.3" + "@smithy/node-http-handler" "^2.4.1" + "@smithy/types" "^2.10.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-buffer-from" "^2.1.1" + "@smithy/util-hex-encoding" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-uri-escape@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz#7eedc93b73ecda68f12fb9cf92e9fa0fbbed4d83" + integrity sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-utf8@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.1.1.tgz#690018dd28f47f014114497735e51417ea5900a6" + integrity sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A== + dependencies: + "@smithy/util-buffer-from" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-waiter@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.1.3.tgz#b3e4c0374e5ee46ecc9eae7812fa870d7b192897" + integrity sha512-3R0wNFAQQoH9e4m+bVLDYNOst2qNxtxFgq03WoNHWTBOqQT3jFnOBRj1W51Rf563xDA5kwqjziksxn6RKkHB+Q== + dependencies: + "@smithy/abort-controller" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@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.1.1" + resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-3.1.1.tgz#237d4e151b8591e2ff4f0ae388f7d6b4741bacc0" + integrity sha512-TgCm6jVqMPv+OgD5uBNND/CkCwNDdXPQlcprtnXsWSBpTCy0q5CI6vRj+jsUiXE1xeRaKIX4UeaYJqzZBL92sg== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@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.11.24" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792" + integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long== + 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.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.21.tgz#f4ca1ac8ffb05ee4b89163c2d6fac9a1a59ee149" + integrity sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw== + 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.11.9" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +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.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + dependencies: + follow-redirects "^1.15.4" + 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-writer@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" + integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== + +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.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + 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.11.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af" + integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg== + 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.5.0" + +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.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + 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.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.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.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +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== + +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@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + 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@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +"lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +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.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +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== + +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" + +packet-reader@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" + integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== + +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.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.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.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" + integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== + +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.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7" + integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og== + +pg-protocol@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" + integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== + +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.11.3" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb" + integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== + dependencies: + buffer-writer "2.0.0" + packet-reader "1.0.0" + pg-connection-string "^2.6.2" + pg-pool "^3.6.1" + pg-protocol "^1.6.0" + 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== + +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +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.1" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.1.tgz#9380fe0a3b5ff17638d3fce30c3cf3a2396c2343" + integrity sha512-vIKKzQ9dGp2aBOxQRD1FmUYViuQiKXSJ8yah8TsaBx4U3BokJt+Y2A0qz2C4pj08uX59qpWxRqSLEfRmVOEgQw== + 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.11.1, 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.3.1, tslib@^2.5.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +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.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +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== + +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== + +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.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" + integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + +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.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +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== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +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 08a37bec6f4a75ab10e5dafac10f71cb4fe723c6 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 6 Mar 2024 15:56:35 +0000 Subject: [PATCH 0026/1590] vapordex --- dexs/vapordex/index.ts | 1 + dexs/vapordex/v2.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/vapordex/index.ts b/dexs/vapordex/index.ts index d71f45f1d0..b995877c01 100644 --- a/dexs/vapordex/index.ts +++ b/dexs/vapordex/index.ts @@ -3,6 +3,7 @@ import v2 from "./v2"; import { BreakdownAdapter } from "../../adapters/types"; const adapter: BreakdownAdapter = { + version: 2, breakdown: { v1: v1, v2: v2, diff --git a/dexs/vapordex/v2.ts b/dexs/vapordex/v2.ts index 350f1e760e..63e6bd52bb 100644 --- a/dexs/vapordex/v2.ts +++ b/dexs/vapordex/v2.ts @@ -43,7 +43,7 @@ const v2 = Object.keys(endpointsV2).reduce( start: startTimeV2[chain], }, }), - { version: 2 } + { } ); export default v2; From 9a5779899242df6e3cede2c3948143602a4f8ac0 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 6 Mar 2024 16:32:13 +0000 Subject: [PATCH 0027/1590] sushi --- dexs/sushiswap/classic.ts | 2 -- dexs/sushiswap/index.ts | 1 + dexs/sushiswap/v3.ts | 36 +++++++++++++++++++----------------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index d21e9ace31..7130c329dd 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -167,6 +167,4 @@ classic[CHAIN.FANTOM] = { start: 0 } -classic.version = 2 - export default classic diff --git a/dexs/sushiswap/index.ts b/dexs/sushiswap/index.ts index 13967b4393..c8469b769e 100644 --- a/dexs/sushiswap/index.ts +++ b/dexs/sushiswap/index.ts @@ -4,6 +4,7 @@ import classic from './classic' import v3 from './v3' const adapter: BreakdownAdapter = { + version: 2, breakdown: { classic: classic, trident: trident, diff --git a/dexs/sushiswap/v3.ts b/dexs/sushiswap/v3.ts index 06cdf1ccde..b3bac22b94 100644 --- a/dexs/sushiswap/v3.ts +++ b/dexs/sushiswap/v3.ts @@ -59,23 +59,25 @@ const startTimeV3: {[key: string]: number} = { [CHAIN.BASE]: 1691020800, } -const v3: SimpleAdapter = { adapter: {}, version: 2 } - -Object.keys(endpointsV3).map((chain: string) => { - v3.adapter[chain] = { - fetch: v3Graphs(chain as Chain), - start: startTimeV3[chain], - meta: { - methodology: { - Fees: "Each pool charge between 0.01% to 1% fee", - UserFees: "Users pay between 0.01% to 1% fee", - Revenue: "0 to 1/4 of the fee goes to treasury", - HoldersRevenue: "None", - ProtocolRevenue: "Treasury receives a share of the fees", - SupplySideRevenue: "Liquidity providers get most of the fees of all trades in their pools" +const v3 = Object.keys(endpointsV3).reduce( + (acc, chain) => ({ + ...acc, + [chain]: { + fetch: v3Graphs(chain as Chain), + start: startTimeV3[chain], + meta: { + methodology: { + Fees: "Each pool charge between 0.01% to 1% fee", + UserFees: "Users pay between 0.01% to 1% fee", + Revenue: "0 to 1/4 of the fee goes to treasury", + HoldersRevenue: "None", + ProtocolRevenue: "Treasury receives a share of the fees", + SupplySideRevenue: "Liquidity providers get most of the fees of all trades in their pools" + } } - } - } -}) + }, + }), + {} +); export default v3 From 8640c6d38b0cdc60788c25d1db52a307df14043d Mon Sep 17 00:00:00 2001 From: sameepsi Date: Thu, 7 Mar 2024 00:33:06 +0530 Subject: [PATCH 0028/1590] Added ASTAR ZKEVM --- dexs/quickswap/index.ts | 3 ++- helpers/chains.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dexs/quickswap/index.ts b/dexs/quickswap/index.ts index 91ec9a8903..21062fe13b 100644 --- a/dexs/quickswap/index.ts +++ b/dexs/quickswap/index.ts @@ -29,7 +29,8 @@ const endpointsAlgebraV3 = { }; const endpointsUniV3 = { - [CHAIN.MANTA]:"https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn" + [CHAIN.MANTA]:"https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn", + [CHAIN.ASTAR_ZKEVM]:"https://api.studio.thegraph.com/query/44554/astar-quickswap/version/latest" }; const graphsAlgebraV3 = getChainVolume({ diff --git a/helpers/chains.ts b/helpers/chains.ts index 79bf4f9819..46b4922b11 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -135,7 +135,8 @@ export enum CHAIN { PERSISTENCE = "persistence", JBC = "jbc", ZKFAIR = "zkfair", - ZETA = "zeta" + ZETA = "zeta", + ASTAR_ZKEVM = "astar_zkevm" } // Don´t use From 88a8db3f7acda478f7509424ca07115c010da37c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 6 Mar 2024 23:33:19 +0000 Subject: [PATCH 0029/1590] remove yarn lock --- yarn.lock | 2399 ----------------------------------------------------- 1 file changed, 2399 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index b6cfb32d24..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2399 +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@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@^3.400.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.525.0.tgz#965ed5b70c067d74c7a3c4aea26dfce53db4cd06" - integrity sha512-hoMGH8G9rezZDiJPsMjsyRVNfVHHa4u6lcZ09SQMmtFHWK0FUcC0DIKR5ripV5qGDbnV54i2JotXlLzAv0aNCQ== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.525.0" - "@aws-sdk/core" "3.525.0" - "@aws-sdk/credential-provider-node" "3.525.0" - "@aws-sdk/middleware-bucket-endpoint" "3.525.0" - "@aws-sdk/middleware-expect-continue" "3.523.0" - "@aws-sdk/middleware-flexible-checksums" "3.523.0" - "@aws-sdk/middleware-host-header" "3.523.0" - "@aws-sdk/middleware-location-constraint" "3.523.0" - "@aws-sdk/middleware-logger" "3.523.0" - "@aws-sdk/middleware-recursion-detection" "3.523.0" - "@aws-sdk/middleware-sdk-s3" "3.525.0" - "@aws-sdk/middleware-signing" "3.523.0" - "@aws-sdk/middleware-ssec" "3.523.0" - "@aws-sdk/middleware-user-agent" "3.525.0" - "@aws-sdk/region-config-resolver" "3.525.0" - "@aws-sdk/signature-v4-multi-region" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-endpoints" "3.525.0" - "@aws-sdk/util-user-agent-browser" "3.523.0" - "@aws-sdk/util-user-agent-node" "3.525.0" - "@aws-sdk/xml-builder" "3.523.0" - "@smithy/config-resolver" "^2.1.4" - "@smithy/core" "^1.3.5" - "@smithy/eventstream-serde-browser" "^2.1.3" - "@smithy/eventstream-serde-config-resolver" "^2.1.3" - "@smithy/eventstream-serde-node" "^2.1.3" - "@smithy/fetch-http-handler" "^2.4.3" - "@smithy/hash-blob-browser" "^2.1.3" - "@smithy/hash-node" "^2.1.3" - "@smithy/hash-stream-node" "^2.1.3" - "@smithy/invalid-dependency" "^2.1.3" - "@smithy/md5-js" "^2.1.3" - "@smithy/middleware-content-length" "^2.1.3" - "@smithy/middleware-endpoint" "^2.4.4" - "@smithy/middleware-retry" "^2.1.4" - "@smithy/middleware-serde" "^2.1.3" - "@smithy/middleware-stack" "^2.1.3" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/node-http-handler" "^2.4.1" - "@smithy/protocol-http" "^3.2.1" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/url-parser" "^2.1.3" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.4" - "@smithy/util-defaults-mode-node" "^2.2.3" - "@smithy/util-endpoints" "^1.1.4" - "@smithy/util-retry" "^2.1.3" - "@smithy/util-stream" "^2.1.3" - "@smithy/util-utf8" "^2.1.1" - "@smithy/util-waiter" "^2.1.3" - fast-xml-parser "4.2.5" - tslib "^2.5.0" - -"@aws-sdk/client-sso-oidc@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.525.0.tgz#0f80242d997adc7cf259f50f9e590d515a123fac" - integrity sha512-zz13k/6RkjPSLmReSeGxd8wzGiiZa4Odr2Tv3wTcxClM4wOjD+zOgGv4Fe32b9AMqaueiCdjbvdu7AKcYxFA4A== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.525.0" - "@aws-sdk/core" "3.525.0" - "@aws-sdk/middleware-host-header" "3.523.0" - "@aws-sdk/middleware-logger" "3.523.0" - "@aws-sdk/middleware-recursion-detection" "3.523.0" - "@aws-sdk/middleware-user-agent" "3.525.0" - "@aws-sdk/region-config-resolver" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-endpoints" "3.525.0" - "@aws-sdk/util-user-agent-browser" "3.523.0" - "@aws-sdk/util-user-agent-node" "3.525.0" - "@smithy/config-resolver" "^2.1.4" - "@smithy/core" "^1.3.5" - "@smithy/fetch-http-handler" "^2.4.3" - "@smithy/hash-node" "^2.1.3" - "@smithy/invalid-dependency" "^2.1.3" - "@smithy/middleware-content-length" "^2.1.3" - "@smithy/middleware-endpoint" "^2.4.4" - "@smithy/middleware-retry" "^2.1.4" - "@smithy/middleware-serde" "^2.1.3" - "@smithy/middleware-stack" "^2.1.3" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/node-http-handler" "^2.4.1" - "@smithy/protocol-http" "^3.2.1" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/url-parser" "^2.1.3" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.4" - "@smithy/util-defaults-mode-node" "^2.2.3" - "@smithy/util-endpoints" "^1.1.4" - "@smithy/util-middleware" "^2.1.3" - "@smithy/util-retry" "^2.1.3" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/client-sso@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.525.0.tgz#2af5028a56a72a8067cb6b149ca1cc433beb9fa4" - integrity sha512-6KwGQWFoNLH1UupdWPFdKPfTgjSz1kN8/r8aCzuvvXBe4Pz+iDUZ6FEJzGWNc9AapjvZDNO1hs23slomM9rTaA== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.525.0" - "@aws-sdk/middleware-host-header" "3.523.0" - "@aws-sdk/middleware-logger" "3.523.0" - "@aws-sdk/middleware-recursion-detection" "3.523.0" - "@aws-sdk/middleware-user-agent" "3.525.0" - "@aws-sdk/region-config-resolver" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-endpoints" "3.525.0" - "@aws-sdk/util-user-agent-browser" "3.523.0" - "@aws-sdk/util-user-agent-node" "3.525.0" - "@smithy/config-resolver" "^2.1.4" - "@smithy/core" "^1.3.5" - "@smithy/fetch-http-handler" "^2.4.3" - "@smithy/hash-node" "^2.1.3" - "@smithy/invalid-dependency" "^2.1.3" - "@smithy/middleware-content-length" "^2.1.3" - "@smithy/middleware-endpoint" "^2.4.4" - "@smithy/middleware-retry" "^2.1.4" - "@smithy/middleware-serde" "^2.1.3" - "@smithy/middleware-stack" "^2.1.3" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/node-http-handler" "^2.4.1" - "@smithy/protocol-http" "^3.2.1" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/url-parser" "^2.1.3" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.4" - "@smithy/util-defaults-mode-node" "^2.2.3" - "@smithy/util-endpoints" "^1.1.4" - "@smithy/util-middleware" "^2.1.3" - "@smithy/util-retry" "^2.1.3" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/client-sts@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.525.0.tgz#5c59c39950f24d9fb4a42b226ada6a72955c0672" - integrity sha512-a8NUGRvO6rkfTZCbMaCsjDjLbERCwIUU9dIywFYcRgbFhkupJ7fSaZz3Het98U51M9ZbTEpaTa3fz0HaJv8VJw== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.525.0" - "@aws-sdk/middleware-host-header" "3.523.0" - "@aws-sdk/middleware-logger" "3.523.0" - "@aws-sdk/middleware-recursion-detection" "3.523.0" - "@aws-sdk/middleware-user-agent" "3.525.0" - "@aws-sdk/region-config-resolver" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-endpoints" "3.525.0" - "@aws-sdk/util-user-agent-browser" "3.523.0" - "@aws-sdk/util-user-agent-node" "3.525.0" - "@smithy/config-resolver" "^2.1.4" - "@smithy/core" "^1.3.5" - "@smithy/fetch-http-handler" "^2.4.3" - "@smithy/hash-node" "^2.1.3" - "@smithy/invalid-dependency" "^2.1.3" - "@smithy/middleware-content-length" "^2.1.3" - "@smithy/middleware-endpoint" "^2.4.4" - "@smithy/middleware-retry" "^2.1.4" - "@smithy/middleware-serde" "^2.1.3" - "@smithy/middleware-stack" "^2.1.3" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/node-http-handler" "^2.4.1" - "@smithy/protocol-http" "^3.2.1" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/url-parser" "^2.1.3" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.4" - "@smithy/util-defaults-mode-node" "^2.2.3" - "@smithy/util-endpoints" "^1.1.4" - "@smithy/util-middleware" "^2.1.3" - "@smithy/util-retry" "^2.1.3" - "@smithy/util-utf8" "^2.1.1" - fast-xml-parser "4.2.5" - tslib "^2.5.0" - -"@aws-sdk/core@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.525.0.tgz#710740ff96551e04f595fc156a40b54793a37b01" - integrity sha512-E3LtEtMWCriQOFZpVKpLYzbdw/v2PAOEAMhn2VRRZ1g0/g1TXzQrfhEU2yd8l/vQEJaCJ82ooGGg7YECviBUxA== - dependencies: - "@smithy/core" "^1.3.5" - "@smithy/protocol-http" "^3.2.1" - "@smithy/signature-v4" "^2.1.3" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-env@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.523.0.tgz#4bc04b32c15ff7237ba1de866b96ccea24e433c7" - integrity sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-http@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.525.0.tgz#3a785ea8724200596ad1a48cf8485658401eb589" - integrity sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/fetch-http-handler" "^2.4.3" - "@smithy/node-http-handler" "^2.4.1" - "@smithy/property-provider" "^2.1.3" - "@smithy/protocol-http" "^3.2.1" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/util-stream" "^2.1.3" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-ini@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.525.0.tgz#e672842bfdc3bcde221def0284f4a8af30bee2bb" - integrity sha512-JDnccfK5JRb9jcgpc9lirL9PyCwGIqY0nKdw3LlX5WL5vTpTG4E1q7rLAlpNh7/tFD1n66Itarfv2tsyHMIqCw== - dependencies: - "@aws-sdk/client-sts" "3.525.0" - "@aws-sdk/credential-provider-env" "3.523.0" - "@aws-sdk/credential-provider-process" "3.523.0" - "@aws-sdk/credential-provider-sso" "3.525.0" - "@aws-sdk/credential-provider-web-identity" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@smithy/credential-provider-imds" "^2.2.3" - "@smithy/property-provider" "^2.1.3" - "@smithy/shared-ini-file-loader" "^2.3.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-node@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.525.0.tgz#fde02124df4f8afd4a58475452c9cd7f91a60b01" - integrity sha512-RJXlO8goGXpnoHQAyrCcJ0QtWEOFa34LSbfdqBIjQX/fwnjUuEmiGdXTV3AZmwYQ7juk49tfBneHbtOP3AGqsQ== - dependencies: - "@aws-sdk/credential-provider-env" "3.523.0" - "@aws-sdk/credential-provider-http" "3.525.0" - "@aws-sdk/credential-provider-ini" "3.525.0" - "@aws-sdk/credential-provider-process" "3.523.0" - "@aws-sdk/credential-provider-sso" "3.525.0" - "@aws-sdk/credential-provider-web-identity" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@smithy/credential-provider-imds" "^2.2.3" - "@smithy/property-provider" "^2.1.3" - "@smithy/shared-ini-file-loader" "^2.3.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-process@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.523.0.tgz#8cf85637f5075065a164d008f392d3ae3539ea23" - integrity sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/shared-ini-file-loader" "^2.3.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-sso@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.525.0.tgz#b79f263fcde291250b35af41ee83743bdfec7d13" - integrity sha512-7V7ybtufxdD3plxeIeB6aqHZeFIUlAyPphXIUgXrGY10iNcosL970rQPBeggsohe4gCM6UvY2TfMeEcr+ZE8FA== - dependencies: - "@aws-sdk/client-sso" "3.525.0" - "@aws-sdk/token-providers" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/shared-ini-file-loader" "^2.3.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-web-identity@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.525.0.tgz#f71a7a322209468de89b2dee6acd961e386a89cc" - integrity sha512-sAukOjR1oKb2JXG4nPpuBFpSwGUhrrY17PG/xbTy8NAoLLhrqRwnErcLfdTfmj6tH+3094k6ws/Sh8a35ae7fA== - dependencies: - "@aws-sdk/client-sts" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-bucket-endpoint@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.525.0.tgz#f354fbc0b4a55b0b13ab704672382c5aeafae0b3" - integrity sha512-nYfQ2Xspfef7j8mZO7varUWLPH6HQlXateH7tBVtBNUAazyQE4UJEvC0fbQ+Y01e+FKlirim/m2umkdMXqAlTg== - dependencies: - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-arn-parser" "3.495.0" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - "@smithy/util-config-provider" "^2.2.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-expect-continue@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.523.0.tgz#9db5a9dd54a41fb71d40e744ff800a697a82e969" - integrity sha512-E5DyRAHU39VHaAlQLqXYS/IKpgk3vsryuU6kkOcIIK8Dgw0a2tjoh5AOCaNa8pD+KgAGrFp35JIMSX1zui5diA== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-flexible-checksums@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.523.0.tgz#7f0e4a98aac00f08b154cb283d33a36993dd730d" - integrity sha512-lIa1TdWY9q4zsDFarfSnYcdrwPR+nypaU4n6hb95i620/1F5M5s6H8P0hYtwTNNvx+slrR8F3VBML9pjBtzAHw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.523.0" - "@smithy/is-array-buffer" "^2.1.1" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-host-header@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.523.0.tgz#9aaa29edd668905eed8ee8af482b96162dafdeb1" - integrity sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-location-constraint@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.523.0.tgz#c5b2395119ece973773f80f67eef43603d159c12" - integrity sha512-1QAUXX3U0jkARnU0yyjk81EO4Uw5dCeQOtvUY5s3bUOHatR3ThosQeIr6y9BCsbXHzNnDe1ytCjqAPyo8r/bYw== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-logger@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.523.0.tgz#ad61bfdd73b5983ab8a8926b9c01825bc048babf" - integrity sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-recursion-detection@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.523.0.tgz#21d9ec52700545d7935d6c943cb40bffa69ab4b4" - integrity sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-sdk-s3@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.525.0.tgz#c3ce03940240fa7a42bfa3f1916d2ce9fa0fafbf" - integrity sha512-ewFyyFM6wdFTOqCiId5GQNi7owDdLEonQhB4h8tF6r3HV52bRlDvZA4aDos+ft6N/XY2J6L0qlFTFq+/oiurXw== - dependencies: - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-arn-parser" "3.495.0" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/protocol-http" "^3.2.1" - "@smithy/signature-v4" "^2.1.3" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/util-config-provider" "^2.2.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-signing@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.523.0.tgz#1b2c458eb6a00da45b0800916ee463ff727c0717" - integrity sha512-pFXV4don6qcmew/OvEjLUr2foVjzoJ8o5k57Oz9yAHz8INx3RHK8MP/K4mVhHo6n0SquRcWrm4kY/Tw+89gkEA== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/protocol-http" "^3.2.1" - "@smithy/signature-v4" "^2.1.3" - "@smithy/types" "^2.10.1" - "@smithy/util-middleware" "^2.1.3" - tslib "^2.5.0" - -"@aws-sdk/middleware-ssec@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.523.0.tgz#1bc0b57859a3e90af7e6103341903896f601e622" - integrity sha512-FaqAZQeF5cQzZLOIboIJRaWVOQ2F2pJZAXGF5D7nJsxYNFChotA0O0iWimBRxU35RNn7yirVxz35zQzs20ddIw== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-user-agent@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.525.0.tgz#3ac154829460271c53ad49d8301d4c849e9afb9f" - integrity sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ== - dependencies: - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-endpoints" "3.525.0" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/region-config-resolver@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.525.0.tgz#ebd7edd0059857f59ed605c37cf5752542cf8914" - integrity sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/types" "^2.10.1" - "@smithy/util-config-provider" "^2.2.1" - "@smithy/util-middleware" "^2.1.3" - tslib "^2.5.0" - -"@aws-sdk/signature-v4-multi-region@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.525.0.tgz#b9b7e1079b0a8a1df4bb282216aa20b56d139ba5" - integrity sha512-j8gkdfiokaherRgokfZBl2azYBMHlegT7pOnR/3Y79TSz6G+bJeIkuNk8aUbJArr6R8nvAM1j4dt1rBM+efolQ== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@smithy/protocol-http" "^3.2.1" - "@smithy/signature-v4" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/token-providers@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.525.0.tgz#370d206a06e77e29ec0f76408654b16d6612f0d2" - integrity sha512-puVjbxuK0Dq7PTQ2HdddHy2eQjOH8GZbump74yWJa6JVpRW84LlOcNmP+79x4Kscvz2ldWB8XDFw/pcCiSDe5A== - dependencies: - "@aws-sdk/client-sso-oidc" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/shared-ini-file-loader" "^2.3.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/types@3.523.0", "@aws-sdk/types@^3.222.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.523.0.tgz#2bb11390023949f31d9211212f41e245a7f03489" - integrity sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/util-arn-parser@3.495.0": - version "3.495.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz#539f2d6dfef343a80324348f1f9a1b7eed2390f3" - integrity sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-endpoints@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.525.0.tgz#d9f53b60e69dbe4623a4200d10be1be2ac73438f" - integrity sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/types" "^2.10.1" - "@smithy/util-endpoints" "^1.1.4" - tslib "^2.5.0" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.495.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz#9034fd8db77991b28ed20e067acdd53e8b8f824b" - integrity sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-browser@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.523.0.tgz#77188e83f9d470ddf140fe8c5d4d51049c9d5898" - integrity sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/types" "^2.10.1" - bowser "^2.11.0" - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-node@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.525.0.tgz#aa96c28bad8360d2a350c30c3c209c35f99ac5ee" - integrity sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.523.0.tgz#6abdaf5716f6c7153c328bbbd499345fae755dce" - integrity sha512-wfvyVymj2TUw7SuDor9IuFcAzJZvWRBZotvY/wQJOlYa3UP3Oezzecy64N4FWfBJEsZdrTN+HOZFl+IzTWWnUA== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@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.38" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.38.tgz#364d57b04736bbbbfa5a5777d038b03c9d81619b" - integrity sha512-XhcqNwaKvbnXwcHO+oIUx5vcdP/PpkdtNHAPR7sdZ5vjnAvSQgSMCgSqH0qu0gvqiJgblULdqJ5rf77QSIAHgg== - dependencies: - "@aws-sdk/client-s3" "^3.400.0" - "@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" - -"@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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.1.3.tgz#19997b701b36294c8d27bbc5e59167da2c719fae" - integrity sha512-c2aYH2Wu1RVE3rLlVgg2kQOBJGM0WbjReQi5DnPTm2Zb7F0gk7J2aeQeaX2u/lQZoHl6gv8Oac7mt9alU3+f4A== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/chunked-blob-reader-native@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.1.tgz#6b98479c8f6ea94832dd6a6e5ca78969a44eafe1" - integrity sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ== - dependencies: - "@smithy/util-base64" "^2.1.1" - tslib "^2.5.0" - -"@smithy/chunked-blob-reader@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz#997faba8e197e0cb9824dad30ae581466e386e57" - integrity sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ== - dependencies: - tslib "^2.5.0" - -"@smithy/config-resolver@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.1.4.tgz#cb870f82494b10c223c60ba4298b438d9185b4be" - integrity sha512-AW2WUZmBAzgO3V3ovKtsUbI3aBNMeQKFDumoqkNxaVDWF/xfnxAWqBKDr/NuG7c06N2Rm4xeZLPiJH/d+na0HA== - dependencies: - "@smithy/node-config-provider" "^2.2.4" - "@smithy/types" "^2.10.1" - "@smithy/util-config-provider" "^2.2.1" - "@smithy/util-middleware" "^2.1.3" - tslib "^2.5.0" - -"@smithy/core@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.3.5.tgz#7523da67b49e165e09ee8019601bea410bf92c38" - integrity sha512-Rrc+e2Jj6Gu7Xbn0jvrzZlSiP2CZocIOfZ9aNUA82+1sa6GBnxqL9+iZ9EKHeD9aqD1nU8EK4+oN2EiFpSv7Yw== - dependencies: - "@smithy/middleware-endpoint" "^2.4.4" - "@smithy/middleware-retry" "^2.1.4" - "@smithy/middleware-serde" "^2.1.3" - "@smithy/protocol-http" "^3.2.1" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/util-middleware" "^2.1.3" - tslib "^2.5.0" - -"@smithy/credential-provider-imds@^2.2.3", "@smithy/credential-provider-imds@^2.2.4": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.4.tgz#7b237ad8623b782578335b61a616c5463b13451b" - integrity sha512-DdatjmBZQnhGe1FhI8gO98f7NmvQFSDiZTwC3WMvLTCKQUY+Y1SVkhJqIuLu50Eb7pTheoXQmK+hKYUgpUWsNA== - dependencies: - "@smithy/node-config-provider" "^2.2.4" - "@smithy/property-provider" "^2.1.3" - "@smithy/types" "^2.10.1" - "@smithy/url-parser" "^2.1.3" - tslib "^2.5.0" - -"@smithy/eventstream-codec@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.1.3.tgz#6be114d3c4d94f3bfd2e32cb258851baa6129acf" - integrity sha512-rGlCVuwSDv6qfKH4/lRxFjcZQnIE0LZ3D4lkMHg7ZSltK9rA74r0VuGSvWVQ4N/d70VZPaniFhp4Z14QYZsa+A== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.10.1" - "@smithy/util-hex-encoding" "^2.1.1" - tslib "^2.5.0" - -"@smithy/eventstream-serde-browser@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.3.tgz#97427465aa277e66d3dcacab5f2bae890949a890" - integrity sha512-qAgKbZ9m2oBfSyJWWurX/MvQFRPrYypj79cDSleEgDwBoez6Tfd+FTpu2L/j3ZeC3mDlDHIKWksoeaXZpLLAHw== - dependencies: - "@smithy/eventstream-serde-universal" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/eventstream-serde-config-resolver@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.3.tgz#09487fd5e3c22c7e53ff74d14de3924ab16b8751" - integrity sha512-48rvsNv/MgAFCxOE0qwR7ZwKhaEdDoTxqH5HM+T6SDxICmPGb7gEuQzjTxQhcieCPgqyXeZFW8cU0QJxdowuIg== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/eventstream-serde-node@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.3.tgz#f51bf8e4eba9d1aaa995200a36c3d3fb5a29734d" - integrity sha512-RPJWWDhj8isk3NtGfm3Xt1WdHyX9ZE42V+m1nLU1I0zZ1hEol/oawHsTnhva/VR5bn+bJ2zscx+BYr0cEPRtmg== - dependencies: - "@smithy/eventstream-serde-universal" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/eventstream-serde-universal@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.3.tgz#79ab2e313c4e6621d8d9ecb98e0c826e9d8d21da" - integrity sha512-ssvSMk1LX2jRhiOVgVLGfNJXdB8SvyjieKcJDHq698Gi3LOog6g/+l7ggrN+hZxyjUiDF4cUxgKaZTBUghzhLw== - dependencies: - "@smithy/eventstream-codec" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/fetch-http-handler@^2.4.3": - version "2.4.3" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.3.tgz#568bd2031af242fc9172e41dfb364d36d48631d1" - integrity sha512-Fn/KYJFo6L5I4YPG8WQb2hOmExgRmNpVH5IK2zU3JKrY5FKW7y9ar5e0BexiIC9DhSKqKX+HeWq/Y18fq7Dkpw== - dependencies: - "@smithy/protocol-http" "^3.2.1" - "@smithy/querystring-builder" "^2.1.3" - "@smithy/types" "^2.10.1" - "@smithy/util-base64" "^2.1.1" - tslib "^2.5.0" - -"@smithy/hash-blob-browser@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.3.tgz#f63b391a8bedf640ad120d576c485a10f16c280b" - integrity sha512-sHLTM5xQYw5Wxz07DFo+eh1PVC6P5+kazQRF1k5nsvOhZG5VnkIy4LZ7N0ZNWqJx16g9otGd5MvqUOpb3WWtgA== - dependencies: - "@smithy/chunked-blob-reader" "^2.1.1" - "@smithy/chunked-blob-reader-native" "^2.1.1" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/hash-node@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.1.3.tgz#649b056966e1cba9f738236cbf4f05e8e9820deb" - integrity sha512-FsAPCUj7VNJIdHbSxMd5uiZiF20G2zdSDgrgrDrHqIs/VMxK85Vqk5kMVNNDMCZmMezp6UKnac0B4nAyx7HJ9g== - dependencies: - "@smithy/types" "^2.10.1" - "@smithy/util-buffer-from" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/hash-stream-node@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.1.3.tgz#c61f5d10cc236cef69af1278a552a42162bc254c" - integrity sha512-fWpUx2ca/u5lcD5RhNJogEG5FD7H0RDDpYmfQgxFqIUv3Ow7bZsapMukh8uzQPVO8R+NDAvSdxmgXoy4Hz8sFw== - dependencies: - "@smithy/types" "^2.10.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/invalid-dependency@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.1.3.tgz#0f0895d3db2e03493f933e10c27551f059b92b6c" - integrity sha512-wkra7d/G4CbngV4xsjYyAYOvdAhahQje/WymuQdVEnXFExJopEu7fbL5AEAlBPgWHXwu94VnCSG00gVzRfExyg== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/is-array-buffer@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz#07b4c77ae67ed58a84400c76edd482271f9f957b" - integrity sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ== - dependencies: - tslib "^2.5.0" - -"@smithy/md5-js@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.1.3.tgz#edf6a570a06fe84a126db90e335d6a5a12b25c69" - integrity sha512-zmn3M6+mP4IJlSmXBN9964AztgkIO8b5lRzAgdJn9AdCFwA6xLkcW2B6uEnpBjvotxtQMmXTUP19tIO7NmFPpw== - dependencies: - "@smithy/types" "^2.10.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/middleware-content-length@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.1.3.tgz#243d74789a311366948dec5a85b03146ac580c51" - integrity sha512-aJduhkC+dcXxdnv5ZpM3uMmtGmVFKx412R1gbeykS5HXDmRU6oSsyy2SoHENCkfOGKAQOjVE2WVqDJibC0d21g== - dependencies: - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/middleware-endpoint@^2.4.4": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.4.tgz#aa42dc8340a8511a8c66d597cf774e27f0109dd9" - integrity sha512-4yjHyHK2Jul4JUDBo2sTsWY9UshYUnXeb/TAK/MTaPEb8XQvDmpwSFnfIRDU45RY1a6iC9LCnmJNg/yHyfxqkw== - dependencies: - "@smithy/middleware-serde" "^2.1.3" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/shared-ini-file-loader" "^2.3.4" - "@smithy/types" "^2.10.1" - "@smithy/url-parser" "^2.1.3" - "@smithy/util-middleware" "^2.1.3" - tslib "^2.5.0" - -"@smithy/middleware-retry@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.1.4.tgz#a468c64b0186b8edeef444ee9249a88675f3fe23" - integrity sha512-Cyolv9YckZTPli1EkkaS39UklonxMd08VskiuMhURDjC0HHa/AD6aK/YoD21CHv9s0QLg0WMLvk9YeLTKkXaFQ== - dependencies: - "@smithy/node-config-provider" "^2.2.4" - "@smithy/protocol-http" "^3.2.1" - "@smithy/service-error-classification" "^2.1.3" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/util-middleware" "^2.1.3" - "@smithy/util-retry" "^2.1.3" - tslib "^2.5.0" - uuid "^8.3.2" - -"@smithy/middleware-serde@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.1.3.tgz#dbb3c4257b66fdab3019809106b02f953bd42a44" - integrity sha512-s76LId+TwASrHhUa9QS4k/zeXDUAuNuddKklQzRgumbzge5BftVXHXIqL4wQxKGLocPwfgAOXWx+HdWhQk9hTg== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/middleware-stack@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.1.3.tgz#7cf77e6ad5c885bc0b8b0857e9349017d530f7d1" - integrity sha512-opMFufVQgvBSld/b7mD7OOEBxF6STyraVr1xel1j0abVILM8ALJvRoFbqSWHGmaDlRGIiV9Q5cGbWi0sdiEaLQ== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/node-config-provider@^2.2.4": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.2.4.tgz#6c2406a47c4ece45f158a282bb148a6be7867817" - integrity sha512-nqazHCp8r4KHSFhRQ+T0VEkeqvA0U+RhehBSr1gunUuNW3X7j0uDrWBxB2gE9eutzy6kE3Y7L+Dov/UXT871vg== - dependencies: - "@smithy/property-provider" "^2.1.3" - "@smithy/shared-ini-file-loader" "^2.3.4" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/node-http-handler@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.4.1.tgz#08409108460fcfaa9068f78e1ef655d7af952fef" - integrity sha512-HCkb94soYhJMxPCa61wGKgmeKpJ3Gftx1XD6bcWEB2wMV1L9/SkQu/6/ysKBnbOzWRE01FGzwrTxucHypZ8rdg== - dependencies: - "@smithy/abort-controller" "^2.1.3" - "@smithy/protocol-http" "^3.2.1" - "@smithy/querystring-builder" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/property-provider@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.1.3.tgz#faaa9b7f605725168493e74600a74beca1b059fb" - integrity sha512-bMz3se+ySKWNrgm7eIiQMa2HO/0fl2D0HvLAdg9pTMcpgp4SqOAh6bz7Ik6y7uQqSrk4rLjIKgbQ6yzYgGehCQ== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/protocol-http@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.2.1.tgz#946fcd076525f8208d659fbc70e2a32d21ed1291" - integrity sha512-KLrQkEw4yJCeAmAH7hctE8g9KwA7+H2nSJwxgwIxchbp/L0B5exTdOQi9D5HinPLlothoervGmhpYKelZ6AxIA== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/querystring-builder@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.1.3.tgz#e64e126f565b2aae6e9abd1bebc9aa0839842e8d" - integrity sha512-kFD3PnNqKELe6m9GRHQw/ftFFSZpnSeQD4qvgDB6BQN6hREHELSosVFUMPN4M3MDKN2jAwk35vXHLoDrNfKu0A== - dependencies: - "@smithy/types" "^2.10.1" - "@smithy/util-uri-escape" "^2.1.1" - tslib "^2.5.0" - -"@smithy/querystring-parser@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.1.3.tgz#2786dfa36ac6c7a691eb651339fbcaf160891e69" - integrity sha512-3+CWJoAqcBMR+yvz6D+Fc5VdoGFtfenW6wqSWATWajrRMGVwJGPT3Vy2eb2bnMktJc4HU4bpjeovFa566P3knQ== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/service-error-classification@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.3.tgz#13dd43ad56576e2b1b7c5a1581affdb9e34dc8ed" - integrity sha512-iUrpSsem97bbXHHT/v3s7vaq8IIeMo6P6cXdeYHrx0wOJpMeBGQF7CB0mbJSiTm3//iq3L55JiEm8rA7CTVI8A== - dependencies: - "@smithy/types" "^2.10.1" - -"@smithy/shared-ini-file-loader@^2.3.3", "@smithy/shared-ini-file-loader@^2.3.4": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.4.tgz#2357bd9dfbb67a951ccd06ca9c872aa845fad888" - integrity sha512-CiZmPg9GeDKbKmJGEFvJBsJcFnh0AQRzOtQAzj1XEa8N/0/uSN/v1LYzgO7ry8hhO8+9KB7+DhSW0weqBra4Aw== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/signature-v4@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.1.3.tgz#ff6b812ce562be97ce182376aeb22e558b64776b" - integrity sha512-Jq4iPPdCmJojZTsPePn4r1ULShh6ONkokLuxp1Lnk4Sq7r7rJp4HlA1LbPBq4bD64TIzQezIpr1X+eh5NYkNxw== - dependencies: - "@smithy/eventstream-codec" "^2.1.3" - "@smithy/is-array-buffer" "^2.1.1" - "@smithy/types" "^2.10.1" - "@smithy/util-hex-encoding" "^2.1.1" - "@smithy/util-middleware" "^2.1.3" - "@smithy/util-uri-escape" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/smithy-client@^2.4.2": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.4.2.tgz#79e960c8761ae7dc06f592d2691419706745aab7" - integrity sha512-ntAFYN51zu3N3mCd95YFcFi/8rmvm//uX+HnK24CRbI6k5Rjackn0JhgKz5zOx/tbNvOpgQIwhSX+1EvEsBLbA== - dependencies: - "@smithy/middleware-endpoint" "^2.4.4" - "@smithy/middleware-stack" "^2.1.3" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - "@smithy/util-stream" "^2.1.3" - tslib "^2.5.0" - -"@smithy/types@^2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.10.1.tgz#f2a923fd080447ad2ca19bfd8a77abf15be0b8e8" - integrity sha512-hjQO+4ru4cQ58FluQvKKiyMsFg0A6iRpGm2kqdH8fniyNd2WyanoOsYJfMX/IFLuLxEoW6gnRkNZy1y6fUUhtA== - dependencies: - tslib "^2.5.0" - -"@smithy/url-parser@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.1.3.tgz#f8a7176fb6fdd38a960d546606576541ae6eb7c0" - integrity sha512-X1NRA4WzK/ihgyzTpeGvI9Wn45y8HmqF4AZ/FazwAv8V203Ex+4lXqcYI70naX9ETqbqKVzFk88W6WJJzCggTQ== - dependencies: - "@smithy/querystring-parser" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/util-base64@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.1.1.tgz#af729085cc9d92ebd54a5d2c5d0aa5a0c31f83bf" - integrity sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g== - dependencies: - "@smithy/util-buffer-from" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-body-length-browser@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz#1fc77072768013ae646415eedb9833cd252d055d" - integrity sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag== - dependencies: - tslib "^2.5.0" - -"@smithy/util-body-length-node@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz#a6f5c9911f1c3e23efb340d5ce7a590b62f2056e" - integrity sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg== - dependencies: - tslib "^2.5.0" - -"@smithy/util-buffer-from@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz#f9346bf8b23c5ba6f6bdb61dd9db779441ba8d08" - integrity sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg== - dependencies: - "@smithy/is-array-buffer" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-config-provider@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz#aea0a80236d6cedaee60473802899cff4a8cc0ba" - integrity sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw== - dependencies: - tslib "^2.5.0" - -"@smithy/util-defaults-mode-browser@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.4.tgz#e3e85f44480bf8c83a2e22247dd5a7a820ceb655" - integrity sha512-J6XAVY+/g7jf03QMnvqPyU+8jqGrrtXoKWFVOS+n1sz0Lg8HjHJ1ANqaDN+KTTKZRZlvG8nU5ZrJOUL6VdwgcQ== - dependencies: - "@smithy/property-provider" "^2.1.3" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - bowser "^2.11.0" - tslib "^2.5.0" - -"@smithy/util-defaults-mode-node@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.3.tgz#23f876eb107ef066c042b4dfdeef637a7c330bb5" - integrity sha512-ttUISrv1uVOjTlDa3nznX33f0pthoUlP+4grhTvOzcLhzArx8qHB94/untGACOG3nlf8vU20nI2iWImfzoLkYA== - dependencies: - "@smithy/config-resolver" "^2.1.4" - "@smithy/credential-provider-imds" "^2.2.4" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/property-provider" "^2.1.3" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/util-endpoints@^1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.1.4.tgz#4a75de883ac59d042ae5426c9a7d8e274d047980" - integrity sha512-/qAeHmK5l4yQ4/bCIJ9p49wDe9rwWtOzhPHblu386fwPNT3pxmodgcs9jDCV52yK9b4rB8o9Sj31P/7Vzka1cg== - dependencies: - "@smithy/node-config-provider" "^2.2.4" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/util-hex-encoding@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz#978252b9fb242e0a59bae4ead491210688e0d15f" - integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg== - dependencies: - tslib "^2.5.0" - -"@smithy/util-middleware@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.1.3.tgz#6169d7b1088d2bb29d0129c9146c856a61026e98" - integrity sha512-/+2fm7AZ2ozl5h8wM++ZP0ovE9/tiUUAHIbCfGfb3Zd3+Dyk17WODPKXBeJ/TnK5U+x743QmA0xHzlSm8I/qhw== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/util-retry@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.1.3.tgz#715a5c02c194ae56b9be49fda510b362fb075af3" - integrity sha512-Kbvd+GEMuozbNUU3B89mb99tbufwREcyx2BOX0X2+qHjq6Gvsah8xSDDgxISDwcOHoDqUWO425F0Uc/QIRhYkg== - dependencies: - "@smithy/service-error-classification" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@smithy/util-stream@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.1.3.tgz#fd0de1d8dcb0015a95735df7229b4a1ded06b50e" - integrity sha512-HvpEQbP8raTy9n86ZfXiAkf3ezp1c3qeeO//zGqwZdrfaoOpGKQgF2Sv1IqZp7wjhna7pvczWaGUHjcOPuQwKw== - dependencies: - "@smithy/fetch-http-handler" "^2.4.3" - "@smithy/node-http-handler" "^2.4.1" - "@smithy/types" "^2.10.1" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-buffer-from" "^2.1.1" - "@smithy/util-hex-encoding" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-uri-escape@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz#7eedc93b73ecda68f12fb9cf92e9fa0fbbed4d83" - integrity sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw== - dependencies: - tslib "^2.5.0" - -"@smithy/util-utf8@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.1.1.tgz#690018dd28f47f014114497735e51417ea5900a6" - integrity sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A== - dependencies: - "@smithy/util-buffer-from" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-waiter@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.1.3.tgz#b3e4c0374e5ee46ecc9eae7812fa870d7b192897" - integrity sha512-3R0wNFAQQoH9e4m+bVLDYNOst2qNxtxFgq03WoNHWTBOqQT3jFnOBRj1W51Rf563xDA5kwqjziksxn6RKkHB+Q== - dependencies: - "@smithy/abort-controller" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@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.1.1" - resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-3.1.1.tgz#237d4e151b8591e2ff4f0ae388f7d6b4741bacc0" - integrity sha512-TgCm6jVqMPv+OgD5uBNND/CkCwNDdXPQlcprtnXsWSBpTCy0q5CI6vRj+jsUiXE1xeRaKIX4UeaYJqzZBL92sg== - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@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.11.24" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792" - integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long== - 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.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.21.tgz#f4ca1ac8ffb05ee4b89163c2d6fac9a1a59ee149" - integrity sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw== - 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.11.9" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" - integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -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.6.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" - integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== - dependencies: - follow-redirects "^1.15.4" - 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-writer@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" - integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== - -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.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - 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.11.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af" - integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg== - 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.5.0" - -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.4: - version "1.15.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - 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.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.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.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -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== - -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@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - 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@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -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.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -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== - -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" - -packet-reader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" - integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== - -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.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.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.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" - integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== - -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.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7" - integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og== - -pg-protocol@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" - integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== - -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.11.3" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb" - integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== - dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.6.2" - pg-pool "^3.6.1" - pg-protocol "^1.6.0" - 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== - -semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -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.1" - resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.1.tgz#9380fe0a3b5ff17638d3fce30c3cf3a2396c2343" - integrity sha512-vIKKzQ9dGp2aBOxQRD1FmUYViuQiKXSJ8yah8TsaBx4U3BokJt+Y2A0qz2C4pj08uX59qpWxRqSLEfRmVOEgQw== - 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.11.1, 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.3.1, tslib@^2.5.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -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.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== - -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== - -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== - -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.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -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.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -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== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -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 03108ffe893f6b95dc6df8bb7f9e528e3d1b8ed5 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 7 Mar 2024 00:07:49 +0000 Subject: [PATCH 0030/1590] fix rev --- fees/banana-gun-trading.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/fees/banana-gun-trading.ts b/fees/banana-gun-trading.ts index 30ec615dd5..32c13e53a5 100644 --- a/fees/banana-gun-trading.ts +++ b/fees/banana-gun-trading.ts @@ -75,6 +75,7 @@ const fetchBlats = async (timestamp: number, _: ChainBlocks, options: FetchOptio const data = log.data.replace('0x', ''); const gasToken = data.slice(0, 64); dailyFees.addGasToken(Number('0x' + gasToken)); + dailyRevenue.addGasToken(Number('0x' + gasToken)); }); return { dailyFees: dailyFees, From 0b079c3fe3c1d0023105c1c7c5eef0da999135af Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 7 Mar 2024 01:56:54 +0000 Subject: [PATCH 0031/1590] stars arena fix --- fees/stars-arena.ts | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/fees/stars-arena.ts b/fees/stars-arena.ts index 3b1c3c89b4..86e3354943 100644 --- a/fees/stars-arena.ts +++ b/fees/stars-arena.ts @@ -1,18 +1,27 @@ -import { Adapter, DISABLED_ADAPTER_KEY, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import disabledAdapter from "../helpers/disabledAdapter"; -const fetch = async (timestamp: number): Promise => { +const fetch = async ({createBalances, getLogs}: FetchOptions) => { + const dailyFees = createBalances(); + const dailyRevenue = createBalances() + const logs = await getLogs({ + topic: '0xc9d4f93ded9b42fa24561e02b2a40f720f71601eb1b3f7b3fd4eff20877639ee', + target: '0xC605C2cf66ee98eA925B1bb4FeA584b71C00cC4C', + eventAbi: 'event Trade (address trader, address subject, bool isBuy, uint256 shareAmount, uint256 amount, uint256 protocolAmount, uint256 subjectAmount, uint256 referralAmount, uint256 supply, uint256 buyPrice, uint256 myShares)' + }); + logs.map((log: any) => { + dailyFees.addGasToken(log.protocolAmount+log.subjectAmount+log.referralAmount); + dailyRevenue.addGasToken(log.protocolAmount) + }); return { - dailyFees: `${0}`, - dailyRevenue: `${0}`, - timestamp + dailyFees, + dailyRevenue } } const adapter: Adapter = { + version: 2, adapter: { - [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.AVAX]: { fetch: fetch, start: 1695081600, From 862194f775ccff8943feda09ba9d72a8dbb81e0a Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 7 Mar 2024 02:09:51 +0000 Subject: [PATCH 0032/1590] fix --- fees/stars-arena.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/stars-arena.ts b/fees/stars-arena.ts index 86e3354943..d25feeeee8 100644 --- a/fees/stars-arena.ts +++ b/fees/stars-arena.ts @@ -6,7 +6,7 @@ const fetch = async ({createBalances, getLogs}: FetchOptions) => { const dailyRevenue = createBalances() const logs = await getLogs({ topic: '0xc9d4f93ded9b42fa24561e02b2a40f720f71601eb1b3f7b3fd4eff20877639ee', - target: '0xC605C2cf66ee98eA925B1bb4FeA584b71C00cC4C', + targets: ['0xC605C2cf66ee98eA925B1bb4FeA584b71C00cC4C', '0x69B7F08B2952e2EE3CA4222190BCF07831f1096f'], eventAbi: 'event Trade (address trader, address subject, bool isBuy, uint256 shareAmount, uint256 amount, uint256 protocolAmount, uint256 subjectAmount, uint256 referralAmount, uint256 supply, uint256 buyPrice, uint256 myShares)' }); logs.map((log: any) => { From 1ec32fb5180a2754d5fb2706d5745bbf7ea71040 Mon Sep 17 00:00:00 2001 From: DackieSwap <132213730+DackieSwap@users.noreply.github.com> Date: Thu, 7 Mar 2024 09:33:08 +0700 Subject: [PATCH 0033/1590] change start time Blast --- dexs/dackieswap-v2/index.ts | 2 +- dexs/dackieswap/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/dackieswap-v2/index.ts b/dexs/dackieswap-v2/index.ts index b1baf4a8df..5a82fd901d 100644 --- a/dexs/dackieswap-v2/index.ts +++ b/dexs/dackieswap-v2/index.ts @@ -52,7 +52,7 @@ const adapter: SimpleAdapter = { chain === CHAIN.BASE ? 1690173000 : chain === CHAIN.OPTIMISM ? 1705993200 : chain === CHAIN.ARBITRUM ? 1707885300 - : chain === CHAIN.BLAST ? 193913 + : chain === CHAIN.BLAST ? 1709722800 : 0, customBackfill: customBackfill(chain, graphs), meta: {methodology}, diff --git a/dexs/dackieswap/index.ts b/dexs/dackieswap/index.ts index 7b052c0e25..c6cdcdb76b 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -38,7 +38,7 @@ const v3StartTimes = { [CHAIN.BASE]: 1691712000, [CHAIN.OPTIMISM]: 1705993200, [CHAIN.ARBITRUM]: 1707885300, - [CHAIN.BLAST]: 193913, + [CHAIN.BLAST]: 1709722800, } as IJSON; const adapter: SimpleAdapter = { From 0d8dc692555aabca62fcf0518cc1135bc0c193f9 Mon Sep 17 00:00:00 2001 From: vish-stride Date: Wed, 6 Mar 2024 21:44:51 -0500 Subject: [PATCH 0034/1590] add stTIA, stDYDX, and stCMDX fees --- fees/stride.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/fees/stride.ts b/fees/stride.ts index 557ffe25c9..61fc7816b6 100644 --- a/fees/stride.ts +++ b/fees/stride.ts @@ -43,12 +43,24 @@ const adapter: Adapter = { start: 0, meta, }, + celestia: { + fetch: fetch("celestia"), + runAtCurrTime: true, + start: 0, + meta, + }, osmosis: { fetch: fetch("osmosis"), runAtCurrTime: true, start: 0, meta, }, + dydx: { + fetch: fetch("dydx"), + runAtCurrTime: true, + start: 0, + meta, + }, juno: { fetch: fetch("juno"), runAtCurrTime: true, @@ -85,6 +97,12 @@ const adapter: Adapter = { start: 0, meta, }, + comdex: { + fetch: fetch("comdex"), + runAtCurrTime: true, + start: 0, + meta, + }, }, }; From f900d705703946f94234c5de644a27926532c092 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 7 Mar 2024 02:47:48 +0000 Subject: [PATCH 0035/1590] fix version --- dexs/dackieswap/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/dackieswap/index.ts b/dexs/dackieswap/index.ts index c6cdcdb76b..6c4859ad2b 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -60,6 +60,7 @@ const adapter: SimpleAdapter = { start: async () => v3StartTimes[CHAIN.BLAST] }, }, + version: 2 }; export default adapter; From afea3bcdf09f67ce87d76ac3450dd4b86bc174e3 Mon Sep 17 00:00:00 2001 From: dev Date: Thu, 7 Mar 2024 10:29:18 +0700 Subject: [PATCH 0036/1590] Add cellana vomlume & fees --- dexs/cellana-finance/index.ts | 55 +++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 dexs/cellana-finance/index.ts diff --git a/dexs/cellana-finance/index.ts b/dexs/cellana-finance/index.ts new file mode 100644 index 0000000000..5370540693 --- /dev/null +++ b/dexs/cellana-finance/index.ts @@ -0,0 +1,55 @@ +import fetchURL from "../../utils/fetchURL"; +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const cellanaDappUrl = 'https://api.cellana.finance/api/v1/tool/trading-volume-chart?timeframe='; + +const dayEndpoint = (endTimestamp: number, timeframe: string) => + cellanaDappUrl + timeframe + `&endTimestamp=${endTimestamp}` + +const totalEndpoint = (endTimestamp: number, timeframe: string) => + cellanaDappUrl + timeframe + +interface IVolumeall { + value: number; + timestamp: string; +} + +const fetch = async (timestamp: number) => { + const dayVolumeQuery = (await fetchURL(dayEndpoint(timestamp, "VOLUME_1H"))).data; + const dailyVolume = dayVolumeQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); + + const totalVolumeQuery = (await fetchURL(totalEndpoint(0, "VOLUME_ALL"))).data; + const totalVolume = totalVolumeQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); + + const dayFeesQuery = (await fetchURL(dayEndpoint(timestamp, "FEE_1H"))).data; + const dailyFees = dayFeesQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); + + const totalFeesQuery = (await fetchURL(totalEndpoint(0, "FEE_ALL"))).data; + const totalFees = totalFeesQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); + + const dailyProtocolRevenue = 0; + const totalProtocolRevenue = 0; + + return { + totalVolume: `${totalVolume}`, + dailyVolume: `${dailyVolume}`, + totalFees: `${totalFees}`, + dailyFees: `${dailyFees}`, + totalProtocolRevenue: `${totalProtocolRevenue}`, + dailyProtocolRevenue: `${dailyProtocolRevenue}`, + timestamp, + }; +}; + + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.APTOS]: { + fetch, + start: 1709078400 + }, + }, +}; + +export default adapter; From 8f3a1322364033e53eef8c3a4ebb39d42cf3ce2e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 7 Mar 2024 12:41:06 +0000 Subject: [PATCH 0037/1590] fix v2 --- dexs/thena-v3/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/thena-v3/index.ts b/dexs/thena-v3/index.ts index 7ecd6d7733..f0c1ac2cbc 100644 --- a/dexs/thena-v3/index.ts +++ b/dexs/thena-v3/index.ts @@ -10,5 +10,6 @@ const adapters = univ2Adapter({ totalVolume: "totalVolumeUSD", }); +adapters.version = 2; adapters.adapter.bsc.start = 1681516800; export default adapters; From acf32ca45221479bd03b4ae62e49c2696d7152eb Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 7 Mar 2024 13:22:52 +0000 Subject: [PATCH 0038/1590] rename - maping --- helpers/chains.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/chains.ts b/helpers/chains.ts index 46b4922b11..96b154afbf 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -136,7 +136,7 @@ export enum CHAIN { JBC = "jbc", ZKFAIR = "zkfair", ZETA = "zeta", - ASTAR_ZKEVM = "astar_zkevm" + ASTAR_ZKEVM = "astrzk" } // Don´t use From fedf5ca3f61e4fd7ae3e5393d530a2d4cb163ddb Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 7 Mar 2024 14:00:52 +0000 Subject: [PATCH 0039/1590] fix value --- fees/avantis/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fees/avantis/index.ts b/fees/avantis/index.ts index 3fcaa4d937..afb52569df 100644 --- a/fees/avantis/index.ts +++ b/fees/avantis/index.ts @@ -41,6 +41,8 @@ const fetchData = (_: Chain) => { const totalFees = value.history[value.history.length - 1]?.cumulativeFee; return { dailyUserFees: dailyFee ? `${dailyFee}` : undefined, + dailyFees: dailyFee ? `${dailyFee}` : undefined, + totalFees: totalFees ? `${totalFees}` : undefined, totalUserFees: totalFees ? `${totalFees}` : undefined, timestamp: todaysTimestamp, }; From e0ba3e4f68e52db3345875cd0a463bbd45a8c320 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 8 Mar 2024 01:40:21 +0000 Subject: [PATCH 0040/1590] fix url --- dexs/katana/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dexs/katana/index.ts b/dexs/katana/index.ts index 86d1260100..516e51d351 100644 --- a/dexs/katana/index.ts +++ b/dexs/katana/index.ts @@ -10,8 +10,7 @@ const { } = require("../../helpers/getUniSubgraphVolume"); const endpoints = { - [RONIN]: - "https://thegraph.roninchain.com/subgraphs/name/axieinfinity/katana-subgraph-blue", + [RONIN]: "https://thegraph-v2.roninchain.com/subgraphs/name/axieinfinity/katana-subgraph-blue", }; const blocksGraph = From 5ec62a86346abd9631329d6c6434f2c7f912e0a2 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 8 Mar 2024 02:08:58 +0000 Subject: [PATCH 0041/1590] fix cow swap --- fees/cow-protocol.ts | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/fees/cow-protocol.ts b/fees/cow-protocol.ts index 005e9d50ef..aa6856b068 100644 --- a/fees/cow-protocol.ts +++ b/fees/cow-protocol.ts @@ -1,8 +1,6 @@ -import ADDRESSES from '../helpers/coreAssets.json' import { Adapter, FetchOptions, FetchResultFees } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { Chain, } from "@defillama/sdk/build/general"; -import { queryIndexer } from "../helpers/indexer"; type TAddress = { [l: string | Chain]: string; @@ -20,27 +18,10 @@ const fetch = (chain: Chain) => { eventAbi: "event Trade (address indexed owner, address sellToken, address buyToken, uint256 sellAmount, uint256 buyAmount, uint256 feeAmount, bytes orderUid)", }) const dailyFees = options.createBalances(); - logs.map((tx: any) => dailyFees.add(tx.sellToken, tx.feeAmount)) + logs.forEach((tx: any) => { + dailyFees.add(tx.sellToken, tx.feeAmount) + }) const dailyRevenue = dailyFees.clone() - if (chain === CHAIN.ETHEREUM) { - const gasUsed = await queryIndexer(` - SELECT - COUNT(ethereum.event_logs.transaction_hash) as _count, - ethereum.transactions.gas_used * ethereum.transactions.gas_price AS sum - FROM - ethereum.event_logs - INNER JOIN ethereum.blocks ON ethereum.event_logs.block_number = ethereum.blocks.number - INNER JOIN ethereum.transactions on ethereum.event_logs.transaction_hash = ethereum.transactions.hash - WHERE - ethereum.event_logs.contract_address = '\\x9008d19f58aabd9ed0d60971565aa8510560ab41' - AND ethereum.event_logs.topic_0 = '\\xed99827efb37016f2275f98c4bcf71c7551c75d59e9b450f79fa32e60be672c2' - AND success = TRUE - AND ethereum.event_logs.block_time BETWEEN llama_replace_date_range - GROUP by sum`, options); - - gasUsed.map((e: any) => dailyRevenue.add(ADDRESSES.ethereum.WETH, e.sum * -1 / e._count)) - } - return { dailyUserFees: dailyFees, dailyFees, dailyRevenue, timestamp } } } From 0aa244baca0725df20da18410e61d66fbc2e7b4b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 8 Mar 2024 02:53:43 +0000 Subject: [PATCH 0042/1590] fix fetch chain fees --- fees/traderjoe.ts | 4 ++-- helpers/getUniSubgraphFees.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fees/traderjoe.ts b/fees/traderjoe.ts index a16ec7eabf..62e97bd09d 100644 --- a/fees/traderjoe.ts +++ b/fees/traderjoe.ts @@ -40,9 +40,9 @@ const graph = (chain: Chain) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) const historical: IData[] = (await fetchURL(endpointsV2[chain])); const dailyFees = historical - .find(dayItem => dayItem.timestamp === dayTimestamp)?.feesUsd + .find(dayItem => dayItem.timestamp === dayTimestamp)?.feesUsd || 0 const dailyRevenue = historical - .find(dayItem => dayItem.timestamp === dayTimestamp)?.protocolFeesUsd + .find(dayItem => dayItem.timestamp === dayTimestamp)?.protocolFeesUsd || 0 return { dailyUserFees: `${dailyFees}`, dailyFees: `${dailyFees}`, diff --git a/helpers/getUniSubgraphFees.ts b/helpers/getUniSubgraphFees.ts index b318474c81..4e6a8af773 100644 --- a/helpers/getUniSubgraphFees.ts +++ b/helpers/getUniSubgraphFees.ts @@ -18,7 +18,7 @@ import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, } from "../helpers/getUniSubgraphVolume"; -import type { ChainEndpoints, Fetch, FetchOptions } from "../adapters/types"; +import type { ChainEndpoints, Fetch, FetchOptions, FetchResultV2, FetchV2 } from "../adapters/types"; // To get ID for daily data https://docs.uniswap.org/protocol/V2/reference/API/entities const getUniswapDateId = (date?: Date) => getUniqStartOfTodayTimestamp(date) / 86400; @@ -138,8 +138,8 @@ const getDexChainFees = ({ volumeAdapter, totalFees = 0, protocolFees = 0, ...pa const adapterObj = volumeAdapter.adapter Object.keys(adapterObj).map(chain => { - const fetchFees = async (timestamp: number, chainBlocks: ChainBlocks, options: FetchOptions) => { - const fetchedResult: FetchResultVolume = await (adapterObj[chain].fetch as Fetch)(timestamp, chainBlocks, options) + const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { + const fetchedResult: FetchResultV2 = await (adapterObj[chain].fetch as FetchV2)(options) const chainDailyVolume = fetchedResult.dailyVolume as number; const chainTotalVolume = fetchedResult.totalVolume as number; const response: FetchResultGeneric = { timestamp } From c45618ce6e494d60b0c98223925991caf60263e2 Mon Sep 17 00:00:00 2001 From: thenaursa Date: Fri, 8 Mar 2024 06:27:22 +0100 Subject: [PATCH 0043/1590] thena fusion restore --- dexs/thena-v3/index.ts | 4 ++-- fees/thena-v3.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dexs/thena-v3/index.ts b/dexs/thena-v3/index.ts index f0c1ac2cbc..e4512d2271 100644 --- a/dexs/thena-v3/index.ts +++ b/dexs/thena-v3/index.ts @@ -2,10 +2,10 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/iliaazhel/thena-info" + [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/thenaursa/thena-fusion" }, { factoriesName: "factories", - dayData: "algebraDayData", + dayData: "fusionDayData", dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); diff --git a/fees/thena-v3.ts b/fees/thena-v3.ts index cc0174be93..7c0224307e 100644 --- a/fees/thena-v3.ts +++ b/fees/thena-v3.ts @@ -16,7 +16,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/iliaazhel/thena-info" + [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/thenaursa/thena-fusion" } const fetch = (chain: Chain) => { @@ -26,14 +26,14 @@ const fetch = (chain: Chain) => { const graphQuery = gql ` { - algebraDayData(id: ${dateId}) { + fusionDayData(id: ${dateId}) { id feesUSD } } `; - const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).algebraDayData; + const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).fusionDayData; const dailyFeeUSD = graphRes; const dailyFee = dailyFeeUSD?.feesUSD ? new BigNumber(dailyFeeUSD.feesUSD) : undefined if (dailyFee === undefined) return { timestamp } From 41a0c85a5868a5ed6a10f81e3eb0c4ad76c7ec4e Mon Sep 17 00:00:00 2001 From: Bob Baxley Date: Fri, 8 Mar 2024 14:03:53 -0500 Subject: [PATCH 0044/1590] Update maverick.ts zksync subgraph --- dexs/maverick/maverick.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/maverick/maverick.ts b/dexs/maverick/maverick.ts index e22f756ed8..05cb3ba04b 100644 --- a/dexs/maverick/maverick.ts +++ b/dexs/maverick/maverick.ts @@ -8,7 +8,7 @@ const info: { [key: string]: any } = { }, [CHAIN.ERA]: { subgraph: - "https://app.zeeve.io/shared-api/subgraph/query/query-node-0/50ad2beaefaac4b1eda15839c3eac8259d0759b7d4ae1002/subgraphs/name/zksync", + "https://api.studio.thegraph.com/query/36330/mav-zksync/version/latest", }, [CHAIN.BSC]: { subgraph: From 6a768b2f7795a273b8b88f879221ce038c7d4c54 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 8 Mar 2024 21:04:41 +0100 Subject: [PATCH 0045/1590] Update @defillama/sdk to version 5.0.38 --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8daf9bca71..12421cacd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.35", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.35.tgz", - "integrity": "sha512-+180AooJyM7VlVpFyp/9fYXjcumKHIRuxEOQ4DOSNhqv3SdkpQrlzCnSfI6DrQ36turqNWPBl6AQxrqskns55A==", + "version": "5.0.38", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.38.tgz", + "integrity": "sha512-XhcqNwaKvbnXwcHO+oIUx5vcdP/PpkdtNHAPR7sdZ5vjnAvSQgSMCgSqH0qu0gvqiJgblULdqJ5rf77QSIAHgg==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@supercharge/promise-pool": "^2.1.0", From f7acd43d5e78158f2de1fb79a494338b4faba9fb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 8 Mar 2024 21:32:24 +0100 Subject: [PATCH 0046/1590] ambient: use indexer --- dexs/ambient/index.ts | 121 +++++++++++++++--------------------------- 1 file changed, 44 insertions(+), 77 deletions(-) diff --git a/dexs/ambient/index.ts b/dexs/ambient/index.ts index 5ca77bdce0..69014d998d 100644 --- a/dexs/ambient/index.ts +++ b/dexs/ambient/index.ts @@ -1,84 +1,51 @@ -import { Adapter, ChainBlocks, FetchOptions, FetchResultVolume } from "../../adapters/types"; +import PromisePool from "@supercharge/promise-pool"; +import { FetchV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { Chain } from "@defillama/sdk/build/general"; -import { request, } from "graphql-request"; - -type TEndpoint = { - [s: Chain | string]: string; -} -const endpoints: TEndpoint = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/crocswap/croc-mainnet", -} -interface IPool { - quote: string; -} -interface ISwap { - quoteFlow: string; - pool: IPool; - dex: string; -} - -const toPositive = (n: any) => +n > 0 ? +n : n * -1 - -const graphs = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { fromTimestamp, toTimestamp, createBalances, }: FetchOptions): Promise => { - const query = ` - { - swaps(where: { - time_gte: ${fromTimestamp} - time_lte: ${toTimestamp} - dex: "croc" - }, orderBy:time, orderDirection: desc) { - quoteFlow - pool { - quote - } - dex - } - } - ` - const graphRes: ISwap[] = (await request(endpoints[chain], query)).swaps; - const dailyVolume = createBalances() - graphRes.map((e: ISwap) => { - dailyVolume.add(e.pool.quote, toPositive(e.quoteFlow)) +import { httpGet } from "../../utils/fetchURL"; + +const config = { + scroll: { endpoint: 'https://ambindexer.net/scroll-gcgo/', chainId: '0x82750', poolIdx: '420' }, + blast: { endpoint: 'https://ambindexer.net/blast-gcgo/', chainId: '0x13e31', poolIdx: '420' }, + ethereum: { endpoint: 'https://ambindexer.net/gcgo/', chainId: '0x1', poolIdx: '420' }, + canto: { endpoint: 'https://ambient-graphcache.fly.dev/gcgo/', chainId: '0x1e14', poolIdx: '420' }, +} + +const fetch: FetchV2 = async ({ startTimestamp, endTimestamp, createBalances, chain }) => { + const dailyVolume = createBalances() + const dailyFees = createBalances() + const { poolIdx, chainId, endpoint, } = config[chain] + const { data } = await httpGet(endpoint + 'pool_list', { params: { poolIdx, chainId } }) + + const { errors } = await PromisePool + .withConcurrency(10) + .for(data) + .process(async ({ base, quote }: any) => { + const { data, } = await httpGet(endpoint + 'pool_stats', { params: { poolIdx, chainId, base, quote, histTime: endTimestamp, } }) + const { data: dataOld } = await httpGet(endpoint + 'pool_stats', { params: { poolIdx, chainId, base, quote, histTime: startTimestamp, } }) + + dailyVolume.add(base, data.baseVolume) + dailyVolume.add(quote, data.quoteVolume) + dailyVolume.subtractToken(base, dataOld.baseVolume) + dailyVolume.subtractToken(quote, dataOld.quoteVolume) + + dailyFees.add(base, data.baseVolume * data.feeRate) + dailyFees.add(quote, data.quoteVolume * data.feeRate) + dailyFees.subtractToken(base, dataOld.baseVolume * data.feeRate) + dailyFees.subtractToken(quote, dataOld.quoteVolume * data.feeRate) }) - return { dailyVolume, timestamp, } - } + if (errors?.length) throw errors + return { dailyVolume, dailyFees, } } -const swapEvent = 'event CrocSwap (address indexed base, address indexed quote, uint256 poolIdx, bool isBuy, bool inBaseQty, uint128 qty, uint16 tip, uint128 limitPrice, uint128 minOut, uint8 reserveFlags, int128 baseFlow, int128 quoteFlow)'; +const adapter = { fetch, runAtCurrTime: true, start: 1685232000, } -type TContractAddress = { - [s: Chain]: string; -} -interface ILog { - quote: string; - quoteFlow: string; -} -const contract_address: TContractAddress = { - [CHAIN.SCROLL]: '0xaaaaaaaacb71bf2c8cae522ea5fa455571a74106', -} -const fetchVolume = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { getLogs, createBalances, }: FetchOptions): Promise => { - const dailyVolume = createBalances() - const logs: ILog[] = await getLogs({ target: contract_address[chain], eventAbi: swapEvent, }) - logs.forEach((log: ILog) => dailyVolume.add(log.quote, Number(log.quoteFlow) < 0 ? 0 : log.quoteFlow)); - return { dailyVolume, timestamp, } - } -} - -const adapter: Adapter = { +export default { adapter: { - [CHAIN.ETHEREUM]: { - fetch: graphs(CHAIN.ETHEREUM), - start: 1685232000, - }, - [CHAIN.SCROLL]: { - fetch: fetchVolume(CHAIN.SCROLL), - start: 1685232000, - }, - } -} - -export default adapter; + [CHAIN.ETHEREUM]: adapter, + [CHAIN.SCROLL]: adapter, + [CHAIN.CANTO]: adapter, + [CHAIN.BLAST]: adapter, + }, + version: 2, +}; From 954969341cff188b890e13708c9bd1914e43c388 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 9 Mar 2024 13:38:24 +0530 Subject: [PATCH 0047/1590] added combined daily volume for flashtrade --- dexs/flashtrade/index.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 dexs/flashtrade/index.ts diff --git a/dexs/flashtrade/index.ts b/dexs/flashtrade/index.ts new file mode 100644 index 0000000000..72c65e2ce1 --- /dev/null +++ b/dexs/flashtrade/index.ts @@ -0,0 +1,28 @@ +import { BreakdownAdapter, ProtocolType, FetchResultVolume } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; + +const marketsCombinedVolumeDaily = "https://api.prod.flash.trade/market-stat/volume-all-markets-24hr"; + +const fetchPerpVolume = async( + timestamp: number +):Promise => { + const dailyStats = (await fetchURL(marketsCombinedVolumeDaily)); + return { + dailyVolume: dailyStats?.total_volume_in_usd.toString(), + timestamp: timestamp + } +} + +const adapter: BreakdownAdapter = { + breakdown: { + perp: { + solana: { + fetch: fetchPerpVolume, + runAtCurrTime: true, + customBackfill: undefined, + start: 0 + } + } + }, + protocolType: ProtocolType.PROTOCOL, +} \ No newline at end of file From 893d254f6b0b13e4abfbfab45da85741c749e04f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 9 Mar 2024 11:53:20 +0100 Subject: [PATCH 0048/1590] ambient: bugfix - count only quote volume --- dexs/ambient/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dexs/ambient/index.ts b/dexs/ambient/index.ts index 69014d998d..90987d9a09 100644 --- a/dexs/ambient/index.ts +++ b/dexs/ambient/index.ts @@ -23,14 +23,14 @@ const fetch: FetchV2 = async ({ startTimestamp, endTimestamp, createBalances, ch const { data, } = await httpGet(endpoint + 'pool_stats', { params: { poolIdx, chainId, base, quote, histTime: endTimestamp, } }) const { data: dataOld } = await httpGet(endpoint + 'pool_stats', { params: { poolIdx, chainId, base, quote, histTime: startTimestamp, } }) - dailyVolume.add(base, data.baseVolume) + // dailyVolume.add(base, data.baseVolume) dailyVolume.add(quote, data.quoteVolume) - dailyVolume.subtractToken(base, dataOld.baseVolume) + // dailyVolume.subtractToken(base, dataOld.baseVolume) dailyVolume.subtractToken(quote, dataOld.quoteVolume) - dailyFees.add(base, data.baseVolume * data.feeRate) + // dailyFees.add(base, data.baseVolume * data.feeRate) dailyFees.add(quote, data.quoteVolume * data.feeRate) - dailyFees.subtractToken(base, dataOld.baseVolume * data.feeRate) + // dailyFees.subtractToken(base, dataOld.baseVolume * data.feeRate) dailyFees.subtractToken(quote, dataOld.quoteVolume * data.feeRate) }) if (errors?.length) throw errors From 46822bbd1b5ec6b33ceb1e0354a3970f7acf91cb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sat, 9 Mar 2024 11:53:33 +0100 Subject: [PATCH 0049/1590] Remove unnecessary property from adapter object --- dexs/ambient/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/ambient/index.ts b/dexs/ambient/index.ts index 90987d9a09..f5c063634f 100644 --- a/dexs/ambient/index.ts +++ b/dexs/ambient/index.ts @@ -37,7 +37,7 @@ const fetch: FetchV2 = async ({ startTimestamp, endTimestamp, createBalances, ch return { dailyVolume, dailyFees, } } -const adapter = { fetch, runAtCurrTime: true, start: 1685232000, } +const adapter = { fetch, start: 1685232000, } export default { From d7834009b2b25afbe9bbb6da21680d69611f0ddf Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 9 Mar 2024 13:39:14 +0000 Subject: [PATCH 0050/1590] fix adapter v2 --- helpers/getUniSubgraph/index.ts | 1 + helpers/getUniSubgraphVolume.ts | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index d3e322595b..986da8c001 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -304,6 +304,7 @@ function univ2DimensionAdapter(params: IGetChainVolumeParams, meta: BaseAdapter[ }, }; }, {} as BaseAdapter), + version: 2 }; return adapter; diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index 2761ffcc52..83bdf60e0a 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -187,7 +187,7 @@ function univ2Adapter(endpoints: { hasTotalVolume = true, gasToken = null as string|null }) { - const graphs = (gasToken === null?getChainVolume:getChainVolumeWithGasToken as typeof getChainVolume)({ + const graphs = (gasToken === null ? getChainVolume : getChainVolumeWithGasToken as typeof getChainVolume)({ graphUrls: endpoints, hasTotalVolume, totalVolume: { @@ -217,7 +217,8 @@ function univ2Adapter(endpoints: { }), } } - }, {} as BaseAdapter) + }, {} as BaseAdapter), + version: 2 }; return adapter; From a4510bca7646efe6a4895da2e7b86c16b562e7eb Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 10 Mar 2024 08:58:00 +0000 Subject: [PATCH 0051/1590] fix muesliswa --- dexs/muesliswap/index.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dexs/muesliswap/index.ts b/dexs/muesliswap/index.ts index 77f0de4336..344ad12fc6 100644 --- a/dexs/muesliswap/index.ts +++ b/dexs/muesliswap/index.ts @@ -10,17 +10,17 @@ interface IVolumeall { const historicalVolumeEndpoint = "https://analyticsv3.muesliswap.com/historical-volume"; -const fetch = async (timestamp: number, _: ChainBlocks, { startOfDay, createBalances, }: FetchOptions) => { - const dailyVolume = createBalances(); - const totalVolume = createBalances(); +const fetch = async (options: FetchOptions) => { + const dailyVolume = options.createBalances(); + const totalVolume = options.createBalances(); const vols: IVolumeall[] = (await httpGet(historicalVolumeEndpoint)); vols - .filter((volItem: IVolumeall) => Number(volItem.time) <= startOfDay) + .filter((volItem: IVolumeall) => Number(volItem.time) <= options.startOfDay) .map(({ volume }) => totalVolume.addGasToken(volume)); - dailyVolume.addGasToken(vols.find(dayItem => dayItem.time === startOfDay)?.volume) + dailyVolume.addGasToken(vols.find(dayItem => dayItem.time === options.startOfDay)?.volume) return { - timestamp: startOfDay, + timestamp: options.startOfDay, dailyVolume, // totalVolume, } From 546a5c480a27d3487eb89365b9bac0762c5c866f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 10 Mar 2024 09:44:12 +0000 Subject: [PATCH 0052/1590] fix isExpensiveAdapter --- fees/metamask.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/metamask.ts b/fees/metamask.ts index d2f976ee2e..3ae275cee7 100644 --- a/fees/metamask.ts +++ b/fees/metamask.ts @@ -91,7 +91,8 @@ const adapter: Adapter = { fetch: graph(CHAIN.ARBITRUM), start: 1672531200, } - } + }, + isExpensiveAdapter: true, } export default adapter; From 5a28efd34138f516301355442e72eb88ba6f57e5 Mon Sep 17 00:00:00 2001 From: optfi Date: Mon, 11 Mar 2024 00:16:39 +0900 Subject: [PATCH 0053/1590] add opt finance aggregator --- aggregators/opt-agg/index.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 aggregators/opt-agg/index.ts diff --git a/aggregators/opt-agg/index.ts b/aggregators/opt-agg/index.ts new file mode 100644 index 0000000000..45796061af --- /dev/null +++ b/aggregators/opt-agg/index.ts @@ -0,0 +1,25 @@ +import fetchURL from "../../utils/fetchURL"; +import { FetchResult, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const URL = "https://api.opt.finance/stat/vol"; + +const fetch = async (timestamp: number): Promise => { + const dailyVolume = (await fetchURL(`${URL}`)).data.total_24h; + + return { + dailyVolume, + timestamp, +}; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.WEMIX]: { + fetch, + start: 1705017600 + }, + }, +}; + +export default adapter; From 6a68b9d5af78427d64e4d5e44ed48786e20644b1 Mon Sep 17 00:00:00 2001 From: 0xKermo Date: Sun, 10 Mar 2024 22:14:46 +0300 Subject: [PATCH 0054/1590] add Fibrous Finance adapter --- aggregators/fibrous-finance/index.ts | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 aggregators/fibrous-finance/index.ts diff --git a/aggregators/fibrous-finance/index.ts b/aggregators/fibrous-finance/index.ts new file mode 100644 index 0000000000..a512ed9bbe --- /dev/null +++ b/aggregators/fibrous-finance/index.ts @@ -0,0 +1,37 @@ +import fetchURL from "../../utils/fetchURL"; +import { FetchResult, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const URL = "https://stats.fibrous.finance/volume"; + +interface IAPIResponse { + status: number; + data: { + dailyVolume: string; + totalVolume: string; + }; + message: string; +} +const fetch = async (timestamp: number): Promise => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + const response: IAPIResponse = await fetchURL(`${URL}`); + const dailyVolume = response.data.dailyVolume; + const totalVolume = response.data.totalVolume; + return { + dailyVolume, + totalVolume, + timestamp: dayTimestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.STARKNET]: { + fetch, + start: 1683408691, + }, + }, +}; + +export default adapter; From 5a635dc3e952241e928efd64d1ba11fd9db3fc96 Mon Sep 17 00:00:00 2001 From: Christian Baroni <7061887+christianbaroni@users.noreply.github.com> Date: Sun, 10 Mar 2024 16:36:32 -0400 Subject: [PATCH 0055/1590] Add Base data for Rainbow --- fees/rainbow-wallet.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/fees/rainbow-wallet.ts b/fees/rainbow-wallet.ts index 4430b1a86b..e639977a35 100644 --- a/fees/rainbow-wallet.ts +++ b/fees/rainbow-wallet.ts @@ -42,6 +42,7 @@ const adapter: Adapter = { [CHAIN.OPTIMISM]: chainAdapter, [CHAIN.ARBITRUM]: chainAdapter, [CHAIN.POLYGON]: chainAdapter, + [CHAIN.BASE]: chainAdapter, [CHAIN.BSC]: chainAdapter, }, From f09005fcbead3c409eb04b5c0b429c0d2423d783 Mon Sep 17 00:00:00 2001 From: Christian Baroni <7061887+christianbaroni@users.noreply.github.com> Date: Sun, 10 Mar 2024 16:39:58 -0400 Subject: [PATCH 0056/1590] Add Avalanche data for Rainbow --- fees/rainbow-wallet.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/fees/rainbow-wallet.ts b/fees/rainbow-wallet.ts index e639977a35..de93dff4d3 100644 --- a/fees/rainbow-wallet.ts +++ b/fees/rainbow-wallet.ts @@ -44,6 +44,7 @@ const adapter: Adapter = { [CHAIN.POLYGON]: chainAdapter, [CHAIN.BASE]: chainAdapter, [CHAIN.BSC]: chainAdapter, + [CHAIN.AVAX]: chainAdapter, }, } From 81c57db161f85d6f7e38aa06b0f2b3204c67fe2e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 11 Mar 2024 13:09:32 +0530 Subject: [PATCH 0057/1590] export adapter --- dexs/flashtrade/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dexs/flashtrade/index.ts b/dexs/flashtrade/index.ts index 72c65e2ce1..690460a56a 100644 --- a/dexs/flashtrade/index.ts +++ b/dexs/flashtrade/index.ts @@ -25,4 +25,6 @@ const adapter: BreakdownAdapter = { } }, protocolType: ProtocolType.PROTOCOL, -} \ No newline at end of file +} + +export default adapter; \ No newline at end of file From 1a4c36b59e94af62231c110dc5e846258c5c1f3a Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 11 Mar 2024 15:59:29 +0700 Subject: [PATCH 0058/1590] notes --- dexs/cellana-finance/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/cellana-finance/index.ts b/dexs/cellana-finance/index.ts index 5370540693..993399563d 100644 --- a/dexs/cellana-finance/index.ts +++ b/dexs/cellana-finance/index.ts @@ -1,7 +1,7 @@ import fetchURL from "../../utils/fetchURL"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; - +//API const cellanaDappUrl = 'https://api.cellana.finance/api/v1/tool/trading-volume-chart?timeframe='; const dayEndpoint = (endTimestamp: number, timeframe: string) => From e7bdc9bf46271bcdb2fc4013ed04c6b21175d321 Mon Sep 17 00:00:00 2001 From: seuchenhund <85159159+seuchenhund@users.noreply.github.com> Date: Mon, 11 Mar 2024 10:07:03 +0100 Subject: [PATCH 0059/1590] change blocksGraph endpoint to v2 as well --- dexs/katana/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/katana/index.ts b/dexs/katana/index.ts index 516e51d351..993ff07c4e 100644 --- a/dexs/katana/index.ts +++ b/dexs/katana/index.ts @@ -14,7 +14,7 @@ const endpoints = { }; const blocksGraph = - "https://thegraph.roninchain.com/subgraphs/name/axieinfinity/ronin-blocks"; + "https://thegraph-v2.roninchain.com/subgraphs/name/axieinfinity/ronin-blocks"; const ONE_DAY_IN_SECONDS = 60 * 60 * 24 const blockQuery = gql` query blocks($timestampFrom: Int!, $timestampTo: Int!) { From ad69df7472e5c13d99dfd4ad36813aeb2b9edcc6 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 11 Mar 2024 16:14:29 +0700 Subject: [PATCH 0060/1590] fix 403 server --- dexs/cellana-finance/index.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/dexs/cellana-finance/index.ts b/dexs/cellana-finance/index.ts index 993399563d..c1c72a2d0d 100644 --- a/dexs/cellana-finance/index.ts +++ b/dexs/cellana-finance/index.ts @@ -1,7 +1,12 @@ -import fetchURL from "../../utils/fetchURL"; +import {httpGet} from "../../utils/fetchURL"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; //API +const config_rule = { + headers: { + 'user-agent': 'axios/1.6.7' + } +} const cellanaDappUrl = 'https://api.cellana.finance/api/v1/tool/trading-volume-chart?timeframe='; const dayEndpoint = (endTimestamp: number, timeframe: string) => @@ -16,16 +21,16 @@ interface IVolumeall { } const fetch = async (timestamp: number) => { - const dayVolumeQuery = (await fetchURL(dayEndpoint(timestamp, "VOLUME_1H"))).data; + const dayVolumeQuery = (await httpGet(dayEndpoint(timestamp, "VOLUME_1H"), config_rule)).data; const dailyVolume = dayVolumeQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); - const totalVolumeQuery = (await fetchURL(totalEndpoint(0, "VOLUME_ALL"))).data; + const totalVolumeQuery = (await httpGet(totalEndpoint(0, "VOLUME_ALL"), config_rule)).data; const totalVolume = totalVolumeQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); - const dayFeesQuery = (await fetchURL(dayEndpoint(timestamp, "FEE_1H"))).data; + const dayFeesQuery = (await httpGet(dayEndpoint(timestamp, "FEE_1H"), config_rule)).data; const dailyFees = dayFeesQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); - const totalFeesQuery = (await fetchURL(totalEndpoint(0, "FEE_ALL"))).data; + const totalFeesQuery = (await httpGet(totalEndpoint(0, "FEE_ALL"), config_rule)).data; const totalFees = totalFeesQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); const dailyProtocolRevenue = 0; From 9c97b5b50740bcde14bcf6a7d0fa801834ecd2f9 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 11 Mar 2024 16:20:29 +0700 Subject: [PATCH 0061/1590] fix 403 --- dexs/cellana-finance/test.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 dexs/cellana-finance/test.js diff --git a/dexs/cellana-finance/test.js b/dexs/cellana-finance/test.js new file mode 100644 index 0000000000..4b616e20a5 --- /dev/null +++ b/dexs/cellana-finance/test.js @@ -0,0 +1,26 @@ + +const axios = require('axios'); + +// Configure access method, including user-agent in header and proxy rules +const config_rule = { + method: 'get', + // headers: { + // 'user-agent': 'axios/1.6.7' + // }, +} + + +const url = 'https://httpbin.io/user-agent' + +// Pass configuration and target URL detail into Axios request +axios.request({ ...config_rule, url }) + .then(response => { + // Handle the successful response + response.status === 200 ? + console.log('Response:', response.data) : + console.log(response.status); + }) + .catch(error => { + // Handle errors + console.error('Error:', `${error}`); + }); From d10b2e87495bf341e68ad29bd6074a5dc9bd0075 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 11 Mar 2024 16:20:48 +0700 Subject: [PATCH 0062/1590] fix 403 --- dexs/cellana-finance/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/cellana-finance/index.ts b/dexs/cellana-finance/index.ts index c1c72a2d0d..18d8b191ae 100644 --- a/dexs/cellana-finance/index.ts +++ b/dexs/cellana-finance/index.ts @@ -5,7 +5,8 @@ import { CHAIN } from "../../helpers/chains"; const config_rule = { headers: { 'user-agent': 'axios/1.6.7' - } + }, + withCredentials:true } const cellanaDappUrl = 'https://api.cellana.finance/api/v1/tool/trading-volume-chart?timeframe='; From d30796b0065887076937dc89bbaa694badec3bd9 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 11 Mar 2024 16:21:04 +0700 Subject: [PATCH 0063/1590] delete test file --- dexs/cellana-finance/test.js | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 dexs/cellana-finance/test.js diff --git a/dexs/cellana-finance/test.js b/dexs/cellana-finance/test.js deleted file mode 100644 index 4b616e20a5..0000000000 --- a/dexs/cellana-finance/test.js +++ /dev/null @@ -1,26 +0,0 @@ - -const axios = require('axios'); - -// Configure access method, including user-agent in header and proxy rules -const config_rule = { - method: 'get', - // headers: { - // 'user-agent': 'axios/1.6.7' - // }, -} - - -const url = 'https://httpbin.io/user-agent' - -// Pass configuration and target URL detail into Axios request -axios.request({ ...config_rule, url }) - .then(response => { - // Handle the successful response - response.status === 200 ? - console.log('Response:', response.data) : - console.log(response.status); - }) - .catch(error => { - // Handle errors - console.error('Error:', `${error}`); - }); From 7e3afd50aaa2c6289da64d0f06d0b6af4b226741 Mon Sep 17 00:00:00 2001 From: seuchenhund <85159159+seuchenhund@users.noreply.github.com> Date: Mon, 11 Mar 2024 16:07:17 +0100 Subject: [PATCH 0064/1590] adjust timestamps --- dexs/katana/index.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dexs/katana/index.ts b/dexs/katana/index.ts index 993ff07c4e..87b5c71565 100644 --- a/dexs/katana/index.ts +++ b/dexs/katana/index.ts @@ -1,4 +1,5 @@ import { SimpleAdapter } from "../../adapters/types"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const { request, gql } = require("graphql-request"); const { RONIN } = require("../../helpers/chains"); @@ -32,12 +33,16 @@ const blockQuery = gql` } `; + const getCustomBlock = async (timestamp: number) => { + + const timestampFrom = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + const block = Number( ( await request(blocksGraph, blockQuery, { - timestampFrom: timestamp - ONE_DAY_IN_SECONDS, - timestampTo: timestamp + ONE_DAY_IN_SECONDS, + timestampFrom, + timestampTo: timestampFrom + ONE_DAY_IN_SECONDS-1, }) ).blocks[0].number ); From d6e7b1c22ac488c0742459bdfd2c51aa694e0980 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 11 Mar 2024 23:44:56 +0000 Subject: [PATCH 0065/1590] fix v2 adapter --- dexs/sushiswap/trident.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dexs/sushiswap/trident.ts b/dexs/sushiswap/trident.ts index 854c7f1346..e5642af2cc 100644 --- a/dexs/sushiswap/trident.ts +++ b/dexs/sushiswap/trident.ts @@ -3,6 +3,7 @@ import { CHAIN, } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; +import { FetchOptions } from "../../adapters/types"; const endpointsTrident: Record = { [CHAIN.POLYGON]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-polygon', @@ -45,16 +46,15 @@ const trident = Object.keys(endpointsTrident).reduce( (acc, chain) => ({ ...acc, [chain]: { - fetch: async (timestamp: number) => { + fetch: async (options: FetchOptions) => { const res = await request(endpointsTrident[chain], tridentQuery, { - timestampHigh: timestamp, - timestampLow: timestamp - 3600 * 24, + timestampHigh: options.endTimestamp, + timestampLow: options.startTimestamp, }); const daily = res.factoryDaySnapshots.find((snapshot: any) => { return snapshot.factory.type == "ALL" }) return { - timestamp: timestamp, totalVolume: res.factories[0]?.volumeUSD, totalFees: res.factories[0]?.feesUSD, totalUserFees: res.factories[0]?.feesUSD, From bf57900b7f509be8c1e5ffb6a614f5ea0ab54684 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 12 Mar 2024 01:24:11 +0000 Subject: [PATCH 0066/1590] fix end timestamp --- adapters/utils/runAdapter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adapters/utils/runAdapter.ts b/adapters/utils/runAdapter.ts index 13756d73f9..3313546926 100644 --- a/adapters/utils/runAdapter.ts +++ b/adapters/utils/runAdapter.ts @@ -88,7 +88,7 @@ export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurren const api = new ChainApi({ chain, timestamp: withinTwoHours ? undefined : timestamp, block: toBlock }) const startOfDay = getUniqStartOfTodayTimestamp(new Date(toTimestamp * 1000)) const startTimestamp = fromTimestamp - const endTimestamp = toTimestamp + const endTimestamp = timestamp const getStartBlock = getFromBlock const getEndBlock = getToBlock const toApi = api From 13d3b476f2316a55d16981715f03d65804ad1f58 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 12 Mar 2024 01:45:06 +0000 Subject: [PATCH 0067/1590] modify run adapter --- adapters/utils/runAdapter.ts | 2 +- cli/testAdapter.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/adapters/utils/runAdapter.ts b/adapters/utils/runAdapter.ts index 3313546926..66074a4547 100644 --- a/adapters/utils/runAdapter.ts +++ b/adapters/utils/runAdapter.ts @@ -88,7 +88,7 @@ export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurren const api = new ChainApi({ chain, timestamp: withinTwoHours ? undefined : timestamp, block: toBlock }) const startOfDay = getUniqStartOfTodayTimestamp(new Date(toTimestamp * 1000)) const startTimestamp = fromTimestamp - const endTimestamp = timestamp + const endTimestamp = toTimestamp + 1 const getStartBlock = getFromBlock const getEndBlock = getToBlock const toApi = api diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index 438510e10f..a511cb4cb8 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -34,7 +34,7 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ const adapterVersion = module.version let timestamp = endCleanDayTimestamp if (adapterVersion === 2) { - timestamp = (process.argv[4] ? +process.argv[4] : getTimestamp30MinutesAgo()) - 86400 // 1 day; + timestamp = (process.argv[4] ? Number(process.argv[4]) : getTimestamp30MinutesAgo() - 86400) // 1 day; } console.info(`${upperCaseFirst(adapterType)} for ${formatTimestampAsDate(String(getUniqStartOfTodayTimestamp(new Date(timestamp * 1000))))}`) console.info(`_______________________________________\n`) @@ -73,4 +73,4 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ }) } else throw new Error("No compatible adapter found") process.exit(0) -})() \ No newline at end of file +})() From 3bd0de821b6ee028c7c6e1026df5aeb5167fcbc1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 12 Mar 2024 01:48:18 +0000 Subject: [PATCH 0068/1590] fix run adapter --- cli/testAdapter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index a511cb4cb8..d2ffd22cbc 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -34,7 +34,7 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ const adapterVersion = module.version let timestamp = endCleanDayTimestamp if (adapterVersion === 2) { - timestamp = (process.argv[4] ? Number(process.argv[4]) : getTimestamp30MinutesAgo() - 86400) // 1 day; + timestamp = (process.argv[4] ? Number(process.argv[4]) : getTimestamp30MinutesAgo()) // 1 day; } console.info(`${upperCaseFirst(adapterType)} for ${formatTimestampAsDate(String(getUniqStartOfTodayTimestamp(new Date(timestamp * 1000))))}`) console.info(`_______________________________________\n`) From 1e313646e921b5abc7d28e9ac613d43764d7b47d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 12 Mar 2024 04:13:57 +0000 Subject: [PATCH 0069/1590] fix chain --- dexs/flashtrade/index.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dexs/flashtrade/index.ts b/dexs/flashtrade/index.ts index 690460a56a..9c9b1dba90 100644 --- a/dexs/flashtrade/index.ts +++ b/dexs/flashtrade/index.ts @@ -1,4 +1,5 @@ import { BreakdownAdapter, ProtocolType, FetchResultVolume } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; import fetchURL from "../../utils/fetchURL"; const marketsCombinedVolumeDaily = "https://api.prod.flash.trade/market-stat/volume-all-markets-24hr"; @@ -16,9 +17,9 @@ const fetchPerpVolume = async( const adapter: BreakdownAdapter = { breakdown: { perp: { - solana: { - fetch: fetchPerpVolume, - runAtCurrTime: true, + [CHAIN.SOLANA]: { + fetch: fetchPerpVolume, + runAtCurrTime: true, customBackfill: undefined, start: 0 } @@ -27,4 +28,4 @@ const adapter: BreakdownAdapter = { protocolType: ProtocolType.PROTOCOL, } -export default adapter; \ No newline at end of file +export default adapter; From b10483df4a934cf95fe95dc24e761d07e1340e43 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 12 Mar 2024 04:19:52 +0000 Subject: [PATCH 0070/1590] set start time --- dexs/flashtrade/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/flashtrade/index.ts b/dexs/flashtrade/index.ts index 9c9b1dba90..26865da9ba 100644 --- a/dexs/flashtrade/index.ts +++ b/dexs/flashtrade/index.ts @@ -21,7 +21,7 @@ const adapter: BreakdownAdapter = { fetch: fetchPerpVolume, runAtCurrTime: true, customBackfill: undefined, - start: 0 + start: 1710028800 // start time llama collect } } }, From 3532525638622dc4053e12df774f511b347731e3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 12 Mar 2024 07:37:35 +0000 Subject: [PATCH 0071/1590] total value is spike --- dexs/ICDex/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/ICDex/index.ts b/dexs/ICDex/index.ts index 9d78b135b0..cf667a707e 100644 --- a/dexs/ICDex/index.ts +++ b/dexs/ICDex/index.ts @@ -13,7 +13,7 @@ const fetch = async (timestamp: number): Promise => { } return { dailyVolume: `${dailyVolume}`, - totalVolume: `${totalVolume}`, + // totalVolume: `${totalVolume}`, timestamp } }; From 260e5045a9b62fa4dfff251a7ec2d4cf9d984bac Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 12 Mar 2024 08:37:39 +0000 Subject: [PATCH 0072/1590] add stable swap product arb --- protocols/pancakeswap/index.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index 01d2d9a9d1..1cf59ed5b4 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -19,7 +19,8 @@ const endpoints = { }; const stablesSwapEndpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-stableswap" + [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-stableswap", + [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-stableswap-arb" } const v3Endpoint = { @@ -109,7 +110,8 @@ const startTimes = { } as IJSON const stableTimes = { - [CHAIN.BSC]: 1663718400 + [CHAIN.BSC]: 1663718400, + [CHAIN.ARBITRUM]: 1705363200 } as IJSON const v3StartTimes = { @@ -191,7 +193,7 @@ const fetchVolume: FetchV2 = async ({ endTimestamp: timestamp, createBalances }) numberOfTrade[e]['count'] = 0; numberOfTrade[e]['volume'] = 0; }) - const balances: sdk.Balances = createBalances() + const balances: sdk.Balances = createBalances() logs_swap.map((e: ISwapEventData) => { const [token0, token1] = getToken(e.type); balances.add(token0, e.amount_x_out) @@ -245,7 +247,7 @@ 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, + version: 2, breakdown: { v1: { [DISABLED_ADAPTER_KEY]: disabledAdapter, From b2853611a710591a2368abfc87f88765345e758a Mon Sep 17 00:00:00 2001 From: Oogway Date: Tue, 12 Mar 2024 14:45:24 +0530 Subject: [PATCH 0073/1590] Add mode network volume to MantisSwap dex --- dexs/MantisSwap/index.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dexs/MantisSwap/index.ts b/dexs/MantisSwap/index.ts index 4ccb415fef..187a707724 100644 --- a/dexs/MantisSwap/index.ts +++ b/dexs/MantisSwap/index.ts @@ -10,10 +10,8 @@ type PoolData = { const fetch = (chain: string) => async (timestamp: number) => { const from = timestamp - 86400; // 60*60*24 const to = timestamp; - const stats: PoolData = ( - await fetchURL( - `https://api.mantissa.finance/api/pool/stats/volume/${chain}/?from_timestamp=${from}&to_timestamp=${to}` - ) + const stats: PoolData = await fetchURL( + `https://api.mantissa.finance/api/pool/stats/volume/${chain}/?from_timestamp=${from}&to_timestamp=${to}` ); return { totalVolume: `${stats.total_volume}`, @@ -32,6 +30,10 @@ const adapter: SimpleAdapter = { fetch: fetch("1101"), start: 1685355566, }, + [CHAIN.MODE]: { + fetch: fetch("34443"), + start: 1709717650, + }, }, }; From c2ed614e07f7dae1093512384398cedbddf431d3 Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Tue, 12 Mar 2024 10:09:18 +0000 Subject: [PATCH 0074/1590] add nile-exchange --- dexs/nile-exchange-v1/index.ts | 16 +++++++ dexs/nile-exchange/index.ts | 14 ++++++ fees/nile-exchange-v1/index.ts | 16 +++++++ fees/nile-exchange/bribes.ts | 35 ++++++++++++++ fees/nile-exchange/index.ts | 85 ++++++++++++++++++++++++++++++++++ 5 files changed, 166 insertions(+) create mode 100644 dexs/nile-exchange-v1/index.ts create mode 100644 dexs/nile-exchange/index.ts create mode 100644 fees/nile-exchange-v1/index.ts create mode 100644 fees/nile-exchange/bribes.ts create mode 100644 fees/nile-exchange/index.ts diff --git a/dexs/nile-exchange-v1/index.ts b/dexs/nile-exchange-v1/index.ts new file mode 100644 index 0000000000..48e2cdb6d2 --- /dev/null +++ b/dexs/nile-exchange-v1/index.ts @@ -0,0 +1,16 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; + +const FACTORY_ADDRESS = '0xAAA16c016BF556fcD620328f0759252E29b1AB57' + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.LINEA]: { + fetch: getDexVolumeExports({ chain: CHAIN.LINEA, factory: FACTORY_ADDRESS }), + start: 1768897, + }, + } +}; + +export default adapter; diff --git a/dexs/nile-exchange/index.ts b/dexs/nile-exchange/index.ts new file mode 100644 index 0000000000..7955e47a12 --- /dev/null +++ b/dexs/nile-exchange/index.ts @@ -0,0 +1,14 @@ +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter({ + [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/nileexchange/cl-subgraph" +}, { + factoriesName: "factories", + dayData: "uniswapDayData", + dailyVolume: "volumeUSD", + totalVolume: "totalVolumeUSD", +}); + +adapters.adapter.linea.start = async () => 1768897; +export default adapters; diff --git a/fees/nile-exchange-v1/index.ts b/fees/nile-exchange-v1/index.ts new file mode 100644 index 0000000000..b3cf089702 --- /dev/null +++ b/fees/nile-exchange-v1/index.ts @@ -0,0 +1,16 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getDexFeesExports } from "../../helpers/dexVolumeLogs"; + +const FACTORY_ADDRESS = '0xAAA16c016BF556fcD620328f0759252E29b1AB57'; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.LINEA]: { + fetch: getDexFeesExports({ chain: CHAIN.LINEA, factory: FACTORY_ADDRESS,}), + start: 1705053913, + }, + } +}; + +export default adapter; \ No newline at end of file diff --git a/fees/nile-exchange/bribes.ts b/fees/nile-exchange/bribes.ts new file mode 100644 index 0000000000..6892de4354 --- /dev/null +++ b/fees/nile-exchange/bribes.ts @@ -0,0 +1,35 @@ +import request from "graphql-request"; +import { Balances } from "@defillama/sdk"; + +interface IBribes { + amount: number; + token: { + id: string; + decimals: number; + }; +} + +export const fees_bribes = async (fromBlock: number, timestamp: number, balances: Balances) => { + const endpoint = 'https://api.studio.thegraph.com/query/66247/nile-cl/version/latest'; + const graphQuery = ` + query GetBribes($fromBlock: Int!) { + bribes( + where: { timestamp_gte: ${timestamp} } + ) { + amount + token { + id + decimals + } + } + } + `; + + const graphRes: { bribes: IBribes[] } = await request(endpoint, graphQuery, { fromBlock, }); + + const logs_bribes = graphRes.bribes; + + logs_bribes.map((e: IBribes) => { + balances.add(e.token.id, e.amount * Math.pow(10, e.token.decimals)); + }) +}; diff --git a/fees/nile-exchange/index.ts b/fees/nile-exchange/index.ts new file mode 100644 index 0000000000..c06d460dfd --- /dev/null +++ b/fees/nile-exchange/index.ts @@ -0,0 +1,85 @@ +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" + +type TStartTime = { + [key: string]: number; +} +const startTimeV2: TStartTime = { + [CHAIN.LINEA]: 1705053913, +} + +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: toTimestamp, + dailyBribesRevenue: bribes, + }; +}; + +const v2Endpoints = { + [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/66247/nile-cl/version/latest/", +}; + +const VOLUME_USD = "volumeUSD"; + +const v2Graphs = getGraphDimensions({ + graphUrls: v2Endpoints, + totalVolume: { + factory: "factories", + field: DEFAULT_TOTAL_VOLUME_FIELD, + }, + dailyVolume: { + factory: DEFAULT_DAILY_VOLUME_FACTORY, + field: VOLUME_USD, + }, + feesPercent: { + type: "fees", + HoldersRevenue: 50, + ProtocolRevenue: 5, + SupplySideRevenue: 45, + UserFees: 100, // User fees are 100% of collected fees + Revenue: 50 // Revenue is 100% of collected fees + } +}); +// https://docs.ramses.exchange/ramses-cl-v2/concentrated-liquidity/fee-distribution +const methodology = { + UserFees: "User pays 0.3% fees on each swap.", + ProtocolRevenue: "Revenue going to the protocol. 5% of collected fees. (is probably right because the distribution is dynamic.)", + HoldersRevenue: "User fees are distributed among holders. 75% of collected fees. (is probably right because the distribution is dynamic.)", + SupplySideRevenue: "20% of collected fees are distributed among LPs. (is probably right because the distribution is dynamic.)" +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.LINEA]: { + fetch: async (options: FetchOptions) => { + const v2Result = await v2Graphs(CHAIN.LINEA)(options) + const bribesResult = await getBribes(options); + v2Result.dailyBribesRevenue = bribesResult.dailyBribesRevenue; + + return v2Result; + }, + start: startTimeV2[CHAIN.LINEA], + meta: { + methodology: { + ...methodology, + UserFees: "User pays 0.05%, 0.30%, or 1% on each swap.", + }, + }, + }, + }, +}; + +export default adapter; From 1c4f8a323609c3043e4aea0413f7a448805e22d9 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 12 Mar 2024 16:47:44 +0530 Subject: [PATCH 0075/1590] total perps volume --- dexs/flashtrade/index.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dexs/flashtrade/index.ts b/dexs/flashtrade/index.ts index 690460a56a..b4ef539d5a 100644 --- a/dexs/flashtrade/index.ts +++ b/dexs/flashtrade/index.ts @@ -1,14 +1,15 @@ import { BreakdownAdapter, ProtocolType, FetchResultVolume } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; -const marketsCombinedVolumeDaily = "https://api.prod.flash.trade/market-stat/volume-all-markets-24hr"; +const marketsCombinedVolumeDaily = "https://api.prod.flash.trade/market-stats"; const fetchPerpVolume = async( timestamp: number ):Promise => { - const dailyStats = (await fetchURL(marketsCombinedVolumeDaily)); + const marketStats = (await fetchURL(marketsCombinedVolumeDaily)); return { - dailyVolume: dailyStats?.total_volume_in_usd.toString(), + dailyVolume: marketStats?.dailyVolumeInUsd.toString(), + totalVolume: marketStats?.totalVolumeInUsd.toString(), timestamp: timestamp } } From a94933f10def73bd77aa764a2c794b0b2f671538 Mon Sep 17 00:00:00 2001 From: Kirill Demidov Date: Tue, 12 Mar 2024 14:44:42 +0300 Subject: [PATCH 0076/1590] add rubic aggregator --- aggregators/rubic/index.ts | 79 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 aggregators/rubic/index.ts diff --git a/aggregators/rubic/index.ts b/aggregators/rubic/index.ts new file mode 100644 index 0000000000..abeef0104c --- /dev/null +++ b/aggregators/rubic/index.ts @@ -0,0 +1,79 @@ +import fetchURL from "../../utils/fetchURL"; +import {FetchResult, SimpleAdapter} from "../../adapters/types"; +import {CHAIN} from "../../helpers/chains"; + + +const chains: Record = { + [CHAIN.SOLANA]: 'solana', + [CHAIN.ETHEREUM]: 'ethereum', + [CHAIN.BSC]: 'binance-smart-chain', + [CHAIN.AVAX]: 'avalanche', + // [CHAIN.POLYGON]: 'polygon', + // [CHAIN.ARBITRUM]: 'arbitrum', + // [CHAIN.ZKSYNC]: 'zk-sync', + // [CHAIN.BLAST]: 'blast', + // [CHAIN.LINEA]: 'linea', + // [CHAIN.SCROLL]: 'scroll', + // [CHAIN.ZETA]: 'zetachain', + // [CHAIN.MANTLE]: 'mantle', + // [CHAIN.MANTA]: 'manta-pacific', + // [CHAIN.POLYGON_ZKEVM]: 'polygon-zkevm', + // [CHAIN.PULSECHAIN]: 'pulsechain', + // [CHAIN.BASE]: 'base', + // [CHAIN.FANTOM]: 'fantom', + // [CHAIN.BOBA]: 'boba', + // [CHAIN.TELOS]: 'telos', + // [CHAIN.KAVA]: 'kava', + // [CHAIN.OPTIMISM]: 'optimism', + // [CHAIN.AURORA]: 'aurora', + // [CHAIN.OASIS]: 'oasis', + // [CHAIN.METIS]: 'metis', + // [CHAIN.KLAYTN]: 'klaytn', + // [CHAIN.VELAS]: 'velas', + // [CHAIN.SYSCOIN]: 'syscoin', + // [CHAIN.MOONRIVER]: 'moonriver', + // [CHAIN.TRON]: 'tron', + // [CHAIN.MOONBEAM]: 'moonbeam', + // [CHAIN.FUSE]: 'fuse', + // [CHAIN.CELO]: 'celo', + // [CHAIN.OKEXCHAIN]: 'oke-x-chain', + // [CHAIN.CRONOS]: 'cronos' +}; + +interface ApiResponce { + daily_volume_in_usd: string; + daily_transaction_count: string; + total_volume_in_usd: string; + total_transaction_count: string; +} + +const fetch = (chain: string) => async (timestamp: number): Promise => { + const responce: ApiResponce = ( + await fetchURL(`https://api.rubic.exchange/api/stats/defilama_onchain?date=${timestamp}&network=${chain}`) + ); + + return { + dailyVolume: responce?.daily_volume_in_usd || undefined, + totalVolume: responce?.total_volume_in_usd || undefined, + timestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + ...Object.entries(chains).reduce((acc, chain) => { + const key = chain[0]; + const value = chain[1]; + + return { + ...acc, + [key]: { + fetch: fetch(value), + start: 1672531200, // 01.01.2023 + }, + }; + }, {}), + }, +}; + +export default adapter; From c9a64df363cfbb50011c15edbde7a4359d01b29f Mon Sep 17 00:00:00 2001 From: tec05 Date: Tue, 12 Mar 2024 05:52:03 -0700 Subject: [PATCH 0077/1590] Add Archly V2 DEX dimension --- dexs/archly-finance-v2/index.ts | 68 +++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 dexs/archly-finance-v2/index.ts diff --git a/dexs/archly-finance-v2/index.ts b/dexs/archly-finance-v2/index.ts new file mode 100644 index 0000000000..d640672234 --- /dev/null +++ b/dexs/archly-finance-v2/index.ts @@ -0,0 +1,68 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; + +const FACTORY_ADDRESS = '0x12508dd9108Abab2c5fD8fC6E4984E46a3CF7824'; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ARBITRUM_NOVA]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1700784000, + }, + [CHAIN.ARBITRUM]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1700784000, + }, + [CHAIN.AVAX]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1708473600, + }, + [CHAIN.BASE]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1700784000, + }, + [CHAIN.BSC]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1700784000, + }, + [CHAIN.CRONOS]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1708473600, + }, + [CHAIN.FANTOM]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1700784000, + }, + [CHAIN.KAVA]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1700784000, + }, + [CHAIN.MANTLE]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1708473600, + }, + [CHAIN.METIS]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1708473600, + }, + [CHAIN.NEON]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1708473600, + }, + [CHAIN.OPTIMISM]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1700784000, + }, + [CHAIN.POLYGON]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1700784000, + }, + [CHAIN.TELOS]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + start: 1700784000, + }, + } +}; + +export default adapter; From 2529f29fb6d6426fa0134bce7943ec49aa355073 Mon Sep 17 00:00:00 2001 From: Kirill Demidov Date: Tue, 12 Mar 2024 16:39:23 +0300 Subject: [PATCH 0078/1590] upd chains list --- aggregators/rubic/index.ts | 56 ++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/aggregators/rubic/index.ts b/aggregators/rubic/index.ts index abeef0104c..82587154f5 100644 --- a/aggregators/rubic/index.ts +++ b/aggregators/rubic/index.ts @@ -8,36 +8,32 @@ const chains: Record = { [CHAIN.ETHEREUM]: 'ethereum', [CHAIN.BSC]: 'binance-smart-chain', [CHAIN.AVAX]: 'avalanche', - // [CHAIN.POLYGON]: 'polygon', - // [CHAIN.ARBITRUM]: 'arbitrum', - // [CHAIN.ZKSYNC]: 'zk-sync', - // [CHAIN.BLAST]: 'blast', - // [CHAIN.LINEA]: 'linea', - // [CHAIN.SCROLL]: 'scroll', - // [CHAIN.ZETA]: 'zetachain', - // [CHAIN.MANTLE]: 'mantle', - // [CHAIN.MANTA]: 'manta-pacific', - // [CHAIN.POLYGON_ZKEVM]: 'polygon-zkevm', - // [CHAIN.PULSECHAIN]: 'pulsechain', - // [CHAIN.BASE]: 'base', - // [CHAIN.FANTOM]: 'fantom', - // [CHAIN.BOBA]: 'boba', - // [CHAIN.TELOS]: 'telos', - // [CHAIN.KAVA]: 'kava', - // [CHAIN.OPTIMISM]: 'optimism', - // [CHAIN.AURORA]: 'aurora', - // [CHAIN.OASIS]: 'oasis', - // [CHAIN.METIS]: 'metis', - // [CHAIN.KLAYTN]: 'klaytn', - // [CHAIN.VELAS]: 'velas', - // [CHAIN.SYSCOIN]: 'syscoin', - // [CHAIN.MOONRIVER]: 'moonriver', - // [CHAIN.TRON]: 'tron', - // [CHAIN.MOONBEAM]: 'moonbeam', - // [CHAIN.FUSE]: 'fuse', - // [CHAIN.CELO]: 'celo', - // [CHAIN.OKEXCHAIN]: 'oke-x-chain', - // [CHAIN.CRONOS]: 'cronos' + [CHAIN.POLYGON]: 'polygon', + [CHAIN.ARBITRUM]: 'arbitrum', + [CHAIN.ZKSYNC]: 'zksync', + [CHAIN.BLAST]: 'blast', + [CHAIN.LINEA]: 'linea', + [CHAIN.SCROLL]: 'scroll', + [CHAIN.ZETA]: 'zetachain', + [CHAIN.MANTLE]: 'mantle', + [CHAIN.MANTA]: 'manta-pacific', + [CHAIN.POLYGON_ZKEVM]: 'polygon-zkevm', + [CHAIN.PULSECHAIN]: 'pulsechain', + [CHAIN.BASE]: 'base', + [CHAIN.FANTOM]: 'fantom', + [CHAIN.BOBA]: 'boba', + [CHAIN.TELOS]: 'telos-evm', + [CHAIN.KAVA]: 'kava', + [CHAIN.OPTIMISM]: 'optimistic-ethereum', + [CHAIN.AURORA]: 'aurora', + [CHAIN.METIS]: 'metis', + [CHAIN.MOONRIVER]: 'moonriver', + [CHAIN.TRON]: 'tron', + [CHAIN.MOONBEAM]: 'moonbeam', + [CHAIN.FUSE]: 'fuse', + [CHAIN.CELO]: 'celo', + [CHAIN.OKEXCHAIN]: 'oke-x-chain', + [CHAIN.CRONOS]: 'cronos' }; interface ApiResponce { From bf7a52d4a9f3bb555fee3fc14104bc0401194631 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 12 Mar 2024 13:50:31 +0000 Subject: [PATCH 0079/1590] fix current time --- aggregators/opt-agg/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aggregators/opt-agg/index.ts b/aggregators/opt-agg/index.ts index 45796061af..cf82c98f74 100644 --- a/aggregators/opt-agg/index.ts +++ b/aggregators/opt-agg/index.ts @@ -17,7 +17,8 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.WEMIX]: { fetch, - start: 1705017600 + start: 1705017600, + runAtCurrTime: true }, }, }; From 09fd61a3865ac577df5923b119f040ef447a6a80 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 12 Mar 2024 14:10:25 +0000 Subject: [PATCH 0080/1590] set run at current time --- aggregators/fibrous-finance/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/aggregators/fibrous-finance/index.ts b/aggregators/fibrous-finance/index.ts index a512ed9bbe..8e036363b6 100644 --- a/aggregators/fibrous-finance/index.ts +++ b/aggregators/fibrous-finance/index.ts @@ -30,6 +30,7 @@ const adapter: SimpleAdapter = { [CHAIN.STARKNET]: { fetch, start: 1683408691, + runAtCurrTime: true }, }, }; From 6dfa64d6929e2d50249c2e420442b3e1b1e53490 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 12 Mar 2024 15:33:54 +0000 Subject: [PATCH 0081/1590] fix start time --- dexs/nile-exchange/index.ts | 2 +- fees/nile-exchange/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/nile-exchange/index.ts b/dexs/nile-exchange/index.ts index 7955e47a12..9deddc65a2 100644 --- a/dexs/nile-exchange/index.ts +++ b/dexs/nile-exchange/index.ts @@ -10,5 +10,5 @@ const adapters = univ2Adapter({ totalVolume: "totalVolumeUSD", }); -adapters.adapter.linea.start = async () => 1768897; +adapters.adapter.linea.start = 1705968000; export default adapters; diff --git a/fees/nile-exchange/index.ts b/fees/nile-exchange/index.ts index c06d460dfd..cb6667437a 100644 --- a/fees/nile-exchange/index.ts +++ b/fees/nile-exchange/index.ts @@ -11,7 +11,7 @@ type TStartTime = { [key: string]: number; } const startTimeV2: TStartTime = { - [CHAIN.LINEA]: 1705053913, + [CHAIN.LINEA]: 1705968000, } const getBribes = async ({ fromTimestamp, toTimestamp, createBalances, getFromBlock, }: FetchOptions): Promise => { From 1bd64e630dd94763d5f664818b7df57df082b14e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 12 Mar 2024 15:43:45 +0000 Subject: [PATCH 0082/1590] fix start time --- dexs/nile-exchange-v1/index.ts | 2 +- fees/nile-exchange-v1/index.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/nile-exchange-v1/index.ts b/dexs/nile-exchange-v1/index.ts index 48e2cdb6d2..b23dd0aa8b 100644 --- a/dexs/nile-exchange-v1/index.ts +++ b/dexs/nile-exchange-v1/index.ts @@ -8,7 +8,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.LINEA]: { fetch: getDexVolumeExports({ chain: CHAIN.LINEA, factory: FACTORY_ADDRESS }), - start: 1768897, + start: 1705968000, }, } }; diff --git a/fees/nile-exchange-v1/index.ts b/fees/nile-exchange-v1/index.ts index b3cf089702..d9d055f4d8 100644 --- a/fees/nile-exchange-v1/index.ts +++ b/fees/nile-exchange-v1/index.ts @@ -8,9 +8,9 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.LINEA]: { fetch: getDexFeesExports({ chain: CHAIN.LINEA, factory: FACTORY_ADDRESS,}), - start: 1705053913, + start: 1705968000, }, } }; -export default adapter; \ No newline at end of file +export default adapter; From 91112620efebd6111869674a3d1cb98c48525d90 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 12 Mar 2024 16:31:33 +0000 Subject: [PATCH 0083/1590] morpho --- fees/morpho/index.ts | 110 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 fees/morpho/index.ts diff --git a/fees/morpho/index.ts b/fees/morpho/index.ts new file mode 100644 index 0000000000..e2b19d3e24 --- /dev/null +++ b/fees/morpho/index.ts @@ -0,0 +1,110 @@ +const { request, gql } = require("graphql-request"); +import { FetchV2, SimpleAdapter } from "../../adapters/types"; +import { getPrices } from "../../utils/prices"; + +type Market = { + loanAsset: { address: string; decimals: number }; + state: { + supplyApy: number; + borrowApy: number; + supplyAssets: number; + borrowAssets: number; + }; +}; + +const query = gql` + query { + markets { + items { + creationTimestamp + collateralAsset { + address + decimals + } + loanAsset { + address + decimals + } + state { + borrowAssets + supplyAssets + supplyApy + borrowApy + } + } + } + } +`; + +const apyToDaily = (apy: number): number => + (((apy / 100 + 1) ** (1 / 365) - 1) * 365) / (0.01 * 365); + +const fetch: FetchV2 = async (options) => { + const res = await request("https://blue-api.morpho.org/graphql", query); + + let marketData: { + [asset: string]: { + dailyLendFee: number; + dailyBorrowFee: number; + }; + } = {}; + + res.markets.items.map((m: Market) => { + const { address } = m.loanAsset; + const { supplyApy, borrowApy, supplyAssets, borrowAssets } = m.state; + if (!(address in marketData)) + marketData[address] = { + dailyLendFee: 0, + dailyBorrowFee: 0, + }; + + marketData[address].dailyLendFee += supplyAssets * apyToDaily(supplyApy); + marketData[address].dailyBorrowFee += borrowAssets * apyToDaily(borrowApy); + }); + + const prices = await getPrices( + Object.keys(marketData).map((t: string) => `ethereum:${t}`), + options.endTimestamp, + ); + + let aggregateData: { + dailyRevenue: number; + dailySupplySideRevenue: number; + dailyUserFees: number; + dailyFees?: number; + } = { + dailyRevenue: 0, + dailySupplySideRevenue: 0, + dailyUserFees: 0, + }; + + Object.keys(marketData).map((token: string) => { + const priceData = prices[`ethereum:${token}`]; + const supplySide = + (priceData.price * marketData[token].dailyLendFee) / + 10 ** priceData.decimals; + const userFees = + (priceData.price * marketData[token].dailyBorrowFee) / + 10 ** priceData.decimals; + + aggregateData.dailySupplySideRevenue += supplySide; + aggregateData.dailyUserFees += userFees; + aggregateData.dailyRevenue += userFees - supplySide; + }); + + aggregateData.dailyFees = aggregateData.dailyUserFees; + + return aggregateData; +}; + +const adapter: SimpleAdapter = { + adapter: { + ethereum: { + fetch, + start: 1704197610, + }, + }, + version: 2, +}; + +export default adapter; From 64b82763b985340632ad1d30e1d9a95f4bb8daa4 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 12 Mar 2024 16:56:19 +0000 Subject: [PATCH 0084/1590] update --- fees/morpho/index.ts | 62 +++++++++++++------------------------------- 1 file changed, 18 insertions(+), 44 deletions(-) diff --git a/fees/morpho/index.ts b/fees/morpho/index.ts index e2b19d3e24..ca31df22f1 100644 --- a/fees/morpho/index.ts +++ b/fees/morpho/index.ts @@ -1,6 +1,6 @@ const { request, gql } = require("graphql-request"); +import { Balances } from "@defillama/sdk"; import { FetchV2, SimpleAdapter } from "../../adapters/types"; -import { getPrices } from "../../utils/prices"; type Market = { loanAsset: { address: string; decimals: number }; @@ -40,61 +40,35 @@ const apyToDaily = (apy: number): number => (((apy / 100 + 1) ** (1 / 365) - 1) * 365) / (0.01 * 365); const fetch: FetchV2 = async (options) => { + const chain = "ethereum"; const res = await request("https://blue-api.morpho.org/graphql", query); let marketData: { - [asset: string]: { - dailyLendFee: number; - dailyBorrowFee: number; - }; - } = {}; + dailySupplySideRevenue: Balances; + dailyUserFees: Balances; + dailyFees?: Balances; + dailyRevenue: Balances; + } = { + dailySupplySideRevenue: new Balances({ chain }), + dailyUserFees: new Balances({ chain }), + dailyRevenue: new Balances({ chain }), + }; res.markets.items.map((m: Market) => { const { address } = m.loanAsset; const { supplyApy, borrowApy, supplyAssets, borrowAssets } = m.state; - if (!(address in marketData)) - marketData[address] = { - dailyLendFee: 0, - dailyBorrowFee: 0, - }; - - marketData[address].dailyLendFee += supplyAssets * apyToDaily(supplyApy); - marketData[address].dailyBorrowFee += borrowAssets * apyToDaily(borrowApy); - }); - - const prices = await getPrices( - Object.keys(marketData).map((t: string) => `ethereum:${t}`), - options.endTimestamp, - ); - - let aggregateData: { - dailyRevenue: number; - dailySupplySideRevenue: number; - dailyUserFees: number; - dailyFees?: number; - } = { - dailyRevenue: 0, - dailySupplySideRevenue: 0, - dailyUserFees: 0, - }; - Object.keys(marketData).map((token: string) => { - const priceData = prices[`ethereum:${token}`]; - const supplySide = - (priceData.price * marketData[token].dailyLendFee) / - 10 ** priceData.decimals; - const userFees = - (priceData.price * marketData[token].dailyBorrowFee) / - 10 ** priceData.decimals; + const supply = supplyAssets * apyToDaily(supplyApy); + const borrow = borrowAssets * apyToDaily(borrowApy); - aggregateData.dailySupplySideRevenue += supplySide; - aggregateData.dailyUserFees += userFees; - aggregateData.dailyRevenue += userFees - supplySide; + marketData.dailySupplySideRevenue.add(address, supply); + marketData.dailyUserFees.add(address, borrow); + marketData.dailyRevenue.add(address, borrow - supply); }); - aggregateData.dailyFees = aggregateData.dailyUserFees; + marketData.dailyFees = marketData.dailyUserFees; - return aggregateData; + return marketData; }; const adapter: SimpleAdapter = { From 233554dbf883c7ae24203dd716b2b4378b4bd2ab Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 12 Mar 2024 16:57:38 +0000 Subject: [PATCH 0085/1590] updated query --- fees/morpho/index.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/fees/morpho/index.ts b/fees/morpho/index.ts index ca31df22f1..a87c8a5d9c 100644 --- a/fees/morpho/index.ts +++ b/fees/morpho/index.ts @@ -16,14 +16,8 @@ const query = gql` query { markets { items { - creationTimestamp - collateralAsset { - address - decimals - } loanAsset { address - decimals } state { borrowAssets From 5cfc324aa6bed1aad628dbcc2831ad95eecc0243 Mon Sep 17 00:00:00 2001 From: 0xnirmal Date: Tue, 12 Mar 2024 13:37:46 -0400 Subject: [PATCH 0086/1590] added fees + revenue + holders revs --- fees/geodnet.ts | 86 ++ yarn.lock | 2415 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2501 insertions(+) create mode 100644 fees/geodnet.ts create mode 100644 yarn.lock diff --git a/fees/geodnet.ts b/fees/geodnet.ts new file mode 100644 index 0000000000..258f84ca5f --- /dev/null +++ b/fees/geodnet.ts @@ -0,0 +1,86 @@ +import * as sdk from '@defillama/sdk'; +import { FetchResultFees, SimpleAdapter } from '../adapters/types'; +import { CHAIN } from '../helpers/chains'; +import { getBlock } from '../helpers/getBlock'; +import { getPrices } from '../utils/prices'; + +const GEODNET_TOKEN_ADDRESS = '0xAC0F66379A6d7801D7726d5a943356A172549Adb'; +const GEODNET_NUM_DECIMALS = 18; +const GEODNET_COIN_ID = 'coingecko:geodnet'; +const TOPIC_0_EVT_TRANSFER = + '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'; +const PADDED_BURN_ADDRESS = + '0x000000000000000000000000000000000000000000000000000000000000dead'; + +interface ILog { + data: string; + transactionHash: string; + topics: string[]; + address: string; +} + +const fetchFees = async (timestamp: number): Promise => { + const fromTimestamp = timestamp - 60 * 60 * 24; + const toTimestamp = timestamp; + const fromBlock = await getBlock(fromTimestamp, CHAIN.POLYGON, {}); + const toBlock = await getBlock(toTimestamp, CHAIN.POLYGON, {}); + + const batchSize = 4500; + const batches = Math.ceil((toBlock - fromBlock) / batchSize); + + const erc20transferLog: ILog[] = await Promise.all( + Array.from({ length: batches }, (_, index) => + sdk.getEventLogs({ + target: GEODNET_TOKEN_ADDRESS, + topic: TOPIC_0_EVT_TRANSFER, + toBlock: fromBlock + (index + 1) * batchSize, + fromBlock: fromBlock + index * batchSize, + chain: CHAIN.POLYGON, + }) + ) + ).then((responses) => responses.flatMap((response) => response as ILog[])); + + const burnedEventLogs = erc20transferLog.filter( + (log) => log.topics[2].toLowerCase() === PADDED_BURN_ADDRESS.toLowerCase() + ); + const totalBurnsInNativeToken = burnedEventLogs.reduce( + (acc: number, log: ILog) => { + const amount = Number(log.data) / 10 ** GEODNET_NUM_DECIMALS; + return acc + amount; + }, + 0 + ); + + const prices = await getPrices([GEODNET_COIN_ID], timestamp); + + const dailyHoldersRevenue = + prices[GEODNET_COIN_ID].price * totalBurnsInNativeToken; + const dailyFees = dailyHoldersRevenue / 0.8; + const dailyRevenue = dailyFees; + + return { + dailyFees: `${dailyFees}`, + dailyRevenue: `${dailyRevenue}`, + dailyHoldersRevenue: `${dailyHoldersRevenue}`, + timestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.POLYGON]: { + fetch: fetchFees, + start: 1694304000, + meta: { + methodology: { + Fees: 'GEODNET receives fees for station access to their RTK network.', + Revenue: + "When GEODNET receives fees for station access, 80% of the fees are used to repurchase GEOD tokens from the open market and remove them from circulation. The remaining 20% supports the foundation's organizational costs.", + HoldersRevenue: + '80% of the fees are used to repurchase GEOD tokens from the open market and remove them from circulation.', + }, + }, + }, + }, +}; +export default adapter; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..35fae9cfce --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2415 @@ +# 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@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-s3@^3.400.0": + version "3.529.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.529.1.tgz#12be8ac86cd4676790957745b20bef9eb2c14247" + integrity sha512-ZpvyO4w3XWo/OjXLd3fm7CLcKUUYcyady9qzTnKKSnp8a2NqO7UvU/1zhYdm+yyy8TR/9t7sDy+q6AYd4Nsr8g== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.529.1" + "@aws-sdk/core" "3.529.1" + "@aws-sdk/credential-provider-node" "3.529.1" + "@aws-sdk/middleware-bucket-endpoint" "3.525.0" + "@aws-sdk/middleware-expect-continue" "3.523.0" + "@aws-sdk/middleware-flexible-checksums" "3.523.0" + "@aws-sdk/middleware-host-header" "3.523.0" + "@aws-sdk/middleware-location-constraint" "3.523.0" + "@aws-sdk/middleware-logger" "3.523.0" + "@aws-sdk/middleware-recursion-detection" "3.523.0" + "@aws-sdk/middleware-sdk-s3" "3.525.0" + "@aws-sdk/middleware-signing" "3.523.0" + "@aws-sdk/middleware-ssec" "3.523.0" + "@aws-sdk/middleware-user-agent" "3.525.0" + "@aws-sdk/region-config-resolver" "3.525.0" + "@aws-sdk/signature-v4-multi-region" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-endpoints" "3.525.0" + "@aws-sdk/util-user-agent-browser" "3.523.0" + "@aws-sdk/util-user-agent-node" "3.525.0" + "@aws-sdk/xml-builder" "3.523.0" + "@smithy/config-resolver" "^2.1.4" + "@smithy/core" "^1.3.5" + "@smithy/eventstream-serde-browser" "^2.1.3" + "@smithy/eventstream-serde-config-resolver" "^2.1.3" + "@smithy/eventstream-serde-node" "^2.1.3" + "@smithy/fetch-http-handler" "^2.4.3" + "@smithy/hash-blob-browser" "^2.1.3" + "@smithy/hash-node" "^2.1.3" + "@smithy/hash-stream-node" "^2.1.3" + "@smithy/invalid-dependency" "^2.1.3" + "@smithy/md5-js" "^2.1.3" + "@smithy/middleware-content-length" "^2.1.3" + "@smithy/middleware-endpoint" "^2.4.4" + "@smithy/middleware-retry" "^2.1.4" + "@smithy/middleware-serde" "^2.1.3" + "@smithy/middleware-stack" "^2.1.3" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/node-http-handler" "^2.4.1" + "@smithy/protocol-http" "^3.2.1" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/url-parser" "^2.1.3" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.4" + "@smithy/util-defaults-mode-node" "^2.2.3" + "@smithy/util-endpoints" "^1.1.4" + "@smithy/util-retry" "^2.1.3" + "@smithy/util-stream" "^2.1.3" + "@smithy/util-utf8" "^2.1.1" + "@smithy/util-waiter" "^2.1.3" + tslib "^2.5.0" + +"@aws-sdk/client-sso-oidc@3.529.1": + version "3.529.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.529.1.tgz#40440af993f0d2c1d7fdc3ef5840867a223e773b" + integrity sha512-bimxCWAvRnVcluWEQeadXvHyzWlBWsuGVligsaVZaGF0TLSn0eLpzpN9B1EhHzTf7m0Kh/wGtPSH1JxO6PpB+A== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.529.1" + "@aws-sdk/core" "3.529.1" + "@aws-sdk/middleware-host-header" "3.523.0" + "@aws-sdk/middleware-logger" "3.523.0" + "@aws-sdk/middleware-recursion-detection" "3.523.0" + "@aws-sdk/middleware-user-agent" "3.525.0" + "@aws-sdk/region-config-resolver" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-endpoints" "3.525.0" + "@aws-sdk/util-user-agent-browser" "3.523.0" + "@aws-sdk/util-user-agent-node" "3.525.0" + "@smithy/config-resolver" "^2.1.4" + "@smithy/core" "^1.3.5" + "@smithy/fetch-http-handler" "^2.4.3" + "@smithy/hash-node" "^2.1.3" + "@smithy/invalid-dependency" "^2.1.3" + "@smithy/middleware-content-length" "^2.1.3" + "@smithy/middleware-endpoint" "^2.4.4" + "@smithy/middleware-retry" "^2.1.4" + "@smithy/middleware-serde" "^2.1.3" + "@smithy/middleware-stack" "^2.1.3" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/node-http-handler" "^2.4.1" + "@smithy/protocol-http" "^3.2.1" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/url-parser" "^2.1.3" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.4" + "@smithy/util-defaults-mode-node" "^2.2.3" + "@smithy/util-endpoints" "^1.1.4" + "@smithy/util-middleware" "^2.1.3" + "@smithy/util-retry" "^2.1.3" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/client-sso@3.529.1": + version "3.529.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.529.1.tgz#012a4c1861d586c2a96bef5e442bd505bdf3ca5f" + integrity sha512-KT1U/ZNjDhVv2ZgjzaeAn9VM7l667yeSguMrRYC8qk5h91/61MbjZypi6eOuKuVM+0fsQvzKScTQz0Lio0eYag== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.529.1" + "@aws-sdk/middleware-host-header" "3.523.0" + "@aws-sdk/middleware-logger" "3.523.0" + "@aws-sdk/middleware-recursion-detection" "3.523.0" + "@aws-sdk/middleware-user-agent" "3.525.0" + "@aws-sdk/region-config-resolver" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-endpoints" "3.525.0" + "@aws-sdk/util-user-agent-browser" "3.523.0" + "@aws-sdk/util-user-agent-node" "3.525.0" + "@smithy/config-resolver" "^2.1.4" + "@smithy/core" "^1.3.5" + "@smithy/fetch-http-handler" "^2.4.3" + "@smithy/hash-node" "^2.1.3" + "@smithy/invalid-dependency" "^2.1.3" + "@smithy/middleware-content-length" "^2.1.3" + "@smithy/middleware-endpoint" "^2.4.4" + "@smithy/middleware-retry" "^2.1.4" + "@smithy/middleware-serde" "^2.1.3" + "@smithy/middleware-stack" "^2.1.3" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/node-http-handler" "^2.4.1" + "@smithy/protocol-http" "^3.2.1" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/url-parser" "^2.1.3" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.4" + "@smithy/util-defaults-mode-node" "^2.2.3" + "@smithy/util-endpoints" "^1.1.4" + "@smithy/util-middleware" "^2.1.3" + "@smithy/util-retry" "^2.1.3" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/client-sts@3.529.1": + version "3.529.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.529.1.tgz#ad57e10868f5a89557dada02d2f951989e277ec6" + integrity sha512-Rvk2Sr3MACQTOtngUU+omlf4E17k47dRVXR7OFRD6Ow5iGgC9tkN2q/ExDPW/ktPOmM0lSgzWyQ6/PC/Zq3HUg== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.529.1" + "@aws-sdk/middleware-host-header" "3.523.0" + "@aws-sdk/middleware-logger" "3.523.0" + "@aws-sdk/middleware-recursion-detection" "3.523.0" + "@aws-sdk/middleware-user-agent" "3.525.0" + "@aws-sdk/region-config-resolver" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-endpoints" "3.525.0" + "@aws-sdk/util-user-agent-browser" "3.523.0" + "@aws-sdk/util-user-agent-node" "3.525.0" + "@smithy/config-resolver" "^2.1.4" + "@smithy/core" "^1.3.5" + "@smithy/fetch-http-handler" "^2.4.3" + "@smithy/hash-node" "^2.1.3" + "@smithy/invalid-dependency" "^2.1.3" + "@smithy/middleware-content-length" "^2.1.3" + "@smithy/middleware-endpoint" "^2.4.4" + "@smithy/middleware-retry" "^2.1.4" + "@smithy/middleware-serde" "^2.1.3" + "@smithy/middleware-stack" "^2.1.3" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/node-http-handler" "^2.4.1" + "@smithy/protocol-http" "^3.2.1" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/url-parser" "^2.1.3" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.4" + "@smithy/util-defaults-mode-node" "^2.2.3" + "@smithy/util-endpoints" "^1.1.4" + "@smithy/util-middleware" "^2.1.3" + "@smithy/util-retry" "^2.1.3" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/core@3.529.1": + version "3.529.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.529.1.tgz#378bf215f3bf407158b4743e4d94bed4fa2e2594" + integrity sha512-Sj42sYPfaL9PHvvciMICxhyrDZjqnnvFbPKDmQL5aFKyXy122qx7RdVqUOQERDmMQfvJh6+0W1zQlLnre89q4Q== + dependencies: + "@smithy/core" "^1.3.5" + "@smithy/protocol-http" "^3.2.1" + "@smithy/signature-v4" "^2.1.3" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-env@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.523.0.tgz#4bc04b32c15ff7237ba1de866b96ccea24e433c7" + integrity sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-http@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.525.0.tgz#3a785ea8724200596ad1a48cf8485658401eb589" + integrity sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/fetch-http-handler" "^2.4.3" + "@smithy/node-http-handler" "^2.4.1" + "@smithy/property-provider" "^2.1.3" + "@smithy/protocol-http" "^3.2.1" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/util-stream" "^2.1.3" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-ini@3.529.1": + version "3.529.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.529.1.tgz#b2ca21746585079ab9cc0e7d212417ee92cc83e2" + integrity sha512-RjHsuTvHIwXG7a/3ERexemiD3c9riKMCZQzY2/b0Gg0ButEVbBcMfERtUzWmQ0V4ufe/PEZjP68MH1gupcoF9A== + dependencies: + "@aws-sdk/client-sts" "3.529.1" + "@aws-sdk/credential-provider-env" "3.523.0" + "@aws-sdk/credential-provider-process" "3.523.0" + "@aws-sdk/credential-provider-sso" "3.529.1" + "@aws-sdk/credential-provider-web-identity" "3.529.1" + "@aws-sdk/types" "3.523.0" + "@smithy/credential-provider-imds" "^2.2.3" + "@smithy/property-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.3.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-node@3.529.1": + version "3.529.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.529.1.tgz#4c53c47320cf440be55786287a7d33b7364d2316" + integrity sha512-mvY7F3dMmk/0dZOCfl5sUI1bG0osureBjxhELGCF0KkJqhWI0hIzh8UnPkYytSg3vdc97CMv7pTcozxrdA3b0g== + dependencies: + "@aws-sdk/credential-provider-env" "3.523.0" + "@aws-sdk/credential-provider-http" "3.525.0" + "@aws-sdk/credential-provider-ini" "3.529.1" + "@aws-sdk/credential-provider-process" "3.523.0" + "@aws-sdk/credential-provider-sso" "3.529.1" + "@aws-sdk/credential-provider-web-identity" "3.529.1" + "@aws-sdk/types" "3.523.0" + "@smithy/credential-provider-imds" "^2.2.3" + "@smithy/property-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.3.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-process@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.523.0.tgz#8cf85637f5075065a164d008f392d3ae3539ea23" + integrity sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.3.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-sso@3.529.1": + version "3.529.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.529.1.tgz#ee685cfbb87d2aa138d46d6c115adac850e78ba7" + integrity sha512-KFMKkaoTGDgSJG+o9Ii7AglWG5JQeF6IFw9cXLMwDdIrp3KUmRcUIqe0cjOoCqeQEDGy0VHsimHmKKJ3894i/A== + dependencies: + "@aws-sdk/client-sso" "3.529.1" + "@aws-sdk/token-providers" "3.529.1" + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.3.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-web-identity@3.529.1": + version "3.529.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.529.1.tgz#84fe00b22b4a4377a637c5ee2c628ba3a696152a" + integrity sha512-AGuZDOKN+AttjwTjrF47WLqzeEut2YynyxjkXZhxZF/xn8i5Y51kUAUdXsXw1bgR25pAeXQIdhsrQlRa1Pm5kw== + dependencies: + "@aws-sdk/client-sts" "3.529.1" + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-bucket-endpoint@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.525.0.tgz#f354fbc0b4a55b0b13ab704672382c5aeafae0b3" + integrity sha512-nYfQ2Xspfef7j8mZO7varUWLPH6HQlXateH7tBVtBNUAazyQE4UJEvC0fbQ+Y01e+FKlirim/m2umkdMXqAlTg== + dependencies: + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-arn-parser" "3.495.0" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + "@smithy/util-config-provider" "^2.2.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-expect-continue@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.523.0.tgz#9db5a9dd54a41fb71d40e744ff800a697a82e969" + integrity sha512-E5DyRAHU39VHaAlQLqXYS/IKpgk3vsryuU6kkOcIIK8Dgw0a2tjoh5AOCaNa8pD+KgAGrFp35JIMSX1zui5diA== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-flexible-checksums@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.523.0.tgz#7f0e4a98aac00f08b154cb283d33a36993dd730d" + integrity sha512-lIa1TdWY9q4zsDFarfSnYcdrwPR+nypaU4n6hb95i620/1F5M5s6H8P0hYtwTNNvx+slrR8F3VBML9pjBtzAHw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.523.0" + "@smithy/is-array-buffer" "^2.1.1" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-host-header@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.523.0.tgz#9aaa29edd668905eed8ee8af482b96162dafdeb1" + integrity sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-location-constraint@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.523.0.tgz#c5b2395119ece973773f80f67eef43603d159c12" + integrity sha512-1QAUXX3U0jkARnU0yyjk81EO4Uw5dCeQOtvUY5s3bUOHatR3ThosQeIr6y9BCsbXHzNnDe1ytCjqAPyo8r/bYw== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-logger@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.523.0.tgz#ad61bfdd73b5983ab8a8926b9c01825bc048babf" + integrity sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-recursion-detection@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.523.0.tgz#21d9ec52700545d7935d6c943cb40bffa69ab4b4" + integrity sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-sdk-s3@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.525.0.tgz#c3ce03940240fa7a42bfa3f1916d2ce9fa0fafbf" + integrity sha512-ewFyyFM6wdFTOqCiId5GQNi7owDdLEonQhB4h8tF6r3HV52bRlDvZA4aDos+ft6N/XY2J6L0qlFTFq+/oiurXw== + dependencies: + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-arn-parser" "3.495.0" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/protocol-http" "^3.2.1" + "@smithy/signature-v4" "^2.1.3" + "@smithy/smithy-client" "^2.4.2" + "@smithy/types" "^2.10.1" + "@smithy/util-config-provider" "^2.2.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-signing@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.523.0.tgz#1b2c458eb6a00da45b0800916ee463ff727c0717" + integrity sha512-pFXV4don6qcmew/OvEjLUr2foVjzoJ8o5k57Oz9yAHz8INx3RHK8MP/K4mVhHo6n0SquRcWrm4kY/Tw+89gkEA== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/protocol-http" "^3.2.1" + "@smithy/signature-v4" "^2.1.3" + "@smithy/types" "^2.10.1" + "@smithy/util-middleware" "^2.1.3" + tslib "^2.5.0" + +"@aws-sdk/middleware-ssec@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.523.0.tgz#1bc0b57859a3e90af7e6103341903896f601e622" + integrity sha512-FaqAZQeF5cQzZLOIboIJRaWVOQ2F2pJZAXGF5D7nJsxYNFChotA0O0iWimBRxU35RNn7yirVxz35zQzs20ddIw== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-user-agent@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.525.0.tgz#3ac154829460271c53ad49d8301d4c849e9afb9f" + integrity sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ== + dependencies: + "@aws-sdk/types" "3.523.0" + "@aws-sdk/util-endpoints" "3.525.0" + "@smithy/protocol-http" "^3.2.1" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/region-config-resolver@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.525.0.tgz#ebd7edd0059857f59ed605c37cf5752542cf8914" + integrity sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/types" "^2.10.1" + "@smithy/util-config-provider" "^2.2.1" + "@smithy/util-middleware" "^2.1.3" + tslib "^2.5.0" + +"@aws-sdk/signature-v4-multi-region@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.525.0.tgz#b9b7e1079b0a8a1df4bb282216aa20b56d139ba5" + integrity sha512-j8gkdfiokaherRgokfZBl2azYBMHlegT7pOnR/3Y79TSz6G+bJeIkuNk8aUbJArr6R8nvAM1j4dt1rBM+efolQ== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.525.0" + "@aws-sdk/types" "3.523.0" + "@smithy/protocol-http" "^3.2.1" + "@smithy/signature-v4" "^2.1.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/token-providers@3.529.1": + version "3.529.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.529.1.tgz#0d86e0edb50cfff51ac063410fde60edf3ae4b2d" + integrity sha512-NpgMjsfpqiugbxrYGXtta914N43Mx/H0niidqv8wKMTgWQEtsJvYtOni+kuLXB+LmpjaMFNlpadooFU/bK4buA== + dependencies: + "@aws-sdk/client-sso-oidc" "3.529.1" + "@aws-sdk/types" "3.523.0" + "@smithy/property-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.3.3" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/types@3.523.0", "@aws-sdk/types@^3.222.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.523.0.tgz#2bb11390023949f31d9211212f41e245a7f03489" + integrity sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/util-arn-parser@3.495.0": + version "3.495.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz#539f2d6dfef343a80324348f1f9a1b7eed2390f3" + integrity sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-endpoints@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.525.0.tgz#d9f53b60e69dbe4623a4200d10be1be2ac73438f" + integrity sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/types" "^2.10.1" + "@smithy/util-endpoints" "^1.1.4" + tslib "^2.5.0" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.495.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz#9034fd8db77991b28ed20e067acdd53e8b8f824b" + integrity sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-browser@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.523.0.tgz#77188e83f9d470ddf140fe8c5d4d51049c9d5898" + integrity sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/types" "^2.10.1" + bowser "^2.11.0" + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-node@3.525.0": + version "3.525.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.525.0.tgz#aa96c28bad8360d2a350c30c3c209c35f99ac5ee" + integrity sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ== + dependencies: + "@aws-sdk/types" "3.523.0" + "@smithy/node-config-provider" "^2.2.4" + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.523.0": + version "3.523.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.523.0.tgz#6abdaf5716f6c7153c328bbbd499345fae755dce" + integrity sha512-wfvyVymj2TUw7SuDor9IuFcAzJZvWRBZotvY/wQJOlYa3UP3Oezzecy64N4FWfBJEsZdrTN+HOZFl+IzTWWnUA== + dependencies: + "@smithy/types" "^2.10.1" + tslib "^2.5.0" + +"@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.40" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.40.tgz#a974b343e6f9915a38a354dc024a428261634785" + integrity sha512-YtMaOKKaGKovmReEfgDRd+cLaXGFiBbAnAHdDJE8eb6BVkjhR2N9l+OvgLSMgLY6I/Bpu3pkJiiweEdCuvqfEA== + dependencies: + "@aws-sdk/client-s3" "^3.400.0" + "@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" + +"@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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.1.4.tgz#7c65f910ce59abc9715cba8347dd454dbf5538a9" + integrity sha512-66HO817oIZ2otLIqy06R5muapqZjkgF1jfU0wyNko8cuqZNu8nbS9ljlhcRYw/M/uWRJzB9ih81DLSHhYbBLlQ== + dependencies: + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/chunked-blob-reader-native@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.2.tgz#13b71e4bdbaa1e0b842bf4ae063c7a1ad533a8e7" + integrity sha512-KwR9fFc/t5jH9RQFbrA9DHSmI+URTmB4v+i7H08UNET9AcN6GGBTBMiDKpA56Crw6CN7cSaSDXaRS/AsfOuupQ== + dependencies: + "@smithy/util-base64" "^2.2.0" + tslib "^2.5.0" + +"@smithy/chunked-blob-reader@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz#997faba8e197e0cb9824dad30ae581466e386e57" + integrity sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ== + dependencies: + tslib "^2.5.0" + +"@smithy/config-resolver@^2.1.4", "@smithy/config-resolver@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.1.5.tgz#51d047d2ff7b69cbb8d8b1a197f0edc2a17fbc1b" + integrity sha512-LcBB5JQC3Tx2ZExIJzfvWaajhFIwHrUNQeqxhred2r5nnqrdly9uoCrvM1sxOOdghYuWWm2Kr8tBCDOmxsgeTA== + dependencies: + "@smithy/node-config-provider" "^2.2.5" + "@smithy/types" "^2.11.0" + "@smithy/util-config-provider" "^2.2.1" + "@smithy/util-middleware" "^2.1.4" + tslib "^2.5.0" + +"@smithy/core@^1.3.5": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.3.7.tgz#85728b09b184e1e8934cedb208e674e496f5db0d" + integrity sha512-zHrrstOO78g+/rOJoHi4j3mGUBtsljRhcKNzloWPv1XIwgcFUi+F1YFKr2qPQ3z7Ls5dNc4L2SPrVarNFIQqog== + dependencies: + "@smithy/middleware-endpoint" "^2.4.6" + "@smithy/middleware-retry" "^2.1.6" + "@smithy/middleware-serde" "^2.2.1" + "@smithy/protocol-http" "^3.2.2" + "@smithy/smithy-client" "^2.4.4" + "@smithy/types" "^2.11.0" + "@smithy/util-middleware" "^2.1.4" + tslib "^2.5.0" + +"@smithy/credential-provider-imds@^2.2.3", "@smithy/credential-provider-imds@^2.2.6": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.6.tgz#a518575d5b830370fa76a270c376ce9f208d4c74" + integrity sha512-+xQe4Pite0kdk9qn0Vyw5BRVh0iSlj+T4TEKRXr4E1wZKtVgIzGlkCrfICSjiPVFkPxk4jMpVboMYdEiiA88/w== + dependencies: + "@smithy/node-config-provider" "^2.2.5" + "@smithy/property-provider" "^2.1.4" + "@smithy/types" "^2.11.0" + "@smithy/url-parser" "^2.1.4" + tslib "^2.5.0" + +"@smithy/eventstream-codec@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.1.4.tgz#ba8855fcd53d06a456ec2e59f11eadd1eb7ffa62" + integrity sha512-UkiieTztP7adg8EuqZvB0Y4LewdleZCJU7Kgt9RDutMsRYqO32fMpWeQHeTHaIMosmzcRZUykMRrhwGJe9mP3A== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.11.0" + "@smithy/util-hex-encoding" "^2.1.1" + tslib "^2.5.0" + +"@smithy/eventstream-serde-browser@^2.1.3": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.4.tgz#e3b4873969740cbcf67ac4bfcddb36ed31c0097d" + integrity sha512-K0SyvrUu/vARKzNW+Wp9HImiC/cJ6K88/n7FTH1slY+MErdKoiSbRLaXbJ9qD6x1Hu28cplHMlhADwZelUx/Ww== + dependencies: + "@smithy/eventstream-serde-universal" "^2.1.4" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/eventstream-serde-config-resolver@^2.1.3": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.4.tgz#7fa9a57f1911ce163a4959ee04006ad4eaa3eba3" + integrity sha512-FH+2AwOwZ0kHPB9sciWJtUqx81V4vizfT3P6T9eslmIC2hi8ch/KFvQlF7jDmwR1aLlPlq6qqLKLqzK/71Ki4A== + dependencies: + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/eventstream-serde-node@^2.1.3": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.4.tgz#1a1ab2b5d1d70b7d686ab4c77b0540c422f9aaac" + integrity sha512-gsc5ZTvVcB9sleLQzsK/rOhgn52+AAsmhEr41WDwAcctccBjh429+b8gT9t+SU8QyajypfsLOZfJQu0+zE515Q== + dependencies: + "@smithy/eventstream-serde-universal" "^2.1.4" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/eventstream-serde-universal@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.4.tgz#0cd87d4150070d4958bc7fc8936c731d432934bc" + integrity sha512-NKLAsYnZA5s+ntipJRKo1RrRbhYHrsEnmiUoz0EhVYrAih+UELY9sKR+A1ujGaFm3nKDs5fPfiozC2wpXq2zUA== + dependencies: + "@smithy/eventstream-codec" "^2.1.4" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/fetch-http-handler@^2.4.3", "@smithy/fetch-http-handler@^2.4.4": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.4.tgz#8737f00fbec75ba34192fb8c6b1b13377dfbd370" + integrity sha512-DSUtmsnIx26tPuyyrK49dk2DAhPgEw6xRW7V62nMHIB5dk3NqhGnwcKO2fMdt/l3NUVgia34ZsSJA8bD+3nh7g== + dependencies: + "@smithy/protocol-http" "^3.2.2" + "@smithy/querystring-builder" "^2.1.4" + "@smithy/types" "^2.11.0" + "@smithy/util-base64" "^2.2.0" + tslib "^2.5.0" + +"@smithy/hash-blob-browser@^2.1.3": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.4.tgz#67d67bf61a89765b30ca0aa58a0e93dfb527730e" + integrity sha512-bDugS1DortnriGDdp0sqdq7dLI5if8CEOF9rKtpJa1ZYMq6fxOtTId//dlilS5QgUtUs6GHN5aMQVxEjhBzzQA== + dependencies: + "@smithy/chunked-blob-reader" "^2.1.1" + "@smithy/chunked-blob-reader-native" "^2.1.2" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/hash-node@^2.1.3": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.1.4.tgz#a2cc973ca9a074085d3b70969b5be186a0d5ee94" + integrity sha512-uvCcpDLXaTTL0X/9ezF8T8sS77UglTfZVQaUOBiCvR0QydeSyio3t0Hj3QooVdyFsKTubR8gCk/ubLk3vAyDng== + dependencies: + "@smithy/types" "^2.11.0" + "@smithy/util-buffer-from" "^2.1.1" + "@smithy/util-utf8" "^2.2.0" + tslib "^2.5.0" + +"@smithy/hash-stream-node@^2.1.3": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.1.4.tgz#51d5a214e018bc5431538ca663aee822afa66008" + integrity sha512-HcDQRs/Fcx7lwAd+/vSW/e7ltdh148D2Pq7XI61CEWcOoQdQ0W8aYBHDRC4zjtXv6hySdmWE+vo3dvdTt7aj8A== + dependencies: + "@smithy/types" "^2.11.0" + "@smithy/util-utf8" "^2.2.0" + tslib "^2.5.0" + +"@smithy/invalid-dependency@^2.1.3": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.1.4.tgz#aa58540c21b39fbedf58192fb34e6fb49cc736ca" + integrity sha512-QzlNBl6jt3nb9jNnE51wTegReVvUdozyMMrFEyb/rc6AzPID1O+qMJYjAAoNw098y0CZVfCpEnoK2+mfBOd8XA== + dependencies: + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/is-array-buffer@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz#07b4c77ae67ed58a84400c76edd482271f9f957b" + integrity sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ== + dependencies: + tslib "^2.5.0" + +"@smithy/md5-js@^2.1.3": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.1.4.tgz#607c54622d020625056deffc18644864ff307621" + integrity sha512-WHTnnYJPKE7Sy49DogLuox42TnlwD3cQ6TObPD6WFWjKocWIdpEpIvdJHwWUfSFf0JIi8ON8z6ZEhsnyKVCcLQ== + dependencies: + "@smithy/types" "^2.11.0" + "@smithy/util-utf8" "^2.2.0" + tslib "^2.5.0" + +"@smithy/middleware-content-length@^2.1.3": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.1.4.tgz#0939d7b36f029f075a118ac1673db2655f51ff81" + integrity sha512-C6VRwfcr0w9qRFhDGCpWMVhlEIBFlmlPRP1aX9Cv9xDj9SUwlDrNvoV1oP1vjRYuLxCDgovBBynCwwcluS2wLw== + dependencies: + "@smithy/protocol-http" "^3.2.2" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/middleware-endpoint@^2.4.4", "@smithy/middleware-endpoint@^2.4.6": + version "2.4.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.6.tgz#18fbae774b722d47d4d40dad73466893a035a072" + integrity sha512-AsXtUXHPOAS0EGZUSFOsVJvc7p0KL29PGkLxLfycPOcFVLru/oinYB6yvyL73ZZPX2OB8sMYUMrj7eH2kI7V/w== + dependencies: + "@smithy/middleware-serde" "^2.2.1" + "@smithy/node-config-provider" "^2.2.5" + "@smithy/shared-ini-file-loader" "^2.3.5" + "@smithy/types" "^2.11.0" + "@smithy/url-parser" "^2.1.4" + "@smithy/util-middleware" "^2.1.4" + tslib "^2.5.0" + +"@smithy/middleware-retry@^2.1.4", "@smithy/middleware-retry@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.1.6.tgz#c712e0286acbfa9b6488947123cc7e9aa0f6e6ca" + integrity sha512-khpSV0NxqMHfa06kfG4WYv+978sVvfTFmn0hIFKKwOXtIxyYtPKiQWFT4nnwZD07fGdYGbtCBu3YALc8SsA5mA== + dependencies: + "@smithy/node-config-provider" "^2.2.5" + "@smithy/protocol-http" "^3.2.2" + "@smithy/service-error-classification" "^2.1.4" + "@smithy/smithy-client" "^2.4.4" + "@smithy/types" "^2.11.0" + "@smithy/util-middleware" "^2.1.4" + "@smithy/util-retry" "^2.1.4" + tslib "^2.5.0" + uuid "^8.3.2" + +"@smithy/middleware-serde@^2.1.3", "@smithy/middleware-serde@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.2.1.tgz#b4a6a757e3f6f62e432f53020a06d27eabe8f424" + integrity sha512-VAWRWqnNjgccebndpyK94om4ZTYzXLQxUmNCXYzM/3O9MTfQjTNBgtFtQwyIIez6z7LWcCsXmnKVIOE9mLqAHQ== + dependencies: + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/middleware-stack@^2.1.3", "@smithy/middleware-stack@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.1.4.tgz#eb475eb31ad6fed0aa21ee0896c3c80114b73507" + integrity sha512-Qqs2ba8Ax1rGKOSGJS2JN23fhhox2WMdRuzx0NYHtXzhxbJOIMmz9uQY6Hf4PY8FPteBPp1+h0j5Fmr+oW12sg== + dependencies: + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/node-config-provider@^2.2.4", "@smithy/node-config-provider@^2.2.5": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.2.5.tgz#39c7a06e798f763722d12fccab6160896b2ee08b" + integrity sha512-CxPf2CXhjO79IypHJLBATB66Dw6suvr1Yc2ccY39hpR6wdse3pZ3E8RF83SODiNH0Wjmkd0ze4OF8exugEixgA== + dependencies: + "@smithy/property-provider" "^2.1.4" + "@smithy/shared-ini-file-loader" "^2.3.5" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/node-http-handler@^2.4.1", "@smithy/node-http-handler@^2.4.2": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.4.2.tgz#2d5576d4ea1af0be55bd701a2d31c747ca61483c" + integrity sha512-yrj3c1g145uiK5io+1UPbJAHo8BSGORkBzrmzvAsOmBKb+1p3jmM8ZwNLDH/HTTxVLm9iM5rMszx+iAh1HUC4Q== + dependencies: + "@smithy/abort-controller" "^2.1.4" + "@smithy/protocol-http" "^3.2.2" + "@smithy/querystring-builder" "^2.1.4" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/property-provider@^2.1.3", "@smithy/property-provider@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.1.4.tgz#0f127125c4b6f3ae0ddb4777946926f0bd8f0ca1" + integrity sha512-nWaY/MImj1BiXZ9WY65h45dcxOx8pl06KYoHxwojDxDL+Q9yLU1YnZpgv8zsHhEftlj9KhePENjQTlNowWVyug== + dependencies: + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/protocol-http@^3.2.1", "@smithy/protocol-http@^3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.2.2.tgz#af001dcc61e6ce6374315c907ad5bbd09bd3c810" + integrity sha512-xYBlllOQcOuLoxzhF2u8kRHhIFGQpDeTQj/dBSnw4kfI29WMKL5RnW1m9YjnJAJ49miuIvrkJR+gW5bCQ+Mchw== + dependencies: + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/querystring-builder@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.1.4.tgz#f9cc5f389671d030701dc6ee66e2eaf309642eab" + integrity sha512-LXSL0J/nRWvGT+jIj+Fip3j0J1ZmHkUyBFRzg/4SmPNCLeDrtVu7ptKOnTboPsFZu5BxmpYok3kJuQzzRdrhbw== + dependencies: + "@smithy/types" "^2.11.0" + "@smithy/util-uri-escape" "^2.1.1" + tslib "^2.5.0" + +"@smithy/querystring-parser@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.1.4.tgz#17202a1d4844ac2691bc88d676eb0969b5c01265" + integrity sha512-U2b8olKXgZAs0eRo7Op11jTNmmcC/sqYmsA7vN6A+jkGnDvJlEl7AetUegbBzU8q3D6WzC5rhR/joIy8tXPzIg== + dependencies: + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/service-error-classification@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.4.tgz#19ba871fcfb654ac03256b885e3184d69ec11a13" + integrity sha512-JW2Hthy21evnvDmYYk1kItOmbp3X5XI5iqorXgFEunb6hQfSDZ7O1g0Clyxg7k/Pcr9pfLk5xDIR2To/IohlsQ== + dependencies: + "@smithy/types" "^2.11.0" + +"@smithy/shared-ini-file-loader@^2.3.3", "@smithy/shared-ini-file-loader@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.5.tgz#3e2f6f5fcfb1edf934f531dbf17429e2631e3a21" + integrity sha512-oI99+hOvsM8oAJtxAGmoL/YCcGXtbP0fjPseYGaNmJ4X5xOFTer0KPk7AIH3AL6c5AlYErivEi1X/X78HgTVIw== + dependencies: + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/signature-v4@^2.1.3": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.1.4.tgz#e83b426ab4138cbb06c755c14a152ed514e1d052" + integrity sha512-gnu9gCn0qQ8IdhNjs6o3QVCXzUs33znSDYwVMWo3nX4dM6j7z9u6FC302ShYyVWfO4MkVMuGCCJ6nl3PcH7V1Q== + dependencies: + "@smithy/eventstream-codec" "^2.1.4" + "@smithy/is-array-buffer" "^2.1.1" + "@smithy/types" "^2.11.0" + "@smithy/util-hex-encoding" "^2.1.1" + "@smithy/util-middleware" "^2.1.4" + "@smithy/util-uri-escape" "^2.1.1" + "@smithy/util-utf8" "^2.2.0" + tslib "^2.5.0" + +"@smithy/smithy-client@^2.4.2", "@smithy/smithy-client@^2.4.4": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.4.4.tgz#73ec351350468d4447f0f74fd4d2786293083f86" + integrity sha512-SNE17wjycPZIJ2P5sv6wMTteV/vQVPdaqQkoK1KeGoWHXx79t3iLhQXj1uqRdlkMUS9pXJrLOAS+VvUSOYwQKw== + dependencies: + "@smithy/middleware-endpoint" "^2.4.6" + "@smithy/middleware-stack" "^2.1.4" + "@smithy/protocol-http" "^3.2.2" + "@smithy/types" "^2.11.0" + "@smithy/util-stream" "^2.1.4" + tslib "^2.5.0" + +"@smithy/types@^2.10.1", "@smithy/types@^2.11.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.11.0.tgz#d40c27302151be243d3a7319a154b7d7d5775021" + integrity sha512-AR0SXO7FuAskfNhyGfSTThpLRntDI5bOrU0xrpVYU0rZyjl3LBXInZFMTP/NNSd7IS6Ksdtar0QvnrPRIhVrLQ== + dependencies: + tslib "^2.5.0" + +"@smithy/url-parser@^2.1.3", "@smithy/url-parser@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.1.4.tgz#b24c13d80677b1cbcf61172f1c3dd49402ff6a07" + integrity sha512-1hTy6UYRYqOZlHKH2/2NzdNQ4NNmW2Lp0sYYvztKy+dEQuLvZL9w88zCzFQqqFer3DMcscYOshImxkJTGdV+rg== + dependencies: + "@smithy/querystring-parser" "^2.1.4" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-base64@^2.1.1", "@smithy/util-base64@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.2.0.tgz#d685c80396c693a179fdd36e2709ffdaae7d6ca7" + integrity sha512-RiQI/Txu0SxCR38Ky5BMEVaFfkNTBjpbxlr2UhhxggSmnsHDQPZJWMtPoXs7TWZaseslIlAWMiHmqRT3AV/P2w== + dependencies: + "@smithy/util-buffer-from" "^2.1.1" + "@smithy/util-utf8" "^2.2.0" + tslib "^2.5.0" + +"@smithy/util-body-length-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz#1fc77072768013ae646415eedb9833cd252d055d" + integrity sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag== + dependencies: + tslib "^2.5.0" + +"@smithy/util-body-length-node@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz#a6f5c9911f1c3e23efb340d5ce7a590b62f2056e" + integrity sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-buffer-from@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz#f9346bf8b23c5ba6f6bdb61dd9db779441ba8d08" + integrity sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg== + dependencies: + "@smithy/is-array-buffer" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-config-provider@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz#aea0a80236d6cedaee60473802899cff4a8cc0ba" + integrity sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-defaults-mode-browser@^2.1.4": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.6.tgz#7104ce3294c8cf4f427cfe902a9a51d0aa48c1a4" + integrity sha512-lM2JMYCilrejfGf8WWnVfrKly3vf+mc5x9TrTpT++qIKP452uWfLqlaUxbz1TkSfhqm8RjrlY22589B9aI8A9w== + dependencies: + "@smithy/property-provider" "^2.1.4" + "@smithy/smithy-client" "^2.4.4" + "@smithy/types" "^2.11.0" + bowser "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-defaults-mode-node@^2.2.3": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.6.tgz#2811326fe02f06465fdf02ddb3d2bb428e008e11" + integrity sha512-UmUbPHbkBJCXRFbq+FPLpVwiFPHj1oPWXJS2f2sy23PtXM94c9X5EceI6JKuKdBty+tzhrAs5JbmPM/HvmDB8Q== + dependencies: + "@smithy/config-resolver" "^2.1.5" + "@smithy/credential-provider-imds" "^2.2.6" + "@smithy/node-config-provider" "^2.2.5" + "@smithy/property-provider" "^2.1.4" + "@smithy/smithy-client" "^2.4.4" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-endpoints@^1.1.4": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.1.5.tgz#2f07510013353299b95f483842c59115c0a01e00" + integrity sha512-tgDpaUNsUtRvNiBulKU1VnpoXU1GINMfZZXunRhUXOTBEAufG1Wp79uDXLau2gg1RZ4dpAR6lXCkrmddihCGUg== + dependencies: + "@smithy/node-config-provider" "^2.2.5" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-hex-encoding@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz#978252b9fb242e0a59bae4ead491210688e0d15f" + integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-middleware@^2.1.3", "@smithy/util-middleware@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.1.4.tgz#eb5f8d3f3639c1c2ff6fae574353249c174f1c03" + integrity sha512-5yYNOgCN0DL0OplME0pthoUR/sCfipnROkbTO7m872o0GHCVNJj5xOFJ143rvHNA54+pIPMLum4z2DhPC2pVGA== + dependencies: + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-retry@^2.1.3", "@smithy/util-retry@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.1.4.tgz#cfbe7aa7609f92eecdce562be5308599a2f6537b" + integrity sha512-JRZwhA3fhkdenSEYIWatC8oLwt4Bdf2LhHbNQApqb7yFoIGMl4twcYI3BcJZ7YIBZrACA9jGveW6tuCd836XzQ== + dependencies: + "@smithy/service-error-classification" "^2.1.4" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-stream@^2.1.3", "@smithy/util-stream@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.1.4.tgz#4d7b3a99f5ad5ba0469aebcdbef7bf9bbabb829a" + integrity sha512-CiWaFPXstoR7v/PGHddFckovkhJb28wgQR7LwIt6RsQCJeRIHvUTVWhXw/Pco6Jm6nz/vfzN9FFdj/JN7RTkxQ== + dependencies: + "@smithy/fetch-http-handler" "^2.4.4" + "@smithy/node-http-handler" "^2.4.2" + "@smithy/types" "^2.11.0" + "@smithy/util-base64" "^2.2.0" + "@smithy/util-buffer-from" "^2.1.1" + "@smithy/util-hex-encoding" "^2.1.1" + "@smithy/util-utf8" "^2.2.0" + tslib "^2.5.0" + +"@smithy/util-uri-escape@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz#7eedc93b73ecda68f12fb9cf92e9fa0fbbed4d83" + integrity sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-utf8@^2.1.1", "@smithy/util-utf8@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.2.0.tgz#e352a81adc0491fbdc0086a00950d7e8333e211f" + integrity sha512-hBsKr5BqrDrKS8qy+YcV7/htmMGxriA1PREOf/8AGBhHIZnfilVv1Waf1OyKhSbFW15U/8+gcMUQ9/Kk5qwpHQ== + dependencies: + "@smithy/util-buffer-from" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-waiter@^2.1.3": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.1.4.tgz#675798056b120a51ca4220d3dac5703ca6a7bba5" + integrity sha512-AK17WaC0hx1wR9juAOsQkJ6DjDxBGEf5TrKhpXtNFEn+cVto9Li3MVsdpAO97AF7bhFXSyC8tJA3F4ThhqwCdg== + dependencies: + "@smithy/abort-controller" "^2.1.4" + "@smithy/types" "^2.11.0" + tslib "^2.5.0" + +"@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.1.1" + resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-3.1.1.tgz#237d4e151b8591e2ff4f0ae388f7d6b4741bacc0" + integrity sha512-TgCm6jVqMPv+OgD5uBNND/CkCwNDdXPQlcprtnXsWSBpTCy0q5CI6vRj+jsUiXE1xeRaKIX4UeaYJqzZBL92sg== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@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.11.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f" + integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw== + dependencies: + undici-types "~5.26.4" + +"@types/node@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.22" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.22.tgz#f622f92514b897e6b09903e97c16a0db8e94689f" + integrity sha512-p3pDIfuMg/aXBmhkyanPshdfJuX5c5+bQjYLIikPLXAUycEogij/c50n/C+8XOA5L93cU4ZRXtn+dNQGi0IZqQ== + 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.11.9" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +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.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + dependencies: + follow-redirects "^1.15.4" + 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-writer@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" + integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== + +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.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + 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.11.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af" + integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg== + 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.5.0" + +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.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + 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.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.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.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +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== + +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@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + 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@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +"lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +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.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +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== + +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" + +packet-reader@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" + integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== + +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.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.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.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" + integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== + +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.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7" + integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og== + +pg-protocol@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" + integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== + +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.11.3" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb" + integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== + dependencies: + buffer-writer "2.0.0" + packet-reader "1.0.0" + pg-connection-string "^2.6.2" + pg-pool "^3.6.1" + pg-protocol "^1.6.0" + 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== + +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +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.1" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.1.tgz#9380fe0a3b5ff17638d3fce30c3cf3a2396c2343" + integrity sha512-vIKKzQ9dGp2aBOxQRD1FmUYViuQiKXSJ8yah8TsaBx4U3BokJt+Y2A0qz2C4pj08uX59qpWxRqSLEfRmVOEgQw== + 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": + 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@^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@^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": + 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@^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@^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.11.1, 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.3.1, tslib@^2.5.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +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.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" + integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== + +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== + +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== + +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.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" + integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + +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.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +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== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +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 cbe83af313cca44b0bac2c3ac25418111bb8e275 Mon Sep 17 00:00:00 2001 From: 0xnirmal Date: Tue, 12 Mar 2024 13:42:21 -0400 Subject: [PATCH 0087/1590] remove yarn.lock --- yarn.lock | 2415 ----------------------------------------------------- 1 file changed, 2415 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 35fae9cfce..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2415 +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@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@^3.400.0": - version "3.529.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.529.1.tgz#12be8ac86cd4676790957745b20bef9eb2c14247" - integrity sha512-ZpvyO4w3XWo/OjXLd3fm7CLcKUUYcyady9qzTnKKSnp8a2NqO7UvU/1zhYdm+yyy8TR/9t7sDy+q6AYd4Nsr8g== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.529.1" - "@aws-sdk/core" "3.529.1" - "@aws-sdk/credential-provider-node" "3.529.1" - "@aws-sdk/middleware-bucket-endpoint" "3.525.0" - "@aws-sdk/middleware-expect-continue" "3.523.0" - "@aws-sdk/middleware-flexible-checksums" "3.523.0" - "@aws-sdk/middleware-host-header" "3.523.0" - "@aws-sdk/middleware-location-constraint" "3.523.0" - "@aws-sdk/middleware-logger" "3.523.0" - "@aws-sdk/middleware-recursion-detection" "3.523.0" - "@aws-sdk/middleware-sdk-s3" "3.525.0" - "@aws-sdk/middleware-signing" "3.523.0" - "@aws-sdk/middleware-ssec" "3.523.0" - "@aws-sdk/middleware-user-agent" "3.525.0" - "@aws-sdk/region-config-resolver" "3.525.0" - "@aws-sdk/signature-v4-multi-region" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-endpoints" "3.525.0" - "@aws-sdk/util-user-agent-browser" "3.523.0" - "@aws-sdk/util-user-agent-node" "3.525.0" - "@aws-sdk/xml-builder" "3.523.0" - "@smithy/config-resolver" "^2.1.4" - "@smithy/core" "^1.3.5" - "@smithy/eventstream-serde-browser" "^2.1.3" - "@smithy/eventstream-serde-config-resolver" "^2.1.3" - "@smithy/eventstream-serde-node" "^2.1.3" - "@smithy/fetch-http-handler" "^2.4.3" - "@smithy/hash-blob-browser" "^2.1.3" - "@smithy/hash-node" "^2.1.3" - "@smithy/hash-stream-node" "^2.1.3" - "@smithy/invalid-dependency" "^2.1.3" - "@smithy/md5-js" "^2.1.3" - "@smithy/middleware-content-length" "^2.1.3" - "@smithy/middleware-endpoint" "^2.4.4" - "@smithy/middleware-retry" "^2.1.4" - "@smithy/middleware-serde" "^2.1.3" - "@smithy/middleware-stack" "^2.1.3" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/node-http-handler" "^2.4.1" - "@smithy/protocol-http" "^3.2.1" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/url-parser" "^2.1.3" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.4" - "@smithy/util-defaults-mode-node" "^2.2.3" - "@smithy/util-endpoints" "^1.1.4" - "@smithy/util-retry" "^2.1.3" - "@smithy/util-stream" "^2.1.3" - "@smithy/util-utf8" "^2.1.1" - "@smithy/util-waiter" "^2.1.3" - tslib "^2.5.0" - -"@aws-sdk/client-sso-oidc@3.529.1": - version "3.529.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.529.1.tgz#40440af993f0d2c1d7fdc3ef5840867a223e773b" - integrity sha512-bimxCWAvRnVcluWEQeadXvHyzWlBWsuGVligsaVZaGF0TLSn0eLpzpN9B1EhHzTf7m0Kh/wGtPSH1JxO6PpB+A== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.529.1" - "@aws-sdk/core" "3.529.1" - "@aws-sdk/middleware-host-header" "3.523.0" - "@aws-sdk/middleware-logger" "3.523.0" - "@aws-sdk/middleware-recursion-detection" "3.523.0" - "@aws-sdk/middleware-user-agent" "3.525.0" - "@aws-sdk/region-config-resolver" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-endpoints" "3.525.0" - "@aws-sdk/util-user-agent-browser" "3.523.0" - "@aws-sdk/util-user-agent-node" "3.525.0" - "@smithy/config-resolver" "^2.1.4" - "@smithy/core" "^1.3.5" - "@smithy/fetch-http-handler" "^2.4.3" - "@smithy/hash-node" "^2.1.3" - "@smithy/invalid-dependency" "^2.1.3" - "@smithy/middleware-content-length" "^2.1.3" - "@smithy/middleware-endpoint" "^2.4.4" - "@smithy/middleware-retry" "^2.1.4" - "@smithy/middleware-serde" "^2.1.3" - "@smithy/middleware-stack" "^2.1.3" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/node-http-handler" "^2.4.1" - "@smithy/protocol-http" "^3.2.1" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/url-parser" "^2.1.3" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.4" - "@smithy/util-defaults-mode-node" "^2.2.3" - "@smithy/util-endpoints" "^1.1.4" - "@smithy/util-middleware" "^2.1.3" - "@smithy/util-retry" "^2.1.3" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/client-sso@3.529.1": - version "3.529.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.529.1.tgz#012a4c1861d586c2a96bef5e442bd505bdf3ca5f" - integrity sha512-KT1U/ZNjDhVv2ZgjzaeAn9VM7l667yeSguMrRYC8qk5h91/61MbjZypi6eOuKuVM+0fsQvzKScTQz0Lio0eYag== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.529.1" - "@aws-sdk/middleware-host-header" "3.523.0" - "@aws-sdk/middleware-logger" "3.523.0" - "@aws-sdk/middleware-recursion-detection" "3.523.0" - "@aws-sdk/middleware-user-agent" "3.525.0" - "@aws-sdk/region-config-resolver" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-endpoints" "3.525.0" - "@aws-sdk/util-user-agent-browser" "3.523.0" - "@aws-sdk/util-user-agent-node" "3.525.0" - "@smithy/config-resolver" "^2.1.4" - "@smithy/core" "^1.3.5" - "@smithy/fetch-http-handler" "^2.4.3" - "@smithy/hash-node" "^2.1.3" - "@smithy/invalid-dependency" "^2.1.3" - "@smithy/middleware-content-length" "^2.1.3" - "@smithy/middleware-endpoint" "^2.4.4" - "@smithy/middleware-retry" "^2.1.4" - "@smithy/middleware-serde" "^2.1.3" - "@smithy/middleware-stack" "^2.1.3" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/node-http-handler" "^2.4.1" - "@smithy/protocol-http" "^3.2.1" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/url-parser" "^2.1.3" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.4" - "@smithy/util-defaults-mode-node" "^2.2.3" - "@smithy/util-endpoints" "^1.1.4" - "@smithy/util-middleware" "^2.1.3" - "@smithy/util-retry" "^2.1.3" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/client-sts@3.529.1": - version "3.529.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.529.1.tgz#ad57e10868f5a89557dada02d2f951989e277ec6" - integrity sha512-Rvk2Sr3MACQTOtngUU+omlf4E17k47dRVXR7OFRD6Ow5iGgC9tkN2q/ExDPW/ktPOmM0lSgzWyQ6/PC/Zq3HUg== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.529.1" - "@aws-sdk/middleware-host-header" "3.523.0" - "@aws-sdk/middleware-logger" "3.523.0" - "@aws-sdk/middleware-recursion-detection" "3.523.0" - "@aws-sdk/middleware-user-agent" "3.525.0" - "@aws-sdk/region-config-resolver" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-endpoints" "3.525.0" - "@aws-sdk/util-user-agent-browser" "3.523.0" - "@aws-sdk/util-user-agent-node" "3.525.0" - "@smithy/config-resolver" "^2.1.4" - "@smithy/core" "^1.3.5" - "@smithy/fetch-http-handler" "^2.4.3" - "@smithy/hash-node" "^2.1.3" - "@smithy/invalid-dependency" "^2.1.3" - "@smithy/middleware-content-length" "^2.1.3" - "@smithy/middleware-endpoint" "^2.4.4" - "@smithy/middleware-retry" "^2.1.4" - "@smithy/middleware-serde" "^2.1.3" - "@smithy/middleware-stack" "^2.1.3" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/node-http-handler" "^2.4.1" - "@smithy/protocol-http" "^3.2.1" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/url-parser" "^2.1.3" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.4" - "@smithy/util-defaults-mode-node" "^2.2.3" - "@smithy/util-endpoints" "^1.1.4" - "@smithy/util-middleware" "^2.1.3" - "@smithy/util-retry" "^2.1.3" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/core@3.529.1": - version "3.529.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.529.1.tgz#378bf215f3bf407158b4743e4d94bed4fa2e2594" - integrity sha512-Sj42sYPfaL9PHvvciMICxhyrDZjqnnvFbPKDmQL5aFKyXy122qx7RdVqUOQERDmMQfvJh6+0W1zQlLnre89q4Q== - dependencies: - "@smithy/core" "^1.3.5" - "@smithy/protocol-http" "^3.2.1" - "@smithy/signature-v4" "^2.1.3" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - fast-xml-parser "4.2.5" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-env@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.523.0.tgz#4bc04b32c15ff7237ba1de866b96ccea24e433c7" - integrity sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-http@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.525.0.tgz#3a785ea8724200596ad1a48cf8485658401eb589" - integrity sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/fetch-http-handler" "^2.4.3" - "@smithy/node-http-handler" "^2.4.1" - "@smithy/property-provider" "^2.1.3" - "@smithy/protocol-http" "^3.2.1" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/util-stream" "^2.1.3" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-ini@3.529.1": - version "3.529.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.529.1.tgz#b2ca21746585079ab9cc0e7d212417ee92cc83e2" - integrity sha512-RjHsuTvHIwXG7a/3ERexemiD3c9riKMCZQzY2/b0Gg0ButEVbBcMfERtUzWmQ0V4ufe/PEZjP68MH1gupcoF9A== - dependencies: - "@aws-sdk/client-sts" "3.529.1" - "@aws-sdk/credential-provider-env" "3.523.0" - "@aws-sdk/credential-provider-process" "3.523.0" - "@aws-sdk/credential-provider-sso" "3.529.1" - "@aws-sdk/credential-provider-web-identity" "3.529.1" - "@aws-sdk/types" "3.523.0" - "@smithy/credential-provider-imds" "^2.2.3" - "@smithy/property-provider" "^2.1.3" - "@smithy/shared-ini-file-loader" "^2.3.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-node@3.529.1": - version "3.529.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.529.1.tgz#4c53c47320cf440be55786287a7d33b7364d2316" - integrity sha512-mvY7F3dMmk/0dZOCfl5sUI1bG0osureBjxhELGCF0KkJqhWI0hIzh8UnPkYytSg3vdc97CMv7pTcozxrdA3b0g== - dependencies: - "@aws-sdk/credential-provider-env" "3.523.0" - "@aws-sdk/credential-provider-http" "3.525.0" - "@aws-sdk/credential-provider-ini" "3.529.1" - "@aws-sdk/credential-provider-process" "3.523.0" - "@aws-sdk/credential-provider-sso" "3.529.1" - "@aws-sdk/credential-provider-web-identity" "3.529.1" - "@aws-sdk/types" "3.523.0" - "@smithy/credential-provider-imds" "^2.2.3" - "@smithy/property-provider" "^2.1.3" - "@smithy/shared-ini-file-loader" "^2.3.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-process@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.523.0.tgz#8cf85637f5075065a164d008f392d3ae3539ea23" - integrity sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/shared-ini-file-loader" "^2.3.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-sso@3.529.1": - version "3.529.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.529.1.tgz#ee685cfbb87d2aa138d46d6c115adac850e78ba7" - integrity sha512-KFMKkaoTGDgSJG+o9Ii7AglWG5JQeF6IFw9cXLMwDdIrp3KUmRcUIqe0cjOoCqeQEDGy0VHsimHmKKJ3894i/A== - dependencies: - "@aws-sdk/client-sso" "3.529.1" - "@aws-sdk/token-providers" "3.529.1" - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/shared-ini-file-loader" "^2.3.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-web-identity@3.529.1": - version "3.529.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.529.1.tgz#84fe00b22b4a4377a637c5ee2c628ba3a696152a" - integrity sha512-AGuZDOKN+AttjwTjrF47WLqzeEut2YynyxjkXZhxZF/xn8i5Y51kUAUdXsXw1bgR25pAeXQIdhsrQlRa1Pm5kw== - dependencies: - "@aws-sdk/client-sts" "3.529.1" - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-bucket-endpoint@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.525.0.tgz#f354fbc0b4a55b0b13ab704672382c5aeafae0b3" - integrity sha512-nYfQ2Xspfef7j8mZO7varUWLPH6HQlXateH7tBVtBNUAazyQE4UJEvC0fbQ+Y01e+FKlirim/m2umkdMXqAlTg== - dependencies: - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-arn-parser" "3.495.0" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - "@smithy/util-config-provider" "^2.2.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-expect-continue@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.523.0.tgz#9db5a9dd54a41fb71d40e744ff800a697a82e969" - integrity sha512-E5DyRAHU39VHaAlQLqXYS/IKpgk3vsryuU6kkOcIIK8Dgw0a2tjoh5AOCaNa8pD+KgAGrFp35JIMSX1zui5diA== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-flexible-checksums@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.523.0.tgz#7f0e4a98aac00f08b154cb283d33a36993dd730d" - integrity sha512-lIa1TdWY9q4zsDFarfSnYcdrwPR+nypaU4n6hb95i620/1F5M5s6H8P0hYtwTNNvx+slrR8F3VBML9pjBtzAHw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.523.0" - "@smithy/is-array-buffer" "^2.1.1" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-host-header@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.523.0.tgz#9aaa29edd668905eed8ee8af482b96162dafdeb1" - integrity sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-location-constraint@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.523.0.tgz#c5b2395119ece973773f80f67eef43603d159c12" - integrity sha512-1QAUXX3U0jkARnU0yyjk81EO4Uw5dCeQOtvUY5s3bUOHatR3ThosQeIr6y9BCsbXHzNnDe1ytCjqAPyo8r/bYw== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-logger@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.523.0.tgz#ad61bfdd73b5983ab8a8926b9c01825bc048babf" - integrity sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-recursion-detection@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.523.0.tgz#21d9ec52700545d7935d6c943cb40bffa69ab4b4" - integrity sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-sdk-s3@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.525.0.tgz#c3ce03940240fa7a42bfa3f1916d2ce9fa0fafbf" - integrity sha512-ewFyyFM6wdFTOqCiId5GQNi7owDdLEonQhB4h8tF6r3HV52bRlDvZA4aDos+ft6N/XY2J6L0qlFTFq+/oiurXw== - dependencies: - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-arn-parser" "3.495.0" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/protocol-http" "^3.2.1" - "@smithy/signature-v4" "^2.1.3" - "@smithy/smithy-client" "^2.4.2" - "@smithy/types" "^2.10.1" - "@smithy/util-config-provider" "^2.2.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-signing@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.523.0.tgz#1b2c458eb6a00da45b0800916ee463ff727c0717" - integrity sha512-pFXV4don6qcmew/OvEjLUr2foVjzoJ8o5k57Oz9yAHz8INx3RHK8MP/K4mVhHo6n0SquRcWrm4kY/Tw+89gkEA== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/protocol-http" "^3.2.1" - "@smithy/signature-v4" "^2.1.3" - "@smithy/types" "^2.10.1" - "@smithy/util-middleware" "^2.1.3" - tslib "^2.5.0" - -"@aws-sdk/middleware-ssec@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.523.0.tgz#1bc0b57859a3e90af7e6103341903896f601e622" - integrity sha512-FaqAZQeF5cQzZLOIboIJRaWVOQ2F2pJZAXGF5D7nJsxYNFChotA0O0iWimBRxU35RNn7yirVxz35zQzs20ddIw== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-user-agent@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.525.0.tgz#3ac154829460271c53ad49d8301d4c849e9afb9f" - integrity sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ== - dependencies: - "@aws-sdk/types" "3.523.0" - "@aws-sdk/util-endpoints" "3.525.0" - "@smithy/protocol-http" "^3.2.1" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/region-config-resolver@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.525.0.tgz#ebd7edd0059857f59ed605c37cf5752542cf8914" - integrity sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/types" "^2.10.1" - "@smithy/util-config-provider" "^2.2.1" - "@smithy/util-middleware" "^2.1.3" - tslib "^2.5.0" - -"@aws-sdk/signature-v4-multi-region@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.525.0.tgz#b9b7e1079b0a8a1df4bb282216aa20b56d139ba5" - integrity sha512-j8gkdfiokaherRgokfZBl2azYBMHlegT7pOnR/3Y79TSz6G+bJeIkuNk8aUbJArr6R8nvAM1j4dt1rBM+efolQ== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.525.0" - "@aws-sdk/types" "3.523.0" - "@smithy/protocol-http" "^3.2.1" - "@smithy/signature-v4" "^2.1.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/token-providers@3.529.1": - version "3.529.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.529.1.tgz#0d86e0edb50cfff51ac063410fde60edf3ae4b2d" - integrity sha512-NpgMjsfpqiugbxrYGXtta914N43Mx/H0niidqv8wKMTgWQEtsJvYtOni+kuLXB+LmpjaMFNlpadooFU/bK4buA== - dependencies: - "@aws-sdk/client-sso-oidc" "3.529.1" - "@aws-sdk/types" "3.523.0" - "@smithy/property-provider" "^2.1.3" - "@smithy/shared-ini-file-loader" "^2.3.3" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/types@3.523.0", "@aws-sdk/types@^3.222.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.523.0.tgz#2bb11390023949f31d9211212f41e245a7f03489" - integrity sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/util-arn-parser@3.495.0": - version "3.495.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz#539f2d6dfef343a80324348f1f9a1b7eed2390f3" - integrity sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-endpoints@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.525.0.tgz#d9f53b60e69dbe4623a4200d10be1be2ac73438f" - integrity sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/types" "^2.10.1" - "@smithy/util-endpoints" "^1.1.4" - tslib "^2.5.0" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.495.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz#9034fd8db77991b28ed20e067acdd53e8b8f824b" - integrity sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-browser@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.523.0.tgz#77188e83f9d470ddf140fe8c5d4d51049c9d5898" - integrity sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/types" "^2.10.1" - bowser "^2.11.0" - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-node@3.525.0": - version "3.525.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.525.0.tgz#aa96c28bad8360d2a350c30c3c209c35f99ac5ee" - integrity sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ== - dependencies: - "@aws-sdk/types" "3.523.0" - "@smithy/node-config-provider" "^2.2.4" - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.523.0": - version "3.523.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.523.0.tgz#6abdaf5716f6c7153c328bbbd499345fae755dce" - integrity sha512-wfvyVymj2TUw7SuDor9IuFcAzJZvWRBZotvY/wQJOlYa3UP3Oezzecy64N4FWfBJEsZdrTN+HOZFl+IzTWWnUA== - dependencies: - "@smithy/types" "^2.10.1" - tslib "^2.5.0" - -"@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.40" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.40.tgz#a974b343e6f9915a38a354dc024a428261634785" - integrity sha512-YtMaOKKaGKovmReEfgDRd+cLaXGFiBbAnAHdDJE8eb6BVkjhR2N9l+OvgLSMgLY6I/Bpu3pkJiiweEdCuvqfEA== - dependencies: - "@aws-sdk/client-s3" "^3.400.0" - "@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" - -"@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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.1.4.tgz#7c65f910ce59abc9715cba8347dd454dbf5538a9" - integrity sha512-66HO817oIZ2otLIqy06R5muapqZjkgF1jfU0wyNko8cuqZNu8nbS9ljlhcRYw/M/uWRJzB9ih81DLSHhYbBLlQ== - dependencies: - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/chunked-blob-reader-native@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.2.tgz#13b71e4bdbaa1e0b842bf4ae063c7a1ad533a8e7" - integrity sha512-KwR9fFc/t5jH9RQFbrA9DHSmI+URTmB4v+i7H08UNET9AcN6GGBTBMiDKpA56Crw6CN7cSaSDXaRS/AsfOuupQ== - dependencies: - "@smithy/util-base64" "^2.2.0" - tslib "^2.5.0" - -"@smithy/chunked-blob-reader@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz#997faba8e197e0cb9824dad30ae581466e386e57" - integrity sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ== - dependencies: - tslib "^2.5.0" - -"@smithy/config-resolver@^2.1.4", "@smithy/config-resolver@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.1.5.tgz#51d047d2ff7b69cbb8d8b1a197f0edc2a17fbc1b" - integrity sha512-LcBB5JQC3Tx2ZExIJzfvWaajhFIwHrUNQeqxhred2r5nnqrdly9uoCrvM1sxOOdghYuWWm2Kr8tBCDOmxsgeTA== - dependencies: - "@smithy/node-config-provider" "^2.2.5" - "@smithy/types" "^2.11.0" - "@smithy/util-config-provider" "^2.2.1" - "@smithy/util-middleware" "^2.1.4" - tslib "^2.5.0" - -"@smithy/core@^1.3.5": - version "1.3.7" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.3.7.tgz#85728b09b184e1e8934cedb208e674e496f5db0d" - integrity sha512-zHrrstOO78g+/rOJoHi4j3mGUBtsljRhcKNzloWPv1XIwgcFUi+F1YFKr2qPQ3z7Ls5dNc4L2SPrVarNFIQqog== - dependencies: - "@smithy/middleware-endpoint" "^2.4.6" - "@smithy/middleware-retry" "^2.1.6" - "@smithy/middleware-serde" "^2.2.1" - "@smithy/protocol-http" "^3.2.2" - "@smithy/smithy-client" "^2.4.4" - "@smithy/types" "^2.11.0" - "@smithy/util-middleware" "^2.1.4" - tslib "^2.5.0" - -"@smithy/credential-provider-imds@^2.2.3", "@smithy/credential-provider-imds@^2.2.6": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.6.tgz#a518575d5b830370fa76a270c376ce9f208d4c74" - integrity sha512-+xQe4Pite0kdk9qn0Vyw5BRVh0iSlj+T4TEKRXr4E1wZKtVgIzGlkCrfICSjiPVFkPxk4jMpVboMYdEiiA88/w== - dependencies: - "@smithy/node-config-provider" "^2.2.5" - "@smithy/property-provider" "^2.1.4" - "@smithy/types" "^2.11.0" - "@smithy/url-parser" "^2.1.4" - tslib "^2.5.0" - -"@smithy/eventstream-codec@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.1.4.tgz#ba8855fcd53d06a456ec2e59f11eadd1eb7ffa62" - integrity sha512-UkiieTztP7adg8EuqZvB0Y4LewdleZCJU7Kgt9RDutMsRYqO32fMpWeQHeTHaIMosmzcRZUykMRrhwGJe9mP3A== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.11.0" - "@smithy/util-hex-encoding" "^2.1.1" - tslib "^2.5.0" - -"@smithy/eventstream-serde-browser@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.4.tgz#e3b4873969740cbcf67ac4bfcddb36ed31c0097d" - integrity sha512-K0SyvrUu/vARKzNW+Wp9HImiC/cJ6K88/n7FTH1slY+MErdKoiSbRLaXbJ9qD6x1Hu28cplHMlhADwZelUx/Ww== - dependencies: - "@smithy/eventstream-serde-universal" "^2.1.4" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/eventstream-serde-config-resolver@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.4.tgz#7fa9a57f1911ce163a4959ee04006ad4eaa3eba3" - integrity sha512-FH+2AwOwZ0kHPB9sciWJtUqx81V4vizfT3P6T9eslmIC2hi8ch/KFvQlF7jDmwR1aLlPlq6qqLKLqzK/71Ki4A== - dependencies: - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/eventstream-serde-node@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.4.tgz#1a1ab2b5d1d70b7d686ab4c77b0540c422f9aaac" - integrity sha512-gsc5ZTvVcB9sleLQzsK/rOhgn52+AAsmhEr41WDwAcctccBjh429+b8gT9t+SU8QyajypfsLOZfJQu0+zE515Q== - dependencies: - "@smithy/eventstream-serde-universal" "^2.1.4" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/eventstream-serde-universal@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.4.tgz#0cd87d4150070d4958bc7fc8936c731d432934bc" - integrity sha512-NKLAsYnZA5s+ntipJRKo1RrRbhYHrsEnmiUoz0EhVYrAih+UELY9sKR+A1ujGaFm3nKDs5fPfiozC2wpXq2zUA== - dependencies: - "@smithy/eventstream-codec" "^2.1.4" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/fetch-http-handler@^2.4.3", "@smithy/fetch-http-handler@^2.4.4": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.4.tgz#8737f00fbec75ba34192fb8c6b1b13377dfbd370" - integrity sha512-DSUtmsnIx26tPuyyrK49dk2DAhPgEw6xRW7V62nMHIB5dk3NqhGnwcKO2fMdt/l3NUVgia34ZsSJA8bD+3nh7g== - dependencies: - "@smithy/protocol-http" "^3.2.2" - "@smithy/querystring-builder" "^2.1.4" - "@smithy/types" "^2.11.0" - "@smithy/util-base64" "^2.2.0" - tslib "^2.5.0" - -"@smithy/hash-blob-browser@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.4.tgz#67d67bf61a89765b30ca0aa58a0e93dfb527730e" - integrity sha512-bDugS1DortnriGDdp0sqdq7dLI5if8CEOF9rKtpJa1ZYMq6fxOtTId//dlilS5QgUtUs6GHN5aMQVxEjhBzzQA== - dependencies: - "@smithy/chunked-blob-reader" "^2.1.1" - "@smithy/chunked-blob-reader-native" "^2.1.2" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/hash-node@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.1.4.tgz#a2cc973ca9a074085d3b70969b5be186a0d5ee94" - integrity sha512-uvCcpDLXaTTL0X/9ezF8T8sS77UglTfZVQaUOBiCvR0QydeSyio3t0Hj3QooVdyFsKTubR8gCk/ubLk3vAyDng== - dependencies: - "@smithy/types" "^2.11.0" - "@smithy/util-buffer-from" "^2.1.1" - "@smithy/util-utf8" "^2.2.0" - tslib "^2.5.0" - -"@smithy/hash-stream-node@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.1.4.tgz#51d5a214e018bc5431538ca663aee822afa66008" - integrity sha512-HcDQRs/Fcx7lwAd+/vSW/e7ltdh148D2Pq7XI61CEWcOoQdQ0W8aYBHDRC4zjtXv6hySdmWE+vo3dvdTt7aj8A== - dependencies: - "@smithy/types" "^2.11.0" - "@smithy/util-utf8" "^2.2.0" - tslib "^2.5.0" - -"@smithy/invalid-dependency@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.1.4.tgz#aa58540c21b39fbedf58192fb34e6fb49cc736ca" - integrity sha512-QzlNBl6jt3nb9jNnE51wTegReVvUdozyMMrFEyb/rc6AzPID1O+qMJYjAAoNw098y0CZVfCpEnoK2+mfBOd8XA== - dependencies: - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/is-array-buffer@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz#07b4c77ae67ed58a84400c76edd482271f9f957b" - integrity sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ== - dependencies: - tslib "^2.5.0" - -"@smithy/md5-js@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.1.4.tgz#607c54622d020625056deffc18644864ff307621" - integrity sha512-WHTnnYJPKE7Sy49DogLuox42TnlwD3cQ6TObPD6WFWjKocWIdpEpIvdJHwWUfSFf0JIi8ON8z6ZEhsnyKVCcLQ== - dependencies: - "@smithy/types" "^2.11.0" - "@smithy/util-utf8" "^2.2.0" - tslib "^2.5.0" - -"@smithy/middleware-content-length@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.1.4.tgz#0939d7b36f029f075a118ac1673db2655f51ff81" - integrity sha512-C6VRwfcr0w9qRFhDGCpWMVhlEIBFlmlPRP1aX9Cv9xDj9SUwlDrNvoV1oP1vjRYuLxCDgovBBynCwwcluS2wLw== - dependencies: - "@smithy/protocol-http" "^3.2.2" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/middleware-endpoint@^2.4.4", "@smithy/middleware-endpoint@^2.4.6": - version "2.4.6" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.6.tgz#18fbae774b722d47d4d40dad73466893a035a072" - integrity sha512-AsXtUXHPOAS0EGZUSFOsVJvc7p0KL29PGkLxLfycPOcFVLru/oinYB6yvyL73ZZPX2OB8sMYUMrj7eH2kI7V/w== - dependencies: - "@smithy/middleware-serde" "^2.2.1" - "@smithy/node-config-provider" "^2.2.5" - "@smithy/shared-ini-file-loader" "^2.3.5" - "@smithy/types" "^2.11.0" - "@smithy/url-parser" "^2.1.4" - "@smithy/util-middleware" "^2.1.4" - tslib "^2.5.0" - -"@smithy/middleware-retry@^2.1.4", "@smithy/middleware-retry@^2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.1.6.tgz#c712e0286acbfa9b6488947123cc7e9aa0f6e6ca" - integrity sha512-khpSV0NxqMHfa06kfG4WYv+978sVvfTFmn0hIFKKwOXtIxyYtPKiQWFT4nnwZD07fGdYGbtCBu3YALc8SsA5mA== - dependencies: - "@smithy/node-config-provider" "^2.2.5" - "@smithy/protocol-http" "^3.2.2" - "@smithy/service-error-classification" "^2.1.4" - "@smithy/smithy-client" "^2.4.4" - "@smithy/types" "^2.11.0" - "@smithy/util-middleware" "^2.1.4" - "@smithy/util-retry" "^2.1.4" - tslib "^2.5.0" - uuid "^8.3.2" - -"@smithy/middleware-serde@^2.1.3", "@smithy/middleware-serde@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.2.1.tgz#b4a6a757e3f6f62e432f53020a06d27eabe8f424" - integrity sha512-VAWRWqnNjgccebndpyK94om4ZTYzXLQxUmNCXYzM/3O9MTfQjTNBgtFtQwyIIez6z7LWcCsXmnKVIOE9mLqAHQ== - dependencies: - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/middleware-stack@^2.1.3", "@smithy/middleware-stack@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.1.4.tgz#eb475eb31ad6fed0aa21ee0896c3c80114b73507" - integrity sha512-Qqs2ba8Ax1rGKOSGJS2JN23fhhox2WMdRuzx0NYHtXzhxbJOIMmz9uQY6Hf4PY8FPteBPp1+h0j5Fmr+oW12sg== - dependencies: - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/node-config-provider@^2.2.4", "@smithy/node-config-provider@^2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.2.5.tgz#39c7a06e798f763722d12fccab6160896b2ee08b" - integrity sha512-CxPf2CXhjO79IypHJLBATB66Dw6suvr1Yc2ccY39hpR6wdse3pZ3E8RF83SODiNH0Wjmkd0ze4OF8exugEixgA== - dependencies: - "@smithy/property-provider" "^2.1.4" - "@smithy/shared-ini-file-loader" "^2.3.5" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/node-http-handler@^2.4.1", "@smithy/node-http-handler@^2.4.2": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.4.2.tgz#2d5576d4ea1af0be55bd701a2d31c747ca61483c" - integrity sha512-yrj3c1g145uiK5io+1UPbJAHo8BSGORkBzrmzvAsOmBKb+1p3jmM8ZwNLDH/HTTxVLm9iM5rMszx+iAh1HUC4Q== - dependencies: - "@smithy/abort-controller" "^2.1.4" - "@smithy/protocol-http" "^3.2.2" - "@smithy/querystring-builder" "^2.1.4" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/property-provider@^2.1.3", "@smithy/property-provider@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.1.4.tgz#0f127125c4b6f3ae0ddb4777946926f0bd8f0ca1" - integrity sha512-nWaY/MImj1BiXZ9WY65h45dcxOx8pl06KYoHxwojDxDL+Q9yLU1YnZpgv8zsHhEftlj9KhePENjQTlNowWVyug== - dependencies: - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/protocol-http@^3.2.1", "@smithy/protocol-http@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.2.2.tgz#af001dcc61e6ce6374315c907ad5bbd09bd3c810" - integrity sha512-xYBlllOQcOuLoxzhF2u8kRHhIFGQpDeTQj/dBSnw4kfI29WMKL5RnW1m9YjnJAJ49miuIvrkJR+gW5bCQ+Mchw== - dependencies: - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/querystring-builder@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.1.4.tgz#f9cc5f389671d030701dc6ee66e2eaf309642eab" - integrity sha512-LXSL0J/nRWvGT+jIj+Fip3j0J1ZmHkUyBFRzg/4SmPNCLeDrtVu7ptKOnTboPsFZu5BxmpYok3kJuQzzRdrhbw== - dependencies: - "@smithy/types" "^2.11.0" - "@smithy/util-uri-escape" "^2.1.1" - tslib "^2.5.0" - -"@smithy/querystring-parser@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.1.4.tgz#17202a1d4844ac2691bc88d676eb0969b5c01265" - integrity sha512-U2b8olKXgZAs0eRo7Op11jTNmmcC/sqYmsA7vN6A+jkGnDvJlEl7AetUegbBzU8q3D6WzC5rhR/joIy8tXPzIg== - dependencies: - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/service-error-classification@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.4.tgz#19ba871fcfb654ac03256b885e3184d69ec11a13" - integrity sha512-JW2Hthy21evnvDmYYk1kItOmbp3X5XI5iqorXgFEunb6hQfSDZ7O1g0Clyxg7k/Pcr9pfLk5xDIR2To/IohlsQ== - dependencies: - "@smithy/types" "^2.11.0" - -"@smithy/shared-ini-file-loader@^2.3.3", "@smithy/shared-ini-file-loader@^2.3.5": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.5.tgz#3e2f6f5fcfb1edf934f531dbf17429e2631e3a21" - integrity sha512-oI99+hOvsM8oAJtxAGmoL/YCcGXtbP0fjPseYGaNmJ4X5xOFTer0KPk7AIH3AL6c5AlYErivEi1X/X78HgTVIw== - dependencies: - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/signature-v4@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.1.4.tgz#e83b426ab4138cbb06c755c14a152ed514e1d052" - integrity sha512-gnu9gCn0qQ8IdhNjs6o3QVCXzUs33znSDYwVMWo3nX4dM6j7z9u6FC302ShYyVWfO4MkVMuGCCJ6nl3PcH7V1Q== - dependencies: - "@smithy/eventstream-codec" "^2.1.4" - "@smithy/is-array-buffer" "^2.1.1" - "@smithy/types" "^2.11.0" - "@smithy/util-hex-encoding" "^2.1.1" - "@smithy/util-middleware" "^2.1.4" - "@smithy/util-uri-escape" "^2.1.1" - "@smithy/util-utf8" "^2.2.0" - tslib "^2.5.0" - -"@smithy/smithy-client@^2.4.2", "@smithy/smithy-client@^2.4.4": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.4.4.tgz#73ec351350468d4447f0f74fd4d2786293083f86" - integrity sha512-SNE17wjycPZIJ2P5sv6wMTteV/vQVPdaqQkoK1KeGoWHXx79t3iLhQXj1uqRdlkMUS9pXJrLOAS+VvUSOYwQKw== - dependencies: - "@smithy/middleware-endpoint" "^2.4.6" - "@smithy/middleware-stack" "^2.1.4" - "@smithy/protocol-http" "^3.2.2" - "@smithy/types" "^2.11.0" - "@smithy/util-stream" "^2.1.4" - tslib "^2.5.0" - -"@smithy/types@^2.10.1", "@smithy/types@^2.11.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.11.0.tgz#d40c27302151be243d3a7319a154b7d7d5775021" - integrity sha512-AR0SXO7FuAskfNhyGfSTThpLRntDI5bOrU0xrpVYU0rZyjl3LBXInZFMTP/NNSd7IS6Ksdtar0QvnrPRIhVrLQ== - dependencies: - tslib "^2.5.0" - -"@smithy/url-parser@^2.1.3", "@smithy/url-parser@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.1.4.tgz#b24c13d80677b1cbcf61172f1c3dd49402ff6a07" - integrity sha512-1hTy6UYRYqOZlHKH2/2NzdNQ4NNmW2Lp0sYYvztKy+dEQuLvZL9w88zCzFQqqFer3DMcscYOshImxkJTGdV+rg== - dependencies: - "@smithy/querystring-parser" "^2.1.4" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/util-base64@^2.1.1", "@smithy/util-base64@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.2.0.tgz#d685c80396c693a179fdd36e2709ffdaae7d6ca7" - integrity sha512-RiQI/Txu0SxCR38Ky5BMEVaFfkNTBjpbxlr2UhhxggSmnsHDQPZJWMtPoXs7TWZaseslIlAWMiHmqRT3AV/P2w== - dependencies: - "@smithy/util-buffer-from" "^2.1.1" - "@smithy/util-utf8" "^2.2.0" - tslib "^2.5.0" - -"@smithy/util-body-length-browser@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz#1fc77072768013ae646415eedb9833cd252d055d" - integrity sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag== - dependencies: - tslib "^2.5.0" - -"@smithy/util-body-length-node@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz#a6f5c9911f1c3e23efb340d5ce7a590b62f2056e" - integrity sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg== - dependencies: - tslib "^2.5.0" - -"@smithy/util-buffer-from@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz#f9346bf8b23c5ba6f6bdb61dd9db779441ba8d08" - integrity sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg== - dependencies: - "@smithy/is-array-buffer" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-config-provider@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz#aea0a80236d6cedaee60473802899cff4a8cc0ba" - integrity sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw== - dependencies: - tslib "^2.5.0" - -"@smithy/util-defaults-mode-browser@^2.1.4": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.6.tgz#7104ce3294c8cf4f427cfe902a9a51d0aa48c1a4" - integrity sha512-lM2JMYCilrejfGf8WWnVfrKly3vf+mc5x9TrTpT++qIKP452uWfLqlaUxbz1TkSfhqm8RjrlY22589B9aI8A9w== - dependencies: - "@smithy/property-provider" "^2.1.4" - "@smithy/smithy-client" "^2.4.4" - "@smithy/types" "^2.11.0" - bowser "^2.11.0" - tslib "^2.5.0" - -"@smithy/util-defaults-mode-node@^2.2.3": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.6.tgz#2811326fe02f06465fdf02ddb3d2bb428e008e11" - integrity sha512-UmUbPHbkBJCXRFbq+FPLpVwiFPHj1oPWXJS2f2sy23PtXM94c9X5EceI6JKuKdBty+tzhrAs5JbmPM/HvmDB8Q== - dependencies: - "@smithy/config-resolver" "^2.1.5" - "@smithy/credential-provider-imds" "^2.2.6" - "@smithy/node-config-provider" "^2.2.5" - "@smithy/property-provider" "^2.1.4" - "@smithy/smithy-client" "^2.4.4" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/util-endpoints@^1.1.4": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.1.5.tgz#2f07510013353299b95f483842c59115c0a01e00" - integrity sha512-tgDpaUNsUtRvNiBulKU1VnpoXU1GINMfZZXunRhUXOTBEAufG1Wp79uDXLau2gg1RZ4dpAR6lXCkrmddihCGUg== - dependencies: - "@smithy/node-config-provider" "^2.2.5" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/util-hex-encoding@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz#978252b9fb242e0a59bae4ead491210688e0d15f" - integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg== - dependencies: - tslib "^2.5.0" - -"@smithy/util-middleware@^2.1.3", "@smithy/util-middleware@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.1.4.tgz#eb5f8d3f3639c1c2ff6fae574353249c174f1c03" - integrity sha512-5yYNOgCN0DL0OplME0pthoUR/sCfipnROkbTO7m872o0GHCVNJj5xOFJ143rvHNA54+pIPMLum4z2DhPC2pVGA== - dependencies: - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/util-retry@^2.1.3", "@smithy/util-retry@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.1.4.tgz#cfbe7aa7609f92eecdce562be5308599a2f6537b" - integrity sha512-JRZwhA3fhkdenSEYIWatC8oLwt4Bdf2LhHbNQApqb7yFoIGMl4twcYI3BcJZ7YIBZrACA9jGveW6tuCd836XzQ== - dependencies: - "@smithy/service-error-classification" "^2.1.4" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@smithy/util-stream@^2.1.3", "@smithy/util-stream@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.1.4.tgz#4d7b3a99f5ad5ba0469aebcdbef7bf9bbabb829a" - integrity sha512-CiWaFPXstoR7v/PGHddFckovkhJb28wgQR7LwIt6RsQCJeRIHvUTVWhXw/Pco6Jm6nz/vfzN9FFdj/JN7RTkxQ== - dependencies: - "@smithy/fetch-http-handler" "^2.4.4" - "@smithy/node-http-handler" "^2.4.2" - "@smithy/types" "^2.11.0" - "@smithy/util-base64" "^2.2.0" - "@smithy/util-buffer-from" "^2.1.1" - "@smithy/util-hex-encoding" "^2.1.1" - "@smithy/util-utf8" "^2.2.0" - tslib "^2.5.0" - -"@smithy/util-uri-escape@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz#7eedc93b73ecda68f12fb9cf92e9fa0fbbed4d83" - integrity sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw== - dependencies: - tslib "^2.5.0" - -"@smithy/util-utf8@^2.1.1", "@smithy/util-utf8@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.2.0.tgz#e352a81adc0491fbdc0086a00950d7e8333e211f" - integrity sha512-hBsKr5BqrDrKS8qy+YcV7/htmMGxriA1PREOf/8AGBhHIZnfilVv1Waf1OyKhSbFW15U/8+gcMUQ9/Kk5qwpHQ== - dependencies: - "@smithy/util-buffer-from" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-waiter@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.1.4.tgz#675798056b120a51ca4220d3dac5703ca6a7bba5" - integrity sha512-AK17WaC0hx1wR9juAOsQkJ6DjDxBGEf5TrKhpXtNFEn+cVto9Li3MVsdpAO97AF7bhFXSyC8tJA3F4ThhqwCdg== - dependencies: - "@smithy/abort-controller" "^2.1.4" - "@smithy/types" "^2.11.0" - tslib "^2.5.0" - -"@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.1.1" - resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-3.1.1.tgz#237d4e151b8591e2ff4f0ae388f7d6b4741bacc0" - integrity sha512-TgCm6jVqMPv+OgD5uBNND/CkCwNDdXPQlcprtnXsWSBpTCy0q5CI6vRj+jsUiXE1xeRaKIX4UeaYJqzZBL92sg== - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@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.11.25" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f" - integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw== - dependencies: - undici-types "~5.26.4" - -"@types/node@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.22" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.22.tgz#f622f92514b897e6b09903e97c16a0db8e94689f" - integrity sha512-p3pDIfuMg/aXBmhkyanPshdfJuX5c5+bQjYLIikPLXAUycEogij/c50n/C+8XOA5L93cU4ZRXtn+dNQGi0IZqQ== - 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.11.9" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" - integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -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.6.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" - integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== - dependencies: - follow-redirects "^1.15.4" - 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-writer@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" - integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== - -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.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - 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.11.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af" - integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg== - 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.5.0" - -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.4: - version "1.15.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - 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.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.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.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -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== - -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@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - 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@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -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.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -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== - -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" - -packet-reader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" - integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== - -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.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.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.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" - integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== - -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.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7" - integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og== - -pg-protocol@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" - integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== - -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.11.3" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb" - integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== - dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.6.2" - pg-pool "^3.6.1" - pg-protocol "^1.6.0" - 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== - -semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -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.1" - resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.1.tgz#9380fe0a3b5ff17638d3fce30c3cf3a2396c2343" - integrity sha512-vIKKzQ9dGp2aBOxQRD1FmUYViuQiKXSJ8yah8TsaBx4U3BokJt+Y2A0qz2C4pj08uX59qpWxRqSLEfRmVOEgQw== - 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": - 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@^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@^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": - 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@^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@^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.11.1, 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.3.1, tslib@^2.5.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -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.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" - integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== - -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== - -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== - -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.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -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.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -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== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -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 c02a88c68315da24cee420dbd9c21c2390dfa3bb Mon Sep 17 00:00:00 2001 From: Define101 Date: Tue, 12 Mar 2024 20:59:05 +0000 Subject: [PATCH 0088/1590] fix goose --- dexs/goosefx/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/goosefx/index.ts b/dexs/goosefx/index.ts index 2d1d96956a..8dc7b088e4 100644 --- a/dexs/goosefx/index.ts +++ b/dexs/goosefx/index.ts @@ -8,7 +8,7 @@ const gooseFxEndpoint = "https://api-services.goosefx.io/getDefillamaStats"; const fetch = async (timestamp: number) => { const timeStampInMs = timestamp * 1000; const res = await postURL(gooseFxEndpoint, { - timeStamp: timeStampInMs + timestamp: timeStampInMs }); return { timestamp: timeStampInMs, From 0dadc8b3d5a627d36908315aaef168774df4486d Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Wed, 13 Mar 2024 00:53:14 +0000 Subject: [PATCH 0089/1590] update ramses-v1 --- fees/ramses-exchange/bribes.ts | 35 ++++++++++++++++++++ fees/ramses-exchange/index.ts | 58 ++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 fees/ramses-exchange/bribes.ts create mode 100644 fees/ramses-exchange/index.ts diff --git a/fees/ramses-exchange/bribes.ts b/fees/ramses-exchange/bribes.ts new file mode 100644 index 0000000000..29e01279c5 --- /dev/null +++ b/fees/ramses-exchange/bribes.ts @@ -0,0 +1,35 @@ +import request from "graphql-request"; +import { Balances } from "@defillama/sdk"; + +interface IBribes { + amount: number; + token: { + id: string; + decimals: number; + }; +} + +export const fees_bribes = async (fromBlock: number, timestamp: number, balances: Balances) => { + const endpoint = 'https://api.thegraph.com/subgraphs/name/ramsesexchange/concentrated-liquidity-graph'; + const graphQuery = ` + query GetBribes($fromBlock: Int!) { + bribes( + where: { timestamp_gte: ${timestamp} } + ) { + amount + token { + id + decimals + } + } + } + `; + + const graphRes: { bribes: IBribes[] } = await request(endpoint, graphQuery, { fromBlock, }); + + const logs_bribes = graphRes.bribes; + + logs_bribes.map((e: IBribes) => { + balances.add(e.token.id, e.amount * Math.pow(10, e.token.decimals)); + }) +}; diff --git a/fees/ramses-exchange/index.ts b/fees/ramses-exchange/index.ts new file mode 100644 index 0000000000..6d3050af30 --- /dev/null +++ b/fees/ramses-exchange/index.ts @@ -0,0 +1,58 @@ +import { Adapter, FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getDexFeesExports } from "../../helpers/dexVolumeLogs"; +import { fees_bribes } from './bribes'; + + +const FACTORY_ADDRESS = '0xaaa20d08e59f6561f242b08513d36266c5a29415'; + +type TStartTime = { + [key: string]: number; +} +const startTimeV2: TStartTime = { + [CHAIN.ARBITRUM]: 1678838400, +} + +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: toTimestamp, + dailyBribesRevenue: bribes, + }; +}; + +const methodology = { + UserFees: "User pays 0.3% fees on each swap.", + ProtocolRevenue: "Revenue going to the protocol. 5% of collected fees. (is probably right because the distribution is dynamic.)", + HoldersRevenue: "User fees are distributed among holders. 75% of collected fees. (is probably right because the distribution is dynamic.)", + SupplySideRevenue: "20% of collected fees are distributed among LPs. (is probably right because the distribution is dynamic.)" +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: async (options: FetchOptions) => { + const v1Results = await getDexFeesExports({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS,}) + const bribesResult = await getBribes(options); + v1Results.dailyBribesRevenue = bribesResult.dailyBribesRevenue; + + return v1Results; + }, + start: startTimeV2[CHAIN.ARBITRUM], + meta: { + methodology: { + ...methodology, + UserFees: "User pays 0.05%, 0.30%, or 1% on each swap.", + }, + }, + }, + }, +}; + +export default adapter; \ No newline at end of file From 11a1365998a9c382877722d26df08c92a5e6a006 Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Wed, 13 Mar 2024 01:00:03 +0000 Subject: [PATCH 0090/1590] delete old ramses --- fees/ramses-exchange.ts | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 fees/ramses-exchange.ts diff --git a/fees/ramses-exchange.ts b/fees/ramses-exchange.ts deleted file mode 100644 index 449455c6c0..0000000000 --- a/fees/ramses-exchange.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { SimpleAdapter } from "../adapters/types"; -import { CHAIN } from "../helpers/chains"; -import { getDexFeesExports } from "../helpers/dexVolumeLogs"; - -const FACTORY_ADDRESS = '0xaaa20d08e59f6561f242b08513d36266c5a29415'; - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch: getDexFeesExports({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS,}), - start: 1678838400, - }, - } -}; - -export default adapter; \ No newline at end of file From 99a3c1bc7cdc480a863ebaa514528f39acab7f5a Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 13 Mar 2024 01:22:54 +0000 Subject: [PATCH 0091/1590] maker fees fix --- fees/makerdao.ts | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/fees/makerdao.ts b/fees/makerdao.ts index ab46e2b4c4..f0e7fe52ef 100644 --- a/fees/makerdao.ts +++ b/fees/makerdao.ts @@ -1,12 +1,9 @@ import { Adapter } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainEndpoints } from "../adapters/types" +import type { ChainEndpoints, FetchOptions } from "../adapters/types" import { Chain } from '@defillama/sdk/build/general'; -import { getBlock } from "../helpers/getBlock"; -import { ChainBlocks } from "../adapters/types"; import BigNumber from "bignumber.js"; -import { getTimestampAtStartOfPreviousDayUTC, getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints = { [ETHEREUM]: @@ -28,21 +25,15 @@ const collateralYields = { const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number, chainBlocks: ChainBlocks) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp) - const yesterdaysTimestamp = getTimestampAtStartOfPreviousDayUTC(timestamp) - - const todaysBlock = (await getBlock(todaysTimestamp, chain, chainBlocks)); - const yesterdaysBlock = (await getBlock(yesterdaysTimestamp, chain, {})); - + return async ({getEndBlock, getStartBlock, startTimestamp, endTimestamp, toApi} : FetchOptions) => { const graphQuery = gql `query fees { - yesterday: collateralTypes(block: {number: ${yesterdaysBlock}}) { + yesterday: collateralTypes(block: {number: ${await getStartBlock()}}) { id totalDebt stabilityFee } - today: collateralTypes(block: {number: ${todaysBlock}}) { + today: collateralTypes(block: {number: ${await getEndBlock()}}) { id totalDebt stabilityFee @@ -51,7 +42,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const graphRes = await request(graphUrls[chain], graphQuery); - const secondsBetweenDates = todaysTimestamp - yesterdaysTimestamp; + const secondsBetweenDates = endTimestamp - startTimestamp; const todayDebts: { [id: string]: BigNumber } = {}; let dailyFee = new BigNumber(0) @@ -70,9 +61,14 @@ const graphs = (graphUrls: ChainEndpoints) => { dailyFee = dailyFee.plus(avgDebt.multipliedBy(accFees)) } } + const sparkSupplyAPR = await toApi.call({target: "0xC13e21B648A5Ee794902342038FF3aDAB66BE987", params: ["0x6B175474E89094C44Da98b954EedeAC495271d0F"], abi:{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"currentLiquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"currentVariableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"currentStableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"}],"internalType":"struct DataTypes.ReserveData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"}}) + const sparkSupply = await toApi.call({target: "0x4dedf26112b3ec8ec46e7e31ea5e123490b05b8b", params: ["0xAfA2DD8a0594B2B24B59de405Da9338C4Ce23437"], abi:"erc20:balanceOf"}) + const SECONDS_IN_YEAR = 365*24*60*60 + const sparkSupplyAPY = (sparkSupplyAPR.currentLiquidityRate/1e27 / SECONDS_IN_YEAR + 1)**(24*3600) - 1 + + dailyFee = dailyFee.plus(sparkSupplyAPY*sparkSupply/1e18) return { - timestamp, dailyFees: dailyFee.toString(), dailyRevenue: dailyFee.toString(), }; @@ -82,6 +78,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const adapter: Adapter = { + version: 2, adapter: { [ETHEREUM]: { fetch: graphs(endpoints)(ETHEREUM), From 49a5306a5e6e2bfe2be9f1055ebd355b030bd9d2 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 13 Mar 2024 02:30:53 +0000 Subject: [PATCH 0092/1590] try cal fees --- helpers/dexVolumeLogs.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/helpers/dexVolumeLogs.ts b/helpers/dexVolumeLogs.ts index c685be3a5d..1713544a3c 100644 --- a/helpers/dexVolumeLogs.ts +++ b/helpers/dexVolumeLogs.ts @@ -10,18 +10,34 @@ type getDexVolumeFeeParamsV3 = { chain: string, fromTimestamp: number, toTimesta type getDexVolumeExportsParams = { chain: string, factory?: string, pools?: string[], pairLengthAbi?: string, pairItemAbi?: string, } type getDexVolumeExportsParamsV3 = { chain: string, factory?: string, pools?: string[], factoryFromBlock?: number, swapEvent?: string, } +const statbleaAbi: any = { + "inputs": [], + "name": "stable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" +}; + export async function getDexVolume({ factory, timestamp, pools, fetchOptions, pairLengthAbi = 'allPairsLength', pairItemAbi = 'allPairs', swapEvent = _swapEvent }: getDexVolumeParams) { - const { api } = fetchOptions; + const { api, createBalances } = fetchOptions; if (!pools) pools = await api.fetchList({ lengthAbi: pairLengthAbi, itemAbi: pairItemAbi, target: factory! }) const token0s = await api.multiCall({ abi: 'address:token0', calls: pools! }) const token1s = await api.multiCall({ abi: 'address:token1', calls: pools! }) + const stables = await api.multiCall({ abi: statbleaAbi, calls: pools!, permitFailure: true }) const logs = await fetchOptions.getLogs({ targets: pools, eventAbi: swapEvent, flatten: false, }); + const dailyFees = createBalances(); logs.forEach((log: any[], index: number) => { const token0 = token0s[index] const token1 = token1s[index] @@ -31,10 +47,13 @@ export async function getDexVolume({ factory, timestamp, pools, fetchOptions, pa api.add(token0, i.amount0Out) // api.add(token1, i.amount1In) api.add(token1, i.amount1Out) + dailyFees.add(token0, Number(i.amount0In) * ((stables[index] ? 1 : 100) / 10000)) + dailyFees.add(token1, Number(i.amount1In) * ((stables[index] ? 1 : 100) / 10000)) }) }) return { timestamp, + dailyFees: dailyFees, dailyVolume: api.getBalancesV2(), } } From 55459be62395ba63cb7755e62cb587bb223aed96 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 13 Mar 2024 02:57:43 +0000 Subject: [PATCH 0093/1590] fix value --- options/aevo/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/options/aevo/index.ts b/options/aevo/index.ts index a747307653..7e66b4ae80 100644 --- a/options/aevo/index.ts +++ b/options/aevo/index.ts @@ -1,6 +1,7 @@ import { SimpleAdapter } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; +import { getTimestampAtStartOfNextDayUTC } from "../../utils/date"; interface IAevoVolumeResponse { daily_volume: string; @@ -27,7 +28,8 @@ export async function fetchAevoVolumeData( /** Timestamp representing the end of the 24 hour period */ timestamp: number ) { - const timestampInNanoSeconds = timestamp * 1e9 + const dayTimestamp = getTimestampAtStartOfNextDayUTC(timestamp); + const timestampInNanoSeconds = dayTimestamp * 1e9 const aevoVolumeData = await getAevoVolumeData(aevoVolumeEndpoint(timestampInNanoSeconds)); const dailyNotionalVolume = Number(aevoVolumeData.daily_volume).toFixed(2); From 16f2b4100a1d00c4dbc25b35d7e21dcf7ffeeacf Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 13 Mar 2024 08:07:25 +0000 Subject: [PATCH 0094/1590] wefi agg --- aggregators/wefi/index.ts | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 aggregators/wefi/index.ts diff --git a/aggregators/wefi/index.ts b/aggregators/wefi/index.ts new file mode 100644 index 0000000000..2743cdc60d --- /dev/null +++ b/aggregators/wefi/index.ts @@ -0,0 +1,44 @@ +import { FetchOptions, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const address = { + [CHAIN.LINEA]: '0x7e0da0deccac2e7b9ad06e378ee09c15b5bdeefa', + [CHAIN.XDC]: '0x7e0da0deccac2e7b9ad06e378ee09c15b5bdeefa', + [CHAIN.POLYGON]: '0xA42e5d2A738F83a1e1a907eB3aE031e5A768C085', +} + +const fetchVolume: FetchV2 = async (options: FetchOptions) => { + const logs = await options.getLogs({ + target: address[options.chain], + topics: ['0x83b12020cebd1d9ce669793959a6d6d48f26757609759d2bb7a45590a158c657'], + }) + const dailyVolume = options.createBalances(); + logs.forEach((log: any) => { + const data = log.data.replace('0x', '') + const amountOut = Number('0x' + data.slice(6 * 64, 7 * 64)) + const address = data.slice(4 * 64, 5 * 64); + const tokenOut = '0x' + address.slice(24, address.length); + dailyVolume.add(tokenOut, amountOut) + }); + return { + dailyVolume: dailyVolume, + } +} +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.LINEA]: { + fetch: fetchVolume, + start: 1685574000, + }, + [CHAIN.XDC]: { + fetch: fetchVolume, + start: 1685574000, + }, + [CHAIN.POLYGON]: { + fetch: fetchVolume, + start: 1685574000, + }, + } +} +export default adapter; From 7707ed41445b8ccd6e20b93bc0c30c78e8a1d24d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 13 Mar 2024 08:15:43 +0000 Subject: [PATCH 0095/1590] move to dexs --- {aggregators => dexs}/wefi/index.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {aggregators => dexs}/wefi/index.ts (100%) diff --git a/aggregators/wefi/index.ts b/dexs/wefi/index.ts similarity index 100% rename from aggregators/wefi/index.ts rename to dexs/wefi/index.ts From 307272c85a4dc211587152f611675654f23a0837 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 13 Mar 2024 08:25:41 +0000 Subject: [PATCH 0096/1590] fix start time --- dexs/wefi/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/wefi/index.ts b/dexs/wefi/index.ts index 2743cdc60d..88e1957f14 100644 --- a/dexs/wefi/index.ts +++ b/dexs/wefi/index.ts @@ -29,15 +29,15 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.LINEA]: { fetch: fetchVolume, - start: 1685574000, + start: 1704067200, }, [CHAIN.XDC]: { fetch: fetchVolume, - start: 1685574000, + start: 1704067200, }, [CHAIN.POLYGON]: { fetch: fetchVolume, - start: 1685574000, + start: 1704067200, }, } } From acc70efb363af685a61fa83dd8dd164b5af98a90 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 13 Mar 2024 08:26:57 +0000 Subject: [PATCH 0097/1590] fix type --- dexs/wefi/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/wefi/index.ts b/dexs/wefi/index.ts index 88e1957f14..028d88259c 100644 --- a/dexs/wefi/index.ts +++ b/dexs/wefi/index.ts @@ -1,7 +1,7 @@ import { FetchOptions, FetchV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const address = { +const address: any = { [CHAIN.LINEA]: '0x7e0da0deccac2e7b9ad06e378ee09c15b5bdeefa', [CHAIN.XDC]: '0x7e0da0deccac2e7b9ad06e378ee09c15b5bdeefa', [CHAIN.POLYGON]: '0xA42e5d2A738F83a1e1a907eB3aE031e5A768C085', From 3ce87d0cbc0c733c6a637a3c8d6e084433cb3c03 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 13 Mar 2024 08:27:57 +0000 Subject: [PATCH 0098/1590] polygon split --- dexs/bitkeep/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dexs/bitkeep/index.ts b/dexs/bitkeep/index.ts index 2135b6c0fd..69d128c593 100644 --- a/dexs/bitkeep/index.ts +++ b/dexs/bitkeep/index.ts @@ -39,10 +39,10 @@ const adapter: SimpleAdapter = { fetch: graph(CHAIN.ETHEREUM), start: 1667232000, }, - [CHAIN.POLYGON]: { - fetch: graph(CHAIN.POLYGON), - start: 1667232000, - }, + // [CHAIN.POLYGON]: { + // fetch: graph(CHAIN.POLYGON), + // start: 1667232000, + // }, [CHAIN.BSC]: { fetch: graph(CHAIN.BSC), start: 1667232000, From 9272a29bc1d11ee399884ad94add216137709028 Mon Sep 17 00:00:00 2001 From: slasher125 Date: Wed, 13 Mar 2024 16:23:51 +0400 Subject: [PATCH 0099/1590] eigenlayer test --- users/list.ts | 6 ++++-- users/other/addresses.ts | 15 +++++++++++++++ users/other/index.ts | 9 +++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 users/other/addresses.ts create mode 100644 users/other/index.ts diff --git a/users/list.ts b/users/list.ts index 6018988e1b..e3f10f2f54 100644 --- a/users/list.ts +++ b/users/list.ts @@ -2,8 +2,10 @@ import chains from "./chains" import routers from "./routers/uniswap-v2" import protocolAddresses from "./routers/routerAddresses"; import compoundV2, {addresses as compoundAddresses} from "./compound-v2"; +import other from "./other/index" +import protocolAddressesOther from "./other/addresses" import { ExtraProtocolAddresses } from "./utils/types"; -export default routers.concat(chains as any[]).concat(compoundV2 as any[]) +export default routers.concat(chains as any[]).concat(compoundV2 as any[]).concat(other as any[]) -export const addressList = (protocolAddresses as ExtraProtocolAddresses[]).concat(compoundAddresses) +export const addressList = (protocolAddresses as ExtraProtocolAddresses[]).concat(compoundAddresses).concat(protocolAddressesOther) \ No newline at end of file diff --git a/users/other/addresses.ts b/users/other/addresses.ts new file mode 100644 index 0000000000..0fd27e1d49 --- /dev/null +++ b/users/other/addresses.ts @@ -0,0 +1,15 @@ +import { isAddressesUsable } from "../utils/countUsers"; +import { ProtocolAddresses } from "../utils/types"; + +export default ([ + { + "id":"3107", + "name":"EigenLayer", + "addresses":{ + "ethereum":[ + "0x858646372cc42e1a627fce94aa7a7033e7cf075a" + ] + } + } +] as ProtocolAddresses[]).filter(isAddressesUsable) + diff --git a/users/other/index.ts b/users/other/index.ts new file mode 100644 index 0000000000..38fb5bb4ec --- /dev/null +++ b/users/other/index.ts @@ -0,0 +1,9 @@ +import addresses from "./addresses" +import { countUsers } from "../utils/countUsers"; + +export default addresses.map(project=>({ + name: project.name, + id: project.id, + addresses: project.addresses, + getUsers: countUsers(project.addresses as any) +})) From dc964f3bdb82f74862daaf8eacbc0903988fdad9 Mon Sep 17 00:00:00 2001 From: slasher125 Date: Wed, 13 Mar 2024 16:47:51 +0400 Subject: [PATCH 0100/1590] combine projects --- users/list.ts | 8 +++----- users/other/addresses.ts | 15 --------------- users/other/index.ts | 9 --------- users/routers/{uniswap-v2.ts => index.ts} | 0 users/routers/routerAddresses.ts | 9 +++++++++ 5 files changed, 12 insertions(+), 29 deletions(-) delete mode 100644 users/other/addresses.ts delete mode 100644 users/other/index.ts rename users/routers/{uniswap-v2.ts => index.ts} (100%) diff --git a/users/list.ts b/users/list.ts index e3f10f2f54..fa8de602f7 100644 --- a/users/list.ts +++ b/users/list.ts @@ -1,11 +1,9 @@ import chains from "./chains" -import routers from "./routers/uniswap-v2" +import routers from "./routers/index" import protocolAddresses from "./routers/routerAddresses"; import compoundV2, {addresses as compoundAddresses} from "./compound-v2"; -import other from "./other/index" -import protocolAddressesOther from "./other/addresses" import { ExtraProtocolAddresses } from "./utils/types"; -export default routers.concat(chains as any[]).concat(compoundV2 as any[]).concat(other as any[]) +export default routers.concat(chains as any[]).concat(compoundV2 as any[]) -export const addressList = (protocolAddresses as ExtraProtocolAddresses[]).concat(compoundAddresses).concat(protocolAddressesOther) \ No newline at end of file +export const addressList = (protocolAddresses as ExtraProtocolAddresses[]).concat(compoundAddresses) \ No newline at end of file diff --git a/users/other/addresses.ts b/users/other/addresses.ts deleted file mode 100644 index 0fd27e1d49..0000000000 --- a/users/other/addresses.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { isAddressesUsable } from "../utils/countUsers"; -import { ProtocolAddresses } from "../utils/types"; - -export default ([ - { - "id":"3107", - "name":"EigenLayer", - "addresses":{ - "ethereum":[ - "0x858646372cc42e1a627fce94aa7a7033e7cf075a" - ] - } - } -] as ProtocolAddresses[]).filter(isAddressesUsable) - diff --git a/users/other/index.ts b/users/other/index.ts deleted file mode 100644 index 38fb5bb4ec..0000000000 --- a/users/other/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import addresses from "./addresses" -import { countUsers } from "../utils/countUsers"; - -export default addresses.map(project=>({ - name: project.name, - id: project.id, - addresses: project.addresses, - getUsers: countUsers(project.addresses as any) -})) diff --git a/users/routers/uniswap-v2.ts b/users/routers/index.ts similarity index 100% rename from users/routers/uniswap-v2.ts rename to users/routers/index.ts diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index 99e9d778c7..c066cd3634 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -2828,5 +2828,14 @@ export default ([ ] } }, + { + "id":"3107", + "name":"EigenLayer", + "addresses":{ + "ethereum":[ + "0x858646372cc42e1a627fce94aa7a7033e7cf075a" + ] + } + } ] as ProtocolAddresses[]).filter(isAddressesUsable) From 32896e43b30944291e578a66f7e639f648b575d7 Mon Sep 17 00:00:00 2001 From: 0xR <0xr@metavault.org> Date: Wed, 13 Mar 2024 16:06:04 +0300 Subject: [PATCH 0101/1590] update metavault derivatives v2 chains --- dexs/metavault-derivatives-v2/index.ts | 28 ++++++++++--- fees/metavault-derivatives-v2/index.ts | 58 +++++++++++++++++--------- 2 files changed, 60 insertions(+), 26 deletions(-) diff --git a/dexs/metavault-derivatives-v2/index.ts b/dexs/metavault-derivatives-v2/index.ts index edcacf3514..88036e706b 100644 --- a/dexs/metavault-derivatives-v2/index.ts +++ b/dexs/metavault-derivatives-v2/index.ts @@ -1,9 +1,20 @@ -import { SimpleAdapter, FetchResultVolume } from "../../adapters/types"; +import { + SimpleAdapter, + FetchResultVolume, + ChainEndpoints, +} from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; +const endpoints: ChainEndpoints = { + [CHAIN.LINEA]: + "https://api.studio.thegraph.com/query/55804/linea-trade/version/latest", + [CHAIN.POLYGON]: + "https://api.thegraph.com/subgraphs/name/sdcrypt0/polygon-trade", +}; + interface IReferralRecord { volume: string; // Assuming volume is a string that represents a number timestamp: number; @@ -15,7 +26,7 @@ interface IVolumeStat { id: string; } -const fetch = () => { +const fetch = (endpoint) => { return async (timestamp: number): Promise => { const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); @@ -29,8 +40,6 @@ const fetch = () => { } `; - const endpoint = - "https://linea-graph-node.metavault.trade/subgraphs/name/metavault/perpv1"; const response = await request(endpoint, graphQuery); const volumeStats: IVolumeStat[] = response.volumeStats; @@ -57,8 +66,15 @@ const methodology = { const adapter: SimpleAdapter = { adapter: { [CHAIN.LINEA]: { - fetch: fetch(), - start: 1701950449, + fetch: fetch(endpoints[CHAIN.LINEA]), + start: 1709251200, + meta: { + methodology, + }, + }, + [CHAIN.POLYGON]: { + fetch: fetch(endpoints[CHAIN.POLYGON]), + start: 1709251200, meta: { methodology, }, diff --git a/fees/metavault-derivatives-v2/index.ts b/fees/metavault-derivatives-v2/index.ts index 2aac2caeac..deb312d289 100644 --- a/fees/metavault-derivatives-v2/index.ts +++ b/fees/metavault-derivatives-v2/index.ts @@ -6,18 +6,24 @@ import { CHAIN } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; -const endpoints = { +const endpoints: ChainEndpoints = { [CHAIN.LINEA]: - "https://linea-graph-node.metavault.trade/subgraphs/name/metavault/perpv1", + "https://api.studio.thegraph.com/query/55804/linea-trade/version/latest", + [CHAIN.POLYGON]: + "https://api.thegraph.com/subgraphs/name/sdcrypt0/polygon-trade", }; +interface IFeeStat { + cumulativeFeeUsd: string; + feeUsd: string; + id: string; +} -const graphs = (graphUrls: ChainEndpoints) => { - return (chain: Chain) => { - return async (timestamp: number) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const period = "daily"; +const fetch = (endpoint) => { + return async (timestamp: number) => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); + const period = "daily"; - const graphQuery = gql`{ + const graphQuery = gql`{ feeStats(where: {timestamp: ${todaysTimestamp}, period: "${period}"}) { id timestamp @@ -28,19 +34,24 @@ const graphs = (graphUrls: ChainEndpoints) => { } }`; - const graphRes = await request(graphUrls[chain], graphQuery); + const response = await request(endpoint, graphQuery); + const feeStats: IFeeStat[] = response.feeStats; - const dailyFee = parseInt(graphRes.feeStats[0].feeUsd); + let dailyFeeUSD = BigInt(0); + let totalFeeUSD = BigInt(0); - const finalDailyFee = dailyFee / 1e18; - const totalFees = parseInt(graphRes.feeStats[0].cumulativeFeeUsd) / 1e18; + feeStats.forEach((fee) => { + dailyFeeUSD += BigInt(fee.feeUsd); + totalFeeUSD += BigInt(fee.cumulativeFeeUsd); + }); - return { - timestamp, - dailyFees: finalDailyFee.toString(), - totalFees: totalFees.toString(), - //dailyRevenue: (finalDailyFee * 0.3).toString(), - }; + const finalDailyFee = parseInt(dailyFeeUSD.toString()) / 1e18; + const finalTotalFee = parseInt(totalFeeUSD.toString()) / 1e18; + + return { + timestamp: todaysTimestamp, + dailyFees: finalDailyFee.toString(), + totalFees: finalTotalFee.toString(), }; }; }; @@ -48,8 +59,15 @@ const graphs = (graphUrls: ChainEndpoints) => { const adapter: Adapter = { adapter: { [CHAIN.LINEA]: { - fetch: graphs(endpoints)(CHAIN.LINEA), - start: 1701950449, + fetch: fetch(endpoints[CHAIN.LINEA]), + start: 1709251200, + meta: { + methodology: "All treasuryFee, poolFee and keeperFee are collected", + }, + }, + [CHAIN.POLYGON]: { + fetch: fetch(endpoints[CHAIN.POLYGON]), + start: 1709251200, meta: { methodology: "All treasuryFee, poolFee and keeperFee are collected", }, From 548d04b63efa26373885d797c578b5b6bfc7e0e9 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 13 Mar 2024 13:35:19 +0000 Subject: [PATCH 0102/1590] fix url orca --- dexs/orca/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/orca/index.ts b/dexs/orca/index.ts index 219eb9aade..c82d735214 100644 --- a/dexs/orca/index.ts +++ b/dexs/orca/index.ts @@ -1,7 +1,7 @@ import { CHAIN } from '../../helpers/chains'; import { httpGet } from '../../utils/fetchURL'; -const wpEndpoint = "https://api.mainnet.orca.so/v1/whirlpool/list?whitelisted=true"; +const wpEndpoint = "https://api.mainnet.orca.so/v1/whirlpool/list"; async function fetch(timestamp: number) { const [whirlpools] = await Promise.all([httpGet(wpEndpoint)]); From 19e88a6d4e9aeba326bdc1a720d51715f8a114de Mon Sep 17 00:00:00 2001 From: seuchenhund <85159159+seuchenhund@users.noreply.github.com> Date: Wed, 13 Mar 2024 14:45:30 +0100 Subject: [PATCH 0103/1590] use univ2Adapter and proxy endpoint --- dexs/katana/index.ts | 91 +++++++------------------------------------- 1 file changed, 14 insertions(+), 77 deletions(-) diff --git a/dexs/katana/index.ts b/dexs/katana/index.ts index 87b5c71565..96026377b5 100644 --- a/dexs/katana/index.ts +++ b/dexs/katana/index.ts @@ -1,80 +1,17 @@ -import { SimpleAdapter } from "../../adapters/types"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; - -const { request, gql } = require("graphql-request"); const { RONIN } = require("../../helpers/chains"); -const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); -const { - getChainVolume, - DEFAULT_TOTAL_VOLUME_FIELD, - DEFAULT_DAILY_VOLUME_FIELD, -} = require("../../helpers/getUniSubgraphVolume"); - -const endpoints = { - [RONIN]: "https://thegraph-v2.roninchain.com/subgraphs/name/axieinfinity/katana-subgraph-blue", -}; - -const blocksGraph = - "https://thegraph-v2.roninchain.com/subgraphs/name/axieinfinity/ronin-blocks"; -const ONE_DAY_IN_SECONDS = 60 * 60 * 24 -const blockQuery = gql` - query blocks($timestampFrom: Int!, $timestampTo: Int!) { - blocks( - first: 1 - orderBy: timestamp - orderDirection: asc - where: { timestamp_gt: $timestampFrom, timestamp_lt: $timestampTo } - ) { - id - number - timestamp - __typename - } - } -`; - - -const getCustomBlock = async (timestamp: number) => { - - const timestampFrom = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - - const block = Number( - ( - await request(blocksGraph, blockQuery, { - timestampFrom, - timestampTo: timestampFrom + ONE_DAY_IN_SECONDS-1, - }) - ).blocks[0].number - ); - - return block; -}; - -const DAILY_VOLUME_FACTORY = "katanaDayData"; - -const graphs = getChainVolume({ - graphUrls: { - [RONIN]: endpoints[RONIN], - }, - totalVolume: { - factory: "katanaFactories", - field: DEFAULT_TOTAL_VOLUME_FIELD, - }, - dailyVolume: { - factory: DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - }, - getCustomBlock, +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +/* +use axiedao.org proxy, because public endpoint +https://thegraph-v2.roninchain.com/subgraphs/name/axieinfinity/katana-subgraph-blue +blocks requests from the DefiLlama server +*/ +const adpters = univ2Adapter({ + [RONIN]: "https://defillama.axiedao.org/graphql/katana" +}, { + factoriesName: "katanaFactories", + dayData: "katanaDayData", }); -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [RONIN]: { - fetch: graphs(RONIN), - start: 1635724800, - }, - }, -}; - -export default adapter; +adpters.adapter[RONIN].start = 1635724800; +export default adpters; \ No newline at end of file From d13a5dc26a53365159b323212aaf3c73e2ecc526 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 13 Mar 2024 16:31:36 +0000 Subject: [PATCH 0104/1590] fix run adapter --- adapters/utils/runAdapter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adapters/utils/runAdapter.ts b/adapters/utils/runAdapter.ts index 66074a4547..dc7092c8e4 100644 --- a/adapters/utils/runAdapter.ts +++ b/adapters/utils/runAdapter.ts @@ -63,7 +63,7 @@ export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurren const createBalances: () => Balances = () => { return new Balances({ timestamp: closeToCurrentTime ? undefined : timestamp, chain }) } - const toTimestamp = timestamp - 1 + const toTimestamp = timestamp const fromTimestamp = toTimestamp - ONE_DAY_IN_SECONDS const fromChainBlocks = {} const getFromBlock = async () => await getBlock(fromTimestamp, chain, fromChainBlocks) @@ -88,7 +88,7 @@ export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurren const api = new ChainApi({ chain, timestamp: withinTwoHours ? undefined : timestamp, block: toBlock }) const startOfDay = getUniqStartOfTodayTimestamp(new Date(toTimestamp * 1000)) const startTimestamp = fromTimestamp - const endTimestamp = toTimestamp + 1 + const endTimestamp = toTimestamp const getStartBlock = getFromBlock const getEndBlock = getToBlock const toApi = api From 10fd4afd5abaaf7dd2a174cae41f16b6ced6e971 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 13 Mar 2024 19:30:37 +0000 Subject: [PATCH 0105/1590] primordium fees --- fees/primordium.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 fees/primordium.ts diff --git a/fees/primordium.ts b/fees/primordium.ts new file mode 100644 index 0000000000..70b41ebe10 --- /dev/null +++ b/fees/primordium.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("3521814", { + start: options.startTimestamp, + end: options.endTimestamp + })); + dailyFees.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); + + return { dailyFees } + +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.SOLANA]: { + fetch: fetch, + start: 0, + }, + }, +}; + +export default adapter; From 7151afbc061e19b299a83eb1aa9a12a9238f6213 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Mar 2024 21:57:12 +0100 Subject: [PATCH 0106/1590] track omaxswap volume --- helpers/uniswap.ts | 4 ++-- package-lock.json | 6 +++--- protocols/omax-swap.ts | 7 +++++++ 3 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 protocols/omax-swap.ts diff --git a/helpers/uniswap.ts b/helpers/uniswap.ts index 7bd94d823c..b46f20a845 100644 --- a/helpers/uniswap.ts +++ b/helpers/uniswap.ts @@ -7,7 +7,7 @@ import { ethers } from "ethers"; export async function filterPools({ api, pairs, createBalances }: { api: ChainApi, pairs: IJSON, createBalances: any }): Promise> { const balanceCalls = Object.entries(pairs).map(([pair, tokens]) => tokens.map(i => ({ target: i, params: pair }))).flat() - const res = await api.multiCall({ abi: 'erc20:balanceOf', calls: balanceCalls }) + const res = await api.multiCall({ abi: 'erc20:balanceOf', calls: balanceCalls, permitFailure: true, }) const balances: Balances = createBalances() const pairBalances: IJSON = {} res.forEach((bal, i) => { @@ -15,7 +15,7 @@ export async function filterPools({ api, pairs, createBalances }: { api: ChainAp if (!pairBalances[balanceCalls[i].params]) { pairBalances[balanceCalls[i].params] = createBalances() } - pairBalances[balanceCalls[i].params].add(balanceCalls[i].target, bal) + pairBalances[balanceCalls[i].params].add(balanceCalls[i].target, bal ?? 0) }) // we do this to cache price results await balances.getUSDValue() diff --git a/package-lock.json b/package-lock.json index 12421cacd3..ecdf31342c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.38", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.38.tgz", - "integrity": "sha512-XhcqNwaKvbnXwcHO+oIUx5vcdP/PpkdtNHAPR7sdZ5vjnAvSQgSMCgSqH0qu0gvqiJgblULdqJ5rf77QSIAHgg==", + "version": "5.0.41", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.41.tgz", + "integrity": "sha512-53cAjD+P+gotPGLUMTRqbeL14HEe4zR/t6sYqOIHIKO9dHX6HkCpIgwkjGRoM+lUQwEEkH9QFhfLzeUCZ6+DVQ==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@supercharge/promise-pool": "^2.1.0", diff --git a/protocols/omax-swap.ts b/protocols/omax-swap.ts new file mode 100644 index 0000000000..09b3b08b2f --- /dev/null +++ b/protocols/omax-swap.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + omax: { + factory: '0x441b9333D1D1ccAd27f2755e69d24E60c9d8F9CF', + } +}) \ No newline at end of file From b725b040ac56689df2d324075082c839621121a7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Mar 2024 22:13:22 +0100 Subject: [PATCH 0107/1590] track mare finance v2 fees --- helpers/compoundV2.ts | 24 ++++++++++++++++++++++-- protocols/mare-finance-v2.ts | 5 +++++ 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 protocols/mare-finance-v2.ts diff --git a/helpers/compoundV2.ts b/helpers/compoundV2.ts index 5987040352..68c171dcaa 100644 --- a/helpers/compoundV2.ts +++ b/helpers/compoundV2.ts @@ -1,5 +1,5 @@ import ADDRESSES from './coreAssets.json' -import { Fetch, FetchOptions } from "../adapters/types"; +import { BaseAdapter, Fetch, FetchOptions, IJSON, SimpleAdapter } from "../adapters/types"; import * as sdk from "@defillama/sdk"; const comptrollerABI = { @@ -59,4 +59,24 @@ export function getFeesExport(market: string) { }) return { timestamp, dailyFees, dailyRevenue, dailyHoldersRevenue, dailySupplySideRevenue } }) as Fetch -} \ No newline at end of file +} + +export function compoundV2Export(config: IJSON) { + const exportObject: BaseAdapter = {} + Object.entries(config).map(([chain, market]) => { + exportObject[chain] = { + fetch: (async (options: FetchOptions) => { + const { dailyFees, dailyRevenue } = await getFees(market, options, {}) + const dailyHoldersRevenue = dailyRevenue + const dailySupplySideRevenue = options.createBalances() + dailySupplySideRevenue.addBalances(dailyFees) + Object.entries(dailyRevenue.getBalances()).forEach(([token, balance]) => { + dailySupplySideRevenue.addTokenVannila(token, Number(balance) * -1) + }) + return { dailyFees, dailyRevenue, dailyHoldersRevenue, dailySupplySideRevenue } + }) , + start: 0, + } + }) + return { adapter: exportObject, version: 2 } as SimpleAdapter +} diff --git a/protocols/mare-finance-v2.ts b/protocols/mare-finance-v2.ts new file mode 100644 index 0000000000..923812e8b0 --- /dev/null +++ b/protocols/mare-finance-v2.ts @@ -0,0 +1,5 @@ +import { compoundV2Export } from "../helpers/compoundV2" + +export default compoundV2Export({ + kava: "0xFcD7D41D5cfF03C7f6D573c9732B0506C72f5C72", +}) \ No newline at end of file From f2366f1f47875b047188f751a37719b460fa7988 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 13 Mar 2024 22:29:27 +0100 Subject: [PATCH 0108/1590] Add apertureSwap protocol implementation --- protocols/apertureSwap.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/apertureSwap.ts diff --git a/protocols/apertureSwap.ts b/protocols/apertureSwap.ts new file mode 100644 index 0000000000..515df56a44 --- /dev/null +++ b/protocols/apertureSwap.ts @@ -0,0 +1,7 @@ +import { uniV3Exports } from "../helpers/uniswap"; + +export default uniV3Exports({ + manta: { + factory: '0x5bd1F6735B80e58aAC88B8A94836854d3068a13a', + } +}) \ No newline at end of file From 23ae9368d937bf27b4446f9e12bc378bf513a00f Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 13 Mar 2024 22:13:39 +0000 Subject: [PATCH 0109/1590] expensive adapter --- fees/primordium.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/fees/primordium.ts b/fees/primordium.ts index 70b41ebe10..1d78f2e53a 100644 --- a/fees/primordium.ts +++ b/fees/primordium.ts @@ -22,6 +22,7 @@ const adapter: SimpleAdapter = { start: 0, }, }, + isExpensiveAdapter: true }; export default adapter; From f6ab7048c80e1cbbc0ec009b75c7ace25f02e84d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 14 Mar 2024 02:51:16 +0000 Subject: [PATCH 0110/1590] switch use globalStats --- dexs/hyperliquid/index.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/dexs/hyperliquid/index.ts b/dexs/hyperliquid/index.ts index 9c73b712b5..15a3d75259 100644 --- a/dexs/hyperliquid/index.ts +++ b/dexs/hyperliquid/index.ts @@ -10,15 +10,8 @@ interface Response { dailyVolume?: number; } -const url = (end_date: string) => `https://stats-api.hyperliquid.xyz/hyperliquid/daily_usd_volume?start_date=2023-06-14&end_date=${end_date}` const fetch = async (timestamp: number) => { - const nextData = timestamp + 86400; - const dateStr = new Date(nextData * 1000).toISOString().split('T')[0] - const data = (await httpGet(url(dateStr))).chart_data; - const toDate = new Date(timestamp * 1000).toISOString().split('T')[0]; - const dailyVolume = data.filter((item: any) => item.time.split('T')[0] === toDate) - .reduce((acc: number, item: any) => acc + item.daily_usd_volume, 0); - const {totalVolume}: Response = (await httpPost(URL, {"type": "globalStats"})); + const {totalVolume, dailyVolume}: Response = (await httpPost(URL, {"type": "globalStats"})); const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); return { From fa0a03dcaa61667ef54451b79412e436ab4772bc Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 14 Mar 2024 04:04:18 +0000 Subject: [PATCH 0111/1590] add symbol --- dexs/apex/index.ts | 48 ++++++++++++++++++---------------------------- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/dexs/apex/index.ts b/dexs/apex/index.ts index a1f3890cbc..d799379c53 100644 --- a/dexs/apex/index.ts +++ b/dexs/apex/index.ts @@ -3,7 +3,7 @@ import { SimpleAdapter, Fetch } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -const historicalVolumeEndpoint = (symbol: string, endTime: number) => `https://pro.apex.exchange/api/v1/klines?end=${endTime}&interval=D&start=1664928000&symbol=${symbol}&limit=100` +const historicalVolumeEndpoint = (symbol: string, endTime: number) => `https://pro.apex.exchange/api/v1/klines?end=${endTime}&interval=D&start=1708732800&symbol=${symbol}&limit=10` const allTiker = (symbol: string) => `https://pro.apex.exchange/api/v1/ticker?symbol=${symbol}` interface IVolumeall { id: string; @@ -12,34 +12,24 @@ interface IVolumeall { price: string; volumeUSD: number; } -const symbol: string[] = ['1000PEPEUSDC', -'APTUSDC', -'ARBUSDC', -'ATOMUSDC', -'AVAXUSDC', -'BCHUSDC', -'BLURUSDC', -'BNBUSDC', -'BTCUSDC', -'BTCUSDT', -'DOGEUSDC', -'DYDXUSDC', -'ETCUSDC', -'ETHUSDC', -'ETHUSDT', -'LBRUSDC', -'LDOUSDC', -'LINKUSDC', -'LTCUSDC', -'MATICUSDC', -'OPUSDC', -'ORDIUSDT', -'SOLUSDC', -'TIAUSDC', -'TONUSDC', -'WLDUSDC', -'XRPUSDC' -] +const symbol: string[] = [...new Set([ + '1000PEPEUSDC', 'APTUSDC', 'ARBUSDC', + 'ATOMUSDC', 'AVAXUSDC', 'BCHUSDC', + 'BLURUSDC', 'BNBUSDC', 'BTCUSDC', + 'BTCUSDT', 'DOGEUSDC', 'DYDXUSDC', + 'ETCUSDC', 'ETHUSDC', 'ETHUSDT', + 'LBRUSDC', 'LDOUSDC', 'LINKUSDC', + 'LTCUSDC', 'MATICUSDC', 'OPUSDC', + 'ORDIUSDT', 'SOLUSDC', 'TIAUSDC', + 'TONUSDC', 'WLDUSDC', 'XRPUSDC', + 'STXUSDT', 'BIGTIMEUSDT', 'MEMEUSDT', + 'PYTHUSDT', 'FETUSDT', 'RNDRUSDT', + 'ICPUSDT', '1000BONKUSDT', 'DOTUSDT', + 'SEIUSDT', 'INJUSDT', 'ENSUSDT', + '1000SATSUSDT', 'PENDLEUSDT', 'GMTUSDT', + 'MANTAUSDT', 'LINKUSDT', 'SOLUSDT', + 'MATICUSDT', 'STRKUSDT', ',SUIUSDT' +])] interface IOpenInterest { id: string; openInterest: string; From 252f769d40a6a4c9df613dbd996b43c8bad088f1 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 14 Mar 2024 04:10:33 +0000 Subject: [PATCH 0112/1590] add pharaoh v2 --- protocols/pharaoh-v2.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/pharaoh-v2.ts diff --git a/protocols/pharaoh-v2.ts b/protocols/pharaoh-v2.ts new file mode 100644 index 0000000000..69110e7854 --- /dev/null +++ b/protocols/pharaoh-v2.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + avax: { + factory: '0xAAA16c016BF556fcD620328f0759252E29b1AB57', + } +}) \ No newline at end of file From 83f6ddeceadeca424ddefa87307957949efe3583 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 14 Mar 2024 04:16:15 +0000 Subject: [PATCH 0113/1590] fix wrong symbol --- dexs/apex/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/apex/index.ts b/dexs/apex/index.ts index d799379c53..ebedc57580 100644 --- a/dexs/apex/index.ts +++ b/dexs/apex/index.ts @@ -28,7 +28,7 @@ const symbol: string[] = [...new Set([ 'SEIUSDT', 'INJUSDT', 'ENSUSDT', '1000SATSUSDT', 'PENDLEUSDT', 'GMTUSDT', 'MANTAUSDT', 'LINKUSDT', 'SOLUSDT', - 'MATICUSDT', 'STRKUSDT', ',SUIUSDT' + 'MATICUSDT', 'STRKUSDT', 'SUIUSDT' ])] interface IOpenInterest { id: string; From 7727ba0e975875f0f085808543fb29056d683dcc Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 14 Mar 2024 04:17:50 +0000 Subject: [PATCH 0114/1590] add cleopatra-v2 --- protocols/cleopatra-v2.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/cleopatra-v2.ts diff --git a/protocols/cleopatra-v2.ts b/protocols/cleopatra-v2.ts new file mode 100644 index 0000000000..a9b0d96935 --- /dev/null +++ b/protocols/cleopatra-v2.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + mantle: { + factory: '0xAAA16c016BF556fcD620328f0759252E29b1AB57', + } +}) \ No newline at end of file From 88618e8b25151b5b64541fbe0c626208a11a7db9 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 14 Mar 2024 04:22:03 +0000 Subject: [PATCH 0115/1590] add moraswap-v3 --- protocols/moraswap-v3 | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/moraswap-v3 diff --git a/protocols/moraswap-v3 b/protocols/moraswap-v3 new file mode 100644 index 0000000000..223844f8ed --- /dev/null +++ b/protocols/moraswap-v3 @@ -0,0 +1,7 @@ +import { uniV3Exports } from "../helpers/uniswap"; + +export default uniV3Exports({ + neon_evm: { + factory: '0x58122246F7e33669cde3486Dd72f95c2e886E375', + } +}) \ No newline at end of file From 33642e53db4d80f7370d9d4a8ad599f04e6e8d35 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 14 Mar 2024 04:24:20 +0000 Subject: [PATCH 0116/1590] add arthswap-v3 --- protocols/arthswap-v3.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 protocols/arthswap-v3.ts diff --git a/protocols/arthswap-v3.ts b/protocols/arthswap-v3.ts new file mode 100644 index 0000000000..360ad2833c --- /dev/null +++ b/protocols/arthswap-v3.ts @@ -0,0 +1,10 @@ +import { uniV3Exports } from "../helpers/uniswap"; + +export default uniV3Exports({ + astar: { + factory: '0x69E92b56e4BF4C0FFa2cFB087c7EA47E846a7244', + }, + astrzk: { + factory: '0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720', + } +}) \ No newline at end of file From 029d2501a40089ac72c28d0772cc61f4cf603c82 Mon Sep 17 00:00:00 2001 From: Slava Date: Wed, 13 Mar 2024 22:14:17 -0700 Subject: [PATCH 0117/1590] time fix --- dexs/orderly-network/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/orderly-network/index.ts b/dexs/orderly-network/index.ts index 3181fbb592..984aa335ba 100644 --- a/dexs/orderly-network/index.ts +++ b/dexs/orderly-network/index.ts @@ -29,7 +29,7 @@ const adapter: BreakdownAdapter = { const data = await httpGet(apiEVM) const cleanTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) return { - timestamp: timestamp, + timestamp: cleanTimestamp, dailyVolume: data.find((t:any)=>dateToTs(t.date) === cleanTimestamp)?.volume } } From 872283539163b812c3c2c0d21569473866c1a5e0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 14 Mar 2024 07:10:41 +0000 Subject: [PATCH 0118/1590] fix get diff total value --- dexs/balancer/index.ts | 3 +-- dexs/clipper/index.ts | 2 -- helpers/customBackfill.ts | 5 +++-- helpers/getUniSubgraphVolume.ts | 15 ++++++++++++++- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/dexs/balancer/index.ts b/dexs/balancer/index.ts index 422002420a..b363a07ed2 100644 --- a/dexs/balancer/index.ts +++ b/dexs/balancer/index.ts @@ -80,8 +80,7 @@ const adapter: BreakdownAdapter = { v1: { [CHAIN.ETHEREUM]: { fetch: v1graphs(CHAIN.ETHEREUM), - start: 1582761600, - customBackfill: customBackfill(CHAIN.ETHEREUM, v1graphs) + start: 1582761600 }, }, v2: Object.keys(endpoints).reduce((acc, chain) => { diff --git a/dexs/clipper/index.ts b/dexs/clipper/index.ts index cf50cae129..3fc78d5b04 100644 --- a/dexs/clipper/index.ts +++ b/dexs/clipper/index.ts @@ -1,7 +1,6 @@ import { Chain } from "@defillama/sdk/build/general"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import customBackfill from "../../helpers/customBackfill"; const { getChainVolume, } = require("../../helpers/getUniSubgraphVolume"); @@ -33,7 +32,6 @@ const adapter: SimpleAdapter = { [chain]: { fetch: graphs(chain as Chain), start: 1657437036, - customBackfill: customBackfill(chain, graphs), } } }, {}) diff --git a/helpers/customBackfill.ts b/helpers/customBackfill.ts index 77693c573c..9f1fab8096 100644 --- a/helpers/customBackfill.ts +++ b/helpers/customBackfill.ts @@ -11,8 +11,8 @@ export type IGraphs = (chain: Chain) => (options: FetchOptions|number, chainBloc export default (chain: Chain, graphs: any): Fetch|FetchV2 => async (options: FetchOptions|number, chainBlocks: ChainBlocks): Promise => { const fetchGetVolume = graphs(chain) - let resultPreviousDayN - let resultDayN + let resultPreviousDayN: any = {} + let resultDayN: any = {} if (typeof options == 'number') { resultDayN = await fetchGetVolume(options, chainBlocks) const timestampPreviousDay = options - ONE_DAY_IN_SECONDS @@ -22,6 +22,7 @@ export default (chain: Chain, graphs: any): Fetch|FetchV2 => async (options: Fet resultPreviousDayN = await fetchGetVolume(timestampPreviousDay, chainBlocksPreviousDay) } else { resultDayN = await fetchGetVolume(options) + options.endTimestamp = options.endTimestamp - ONE_DAY_IN_SECONDS; resultPreviousDayN = await fetchGetVolume(options) } const response: FetchResultGeneric = resultDayN diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index 83bdf60e0a..79aeb6aed7 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -94,7 +94,7 @@ function getChainVolume({ return (chain: Chain) => { return async (options: FetchOptions) => { - const { endTimestamp, getEndBlock } = options; + const { endTimestamp, getEndBlock, getFromBlock, getToBlock } = options; const customBlockFunc = getCustomBlock ? getCustomBlock : getEndBlock; const block = (await customBlockFunc(endTimestamp).catch((e: any) => console.log(wrapGraphError(e).message), @@ -126,6 +126,19 @@ function getChainVolume({ 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; } + 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}`) + } + } return { timestamp: endTimestamp, From 7b12ee567e378e2514fd38bc11b99f72d3f57987 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 14 Mar 2024 10:01:23 +0000 Subject: [PATCH 0119/1590] fix pass date --- aggregators/kanalabs/index.ts | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/aggregators/kanalabs/index.ts b/aggregators/kanalabs/index.ts index d5a0ecc7ba..4280717247 100644 --- a/aggregators/kanalabs/index.ts +++ b/aggregators/kanalabs/index.ts @@ -43,23 +43,14 @@ const fetch = (chain: KanaChainID) => async (timestamp: number) => { const fetchDerivatives = (chain: KanaChainID) => async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - try { - const data = await fetchURL( - `${TRADE_URL}?timestamp=${timestamp}&chainId=${chain}` - ); - return { - timestamp: dayTimestamp, - dailyVolume: data.today.volume, - totalVolume: data.totalVolume.volume, - }; - } catch (err) { - console.log(err); - return { - timestamp: dayTimestamp, - dailyVolume: "0", - totalVolume: "0", - }; - } + const data = await fetchURL( + `${TRADE_URL}?timestamp=${dayTimestamp}&chainId=${chain}` + ); + return { + timestamp: dayTimestamp, + dailyVolume: data.today.volume, + totalVolume: data.totalVolume.volume, + }; }; const startTimeBlock = 1695897800; From 570aea0e7e8d3d26ba463f5c4b49aa49b3396a63 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 14 Mar 2024 10:06:51 +0000 Subject: [PATCH 0120/1590] fix ci and service deployment --- aggregators/kanalabs/index.ts | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/aggregators/kanalabs/index.ts b/aggregators/kanalabs/index.ts index 4280717247..8b2acabc9a 100644 --- a/aggregators/kanalabs/index.ts +++ b/aggregators/kanalabs/index.ts @@ -22,23 +22,14 @@ export enum KanaChainID { const fetch = (chain: KanaChainID) => async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - try { - const data = await fetchURL( - `${URL}?timestamp=${timestamp}&chainId=${chain}` - ); - return { - timestamp: dayTimestamp, - dailyVolume: data.today.volume, - totalVolume: data.totalVolume.volume, - }; - } catch (err) { - console.log(err); - return { - timestamp: dayTimestamp, - dailyVolume: "0", - totalVolume: "0", - }; - } + const data = await fetchURL( + `${URL}?timestamp=${timestamp}&chainId=${chain}` + ); + return { + timestamp: dayTimestamp, + dailyVolume: data.today.volume, + totalVolume: data.totalVolume.volume, + }; }; const fetchDerivatives = (chain: KanaChainID) => async (timestamp: number) => { From 690ca4abfc3bc5fca6918a7bd68cbc5a92433c15 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 14 Mar 2024 10:24:46 +0000 Subject: [PATCH 0121/1590] fix adapter --- aggregators/kanalabs/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/aggregators/kanalabs/index.ts b/aggregators/kanalabs/index.ts index 8b2acabc9a..995f81255f 100644 --- a/aggregators/kanalabs/index.ts +++ b/aggregators/kanalabs/index.ts @@ -1,7 +1,7 @@ import fetchURL from "../../utils/fetchURL"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { getTimestampAtStartOfNextDayUTC } from "../../utils/date"; const URL = "https://stats.kanalabs.io/transaction/volume"; const TRADE_URL = "https://stats.kanalabs.io/trade/volume"; @@ -21,24 +21,24 @@ export enum KanaChainID { } const fetch = (chain: KanaChainID) => async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + const dayTimestamp = getTimestampAtStartOfNextDayUTC(timestamp); const data = await fetchURL( - `${URL}?timestamp=${timestamp}&chainId=${chain}` + `${URL}?timestamp=${dayTimestamp - 1}&chainId=${chain}` ); return { - timestamp: dayTimestamp, + timestamp: timestamp, dailyVolume: data.today.volume, totalVolume: data.totalVolume.volume, }; }; const fetchDerivatives = (chain: KanaChainID) => async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + const dayTimestamp = getTimestampAtStartOfNextDayUTC(timestamp); const data = await fetchURL( - `${TRADE_URL}?timestamp=${dayTimestamp}&chainId=${chain}` + `${TRADE_URL}?timestamp=${dayTimestamp - 1}&chainId=${chain}` ); return { - timestamp: dayTimestamp, + timestamp: timestamp, dailyVolume: data.today.volume, totalVolume: data.totalVolume.volume, }; From c61a96954770988a6d24938f35ac5ba0e23a2d47 Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Thu, 14 Mar 2024 13:31:17 +0000 Subject: [PATCH 0122/1590] Rename moraswap-v3 to moraswap-v3.ts --- protocols/{moraswap-v3 => moraswap-v3.ts} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename protocols/{moraswap-v3 => moraswap-v3.ts} (98%) diff --git a/protocols/moraswap-v3 b/protocols/moraswap-v3.ts similarity index 98% rename from protocols/moraswap-v3 rename to protocols/moraswap-v3.ts index 223844f8ed..9011475b04 100644 --- a/protocols/moraswap-v3 +++ b/protocols/moraswap-v3.ts @@ -4,4 +4,4 @@ export default uniV3Exports({ neon_evm: { factory: '0x58122246F7e33669cde3486Dd72f95c2e886E375', } -}) \ No newline at end of file +}) From 8a93db5244bed66c8bd86f11d08089e97db3fcc4 Mon Sep 17 00:00:00 2001 From: Timothy Date: Fri, 15 Mar 2024 01:31:46 +0800 Subject: [PATCH 0123/1590] aevo endpoint update timestamp --- dexs/aevo/index.ts | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/dexs/aevo/index.ts b/dexs/aevo/index.ts index 9e65e9aae0..b6a977de7c 100644 --- a/dexs/aevo/index.ts +++ b/dexs/aevo/index.ts @@ -1,7 +1,7 @@ import { SimpleAdapter } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphFees"; +import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../../utils/date"; interface IAevoVolumeResponse { daily_volume: string; @@ -10,14 +10,17 @@ interface IAevoVolumeResponse { // endTime is in nanoseconds export const aevoVolumeEndpoint = (endTime: number) => { - return "https://api.aevo.xyz/statistics?instrument_type=PERPETUAL&end_time=" + endTime; -} + return ( + "https://api.aevo.xyz/statistics?instrument_type=PERPETUAL&end_time=" + + endTime + ); +}; const adapter: SimpleAdapter = { adapter: { [CHAIN.ETHEREUM]: { fetch: fetchAevoVolumeData, - start: 1681430400 + start: 1681430400, }, }, }; @@ -26,8 +29,8 @@ export async function fetchAevoVolumeData( /** Timestamp representing the end of the 24 hour period */ timestamp: number ) { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const url = aevoVolumeEndpoint(dayTimestamp * 1e9) + const dayTimestamp = getTimestampAtStartOfDayUTC(timestamp); + const url = aevoVolumeEndpoint(dayTimestamp * 1e9); const aevoVolumeData = await getAevoVolumeData(url); const dailyVolume = Number(aevoVolumeData.daily_volume).toFixed(2); const totalVolume = Number(aevoVolumeData.total_volume).toFixed(2); @@ -39,8 +42,10 @@ export async function fetchAevoVolumeData( }; } -async function getAevoVolumeData(endpoint: string): Promise { - return (await fetchURL(endpoint)); +async function getAevoVolumeData( + endpoint: string +): Promise { + return await fetchURL(endpoint); } export default adapter; From 4954c3dec6d836cbf15d5c420a17ba20dd685ee9 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 14 Mar 2024 17:37:49 +0000 Subject: [PATCH 0124/1590] add blasterswap and infusion --- protocols/blasterswap.ts | 7 +++++++ protocols/infusion.ts | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 protocols/blasterswap.ts create mode 100644 protocols/infusion.ts diff --git a/protocols/blasterswap.ts b/protocols/blasterswap.ts new file mode 100644 index 0000000000..922652a0c2 --- /dev/null +++ b/protocols/blasterswap.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + blast: { + factory: '0x9CC1599D4378Ea41d444642D18AA9Be44f709ffD', + } +}) \ No newline at end of file diff --git a/protocols/infusion.ts b/protocols/infusion.ts new file mode 100644 index 0000000000..bf9540c161 --- /dev/null +++ b/protocols/infusion.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + base: { + factory: '0x2D9A3a2bd6400eE28d770c7254cA840c82faf23f', + } +}) \ No newline at end of file From ed6b68b86964436e7afd0bd874a736d16dd1207e Mon Sep 17 00:00:00 2001 From: bitcoincashautist <80100588+A60AB5450353F40E@users.noreply.github.com> Date: Thu, 14 Mar 2024 22:38:02 +0100 Subject: [PATCH 0125/1590] Add AnyHedge Volume --- derivatives/anyhedge/index.ts | 80 +++++++++++++++++++++++++++++++++++ helpers/chains.ts | 1 + 2 files changed, 81 insertions(+) create mode 100644 derivatives/anyhedge/index.ts diff --git a/derivatives/anyhedge/index.ts b/derivatives/anyhedge/index.ts new file mode 100644 index 0000000000..46d849eb4e --- /dev/null +++ b/derivatives/anyhedge/index.ts @@ -0,0 +1,80 @@ +import { SimpleAdapter } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; +import { getTimestampAtStartOfNextDayUTC } from "../../utils/date"; + +const methodology = { + DailyVolume: "Scan the blockchain for AnyHedge input pattern, add up all such inputs BCH value. The daily volume is the volume of all settled contracts for the day." +} + +interface IAnyhedgeVolumeResponse { + daily_volume: number; + total_volume: number; +} + +// endDay formatted as 2011-12-13 +export const anyhedgeVolumeEndpoint = (endDay: string) => { + // Data & calculation method is fully reproducible, see: + // https://gitlab.com/0353F40E/anyhedge-stats/-/blob/master/readme.md + return "https://gitlab.com/0353F40E/anyhedge-stats/-/raw/master/stats_daily/" + endDay + ".csv"; +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.BITCOIN_CASH]: { + fetch: fetchAnyhedgeVolumeData, + start: 1654787405, + meta: { + methodology + } + }, + }, +}; + +export async function fetchAnyhedgeVolumeData( + /** Timestamp representing the end of the 24 hour period */ + timestamp: number +) { + const dayString = new Date(timestamp * 1000).toISOString().slice(0,10); + const anyhedgeVolumeData = await getAnyhedgeVolumeData(anyhedgeVolumeEndpoint(dayString)); + console.log(anyhedgeVolumeData); + + const dailyVolume = Number(anyhedgeVolumeData.daily_volume); + const totalVolume = Number(anyhedgeVolumeData.total_volume); + + return { + timestamp, + dailyVolume, + totalVolume, + }; +} + +async function getAnyhedgeVolumeData(endpoint: string): Promise { + try { + let data = await fetchURL(endpoint); + data = parseCSV(data); + let retval: IAnyhedgeVolumeResponse = {}; + retval.daily_volume = data[0].volume_closed; + retval.total_volume = data[0].volume_closed_cumulative; + return retval; + } catch { + return null; + } +} + +function parseCSV(csvData) { + csvData = csvData.replaceAll('\r', '').split('\n').map(i => i.split(',')) + const headers = csvData.shift() + const retval = csvData.map(row => toObject(headers, row)); + return retval; +} + +function toObject(keys, values) { + const res = {} + keys.forEach((key, i) => { + res[key] = values[i] + }) + return res +} + +export default adapter; diff --git a/helpers/chains.ts b/helpers/chains.ts index 96b154afbf..0dd98447f6 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -26,6 +26,7 @@ export enum CHAIN { CARDANO = "cardano", LITECOIN = "litecoin", BITCOIN = "bitcoin", + BITCOIN_CASH = "bitcoin_cash", DOGECHAIN = "dogechain", ENERGI = "energi", VELAS = "velas", From 01c9d0b2fe35d77b7830fa80ebeca9e22551b3b0 Mon Sep 17 00:00:00 2001 From: Lemon Date: Fri, 15 Mar 2024 01:44:21 +0100 Subject: [PATCH 0126/1590] integration: Core markets & IntentX blast migration --- dexs/core-markets/index.ts | 90 ++++++++++++++++++++++++++++ dexs/intent-x/index.tsx | 69 +++++++++++++--------- fees/core-markets/index.ts | 116 +++++++++++++++++++++++++++++++++++++ fees/intent-x/index.tsx | 70 ++++++++++++---------- 4 files changed, 288 insertions(+), 57 deletions(-) create mode 100644 dexs/core-markets/index.ts create mode 100644 fees/core-markets/index.ts diff --git a/dexs/core-markets/index.ts b/dexs/core-markets/index.ts new file mode 100644 index 0000000000..eb7141a799 --- /dev/null +++ b/dexs/core-markets/index.ts @@ -0,0 +1,90 @@ +import BigNumber from "bignumber.js"; +import request, { gql } from "graphql-request"; +import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const ONE_DAY_IN_SECONDS = 60 * 60 * 24; + +const endpoint = "https://api.studio.thegraph.com/query/62472/core-analytics-082/version/latest"; + +const query = gql` + query stats($from: String!, $to: String!) { + dailyHistories( + where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0xd6ee1fd75d11989e57B57AA6Fd75f558fBf02a5e" } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + totalHistories(where: { accountSource: "0xd6ee1fd75d11989e57B57AA6Fd75f558fBf02a5e" }) { + timestamp + platformFee + accountSource + tradeVolume + } + } +`; + +interface IGraphResponse { + dailyHistories: Array<{ + tiemstamp: string; + platformFee: string; + accountSource: string; + tradeVolume: string; + }>; + totalHistories: Array<{ + tiemstamp: string; + platformFee: string; + accountSource: string; + tradeVolume: BigNumber; + }>; +} + +const toString = (x: BigNumber) => { + if (x.isEqualTo(0)) return undefined; + return x.toString(); +}; + +const fetchVolume = async (timestamp: number): Promise => { + const response: IGraphResponse = await request(endpoint, query, { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + }); + + let dailyVolume = new BigNumber(0); + response.dailyHistories.forEach((data) => { + dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); + }); + + let totalVolume = new BigNumber(0); + response.totalHistories.forEach((data) => { + totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); + }); + + dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); + totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); + + const _dailyVolume = toString(dailyVolume); + const _totalVolume = toString(totalVolume); + + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + + return { + timestamp: dayTimestamp, + dailyVolume: _dailyVolume ?? "0", + totalVolume: _totalVolume ?? "0", + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.BASE]: { + fetch: fetchVolume, + start: async () => 236678, + }, + }, +}; + +export default adapter; diff --git a/dexs/intent-x/index.tsx b/dexs/intent-x/index.tsx index 65b731c602..f3f990c8ca 100644 --- a/dexs/intent-x/index.tsx +++ b/dexs/intent-x/index.tsx @@ -1,33 +1,26 @@ +import BigNumber from "bignumber.js"; import request, { gql } from "graphql-request"; import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import BigNumber from "bignumber.js"; 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"; -const endpoint = - "https://api.studio.thegraph.com/query/62472/intentx-analytics_082/version/latest"; +const endpoint_0_8_0 = "https://api.thegraph.com/subgraphs/name/intent-x/perpetuals-analytics_base"; +const endpoint = "https://api.studio.thegraph.com/query/62472/intentx-analytics_082/version/latest"; +const endpoint_blast = "https://api.studio.thegraph.com/query/62472/intentx-analytics_082_blast/version/latest"; const query_0_8_0 = gql` query stats($from: String!, $to: String!) { dailyHistories( - where: { - timestamp_gte: $from - timestamp_lte: $to - accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" - } + where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" } ) { timestamp platformFee accountSource tradeVolume } - totalHistories( - where: { accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" } - ) { + totalHistories(where: { accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" }) { timestamp platformFee accountSource @@ -39,25 +32,38 @@ const query_0_8_0 = gql` const query = gql` query stats($from: String!, $to: String!) { dailyHistories( - where: { - timestamp_gte: $from - timestamp_lte: $to - accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" - } + where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" } ) { timestamp platformFee accountSource tradeVolume } - totalHistories( - where: { accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" } + totalHistories(where: { accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" }) { + timestamp + platformFee + accountSource + tradeVolume + } + } +`; + +const queryBlast = gql` + query stats($from: String!, $to: String!) { + dailyHistories( + where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" } ) { timestamp platformFee accountSource tradeVolume } + totalHistories(where: { accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" }) { + timestamp + platformFee + accountSource + tradeVolume + } } `; @@ -82,18 +88,18 @@ const toString = (x: BigNumber) => { }; const fetchVolume = async (timestamp: number): Promise => { - const response_0_8_0: IGraphResponse = await request( - endpoint_0_8_0, - query_0_8_0, - { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), - } - ); + const response_0_8_0: IGraphResponse = await request(endpoint_0_8_0, query_0_8_0, { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + }); const response: IGraphResponse = await request(endpoint, query, { from: String(timestamp - ONE_DAY_IN_SECONDS), to: String(timestamp), }); + const response_blast: IGraphResponse = await request(endpoint_blast, queryBlast, { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + }); let dailyVolume = new BigNumber(0); response_0_8_0.dailyHistories.forEach((data) => { @@ -102,6 +108,10 @@ const fetchVolume = async (timestamp: number): Promise => { response.dailyHistories.forEach((data) => { dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); }); + response_blast.dailyHistories.forEach((data) => { + dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); + }); + let totalVolume = new BigNumber(0); response_0_8_0.totalHistories.forEach((data) => { @@ -110,6 +120,9 @@ const fetchVolume = async (timestamp: number): Promise => { response.totalHistories.forEach((data) => { totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); }); + response_blast.totalHistories.forEach((data) => { + totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); + }); dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); diff --git a/fees/core-markets/index.ts b/fees/core-markets/index.ts new file mode 100644 index 0000000000..ebd5f738fc --- /dev/null +++ b/fees/core-markets/index.ts @@ -0,0 +1,116 @@ +import BigNumber from "bignumber.js"; +import request, { gql } from "graphql-request"; +import { FetchResultFees, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const ONE_DAY_IN_SECONDS = 60 * 60 * 24; + + +const endpoint = "https://api.studio.thegraph.com/query/62472/core-analytics-082/version/latest"; + +const query = gql` + query stats($from: String!, $to: String!) { + dailyHistories( + where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0xd6ee1fd75d11989e57B57AA6Fd75f558fBf02a5e" } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + totalHistories(where: { accountSource: "0xd6ee1fd75d11989e57B57AA6Fd75f558fBf02a5e" }) { + timestamp + platformFee + accountSource + tradeVolume + } + } +`; + +interface IGraphResponse { + dailyHistories: Array<{ + tiemstamp: string; + platformFee: string; + accountSource: string; + tradeVolume: string; + }>; + totalHistories: Array<{ + tiemstamp: string; + platformFee: string; + accountSource: string; + tradeVolume: BigNumber; + }>; +} + +const toString = (x: BigNumber) => { + if (x.isEqualTo(0)) return undefined; + return x.toString(); +}; + +const fetchVolume = async (timestamp: number): Promise => { + + const response: IGraphResponse = await request(endpoint, query, { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + }); + + // Merging both responses + let dailyFees = new BigNumber(0); + + response.dailyHistories.forEach((data) => { + dailyFees = dailyFees.plus(new BigNumber(data.platformFee)); + }); + + let totalFees = new BigNumber(0); + + response.totalHistories.forEach((data) => { + totalFees = totalFees.plus(new BigNumber(data.platformFee)); + }); + + dailyFees = dailyFees.dividedBy(new BigNumber(1e18)); + totalFees = totalFees.dividedBy(new BigNumber(1e18)); + + const _dailyFees = toString(dailyFees); + const _totalFees = toString(totalFees); + + const dailyUserFees = _dailyFees; + const dailyRevenue = _dailyFees; + const dailyProtocolRevenue = "0"; + const dailyHoldersRevenue = _dailyFees; + const dailySupplySideRevenue = "0"; + + const totalUserFees = _totalFees; + const totalRevenue = _totalFees; + const totalProtocolRevenue = "0"; + const totalSupplySideRevenue = "0"; + + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + + return { + timestamp: dayTimestamp, + + dailyFees: _dailyFees ?? "0", + totalFees: _totalFees ?? "0", + + dailyUserFees: dailyUserFees ?? "0", + dailyRevenue: dailyRevenue ?? "0", + dailyProtocolRevenue: dailyProtocolRevenue ?? "0", + dailyHoldersRevenue: dailyHoldersRevenue ?? "0", + dailySupplySideRevenue: dailySupplySideRevenue ?? "0", + totalUserFees: totalUserFees ?? "0", + totalRevenue: totalRevenue ?? "0", + totalProtocolRevenue: totalProtocolRevenue ?? "0", + totalSupplySideRevenue: totalSupplySideRevenue ?? "0", + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.BASE]: { + fetch: fetchVolume, + start: async () => 236678, + }, + }, +}; +export default adapter; diff --git a/fees/intent-x/index.tsx b/fees/intent-x/index.tsx index 999a278c6f..6eae65f6f0 100644 --- a/fees/intent-x/index.tsx +++ b/fees/intent-x/index.tsx @@ -1,33 +1,26 @@ +import BigNumber from "bignumber.js"; import request, { gql } from "graphql-request"; +import { FetchResultFees, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import BigNumber from "bignumber.js"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import { FetchResultFees, SimpleAdapter } from "../../adapters/types"; const ONE_DAY_IN_SECONDS = 60 * 60 * 24; -const endpoint_0_8_0 = - "https://api.thegraph.com/subgraphs/name/intent-x/perpetuals-analytics_base"; -const endpoint = - "https://api.studio.thegraph.com/query/62472/intentx-analytics_082/version/latest"; +const endpoint_0_8_0 = "https://api.thegraph.com/subgraphs/name/intent-x/perpetuals-analytics_base"; +const endpoint = "https://api.studio.thegraph.com/query/62472/intentx-analytics_082/version/latest"; +const endpoint_blast = "https://api.studio.thegraph.com/query/62472/intentx-analytics_082_blast/version/latest"; const query_0_8_0 = gql` query stats($from: String!, $to: String!) { dailyHistories( - where: { - timestamp_gte: $from - timestamp_lte: $to - accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" - } + where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" } ) { timestamp platformFee accountSource tradeVolume } - totalHistories( - where: { accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" } - ) { + totalHistories(where: { accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" }) { timestamp platformFee accountSource @@ -39,25 +32,38 @@ const query_0_8_0 = gql` const query = gql` query stats($from: String!, $to: String!) { dailyHistories( - where: { - timestamp_gte: $from - timestamp_lte: $to - accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" - } + where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" } ) { timestamp platformFee accountSource tradeVolume } - totalHistories( - where: { accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" } + totalHistories(where: { accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" }) { + timestamp + platformFee + accountSource + tradeVolume + } + } +`; + +const queryBlast = gql` + query stats($from: String!, $to: String!) { + dailyHistories( + where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" } ) { timestamp platformFee accountSource tradeVolume } + totalHistories(where: { accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" }) { + timestamp + platformFee + accountSource + tradeVolume + } } `; @@ -82,18 +88,18 @@ const toString = (x: BigNumber) => { }; const fetchVolume = async (timestamp: number): Promise => { - const response_0_8_0: IGraphResponse = await request( - endpoint_0_8_0, - query_0_8_0, - { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), - } - ); + const response_0_8_0: IGraphResponse = await request(endpoint_0_8_0, query_0_8_0, { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + }); const response: IGraphResponse = await request(endpoint, query, { from: String(timestamp - ONE_DAY_IN_SECONDS), to: String(timestamp), }); + const response_blast: IGraphResponse = await request(endpoint_blast, queryBlast, { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + }); // Merging both responses let dailyFees = new BigNumber(0); @@ -103,6 +109,9 @@ const fetchVolume = async (timestamp: number): Promise => { response.dailyHistories.forEach((data) => { dailyFees = dailyFees.plus(new BigNumber(data.platformFee)); }); + response_blast.dailyHistories.forEach((data) => { + dailyFees = dailyFees.plus(new BigNumber(data.platformFee)); + }); let totalFees = new BigNumber(0); response_0_8_0.totalHistories.forEach((data) => { @@ -111,6 +120,9 @@ const fetchVolume = async (timestamp: number): Promise => { response.totalHistories.forEach((data) => { totalFees = totalFees.plus(new BigNumber(data.platformFee)); }); + response_blast.totalHistories.forEach((data) => { + totalFees = totalFees.plus(new BigNumber(data.platformFee)); + }); dailyFees = dailyFees.dividedBy(new BigNumber(1e18)); totalFees = totalFees.dividedBy(new BigNumber(1e18)); From 2fc7611081583325f08e25f6229a7039f62725cc Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 15 Mar 2024 04:31:57 +0000 Subject: [PATCH 0127/1590] fix sns query --- fees/sns.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fees/sns.ts b/fees/sns.ts index a044eeb41f..52fd9467e9 100644 --- a/fees/sns.ts +++ b/fees/sns.ts @@ -1,6 +1,6 @@ import { Adapter, FetchResultFees } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getTimestampAtStartOfDayUTC } from "../utils/date"; +import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../utils/date"; import { httpGet } from "../utils/fetchURL"; const API_URL = "https://sns-api.bonfida.com/v2/defilama/fees-adapter"; @@ -11,9 +11,9 @@ interface IData { } const fetch = async (timestamp: number): Promise => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); - - const url = `${API_URL}?from=${todaysTimestamp}&to=${timestamp}`; + const todaysTimestamp = getTimestampAtStartOfNextDayUTC(timestamp); + const fromTimestamp = getTimestampAtStartOfDayUTC(timestamp); + const url = `${API_URL}?from=${fromTimestamp}&to=${todaysTimestamp-1}`; const data: IData = await httpGet(url); return { timestamp: todaysTimestamp, From e07b47a6e11397cbc7fc4f47afe166806395da78 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 15 Mar 2024 04:47:07 +0000 Subject: [PATCH 0128/1590] disable kava and metis wagmi --- dexs/wagmi/index.ts | 16 ++++++++-------- fees/wagmi/index.ts | 28 ++++++++++++++-------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/dexs/wagmi/index.ts b/dexs/wagmi/index.ts index 56881a4f23..c312becf06 100644 --- a/dexs/wagmi/index.ts +++ b/dexs/wagmi/index.ts @@ -16,14 +16,14 @@ const adapter: SimpleAdapter = { fetch: fetchVolume(CHAIN.ETHEREUM), start: 18240112, }, - [CHAIN.METIS]: { - fetch: fetchVolume(CHAIN.METIS), - start: 1702888970, - }, - [CHAIN.KAVA]: { - fetch: fetchVolume(CHAIN.KAVA), - start: 1694476800, - }, + // [CHAIN.METIS]: { + // fetch: fetchVolume(CHAIN.METIS), + // start: 1702888970, + // }, + // [CHAIN.KAVA]: { + // fetch: fetchVolume(CHAIN.KAVA), + // start: 1694476800, + // }, }, }; // diff --git a/fees/wagmi/index.ts b/fees/wagmi/index.ts index 3118294b9e..46e8b58e27 100644 --- a/fees/wagmi/index.ts +++ b/fees/wagmi/index.ts @@ -26,13 +26,13 @@ const adapter: SimpleAdapter = { methodology, }, }, - [CHAIN.KAVA]: { - fetch: fetchFee(CHAIN.KAVA), - start: 1694476800, - meta: { - methodology, - }, - }, + // [CHAIN.KAVA]: { + // fetch: fetchFee(CHAIN.KAVA), + // start: 1694476800, + // meta: { + // methodology, + // }, + // }, [CHAIN.ETHEREUM]: { fetch: fetchFee(CHAIN.ETHEREUM), start: 18240112, @@ -40,13 +40,13 @@ const adapter: SimpleAdapter = { methodology, }, }, - [CHAIN.METIS]: { - fetch: fetchFee(CHAIN.METIS), - start: 1702888970, - meta: { - methodology, - }, - }, + // [CHAIN.METIS]: { + // fetch: fetchFee(CHAIN.METIS), + // start: 1702888970, + // meta: { + // methodology, + // }, + // }, }, }; From f863b8a0362e2200d674de5ec42c52c190421e8b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 15 Mar 2024 05:17:05 +0000 Subject: [PATCH 0129/1590] fix query alternative volume --- helpers/getUniSubgraph/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 986da8c001..6a10e2aa29 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -3,7 +3,7 @@ import { request, gql } from "graphql-request"; 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 { getUniswapDateId, handle200Errors } from "./utils"; +import { getUniqStartOfTodayTimestamp, getUniswapDateId, handle200Errors } from "./utils"; import { getStartTimestamp } from "../getStartTimestamp"; const DEFAULT_TOTAL_VOLUME_FACTORY = "uniswapFactories"; @@ -234,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: endTimestamp }, 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); } From 601364e899dc6def75aa39819c8eb20130ef8783 Mon Sep 17 00:00:00 2001 From: bitcoincashautist <80100588+A60AB5450353F40E@users.noreply.github.com> Date: Fri, 15 Mar 2024 07:04:11 +0100 Subject: [PATCH 0130/1590] remove debug msg --- derivatives/anyhedge/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/derivatives/anyhedge/index.ts b/derivatives/anyhedge/index.ts index 46d849eb4e..21b01a1eb6 100644 --- a/derivatives/anyhedge/index.ts +++ b/derivatives/anyhedge/index.ts @@ -37,7 +37,6 @@ export async function fetchAnyhedgeVolumeData( ) { const dayString = new Date(timestamp * 1000).toISOString().slice(0,10); const anyhedgeVolumeData = await getAnyhedgeVolumeData(anyhedgeVolumeEndpoint(dayString)); - console.log(anyhedgeVolumeData); const dailyVolume = Number(anyhedgeVolumeData.daily_volume); const totalVolume = Number(anyhedgeVolumeData.total_volume); From 9578f70f59ea08bea70540c8b63613c29ef83b37 Mon Sep 17 00:00:00 2001 From: dtmkeng <0xgnek@gmail.com> Date: Fri, 15 Mar 2024 14:56:56 +0700 Subject: [PATCH 0131/1590] Revert "aevo endpoint update timestamp" --- dexs/aevo/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/aevo/index.ts b/dexs/aevo/index.ts index 69676d511f..0d1da14c3c 100644 --- a/dexs/aevo/index.ts +++ b/dexs/aevo/index.ts @@ -1,7 +1,7 @@ import { SimpleAdapter } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; +import { getTimestampAtStartOfNextDayUTC } from "../../utils/date"; interface IAevoVolumeResponse { daily_volume: string; @@ -29,7 +29,7 @@ export async function fetchAevoVolumeData( /** Timestamp representing the end of the 24 hour period */ timestamp: number ) { - const dayTimestamp = getTimestampAtStartOfDayUTC(timestamp); + const dayTimestamp = getTimestampAtStartOfNextDayUTC(timestamp); const url = aevoVolumeEndpoint(dayTimestamp * 1e9); const aevoVolumeData = await getAevoVolumeData(url); const dailyVolume = Number(aevoVolumeData.daily_volume).toFixed(2); From e92dacd68e2ab1811bb89fe9e9805ceb89b2309f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 15 Mar 2024 08:02:02 +0000 Subject: [PATCH 0132/1590] add new wallet ethena --- fees/ethena.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/ethena.ts b/fees/ethena.ts index 5d15fa65d4..b2df7fb0bd 100644 --- a/fees/ethena.ts +++ b/fees/ethena.ts @@ -17,7 +17,7 @@ const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) = WHERE block_number > 18637861 AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' - AND topic_2 = '\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87' + AND topic_2 in ('\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87', '\\x000000000000000000000000f2fa332bd83149c66b09b45670bce64746c6b439') AND block_time BETWEEN llama_replace_date_range; `, options); const dailyFeesInflow = options.createBalances(); From fb5e115345ba5a70f16455ced014ad9afa1a5a21 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 15 Mar 2024 10:53:22 +0000 Subject: [PATCH 0133/1590] fix query --- dexs/synfutures-v3/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dexs/synfutures-v3/index.ts b/dexs/synfutures-v3/index.ts index b723b1d4a2..7b85cbe806 100644 --- a/dexs/synfutures-v3/index.ts +++ b/dexs/synfutures-v3/index.ts @@ -2,6 +2,7 @@ import request from "graphql-request"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../../utils/date"; const info: { [key: string]: any } = { [CHAIN.BLAST]: { @@ -13,10 +14,11 @@ const fetch = (chain: Chain) => { return async ( timestamp: number, _: ChainBlocks, - { createBalances, startTimestamp, endTimestamp, startOfDay }: FetchOptions + { createBalances, startOfDay }: FetchOptions ) => { const dailyVolume = createBalances(); - + const to = getTimestampAtStartOfNextDayUTC(timestamp) + const from = getTimestampAtStartOfDayUTC(timestamp) const graphQL = `{ amms(where: {status_in: [TRADING, SETTLING]}) { instrument { @@ -24,7 +26,7 @@ const fetch = (chain: Chain) => { id } } - hourlyDataList(where: {timestamp_gte: ${startTimestamp}, timestamp_lt: ${endTimestamp}}, orderBy: timestamp, orderDirection: desc) { + hourlyDataList(where: {timestamp_gte: ${from}, timestamp_lte: ${to - 1}}, orderBy: timestamp, orderDirection: desc) { volume } } From ff716a5f9d041d29d420aa0d0b26bfc831302e7f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 15 Mar 2024 12:49:33 +0100 Subject: [PATCH 0134/1590] Update Uniswap and @defillama/sdk dependencies --- helpers/uniswap.ts | 5 ++--- package-lock.json | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/helpers/uniswap.ts b/helpers/uniswap.ts index b46f20a845..eec7f56f29 100644 --- a/helpers/uniswap.ts +++ b/helpers/uniswap.ts @@ -42,7 +42,7 @@ export const getUniV2LogAdapter: any = ({ factory, fees = 0.003, swapEvent = def factory = factory.toLowerCase() const cacheKey = `tvl-adapter-cache/cache/uniswap-forks/${factory}-${chain}.json` - const { pairs, token0s, token1s } = await cache.readCache(cacheKey) + const { pairs, token0s, token1s } = await cache.readCache(cacheKey, { readFromR2Cache: true }) if (!pairs?.length) throw new Error('No pairs found, is there TVL adapter for this already?') const pairObject: IJSON = {} pairs.forEach((pair: string, i: number) => { @@ -71,8 +71,7 @@ export const getUniV3LogAdapter: any = ({ factory, poolCreatedEvent = defaultPoo factory = factory.toLowerCase() const cacheKey = `tvl-adapter-cache/cache/logs/${chain}/${factory}.json` const iface = new ethers.Interface([poolCreatedEvent]) - - let { logs } = await cache.readCache(cacheKey) + let { logs } = await cache.readCache(cacheKey, { readFromR2Cache: true }) if (!logs?.length) throw new Error('No pairs found, is there TVL adapter for this already?') logs = logs.map((log: any) => iface.parseLog(log)?.args) const pairObject: IJSON = {} diff --git a/package-lock.json b/package-lock.json index ecdf31342c..6601ea072c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.41", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.41.tgz", - "integrity": "sha512-53cAjD+P+gotPGLUMTRqbeL14HEe4zR/t6sYqOIHIKO9dHX6HkCpIgwkjGRoM+lUQwEEkH9QFhfLzeUCZ6+DVQ==", + "version": "5.0.42", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.42.tgz", + "integrity": "sha512-9Iss3LFXIH9KNnjYSOUmN2nEw/Yx1dbRRz76scgStZzTbMlXrrtJ28IwVMWi5Q6uiMS+yJN/SO6eCUFICfcQ5A==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@supercharge/promise-pool": "^2.1.0", From 70cf04956dcc0f02d885ff96b4690b475b56bac2 Mon Sep 17 00:00:00 2001 From: Milan Kotykov Date: Fri, 15 Mar 2024 09:18:18 -0300 Subject: [PATCH 0135/1590] add handling `base` in allbridge fees adapter --- fees/allbridge-core.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fees/allbridge-core.ts b/fees/allbridge-core.ts index 013dd783d7..691e33dbe3 100644 --- a/fees/allbridge-core.ts +++ b/fees/allbridge-core.ts @@ -27,6 +27,9 @@ const lpTokenAddresses: TChainAddress = { [CHAIN.AVAX]: [ '0xe827352A0552fFC835c181ab5Bf1D7794038eC9f' ], + [CHAIN.BASE]: [ + '0xDA6bb1ec3BaBA68B26bEa0508d6f81c9ec5e96d5' + ], [CHAIN.OPTIMISM]: [ '0x3B96F88b2b9EB87964b852874D41B633e0f1f68F' ], @@ -133,6 +136,11 @@ const adapters: SimpleAdapter = { start: 1698030000, meta, }, + [CHAIN.BASE]: { + fetch, + start: 1706798200, + meta, + }, [CHAIN.OPTIMISM]: { fetch, start: 1702868400, From 003e855479a835ca560eaa32c3b1263b89788211 Mon Sep 17 00:00:00 2001 From: Milan Kotykov Date: Fri, 15 Mar 2024 09:33:45 -0300 Subject: [PATCH 0136/1590] add usdt liquidity pools in allbridge fees adapter --- fees/allbridge-core.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/fees/allbridge-core.ts b/fees/allbridge-core.ts index 691e33dbe3..bdb276ee9f 100644 --- a/fees/allbridge-core.ts +++ b/fees/allbridge-core.ts @@ -22,16 +22,19 @@ const lpTokenAddresses: TChainAddress = { '0x4C42DfDBb8Ad654b42F66E0bD4dbdC71B52EB0A6', ], [CHAIN.ARBITRUM]: [ - '0x690e66fc0F8be8964d40e55EdE6aEBdfcB8A21Df' + '0x690e66fc0F8be8964d40e55EdE6aEBdfcB8A21Df', + '0x47235cB71107CC66B12aF6f8b8a9260ea38472c7', ], [CHAIN.AVAX]: [ - '0xe827352A0552fFC835c181ab5Bf1D7794038eC9f' + '0xe827352A0552fFC835c181ab5Bf1D7794038eC9f', + '0x2d2f460d7a1e7a4fcC4Ddab599451480728b5784', ], [CHAIN.BASE]: [ '0xDA6bb1ec3BaBA68B26bEa0508d6f81c9ec5e96d5' ], [CHAIN.OPTIMISM]: [ - '0x3B96F88b2b9EB87964b852874D41B633e0f1f68F' + '0x3B96F88b2b9EB87964b852874D41B633e0f1f68F', + '0xb24A05d54fcAcfe1FC00c59209470d4cafB0deEA', ], [CHAIN.TRON]: [ 'TAC21biCBL9agjuUyzd4gZr356zRgJq61b' From 0b3dc4a0e409f46edf13dd70cc20508def638f04 Mon Sep 17 00:00:00 2001 From: Bogdan Crisan Date: Fri, 15 Mar 2024 13:47:55 +0100 Subject: [PATCH 0137/1590] add econia fees support --- dexs/econia/index.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/dexs/econia/index.ts b/dexs/econia/index.ts index bebcab86dd..196371f463 100644 --- a/dexs/econia/index.ts +++ b/dexs/econia/index.ts @@ -34,9 +34,23 @@ const fetch = async (timestamp: number) => { return { daily: prev.daily + curr.daily, total: prev.total + curr.total }; }, {daily: 0, total: 0}); + const feesPerMarket = await Promise.all( + markets.map(async m => + await fetchURL(`${BASE_URL}/fees_24h?market_id=eq.${m.market_id}&day=eq.${dayISO}`) + .then(res => ( + { daily: res[0].fees / 1000000 } + )) + ) + ); + + const fees = feesPerMarket.reduce((prev, curr) => { + return { daily: prev.daily + curr.daily }; + }, { daily: 0 }); + let res = { totalVolume: `${volumes.total}`, dailyVolume: `${volumes.daily}`, + dailyFees: `${fees.daily}`, timestamp: dayTimestamp, }; From db44fbcd9e9cd964ffceecd2ab268b12e579fe16 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 15 Mar 2024 14:47:38 +0000 Subject: [PATCH 0138/1590] fix anyhedge --- {derivatives => dexs}/anyhedge/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename {derivatives => dexs}/anyhedge/index.ts (89%) diff --git a/derivatives/anyhedge/index.ts b/dexs/anyhedge/index.ts similarity index 89% rename from derivatives/anyhedge/index.ts rename to dexs/anyhedge/index.ts index 21b01a1eb6..fd87b976f3 100644 --- a/derivatives/anyhedge/index.ts +++ b/dexs/anyhedge/index.ts @@ -38,8 +38,8 @@ export async function fetchAnyhedgeVolumeData( const dayString = new Date(timestamp * 1000).toISOString().slice(0,10); const anyhedgeVolumeData = await getAnyhedgeVolumeData(anyhedgeVolumeEndpoint(dayString)); - const dailyVolume = Number(anyhedgeVolumeData.daily_volume); - const totalVolume = Number(anyhedgeVolumeData.total_volume); + const dailyVolume = Number(anyhedgeVolumeData?.daily_volume); + const totalVolume = Number(anyhedgeVolumeData?.total_volume); return { timestamp, @@ -48,11 +48,11 @@ export async function fetchAnyhedgeVolumeData( }; } -async function getAnyhedgeVolumeData(endpoint: string): Promise { +async function getAnyhedgeVolumeData(endpoint: string): Promise { try { let data = await fetchURL(endpoint); data = parseCSV(data); - let retval: IAnyhedgeVolumeResponse = {}; + const retval: IAnyhedgeVolumeResponse = {} as IAnyhedgeVolumeResponse; retval.daily_volume = data[0].volume_closed; retval.total_volume = data[0].volume_closed_cumulative; return retval; From 6096990ac89224ad819e58db8820346b331ffc58 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 15 Mar 2024 15:15:58 +0000 Subject: [PATCH 0139/1590] fix chain --- helpers/chains.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/chains.ts b/helpers/chains.ts index 0dd98447f6..d41a0f243d 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -26,7 +26,7 @@ export enum CHAIN { CARDANO = "cardano", LITECOIN = "litecoin", BITCOIN = "bitcoin", - BITCOIN_CASH = "bitcoin_cash", + BITCOIN_CASH = "bitcoincashs", DOGECHAIN = "dogechain", ENERGI = "energi", VELAS = "velas", From eda16c9530e902030b6c73b17d984327888d1669 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 15 Mar 2024 15:16:39 +0000 Subject: [PATCH 0140/1590] typoo --- helpers/chains.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/chains.ts b/helpers/chains.ts index d41a0f243d..282be11bdb 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -26,7 +26,7 @@ export enum CHAIN { CARDANO = "cardano", LITECOIN = "litecoin", BITCOIN = "bitcoin", - BITCOIN_CASH = "bitcoincashs", + BITCOIN_CASH = "bitcoincash", DOGECHAIN = "dogechain", ENERGI = "energi", VELAS = "velas", From d0f48bec99aa933d67b0c7b2717ca6c9c5a45998 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 16 Mar 2024 07:22:18 +0000 Subject: [PATCH 0141/1590] fix spike era --- aggregators/plexus/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregators/plexus/index.ts b/aggregators/plexus/index.ts index a59b52b2dd..571184bcde 100644 --- a/aggregators/plexus/index.ts +++ b/aggregators/plexus/index.ts @@ -13,7 +13,7 @@ const ChainId: TChainID = { [CHAIN.XDAI]: 100, [CHAIN.POLYGON]: 137, [CHAIN.FANTOM]: 250, - [CHAIN.ERA]: 324, + // [CHAIN.ERA]: 324, [CHAIN.POLYGON_ZKEVM]: 1101, [CHAIN.KAVA]: 2222, [CHAIN.KLAYTN]: 8217, From d061710b373e332fd491c7f2d8e1ee8333abb5dc Mon Sep 17 00:00:00 2001 From: bitcoincashautist <80100588+A60AB5450353F40E@users.noreply.github.com> Date: Sat, 16 Mar 2024 09:24:01 +0100 Subject: [PATCH 0142/1590] fix anyhedge --- dexs/anyhedge/index.ts | 48 +++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/dexs/anyhedge/index.ts b/dexs/anyhedge/index.ts index fd87b976f3..88be091da0 100644 --- a/dexs/anyhedge/index.ts +++ b/dexs/anyhedge/index.ts @@ -1,10 +1,12 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; import { getTimestampAtStartOfNextDayUTC } from "../../utils/date"; const methodology = { - DailyVolume: "Scan the blockchain for AnyHedge input pattern, add up all such inputs BCH value. The daily volume is the volume of all settled contracts for the day." + Volume: "Scan the blockchain for AnyHedge input pattern, add up all such inputs BCH value. The daily volume is the volume of all settled contracts for the day. Indexer: https://gitlab.com/0353F40E/anyhedge-stats", + Fees: "N/A", + Revenue: "N/A", } interface IAnyhedgeVolumeResponse { @@ -12,34 +14,21 @@ interface IAnyhedgeVolumeResponse { total_volume: number; } -// endDay formatted as 2011-12-13 -export const anyhedgeVolumeEndpoint = (endDay: string) => { +// day formatted as 2011-12-13 +export const anyhedgeVolumeEndpoint = (day: string) => { // Data & calculation method is fully reproducible, see: // https://gitlab.com/0353F40E/anyhedge-stats/-/blob/master/readme.md - return "https://gitlab.com/0353F40E/anyhedge-stats/-/raw/master/stats_daily/" + endDay + ".csv"; + return "https://gitlab.com/0353F40E/anyhedge-stats/-/raw/master/stats_daily/" + day + ".csv"; } -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.BITCOIN_CASH]: { - fetch: fetchAnyhedgeVolumeData, - start: 1654787405, - meta: { - methodology - } - }, - }, -}; - -export async function fetchAnyhedgeVolumeData( - /** Timestamp representing the end of the 24 hour period */ - timestamp: number -) { +const fetchAnyhedgeVolumeData: Fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { const dayString = new Date(timestamp * 1000).toISOString().slice(0,10); const anyhedgeVolumeData = await getAnyhedgeVolumeData(anyhedgeVolumeEndpoint(dayString)); - - const dailyVolume = Number(anyhedgeVolumeData?.daily_volume); - const totalVolume = Number(anyhedgeVolumeData?.total_volume); + + const dailyVolume = options.createBalances(); + const totalVolume = options.createBalances(); + dailyVolume.addCGToken('bitcoin-cash', Number(anyhedgeVolumeData?.daily_volume)); + totalVolume.addCGToken('bitcoin-cash', Number(anyhedgeVolumeData?.total_volume)); return { timestamp, @@ -76,4 +65,15 @@ function toObject(keys, values) { return res } +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.BITCOIN_CASH]: { + fetch: fetchAnyhedgeVolumeData, + start: 1654787405, + meta: { + methodology + } + }, + }, +}; export default adapter; From e97620e682626b7c027f5cd1e74fd36d8838dfdb Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Sat, 16 Mar 2024 15:29:19 +0000 Subject: [PATCH 0143/1590] Update bmx.ts --- fees/bmx.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/fees/bmx.ts b/fees/bmx.ts index 89a9051cf5..6b71c8f6c0 100644 --- a/fees/bmx.ts +++ b/fees/bmx.ts @@ -12,11 +12,10 @@ const methodology = { Fees: "Fees from open/close position (0.1%), liquidations, swap (0.2% to 0.8%), mint and burn (based on tokens balance in the pool) and borrow fee ((assets borrowed)/(total assets in pool)*0.01%)", UserFees: "Fees from open/close position (0.1%), swap (0.2% to 0.8%) and borrow fee ((assets borrowed)/(total assets in pool)*0.01%)", - HoldersRevenue: "30% of all collected fees are distributed to BMX/wBLT LP stakers", + HoldersRevenue: "10% of all collected fees are distributed to BMX stakers", SupplySideRevenue: "60% of all collected fees are distributed to BLT stakers", Revenue: - "Governance revenue is 30% of all collected fees, which are distributed to BMX/wBLT LP stakers", - ProtocolRevenue: "10% of all collected fees are distributed to the treasury", + "Revenue is 40% of all collected fees, which are distributed to BMX/wBLT LP stakers and BMX stakers", }; const graphs = (chain: string) => async (timestamp: number) => { @@ -49,9 +48,8 @@ const graphs = (chain: string) => async (timestamp: number) => { timestamp, dailyFees: finalDailyFee.toString(), dailyUserFees: finalUserFee.toString(), - dailyRevenue: (finalDailyFee * 0.3).toString(), - dailyProtocolRevenue: (finalDailyFee * 0.1).toString(), - dailyHoldersRevenue: (finalDailyFee * 0.3).toString(), + dailyRevenue: (finalDailyFee * 0.4).toString(), + dailyHoldersRevenue: (finalDailyFee * 0.1).toString(), dailySupplySideRevenue: (finalDailyFee * 0.6).toString(), }; }; From 34528f2ffc0948587582f5705f9567050743f435 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 16 Mar 2024 22:13:34 +0000 Subject: [PATCH 0144/1590] fix ethena --- fees/ethena.ts | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/fees/ethena.ts b/fees/ethena.ts index b2df7fb0bd..65dacb78c9 100644 --- a/fees/ethena.ts +++ b/fees/ethena.ts @@ -1,9 +1,9 @@ -import { ChainBlocks, FetchOptions, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { queryIndexer } from "../helpers/indexer"; const mint_event = 'event Mint( address indexed minter,address indexed benefactor,address indexed beneficiary,address collateral_asset,uint256 collateral_amount,uint256 usde_amount)'; -const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { +const fetch = async (options: FetchOptions) => { const logs = await options.getLogs({ eventAbi: mint_event, target: '0x2cc440b721d2cafd6d64908d6d8c4acc57f8afc3', @@ -17,15 +17,33 @@ const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) = WHERE block_number > 18637861 AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' - AND topic_2 in ('\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87', '\\x000000000000000000000000f2fa332bd83149c66b09b45670bce64746c6b439') + AND topic_2 in ('\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87') + AND block_time BETWEEN llama_replace_date_range; +`, options); + +const out_flow = await queryIndexer(` + SELECT + '0x' || encode(data, 'hex') AS data, + '0x' || encode(contract_address, 'hex') AS token + FROM + ethereum.event_logs + WHERE + block_number > 18637861 + AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' + AND topic_2 in ('\\x000000000000000000000000f2fa332bd83149c66b09b45670bce64746c6b439') AND block_time BETWEEN llama_replace_date_range; `, options); const dailyFeesInflow = options.createBalances(); + const supplyRewards = options.createBalances(); in_flow.map((log: any) => { const amount = Number(log.data); dailyFeesInflow.add(log.token, amount); }); + out_flow.map((log: any) => { + const amount = Number(log.data); + supplyRewards.add(log.token, amount); + }); const dailyFeesMint = options.createBalances(); logs.map((log) => { dailyFeesMint.add(log.collateral_asset, log.collateral_amount); @@ -33,14 +51,16 @@ const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) = dailyFeesMint.resizeBy(0.001) dailyFeesMint.addBalances(dailyFeesInflow); + const revenue = dailyFeesMint.clone() + revenue.subtract(supplyRewards) return { dailyFees: dailyFeesMint, - dailyRevenue: dailyFeesMint, - timestamp + dailyRevenue: revenue, } } const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch, From 8d2a4b492f68644a6fc9b0be48313d40aab6f2b3 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 16 Mar 2024 22:35:18 +0000 Subject: [PATCH 0145/1590] add dsr expenses for maker --- fees/makerdao.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/fees/makerdao.ts b/fees/makerdao.ts index f0e7fe52ef..357809a4e4 100644 --- a/fees/makerdao.ts +++ b/fees/makerdao.ts @@ -5,6 +5,8 @@ import type { ChainEndpoints, FetchOptions } from "../adapters/types" import { Chain } from '@defillama/sdk/build/general'; import BigNumber from "bignumber.js"; +const RAY = new BigNumber(10).pow(27); + const endpoints = { [ETHEREUM]: "https://api.thegraph.com/subgraphs/name/protofire/maker-protocol" @@ -23,6 +25,15 @@ const collateralYields = { [rwa:string]:number } +const MCD_POT={ + address: '0x197e90f9fad81970ba7976f33cbd77088e5d7cf7', + abis: { + Pie: {"constant":true,"inputs":[],"name":"Pie","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}, + dsr: {"constant":true,"inputs":[],"name":"dsr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}, + chi: {"constant":true,"inputs":[],"name":"chi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}, + } as any +} + const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { return async ({getEndBlock, getStartBlock, startTimestamp, endTimestamp, toApi} : FetchOptions) => { @@ -68,9 +79,18 @@ const graphs = (graphUrls: ChainEndpoints) => { dailyFee = dailyFee.plus(sparkSupplyAPY*sparkSupply/1e18) + const [Pie, chi, dsr] = await Promise.all(["Pie", "chi", "dsr"].map(async name=>( + await toApi.call({ + target: MCD_POT.address, + abi: MCD_POT.abis[name], + }) + ))) + const dsrTvl = BigNumber(Pie).times(chi).div(1e18).div(RAY) // check against https://makerburn.com/#/ + const dsrExpenses = BigNumber(dsr).div(RAY).pow(60*60*24).minus(1).times(dsrTvl) + return { dailyFees: dailyFee.toString(), - dailyRevenue: dailyFee.toString(), + dailyRevenue: dailyFee.minus(dsrExpenses).toString(), }; }; }; From b400d71677dc8c8aee8e992eb89407e4acf4e587 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Sun, 17 Mar 2024 21:55:21 +0000 Subject: [PATCH 0146/1590] add kim exchange v2-v3 (#1317) --- protocols/kim-exchange-v2.ts | 7 +++++++ protocols/kim-exchange-v3.ts | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 protocols/kim-exchange-v2.ts create mode 100644 protocols/kim-exchange-v3.ts diff --git a/protocols/kim-exchange-v2.ts b/protocols/kim-exchange-v2.ts new file mode 100644 index 0000000000..322837e43d --- /dev/null +++ b/protocols/kim-exchange-v2.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + mode: { + factory: '0xc02155946dd8C89D3D3238A6c8A64D04E2CD4500', + } +}) \ No newline at end of file diff --git a/protocols/kim-exchange-v3.ts b/protocols/kim-exchange-v3.ts new file mode 100644 index 0000000000..ec0c980d13 --- /dev/null +++ b/protocols/kim-exchange-v3.ts @@ -0,0 +1,7 @@ +import { uniV3Exports } from "../helpers/uniswap"; + +export default uniV3Exports({ + mode: { + factory: '0xB5F00c2C5f8821155D8ed27E31932CFD9DB3C5D5', + }, +}) \ No newline at end of file From 232c6871b8587b135a82fbc580bd7bf82f589053 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Sun, 17 Mar 2024 22:00:51 +0000 Subject: [PATCH 0147/1590] swapmode (#1318) --- protocols/swapmode-v2.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/swapmode-v2.ts diff --git a/protocols/swapmode-v2.ts b/protocols/swapmode-v2.ts new file mode 100644 index 0000000000..d1127d48a1 --- /dev/null +++ b/protocols/swapmode-v2.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + mode: { + factory: '0xfb926356BAf861c93C3557D7327Dbe8734A71891', + } +}) \ No newline at end of file From ca03483aad1189080b21dc37c3bf91118c98f958 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Sun, 17 Mar 2024 22:16:13 +0000 Subject: [PATCH 0148/1590] thruster-v3 (#1319) --- protocols/thruster-v3.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/thruster-v3.ts diff --git a/protocols/thruster-v3.ts b/protocols/thruster-v3.ts new file mode 100644 index 0000000000..8dbd378a74 --- /dev/null +++ b/protocols/thruster-v3.ts @@ -0,0 +1,7 @@ +import { uniV3Exports } from "../helpers/uniswap"; + +export default uniV3Exports({ + blast: { + factory: '0x71b08f13B3c3aF35aAdEb3949AFEb1ded1016127', + } +}) From e3b3a5b764203c9ce63745e71af1f3275162c810 Mon Sep 17 00:00:00 2001 From: Aiden <30964272+0xaaiden@users.noreply.github.com> Date: Mon, 18 Mar 2024 00:51:31 +0000 Subject: [PATCH 0149/1590] add btt to spookyswap --- dexs/spookyswap/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dexs/spookyswap/index.ts b/dexs/spookyswap/index.ts index 0f9dde0882..6e61d0ca5a 100644 --- a/dexs/spookyswap/index.ts +++ b/dexs/spookyswap/index.ts @@ -8,6 +8,7 @@ const { FANTOM } = require("../../helpers/chains"); const endpoints = { [FANTOM]: "https://api.thegraph.com/subgraphs/name/eerieeight/spookyswap", [CHAIN.EON]: "https://eon-graph.horizenlabs.io/subgraphs/name/0xALUKARD/spookyswap-eon", + [CHAIN.BITTORRENT]: "https://subgraph.spook.fi/subgraphs/name/eerieeight/spooky-swap-new" }; const graphs = getChainVolumeWithGasToken({ @@ -20,6 +21,7 @@ const graphs = getChainVolumeWithGasToken({ const graphsV3 = getChainVolume({ graphUrls: { [CHAIN.EON]: endpoints[CHAIN.EON], + [CHAIN.BITTORRENT]: endpoints[CHAIN.BITTORRENT] }, dailyVolume: { factory: "uniswapDayData", @@ -45,6 +47,10 @@ const adapter: SimpleAdapter = { fetch: graphsV3(CHAIN.EON), start: 1698969600 }, + [CHAIN.BITTORRENT]: { + fetch: graphsV3(CHAIN.BITTORRENT), + start: 23534368 + }, }, }; From 2cb7e0ffde198066a29821dcd1161bafb5c7f5e1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 18 Mar 2024 13:09:19 +0000 Subject: [PATCH 0150/1590] fix missing fees --- helpers/uniswap.ts | 6 +++--- protocols/kim-exchange-v3.ts | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/helpers/uniswap.ts b/helpers/uniswap.ts index eec7f56f29..d4a6347ffc 100644 --- a/helpers/uniswap.ts +++ b/helpers/uniswap.ts @@ -17,7 +17,7 @@ export async function filterPools({ api, pairs, createBalances }: { api: ChainAp } pairBalances[balanceCalls[i].params].add(balanceCalls[i].target, bal ?? 0) }) - // we do this to cache price results + // we do this to cache price results await balances.getUSDValue() const filteredPairs: IJSON = {} for (const pair of Object.keys(pairs)) { @@ -78,7 +78,7 @@ export const getUniV3LogAdapter: any = ({ factory, poolCreatedEvent = defaultPoo const fees: any = {} logs.forEach((log: any) => { pairObject[log.pool] = [log.token0, log.token1] - fees[log.pool] = log.fee.toString() / 1e6 + fees[log.pool] = (log.fee?.toString() || 0) / 1e6 // seem some protocol v3 forks does not have fee in the log when not use defaultPoolCreatedEvent }) const filteredPairs = await filterPools({ api, pairs: pairObject, createBalances }) const dailyVolume = createBalances() @@ -130,4 +130,4 @@ export function uniV3Exports(config: IJSON) { } }) return { adapter: exportObject, version: 2 } as SimpleAdapter -} \ No newline at end of file +} diff --git a/protocols/kim-exchange-v3.ts b/protocols/kim-exchange-v3.ts index ec0c980d13..0bf5f3410e 100644 --- a/protocols/kim-exchange-v3.ts +++ b/protocols/kim-exchange-v3.ts @@ -1,7 +1,9 @@ import { uniV3Exports } from "../helpers/uniswap"; -export default uniV3Exports({ +const poolEvent = 'event Pool(address indexed token0,address indexed token1,address pool)' +export default uniV3Exports({ mode: { + poolCreatedEvent: poolEvent, factory: '0xB5F00c2C5f8821155D8ed27E31932CFD9DB3C5D5', }, -}) \ No newline at end of file +}) From 070336b9d141746fab4a62c96cbf9ed44dd020a8 Mon Sep 17 00:00:00 2001 From: vrtnd Date: Mon, 18 Mar 2024 17:36:24 +0300 Subject: [PATCH 0151/1590] Bebop add blast and bsc --- aggregators/bebop/index.ts | 29 +- aggregators/bebop/jamAbi.ts | 766 ++++++++++++++++++++++++++++++++++++ 2 files changed, 794 insertions(+), 1 deletion(-) create mode 100644 aggregators/bebop/jamAbi.ts diff --git a/aggregators/bebop/index.ts b/aggregators/bebop/index.ts index 8267ae145c..21b8a50281 100644 --- a/aggregators/bebop/index.ts +++ b/aggregators/bebop/index.ts @@ -1,6 +1,7 @@ import { ethers } from "ethers"; import { ChainBlocks, FetchOptions } from "../../adapters/types"; import { getTransactions } from "../../helpers/getTxReceipts"; +import JAM_ABI from "./jamAbi"; const abis = { "AggregateOrderExecuted": "event AggregateOrderExecuted(bytes32 order_hash)", @@ -35,11 +36,12 @@ const abis = { } const contract_interface = new ethers.Interface(Object.values(abis)); +const JamContract = new ethers.Contract('0xbebebeb035351f58602e0c1c8b59ecbff5d5f47b', JAM_ABI) + const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions) => { const dailyVolume = createBalances() const cowswapData: any = {} - const logs = await getLogs({ target: '0xBeB09000fa59627dc02Bb55448AC1893EAa501A5', topics: ['0xc59522161f93d59c8c4520b0e7a3635fb7544133275be812a4ea970f4f14251b'] // AggregateOrderExecuted @@ -76,6 +78,29 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLog api.log('no order', d.hash, d.input.slice(0, 10), d.to, chain, decoded.signature) } } + + const jamLogs = await getLogs({ + target: '0xbebebeb035351f58602e0c1c8b59ecbff5d5f47b', + topics: ['0x7a70845dec8dc098eecb16e760b0c1569874487f0459ae689c738e281b28ed38'] // Settlement, + + }); + + const jamData: any = await getTransactions(chain, jamLogs.map((log: any) => log.transactionHash), { cacheKey: 'bebop' }) + for (const d of jamData) { + const decoded = JamContract.interface.parseTransaction(d) + if (!decoded) { + api.log('jam no decoded', d.hash, d.input.slice(0, 10), d.to, chain) + continue; + } + const {buyAmounts = [], sellAmounts = [], buyTokens = [], sellTokens = []} = decoded?.args?.order + buyAmounts?.forEach((amount: any, i: number) => { + dailyVolume.add(buyTokens[i], amount) + }) + sellAmounts?.forEach((amount: any, i: number) => { + dailyVolume.add(sellTokens[i], amount) + }) + } + return { timestamp, dailyVolume } }; @@ -84,6 +109,8 @@ const adapter: any = { arbitrum: { fetch, start: 1685491200, }, ethereum: { fetch, start: 1685491200, }, polygon: { fetch, start: 1685491200, }, + bsc: { fetch, start: 1685491200, }, + blast: { fetch, start: 1685491200, }, }, }; diff --git a/aggregators/bebop/jamAbi.ts b/aggregators/bebop/jamAbi.ts new file mode 100644 index 0000000000..133db5229c --- /dev/null +++ b/aggregators/bebop/jamAbi.ts @@ -0,0 +1,766 @@ +const ABI = [ + { + inputs: [ + { internalType: "address", name: "_permit2", type: "address" }, + { internalType: "address", name: "_daiAddress", type: "address" }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "receiver", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "NativeTransfer", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + ], + name: "Settlement", + type: "event", + }, + { + inputs: [], + name: "DOMAIN_SEPARATOR", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "EIP712_DOMAIN_TYPEHASH", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "JAM_ORDER_TYPE_HASH", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "balanceManager", + outputs: [ + { + internalType: "contract IJamBalanceManager", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [{ internalType: "uint256", name: "nonce", type: "uint256" }], + name: "cancelLimitOrder", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "beforeSettle", + type: "tuple[]", + }, + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "afterSettle", + type: "tuple[]", + }, + ], + internalType: "struct JamHooks.Def", + name: "hooks", + type: "tuple", + }, + ], + name: "hashHooks", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + components: [ + { internalType: "address", name: "taker", type: "address" }, + { internalType: "address", name: "receiver", type: "address" }, + { internalType: "uint256", name: "expiry", type: "uint256" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "address", name: "executor", type: "address" }, + { internalType: "uint16", name: "minFillPercent", type: "uint16" }, + { internalType: "bytes32", name: "hooksHash", type: "bytes32" }, + { internalType: "address[]", name: "sellTokens", type: "address[]" }, + { internalType: "address[]", name: "buyTokens", type: "address[]" }, + { internalType: "uint256[]", name: "sellAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "sellNFTIds", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyNFTIds", type: "uint256[]" }, + { internalType: "bytes", name: "sellTokenTransfers", type: "bytes" }, + { internalType: "bytes", name: "buyTokenTransfers", type: "bytes" }, + ], + internalType: "struct JamOrder.Data", + name: "order", + type: "tuple", + }, + { internalType: "bytes32", name: "hooksHash", type: "bytes32" }, + ], + name: "hashOrder", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "taker", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + ], + name: "isLimitOrderNonceValid", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "", type: "address" }, + { internalType: "address", name: "", type: "address" }, + { internalType: "uint256[]", name: "", type: "uint256[]" }, + { internalType: "uint256[]", name: "", type: "uint256[]" }, + { internalType: "bytes", name: "", type: "bytes" }, + ], + name: "onERC1155BatchReceived", + outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "", type: "address" }, + { internalType: "address", name: "", type: "address" }, + { internalType: "uint256", name: "", type: "uint256" }, + { internalType: "uint256", name: "", type: "uint256" }, + { internalType: "bytes", name: "", type: "bytes" }, + ], + name: "onERC1155Received", + outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "", type: "address" }, + { internalType: "address", name: "", type: "address" }, + { internalType: "uint256", name: "", type: "uint256" }, + { internalType: "bytes", name: "", type: "bytes" }, + ], + name: "onERC721Received", + outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { internalType: "address", name: "taker", type: "address" }, + { internalType: "address", name: "receiver", type: "address" }, + { internalType: "uint256", name: "expiry", type: "uint256" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "address", name: "executor", type: "address" }, + { internalType: "uint16", name: "minFillPercent", type: "uint16" }, + { internalType: "bytes32", name: "hooksHash", type: "bytes32" }, + { internalType: "address[]", name: "sellTokens", type: "address[]" }, + { internalType: "address[]", name: "buyTokens", type: "address[]" }, + { internalType: "uint256[]", name: "sellAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "sellNFTIds", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyNFTIds", type: "uint256[]" }, + { internalType: "bytes", name: "sellTokenTransfers", type: "bytes" }, + { internalType: "bytes", name: "buyTokenTransfers", type: "bytes" }, + ], + internalType: "struct JamOrder.Data", + name: "order", + type: "tuple", + }, + { + components: [ + { + internalType: "enum Signature.Type", + name: "signatureType", + type: "uint8", + }, + { internalType: "bytes", name: "signatureBytes", type: "bytes" }, + ], + internalType: "struct Signature.TypedSignature", + name: "signature", + type: "tuple", + }, + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "interactions", + type: "tuple[]", + }, + { + components: [ + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "beforeSettle", + type: "tuple[]", + }, + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "afterSettle", + type: "tuple[]", + }, + ], + internalType: "struct JamHooks.Def", + name: "hooks", + type: "tuple", + }, + { + components: [ + { + internalType: "address", + name: "balanceRecipient", + type: "address", + }, + { internalType: "uint16", name: "curFillPercent", type: "uint16" }, + ], + internalType: "struct ExecInfo.SolverData", + name: "solverData", + type: "tuple", + }, + ], + name: "settle", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { internalType: "address", name: "taker", type: "address" }, + { internalType: "address", name: "receiver", type: "address" }, + { internalType: "uint256", name: "expiry", type: "uint256" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "address", name: "executor", type: "address" }, + { internalType: "uint16", name: "minFillPercent", type: "uint16" }, + { internalType: "bytes32", name: "hooksHash", type: "bytes32" }, + { internalType: "address[]", name: "sellTokens", type: "address[]" }, + { internalType: "address[]", name: "buyTokens", type: "address[]" }, + { internalType: "uint256[]", name: "sellAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "sellNFTIds", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyNFTIds", type: "uint256[]" }, + { internalType: "bytes", name: "sellTokenTransfers", type: "bytes" }, + { internalType: "bytes", name: "buyTokenTransfers", type: "bytes" }, + ], + internalType: "struct JamOrder.Data[]", + name: "orders", + type: "tuple[]", + }, + { + components: [ + { + internalType: "enum Signature.Type", + name: "signatureType", + type: "uint8", + }, + { internalType: "bytes", name: "signatureBytes", type: "bytes" }, + ], + internalType: "struct Signature.TypedSignature[]", + name: "signatures", + type: "tuple[]", + }, + { + components: [ + { + internalType: "bytes[]", + name: "permitSignatures", + type: "bytes[]", + }, + { + internalType: "bytes", + name: "signatureBytesPermit2", + type: "bytes", + }, + { internalType: "uint48[]", name: "noncesPermit2", type: "uint48[]" }, + { internalType: "uint48", name: "deadline", type: "uint48" }, + ], + internalType: "struct Signature.TakerPermitsInfo[]", + name: "takersPermitsInfo", + type: "tuple[]", + }, + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "interactions", + type: "tuple[]", + }, + { + components: [ + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "beforeSettle", + type: "tuple[]", + }, + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "afterSettle", + type: "tuple[]", + }, + ], + internalType: "struct JamHooks.Def[]", + name: "hooks", + type: "tuple[]", + }, + { + components: [ + { + internalType: "address", + name: "balanceRecipient", + type: "address", + }, + { + internalType: "uint16[]", + name: "curFillPercents", + type: "uint16[]", + }, + { + internalType: "bool[]", + name: "takersPermitsUsage", + type: "bool[]", + }, + { internalType: "bool", name: "transferExactAmounts", type: "bool" }, + ], + internalType: "struct ExecInfo.BatchSolverData", + name: "solverData", + type: "tuple", + }, + ], + name: "settleBatch", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { internalType: "address", name: "taker", type: "address" }, + { internalType: "address", name: "receiver", type: "address" }, + { internalType: "uint256", name: "expiry", type: "uint256" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "address", name: "executor", type: "address" }, + { internalType: "uint16", name: "minFillPercent", type: "uint16" }, + { internalType: "bytes32", name: "hooksHash", type: "bytes32" }, + { internalType: "address[]", name: "sellTokens", type: "address[]" }, + { internalType: "address[]", name: "buyTokens", type: "address[]" }, + { internalType: "uint256[]", name: "sellAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "sellNFTIds", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyNFTIds", type: "uint256[]" }, + { internalType: "bytes", name: "sellTokenTransfers", type: "bytes" }, + { internalType: "bytes", name: "buyTokenTransfers", type: "bytes" }, + ], + internalType: "struct JamOrder.Data", + name: "order", + type: "tuple", + }, + { + components: [ + { + internalType: "enum Signature.Type", + name: "signatureType", + type: "uint8", + }, + { internalType: "bytes", name: "signatureBytes", type: "bytes" }, + ], + internalType: "struct Signature.TypedSignature", + name: "signature", + type: "tuple", + }, + { + components: [ + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "beforeSettle", + type: "tuple[]", + }, + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "afterSettle", + type: "tuple[]", + }, + ], + internalType: "struct JamHooks.Def", + name: "hooks", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256[]", + name: "increasedBuyAmounts", + type: "uint256[]", + }, + { internalType: "uint16", name: "curFillPercent", type: "uint16" }, + ], + internalType: "struct ExecInfo.MakerData", + name: "makerData", + type: "tuple", + }, + ], + name: "settleInternal", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { internalType: "address", name: "taker", type: "address" }, + { internalType: "address", name: "receiver", type: "address" }, + { internalType: "uint256", name: "expiry", type: "uint256" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "address", name: "executor", type: "address" }, + { internalType: "uint16", name: "minFillPercent", type: "uint16" }, + { internalType: "bytes32", name: "hooksHash", type: "bytes32" }, + { internalType: "address[]", name: "sellTokens", type: "address[]" }, + { internalType: "address[]", name: "buyTokens", type: "address[]" }, + { internalType: "uint256[]", name: "sellAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "sellNFTIds", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyNFTIds", type: "uint256[]" }, + { internalType: "bytes", name: "sellTokenTransfers", type: "bytes" }, + { internalType: "bytes", name: "buyTokenTransfers", type: "bytes" }, + ], + internalType: "struct JamOrder.Data", + name: "order", + type: "tuple", + }, + { + components: [ + { + internalType: "enum Signature.Type", + name: "signatureType", + type: "uint8", + }, + { internalType: "bytes", name: "signatureBytes", type: "bytes" }, + ], + internalType: "struct Signature.TypedSignature", + name: "signature", + type: "tuple", + }, + { + components: [ + { + internalType: "bytes[]", + name: "permitSignatures", + type: "bytes[]", + }, + { + internalType: "bytes", + name: "signatureBytesPermit2", + type: "bytes", + }, + { internalType: "uint48[]", name: "noncesPermit2", type: "uint48[]" }, + { internalType: "uint48", name: "deadline", type: "uint48" }, + ], + internalType: "struct Signature.TakerPermitsInfo", + name: "takerPermitsInfo", + type: "tuple", + }, + { + components: [ + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "beforeSettle", + type: "tuple[]", + }, + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "afterSettle", + type: "tuple[]", + }, + ], + internalType: "struct JamHooks.Def", + name: "hooks", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256[]", + name: "increasedBuyAmounts", + type: "uint256[]", + }, + { internalType: "uint16", name: "curFillPercent", type: "uint16" }, + ], + internalType: "struct ExecInfo.MakerData", + name: "makerData", + type: "tuple", + }, + ], + name: "settleInternalWithPermitsSignatures", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { internalType: "address", name: "taker", type: "address" }, + { internalType: "address", name: "receiver", type: "address" }, + { internalType: "uint256", name: "expiry", type: "uint256" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "address", name: "executor", type: "address" }, + { internalType: "uint16", name: "minFillPercent", type: "uint16" }, + { internalType: "bytes32", name: "hooksHash", type: "bytes32" }, + { internalType: "address[]", name: "sellTokens", type: "address[]" }, + { internalType: "address[]", name: "buyTokens", type: "address[]" }, + { internalType: "uint256[]", name: "sellAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyAmounts", type: "uint256[]" }, + { internalType: "uint256[]", name: "sellNFTIds", type: "uint256[]" }, + { internalType: "uint256[]", name: "buyNFTIds", type: "uint256[]" }, + { internalType: "bytes", name: "sellTokenTransfers", type: "bytes" }, + { internalType: "bytes", name: "buyTokenTransfers", type: "bytes" }, + ], + internalType: "struct JamOrder.Data", + name: "order", + type: "tuple", + }, + { + components: [ + { + internalType: "enum Signature.Type", + name: "signatureType", + type: "uint8", + }, + { internalType: "bytes", name: "signatureBytes", type: "bytes" }, + ], + internalType: "struct Signature.TypedSignature", + name: "signature", + type: "tuple", + }, + { + components: [ + { + internalType: "bytes[]", + name: "permitSignatures", + type: "bytes[]", + }, + { + internalType: "bytes", + name: "signatureBytesPermit2", + type: "bytes", + }, + { internalType: "uint48[]", name: "noncesPermit2", type: "uint48[]" }, + { internalType: "uint48", name: "deadline", type: "uint48" }, + ], + internalType: "struct Signature.TakerPermitsInfo", + name: "takerPermitsInfo", + type: "tuple", + }, + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "interactions", + type: "tuple[]", + }, + { + components: [ + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "beforeSettle", + type: "tuple[]", + }, + { + components: [ + { internalType: "bool", name: "result", type: "bool" }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + ], + internalType: "struct JamInteraction.Data[]", + name: "afterSettle", + type: "tuple[]", + }, + ], + internalType: "struct JamHooks.Def", + name: "hooks", + type: "tuple", + }, + { + components: [ + { + internalType: "address", + name: "balanceRecipient", + type: "address", + }, + { internalType: "uint16", name: "curFillPercent", type: "uint16" }, + ], + internalType: "struct ExecInfo.SolverData", + name: "solverData", + type: "tuple", + }, + ], + name: "settleWithPermitsSignatures", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [{ internalType: "bytes4", name: "interfaceId", type: "bytes4" }], + name: "supportsInterface", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "receiver", type: "address" }, + { internalType: "uint256", name: "amount", type: "uint256" }, + ], + name: "transferNativeFromContract", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "validationAddress", type: "address" }, + { internalType: "bytes32", name: "hash", type: "bytes32" }, + { + components: [ + { + internalType: "enum Signature.Type", + name: "signatureType", + type: "uint8", + }, + { internalType: "bytes", name: "signatureBytes", type: "bytes" }, + ], + internalType: "struct Signature.TypedSignature", + name: "signature", + type: "tuple", + }, + ], + name: "validateSignature", + outputs: [], + stateMutability: "view", + type: "function", + }, + { stateMutability: "payable", type: "receive" }, +]; +export default ABI; From 19a995614f478b6e14c072adf91f49b4c4c3c576 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 18 Mar 2024 14:53:12 +0000 Subject: [PATCH 0152/1590] fix timesstamp ; --- dexs/rabbitx/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dexs/rabbitx/index.ts b/dexs/rabbitx/index.ts index c5bcee11f0..c2992063b1 100644 --- a/dexs/rabbitx/index.ts +++ b/dexs/rabbitx/index.ts @@ -1,6 +1,7 @@ import fetchURL from "../../utils/fetchURL" import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import { getTimestampAtStartOfDay, getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../../utils/date"; const historicalVolumeEndpoint = "https://api.prod.rabbitx.io/markets" const candles = (market: string, timestampFrom: number, timestampTo: number) => { @@ -16,8 +17,8 @@ interface IVolumeall { } const fetchVolume = async (timestamp: number): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp + const fromTimestamp = getTimestampAtStartOfDayUTC(timestamp); + const toTimestamp = getTimestampAtStartOfNextDayUTC(fromTimestamp) - 1; // Get market data const response = await fetchURL(historicalVolumeEndpoint); From ce9c198f72023d150dfa5aab915d9c484588a7c5 Mon Sep 17 00:00:00 2001 From: vrtnd Date: Mon, 18 Mar 2024 17:56:45 +0300 Subject: [PATCH 0153/1590] Bebop add zksync --- aggregators/bebop/index.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/aggregators/bebop/index.ts b/aggregators/bebop/index.ts index 21b8a50281..36bd902b3e 100644 --- a/aggregators/bebop/index.ts +++ b/aggregators/bebop/index.ts @@ -37,6 +37,10 @@ const abis = { const contract_interface = new ethers.Interface(Object.values(abis)); const JamContract = new ethers.Contract('0xbebebeb035351f58602e0c1c8b59ecbff5d5f47b', JAM_ABI) +const jamAddress = { + era:'0x574d1fcF950eb48b11de5DF22A007703cbD2b129', + default: '0xbebebeb035351f58602e0c1c8b59ecbff5d5f47b' +} const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions) => { @@ -80,7 +84,7 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLog } const jamLogs = await getLogs({ - target: '0xbebebeb035351f58602e0c1c8b59ecbff5d5f47b', + target: jamAddress[chain] || jamAddress.default, topics: ['0x7a70845dec8dc098eecb16e760b0c1569874487f0459ae689c738e281b28ed38'] // Settlement, }); @@ -111,6 +115,7 @@ const adapter: any = { polygon: { fetch, start: 1685491200, }, bsc: { fetch, start: 1685491200, }, blast: { fetch, start: 1685491200, }, + era: { fetch, start: 1685491200, }, }, }; From 6d903b5f62e6ba547ddc2ec82a7557b1c7ae594d Mon Sep 17 00:00:00 2001 From: yruej301 Date: Mon, 18 Mar 2024 12:39:27 -0400 Subject: [PATCH 0154/1590] add blitz adapters --- dexs/blitz/index.ts | 107 +++++++++++++++++++++++++++++++++++++ fees/blitz.ts | 127 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 234 insertions(+) create mode 100644 dexs/blitz/index.ts create mode 100644 fees/blitz.ts diff --git a/dexs/blitz/index.ts b/dexs/blitz/index.ts new file mode 100644 index 0000000000..eccc4bda0b --- /dev/null +++ b/dexs/blitz/index.ts @@ -0,0 +1,107 @@ +import { BreakdownAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { httpGet, httpPost } from "../../utils/fetchURL"; + +interface IProducts { + spot_products: number[]; + perp_products: number[]; + margined_products: number[]; +} + +const gatewayBaseUrl = "https://gateway.blast-prod.vertexprotocol.com/v1"; +const archiveBaseUrl = "https://archive.blast-prod.vertexprotocol.com/v1"; + +const fetchValidSymbols = async (): Promise => { + const symbols = await httpGet(`${gatewayBaseUrl}/symbols`); + return symbols.map((product: { product_id: number }) => product.product_id); +}; + +const fetchProducts = async (): Promise => { + const validSymbols = await fetchValidSymbols(); + const allProducts = ( + await httpGet(`${gatewayBaseUrl}/query?type=all_products`) + ).data; + return { + spot_products: allProducts.spot_products + .map((product: { product_id: number }) => product.product_id) + .filter((id: number) => validSymbols.includes(id) && id > 0), + perp_products: allProducts.perp_products + .map((product: { product_id: number }) => product.product_id) + .filter((id: number) => validSymbols.includes(id)), + margined_products: allProducts.spot_products + .map((product: { product_id: number }) => product.product_id) + .filter((id: number) => validSymbols.includes(id) && id > 0), + }; +}; + +const computeVolume = async (timestamp: number, productIds: number[]) => { + const snapshots = ( + await httpPost(archiveBaseUrl, { + market_snapshots: { + interval: { + count: 2, + granularity: 86400, + max_time: timestamp, + }, + product_ids: productIds, + }, + }) + ).snapshots; + const lastCumulativeVolumes: Record = + snapshots[0].cumulative_volumes; + const prevCumulativeVolumes: Record = + snapshots[1].cumulative_volumes; + const totalVolume = Number( + Object.values(lastCumulativeVolumes).reduce( + (acc, current) => acc + BigInt(current), + BigInt(0) + ) / BigInt(10 ** 18) + ); + const totalVolumeOneDayAgo = Number( + Object.values(prevCumulativeVolumes).reduce( + (acc, current) => acc + BigInt(current), + BigInt(0) + ) / BigInt(10 ** 18) + ); + const dailyVolume = totalVolume - totalVolumeOneDayAgo; + return { + totalVolume: totalVolume ? `${totalVolume}` : undefined, + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + timestamp: timestamp, + }; +}; + +const fetchSpots = async (timeStamp: number) => { + const spotProductIds = (await fetchProducts()).spot_products; + return await computeVolume(timeStamp, spotProductIds); +}; + +const fetchPerps = async (timeStamp: number) => { + const perpProductIds = (await fetchProducts()).perp_products; + const marginedProductIds = (await fetchProducts()).margined_products; + return await computeVolume( + timeStamp, + perpProductIds.concat(marginedProductIds) + ); +}; + +const startTime = 1710259200; + +const adapter: BreakdownAdapter = { + breakdown: { + swap: { + [CHAIN.BLAST]: { + fetch: fetchSpots, + start: startTime, + }, + }, + derivatives: { + [CHAIN.BLAST]: { + fetch: fetchPerps, + start: startTime, + }, + }, + }, +}; + +export default adapter; diff --git a/fees/blitz.ts b/fees/blitz.ts new file mode 100644 index 0000000000..d190b634cb --- /dev/null +++ b/fees/blitz.ts @@ -0,0 +1,127 @@ +import { CHAIN } from "../helpers/chains"; +import { Adapter, FetchResultFees } from "../adapters/types"; +import { httpPost } from "../utils/fetchURL"; + +interface MarketSnapshots { + interval: { + count: number; + granularity: number; + max_time: number; + }; +} + +interface QueryBody { + market_snapshots: MarketSnapshots; +} +interface IData { + [s: string]: string; +} + +interface Snapshot { + [s: string]: IData; +} + +interface Response { + snapshots: Snapshot[]; +} + +const query = async (max_time: number): Promise => { + const body: QueryBody = { + market_snapshots: { + interval: { + count: 2, + granularity: 86400, + max_time: max_time, + }, + }, + }; + + const archiveBaseUrl = "https://archive.blast-prod.vertexprotocol.com/v1"; + const response = await httpPost(archiveBaseUrl, body); + return response; +}; + +const sumAllProductStats = (stat_map: IData): number => { + let stat_sum = 0; + for (const v of Object.values(stat_map)) { + stat_sum += parseInt(v); + } + return stat_sum / 1e18; +}; + +const get24hrStat = async ( + field: string, + max_time: number +): Promise => { + const response = await query(max_time); + const cur_res: Snapshot = response.snapshots[0]; + const past_res: Snapshot = response.snapshots[1]; + return ( + sumAllProductStats(cur_res[field]) - sumAllProductStats(past_res[field]) + ); +}; + +const getCumulativeStat = async ( + field: string, + max_time: number +): Promise => { + const response = await query(max_time); + const cur_res = response.snapshots[0]; + return sumAllProductStats(cur_res[field]); +}; + +const getCumulativeFees = async (max_time: number): Promise => { + const fees = await getCumulativeStat("cumulative_taker_fees", max_time); + const sequencer_fees = await getCumulativeStat( + "cumulative_sequencer_fees", + max_time + ); + return fees - sequencer_fees; +}; + +const getCumulativeRevenue = async (max_time: number): Promise => { + const fees = await getCumulativeFees(max_time); + const rebates = await getCumulativeStat("cumulative_maker_fees", max_time); + return fees + rebates; +}; + +const get24hrFees = async (max_time: number): Promise => { + const fees = await get24hrStat("cumulative_taker_fees", max_time); + const sequencer_fees = await get24hrStat( + "cumulative_sequencer_fees", + max_time + ); + return fees - sequencer_fees; +}; + +const get24hrRevenue = async (max_time: number): Promise => { + const fees = await get24hrFees(max_time); + const rebates = await get24hrStat("cumulative_maker_fees", max_time); + return fees + rebates; +}; + +const fetch = async (timestamp: number): Promise => { + const dailyFees = await get24hrFees(timestamp); + const dailyRevenue = await get24hrRevenue(timestamp); + const totalFees = await getCumulativeFees(timestamp); + const totalRev = await getCumulativeRevenue(timestamp); + return { + dailyFees: `${dailyFees}`, + dailyRevenue: `${dailyRevenue}`, + totalRevenue: `${totalRev}`, + totalFees: `${totalFees}`, + timestamp, + }; +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.BLAST]: { + fetch: fetch, + runAtCurrTime: true, + start: 1710259200, + }, + }, +}; + +export default adapter; From 816f45c34dd7e0678eb90ae8bb015c162ddd64c8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:50:41 +0100 Subject: [PATCH 0155/1590] Update adapter versions in fees files --- aggregators/aggre/index.ts | 9 +++++---- aggregators/odos.ts | 10 ++++------ fees/Scale.ts | 3 ++- fees/beethoven-x.ts | 3 ++- fees/benqi-lending.ts | 15 ++------------- fees/cipher.ts | 3 ++- fees/friend-room.ts | 3 ++- fees/friend-tech.ts | 3 ++- fees/friend3.ts | 3 ++- fees/morpho-compound.ts | 16 ++-------------- fees/post-tech.ts | 3 ++- fees/sharesgram.ts | 3 ++- fees/squa-defi.ts | 3 ++- fees/touch.fan.ts | 3 ++- fees/venus-finance.ts | 17 ++--------------- fees/zapper-channels.ts | 3 ++- helpers/balancer.ts | 10 ++++------ helpers/friend-tech.ts | 10 +++++----- helpers/solidly.ts | 6 +++--- package-lock.json | 6 +++--- 20 files changed, 52 insertions(+), 80 deletions(-) diff --git a/aggregators/aggre/index.ts b/aggregators/aggre/index.ts index 15b4cd4bc3..fc9dc65dd3 100644 --- a/aggregators/aggre/index.ts +++ b/aggregators/aggre/index.ts @@ -1,5 +1,5 @@ import { Chain } from "@defillama/sdk/build/general"; -import { FetchOptions, FetchResultAggregators, SimpleAdapter } from "../../adapters/types"; +import { FetchV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; let abi = ["event SwapExecuted(address indexed user, address tokenIn, address tokenOut, uint amountIn, uint amountOut, uint swapType)"]; @@ -12,13 +12,13 @@ const contract: IContract = { [CHAIN.SCROLL]: '0xcf8bcaCb401C31774EA39296b367B9DaB4F72267', } -const fetch: any = async (timestamp: number, _, { getLogs, createBalances, chain, }: FetchOptions): Promise => { +const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }) => { const dailyVolume = createBalances(); const logs = (await getLogs({ target: contract[chain], eventAbi: abi[0], })) logs.map((log: any) => dailyVolume.add(log.tokenOut, log.amountOut)); - return { dailyVolume, timestamp, }; + return { dailyVolume, }; }; const adapter: SimpleAdapter = { @@ -30,7 +30,8 @@ const adapter: SimpleAdapter = { start: 1698660910, } } - }, {}) + }, {}), + version: 2, }; export default adapter; \ No newline at end of file diff --git a/aggregators/odos.ts b/aggregators/odos.ts index cc5c543da6..65f7bb98bd 100644 --- a/aggregators/odos.ts +++ b/aggregators/odos.ts @@ -1,7 +1,6 @@ -import { ChainBlocks, FetchOptions, FetchResultVolume, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { Chain } from "@defillama/sdk/build/general"; const event_swap = 'event Swap (address sender, uint256 inputAmount, address inputToken, uint256 amountOut, address outputToken, int256 slippage, uint32 referralCode)'; const event_multiswap = 'event SwapMulti(address sender, uint256[] amountsIn, address[] tokensIn, uint256[] amountsOut, address[] tokensOut, uint32 referralCode)'; @@ -22,8 +21,7 @@ const FEE_COLLECTORS: TPool = { [CHAIN.POLYGON_ZKEVM]: ['0x2b8B3f0949dfB616602109D2AAbBA11311ec7aEC',], } -async function fetch(timestamp: number, _: ChainBlocks, { getLogs, createBalances, chain }: FetchOptions): Promise { - timestamp = Math.floor(Date.now() / 1000) +async function fetch({ getLogs, createBalances, chain }: FetchOptions) { const feeCollectors = FEE_COLLECTORS[chain]; const dailyVolume = createBalances() const logs = await getLogs({ targets: feeCollectors, eventAbi: event_swap, }) @@ -31,11 +29,11 @@ async function fetch(timestamp: number, _: ChainBlocks, { getLogs, createBalance logs.forEach(i => dailyVolume.add(i.outputToken, i.amountOut)) multiswapLogs.forEach(i => dailyVolume.add(i.tokensOut, i.amountsOut)) - return { dailyVolume, timestamp, }; + return { dailyVolume, }; } const start = 1689292800 -const adapter: SimpleAdapter = { adapter: { }}; +const adapter: SimpleAdapter = { adapter: {}, version: 2, }; Object.keys(FEE_COLLECTORS).forEach((chain) => adapter.adapter[chain] = { fetch, start, }); export default adapter; \ No newline at end of file diff --git a/fees/Scale.ts b/fees/Scale.ts index c938fced1f..40590ed5ca 100644 --- a/fees/Scale.ts +++ b/fees/Scale.ts @@ -11,7 +11,8 @@ const adapter: SimpleAdapter = { fetch: getFeesExport({ FACTORY_ADDRESS, VOTER_ADDRESS, }), start: 1695458888, }, - } + }, + version: 2, }; export default adapter; \ No newline at end of file diff --git a/fees/beethoven-x.ts b/fees/beethoven-x.ts index 191f8756e9..aac1440b4b 100644 --- a/fees/beethoven-x.ts +++ b/fees/beethoven-x.ts @@ -15,6 +15,7 @@ const adapters: SimpleAdapter = { adapter: { [CHAIN.OPTIMISM]: { fetch: getFeesExport(vaultAddresses[CHAIN.OPTIMISM]), start: 1672531200 }, [CHAIN.FANTOM]: { fetch: getFeesExport(vaultAddresses[CHAIN.FANTOM]), start: 1672531200 }, - } + }, + version: 2, } export default adapters diff --git a/fees/benqi-lending.ts b/fees/benqi-lending.ts index 3c459a6667..4f13eb80f4 100644 --- a/fees/benqi-lending.ts +++ b/fees/benqi-lending.ts @@ -1,16 +1,5 @@ -import { Adapter, } from "../adapters/types" -import { CHAIN } from "../helpers/chains"; -import { getFeesExport } from "../helpers/compoundV2"; +import { compoundV2Export, } from "../helpers/compoundV2"; const unitroller = "0x486Af39519B4Dc9a7fCcd318217352830E8AD9b4"; -const adapter: Adapter = { - adapter: { - [CHAIN.AVAX]: { - fetch: getFeesExport(unitroller), - start: 1664582400, - }, - }, -}; - -export default adapter; +export default compoundV2Export({ avax: unitroller}); diff --git a/fees/cipher.ts b/fees/cipher.ts index cd57a4956c..32f0bdb846 100644 --- a/fees/cipher.ts +++ b/fees/cipher.ts @@ -8,7 +8,8 @@ const adapter: Adapter = { fetch: getFeesExport('0x2544a6412bc5aec279ea0f8d017fb4a9b6673dca'), start: 1695600000, }, - } + }, + version: 2, } export default adapter; diff --git a/fees/friend-room.ts b/fees/friend-room.ts index beaea95c3e..16f29fcce9 100644 --- a/fees/friend-room.ts +++ b/fees/friend-room.ts @@ -11,7 +11,8 @@ const adapter: Adapter = { fetch: getFeesExport(friendRoomSharesAddress, [event_trade]), start: 1693731179, }, - } + }, + version: 2, } export default adapter; diff --git a/fees/friend-tech.ts b/fees/friend-tech.ts index db6dca608c..4ce8741b45 100644 --- a/fees/friend-tech.ts +++ b/fees/friend-tech.ts @@ -8,7 +8,8 @@ const adapter: Adapter = { fetch: getFeesExport('0xcf205808ed36593aa40a44f10c7f7c2f67d4a4d4'), start: 1691539200, }, - } + }, + version: 2, } export default adapter; \ No newline at end of file diff --git a/fees/friend3.ts b/fees/friend3.ts index 63d374e28b..8f527504de 100644 --- a/fees/friend3.ts +++ b/fees/friend3.ts @@ -18,7 +18,8 @@ const adapter: Adapter = { fetch: getFeesExport(FriendV2Address, [event_trade_V2]), start: 1698710400, }, - } + }, + version: 2, } export default adapter; diff --git a/fees/morpho-compound.ts b/fees/morpho-compound.ts index de79af0762..1fc8eb118c 100644 --- a/fees/morpho-compound.ts +++ b/fees/morpho-compound.ts @@ -1,17 +1,5 @@ -import { Adapter, } from "../adapters/types" -import { CHAIN } from "../helpers/chains"; -import { getFeesExport } from "../helpers/compoundV2"; +import { compoundV2Export, } from "../helpers/compoundV2"; const unitroller = "0x930f1b46e1d081ec1524efd95752be3ece51ef67"; -const adapter: Adapter = { - adapter: { - [CHAIN.ETHEREUM]: { - fetch: getFeesExport(unitroller), - start: 1697932800, - runAtCurrTime: true, - }, - }, -}; - -export default adapter; +export default compoundV2Export({ ethereum: unitroller}); diff --git a/fees/post-tech.ts b/fees/post-tech.ts index 79f347b85c..3e5a69d6b1 100644 --- a/fees/post-tech.ts +++ b/fees/post-tech.ts @@ -11,7 +11,8 @@ const adapter: SimpleAdapter = { fetch: getFeesExport(contract_address, [event_trade]), start: 1693267200 } - } + }, + version: 2, } export default adapter; diff --git a/fees/sharesgram.ts b/fees/sharesgram.ts index 274d9c5c2e..b2cc7a4ca4 100644 --- a/fees/sharesgram.ts +++ b/fees/sharesgram.ts @@ -9,6 +9,7 @@ const adapter: Adapter = { fetch: getFeesExport('0xbe74a95d159e8e323b8c1a70f825efc85fed27c4'), start: 1693180800 } - } + }, + version: 2, } export default adapter; diff --git a/fees/squa-defi.ts b/fees/squa-defi.ts index 5cc1e7c543..b3b56076e6 100644 --- a/fees/squa-defi.ts +++ b/fees/squa-defi.ts @@ -14,7 +14,8 @@ const adapter: Adapter = { }), start: 1703255087, }, - } + }, + version: 2, } export default adapter; diff --git a/fees/touch.fan.ts b/fees/touch.fan.ts index 6aaf4cdd1d..316f2d2b12 100644 --- a/fees/touch.fan.ts +++ b/fees/touch.fan.ts @@ -24,7 +24,8 @@ const adapter: Adapter = { fetch: fetch, start: 1698494400, }, - } + }, + version: 2, } export default adapter; \ No newline at end of file diff --git a/fees/venus-finance.ts b/fees/venus-finance.ts index 90eb6a8ccb..1692d0e689 100644 --- a/fees/venus-finance.ts +++ b/fees/venus-finance.ts @@ -1,16 +1,3 @@ -import { Adapter, } from "../adapters/types" -import { CHAIN } from "../helpers/chains"; -import { getFeesExport } from "../helpers/compoundV2"; +import { compoundV2Export, } from "../helpers/compoundV2"; -const unitroller = "0xfD36E2c2a6789Db23113685031d7F16329158384"; - -const adapter: Adapter = { - adapter: { - [CHAIN.BSC]: { - fetch: getFeesExport(unitroller), - start: 1691798400, - }, - }, -}; - -export default adapter; +export default compoundV2Export({ bsc: '0xfD36E2c2a6789Db23113685031d7F16329158384'}); \ No newline at end of file diff --git a/fees/zapper-channels.ts b/fees/zapper-channels.ts index 511a73456b..c8b51001eb 100644 --- a/fees/zapper-channels.ts +++ b/fees/zapper-channels.ts @@ -11,7 +11,8 @@ const adapter: Adapter = { fetch: getFeesExport(FriendtechSharesAddress, [event_trade]), start: 1696204800, }, - } + }, + version: 2, } export default adapter; diff --git a/helpers/balancer.ts b/helpers/balancer.ts index 1971403c3c..25d71582fd 100644 --- a/helpers/balancer.ts +++ b/helpers/balancer.ts @@ -1,6 +1,4 @@ -import { Fetch, FetchOptions } from "../adapters/types"; -import * as sdk from "@defillama/sdk"; - +import { FetchOptions, FetchV2 } from "../adapters/types"; const event_pools_balance_change = "event PoolBalanceChanged(bytes32 indexed poolId,address indexed liquidityProvider,address[] tokens,int256[] deltas,uint256[] protocolFeeAmounts)" const event_flash_bot = "event FlashLoan(address indexed recipient,address indexed token,uint256 amount,uint256 feeAmount)" @@ -33,7 +31,7 @@ export async function getFees(vault: string, { createBalances, api, getLogs, }: } export function getFeesExport(vault: string, { revenueRatio = 0.25 }: { revenueRatio?: number } = {}) { - return (async (timestamp: number, _: any, options: FetchOptions) => { + return (async (options) => { const dailyFees = await getFees(vault, options) const { createBalances } = options const dailyRevenue = createBalances() @@ -42,6 +40,6 @@ export function getFeesExport(vault: string, { revenueRatio = 0.25 }: { revenueR dailySupplySideRevenue.addBalances(dailyFees) dailyRevenue.resizeBy(revenueRatio) dailySupplySideRevenue.resizeBy(1 - revenueRatio) - return { dailyFees, dailyRevenue, dailySupplySideRevenue, timestamp, } - }) as Fetch + return { dailyFees, dailyRevenue, dailySupplySideRevenue, } + }) as FetchV2 } \ No newline at end of file diff --git a/helpers/friend-tech.ts b/helpers/friend-tech.ts index 677b4c8a60..2faf3b69cb 100644 --- a/helpers/friend-tech.ts +++ b/helpers/friend-tech.ts @@ -1,4 +1,4 @@ -import { ChainBlocks, Fetch, FetchOptions } from "../adapters/types"; +import { FetchV2 } from "../adapters/types"; import ADDRESSES from "./coreAssets.json"; @@ -6,8 +6,8 @@ const event_trade = 'event Trade(address trader, address subject, bool isBuy, ui export function getFeesExport(FriendtechSharesAddress: string, eventAbis = [event_trade], { token = ADDRESSES.null, -}: { token?: string } = {}) { - return (async (timestamp: number, _: ChainBlocks, { getLogs, createBalances, }: FetchOptions) => { +}: { token?: string } = {}) { + return (async ({ getLogs, createBalances, }) => { const dailyFees = createBalances() const dailyRevenue = createBalances() for (const eventAbi of eventAbis) { @@ -22,6 +22,6 @@ export function getFeesExport(FriendtechSharesAddress: string, eventAbis = [even if (e.holderEthAmount) dailyFees.add(token, e.holderEthAmount) }) } - return { dailyFees, dailyRevenue, timestamp, } - }) as Fetch + return { dailyFees, dailyRevenue, } + }) as FetchV2 } \ No newline at end of file diff --git a/helpers/solidly.ts b/helpers/solidly.ts index bb685c2a46..ddc4a18272 100644 --- a/helpers/solidly.ts +++ b/helpers/solidly.ts @@ -1,5 +1,5 @@ import ADDRESSES from './coreAssets.json' -import { ChainBlocks, FetchOptions, FetchResultFees, } from "../adapters/types"; +import { FetchOptions, } from "../adapters/types"; const TOPIC_Notify = 'event NotifyReward(address indexed from, address indexed reward, uint indexed epoch, uint amount)'; @@ -19,7 +19,7 @@ const VOTER_ABI: TABI = { } export function getFeesExport({ VOTER_ADDRESS, FACTORY_ADDRESS, }: { VOTER_ADDRESS: string, FACTORY_ADDRESS: string }) { - return async (timestamp: number, _: ChainBlocks, { createBalances, api, getLogs, }: FetchOptions): Promise => { + return async ({ createBalances, api, getLogs, }: FetchOptions) => { const dailyFees = createBalances() const dailyRevenue = createBalances() @@ -70,6 +70,6 @@ export function getFeesExport({ VOTER_ADDRESS, FACTORY_ADDRESS, }: { VOTER_ADDRE }) }); - return { dailyFees, dailyRevenue: dailyRevenue, dailyHoldersRevenue: dailyRevenue, dailyBribesRevenue, timestamp, }; + return { dailyFees, dailyRevenue: dailyRevenue, dailyHoldersRevenue: dailyRevenue, dailyBribesRevenue, }; } } diff --git a/package-lock.json b/package-lock.json index 6601ea072c..4e997a6309 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2180,9 +2180,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", From 4dce8aa223a7d1674793f4b8ca39b6c2221c2f83 Mon Sep 17 00:00:00 2001 From: Anirudha619 Date: Tue, 19 Mar 2024 17:39:52 +0530 Subject: [PATCH 0156/1590] add sharpe-earn --- fees/sharpe-earn/index.ts | 135 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 fees/sharpe-earn/index.ts diff --git a/fees/sharpe-earn/index.ts b/fees/sharpe-earn/index.ts new file mode 100644 index 0000000000..00a1e3b8ee --- /dev/null +++ b/fees/sharpe-earn/index.ts @@ -0,0 +1,135 @@ +import {ethers} from 'ethers' +import * as sdk from "@defillama/sdk"; +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { promises } from 'dns'; +import { getBlock } from "../../helpers/getBlock"; +import BigNumber from 'bignumber.js'; + +const supportedERC20Tokens: Record = { + 42161 : [ + "0x5979D7b546E38E414F7E9822514be443A4800529", + "0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8", + "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1" + ], + 10 : [ + "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb", + "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D", + "0x4200000000000000000000000000000000000006" + ], + 8453: [ + '0x4200000000000000000000000000000000000006', + '0xc1cba3fcea344f92d9239c08c0568f6f2f0ee452', + '0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22' + ] +} + +const DSProxyAbi = `function owner() external view returns(address)` + +// check whether the address is DSProxy or not +async function checkIsValid(chainId: string, contractAddress: string): Promise { + try{ + + const data = await sdk.api2.abi.call({ + target: contractAddress, + abi: DSProxyAbi, + chain: chainId == "10" ? CHAIN.OPTIMISM : (chainId == "42161" ? CHAIN.ARBITRUM : CHAIN.BASE), + }) + + if(data == "0x0000000000000000000000000000000000000000") return false + + return true + } + catch (err){ + return false + } +} + +async function getFeeInRange( + currentTimestamp: number +): Promise<{ status: boolean; fee: any }> { + let totalAmount: { + [key: string]: any; + } = { + "0x5979D7b546E38E414F7E9822514be443A4800529": new BigNumber(0), + "0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8": new BigNumber(0), + "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1": new BigNumber(0), + "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb": new BigNumber(0), + "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D": new BigNumber(0), + "0x4200000000000000000000000000000000000006": new BigNumber(0), + '0xc1cba3fcea344f92d9239c08c0568f6f2f0ee452': new BigNumber(0), + '0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22': new BigNumber(0) + } + try{ + + const transferEventTopicId = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" + + // logic + for (const chainId in supportedERC20Tokens){ + for (const tokenAddress of supportedERC20Tokens[chainId]) { + const chain = chainId == "10" ? CHAIN.OPTIMISM : (chainId == "42161" ? CHAIN.ARBITRUM : CHAIN.BASE) + const toBlock = (await getBlock(currentTimestamp, chain, {})); + const fromBlock = (await getBlock(currentTimestamp - (24 * 60 * 60), chain, {})); + const tokenLogs: any[] = (await sdk.getEventLogs({ + target: tokenAddress, + toBlock: toBlock, + fromBlock: fromBlock, + chain: chain, + topic: transferEventTopicId, + topics: [transferEventTopicId] + })) + + const logsMatching = tokenLogs.filter(log => log.topics[2] === '0x00000000000000000000000010cc9d85441f27a500776357758961031218e3ae'); //fee receiver + let logsMatchingFrom:any[] = [] + for(const item of logsMatching){ + const valid = await checkIsValid(chainId, '0x' + item.topics[1].slice(26)) + if(valid) logsMatchingFrom.push(item) + } + // console.log("Log ", logsMatchingFrom.length) + logsMatchingFrom.forEach(log => { + const value = new BigNumber(log.data, 16); // Create a BigNumber from hexadecimal data + totalAmount[tokenAddress] = totalAmount[tokenAddress].plus(value); // Add the value to the total + }); + + } + } + + return { + status: true, + fee: totalAmount + } + } + catch(err){ + return { + status: false, + fee: totalAmount + } + } +} + +function fetch(){ + + return async (timestamp: number) => { + let {status, fee} = await getFeeInRange(timestamp) + for (const key in fee) { + fee[key] = fee[key].toString(); + } + + return { + dailyFees: fee, + timestamp: timestamp, + }; + }; +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.BASE]: { + fetch: fetch(), + runAtCurrTime: true, + start: async () => 1693288689, + } + }, + }; + + export default adapter; \ No newline at end of file From 400629c83ad1b847f9a21ca7b34f561d0679f06d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 19 Mar 2024 14:37:24 +0000 Subject: [PATCH 0157/1590] fix pass time when run test adaprer --- adapters/utils/runAdapter.ts | 4 ++-- cli/testAdapter.ts | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/adapters/utils/runAdapter.ts b/adapters/utils/runAdapter.ts index dc7092c8e4..66074a4547 100644 --- a/adapters/utils/runAdapter.ts +++ b/adapters/utils/runAdapter.ts @@ -63,7 +63,7 @@ export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurren const createBalances: () => Balances = () => { return new Balances({ timestamp: closeToCurrentTime ? undefined : timestamp, chain }) } - const toTimestamp = timestamp + const toTimestamp = timestamp - 1 const fromTimestamp = toTimestamp - ONE_DAY_IN_SECONDS const fromChainBlocks = {} const getFromBlock = async () => await getBlock(fromTimestamp, chain, fromChainBlocks) @@ -88,7 +88,7 @@ export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurren const api = new ChainApi({ chain, timestamp: withinTwoHours ? undefined : timestamp, block: toBlock }) const startOfDay = getUniqStartOfTodayTimestamp(new Date(toTimestamp * 1000)) const startTimestamp = fromTimestamp - const endTimestamp = toTimestamp + const endTimestamp = toTimestamp + 1 const getStartBlock = getFromBlock const getEndBlock = getToBlock const toApi = api diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index d2ffd22cbc..3a4384fdf2 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -25,18 +25,20 @@ function getTimestamp30MinutesAgo() { const adapterType: AdapterType = process.argv[2] as AdapterType const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[3]}`); (async () => { - const cleanDayTimestamp = process.argv[4] ? getUniqStartOfTodayTimestamp(new Date(+process.argv[4] * 1000 + 60 * 60 * 24 * 1000)) : getUniqStartOfTodayTimestamp(new Date()) - let endCleanDayTimestamp = cleanDayTimestamp - 1 + const cleanDayTimestamp = process.argv[4] ? Number(process.argv[4]) : getUniqStartOfTodayTimestamp(new Date()) + let endCleanDayTimestamp = cleanDayTimestamp; console.info(`🦙 Running ${process.argv[3].toUpperCase()} adapter 🦙`) console.info(`_______________________________________`) // Import module to test let module: Adapter = (await import(passedFile)).default const adapterVersion = module.version - let timestamp = endCleanDayTimestamp + let endTimestamp = endCleanDayTimestamp if (adapterVersion === 2) { - timestamp = (process.argv[4] ? Number(process.argv[4]) : getTimestamp30MinutesAgo()) // 1 day; + endTimestamp = (process.argv[4] ? Number(process.argv[4]) : getTimestamp30MinutesAgo()) // 1 day; } - console.info(`${upperCaseFirst(adapterType)} for ${formatTimestampAsDate(String(getUniqStartOfTodayTimestamp(new Date(timestamp * 1000))))}`) + + const runAt = adapterVersion === 2 ? endTimestamp : endTimestamp - 1; + console.info(`${upperCaseFirst(adapterType)} for ${formatTimestampAsDate(String(getUniqStartOfTodayTimestamp(new Date((runAt * 1000)))))}`) console.info(`_______________________________________\n`) // Get closest block to clean day. Only for EVM compatible ones. @@ -45,7 +47,7 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ const chainBlocks: ChainBlocks = {}; await Promise.all(allChains.map(async (chain) => { try { - const latestBlock = await getBlock(timestamp, chain, chainBlocks).catch((e: any) => console.error(`${e.message}; ${timestamp}, ${chain}`)) + const latestBlock = await getBlock(endTimestamp, chain, chainBlocks).catch((e: any) => console.error(`${e.message}; ${endTimestamp}, ${chain}`)) if (latestBlock) chainBlocks[chain] = latestBlock } catch (e) { console.log(e) } @@ -54,7 +56,7 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ if ("adapter" in module) { const adapter = module.adapter // Get adapter - const volumes = await runAdapter(adapter, timestamp, chainBlocks, undefined, undefined, { + const volumes = await runAdapter(adapter, endTimestamp, chainBlocks, undefined, undefined, { adapterVersion, }) printVolumes(volumes, adapter) @@ -62,7 +64,7 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ } else if ("breakdown" in module) { const breakdownAdapter = module.breakdown const allVolumes = await Promise.all(Object.entries(breakdownAdapter).map(([version, adapter]) => - runAdapter(adapter, timestamp, chainBlocks, undefined, undefined, { + runAdapter(adapter, endTimestamp, chainBlocks, undefined, undefined, { adapterVersion, }).then(res => ({ version, res })) )) From 18be39970b990059da5065037bac547d5bb13c3f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 19 Mar 2024 14:37:50 +0000 Subject: [PATCH 0158/1590] triger --- dexs/katana/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/katana/index.ts b/dexs/katana/index.ts index 96026377b5..53c017f571 100644 --- a/dexs/katana/index.ts +++ b/dexs/katana/index.ts @@ -1,8 +1,8 @@ const { RONIN } = require("../../helpers/chains"); import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; -/* -use axiedao.org proxy, because public endpoint +/* +use axiedao.org proxy, because public endpoint https://thegraph-v2.roninchain.com/subgraphs/name/axieinfinity/katana-subgraph-blue blocks requests from the DefiLlama server */ @@ -14,4 +14,4 @@ const adpters = univ2Adapter({ }); adpters.adapter[RONIN].start = 1635724800; -export default adpters; \ No newline at end of file +export default adpters; From fa53e4604bf48d69add372c154e974f56f5ae465 Mon Sep 17 00:00:00 2001 From: blablalf Date: Tue, 19 Mar 2024 17:35:32 +0100 Subject: [PATCH 0159/1590] fix an error with wbtc vault and add pt ezeth, pt rseth, pt weeth --- fees/amphor/index.ts | 131 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 127 insertions(+), 4 deletions(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index 16b0333330..71ac47dc7b 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -9,6 +9,9 @@ import { getBlock } from "../../helpers/getBlock"; const AmphorILHedgedUSDC_contractAddress: string = '0x3b022EdECD65b63288704a6fa33A8B9185b5096b'; const AmphorILHedgedWSTETH_contractAddress: string = '0x2791EB5807D69Fe10C02eED6B4DC12baC0701744'; const AmphorILHedgedWBTC_contractAddress: string = '0xC4A324fDF8a2495776B4d6cA46599B5a52f96489'; +const AmphorPTezETHVault_contractAddress: string = '0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1'; +const AmphorPTrsETHVault_contractAddress: string = '0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E'; +const AmphorPTweETHVault_contractAddress: string = '0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966'; const contractAbi: ethers.ContractInterface = [ { @@ -53,6 +56,9 @@ const contractAbi: ethers.ContractInterface = [ const AmphorILHedgedUSDC_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedUSDC_contractAddress, contractAbi); const AmphorILHedgedWSTETH_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedWSTETH_contractAddress, contractAbi); const AmphorILHedgedWBTC_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedWBTC_contractAddress, contractAbi); +const AmphorPTezETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTezETHVault_contractAddress, contractAbi); +const AmphorPTrsETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTrsETHVault_contractAddress, contractAbi); +const AmphorPTweETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTweETHVault_contractAddress, contractAbi); const methodology = { UserFees: "Include performance fees.", @@ -85,6 +91,18 @@ const data = async (timestamp: number): Promise => { address: AmphorILHedgedWBTC_contractAddress, topics: [ethers.utils.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; + const eventFilterPTezETH: EventFilter = { + address: AmphorPTezETHVault_contractAddress, + topics: [ethers.utils.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] + }; + const eventFilterPTrsETH: EventFilter = { + address: AmphorPTrsETHVault_contractAddress, + topics: [ethers.utils.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] + }; + const eventFilterPTweETH: EventFilter = { + address: AmphorPTweETHVault_contractAddress, + topics: [ethers.utils.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] + }; const eventsUSDC: ethers.Event[] = (await sdk.api.util.getLogs({ target: AmphorILHedgedUSDC_contractAddress, @@ -116,19 +134,61 @@ const data = async (timestamp: number): Promise => { chain: CHAIN.ETHEREUM, })).output as ethers.Event[]; + const eventsPTezETH: ethers.Event[] = (await sdk.api.util.getLogs({ + target: AmphorPTezETHVault_contractAddress, + topic: '', + topics: eventFilterPTezETH.topics as string[], + fromBlock: 18535914, + toBlock: toBlock, + keys: [], + chain: CHAIN.ETHEREUM, + })).output as ethers.Event[]; + + const eventsPTrsETH: ethers.Event[] = (await sdk.api.util.getLogs({ + target: AmphorPTrsETHVault_contractAddress, + topic: '', + topics: eventFilterPTrsETH.topics as string[], + fromBlock: 18535914, + toBlock: toBlock, + keys: [], + chain: CHAIN.ETHEREUM, + })).output as ethers.Event[]; + + const eventsPTweETH: ethers.Event[] = (await sdk.api.util.getLogs({ + target: AmphorPTrsETHVault_contractAddress, + topic: '', + topics: eventFilterPTweETH.topics as string[], + fromBlock: 18535914, + toBlock: toBlock, + keys: [], + chain: CHAIN.ETHEREUM, + })).output as ethers.Event[]; + let totalRevenueUSDC: BigNumber = ethers.BigNumber.from(0.0); let totalFeesUSDC: BigNumber = ethers.BigNumber.from(0.0); let totalRevenueWSTETH: BigNumber = ethers.BigNumber.from(0.0); let totalFeesWSTETH: BigNumber = ethers.BigNumber.from(0.0); let totalRevenueWBTC: BigNumber = ethers.BigNumber.from(0.0); let totalFeesWBTC: BigNumber = ethers.BigNumber.from(0.0); + let totalRevenuePTezETH: BigNumber = ethers.BigNumber.from(0.0); + let totalFeesPTezETH: BigNumber = ethers.BigNumber.from(0.0); + let totalRevenuePTrsETH: BigNumber = ethers.BigNumber.from(0.0); + let totalFeesPTrsETH: BigNumber = ethers.BigNumber.from(0.0); + let totalRevenuePTweETH: BigNumber = ethers.BigNumber.from(0.0); + let totalFeesPTweETH: BigNumber = ethers.BigNumber.from(0.0); let dailyFeesUSDC: BigNumber = ethers.BigNumber.from(0.0); let dailyFeesWSTETH: BigNumber = ethers.BigNumber.from(0.0); let dailyFeesWBTC: BigNumber = ethers.BigNumber.from(0.0); + let dailyFeesPTezETH: BigNumber = ethers.BigNumber.from(0.0); + let dailyFeesPTrsETH: BigNumber = ethers.BigNumber.from(0.0); + let dailyFeesPTweETH: BigNumber = ethers.BigNumber.from(0.0); let dailyRevenueUSDC: BigNumber = ethers.BigNumber.from(0.0); let dailyRevenueWSTETH: BigNumber = ethers.BigNumber.from(0.0); let dailyRevenueWBTC: BigNumber = ethers.BigNumber.from(0.0); + let dailyRevenuePTezETH: BigNumber = ethers.BigNumber.from(0.0); + let dailyRevenuePTrsETH: BigNumber = ethers.BigNumber.from(0.0); + let dailyRevenuePTweETH: BigNumber = ethers.BigNumber.from(0.0); eventsUSDC.forEach(res => { @@ -161,6 +221,36 @@ const data = async (timestamp: number): Promise => { } }); + eventsPTezETH.forEach(res => { + const event = AmphorPTezETHVault_contract.interface.parseLog(res); + totalRevenuePTezETH = totalRevenuePTezETH.add(ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance))); + totalFeesPTezETH = totalFeesPTezETH.add(event.args!.fees); + if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { + dailyFeesPTezETH = dailyFeesPTezETH.add(event.args!.fees); + dailyRevenuePTezETH = ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance)); + } + }); + + eventsPTrsETH.forEach(res => { + const event = AmphorPTrsETHVault_contract.interface.parseLog(res); + totalRevenuePTrsETH = totalRevenuePTrsETH.add(ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance))); + totalFeesPTrsETH = totalFeesPTrsETH.add(event.args!.fees); + if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { + dailyFeesPTrsETH = dailyFeesPTrsETH.add(event.args!.fees); + dailyRevenuePTrsETH = ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance)); + } + }); + + eventsPTweETH.forEach(res => { + const event = AmphorPTweETHVault_contract.interface.parseLog(res); + totalRevenuePTweETH = totalRevenuePTweETH.add(ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance))); + totalFeesPTweETH = totalFeesPTweETH.add(event.args!.fees); + if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { + dailyFeesPTweETH = dailyFeesPTweETH.add(event.args!.fees); + dailyRevenuePTweETH = ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance)); + } + }); + const totalFeesUSDCStr = ethers.utils.formatUnits(totalFeesUSDC, 6); // usdc has 6 decimals const totalRevenueUSDCStr = ethers.utils.formatUnits(totalRevenueUSDC, 6); // usdc has 6 decimals const dailyFeesUSDCStr = ethers.utils.formatUnits(dailyFeesUSDC, 6); // usdc has 6 decimals @@ -169,46 +259,79 @@ const data = async (timestamp: number): Promise => { const totalRevenueWSTETHStr = ethers.utils.formatUnits(totalRevenueWSTETH, 18); // wsteth has 18 decimals const dailyFeesWSTETHStr = ethers.utils.formatUnits(dailyFeesWSTETH, 18); // wsteth has 18 decimals const dailyRevenueWSTETHStr = ethers.utils.formatUnits(dailyRevenueWSTETH, 18); // wsteth has 18 decimals - const totalFeesWBTCStr = ethers.utils.formatUnits(totalFeesWSTETH, 8); // wbtc has 8 decimals - const totalRevenueWBTCStr = ethers.utils.formatUnits(totalRevenueWSTETH, 8); // wbtc has 8 decimals - const dailyFeesWBTCStr = ethers.utils.formatUnits(dailyFeesWSTETH, 8); // wbtc has 8 decimals - const dailyRevenueWBTCStr = ethers.utils.formatUnits(dailyRevenueWSTETH, 8); // wbtc has 8 decimals + const totalFeesWBTCStr = ethers.utils.formatUnits(totalFeesWBTC, 8); // wbtc has 8 decimals + const totalRevenueWBTCStr = ethers.utils.formatUnits(totalRevenueWBTC, 8); // wbtc has 8 decimals + const dailyFeesWBTCStr = ethers.utils.formatUnits(dailyFeesWBTC, 8); // wbtc has 8 decimals + const dailyRevenueWBTCStr = ethers.utils.formatUnits(dailyRevenueWBTC, 8); // wbtc has 8 decimals + const totalFeesPTezETHStr = ethers.utils.formatUnits(totalFeesPTezETH, 18); // PTezETH has 18 decimals + const totalRevenuePTezETHStr = ethers.utils.formatUnits(totalRevenuePTezETH, 18); // PTezETH has 18 decimals + const dailyFeesPTezETHStr = ethers.utils.formatUnits(dailyFeesPTezETH, 18); // PTezETH has 18 decimals + const dailyRevenuePTezETHStr = ethers.utils.formatUnits(dailyRevenuePTezETH, 18); // PTezETH has 8 decimals + const totalFeesPTrsETHStr = ethers.utils.formatUnits(totalFeesPTrsETH, 18); // PTrsETH has 18 decimals + const totalRevenuePTrsETHStr = ethers.utils.formatUnits(totalRevenuePTrsETH, 18); // PTrsETH has 18 decimals + const dailyFeesPTrsETHStr = ethers.utils.formatUnits(dailyFeesPTrsETH, 18); // PTrsETH has 18 decimals + const dailyRevenuePTrsETHStr = ethers.utils.formatUnits(dailyRevenuePTrsETH, 18); // PTrsETH has 18 decimals + const totalFeesPTweETHStr = ethers.utils.formatUnits(totalFeesPTweETH, 18); // PTweETH has 18 decimals + const totalRevenuePTweETHStr = ethers.utils.formatUnits(totalRevenuePTweETH, 18); // PTweETH has 18 decimals + const dailyFeesPTweETHStr = ethers.utils.formatUnits(dailyFeesPTweETH, 18); // PTweETH has 18 decimals + const dailyRevenuePTweETHStr = ethers.utils.formatUnits(dailyRevenuePTweETH, 18); // PTweETH has 18 decimals return { timestamp: timestamp, totalFees: { "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": totalFeesUSDCStr, "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": totalFeesWSTETHStr, "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": totalFeesWBTCStr, + "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": totalFeesPTezETHStr, + "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": totalFeesPTrsETHStr, + "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": totalFeesPTweETHStr, }, totalRevenue: { "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": totalRevenueUSDCStr, "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": totalRevenueWSTETHStr, "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": totalRevenueWBTCStr, + "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": totalRevenuePTezETHStr, + "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": totalRevenuePTrsETHStr, + "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": totalRevenuePTweETHStr, }, totalProtocolRevenue: { "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": totalFeesUSDCStr, "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": totalFeesWSTETHStr, "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": totalFeesWBTCStr, + "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": totalFeesPTezETHStr, + "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": totalFeesPTrsETHStr, + "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": totalFeesPTweETHStr, }, totalUserFees: { "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": totalFeesUSDCStr, "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": totalFeesWSTETHStr, "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": totalFeesWBTCStr, + "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": totalFeesPTezETHStr, + "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": totalFeesPTrsETHStr, + "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": totalFeesPTweETHStr, }, dailyFees: { "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": dailyFeesUSDCStr, "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": dailyFeesWSTETHStr, "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": dailyFeesWBTCStr, + "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": dailyFeesPTezETHStr, + "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": dailyFeesPTrsETHStr, + "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": dailyFeesPTweETHStr, }, dailyProtocolRevenue: { "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": dailyRevenueUSDCStr, "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": dailyRevenueWSTETHStr, "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": dailyRevenueWBTCStr, + "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": dailyRevenuePTezETHStr, + "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": dailyRevenuePTrsETHStr, + "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": dailyRevenuePTweETHStr, }, dailyRevenue: { "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": dailyRevenueUSDCStr, "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": dailyRevenueWSTETHStr, "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": dailyRevenueWBTCStr, + "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": dailyRevenuePTezETHStr, + "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": dailyRevenuePTrsETHStr, + "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": dailyRevenuePTweETHStr, } }; } From d8ce1f73a889eb37a97a2dc7c4593e077adbe581 Mon Sep 17 00:00:00 2001 From: blablalf Date: Tue, 19 Mar 2024 18:17:23 +0100 Subject: [PATCH 0160/1590] fixes --- fees/amphor/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index 71ac47dc7b..2872f19e9d 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -155,7 +155,7 @@ const data = async (timestamp: number): Promise => { })).output as ethers.Event[]; const eventsPTweETH: ethers.Event[] = (await sdk.api.util.getLogs({ - target: AmphorPTrsETHVault_contractAddress, + target: AmphorPTweETHVault_contractAddress, topic: '', topics: eventFilterPTweETH.topics as string[], fromBlock: 18535914, From 5188b2b3d9444a27a4712ea40930965c4ebe4c33 Mon Sep 17 00:00:00 2001 From: blablalf Date: Tue, 19 Mar 2024 18:36:39 +0100 Subject: [PATCH 0161/1590] updating script --- fees/amphor/index.ts | 357 +++++++++++++++++++------------------------ 1 file changed, 158 insertions(+), 199 deletions(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index 2872f19e9d..29d60f9954 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -1,5 +1,6 @@ +import ADDRESSES from '../../helpers/coreAssets.json' import * as sdk from "@defillama/sdk"; -import { BigNumber, ethers, EventFilter } from 'ethers'; +import { ethers, EventFilter } from 'ethers'; import { Adapter, FetchResultFees } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -13,45 +14,45 @@ const AmphorPTezETHVault_contractAddress: string = '0xeEE8aED1957ca1545a0508AfB5 const AmphorPTrsETHVault_contractAddress: string = '0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E'; const AmphorPTweETHVault_contractAddress: string = '0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966'; -const contractAbi: ethers.ContractInterface = [ +const contractAbi: ethers.InterfaceAbi = [ { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lastSavedBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "returnedAssets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fees", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalShares", - "type": "uint256" - } + { + "indexed": true, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lastSavedBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "returnedAssets", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalShares", + "type": "uint256" + } ], "name": "EpochEnd", "type": "event" }, -]; +] const AmphorILHedgedUSDC_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedUSDC_contractAddress, contractAbi); const AmphorILHedgedWSTETH_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedWSTETH_contractAddress, contractAbi); @@ -81,15 +82,15 @@ const data = async (timestamp: number): Promise => { const eventFilterUSDC: EventFilter = { address: AmphorILHedgedUSDC_contractAddress, - topics: [ethers.utils.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] + topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; const eventFilterWSTETH: EventFilter = { address: AmphorILHedgedWSTETH_contractAddress, - topics: [ethers.utils.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] + topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; const eventFilterWBTC: EventFilter = { address: AmphorILHedgedWBTC_contractAddress, - topics: [ethers.utils.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] + topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; const eventFilterPTezETH: EventFilter = { address: AmphorPTezETHVault_contractAddress, @@ -104,235 +105,193 @@ const data = async (timestamp: number): Promise => { topics: [ethers.utils.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; - const eventsUSDC: ethers.Event[] = (await sdk.api.util.getLogs({ + const eventsUSDC = (await sdk.getEventLogs({ target: AmphorILHedgedUSDC_contractAddress, - topic: '', topics: eventFilterUSDC.topics as string[], fromBlock: 18299242, toBlock: toBlock, - keys: [], chain: CHAIN.ETHEREUM, - })).output as ethers.Event[]; + })) as ethers.Log[]; - const eventsWSTETH: ethers.Event[] = (await sdk.api.util.getLogs({ + const eventsWSTETH = (await sdk.getEventLogs({ target: AmphorILHedgedWSTETH_contractAddress, - topic: '', topics: eventFilterWSTETH.topics as string[], fromBlock: 18535914, toBlock: toBlock, - keys: [], chain: CHAIN.ETHEREUM, - })).output as ethers.Event[]; + })) as ethers.Log[]; - const eventsWBTC: ethers.Event[] = (await sdk.api.util.getLogs({ + const eventsWBTC = (await sdk.getEventLogs({ target: AmphorILHedgedWBTC_contractAddress, - topic: '', topics: eventFilterWBTC.topics as string[], fromBlock: 18535914, toBlock: toBlock, - keys: [], chain: CHAIN.ETHEREUM, - })).output as ethers.Event[]; + })) as ethers.Log[]; - const eventsPTezETH: ethers.Event[] = (await sdk.api.util.getLogs({ + const eventsPTezETH: ethers.Event[] = (await sdk.getEventLogs({ target: AmphorPTezETHVault_contractAddress, - topic: '', topics: eventFilterPTezETH.topics as string[], fromBlock: 18535914, toBlock: toBlock, - keys: [], chain: CHAIN.ETHEREUM, - })).output as ethers.Event[]; + })) as ethers.Log[]; - const eventsPTrsETH: ethers.Event[] = (await sdk.api.util.getLogs({ + const eventsPTrsETH: ethers.Event[] = (await sdk.getEventLogs({ target: AmphorPTrsETHVault_contractAddress, - topic: '', topics: eventFilterPTrsETH.topics as string[], fromBlock: 18535914, toBlock: toBlock, - keys: [], chain: CHAIN.ETHEREUM, - })).output as ethers.Event[]; + })) as ethers.Log[]; - const eventsPTweETH: ethers.Event[] = (await sdk.api.util.getLogs({ + const eventsPTweETH: ethers.Event[] = (await sdk.getEventLogs({ target: AmphorPTweETHVault_contractAddress, - topic: '', topics: eventFilterPTweETH.topics as string[], fromBlock: 18535914, toBlock: toBlock, - keys: [], chain: CHAIN.ETHEREUM, - })).output as ethers.Event[]; + })) as ethers.Log[]; - let totalRevenueUSDC: BigNumber = ethers.BigNumber.from(0.0); - let totalFeesUSDC: BigNumber = ethers.BigNumber.from(0.0); - let totalRevenueWSTETH: BigNumber = ethers.BigNumber.from(0.0); - let totalFeesWSTETH: BigNumber = ethers.BigNumber.from(0.0); - let totalRevenueWBTC: BigNumber = ethers.BigNumber.from(0.0); - let totalFeesWBTC: BigNumber = ethers.BigNumber.from(0.0); - let totalRevenuePTezETH: BigNumber = ethers.BigNumber.from(0.0); - let totalFeesPTezETH: BigNumber = ethers.BigNumber.from(0.0); - let totalRevenuePTrsETH: BigNumber = ethers.BigNumber.from(0.0); - let totalFeesPTrsETH: BigNumber = ethers.BigNumber.from(0.0); - let totalRevenuePTweETH: BigNumber = ethers.BigNumber.from(0.0); - let totalFeesPTweETH: BigNumber = ethers.BigNumber.from(0.0); - - let dailyFeesUSDC: BigNumber = ethers.BigNumber.from(0.0); - let dailyFeesWSTETH: BigNumber = ethers.BigNumber.from(0.0); - let dailyFeesWBTC: BigNumber = ethers.BigNumber.from(0.0); - let dailyFeesPTezETH: BigNumber = ethers.BigNumber.from(0.0); - let dailyFeesPTrsETH: BigNumber = ethers.BigNumber.from(0.0); - let dailyFeesPTweETH: BigNumber = ethers.BigNumber.from(0.0); - let dailyRevenueUSDC: BigNumber = ethers.BigNumber.from(0.0); - let dailyRevenueWSTETH: BigNumber = ethers.BigNumber.from(0.0); - let dailyRevenueWBTC: BigNumber = ethers.BigNumber.from(0.0); - let dailyRevenuePTezETH: BigNumber = ethers.BigNumber.from(0.0); - let dailyRevenuePTrsETH: BigNumber = ethers.BigNumber.from(0.0); - let dailyRevenuePTweETH: BigNumber = ethers.BigNumber.from(0.0); + let totalRevenueUSDC = BigInt(0); + let totalFeesUSDC = BigInt(0); + let totalRevenueWSTETH = BigInt(0); + let totalFeesWSTETH = BigInt(0); + let totalRevenueWBTC = BigInt(0); + let totalFeesWBTC = BigInt(0); + let totalRevenuePTezETH = BigInt(0); + let totalFeesPTezETH = BigInt(0); + let totalRevenuePTrsETH = BigInt(0); + let totalFeesPTrsETH = BigInt(0); + let totalRevenuePTweETH = BigInt(0); + let totalFeesPTweETH = BigInt(0); + let dailyFeesUSDC = BigInt(0); + let dailyFeesWSTETH = BigInt(0); + let dailyFeesWBTC = BigInt(0); + let dailyFeesPTezETH = BigInt(0); + let dailyFeesPTrsETH = BigInt(0); + let dailyFeesPTweETH = BigInt(0); + let dailyRevenueUSDC = BigInt(0); + let dailyRevenueWSTETH = BigInt(0); + let dailyRevenueWBTC = BigInt(0); + let dailyRevenuePTezETH = BigInt(0); + let dailyRevenuePTrsETH = BigInt(0); + let dailyRevenuePTweETH = BigInt(0); eventsUSDC.forEach(res => { - const event = AmphorILHedgedUSDC_contract.interface.parseLog(res); - totalRevenueUSDC = totalRevenueUSDC.add(ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance))); - totalFeesUSDC = totalFeesUSDC.add(event.args!.fees); - if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { - dailyFeesUSDC = dailyFeesUSDC.add(event.args!.fees); - dailyRevenueUSDC = ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance)); + const event = AmphorILHedgedUSDC_contract.interface.parseLog(res as any); + totalRevenueUSDC += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) + totalFeesUSDC += BigInt(event!.args.fees) + if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { + dailyFeesUSDC += BigInt(event!.args.fees) + dailyRevenueUSDC = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) } }); eventsWSTETH.forEach(res => { - const event = AmphorILHedgedWSTETH_contract.interface.parseLog(res); - totalRevenueWSTETH = totalRevenueWSTETH.add(ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance))); - totalFeesWSTETH = totalFeesWSTETH.add(event.args!.fees); - if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { - dailyFeesWSTETH = dailyFeesWSTETH.add(event.args!.fees); - dailyRevenueWSTETH = ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance)); + const event = AmphorILHedgedWSTETH_contract.interface.parseLog(res as any); + totalRevenueWSTETH += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) + totalFeesWSTETH += BigInt(event!.args.fees) + if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { + dailyFeesWSTETH += BigInt(event!.args.fees) + dailyRevenueWSTETH = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) } }); eventsWBTC.forEach(res => { - const event = AmphorILHedgedWBTC_contract.interface.parseLog(res); - totalRevenueWBTC = totalRevenueWBTC.add(ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance))); - totalFeesWBTC = totalFeesWBTC.add(event.args!.fees); - if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { - dailyFeesWBTC = dailyFeesWBTC.add(event.args!.fees); - dailyRevenueWBTC = ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance)); + const event = AmphorILHedgedWBTC_contract.interface.parseLog(res as any); + totalRevenueWBTC += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) + totalFeesWBTC += BigInt(event!.args.fees) + if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { + dailyFeesWBTC += BigInt(event!.args.fees) + dailyRevenueWBTC = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) } }); eventsPTezETH.forEach(res => { - const event = AmphorPTezETHVault_contract.interface.parseLog(res); - totalRevenuePTezETH = totalRevenuePTezETH.add(ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance))); - totalFeesPTezETH = totalFeesPTezETH.add(event.args!.fees); + const event = AmphorPTezETHVault_contract.interface.parseLog(res as any); + totalRevenuePTezETH += BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); + totalFeesPTezETH += BigInt(event.args!.fees); if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { - dailyFeesPTezETH = dailyFeesPTezETH.add(event.args!.fees); - dailyRevenuePTezETH = ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance)); + dailyFeesPTezETH += BigInt(event.args!.fees); + dailyRevenuePTezETH = BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); } }); eventsPTrsETH.forEach(res => { - const event = AmphorPTrsETHVault_contract.interface.parseLog(res); - totalRevenuePTrsETH = totalRevenuePTrsETH.add(ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance))); - totalFeesPTrsETH = totalFeesPTrsETH.add(event.args!.fees); + const event = AmphorPTrsETHVault_contract.interface.parseLog(res as any); + totalRevenuePTrsETH += BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); + totalFeesPTrsETH += BigInt(event.args!.fees); if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { - dailyFeesPTrsETH = dailyFeesPTrsETH.add(event.args!.fees); - dailyRevenuePTrsETH = ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance)); + dailyFeesPTrsETH += BigInt(event.args!.fees); + dailyRevenuePTrsETH = BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); } }); eventsPTweETH.forEach(res => { - const event = AmphorPTweETHVault_contract.interface.parseLog(res); - totalRevenuePTweETH = totalRevenuePTweETH.add(ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance))); - totalFeesPTweETH = totalFeesPTweETH.add(event.args!.fees); + const event = AmphorPTweETHVault_contract.interface.parseLog(res as any); + totalRevenuePTweETH += BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); + totalFeesPTweETH += BigInt(event.args!.fees); if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { - dailyFeesPTweETH = dailyFeesPTweETH.add(event.args!.fees); - dailyRevenuePTweETH = ethers.BigNumber.from(event.args!.returnedAssets).sub(ethers.BigNumber.from(event.args!.lastSavedBalance)); + dailyFeesPTweETH += BigInt(event.args!.fees); + dailyRevenuePTweETH = BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); } }); - const totalFeesUSDCStr = ethers.utils.formatUnits(totalFeesUSDC, 6); // usdc has 6 decimals - const totalRevenueUSDCStr = ethers.utils.formatUnits(totalRevenueUSDC, 6); // usdc has 6 decimals - const dailyFeesUSDCStr = ethers.utils.formatUnits(dailyFeesUSDC, 6); // usdc has 6 decimals - const dailyRevenueUSDCStr = ethers.utils.formatUnits(dailyRevenueUSDC, 6); // usdc has 6 decimals - const totalFeesWSTETHStr = ethers.utils.formatUnits(totalFeesWSTETH, 18); // wsteth has 18 decimals - const totalRevenueWSTETHStr = ethers.utils.formatUnits(totalRevenueWSTETH, 18); // wsteth has 18 decimals - const dailyFeesWSTETHStr = ethers.utils.formatUnits(dailyFeesWSTETH, 18); // wsteth has 18 decimals - const dailyRevenueWSTETHStr = ethers.utils.formatUnits(dailyRevenueWSTETH, 18); // wsteth has 18 decimals - const totalFeesWBTCStr = ethers.utils.formatUnits(totalFeesWBTC, 8); // wbtc has 8 decimals - const totalRevenueWBTCStr = ethers.utils.formatUnits(totalRevenueWBTC, 8); // wbtc has 8 decimals - const dailyFeesWBTCStr = ethers.utils.formatUnits(dailyFeesWBTC, 8); // wbtc has 8 decimals - const dailyRevenueWBTCStr = ethers.utils.formatUnits(dailyRevenueWBTC, 8); // wbtc has 8 decimals - const totalFeesPTezETHStr = ethers.utils.formatUnits(totalFeesPTezETH, 18); // PTezETH has 18 decimals - const totalRevenuePTezETHStr = ethers.utils.formatUnits(totalRevenuePTezETH, 18); // PTezETH has 18 decimals - const dailyFeesPTezETHStr = ethers.utils.formatUnits(dailyFeesPTezETH, 18); // PTezETH has 18 decimals - const dailyRevenuePTezETHStr = ethers.utils.formatUnits(dailyRevenuePTezETH, 18); // PTezETH has 8 decimals - const totalFeesPTrsETHStr = ethers.utils.formatUnits(totalFeesPTrsETH, 18); // PTrsETH has 18 decimals - const totalRevenuePTrsETHStr = ethers.utils.formatUnits(totalRevenuePTrsETH, 18); // PTrsETH has 18 decimals - const dailyFeesPTrsETHStr = ethers.utils.formatUnits(dailyFeesPTrsETH, 18); // PTrsETH has 18 decimals - const dailyRevenuePTrsETHStr = ethers.utils.formatUnits(dailyRevenuePTrsETH, 18); // PTrsETH has 18 decimals - const totalFeesPTweETHStr = ethers.utils.formatUnits(totalFeesPTweETH, 18); // PTweETH has 18 decimals - const totalRevenuePTweETHStr = ethers.utils.formatUnits(totalRevenuePTweETH, 18); // PTweETH has 18 decimals - const dailyFeesPTweETHStr = ethers.utils.formatUnits(dailyFeesPTweETH, 18); // PTweETH has 18 decimals - const dailyRevenuePTweETHStr = ethers.utils.formatUnits(dailyRevenuePTweETH, 18); // PTweETH has 18 decimals + const TOKENS = { + USDC: ADDRESSES.ethereum.USDC, + WSTETH: ADDRESSES.ethereum.WSTETH, + WBTC: ADDRESSES.ethereum.WBTC, + PTezETH: "0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1", + PTrsETH: "0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E", + PTweETH: "0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966", + } + const totalFees = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); + const totalRevenue = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); + const dailyFees = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); + const dailyRevenue = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); + + totalFees.add(TOKENS.USDC, totalFeesUSDC.toString()); + totalFees.add(TOKENS.WSTETH, totalFeesWSTETH.toString()); + totalFees.add(TOKENS.WBTC, totalFeesWBTC.toString()); + totalFees.add(TOKENS.PTezETH, totalFeesPTezETH.toString()); + totalFees.add(TOKENS.PTrsETH, totalFeesPTrsETH.toString()); + totalFees.add(TOKENS.PTweETH, totalFeesPTweETH.toString()); + + totalRevenue.add(TOKENS.USDC, totalRevenueUSDC.toString()); + totalRevenue.add(TOKENS.WSTETH, totalRevenueWSTETH.toString()); + totalRevenue.add(TOKENS.WBTC, totalRevenueWBTC.toString()); + totalRevenue.add(TOKENS.PTezETH, totalRevenuePTezETH.toString()); + totalRevenue.add(TOKENS.PTrsETH, totalRevenuePTrsETH.toString()); + totalRevenue.add(TOKENS.PTweETH, totalRevenuePTweETH.toString()); + + dailyFees.add(TOKENS.USDC, dailyFeesUSDC.toString()); + dailyFees.add(TOKENS.WSTETH, dailyFeesWSTETH.toString()); + dailyFees.add(TOKENS.WBTC, dailyFeesWBTC.toString()); + dailyFees.add(TOKENS.PTezETH, dailyFeesPTezETH.toString()); + dailyFees.add(TOKENS.PTrsETH, dailyFeesPTrsETH.toString()); + dailyFees.add(TOKENS.PTweETH, dailyFeesPTweETH.toString()); + + dailyRevenue.add(TOKENS.USDC, dailyRevenueUSDC.toString()); + dailyRevenue.add(TOKENS.WSTETH, dailyRevenueWSTETH.toString()); + dailyRevenue.add(TOKENS.WBTC, dailyRevenueWBTC.toString()); + dailyRevenue.add(TOKENS.PTezETH, dailyRevenuePTezETH.toString()); + dailyRevenue.add(TOKENS.PTrsETH, dailyRevenuePTrsETH.toString()); + dailyRevenue.add(TOKENS.PTweETH, dailyRevenuePTweETH.toString()); + + + const totalFeesNumber = Number(await totalFees.getUSDValue()).toFixed(0); + const dailyRevenueNumber = Number(await dailyRevenue.getUSDValue()).toFixed(0); return { timestamp: timestamp, - totalFees: { - "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": totalFeesUSDCStr, - "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": totalFeesWSTETHStr, - "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": totalFeesWBTCStr, - "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": totalFeesPTezETHStr, - "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": totalFeesPTrsETHStr, - "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": totalFeesPTweETHStr, - }, - totalRevenue: { - "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": totalRevenueUSDCStr, - "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": totalRevenueWSTETHStr, - "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": totalRevenueWBTCStr, - "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": totalRevenuePTezETHStr, - "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": totalRevenuePTrsETHStr, - "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": totalRevenuePTweETHStr, - }, - totalProtocolRevenue: { - "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": totalFeesUSDCStr, - "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": totalFeesWSTETHStr, - "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": totalFeesWBTCStr, - "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": totalFeesPTezETHStr, - "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": totalFeesPTrsETHStr, - "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": totalFeesPTweETHStr, - }, - totalUserFees: { - "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": totalFeesUSDCStr, - "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": totalFeesWSTETHStr, - "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": totalFeesWBTCStr, - "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": totalFeesPTezETHStr, - "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": totalFeesPTrsETHStr, - "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": totalFeesPTweETHStr, - }, - dailyFees: { - "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": dailyFeesUSDCStr, - "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": dailyFeesWSTETHStr, - "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": dailyFeesWBTCStr, - "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": dailyFeesPTezETHStr, - "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": dailyFeesPTrsETHStr, - "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": dailyFeesPTweETHStr, - }, - dailyProtocolRevenue: { - "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": dailyRevenueUSDCStr, - "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": dailyRevenueWSTETHStr, - "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": dailyRevenueWBTCStr, - "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": dailyRevenuePTezETHStr, - "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": dailyRevenuePTrsETHStr, - "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": dailyRevenuePTweETHStr, - }, - dailyRevenue: { - "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": dailyRevenueUSDCStr, - "ethereum:0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": dailyRevenueWSTETHStr, - "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": dailyRevenueWBTCStr, - "ethereum:0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1": dailyRevenuePTezETHStr, - "ethereum:0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E": dailyRevenuePTrsETHStr, - "ethereum:0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966": dailyRevenuePTweETHStr, - } + totalFees: totalFeesNumber, + totalRevenue: Number(await totalRevenue.getUSDValue()).toFixed(0), + totalProtocolRevenue: totalFeesNumber, + totalUserFees: totalFeesNumber, + dailyFees: Number(await dailyFees.getUSDValue()).toFixed(0), + dailyProtocolRevenue: dailyRevenueNumber, + dailyRevenue: dailyRevenueNumber, }; } @@ -340,7 +299,7 @@ const adapter: Adapter = { adapter: { [ETHEREUM]: { fetch: data, - start: async () => 1696611600, + start: 1696611600, meta: { methodology } From eb275fd993e11ef4a3f90eee38d3f60d417e45b5 Mon Sep 17 00:00:00 2001 From: Anirudha619 Date: Wed, 20 Mar 2024 00:56:10 +0530 Subject: [PATCH 0162/1590] fixes --- fees/sharpe-earn/index.ts | 111 ++++++++------------------------------ 1 file changed, 21 insertions(+), 90 deletions(-) diff --git a/fees/sharpe-earn/index.ts b/fees/sharpe-earn/index.ts index 00a1e3b8ee..a5701d8e19 100644 --- a/fees/sharpe-earn/index.ts +++ b/fees/sharpe-earn/index.ts @@ -1,10 +1,10 @@ import {ethers} from 'ethers' import * as sdk from "@defillama/sdk"; -import { SimpleAdapter } from "../../adapters/types"; +import { SimpleAdapter, FetchOptions, ChainBlocks } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { promises } from 'dns'; import { getBlock } from "../../helpers/getBlock"; -import BigNumber from 'bignumber.js'; +import { addTokensReceived } from '../../helpers/token'; const supportedERC20Tokens: Record = { 42161 : [ @@ -24,96 +24,17 @@ const supportedERC20Tokens: Record = { ] } -const DSProxyAbi = `function owner() external view returns(address)` - -// check whether the address is DSProxy or not -async function checkIsValid(chainId: string, contractAddress: string): Promise { - try{ - - const data = await sdk.api2.abi.call({ - target: contractAddress, - abi: DSProxyAbi, - chain: chainId == "10" ? CHAIN.OPTIMISM : (chainId == "42161" ? CHAIN.ARBITRUM : CHAIN.BASE), - }) - - if(data == "0x0000000000000000000000000000000000000000") return false - - return true - } - catch (err){ - return false - } -} - -async function getFeeInRange( - currentTimestamp: number -): Promise<{ status: boolean; fee: any }> { - let totalAmount: { - [key: string]: any; - } = { - "0x5979D7b546E38E414F7E9822514be443A4800529": new BigNumber(0), - "0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8": new BigNumber(0), - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1": new BigNumber(0), - "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb": new BigNumber(0), - "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D": new BigNumber(0), - "0x4200000000000000000000000000000000000006": new BigNumber(0), - '0xc1cba3fcea344f92d9239c08c0568f6f2f0ee452': new BigNumber(0), - '0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22': new BigNumber(0) - } - try{ - - const transferEventTopicId = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" - - // logic - for (const chainId in supportedERC20Tokens){ - for (const tokenAddress of supportedERC20Tokens[chainId]) { - const chain = chainId == "10" ? CHAIN.OPTIMISM : (chainId == "42161" ? CHAIN.ARBITRUM : CHAIN.BASE) - const toBlock = (await getBlock(currentTimestamp, chain, {})); - const fromBlock = (await getBlock(currentTimestamp - (24 * 60 * 60), chain, {})); - const tokenLogs: any[] = (await sdk.getEventLogs({ - target: tokenAddress, - toBlock: toBlock, - fromBlock: fromBlock, - chain: chain, - topic: transferEventTopicId, - topics: [transferEventTopicId] - })) - - const logsMatching = tokenLogs.filter(log => log.topics[2] === '0x00000000000000000000000010cc9d85441f27a500776357758961031218e3ae'); //fee receiver - let logsMatchingFrom:any[] = [] - for(const item of logsMatching){ - const valid = await checkIsValid(chainId, '0x' + item.topics[1].slice(26)) - if(valid) logsMatchingFrom.push(item) - } - // console.log("Log ", logsMatchingFrom.length) - logsMatchingFrom.forEach(log => { - const value = new BigNumber(log.data, 16); // Create a BigNumber from hexadecimal data - totalAmount[tokenAddress] = totalAmount[tokenAddress].plus(value); // Add the value to the total - }); - - } - } - - return { - status: true, - fee: totalAmount - } - } - catch(err){ - return { - status: false, - fee: totalAmount - } - } -} - function fetch(){ - return async (timestamp: number) => { - let {status, fee} = await getFeeInRange(timestamp) - for (const key in fee) { - fee[key] = fee[key].toString(); - } + return async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { + const tokenlist = options.chain == CHAIN.ARBITRUM + ? supportedERC20Tokens[42161] + : ( + options.chain == CHAIN.OPTIMISM + ? supportedERC20Tokens[10] + : supportedERC20Tokens[8453] + ) + const fee = await addTokensReceived({ tokens: tokenlist, options, target: '0x10cc9d85441f27a500776357758961031218e3ae' }) return { dailyFees: fee, @@ -124,6 +45,16 @@ function fetch(){ const adapter: SimpleAdapter = { adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetch(), + runAtCurrTime: true, + start: async () => 1693288689, + }, + [CHAIN.OPTIMISM]: { + fetch: fetch(), + runAtCurrTime: true, + start: async () => 1693288689, + }, [CHAIN.BASE]: { fetch: fetch(), runAtCurrTime: true, From eb9af721607f7e723ea174971048203baeaedf3c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 20 Mar 2024 01:18:24 +0000 Subject: [PATCH 0163/1590] fix show time when run adapter --- cli/testAdapter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index 3a4384fdf2..33116dfea4 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -37,7 +37,7 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ endTimestamp = (process.argv[4] ? Number(process.argv[4]) : getTimestamp30MinutesAgo()) // 1 day; } - const runAt = adapterVersion === 2 ? endTimestamp : endTimestamp - 1; + const runAt = adapterVersion === 2 ? endTimestamp : process.argv[4] ? Number(process.argv[4]) : endTimestamp - 1; console.info(`${upperCaseFirst(adapterType)} for ${formatTimestampAsDate(String(getUniqStartOfTodayTimestamp(new Date((runAt * 1000)))))}`) console.info(`_______________________________________\n`) From 9088c536dbaa6697b2a28a6655b7e37f9e085711 Mon Sep 17 00:00:00 2001 From: PatrickRoy Date: Wed, 20 Mar 2024 11:10:33 +0300 Subject: [PATCH 0164/1590] Kinetix Derivatives V2 subgraph urls updated. --- dexs/kinetix-derivatives-v2/index.ts | 2 +- fees/kinetix-derivatives-v2/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/kinetix-derivatives-v2/index.ts b/dexs/kinetix-derivatives-v2/index.ts index 58b9b2dda4..e863b2c09b 100644 --- a/dexs/kinetix-derivatives-v2/index.ts +++ b/dexs/kinetix-derivatives-v2/index.ts @@ -5,7 +5,7 @@ import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; const kinetixPerpsV2Subgraph = - "https://kava-graph-node.metavault.trade/subgraphs/name/kinetixfi/perpv2"; + "https://kava-graph-node.metavault.trade/subgraphs/name/kinetixfi/kava-trade"; interface IReferralRecord { volume: string; // Assuming volume is a string that represents a number diff --git a/fees/kinetix-derivatives-v2/index.ts b/fees/kinetix-derivatives-v2/index.ts index e135570049..0e225b2abb 100644 --- a/fees/kinetix-derivatives-v2/index.ts +++ b/fees/kinetix-derivatives-v2/index.ts @@ -8,7 +8,7 @@ import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints = { [CHAIN.KAVA]: - "https://kava-graph-node.metavault.trade/subgraphs/name/kinetixfi/perpv2", + "https://kava-graph-node.metavault.trade/subgraphs/name/kinetixfi/kava-trade", }; const graphs = (graphUrls: ChainEndpoints) => { From 19b5fea8ace5907f2b17a3476186abb1db26bd40 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 20 Mar 2024 10:42:27 +0000 Subject: [PATCH 0165/1590] morpho --- fees/morpho/index.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/fees/morpho/index.ts b/fees/morpho/index.ts index a87c8a5d9c..9a2c1d3607 100644 --- a/fees/morpho/index.ts +++ b/fees/morpho/index.ts @@ -41,11 +41,9 @@ const fetch: FetchV2 = async (options) => { dailySupplySideRevenue: Balances; dailyUserFees: Balances; dailyFees?: Balances; - dailyRevenue: Balances; } = { dailySupplySideRevenue: new Balances({ chain }), dailyUserFees: new Balances({ chain }), - dailyRevenue: new Balances({ chain }), }; res.markets.items.map((m: Market) => { @@ -57,7 +55,6 @@ const fetch: FetchV2 = async (options) => { marketData.dailySupplySideRevenue.add(address, supply); marketData.dailyUserFees.add(address, borrow); - marketData.dailyRevenue.add(address, borrow - supply); }); marketData.dailyFees = marketData.dailyUserFees; From 089b14477eb85069fe4395848b744155e8b468a8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 20 Mar 2024 13:06:37 +0000 Subject: [PATCH 0166/1590] git mapconfig --- fees/sharpe-earn/index.ts | 104 ++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 56 deletions(-) diff --git a/fees/sharpe-earn/index.ts b/fees/sharpe-earn/index.ts index a5701d8e19..756a77b22c 100644 --- a/fees/sharpe-earn/index.ts +++ b/fees/sharpe-earn/index.ts @@ -1,66 +1,58 @@ -import {ethers} from 'ethers' +import { ethers } from "ethers"; import * as sdk from "@defillama/sdk"; import { SimpleAdapter, FetchOptions, ChainBlocks } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { promises } from 'dns'; +import { promises } from "dns"; import { getBlock } from "../../helpers/getBlock"; -import { addTokensReceived } from '../../helpers/token'; +import { addTokensReceived } from "../../helpers/token"; -const supportedERC20Tokens: Record = { - 42161 : [ - "0x5979D7b546E38E414F7E9822514be443A4800529", - "0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8", - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1" - ], - 10 : [ - "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb", - "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D", - "0x4200000000000000000000000000000000000006" - ], - 8453: [ - '0x4200000000000000000000000000000000000006', - '0xc1cba3fcea344f92d9239c08c0568f6f2f0ee452', - '0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22' - ] -} +const supportedERC20Tokens: Record = { + [CHAIN.ARBITRUM]: [ + "0x5979D7b546E38E414F7E9822514be443A4800529", + "0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8", + "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", + ], + [CHAIN.OPTIMISM]: [ + "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb", + "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D", + "0x4200000000000000000000000000000000000006", + ], + [CHAIN.BASE]: [ + "0x4200000000000000000000000000000000000006", + "0xc1cba3fcea344f92d9239c08c0568f6f2f0ee452", + "0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22", + ], +}; -function fetch(){ +const fetch = async (options: FetchOptions) => { + const tokenlist = supportedERC20Tokens[options.chain as CHAIN]; + const fee = await addTokensReceived({ + tokens: tokenlist, + options, + target: "0x10cc9d85441f27a500776357758961031218e3ae", + }); - return async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { - const tokenlist = options.chain == CHAIN.ARBITRUM - ? supportedERC20Tokens[42161] - : ( - options.chain == CHAIN.OPTIMISM - ? supportedERC20Tokens[10] - : supportedERC20Tokens[8453] - ) - const fee = await addTokensReceived({ tokens: tokenlist, options, target: '0x10cc9d85441f27a500776357758961031218e3ae' }) - - return { - dailyFees: fee, - timestamp: timestamp, - }; - }; -} + return { + dailyFees: fee, + }; +}; const adapter: SimpleAdapter = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch: fetch(), - runAtCurrTime: true, - start: async () => 1693288689, - }, - [CHAIN.OPTIMISM]: { - fetch: fetch(), - runAtCurrTime: true, - start: async () => 1693288689, - }, - [CHAIN.BASE]: { - fetch: fetch(), - runAtCurrTime: true, - start: async () => 1693288689, - } + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetch, + start: async () => 1710720000, }, - }; - - export default adapter; \ No newline at end of file + [CHAIN.OPTIMISM]: { + fetch: fetch, + start: async () => 1710720000, + }, + [CHAIN.BASE]: { + fetch: fetch, + start: async () => 1710720000, + }, + }, +}; + +export default adapter; From f91935319c09d5eb1f9f9b1136948d3762c6fae7 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 20 Mar 2024 13:26:26 +0000 Subject: [PATCH 0167/1590] add base gun bot --- fees/banana-gun-trading.ts | 52 +++++++++++--------------------------- 1 file changed, 15 insertions(+), 37 deletions(-) diff --git a/fees/banana-gun-trading.ts b/fees/banana-gun-trading.ts index 32c13e53a5..8bfaaf96f1 100644 --- a/fees/banana-gun-trading.ts +++ b/fees/banana-gun-trading.ts @@ -2,38 +2,6 @@ import { ChainBlocks, FetchOptions, FetchResultFees, SimpleAdapter } from "../ad import { CHAIN } from "../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; import { queryDune } from "../helpers/dune"; -import { queryIndexer } from "../helpers/indexer"; - -const fetch: any = async (timestamp: number, _: any, options: FetchOptions): Promise => { - const deployer = [ - "xf414d478934c29d9a80244a3626c681a71e53bb2", "x37aab97476ba8dc785476611006fd5dda4eed66b" - ].map(i => `'\\${i}'::bytea`).join(', ') - const transactions = await queryIndexer(` - SELECT - encode(data, 'hex') AS data - FROM - ethereum.event_logs - WHERE - block_number > 19170281 - AND contract_address IN ( - SELECT DISTINCT address - FROM ethereum.traces - WHERE - block_number > 17345415 - AND from_address IN ( ${deployer} ) - AND "type" = 'create' - and address is not null - ) - AND topic_0 = '\\x72015ace03712f361249380657b3d40777dd8f8a686664cab48afd9dbbe4499f' - AND block_time BETWEEN llama_replace_date_range; - `, options) - const dailyFees = options.createBalances(); - transactions.map((e: any) => { - dailyFees.addGasToken(Number('0x' + e.data.slice(0, 64))); - }) - return { dailyFees, dailyRevenue: dailyFees, timestamp } - -} interface IFees { block_date: string; @@ -64,12 +32,18 @@ const fethcFeesSolana = async (timestamp: number, _: ChainBlocks, options: Fetch } } -const fetchBlats = async (timestamp: number, _: ChainBlocks, options: FetchOptions): Promise => { +const contract_address: any = { + [CHAIN.BLAST]: '0x461efe0100be0682545972ebfc8b4a13253bd602', + [CHAIN.BASE]: '0x1fba6b0bbae2b74586fba407fb45bd4788b7b130', + [CHAIN.ETHEREUM]: '0x3328f7f4a1d1c57c35df56bbf0c9dcafca309c49', +} + +const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOptions): Promise => { const dailyFees = options.createBalances(); const dailyRevenue = options.createBalances(); const logs = await options.getLogs({ topic: '0x72015ace03712f361249380657b3d40777dd8f8a686664cab48afd9dbbe4499f', - target: '0x461efe0100be0682545972ebfc8b4a13253bd602', + target: contract_address[options.chain], }); logs.map((log: any) => { const data = log.data.replace('0x', ''); @@ -87,7 +61,7 @@ const fetchBlats = async (timestamp: number, _: ChainBlocks, options: FetchOptio const adapter: SimpleAdapter = { adapter: { [CHAIN.ETHEREUM]: { - fetch: fetch, + fetch: fetchFees, start: 1685577600, }, [CHAIN.SOLANA]: { @@ -96,9 +70,13 @@ const adapter: SimpleAdapter = { start: 1685577600, }, [CHAIN.BLAST]: { - fetch: fetchBlats, + fetch: fetchFees, start: 1685577600, - } + }, + [CHAIN.BASE]: { + fetch: fetchFees, + start: 1685577600, + }, }, isExpensiveAdapter: true, }; From cd71b44c7a08c4111a97e3d4fa9baf37e44da844 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 21 Mar 2024 02:07:28 +0000 Subject: [PATCH 0168/1590] fix joe v2 --- dexs/traderjoe/index.ts | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index 0c1c879b25..b109eacf72 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -1,5 +1,5 @@ import { Chain } from "@defillama/sdk/build/general"; -import { BreakdownAdapter, FetchResultVolume } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions, FetchResultVolume } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import fetchURL from "../../utils/fetchURL"; @@ -22,21 +22,19 @@ interface IVolume { timestamp: number; volumeUsd: number; } -const fetchV2 = (chain: Chain) => { - return async (timestamp: number): Promise => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const historicalVolume: IVolume[] = (await fetchURL(endpointsV2[chain])); - const totalVolume = historicalVolume - .filter(volItem => volItem.timestamp <= dayTimestamp) - .reduce((acc, { volumeUsd }) => acc + Number(volumeUsd), 0) +const fetchV2 = async (options: FetchOptions): Promise => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) + const historicalVolume: IVolume[] = (await fetchURL(endpointsV2[options.chain])); + const totalVolume = historicalVolume + .filter(volItem => volItem.timestamp <= dayTimestamp) + .reduce((acc, { volumeUsd }) => acc + Number(volumeUsd), 0) - const dailyVolume = historicalVolume - .find(dayItem => dayItem.timestamp === dayTimestamp)?.volumeUsd - return { - totalVolume: `${totalVolume}`, - dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, - timestamp: dayTimestamp, - } + const dailyVolume = historicalVolume + .find(dayItem => dayItem.timestamp === dayTimestamp)?.volumeUsd + return { + totalVolume: `${totalVolume}`, + dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, + timestamp: dayTimestamp, } } @@ -90,11 +88,11 @@ const adapter: BreakdownAdapter = { start: 1668556800 }, [CHAIN.ARBITRUM]: { - fetch: fetchV2(CHAIN.ARBITRUM), + fetch: fetchV2, start: 1672012800 }, [CHAIN.BSC]: { - fetch: fetchV2(CHAIN.BSC), + fetch: fetchV2, start: 1677801600 }, } From 25e4c684babffd83f7d484db7616ddfb95243bbb Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 21 Mar 2024 02:16:54 +0000 Subject: [PATCH 0169/1590] fix eth --- dexs/traderjoe/index.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index b109eacf72..5c8723f4a4 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -15,7 +15,8 @@ type TEndpoint = { const endpointsV2: TEndpoint = { [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/joe-v2", [CHAIN.ARBITRUM]: "https://barn.traderjoexyz.com/v1/dex/analytics/arbitrum?startTime=1672012800&aggregateBy=daily", - [CHAIN.BSC]: "https://barn.traderjoexyz.com/v1/dex/analytics/binance?startTime=1677801600&aggregateBy=daily" + [CHAIN.BSC]: "https://barn.traderjoexyz.com/v1/dex/analytics/binance?startTime=1677801600&aggregateBy=daily", + [CHAIN.ETHEREUM]: "https://barn.traderjoexyz.com/v1/dex/analytics/ethereum?startTime=1695513600&aggregateBy=daily" } interface IVolume { @@ -95,6 +96,10 @@ const adapter: BreakdownAdapter = { fetch: fetchV2, start: 1677801600 }, + [CHAIN.ETHEREUM]: { + fetch: fetchV2, + start: 1695513600 + } } }, }; From e66d39b9f98b22959e9b8c75f54b2259dac29dd1 Mon Sep 17 00:00:00 2001 From: Akita V2 <84614986+wenakita@users.noreply.github.com> Date: Wed, 20 Mar 2024 21:18:35 -0700 Subject: [PATCH 0170/1590] Update index.ts Smol typo on Unimaia V3 adapter comments #1332 Fee switch is on for Unimaia V3. currently states 10% -> LPers & 90% -> LPers should b 10% -> protocol 90% -> LPers --- dexs/maia-v3/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/maia-v3/index.ts b/dexs/maia-v3/index.ts index 09d40286bd..3f378c053a 100644 --- a/dexs/maia-v3/index.ts +++ b/dexs/maia-v3/index.ts @@ -26,7 +26,7 @@ const v3Graphs = getGraphDimensions({ }, feesPercent: { type: "fees", - ProtocolRevenue: 10, // 10% of fees are going to LPs + ProtocolRevenue: 10, // 10% of fees are going to protocol HoldersRevenue: 0, UserFees: 100, // User fees are 100% of collected fees SupplySideRevenue: 90, // 90% of fees are going to LPs From 2ca5df557a6241da0b53313013d379e677919dd0 Mon Sep 17 00:00:00 2001 From: tec05 Date: Wed, 20 Mar 2024 22:49:13 -0700 Subject: [PATCH 0171/1590] Adding DEX volume for Archly on Blast, Filecoin, and Fraxtal --- dexs/archly-finance-v2/index.ts | 12 ++++++++++++ helpers/chains.ts | 4 +++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/dexs/archly-finance-v2/index.ts b/dexs/archly-finance-v2/index.ts index d640672234..1779660e72 100644 --- a/dexs/archly-finance-v2/index.ts +++ b/dexs/archly-finance-v2/index.ts @@ -22,6 +22,10 @@ const adapter: SimpleAdapter = { fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), start: 1700784000, }, + [CHAIN.BLAST]: { + fetch: getDexVolumeExports({ chain: CHAIN.BLAST, factory: FACTORY_ADDRESS }), + start: 1710720000, + }, [CHAIN.BSC]: { fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), start: 1700784000, @@ -34,6 +38,14 @@ const adapter: SimpleAdapter = { fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), start: 1700784000, }, + [CHAIN.FILECOIN]: { + fetch: getDexVolumeExports({ chain: CHAIN.FILECOIN, factory: FACTORY_ADDRESS }), + start: 1710979200, + }, + [CHAIN.FRAXTAL]: { + fetch: getDexVolumeExports({ chain: CHAIN.FRAXTAL, factory: FACTORY_ADDRESS }), + start: 1710720000, + }, [CHAIN.KAVA]: { fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), start: 1700784000, diff --git a/helpers/chains.ts b/helpers/chains.ts index 282be11bdb..0cf2d50f1b 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -137,7 +137,9 @@ export enum CHAIN { JBC = "jbc", ZKFAIR = "zkfair", ZETA = "zeta", - ASTAR_ZKEVM = "astrzk" + ASTAR_ZKEVM = "astrzk", + FILECOIN = "filecoin", + FRAXTAL = "fraxtal" } // Don´t use From f2f1c9daddc90c5d7a91d0e9a178d62c4f60d2a9 Mon Sep 17 00:00:00 2001 From: jiangmaniu Date: Thu, 21 Mar 2024 14:30:33 +0800 Subject: [PATCH 0172/1590] feat: add MYX-Finance volume adapters --- dexs/myx-finance/index.ts | 74 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 dexs/myx-finance/index.ts diff --git a/dexs/myx-finance/index.ts b/dexs/myx-finance/index.ts new file mode 100644 index 0000000000..2001258117 --- /dev/null +++ b/dexs/myx-finance/index.ts @@ -0,0 +1,74 @@ +import request, { gql } from "graphql-request"; +import { ChainEndpoints, Fetch, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + + +// Subgraphs endpoints +const endpoints: ChainEndpoints = { + [CHAIN.ARBITRUM]: "https://subgraph-arb.myx.finance/subgraphs/name/myx-subgraph", + [CHAIN.LINEA]: "https://subgraph-linea.myx.finance/subgraphs/name/myx-subgraph", +} + +const methodology = { + TotalVolume: "Total Volume from the sum of the open/close/liquidation of positions.", + DailyVolume: "Daily Volume from the sum of the open/close/liquidation of positions.", +} + +interface IGraphResponse { + tradeVolume: { + volume: string, + id: 'string' + } +} + +const getFetch = () => (chain: string): Fetch => async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000))) + + const dailyData: IGraphResponse = await request(endpoints[chain], gql` + query MyQuery { + tradeVolume(id: "${dayTimestamp}") { + volume + id + } + } + `) + + const totalData: IGraphResponse = await request(endpoints[chain], gql` + query MyQuery { + tradeVolume(id: "global") { + volume + id + } + }` + ) + + return { + timestamp: dayTimestamp, + dailyVolume: dailyData.tradeVolume.volume, + totalVolume: totalData.tradeVolume.volume, + } +} + + +const startTimestamps: { [chain: string]: number } = { + [CHAIN.ARBITRUM]: 1706659200, + [CHAIN.LINEA]: 1708473600, +} + +const adapter: SimpleAdapter = { + adapter: Object.keys(endpoints).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: getFetch()(chain), + start: startTimestamps[chain], + meta: { + methodology: methodology, + }, + } + } + }, {}) +} + +export default adapter; From 0f72fcd658f73e72ad32320b84f365aacad8cddb Mon Sep 17 00:00:00 2001 From: blablalf Date: Thu, 21 Mar 2024 10:01:43 +0100 Subject: [PATCH 0173/1590] fix undefined id --- fees/amphor/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index 2d425e19d4..d64c82bfa9 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -94,15 +94,15 @@ const data = async (timestamp: number): Promise => { }; const eventFilterPTezETH: EventFilter = { address: AmphorPTezETHVault_contractAddress, - topics: [ethers.utils.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] + topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; const eventFilterPTrsETH: EventFilter = { address: AmphorPTrsETHVault_contractAddress, - topics: [ethers.utils.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] + topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; const eventFilterPTweETH: EventFilter = { address: AmphorPTweETHVault_contractAddress, - topics: [ethers.utils.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] + topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; const eventsUSDC = (await sdk.getEventLogs({ From d1fe3a847c6bf4204160f4e6a07e2f3d40782fe0 Mon Sep 17 00:00:00 2001 From: blablalf Date: Thu, 21 Mar 2024 10:40:00 +0100 Subject: [PATCH 0174/1590] disabling revenue value because it seems incorrect --- fees/amphor/index.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index d64c82bfa9..c4914517ec 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -1,10 +1,10 @@ -import ADDRESSES from '../../helpers/coreAssets.json' import * as sdk from "@defillama/sdk"; import { ethers, EventFilter } from 'ethers'; import { Adapter, FetchResultFees } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { ETHEREUM } from "../../helpers/chains"; +import ADDRESSES from '../../helpers/coreAssets.json' import { getBlock } from "../../helpers/getBlock"; const AmphorILHedgedUSDC_contractAddress: string = '0x3b022EdECD65b63288704a6fa33A8B9185b5096b'; @@ -181,11 +181,11 @@ const data = async (timestamp: number): Promise => { eventsUSDC.forEach(res => { const event = AmphorILHedgedUSDC_contract.interface.parseLog(res as any); - totalRevenueUSDC += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) - totalFeesUSDC += BigInt(event!.args.fees) + totalRevenueUSDC += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); + totalFeesUSDC += BigInt(event!.args.fees); if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { - dailyFeesUSDC += BigInt(event!.args.fees) - dailyRevenueUSDC = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) + dailyFeesUSDC += BigInt(event!.args.fees); + dailyRevenueUSDC = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); } }); @@ -194,18 +194,18 @@ const data = async (timestamp: number): Promise => { totalRevenueWSTETH += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) totalFeesWSTETH += BigInt(event!.args.fees) if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { - dailyFeesWSTETH += BigInt(event!.args.fees) - dailyRevenueWSTETH = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) + dailyFeesWSTETH += BigInt(event!.args.fees); + dailyRevenueWSTETH = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); } }); eventsWBTC.forEach(res => { const event = AmphorILHedgedWBTC_contract.interface.parseLog(res as any); - totalRevenueWBTC += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) - totalFeesWBTC += BigInt(event!.args.fees) + totalRevenueWBTC += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); + totalFeesWBTC += BigInt(event!.args.fees); if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { - dailyFeesWBTC += BigInt(event!.args.fees) - dailyRevenueWBTC = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) + dailyFeesWBTC += BigInt(event!.args.fees); + dailyRevenueWBTC = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); } }); @@ -286,7 +286,7 @@ const data = async (timestamp: number): Promise => { return { timestamp: timestamp, totalFees: totalFeesNumber, - totalRevenue: Number(await totalRevenue.getUSDValue()).toFixed(0), + //totalRevenue: Number(await totalRevenue.getUSDValue()).toFixed(0), totalProtocolRevenue: totalFeesNumber, totalUserFees: totalFeesNumber, dailyFees: Number(await dailyFees.getUSDValue()).toFixed(0), From 5a3bc574ab2702782eceb1ba47595ade59964934 Mon Sep 17 00:00:00 2001 From: blablalf Date: Thu, 21 Mar 2024 10:42:06 +0100 Subject: [PATCH 0175/1590] disabling daily revenue value because it seems incorrect --- fees/amphor/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index c4914517ec..5c62b8e82f 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -291,7 +291,7 @@ const data = async (timestamp: number): Promise => { totalUserFees: totalFeesNumber, dailyFees: Number(await dailyFees.getUSDValue()).toFixed(0), dailyProtocolRevenue: dailyRevenueNumber, - dailyRevenue: dailyRevenueNumber, + //dailyRevenue: dailyRevenueNumber, }; } From 6a7ef2e1470942ed1205a7f3765eda3f4ce342ee Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 21 Mar 2024 10:20:49 +0000 Subject: [PATCH 0176/1590] frax amo --- fees/frax-amo.ts | 99 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 fees/frax-amo.ts diff --git a/fees/frax-amo.ts b/fees/frax-amo.ts new file mode 100644 index 0000000000..cff5067948 --- /dev/null +++ b/fees/frax-amo.ts @@ -0,0 +1,99 @@ +import { gql, GraphQLClient } from "graphql-request"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const query = (amo: string, timestamp: number) => gql` +{ + amos( + where: { + id: "${amo.toLowerCase()}" + }) { + id + name + positions { + depositAddress + name + fraxAccountingPerDay( + first: 3, + orderBy: timestamp, + orderDirection: desc + where: { + timestamp_lt: ${timestamp} + }) { + balance + depositedAmount + profitTaken + timestamp + } + } + } + } +`; + +const getGQLClient = (endpoint: string) => new GraphQLClient(endpoint); + +const findRevenue = (timedData: any) => + Number(timedData.balance) - + Number(timedData.depositedAmount) + + Number(timedData.profitTaken); + +const fetch = async ({ createBalances, chain, toTimestamp }: FetchOptions) => { + const { amos, graph, FRAX } = config[chain]; + const client = getGQLClient(graph); + const dailyRevenue = createBalances(); + const totalRevenue = createBalances(); + + await Promise.all( + amos.map(async (amo: string) => { + const data = (await client.request(query(amo, toTimestamp))).amos[0]; + data.positions.map((p: any) => { + const latest = findRevenue(p.fraxAccountingPerDay[0]); + const previous = findRevenue(p.fraxAccountingPerDay[1]); + dailyRevenue.add(FRAX, latest - previous); + totalRevenue.add(FRAX, latest); + }); + }), + ); + + return { dailyRevenue, totalRevenue }; +}; + +const config: { + [chain: string]: { FRAX: string; amos: string[]; graph: string }; +} = { + [CHAIN.ETHEREUM]: { + FRAX: "0x853d955aCEf822Db058eb8505911ED77F175b99e", + graph: + "https://api.thegraph.com/subgraphs/name/frax-finance-data/amo-subgraph---mainnet", + amos: [ + // '0x49ee75278820f409ecd67063D8D717B38d66bd71', // curve + // '0x629C473e0E698FD101496E5fbDA4bcB58DA78dC4', // twaamm + // '0x452420df4AC1e3db5429b5FD629f3047482C543C', // fxb + "0x0Ed8fA7FC63A8eb5487E7F87CAF1aB3914eA4eCa", // v1 + "0xf6E697e95D4008f81044337A749ECF4d15C30Ea6", // v3 + ], + }, + [CHAIN.ARBITRUM]: { + FRAX: "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F", + graph: + "https://api.thegraph.com/subgraphs/name/frax-finance-data/amo-subgraph---arbitrum", + amos: [ + "0xCDeE1B853AD2E96921250775b7A60D6ff78fD8B4", // v3 + ], + }, +}; + +const adapter: SimpleAdapter = { + adapter: Object.keys(config).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch, + start: 0, + }, + }; + }, {}), + version: 2, +}; + +export default adapter; From 80e3846eba5d669f4a18208be105f5cc61f30700 Mon Sep 17 00:00:00 2001 From: Dagur Valberg Johannsson Date: Thu, 21 Mar 2024 11:38:50 +0100 Subject: [PATCH 0177/1590] Add Cauldron DEX volume --- dexs/cauldron/index.ts | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 dexs/cauldron/index.ts diff --git a/dexs/cauldron/index.ts b/dexs/cauldron/index.ts new file mode 100644 index 0000000000..cd18dd75be --- /dev/null +++ b/dexs/cauldron/index.ts @@ -0,0 +1,52 @@ +// This adaptor uses the Riftenlabs Indexer API to query for volume. +// +// This indexer is open source (AGPLv3) and available at: +// https://gitlab.com/riftenlabs/riftenlabs-indexer + +import { SimpleAdapter } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; + +const INDEXER_URL = "https://indexer.cauldron.quest"; + +const methodology = { + DailyVolume: "Scrape the blockchain and filter for spent transaction outputs that match the cauldron contract's redeem script. Check if the transaction has an output with a locking script that matches the redeem script in the input. A match on locking script means the funds are still locked in the DEX contract. Aggregate the difference of funds in contract utxos as trade volume." +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.BITCOIN_CASH]: { + fetch: fetchCauldronVolume, + start: 1688198180, + meta: { + methodology + } + }, + }, +}; + +export async function fetchCauldronVolume( + timestamp: number +) { + const endpoint = `${INDEXER_URL}/cauldron/contract/volume?end=${timestamp}`; + const volume = await fetchURL(endpoint) + + const total_sats = volume.reduce((acc, token) => { + return acc + BigInt(token.total_sats) + }, BigInt(0)); + + const daily_sats = volume.reduce((acc, token) => { + return acc + BigInt(token.one_day_sats) + }, BigInt(0)); + + const COIN = 100000000n; + + return { + timestamp, + dailyVolume: Number(daily_sats / COIN), + totalVolume: Number(total_sats / COIN), + }; +} + +export default adapter; + From cc789efa85218d5e2dbff98a06f8c4f09dc85a0e Mon Sep 17 00:00:00 2001 From: Dagur Valberg Johannsson Date: Thu, 21 Mar 2024 11:54:52 +0100 Subject: [PATCH 0178/1590] Cauldron: Volume in USD --- dexs/cauldron/index.ts | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/dexs/cauldron/index.ts b/dexs/cauldron/index.ts index cd18dd75be..01e6fe5323 100644 --- a/dexs/cauldron/index.ts +++ b/dexs/cauldron/index.ts @@ -3,14 +3,16 @@ // This indexer is open source (AGPLv3) and available at: // https://gitlab.com/riftenlabs/riftenlabs-indexer -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; const INDEXER_URL = "https://indexer.cauldron.quest"; const methodology = { - DailyVolume: "Scrape the blockchain and filter for spent transaction outputs that match the cauldron contract's redeem script. Check if the transaction has an output with a locking script that matches the redeem script in the input. A match on locking script means the funds are still locked in the DEX contract. Aggregate the difference of funds in contract utxos as trade volume." + Volume: "Scrape the blockchain and filter for spent transaction outputs that match the cauldron contract's redeem script. Check if the transaction has an output with a locking script that matches the redeem script in the input. A match on locking script means the funds are still locked in the DEX contract. Aggregate the difference of funds in contract utxos as trade volume.", + Fees: "N/A", + Revenue: "N/A", } const adapter: SimpleAdapter = { @@ -26,8 +28,8 @@ const adapter: SimpleAdapter = { }; export async function fetchCauldronVolume( - timestamp: number -) { + timestamp: number, _, options: FetchOptions +): Fetch { const endpoint = `${INDEXER_URL}/cauldron/contract/volume?end=${timestamp}`; const volume = await fetchURL(endpoint) @@ -41,10 +43,16 @@ export async function fetchCauldronVolume( const COIN = 100000000n; + const dailyVolume = options.createBalances(); + const totalVolume = options.createBalances(); + + dailyVolume.addCGToken('bitcoin-cash', Number(daily_sats / COIN)); + totalVolume.addCGToken('bitcoin-cash', Number(total_sats / COIN)); + return { timestamp, - dailyVolume: Number(daily_sats / COIN), - totalVolume: Number(total_sats / COIN), + dailyVolume, + totalVolume, }; } From d5a79dd1e8623c012c17706d34270dddc143a911 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 21 Mar 2024 11:51:12 +0000 Subject: [PATCH 0179/1590] add eth --- fees/traderjoe.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fees/traderjoe.ts b/fees/traderjoe.ts index 62e97bd09d..e295a63fb6 100644 --- a/fees/traderjoe.ts +++ b/fees/traderjoe.ts @@ -23,7 +23,8 @@ type TEndpoint = { const endpointsV2: TEndpoint = { [CHAIN.AVAX]: "https://barn.traderjoexyz.com/v1/dex/analytics/avalanche?startTime=1669420800&aggregateBy=daily", [CHAIN.ARBITRUM]: "https://barn.traderjoexyz.com/v1/dex/analytics/arbitrum?startTime=1672012800&aggregateBy=daily", - [CHAIN.BSC]: "https://barn.traderjoexyz.com/v1/dex/analytics/binance?startTime=1677801600&aggregateBy=daily" + [CHAIN.BSC]: "https://barn.traderjoexyz.com/v1/dex/analytics/binance?startTime=1677801600&aggregateBy=daily", + [CHAIN.ETHEREUM]: "https://barn.traderjoexyz.com/v1/dex/analytics/ethereum?startTime=1695513600&aggregateBy=daily" } const adapterV1 = getDexChainFees({ @@ -70,6 +71,10 @@ const adapter: Adapter = { [CHAIN.BSC]: { fetch: graph(CHAIN.BSC), start: 1678147200 + }, + [CHAIN.ETHEREUM]: { + fetch: graph(CHAIN.ETHEREUM), + start: 1695513600 } } } From e5aeaad2f3b7979f634165208f976f379fb11ca9 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 21 Mar 2024 13:48:24 +0000 Subject: [PATCH 0180/1590] set time --- fees/sharpe-earn/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/sharpe-earn/index.ts b/fees/sharpe-earn/index.ts index 756a77b22c..bfec300eba 100644 --- a/fees/sharpe-earn/index.ts +++ b/fees/sharpe-earn/index.ts @@ -42,15 +42,15 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM]: { fetch: fetch, - start: async () => 1710720000, + start: async () => 1710037587, }, [CHAIN.OPTIMISM]: { fetch: fetch, - start: async () => 1710720000, + start: async () => 1710037587, }, [CHAIN.BASE]: { fetch: fetch, - start: async () => 1710720000, + start: async () => 1710037587, }, }, }; From 08effbde26ad1784a09bd76305e41bdb94eabb12 Mon Sep 17 00:00:00 2001 From: MonkeyD1uffy <34332336+MonkeyD1uffy@users.noreply.github.com> Date: Thu, 21 Mar 2024 21:03:14 +0700 Subject: [PATCH 0181/1590] Update lifinity.ts Lifinity owns 100% of the liquidity and thus 100% of the revenue goes to the protocol. --- fees/lifinity.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/fees/lifinity.ts b/fees/lifinity.ts index 6a0198532e..4125c7ffc1 100644 --- a/fees/lifinity.ts +++ b/fees/lifinity.ts @@ -29,18 +29,18 @@ const fetch = async (timestamp: number): Promise => { if (dailyFees !== undefined) { const dailyFeesUsd = new BigNumber(dailyFees); fetchResponse['dailyFees'] = dailyFeesUsd.toString() - fetchResponse['dailyRevenue'] = dailyFeesUsd.multipliedBy(0.15).toString() - fetchResponse['dailyProtocolRevenue'] = dailyFeesUsd.multipliedBy(0.15).toString() - fetchResponse['dailySupplySideRevenue'] = dailyFeesUsd.multipliedBy(0.85).toString() + fetchResponse['dailyRevenue'] = dailyFeesUsd.toString() + fetchResponse['dailyProtocolRevenue'] = dailyFeesUsd.toString() + fetchResponse['dailySupplySideRevenue'] = dailyFeesUsd.multipliedBy(0).toString() fetchResponse['dailyUserFees'] = dailyFeesUsd.toString() } if (totalFees !== undefined) { const totalFeesUsd = new BigNumber(totalFees); fetchResponse['totalFees'] = totalFeesUsd.toString() - fetchResponse['totalRevenue'] = totalFeesUsd.multipliedBy(0.15).toString() - fetchResponse['totalProtocolRevenue'] = totalFeesUsd.multipliedBy(0.15).toString() - fetchResponse['totalSupplySideRevenue'] = totalFeesUsd.multipliedBy(0.85).toString() + fetchResponse['totalRevenue'] = totalFeesUsd.toString() + fetchResponse['totalProtocolRevenue'] = totalFeesUsd.toString() + fetchResponse['totalSupplySideRevenue'] = totalFeesUsd.multipliedBy(0).toString() fetchResponse['totalUserFees'] = totalFeesUsd.toString() } @@ -50,9 +50,9 @@ const fetch = async (timestamp: number): Promise => { const methodology = { UserFees: "Base trading fee differs on each pool", Fees: "All fees generated from trading fees", - SupplySideRevenue: "LPs currently receive 85% of trading fees", - ProtocolRevenue: "A 15% of trading fees is retained as a protocol fee", - Revenue: "A 15% of trading fees is retained as a protocol fee", + SupplySideRevenue: "LPs currently receive 0% of trading fees", + ProtocolRevenue: "100% of trading fees is retained as a protocol fee", + Revenue: "100% of trading fees is retained as a protocol fee", HoldersRevenue: "Holders have no revenue from trading fees", } From f6358750eb41b063aea3b353e2b62786c5f098ee Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 21 Mar 2024 15:22:05 +0000 Subject: [PATCH 0182/1590] set 0 --- dexs/blitz/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/blitz/index.ts b/dexs/blitz/index.ts index eccc4bda0b..b5f4e42b37 100644 --- a/dexs/blitz/index.ts +++ b/dexs/blitz/index.ts @@ -66,7 +66,7 @@ const computeVolume = async (timestamp: number, productIds: number[]) => { const dailyVolume = totalVolume - totalVolumeOneDayAgo; return { totalVolume: totalVolume ? `${totalVolume}` : undefined, - dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, timestamp: timestamp, }; }; From a84c6bf67e114695401cc3985df538baedec531c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 21 Mar 2024 15:59:52 +0000 Subject: [PATCH 0183/1590] fix missing volome --- dexs/myx-finance/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/myx-finance/index.ts b/dexs/myx-finance/index.ts index 2001258117..327cbed716 100644 --- a/dexs/myx-finance/index.ts +++ b/dexs/myx-finance/index.ts @@ -45,8 +45,8 @@ const getFetch = () => (chain: string): Fetch => async (timestamp: number) => { return { timestamp: dayTimestamp, - dailyVolume: dailyData.tradeVolume.volume, - totalVolume: totalData.tradeVolume.volume, + dailyVolume: dailyData.tradeVolume?.volume || "0", + totalVolume: totalData.tradeVolume?.volume || "0", } } From b609e8fb60f3039d2add3a6d923e9c2f2410c490 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 21 Mar 2024 16:03:10 +0000 Subject: [PATCH 0184/1590] fix missing type --- dexs/cauldron/index.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dexs/cauldron/index.ts b/dexs/cauldron/index.ts index 01e6fe5323..e33d9f9822 100644 --- a/dexs/cauldron/index.ts +++ b/dexs/cauldron/index.ts @@ -3,7 +3,7 @@ // This indexer is open source (AGPLv3) and available at: // https://gitlab.com/riftenlabs/riftenlabs-indexer -import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; @@ -29,7 +29,7 @@ const adapter: SimpleAdapter = { export async function fetchCauldronVolume( timestamp: number, _, options: FetchOptions -): Fetch { +): Promise { const endpoint = `${INDEXER_URL}/cauldron/contract/volume?end=${timestamp}`; const volume = await fetchURL(endpoint) @@ -57,4 +57,3 @@ export async function fetchCauldronVolume( } export default adapter; - From f2d422e5a7dfcae9c34eba81d4c7bcdb9ab8e28e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 21 Mar 2024 16:31:16 +0000 Subject: [PATCH 0185/1590] fix version 2 --- dexs/myx-finance/index.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/dexs/myx-finance/index.ts b/dexs/myx-finance/index.ts index 327cbed716..0570aa85c2 100644 --- a/dexs/myx-finance/index.ts +++ b/dexs/myx-finance/index.ts @@ -1,5 +1,5 @@ import request, { gql } from "graphql-request"; -import { ChainEndpoints, Fetch, SimpleAdapter } from "../../adapters/types"; +import { ChainEndpoints, Fetch, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; @@ -22,10 +22,10 @@ interface IGraphResponse { } } -const getFetch = () => (chain: string): Fetch => async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000))) +const getFetch = async (optios: FetchOptions) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((optios.endTimestamp * 1000))) - const dailyData: IGraphResponse = await request(endpoints[chain], gql` + const dailyData: IGraphResponse = await request(endpoints[optios.chain], gql` query MyQuery { tradeVolume(id: "${dayTimestamp}") { volume @@ -34,7 +34,7 @@ const getFetch = () => (chain: string): Fetch => async (timestamp: number) => { } `) - const totalData: IGraphResponse = await request(endpoints[chain], gql` + const totalData: IGraphResponse = await request(endpoints[optios.chain], gql` query MyQuery { tradeVolume(id: "global") { volume @@ -57,11 +57,12 @@ const startTimestamps: { [chain: string]: number } = { } const adapter: SimpleAdapter = { + version: 2, adapter: Object.keys(endpoints).reduce((acc, chain) => { return { ...acc, [chain]: { - fetch: getFetch()(chain), + fetch: getFetch, start: startTimestamps[chain], meta: { methodology: methodology, From d97a2c80ec1cebab9b1249865b2d30bbc57474ba Mon Sep 17 00:00:00 2001 From: silvercondor Date: Fri, 22 Mar 2024 01:39:01 +0000 Subject: [PATCH 0186/1590] chore: update metrics url --- dexs/native/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/native/index.ts b/dexs/native/index.ts index a845d16ad8..a68b33f71a 100644 --- a/dexs/native/index.ts +++ b/dexs/native/index.ts @@ -13,7 +13,7 @@ const chains = [ ]; const NATIVE_ANALYTICS_ENDPOINT = - "http://chain-monitoring.native.org/analytics/overview"; + "https://newapi.native.org/native-offchain-monitor-mono/analytics/overview"; interface ResEntry { date: number; From 9b2671495901c5e67a6f52ec97a67350967b92d8 Mon Sep 17 00:00:00 2001 From: silvercondor Date: Fri, 22 Mar 2024 02:37:03 +0000 Subject: [PATCH 0187/1590] chore: add base & zetachain --- dexs/native/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dexs/native/index.ts b/dexs/native/index.ts index a68b33f71a..10c74b7a52 100644 --- a/dexs/native/index.ts +++ b/dexs/native/index.ts @@ -10,6 +10,8 @@ const chains = [ CHAIN.ARBITRUM, CHAIN.AVAX, CHAIN.MANTLE, + CHAIN.BASE, + CHAIN.ZETA ]; const NATIVE_ANALYTICS_ENDPOINT = From f8aaf8785cde4efd8d386a077a6044e3eeca9007 Mon Sep 17 00:00:00 2001 From: fefe Date: Fri, 22 Mar 2024 11:12:41 +0800 Subject: [PATCH 0188/1590] feat: add fx-protocol fee --- fees/fx-protocol.ts | 54 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 fees/fx-protocol.ts diff --git a/fees/fx-protocol.ts b/fees/fx-protocol.ts new file mode 100644 index 0000000000..7a8656d152 --- /dev/null +++ b/fees/fx-protocol.ts @@ -0,0 +1,54 @@ +import { Adapter } from "../adapters/types"; +import { ETHEREUM } from "../helpers/chains"; +import { request } from "graphql-request"; +import type { + ChainBlocks, + ChainEndpoints, + FetchOptions, +} from "../adapters/types"; +import { Chain } from "@defillama/sdk/build/general"; + +const endpoints = { + [ETHEREUM]: + "https://api.thegraph.com/subgraphs/name/aladdindaogroup/aladdin-fees", +}; + +const graph = (graphUrls: ChainEndpoints) => { + return (chain: Chain) => { + return async ( + _timestamp: number, + _: ChainBlocks, + { createBalances, startOfDay }: FetchOptions + ) => { + let dailyRevenue = createBalances(); + const dateId = Math.floor(startOfDay); + + const graphQuery = `{ dailyRevenueSnapshot(id: ${dateId}) { wstETHRevenue } }`; + + const { dailyRevenueSnapshot: snapshot } = await request( + graphUrls[chain], + graphQuery + ); + + if (!snapshot) throw new Error("No data found"); + + dailyRevenue.addCGToken("wrapped-steth", snapshot.wstETHRevenue * 1e18); + + const usd = await dailyRevenue.getUSDValue(); + const revenue = (usd / 1e18).toFixed(0); + const dailyFees = (usd / 0.75 / 1e18).toFixed(0); + return { timestamp: startOfDay, dailyFees, dailyRevenue: revenue }; + }; + }; +}; + +const adapter: Adapter = { + adapter: { + [ETHEREUM]: { + fetch: graph(endpoints)(ETHEREUM), + start: 1700524800, + }, + }, +}; + +export default adapter; From 625d7ce4b50a7cca727984e0f9de36e4bedcf302 Mon Sep 17 00:00:00 2001 From: fefe Date: Fri, 22 Mar 2024 11:13:37 +0800 Subject: [PATCH 0189/1590] fix-clever_concentrator --- fees/clever.ts | 33 ++++++++++++++++++++++++--------- fees/concentrator.ts | 37 ++++++++++++++++++++++++++++--------- 2 files changed, 52 insertions(+), 18 deletions(-) diff --git a/fees/clever.ts b/fees/clever.ts index d6de35ceaf..63e876f2a9 100644 --- a/fees/clever.ts +++ b/fees/clever.ts @@ -1,7 +1,11 @@ import { Adapter } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; -import { request, } from "graphql-request"; -import type { ChainBlocks, ChainEndpoints, FetchOptions } from "../adapters/types"; +import { request } from "graphql-request"; +import type { + ChainBlocks, + ChainEndpoints, + FetchOptions, +} from "../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; const endpoints = { @@ -11,19 +15,30 @@ const endpoints = { const graph = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (_timestamp: number, _: ChainBlocks, { createBalances, startOfDay }: FetchOptions) => { - const dailyRevenue = createBalances() + return async ( + _timestamp: number, + _: ChainBlocks, + { createBalances, startOfDay }: FetchOptions + ) => { + const dailyRevenue = createBalances(); const dateId = Math.floor(startOfDay); const graphQuery = `{ dailyRevenueSnapshot(id: ${dateId}) { cvxRevenue fraxRevenue } }`; - const { dailyRevenueSnapshot: snapshot } = await request(graphUrls[chain], graphQuery); + const { dailyRevenueSnapshot: snapshot } = await request( + graphUrls[chain], + graphQuery + ); if (!snapshot) throw new Error("No data found"); - dailyRevenue.addCGToken("convex-finance", snapshot.cvxRevenue); - dailyRevenue.addCGToken("frax", snapshot.fraxRevenue); - const dailyFees = dailyRevenue.clone(2); - return { timestamp: startOfDay, dailyFees, dailyRevenue, } + dailyRevenue.addCGToken("convex-finance", snapshot.cvxRevenue * 1e18); + dailyRevenue.addCGToken("frax", snapshot.fraxRevenue * 1e18); + + const usd = await dailyRevenue.getUSDValue(); + const revenue = (usd / 1e18).toFixed(0); + const dailyFees = ((usd * 2) / 1e18).toFixed(0); + + return { timestamp: startOfDay, dailyFees, dailyRevenue: revenue }; }; }; }; diff --git a/fees/concentrator.ts b/fees/concentrator.ts index 6edbe8d741..e492761975 100644 --- a/fees/concentrator.ts +++ b/fees/concentrator.ts @@ -1,9 +1,15 @@ import { Adapter } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainBlocks, ChainEndpoints, FetchOptions } from "../adapters/types"; +import type { + ChainBlocks, + ChainEndpoints, + FetchOptions, +} from "../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; -import { getTimestampAtStartOfDayUTC } from "../utils/date"; +import fetchURL from "../utils/fetchURL"; + +const priceUrl = "https://api.aladdin.club/api/coingecko/price"; const endpoints = { [ETHEREUM]: @@ -12,20 +18,33 @@ const endpoints = { const graph = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { createBalances }: FetchOptions) => { - const dateId = Math.floor(getTimestampAtStartOfDayUTC(timestamp)); + return async ( + _timestamp: number, + _: ChainBlocks, + { startOfDay }: FetchOptions + ) => { + const dateId = Math.floor(startOfDay); const graphQuery = gql`{ dailyRevenueSnapshot(id: ${dateId}) { aCRVRevenue } }`; - const { dailyRevenueSnapshot: snapshot } = await request(graphUrls[chain], graphQuery); + const { dailyRevenueSnapshot: snapshot } = await request( + graphUrls[chain], + graphQuery + ); if (!snapshot) throw new Error("No data found"); - const dailyRevenue = createBalances(); - dailyRevenue.addCGToken("aladdin-crv", snapshot.aCRVRevenue); - const dailyFees = dailyRevenue.clone(2); - return { timestamp, dailyFees, dailyRevenue }; + + const { aCRV } = (await fetchURL(priceUrl))?.data; + + const dailyRevenue = snapshot.aCRVRevenue; + + const usd = dailyRevenue * aCRV.usd; + const revenue = usd.toFixed(0); + const dailyFees = (usd * 2).toFixed(0); + + return { timestamp: startOfDay, dailyFees, dailyRevenue: revenue }; }; }; }; From e7eaee09779794dc104b0832f7f4d936d9285152 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 22 Mar 2024 14:33:37 +0000 Subject: [PATCH 0190/1590] fix null --- fees/fx-protocol.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fees/fx-protocol.ts b/fees/fx-protocol.ts index 7a8656d152..2f941a4f25 100644 --- a/fees/fx-protocol.ts +++ b/fees/fx-protocol.ts @@ -30,9 +30,12 @@ const graph = (graphUrls: ChainEndpoints) => { graphQuery ); - if (!snapshot) throw new Error("No data found"); + if (!snapshot) { + dailyRevenue.addCGToken("wrapped-steth", 0); + } else { + dailyRevenue.addCGToken("wrapped-steth", snapshot.wstETHRevenue * 1e18); + } - dailyRevenue.addCGToken("wrapped-steth", snapshot.wstETHRevenue * 1e18); const usd = await dailyRevenue.getUSDValue(); const revenue = (usd / 1e18).toFixed(0); From cd4680cb718e0313609eb752ea6efa77b28de52f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 22 Mar 2024 15:32:57 +0000 Subject: [PATCH 0191/1590] enable kava --- dexs/wagmi/index.ts | 8 ++++---- fees/wagmi/index.ts | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/dexs/wagmi/index.ts b/dexs/wagmi/index.ts index c312becf06..b3b8ea0c0a 100644 --- a/dexs/wagmi/index.ts +++ b/dexs/wagmi/index.ts @@ -20,10 +20,10 @@ const adapter: SimpleAdapter = { // fetch: fetchVolume(CHAIN.METIS), // start: 1702888970, // }, - // [CHAIN.KAVA]: { - // fetch: fetchVolume(CHAIN.KAVA), - // start: 1694476800, - // }, + [CHAIN.KAVA]: { + fetch: fetchVolume(CHAIN.KAVA), + start: 1694476800, + }, }, }; // diff --git a/fees/wagmi/index.ts b/fees/wagmi/index.ts index 46e8b58e27..8694c7f5f0 100644 --- a/fees/wagmi/index.ts +++ b/fees/wagmi/index.ts @@ -26,13 +26,13 @@ const adapter: SimpleAdapter = { methodology, }, }, - // [CHAIN.KAVA]: { - // fetch: fetchFee(CHAIN.KAVA), - // start: 1694476800, - // meta: { - // methodology, - // }, - // }, + [CHAIN.KAVA]: { + fetch: fetchFee(CHAIN.KAVA), + start: 1694476800, + meta: { + methodology, + }, + }, [CHAIN.ETHEREUM]: { fetch: fetchFee(CHAIN.ETHEREUM), start: 18240112, From 13699623d6efde407f88b53588ede2d3f6c46516 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 22 Mar 2024 15:59:44 +0000 Subject: [PATCH 0192/1590] fix run current time --- dexs/hyperliquid/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/hyperliquid/index.ts b/dexs/hyperliquid/index.ts index 15a3d75259..40ed0c1798 100644 --- a/dexs/hyperliquid/index.ts +++ b/dexs/hyperliquid/index.ts @@ -26,6 +26,7 @@ const adapter: SimpleAdapter = { [CHAIN.ARBITRUM]: { fetch, start: 1677283200, + runAtCurrTime: true, }, } }; From 491c7759b112551ebfb72bf83af6fd57cbd6b8e5 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 22 Mar 2024 16:28:36 +0000 Subject: [PATCH 0193/1590] add warpgate --- dexs/warpgate/index.ts | 31 +++++++++++++++++++++++++++++++ helpers/chains.ts | 3 ++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 dexs/warpgate/index.ts diff --git a/dexs/warpgate/index.ts b/dexs/warpgate/index.ts new file mode 100644 index 0000000000..2921bff72a --- /dev/null +++ b/dexs/warpgate/index.ts @@ -0,0 +1,31 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; + +const endpoints = { + [CHAIN.IMX]: "https://subgraph.warpgate.pro/subgraphs/name/warpgate/subgraph-v3", +}; + +const graphs = getChainVolume({ + graphUrls: endpoints, + totalVolume: { + factory: "factories", + field: "totalVolumeUSD", + }, + dailyVolume: { + factory: "uniswapDayData", + field: "volumeUSD", + }, +}); + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.IMX]: { + fetch: graphs(CHAIN.IMX), + start: 1708041600 + }, + }, +}; + +export default adapter; diff --git a/helpers/chains.ts b/helpers/chains.ts index 0cf2d50f1b..d9a9a987c6 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -139,7 +139,8 @@ export enum CHAIN { ZETA = "zeta", ASTAR_ZKEVM = "astrzk", FILECOIN = "filecoin", - FRAXTAL = "fraxtal" + FRAXTAL = "fraxtal", + IMX = "imx", } // Don´t use From c1bf2ee339392d69fbec029d50b410888cf1cddb Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 23 Mar 2024 14:53:49 +0000 Subject: [PATCH 0194/1590] fix nomorlis amount --- dexs/ipor/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dexs/ipor/index.ts b/dexs/ipor/index.ts index 175a6f0aca..732b719a25 100644 --- a/dexs/ipor/index.ts +++ b/dexs/ipor/index.ts @@ -43,10 +43,12 @@ const fetch: any = async (timestamp: number, _: any, { chain, getLogs, createBal const logs = logsStables.concat(logsStETHs) logs.forEach(log => { - const balance = Number(log.money?.notional || log.amounts?.notional) - dailyNotionalVolume.add(log.asset, balance) + let balance = Number(log.money?.notional || log.amounts?.notional) + if (log.asset.toLowerCase() === '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'.toLowerCase()) { + balance = balance / 1e18 + } + dailyNotionalVolume.add(log.asset, balance) }) - return { timestamp, dailyVolume: dailyNotionalVolume }; }; From c98bfbd82a2591a95d2da43112a1283049878116 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 23 Mar 2024 16:15:10 +0000 Subject: [PATCH 0195/1590] add glyph-exchange --- dexs/glyph-exchange/index.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 dexs/glyph-exchange/index.ts diff --git a/dexs/glyph-exchange/index.ts b/dexs/glyph-exchange/index.ts new file mode 100644 index 0000000000..61250536b4 --- /dev/null +++ b/dexs/glyph-exchange/index.ts @@ -0,0 +1,11 @@ +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter({ + [CHAIN.CORE]: "https://thegraph.coredao.org/subgraphs/name/glyph/glyph-tvl" +}, { + factoriesName: "glyphFactories", + dayData: "glyphDayData" +}); +adapters.adapter.core.start = 1710806400; +export default adapters; From a8e214498a5abf2db07be5ad8ca30c8711136b33 Mon Sep 17 00:00:00 2001 From: Bogdan Crisan Date: Sun, 24 Mar 2024 11:36:59 +0100 Subject: [PATCH 0196/1590] add total fees for econia --- dexs/econia/index.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dexs/econia/index.ts b/dexs/econia/index.ts index 196371f463..9622776099 100644 --- a/dexs/econia/index.ts +++ b/dexs/econia/index.ts @@ -36,21 +36,22 @@ const fetch = async (timestamp: number) => { const feesPerMarket = await Promise.all( markets.map(async m => - await fetchURL(`${BASE_URL}/fees_24h?market_id=eq.${m.market_id}&day=eq.${dayISO}`) + await fetchURL(`${BASE_URL}/rpc/fees?market_id=${m.market_id}&time=${dayISO}`) .then(res => ( - { daily: res[0].fees / 1000000 } + { daily: res[0].daily / 1000000, total: res[0].total / 1000000 } )) ) ); const fees = feesPerMarket.reduce((prev, curr) => { - return { daily: prev.daily + curr.daily }; - }, { daily: 0 }); + return { daily: prev.daily + curr.daily, total: prev.total + curr.total }; + }, { daily: 0, total: 0 }); let res = { totalVolume: `${volumes.total}`, dailyVolume: `${volumes.daily}`, dailyFees: `${fees.daily}`, + totalFees: `${fees.total}`, timestamp: dayTimestamp, }; From 6021dbd5c9ebfb4197ed42d9bf6d35c626b33c22 Mon Sep 17 00:00:00 2001 From: igorshelkovenkov Date: Sun, 24 Mar 2024 21:44:00 +0100 Subject: [PATCH 0197/1590] add javsphere tradex volume and fees --- dexs/javsphere/index.ts | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 dexs/javsphere/index.ts diff --git a/dexs/javsphere/index.ts b/dexs/javsphere/index.ts new file mode 100644 index 0000000000..dd07ce3489 --- /dev/null +++ b/dexs/javsphere/index.ts @@ -0,0 +1,38 @@ + +import fetchURL from "../../utils/fetchURL"; +import type { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +type DexData = { + countTotal: number, + volumeTotal: number, + feeTotal: number, + tradesBuy: number, + volumeBuy: number, + volumeBuyFees: number, + countSell: number, + volumeSell: number, + volumeSellFees: number +}; + +const fetch = async (timestamp: number) => { + const stats: DexData = (await fetchURL(`https://aws-api.javlis.com/api/dtoken/stats`)).data; + console.log(stats) + return { + totalVolume: `${stats.volumeTotal}`, + totalFees: `${stats.feeTotal}`, + timestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.DEFICHAIN]: { + fetch, + start: 0, + runAtCurrTime: true + }, + }, +}; + +export default adapter; From a5b3a5dcbc3c77b1e9617f8eeae95346fd1b0dcc Mon Sep 17 00:00:00 2001 From: igorshelkovenkov Date: Sun, 24 Mar 2024 21:52:21 +0100 Subject: [PATCH 0198/1590] add javsphere methodology --- dexs/javsphere/index.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dexs/javsphere/index.ts b/dexs/javsphere/index.ts index dd07ce3489..875cd5571a 100644 --- a/dexs/javsphere/index.ts +++ b/dexs/javsphere/index.ts @@ -15,6 +15,11 @@ type DexData = { volumeSellFees: number }; +const methodology = { + Fees: "User pays 0.1% fees on each trade.", + Volume: "User buys and sell RWA tokens.." +} + const fetch = async (timestamp: number) => { const stats: DexData = (await fetchURL(`https://aws-api.javlis.com/api/dtoken/stats`)).data; console.log(stats) @@ -30,7 +35,10 @@ const adapter: SimpleAdapter = { [CHAIN.DEFICHAIN]: { fetch, start: 0, - runAtCurrTime: true + runAtCurrTime: true, + meta: { + methodology + }, }, }, }; From f0190c0c9324d034c72081c35676bca5a70356bf Mon Sep 17 00:00:00 2001 From: igorshelkovenkov Date: Sun, 24 Mar 2024 21:53:54 +0100 Subject: [PATCH 0199/1590] remove log --- dexs/javsphere/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/dexs/javsphere/index.ts b/dexs/javsphere/index.ts index 875cd5571a..7a4fdd4a99 100644 --- a/dexs/javsphere/index.ts +++ b/dexs/javsphere/index.ts @@ -22,7 +22,6 @@ const methodology = { const fetch = async (timestamp: number) => { const stats: DexData = (await fetchURL(`https://aws-api.javlis.com/api/dtoken/stats`)).data; - console.log(stats) return { totalVolume: `${stats.volumeTotal}`, totalFees: `${stats.feeTotal}`, From 8298943c696b534bf0923f816d464a07e5e7f127 Mon Sep 17 00:00:00 2001 From: Vladislav Petushkov Date: Mon, 25 Mar 2024 10:44:43 +0400 Subject: [PATCH 0200/1590] add volume and fees swop.fi adapter --- dexs/swop/index.ts | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 dexs/swop/index.ts diff --git a/dexs/swop/index.ts b/dexs/swop/index.ts new file mode 100644 index 0000000000..f38411ef9c --- /dev/null +++ b/dexs/swop/index.ts @@ -0,0 +1,61 @@ +import fetchURL from "../../utils/fetchURL" +import type { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const URL = "https://backend.swop.fi/pools" + +const methodology = { + Fees: "A minor fee is collected on each swap, functioning as trading fees.\n" + + "The fees are set at 0.6% for CPMM pools (with volatile coins) and 0.15% for stablecoin pools. A fee discount of 5-35% is granted to governance token stakers.", + Revenue: "Revenue is 35% of all collected fees", + ProtocolRevenue: "10% of all collected fees go to the Team Fund. 21% of fees are spent for the governance token buyout and burning. ", + HoldersRevenue: "Revenue for stakers is 14% of all collected fees", + SupplySideRevenue: "LP revenue is 55% of all collected fees" +} +interface IInfo { + day: IVolume; + week: IVolume; +}; + +interface IVolume { + liquidityFee: string; + amountTransactions: string; + governanceFee: string; + volume: string; +}; + +interface IAPIResponse { + overall: IInfo; +}; + +const fetch = async (timestamp: number) => { + const response: IAPIResponse = (await fetchURL(URL)); + const fees = (parseFloat(response.overall.day.liquidityFee) + parseFloat(response.overall.day.governanceFee)) // 90% of fees + const teamRevenue = fees / 90 * 10 // 10% of fees going to team treasure + return { + dailyVolume: `${response.overall.day.volume}`, + dailyFees: `${fees + teamRevenue}`, + dailyUserFees: `${fees + teamRevenue}`, + dailyRevenue: `${response.overall.day.governanceFee}`, + dailyProtocolRevenue: `${teamRevenue}`, + dailyHoldersRevenue: `${response.overall.day.governanceFee}`, + dailySupplySideRevenue: `${response.overall.day.liquidityFee}`, + timestamp: timestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.WAVES]: { + fetch, + runAtCurrTime: true, + customBackfill: undefined, + start: 0, + meta: { + methodology + } + }, + } +}; + +export default adapter; From c22844903de67ad24169cbf392d7eaa72d20b7a8 Mon Sep 17 00:00:00 2001 From: liukan Date: Mon, 25 Mar 2024 08:42:47 +0000 Subject: [PATCH 0201/1590] add aperture trading volume aggregator --- aggregators/aperture/index.ts | 121 ++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 aggregators/aperture/index.ts diff --git a/aggregators/aperture/index.ts b/aggregators/aperture/index.ts new file mode 100644 index 0000000000..ff7a756454 --- /dev/null +++ b/aggregators/aperture/index.ts @@ -0,0 +1,121 @@ +import { httpGet } from "../../utils/fetchURL"; +import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const chainToId: Record = { + [CHAIN.ETHEREUM]: 1, + [CHAIN.ARBITRUM]: 42161, + [CHAIN.AVAX]: 43114, + [CHAIN.BSC]: 56, + [CHAIN.FANTOM]: 250, + [CHAIN.OPTIMISM]: 10, + [CHAIN.POLYGON]: 137, + [CHAIN.LINEA]: 59144, + [CHAIN.SCROLL]: 534352, + [CHAIN.ERA]: 324, + [CHAIN.CRONOS]: 25, +}; + +const url = "https://api.hyperfocal.tech/getMetricsBreakDownSinceInception" + +interface VolumeInfo { + chainId: number; + tve: number; + txCount: number; +} + +interface VolumeResponse { + dailyVolume: VolumeInfo[]; + totalVolume: VolumeInfo[]; +} + +const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { + const chainId = chainToId[options.chain] + const fetchUrl = `${url}?chainid=${chainId}×tamp=${timestamp}` + const data: VolumeResponse = (await httpGet(fetchUrl, { timeout: 100000 })); + + if (data) { + let dailyVolume :number = 0 + let totalVolume :number = 0 + if (data.dailyVolume) { + data.dailyVolume.forEach(r => { + if (r.chainId == chainId) { + dailyVolume = r.tve + } + }) + } + + if (data.totalVolume) { + data.totalVolume.forEach(r => { + if (r.chainId == chainId) { + totalVolume = r.tve + } + }) + } + + return { + dailyVolume: dailyVolume, + totalVolume: totalVolume, + timestamp: timestamp + } + } else { + //console.log("no data") + return { + dailyVolume: 0, + totalVolume: 0, + timestamp: timestamp, + } + } +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: fetch, + runAtCurrTime: false, + start: 1689657695, + }, + [CHAIN.ARBITRUM]: { + fetch: fetch, + runAtCurrTime: false, + start: 1689014691, + }, + [CHAIN.AVAX]: { + fetch: fetch, + runAtCurrTime: false, + start: 1696671295, + }, + [CHAIN.BASE]: { + fetch: fetch, + runAtCurrTime: false, + start: 1697229723, + }, + [CHAIN.BSC]: { + fetch: fetch, + runAtCurrTime: false, + start: 1696963675, + }, + [CHAIN.OPTIMISM]: { + fetch: fetch, + runAtCurrTime: false, + start: 1696888429, + }, + [CHAIN.POLYGON]: { + fetch: fetch, + runAtCurrTime: false, + start: 1696888519, + }, + [CHAIN.MANTA]: { + fetch: fetch, + runAtCurrTime: false, + start: 1695079629, + }, + [CHAIN.SCROLL]: { + fetch: fetch, + runAtCurrTime: false, + start: 1702694992, + } + } +}; + +export default adapter \ No newline at end of file From fead658a3b882d6375ae65372fe5952e75ae56ad Mon Sep 17 00:00:00 2001 From: liukan Date: Mon, 25 Mar 2024 09:41:11 +0000 Subject: [PATCH 0202/1590] ignore null chainid --- aggregators/aperture/index.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/aggregators/aperture/index.ts b/aggregators/aperture/index.ts index ff7a756454..0748128b0a 100644 --- a/aggregators/aperture/index.ts +++ b/aggregators/aperture/index.ts @@ -31,6 +31,13 @@ interface VolumeResponse { const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { const chainId = chainToId[options.chain] + if (!chainId) { + return { + dailyVolume: 0, + totalVolume: 0, + timestamp: timestamp, + } + } const fetchUrl = `${url}?chainid=${chainId}×tamp=${timestamp}` const data: VolumeResponse = (await httpGet(fetchUrl, { timeout: 100000 })); From 5d3a985b21db6450182b339df54f71a028e1b8e4 Mon Sep 17 00:00:00 2001 From: igorshelkovenkov Date: Mon, 25 Mar 2024 13:15:36 +0100 Subject: [PATCH 0203/1590] add daily volume and fees --- dexs/javsphere/index.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dexs/javsphere/index.ts b/dexs/javsphere/index.ts index 7a4fdd4a99..18db7d6559 100644 --- a/dexs/javsphere/index.ts +++ b/dexs/javsphere/index.ts @@ -12,12 +12,15 @@ type DexData = { volumeBuyFees: number, countSell: number, volumeSell: number, - volumeSellFees: number + volumeSellFees: number, + volume24: number, + fee24: number + }; const methodology = { Fees: "User pays 0.1% fees on each trade.", - Volume: "User buys and sell RWA tokens.." + Volume: "User buys and sell RWA tokens.", } const fetch = async (timestamp: number) => { @@ -25,6 +28,8 @@ const fetch = async (timestamp: number) => { return { totalVolume: `${stats.volumeTotal}`, totalFees: `${stats.feeTotal}`, + dailyFees: `${stats.fee24}`, + dailyVolume: `${stats.volume24}`, timestamp, }; }; From 5b056fe1a14b212105776c3d7cc29a6ba8c834d3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 25 Mar 2024 15:48:19 +0000 Subject: [PATCH 0204/1590] add function get fees from volume --- fees/ramses-exchange.ts | 6 +++--- helpers/dexVolumeLogs.ts | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/fees/ramses-exchange.ts b/fees/ramses-exchange.ts index 449455c6c0..6ae2e6aa91 100644 --- a/fees/ramses-exchange.ts +++ b/fees/ramses-exchange.ts @@ -1,16 +1,16 @@ import { SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getDexFeesExports } from "../helpers/dexVolumeLogs"; +import { exportDexVolumeAndFees } from "../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0xaaa20d08e59f6561f242b08513d36266c5a29415'; const adapter: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM]: { - fetch: getDexFeesExports({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS,}), + fetch: exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS,}), start: 1678838400, }, } }; -export default adapter; \ No newline at end of file +export default adapter; diff --git a/helpers/dexVolumeLogs.ts b/helpers/dexVolumeLogs.ts index 1713544a3c..110e49b446 100644 --- a/helpers/dexVolumeLogs.ts +++ b/helpers/dexVolumeLogs.ts @@ -24,7 +24,7 @@ const statbleaAbi: any = { "type": "function" }; -export async function getDexVolume({ factory, timestamp, pools, fetchOptions, pairLengthAbi = 'allPairsLength', pairItemAbi = 'allPairs', swapEvent = _swapEvent }: getDexVolumeParams) { +export async function getDexVolumeAndFees({ factory, timestamp, pools, fetchOptions, pairLengthAbi = 'allPairsLength', pairItemAbi = 'allPairs', swapEvent = _swapEvent }: getDexVolumeParams) { const { api, createBalances } = fetchOptions; if (!pools) pools = await api.fetchList({ lengthAbi: pairLengthAbi, itemAbi: pairItemAbi, target: factory! }) @@ -58,12 +58,48 @@ export async function getDexVolume({ factory, timestamp, pools, fetchOptions, pa } } +export async function getDexVolume({ factory, timestamp, pools, fetchOptions, pairLengthAbi = 'allPairsLength', pairItemAbi = 'allPairs', swapEvent = _swapEvent }: getDexVolumeParams) { + const { api } = fetchOptions; + if (!pools) pools = await api.fetchList({ lengthAbi: pairLengthAbi, itemAbi: pairItemAbi, target: factory! }) + + const token0s = await api.multiCall({ abi: 'address:token0', calls: pools! }) + const token1s = await api.multiCall({ abi: 'address:token1', calls: pools! }) + + const logs = await fetchOptions.getLogs({ + targets: pools, + eventAbi: swapEvent, + flatten: false, + }); + + logs.forEach((log: any[], index: number) => { + const token0 = token0s[index] + const token1 = token1s[index] + if (!log.length) return + log.forEach((i: any) => { + // api.add(token0, i.amount0In) // we should count only one side of the swap + api.add(token0, i.amount0Out) + // api.add(token1, i.amount1In) + api.add(token1, i.amount1Out) + }) + }) + return { + timestamp, + dailyVolume: api.getBalancesV2(), + } +} + export function getDexVolumeExports(options: getDexVolumeExportsParams): any { return async (timestamp: number, _cb: any, fetchOptions: FetchOptions) => { const params = { ...options, timestamp, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, fetchOptions } return getDexVolume(params) } } +export function exportDexVolumeAndFees(options: getDexVolumeExportsParams): any { + return async (timestamp: number, _cb: any, fetchOptions: FetchOptions) => { + const params = { ...options, timestamp, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, fetchOptions } + return getDexVolumeAndFees(params) + } +} type getDexFeesParams = { chain: string, fromTimestamp?: number, toTimestamp?: number, factory?: string, timestamp: number, pools?: string[], lengthAbi?: string, itemAbi?: string, fromBlock?: number, toBlock?: number, fetchOptions: FetchOptions, } type getDexFeesExportParams = { chain: string, factory?: string, pools?: string[], lengthAbi?: string, itemAbi?: string, } From ba5655db5dba892e698e07ef65080f778f59dde1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 25 Mar 2024 16:14:26 +0000 Subject: [PATCH 0205/1590] fix call fees --- fees/ramses-exchange/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/ramses-exchange/index.ts b/fees/ramses-exchange/index.ts index 6d3050af30..e53ede184d 100644 --- a/fees/ramses-exchange/index.ts +++ b/fees/ramses-exchange/index.ts @@ -1,6 +1,6 @@ import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexFeesExports } from "../../helpers/dexVolumeLogs"; +import { getDexFeesExports, exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; import { fees_bribes } from './bribes'; @@ -38,7 +38,7 @@ const adapter: Adapter = { adapter: { [CHAIN.ARBITRUM]: { fetch: async (options: FetchOptions) => { - const v1Results = await getDexFeesExports({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS,}) + const v1Results = await exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS,})(options.endTimestamp, {}, options) const bribesResult = await getBribes(options); v1Results.dailyBribesRevenue = bribesResult.dailyBribesRevenue; @@ -55,4 +55,4 @@ const adapter: Adapter = { }, }; -export default adapter; \ No newline at end of file +export default adapter; From 39d70c27f0906a1abd6d09a28853147161530545 Mon Sep 17 00:00:00 2001 From: liukan Date: Tue, 26 Mar 2024 04:21:22 +0000 Subject: [PATCH 0206/1590] add manta --- aggregators/aperture/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aggregators/aperture/index.ts b/aggregators/aperture/index.ts index 0748128b0a..d0ebf048da 100644 --- a/aggregators/aperture/index.ts +++ b/aggregators/aperture/index.ts @@ -14,9 +14,10 @@ const chainToId: Record = { [CHAIN.SCROLL]: 534352, [CHAIN.ERA]: 324, [CHAIN.CRONOS]: 25, + [CHAIN.MANTA]: 169, }; -const url = "https://api.hyperfocal.tech/getMetricsBreakDownSinceInception" +const url = "https://api.aperture.finance/getMetricsBreakDownSinceInception" interface VolumeInfo { chainId: number; From 6de5d4756db24806a4ac0eefc45e34ae8e3c653a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 26 Mar 2024 12:01:49 +0000 Subject: [PATCH 0207/1590] update sdk --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4e997a6309..61f9a8bfcf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.42", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.42.tgz", - "integrity": "sha512-9Iss3LFXIH9KNnjYSOUmN2nEw/Yx1dbRRz76scgStZzTbMlXrrtJ28IwVMWi5Q6uiMS+yJN/SO6eCUFICfcQ5A==", + "version": "5.0.46", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.46.tgz", + "integrity": "sha512-fANQAVsb+I/Ha9TlAB3T6VdWLh+SWWvhWYSOxm+x0fD6fjYNFkt8N6N1nEa6U8DIcl0vHetfBLQll4D+o3Rt5A==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@supercharge/promise-pool": "^2.1.0", From 0003db7aa6c3de591d9a91432b7c5cf2d563cff0 Mon Sep 17 00:00:00 2001 From: WOWMAX CTO Date: Tue, 26 Mar 2024 17:02:45 +0400 Subject: [PATCH 0208/1590] add Blast chain to WOWMAX --- aggregators/wowmax/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/aggregators/wowmax/index.ts b/aggregators/wowmax/index.ts index 4081697b42..26c22e9ed4 100644 --- a/aggregators/wowmax/index.ts +++ b/aggregators/wowmax/index.ts @@ -10,6 +10,7 @@ const chains = [ CHAIN.SCROLL, CHAIN.CRONOS, CHAIN.MANTA, + CHAIN.BLAST, ]; const chainToId: Record = { @@ -19,7 +20,8 @@ const chainToId: Record = { [CHAIN.LINEA]: 59144, [CHAIN.SCROLL]: 534352, [CHAIN.CRONOS]: 25, - [CHAIN.MANTA]: 169 + [CHAIN.MANTA]: 169, + [CHAIN.BLAST]: 81457, }; const fetch = (chain: string) => async (timestamp: number) => { From d320948404c648b576bade807e2d3aea4e71d0ba Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 26 Mar 2024 15:13:43 +0000 Subject: [PATCH 0209/1590] fix swapgpt --- aggregators/swapgpt/index.ts | 4 ++-- dexs/blitz/index.ts | 12 ++++++------ dexs/cauldron/index.ts | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/aggregators/swapgpt/index.ts b/aggregators/swapgpt/index.ts index c9414769c3..9bbb9f594c 100644 --- a/aggregators/swapgpt/index.ts +++ b/aggregators/swapgpt/index.ts @@ -10,8 +10,8 @@ interface IVolumeall { amount: string; } -const baseUrl = "https://stats.swapgpt.ai" -const endpoint = "stats/getDefiLamaStats" +const baseUrl = "https://stats.panora.exchange"; +const endpoint = "stats/getDefiLamaStats"; const fetch = async (timestamp: number) => { diff --git a/dexs/blitz/index.ts b/dexs/blitz/index.ts index b5f4e42b37..4ee4f10dd7 100644 --- a/dexs/blitz/index.ts +++ b/dexs/blitz/index.ts @@ -53,15 +53,15 @@ const computeVolume = async (timestamp: number, productIds: number[]) => { snapshots[1].cumulative_volumes; const totalVolume = Number( Object.values(lastCumulativeVolumes).reduce( - (acc, current) => acc + BigInt(current), - BigInt(0) - ) / BigInt(10 ** 18) + (acc, current) => acc + Number(current), + Number(0) + ) / Number(10 ** 18) ); const totalVolumeOneDayAgo = Number( Object.values(prevCumulativeVolumes).reduce( - (acc, current) => acc + BigInt(current), - BigInt(0) - ) / BigInt(10 ** 18) + (acc, current) => acc + Number(current), + Number(0) + ) / Number(10 ** 18) ); const dailyVolume = totalVolume - totalVolumeOneDayAgo; return { diff --git a/dexs/cauldron/index.ts b/dexs/cauldron/index.ts index e33d9f9822..633c786fc7 100644 --- a/dexs/cauldron/index.ts +++ b/dexs/cauldron/index.ts @@ -34,12 +34,12 @@ export async function fetchCauldronVolume( const volume = await fetchURL(endpoint) const total_sats = volume.reduce((acc, token) => { - return acc + BigInt(token.total_sats) - }, BigInt(0)); + return acc + Number(token.total_sats) + }, Number(0)); const daily_sats = volume.reduce((acc, token) => { - return acc + BigInt(token.one_day_sats) - }, BigInt(0)); + return acc + Number(token.one_day_sats) + }, Number(0)); const COIN = 100000000n; From ddbe921becf257eaeb74d83392e26d29909fa928 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 26 Mar 2024 15:19:58 +0000 Subject: [PATCH 0210/1590] fix type --- dexs/cauldron/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/cauldron/index.ts b/dexs/cauldron/index.ts index 633c786fc7..779784a769 100644 --- a/dexs/cauldron/index.ts +++ b/dexs/cauldron/index.ts @@ -41,7 +41,7 @@ export async function fetchCauldronVolume( return acc + Number(token.one_day_sats) }, Number(0)); - const COIN = 100000000n; + const COIN = 100000000; const dailyVolume = options.createBalances(); const totalVolume = options.createBalances(); From 8c2c761439823623500af6ae3a15c2fa4d351f2a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 26 Mar 2024 18:18:25 +0000 Subject: [PATCH 0211/1590] fix stuck adapter --- dexs/DerpDEX/index.ts | 6 +++--- dexs/hydradex/index.ts | 12 ++++++------ dexs/makiswap/index.ts | 6 +++++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/dexs/DerpDEX/index.ts b/dexs/DerpDEX/index.ts index 7f47fa594e..b7dfda7c52 100644 --- a/dexs/DerpDEX/index.ts +++ b/dexs/DerpDEX/index.ts @@ -7,13 +7,13 @@ const endpoints = { "https://api.studio.thegraph.com/query/49147/derpdex-v3-amm/v0.0.10", [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/geckocoding/derpdex-amm-base", - [CHAIN.OP_BNB]: - "https://opbnb.subgraph.derpdex.com/subgraphs/name/geckocoding/derpdex-opbnb", + // [CHAIN.OP_BNB]: + // "https://opbnb.subgraph.derpdex.com/subgraphs/name/geckocoding/derpdex-opbnb", }; const v3StartTimes = { [CHAIN.ERA]: 1688515200, [CHAIN.BASE]: 1692296100, - [CHAIN.OP_BNB]: 1695275237, + // [CHAIN.OP_BNB]: 1695275237, }; const v3Graphs = getGraphDimensions({ diff --git a/dexs/hydradex/index.ts b/dexs/hydradex/index.ts index b0b3fe33c2..d1595ba26b 100644 --- a/dexs/hydradex/index.ts +++ b/dexs/hydradex/index.ts @@ -123,12 +123,12 @@ const adapter: BreakdownAdapter = { v2: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.HYDRA]: { - fetch: v2Graph(CHAIN.HYDRA), - start: getStartTimestamp({ - endpoints: v2Endpoints, - chain: CHAIN.HYDRA, - dailyDataField: 'hydraswapDayDatas', - }), + fetch: async (timestamp: number) => { + return { + timestamp + } + }, + start: 0, meta: { methodology, }, diff --git a/dexs/makiswap/index.ts b/dexs/makiswap/index.ts index 203a2042d4..0241ed2593 100644 --- a/dexs/makiswap/index.ts +++ b/dexs/makiswap/index.ts @@ -1,9 +1,13 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; -export default univ2Adapter({ +const adapter = univ2Adapter({ [CHAIN.HECO]: "https://api2.makiswap.com/subgraphs/name/maki-mainnet/exchange" }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData" }); + +adapter.adapter[CHAIN.HECO].start = 1630000000; +adapter.adapter[CHAIN.HECO].fetch = async (timestamp: number) => { return { timestamp}}; +export default adapter; From 5c0e044ecd1ada9f8ead8c7df32a44c73b767770 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 26 Mar 2024 18:23:27 +0000 Subject: [PATCH 0212/1590] fix sushiswap --- dexs/sushiswap/trident.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/sushiswap/trident.ts b/dexs/sushiswap/trident.ts index e5642af2cc..3ffdf7208d 100644 --- a/dexs/sushiswap/trident.ts +++ b/dexs/sushiswap/trident.ts @@ -9,7 +9,7 @@ const endpointsTrident: Record = { [CHAIN.POLYGON]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-polygon', [CHAIN.OPTIMISM]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-optimism', //[CHAIN.KAVA]: 'https://pvt.graph.kava.io/subgraphs/name/sushi-v2/trident-kava', - [CHAIN.METIS]: 'https://andromeda.thegraph.metis.io/subgraphs/name/sushi-v2/trident-metis', + // [CHAIN.METIS]: 'https://andromeda.thegraph.metis.io/subgraphs/name/sushi-v2/trident-metis', [CHAIN.BITTORRENT]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v2/trident-bttc', [CHAIN.ARBITRUM]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-arbitrum', [CHAIN.BSC]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-bsc', From d79e1c1e66870184a61e1edd5c1da3eb7af8652e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 26 Mar 2024 18:25:54 +0000 Subject: [PATCH 0213/1590] fix error --- dexs/polkaswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/polkaswap/index.ts b/dexs/polkaswap/index.ts index d7e8cb1a80..9bb1a4413a 100644 --- a/dexs/polkaswap/index.ts +++ b/dexs/polkaswap/index.ts @@ -16,7 +16,7 @@ const getDailyVolume = () => { }` } -const graphQLClient = new GraphQLClient("https://api.subquery.network/sq/sora-xor/sora-prod-sub4"); +const graphQLClient = new GraphQLClient("https://api.subquery.network/sq/sora-xor/sora-prod"); const getGQLClient = () => { return graphQLClient } From 8b3b3bbd1842c1343481fc067ec2297d1ae6a364 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 26 Mar 2024 18:49:29 +0000 Subject: [PATCH 0214/1590] fix adapter --- dexs/mistswap/index.ts | 1 + dexs/wojak-finance/index.ts | 2 +- dexs/yodeswap/index.ts | 6 +++++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/dexs/mistswap/index.ts b/dexs/mistswap/index.ts index 4d34cc45de..3bb77674b4 100644 --- a/dexs/mistswap/index.ts +++ b/dexs/mistswap/index.ts @@ -14,5 +14,6 @@ const adapters = univ2Adapter({ }); adapters.adapter.smartbch.start = 1633220803; +adapters.adapter.smartbch.fetch = async (timestamp: number) => { return { timestamp } }; adapters.adapter[DISABLED_ADAPTER_KEY] = disabledAdapter; export default adapters; diff --git a/dexs/wojak-finance/index.ts b/dexs/wojak-finance/index.ts index 8d017cbc7f..50e62286bc 100644 --- a/dexs/wojak-finance/index.ts +++ b/dexs/wojak-finance/index.ts @@ -65,7 +65,7 @@ const adapter: SimpleAdapter = { adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.DOGECHAIN]: { - fetch: graphs(CHAIN.DOGECHAIN), + fetch: async (timestamp: number) => {return {timestamp} }, start: 1661731200, }, }, diff --git a/dexs/yodeswap/index.ts b/dexs/yodeswap/index.ts index a203230a7b..5bd76bd03f 100644 --- a/dexs/yodeswap/index.ts +++ b/dexs/yodeswap/index.ts @@ -1,6 +1,10 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; -export default univ2Adapter({ +const adapter = univ2Adapter({ [CHAIN.DOGECHAIN]: "https://graph.yodeswap.dog/subgraphs/name/yodeswap" }, {}); + +adapter.adapter[CHAIN.DOGECHAIN].start = 1630000000; +adapter.adapter[CHAIN.DOGECHAIN].fetch = async (timestamp: number) => { return { timestamp}}; +export default adapter; From ffc8fdd726c4282088a5fe48350372eca1eb987c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 26 Mar 2024 18:57:12 +0000 Subject: [PATCH 0215/1590] fix error adapter --- dexs/fcon-dex/index.ts | 2 +- dexs/horizondex/index.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/fcon-dex/index.ts b/dexs/fcon-dex/index.ts index 879763fd13..69fa9b8e8a 100644 --- a/dexs/fcon-dex/index.ts +++ b/dexs/fcon-dex/index.ts @@ -31,7 +31,7 @@ const adapter: SimpleAdapter = { adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.MANTLE]: { - fetch: fetch, + fetch: async (timestamp: number) => {return {timestamp}}, start: 1691280000, }, }, diff --git a/dexs/horizondex/index.ts b/dexs/horizondex/index.ts index 26507eb896..18d8fbc7f4 100644 --- a/dexs/horizondex/index.ts +++ b/dexs/horizondex/index.ts @@ -12,6 +12,7 @@ const adapters = univ2Adapter({ }); adapters.adapter.linea.start = 1689373614; +adapters.adapter.linea.fetch = async (timestamp: number) => { return { timestamp } }; adapters.adapter.base.start = 1690894800; export default adapters; From 3826865fa1ec0186fc221dadc01a7fbdf31f2110 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 26 Mar 2024 19:13:32 +0000 Subject: [PATCH 0216/1590] primordium rev --- fees/primordium.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/primordium.ts b/fees/primordium.ts index 1d78f2e53a..f1f74f5e10 100644 --- a/fees/primordium.ts +++ b/fees/primordium.ts @@ -10,7 +10,7 @@ const fetch: any = async (options: FetchOptions) => { })); dailyFees.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); - return { dailyFees } + return { dailyFees, dailyRevenue: dailyFees } } From 371a846ace5347ef5f75376bfd76c3e23f48a992 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 26 Mar 2024 23:07:19 +0000 Subject: [PATCH 0217/1590] add uni v2 --- protocols/uniswap/index.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index e07b9199ae..e2004f32aa 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -4,6 +4,7 @@ import { BreakdownAdapter, FetchResultGeneric, BaseAdapter } from "../../adapter import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import * as sdk from "@defillama/sdk"; +import {getUniV2LogAdapter} from "../../helpers/uniswap" import { getGraphDimensions, @@ -156,6 +157,20 @@ const startTimeV3:TStartTime = { [CHAIN.BASE]: 1691280000, [CHAIN.ERA]: 1693440000 } + +const v2Deployments = { + // ethereum: '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f', + optimism: '0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf', + arbitrum: '0xf1D7CC64Fb4452F05c498126312eBE29f30Fbcf9', + avax: '0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C', + base: '0x8909dc15e40173ff4699343b6eb8132c65e18ec6', + bsc: '0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6', + polygon: '0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C', + //celo: '0x79a530c8e2fA8748B7B40dd3629C0520c2cCf03f', + zora: '0x0F797dC7efaEA995bB916f268D919d0a1950eE3C' +} + + const adapter: BreakdownAdapter = { version: 2, breakdown: { @@ -207,6 +222,13 @@ const adapter: BreakdownAdapter = { methodology }, }, + ...Object.keys(v2Deployments).reduce((acc, chain) => { + acc[chain] = { + fetch: getUniV2LogAdapter({factory: v2Deployments[chain]}), + start: 0, + } + return acc + }, {}) }, v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { From 7c3dbdafbd2a6b285d6fc16a4fd79f73f9b136ad Mon Sep 17 00:00:00 2001 From: Surya Vamsee Date: Wed, 27 Mar 2024 15:48:43 +0530 Subject: [PATCH 0218/1590] feat: add logx volumes across all AMM chains --- dexs/logx/index.ts | 74 ++++++++++++++++++++++++++++++++++++++++++++++ helpers/chains.ts | 1 + 2 files changed, 75 insertions(+) create mode 100644 dexs/logx/index.ts diff --git a/dexs/logx/index.ts b/dexs/logx/index.ts new file mode 100644 index 0000000000..a9bbdad7ce --- /dev/null +++ b/dexs/logx/index.ts @@ -0,0 +1,74 @@ +import fetchURL from "../../utils/fetchURL"; +import { ChainBlocks, Fetch, FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const URL = "https://backend-lp.logx.trade/"; +const endpoint = "statistics/header_stats?chainId="; + +const chain_ids: { [chain: string]: string } = { + [CHAIN.MANTLE]: "5000", + [CHAIN.MODE]: "34443", + [CHAIN.BLAST]: "81457", + [CHAIN.LINEA]: "59144", + [CHAIN.KROMA]: "255", + [CHAIN.MANTA]: "169", + [CHAIN.TELOS]: "40", + [CHAIN.FUSE]: "122", +} + +interface IAPIResponse { + totalVolume: string; + totalUsers: string; + _24HVolume: string; + message: string; +} + +const getFetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions): Promise => { + const { totalVolume, totalUsers, _24HVolume, message }: IAPIResponse = ( + await fetchURL(`${URL}${endpoint}${chain_ids[chain]}`) + ); + const dailyVolume = _24HVolume; + return { + dailyVolume, + totalVolume, + timestamp, + }; + }; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.MANTLE]: { + fetch: getFetch, + start: 1701475200, + }, + [CHAIN.MODE]: { + fetch: getFetch, + start: 1707436800, + }, + [CHAIN.BLAST]: { + fetch: getFetch, + start: 1709337600, + }, + [CHAIN.LINEA]: { + fetch: getFetch, + start: 1701475200, + }, + [CHAIN.KROMA]: { + fetch: getFetch, + start: 1703548800, + }, + [CHAIN.MANTA]: { + fetch: getFetch, + start: 1705968000, + }, + [CHAIN.TELOS]: { + fetch: getFetch, + start: 1706522866, + }, + [CHAIN.FUSE]: { + fetch: getFetch, + start: 1706659200, + }, + }, + }; + \ No newline at end of file diff --git a/helpers/chains.ts b/helpers/chains.ts index d9a9a987c6..822813907c 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -141,6 +141,7 @@ export enum CHAIN { FILECOIN = "filecoin", FRAXTAL = "fraxtal", IMX = "imx", + KROMA = "kroma" } // Don´t use From 519f41bd4169041722ac12523db7fc01052364a7 Mon Sep 17 00:00:00 2001 From: blablalf Date: Wed, 27 Mar 2024 11:49:29 +0100 Subject: [PATCH 0219/1590] temporary disabling dailyProtocolRevenue because it seems deceptive --- fees/amphor/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index 5c62b8e82f..7aeed749ae 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -290,7 +290,7 @@ const data = async (timestamp: number): Promise => { totalProtocolRevenue: totalFeesNumber, totalUserFees: totalFeesNumber, dailyFees: Number(await dailyFees.getUSDValue()).toFixed(0), - dailyProtocolRevenue: dailyRevenueNumber, + // dailyProtocolRevenue: dailyRevenueNumber, //dailyRevenue: dailyRevenueNumber, }; } From c41ef9ad9124443a7be6f4686cea39e2b6808253 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 27 Mar 2024 11:32:42 +0000 Subject: [PATCH 0220/1590] fix error --- dexs/logx/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/logx/index.ts b/dexs/logx/index.ts index a9bbdad7ce..63b6a8f844 100644 --- a/dexs/logx/index.ts +++ b/dexs/logx/index.ts @@ -71,4 +71,5 @@ const adapter: SimpleAdapter = { }, }, }; - \ No newline at end of file + + export default adapter; From 2537f03a89d6e59972fd3f25c0feef406925b6f7 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 27 Mar 2024 11:39:05 +0000 Subject: [PATCH 0221/1590] fix adapter --- dexs/logx/index.ts | 16 +++++++++++++--- .../logx}/logx-aggregator/index.ts | 13 +++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) rename {aggregator-derivatives => dexs/logx}/logx-aggregator/index.ts (72%) diff --git a/dexs/logx/index.ts b/dexs/logx/index.ts index 63b6a8f844..45119031fa 100644 --- a/dexs/logx/index.ts +++ b/dexs/logx/index.ts @@ -1,6 +1,7 @@ import fetchURL from "../../utils/fetchURL"; -import { ChainBlocks, Fetch, FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, ChainBlocks, Fetch, FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import { adapterAgg } from './logx-aggregator/index' const URL = "https://backend-lp.logx.trade/"; const endpoint = "statistics/header_stats?chainId="; @@ -35,7 +36,7 @@ const getFetch = async (timestamp: number, _: ChainBlocks, { createBalances, get }; }; -const adapter: SimpleAdapter = { +const adapter: any = { adapter: { [CHAIN.MANTLE]: { fetch: getFetch, @@ -72,4 +73,13 @@ const adapter: SimpleAdapter = { }, }; - export default adapter; + + +const adapterBreakdown: BreakdownAdapter = { + breakdown: { + "derivative": adapter["adapter"], + "logx-aggregator": adapterAgg["adapter"], + } +} + +export default adapterBreakdown; diff --git a/aggregator-derivatives/logx-aggregator/index.ts b/dexs/logx/logx-aggregator/index.ts similarity index 72% rename from aggregator-derivatives/logx-aggregator/index.ts rename to dexs/logx/logx-aggregator/index.ts index badc642553..ce70a69301 100644 --- a/aggregator-derivatives/logx-aggregator/index.ts +++ b/dexs/logx/logx-aggregator/index.ts @@ -1,6 +1,6 @@ -import fetchURL from "../../utils/fetchURL"; -import { FetchResult, SimpleAdapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; +import fetchURL from "../../../utils/fetchURL"; +import { FetchResult, SimpleAdapter } from "../../../adapters/types"; +import { CHAIN } from "../../../helpers/chains"; const URL = "https://logx-data-analytics-xmxmxbqxaq-uc.a.run.app/"; const endpoint = "defillama/defillama/"; @@ -21,7 +21,7 @@ const fetch = async (timestamp: number): Promise => { }; }; -const adapter: SimpleAdapter = { +const adapterAgg: any = { adapter: { [CHAIN.ARBITRUM]: { fetch, @@ -29,5 +29,6 @@ const adapter: SimpleAdapter = { }, }, }; - -export default adapter; +export { + adapterAgg +} From 59b4b9e96d4075cce2a66de35c978c3971b3ec5f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 27 Mar 2024 11:41:22 +0000 Subject: [PATCH 0222/1590] remove agg --- aggregators/logx/index.ts | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 aggregators/logx/index.ts diff --git a/aggregators/logx/index.ts b/aggregators/logx/index.ts deleted file mode 100644 index badc642553..0000000000 --- a/aggregators/logx/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import fetchURL from "../../utils/fetchURL"; -import { FetchResult, SimpleAdapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; - -const URL = "https://logx-data-analytics-xmxmxbqxaq-uc.a.run.app/"; -const endpoint = "defillama/defillama/"; -const startTimestamp = 1686205277; // 08.06.2023 - -interface IAPIResponse { - dailyVolume: string; - totalVolume: string; -} -const fetch = async (timestamp: number): Promise => { - const { dailyVolume, totalVolume }: IAPIResponse = ( - await fetchURL(`${URL}${endpoint}${timestamp}`) - ); - return { - dailyVolume, - totalVolume, - timestamp, - }; -}; - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch, - start: startTimestamp, - }, - }, -}; - -export default adapter; From 80fc444ea5e82d662c518e7f3cd53c68e7be519e Mon Sep 17 00:00:00 2001 From: Behrang Norouzinia Date: Wed, 27 Mar 2024 19:48:49 +0330 Subject: [PATCH 0223/1590] Update Hipo to v2 --- fees/hipo/index.ts | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/fees/hipo/index.ts b/fees/hipo/index.ts index e9b6fdc6bf..cfdf4a7860 100644 --- a/fees/hipo/index.ts +++ b/fees/hipo/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from '../../helpers/chains' import { postURL } from '../../utils/fetchURL' import * as sdk from '@defillama/sdk' -const address = 'EQBNo5qAG8I8J6IxGaz15SfQVB-kX98YhKV_mT36Xo5vYxUa' +const address = 'EQCLyZHP4Xe8fpchQz76O-_RmUhaVc_9BAoGyJrwJrcbz2eZ' export default { adapter: { @@ -12,49 +12,42 @@ export default { meta: { hallmarks: [ [1698685200, 'Hipo Launch'], + [1710821940, 'Hipo v2'], ], methodology: { UserFees: 'Stakers pay no fees for using Hipo.', ProtocolRevenue: 'Hipo receives a small fee before distributing rewards to stakers.', SupplySideRevenue: 'Stakers receive the rest of the rewards, after deducting validators share and protocol fee.', - HoldersRevenue: 'Currently there is not government token.', + HoldersRevenue: 'Currently there is no governance token.', Revenue: 'All generated revenue is from protocol fee.', Fees: 'The total reward is calculated after deducting validators share, so it is the stakers revenue plus protocol revenue.', }, }, fetch: async () => { - const response1 = await postURL('https://toncenter.com/api/v2/runGetMethod', { + const getTreasuryState = await postURL('https://toncenter.com/api/v3/runGetMethod', { address, method: 'get_treasury_state', stack: [], }) - if (!response1.ok) { - throw new Error('Error in calling toncenter.com/api/v2/runGetMethod') - } - const getTreasuryState = response1.result if (getTreasuryState.exit_code !== 0) { throw new Error('Expected a zero exit code, but got ' + getTreasuryState.exit_code) } - const response2 = await postURL('https://toncenter.com/api/v2/runGetMethod', { + const getTimes = await postURL('https://toncenter.com/api/v3/runGetMethod', { address, method: 'get_times', stack: [], }) - if (!response2.ok) { - throw new Error('Error in calling toncenter.com/api/v2/runGetMethod') - } - const getTimes = response2.result if (getTimes.exit_code !== 0) { throw new Error('Expected a zero exit code, but got ' + getTimes.exit_code) } - const lastStaked = Number(getTreasuryState.stack[5][1]) - const lastRecovered = Number(getTreasuryState.stack[6][1]) - const governanceFee = Number(getTreasuryState.stack[16][1]) + const lastStaked = Number(getTreasuryState.stack[11].value) + const lastRecovered = Number(getTreasuryState.stack[12].value) + const governanceFee = Number(getTreasuryState.stack[16].value) - const currentRoundSince = Number(getTimes.stack[0][1]) - const nextRoundSince = Number(getTimes.stack[3][1]) + const currentRoundSince = Number(getTimes.stack[0].value) + const nextRoundSince = Number(getTimes.stack[3].value) const duration = nextRoundSince - currentRoundSince const normalize = normalizer(duration) From 91adbe717dc2673c8e5f16d2ecbf37a6e44cb0e3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 27 Mar 2024 16:26:04 +0000 Subject: [PATCH 0224/1590] add aggregator-derivatives --- aggregator-derivatives/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 aggregator-derivatives/.gitkeep diff --git a/aggregator-derivatives/.gitkeep b/aggregator-derivatives/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 From 8a3ae744571baea5ef211a319b1e092a05e18019 Mon Sep 17 00:00:00 2001 From: Surya Vamsee Date: Thu, 28 Mar 2024 01:48:03 +0530 Subject: [PATCH 0225/1590] fix: fix API to accept timestamps and give relavant data --- dexs/logx/index.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dexs/logx/index.ts b/dexs/logx/index.ts index 45119031fa..b03e90d964 100644 --- a/dexs/logx/index.ts +++ b/dexs/logx/index.ts @@ -3,8 +3,7 @@ import { BreakdownAdapter, ChainBlocks, Fetch, FetchOptions, FetchResult, Simple import { CHAIN } from "../../helpers/chains"; import { adapterAgg } from './logx-aggregator/index' -const URL = "https://backend-lp.logx.trade/"; -const endpoint = "statistics/header_stats?chainId="; +const URL = "https://backend-lp.logx.trade/defillama"; const chain_ids: { [chain: string]: string } = { [CHAIN.MANTLE]: "5000", @@ -26,7 +25,7 @@ interface IAPIResponse { const getFetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions): Promise => { const { totalVolume, totalUsers, _24HVolume, message }: IAPIResponse = ( - await fetchURL(`${URL}${endpoint}${chain_ids[chain]}`) + await fetchURL(`${URL}?chainId${chain_ids[chain]}?timestamp${timestamp}`) ); const dailyVolume = _24HVolume; return { From a103dd5439f0be783b3f2f5d4ea80e462db1d599 Mon Sep 17 00:00:00 2001 From: Surya Vamsee Date: Thu, 28 Mar 2024 01:49:58 +0530 Subject: [PATCH 0226/1590] fix: fix api call --- dexs/logx/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/logx/index.ts b/dexs/logx/index.ts index b03e90d964..4e95dae8ab 100644 --- a/dexs/logx/index.ts +++ b/dexs/logx/index.ts @@ -25,7 +25,7 @@ interface IAPIResponse { const getFetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions): Promise => { const { totalVolume, totalUsers, _24HVolume, message }: IAPIResponse = ( - await fetchURL(`${URL}?chainId${chain_ids[chain]}?timestamp${timestamp}`) + await fetchURL(`${URL}?chainId=${chain_ids[chain]}×tamp=${timestamp}`) ); const dailyVolume = _24HVolume; return { From e4676b1919529133672f643e42a04b83e6c6ddf3 Mon Sep 17 00:00:00 2001 From: Surya Vamsee Date: Thu, 28 Mar 2024 01:58:34 +0530 Subject: [PATCH 0227/1590] fix: fix the type of the API response --- dexs/logx/index.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/dexs/logx/index.ts b/dexs/logx/index.ts index 4e95dae8ab..2045fdcad9 100644 --- a/dexs/logx/index.ts +++ b/dexs/logx/index.ts @@ -17,17 +17,14 @@ const chain_ids: { [chain: string]: string } = { } interface IAPIResponse { + dailyVolume: string; totalVolume: string; - totalUsers: string; - _24HVolume: string; - message: string; } const getFetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions): Promise => { - const { totalVolume, totalUsers, _24HVolume, message }: IAPIResponse = ( + const { dailyVolume, totalVolume }: IAPIResponse = ( await fetchURL(`${URL}?chainId=${chain_ids[chain]}×tamp=${timestamp}`) ); - const dailyVolume = _24HVolume; return { dailyVolume, totalVolume, From 1839f30c0b7a530b203c45f8e15e90000ac77bfe Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 28 Mar 2024 03:45:35 +0000 Subject: [PATCH 0228/1590] update names --- dexs/{synfutures => synfutures-v1}/index.ts | 0 fees/{camelot.ts => camelot-v2.ts} | 0 fees/{thena.ts => thena-v1.ts} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename dexs/{synfutures => synfutures-v1}/index.ts (100%) rename fees/{camelot.ts => camelot-v2.ts} (100%) rename fees/{thena.ts => thena-v1.ts} (100%) diff --git a/dexs/synfutures/index.ts b/dexs/synfutures-v1/index.ts similarity index 100% rename from dexs/synfutures/index.ts rename to dexs/synfutures-v1/index.ts diff --git a/fees/camelot.ts b/fees/camelot-v2.ts similarity index 100% rename from fees/camelot.ts rename to fees/camelot-v2.ts diff --git a/fees/thena.ts b/fees/thena-v1.ts similarity index 100% rename from fees/thena.ts rename to fees/thena-v1.ts From 5b5bef2f7fd63a6df5f3fcdc9d3eadc250ddf1b0 Mon Sep 17 00:00:00 2001 From: web3dev00 Date: Thu, 28 Mar 2024 13:33:25 +0500 Subject: [PATCH 0229/1590] chore: added optionBlizt dexs and fees --- dexs/optionBlitz/index.ts | 76 +++++++++++++++++++++++++++++++++ fees/optionBlitz/index.ts | 89 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 dexs/optionBlitz/index.ts create mode 100644 fees/optionBlitz/index.ts diff --git a/dexs/optionBlitz/index.ts b/dexs/optionBlitz/index.ts new file mode 100644 index 0000000000..541200e7e1 --- /dev/null +++ b/dexs/optionBlitz/index.ts @@ -0,0 +1,76 @@ +import ADDRESSES from "../../helpers/coreAssets.json"; +import { FetchResult, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, request } from "graphql-request"; +import * as sdk from "@defillama/sdk"; + +interface IDayDataGraph { + id: string; + volumeUsdc: string; +} +interface ITotalDataGraph { + id: string; + totalVolumeUsdc: string; + timestamp: string; +} + +const URL = "https://api.thegraph.com/subgraphs/name/web3dev00/optionblitz"; + +const fetch = async (): Promise => { + const date = new Date(); + date.setUTCHours(0, 0, 0, 0); + const dayTimestamp = date.getTime(); + const chain = CHAIN.ARBITRUM; + const balances = new sdk.Balances({ chain }); + const balances1 = new sdk.Balances({ chain }); + + const dayDataQuery = gql` + { + dayData(id: ${dayTimestamp}) { + id + volumeUsdc + } + }`; + + const totalDataQuery = gql` + { + totalDatas { + id + totalVolumeUsdc + timestamp + } + }` + + const dayDataResponse: IDayDataGraph = (await request(URL, dayDataQuery)).dayData; + const totalDataResponse: ITotalDataGraph[] = (await request(URL, totalDataQuery)).totalDatas; + + let dailyVolume = BigInt(0); + let totalVolume = BigInt(0); + + if (dayDataResponse) { + dailyVolume = BigInt(dayDataResponse.volumeUsdc); + } + + if (totalDataResponse.length > 0) { + totalVolume = BigInt(totalDataResponse[0].totalVolumeUsdc); + } + + balances.add(ADDRESSES.arbitrum.USDC_CIRCLE, dailyVolume.toString()); + balances1.add(ADDRESSES.arbitrum.USDC_CIRCLE, totalVolume.toString()); + + return { + dailyVolume: await balances.getUSDString(), + totalVolume: await balances1.getUSDString(), + timestamp: dayTimestamp, + }; +}; + +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetch as any, + start: 194784191, + }, + }, +}; +export default adapters; diff --git a/fees/optionBlitz/index.ts b/fees/optionBlitz/index.ts new file mode 100644 index 0000000000..8207f8485d --- /dev/null +++ b/fees/optionBlitz/index.ts @@ -0,0 +1,89 @@ +import ADDRESSES from "../../helpers/coreAssets.json"; +import { FetchResult, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, request } from "graphql-request"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import * as sdk from "@defillama/sdk"; + +interface IDayDataGraph { + id: string; + rewardsUsdc: string; + lossesUsdc: string; +} +interface ITotalDataGraph { + id: string; + totalRewardsUsdc: string; + totalLossesUsdc: string; + timestamp: string; +} + +const URL = "https://api.thegraph.com/subgraphs/name/web3dev00/optionblitz"; + +const fetch = async (): Promise => { + const date = new Date(); + date.setUTCHours(0, 0, 0, 0); + const dayTimestamp = date.getTime(); + const chain = CHAIN.ARBITRUM; + const balances = new sdk.Balances({ chain }); + const balances1 = new sdk.Balances({ chain }); + const dayDataQuery = gql` + { + dayData(id: ${dayTimestamp}) { + id + rewardsUsdc + lossesUsdc + } + }`; + + const totalDataQuery = gql` + { + totalDatas { + id + totalRewardsUsdc + totalLossesUsdc + timestamp + } + }` + + const dayDataResponse: IDayDataGraph = (await request(URL, dayDataQuery)).dayData; + const totalDataResponse: ITotalDataGraph[] = (await request(URL, totalDataQuery)).totalDatas; + + let perDayIncome = BigInt(0); + let totalIncome = BigInt(0); + + if (dayDataResponse) { + perDayIncome = BigInt(dayDataResponse.rewardsUsdc) - BigInt(dayDataResponse.lossesUsdc); + } + + if (totalDataResponse.length > 0) { + totalIncome = BigInt(totalDataResponse[0].totalRewardsUsdc) - BigInt(totalDataResponse[0].totalLossesUsdc); + } + + balances.add(ADDRESSES[chain].USDC_CIRCLE, perDayIncome); + balances1.add(ADDRESSES[chain].USDC_CIRCLE, totalIncome); + + + return { + dailyFees: await balances.getUSDString(), + totalFees: await balances1.getUSDString(), + timestamp: dayTimestamp, + }; +}; + +const methodology = { + Fees: "Trade collateral collected.", + Revenue: "Platform profit, (trader losses minus trader wins).", +}; + +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetch as any, + start: 194784191, + meta: { + methodology: methodology, + }, + }, + }, +}; +export default adapters; From 834f99d4e02492760c8df6f559214a09b7e908c2 Mon Sep 17 00:00:00 2001 From: "a.maik" Date: Thu, 28 Mar 2024 12:30:09 +0100 Subject: [PATCH 0230/1590] Keller fees + volume adapter --- dexs/keller/index.ts | 185 +++++++++++++++++++++++++++++++++++++++ fees/keller/bribes.ts | 75 ++++++++++++++++ fees/keller/index.ts | 36 ++++++++ fees/keller/keller-v2.ts | 159 +++++++++++++++++++++++++++++++++ 4 files changed, 455 insertions(+) create mode 100644 dexs/keller/index.ts create mode 100644 fees/keller/bribes.ts create mode 100644 fees/keller/index.ts create mode 100644 fees/keller/keller-v2.ts diff --git a/dexs/keller/index.ts b/dexs/keller/index.ts new file mode 100644 index 0000000000..4910ff5c40 --- /dev/null +++ b/dexs/keller/index.ts @@ -0,0 +1,185 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import * as sdk from "@defillama/sdk"; +import { getBlock } from "../../helpers/getBlock"; +import { getPrices } from "../../utils/prices"; +import BigNumber from "bignumber.js"; +import { getTimestamp } from "@defillama/sdk/build/util"; + +interface ILog { + data: string; + transactionHash: string; +} +interface IAmount { + amount0In: string; + amount1In: string; + amount0Out: string; + amount1Out: string; +} + +const topic0 = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822'; +const FACTORY_ADDRESS = '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367'; + +type TABI = { + [k: string]: object; +} +const ABIs: TABI = { + allPairsLength: { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "allPairsLength", + "inputs": [] + }, + allPairs: { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "inputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "allPairs", + } +}; + +const PAIR_TOKEN_ABI = (token: string): object => { + return { + "constant": true, + "inputs": [], + "name": token, + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } +}; + + +const fetch = async (timestamp: number) => { + const fromTimestamp = timestamp - 60 * 60 * 24 + const toTimestamp = timestamp + try { + const poolLength = (await sdk.api.abi.call({ + target: FACTORY_ADDRESS, + chain: CHAIN.SCROLL, + abi: ABIs.allPairsLength, + }).catch(e =>{ + console.log('error', e); + throw e; + })).output; + console.log('poolLength', poolLength); + const poolsRes = await sdk.api.abi.multiCall({ + abi: ABIs.allPairs, + calls: Array.from(Array(Number(poolLength)).keys()).map((i) => ({ + target: FACTORY_ADDRESS, + params: i, + })), + chain: CHAIN.SCROLL + }); + + const lpTokens = poolsRes.output + .map(({ output }: any) => output); + + const [underlyingToken0, underlyingToken1] = await Promise.all( + ['token0', 'token1'].map((method) => + sdk.api.abi.multiCall({ + abi: PAIR_TOKEN_ABI(method), + calls: lpTokens.map((address: string) => ({ + target: address, + })), + chain: 'scroll' + }) + ) + ); + + const tokens0 = underlyingToken0.output.map((res: any) => res.output); + const tokens1 = underlyingToken1.output.map((res: any) => res.output); + const fromBlock = await getBlock(fromTimestamp, CHAIN.SCROLL, {}); + const toBlock = await getBlock(toTimestamp, CHAIN.SCROLL, {}); + + const logs: ILog[][] = (await Promise.all(lpTokens.map((address: string) => sdk.api.util.getLogs({ + target: address, + topic: '', + toBlock: toBlock, + fromBlock: fromBlock, + keys: [], + chain: CHAIN.SCROLL, + topics: [topic0] + })))) + .map((p: any) => p) + .map((a: any) => a.output); + const rawCoins = [...tokens0, ...tokens1].map((e: string) => `scroll:${e}`); + const coins = [...new Set(rawCoins)] + const prices = await getPrices(coins, timestamp); + const untrackVolumes: number[] = lpTokens.map((_: string, index: number) => { + const log: IAmount[] = logs[index] + .map((e: ILog) => { return { ...e, data: e.data.replace('0x', '') } }) + .map((p: ILog) => { + BigNumber.config({ POW_PRECISION: 100 }); + const amount0In = new BigNumber('0x' + p.data.slice(0, 64)).toString(); + const amount1In = new BigNumber('0x' + p.data.slice(64, 128)).toString(); + const amount0Out = new BigNumber('0x' + p.data.slice(128, 192)).toString(); + const amount1Out = new BigNumber('0x' + p.data.slice(192, 256)).toString(); + return { + amount0In, + amount1In, + amount0Out, + amount1Out, + } as IAmount + }) as IAmount[]; + const token0Price = (prices[`scroll:${tokens0[index]}`]?.price || 0); + const token1Price = (prices[`scroll:${tokens1[index]}`]?.price || 0); + const token0Decimals = (prices[`scroll:${tokens0[index]}`]?.decimals || 0) + const token1Decimals = (prices[`scroll:${tokens1[index]}`]?.decimals || 0) + const totalAmount0 = log + .reduce((a: number, b: IAmount) => Number(b.amount0In) + Number(b.amount0Out) + a, 0) / 10 ** token0Decimals * token0Price; + const totalAmount1 = log + .reduce((a: number, b: IAmount) => Number(b.amount1In) + Number(b.amount1Out) + a, 0) / 10 ** token1Decimals * token1Price; + + const untrackAmountUSD = token0Price !== 0 ? totalAmount0 : token1Price !== 0 ? totalAmount1 : 0; // counted only we have price data + return untrackAmountUSD; + }); + + const dailyVolume = untrackVolumes.reduce((a: number, b: number) => a + b, 0); + return { + dailyVolume: `${dailyVolume}`, + timestamp, + }; + } catch(error) { + console.error(error); + throw error; + } +} + +const adapter: SimpleAdapter = { + adapter: { + ["scroll"]: { + fetch, + start: async () => getTimestamp(4265908, "scroll") , + }, + } +}; + +export default adapter; diff --git a/fees/keller/bribes.ts b/fees/keller/bribes.ts new file mode 100644 index 0000000000..542ba5164c --- /dev/null +++ b/fees/keller/bribes.ts @@ -0,0 +1,75 @@ +import * as sdk from "@defillama/sdk"; +import { getPrices } from "../../utils/prices"; +import { ethers } from "ethers"; +import { CHAIN } from "../../helpers/chains"; + +const event_notify_reward = 'event NotifyReward(address indexed from,address indexed reward,uint256 indexed epoch,uint256 amount)'; +const event_geuge_created = 'event GaugeCreated(address indexed poolFactory,address indexed votingRewardsFactory,address indexed gaugeFactory,address pool,address bribeVotingReward,address feeVotingReward,address gauge,address creator)' + +const topic0_geuge_created = '0xef9f7d1ffff3b249c6b9bf2528499e935f7d96bb6d6ec4e7da504d1d3c6279e1'; +const contract_interface = new ethers.Interface([ + event_notify_reward, + event_geuge_created +]); + +interface ILog { + data: string; + transactionHash: string; + topics: string[]; +} + +interface IBribes { + token: string; + amount: number; +} + + +export const fees_bribes = async (fromBlock: number, toBlock: number, timestamp: number): Promise => { + try { + const voter = '0x30f827DECe6F25c74F37d0dD45bC245d893266e6'; + const logs_geuge_created: ethers.EventLog[] = (await sdk.api.util.getLogs({ + target: voter, + fromBlock: 4265908, //Block number of the contract's creation + toBlock: toBlock, + topic: '', + topics: [topic0_geuge_created], + chain: CHAIN.SCROLL, + keys: [] + })).output; + const bribes_contract: string[] = logs_geuge_created.map((e: ethers.EventLog) => { + const value = contract_interface.parseLog(e); + return value?.args.bribeVotingReward; + }) + + const logs: ILog[] = (await Promise.all(bribes_contract.map((address: string) => sdk.api.util.getLogs({ + target: address, + topic: '', + toBlock: toBlock, + fromBlock: fromBlock, + keys: [], + chain: CHAIN.SCROLL, + topics: ['0x52977ea98a2220a03ee9ba5cb003ada08d394ea10155483c95dc2dc77a7eb24b'] + })))) + .map((p: any) => p) + .map((a: any) => a.output).flat(); + + const logs_bribes = logs.map((e: ILog) => { + const value = contract_interface.parseLog(e) + return { + token: value?.args.reward, + amount: Number(value?.args.amount._hex) + } as IBribes + }) + const coins = [...new Set(logs_bribes.map((e: IBribes) => `${"scroll"}:${e.token.toLowerCase()}`))] + const prices = await getPrices(coins, timestamp); + const fees_bribes_usd = logs_bribes.map((e: IBribes) => { + const price = prices[`${"scroll"}:${e.token.toLowerCase()}`]?.price || 0; + const decimals = prices[`${"scroll"}:${e.token.toLowerCase()}`]?.decimals || 0; + return (Number(e.amount) / 10 ** decimals) * price; + }).reduce((a: number, b: number) => a+b, 0); + return fees_bribes_usd; + } catch (error) { + console.error(error); + throw error; + } +} diff --git a/fees/keller/index.ts b/fees/keller/index.ts new file mode 100644 index 0000000000..2f295f20af --- /dev/null +++ b/fees/keller/index.ts @@ -0,0 +1,36 @@ +import { Adapter, FetchResultFees } from '../../adapters/types'; +import { CHAIN } from '../../helpers/chains'; +import { fetchV2 } from './keller-v2'; +import { fees_bribes } from './bribes'; +import { getBlock } from '../../helpers/getBlock'; +import { getTimestamp } from '@defillama/sdk/build/util'; + + +const getFees = async (timestamp: number): Promise => { + const fromTimestamp = timestamp - 60 * 60 * 24 + const toTimestamp = timestamp + const fromBlock = (await getBlock(fromTimestamp, CHAIN.SCROLL, {})); + const toBlock = (await getBlock(toTimestamp, CHAIN.SCROLL, {})); + + const [feeV2, bribes] = await Promise.all([fetchV2(fromBlock, toBlock, timestamp), fees_bribes(fromBlock, toBlock, timestamp)]); + const dailyFees = Number(feeV2.dailyFees); + const dailyRevenue = Number(feeV2.dailyRevenue) + bribes; + const dailyHoldersRevenue = Number(feeV2.dailyHoldersRevenue) + bribes; + return { + dailyFees: `${dailyFees}`, + dailyRevenue: `${dailyRevenue}`, + dailyHoldersRevenue: `${dailyHoldersRevenue}`, + dailyBribesRevenue: `${bribes}`, + timestamp + } +} + +const adapter: Adapter = { + adapter: { + [CHAIN.SCROLL]: { + fetch: getFees, + start: async () => getTimestamp(4265908, "scroll"), // TODO: Add accurate timestamp + }, + }, +}; +export default adapter; diff --git a/fees/keller/keller-v2.ts b/fees/keller/keller-v2.ts new file mode 100644 index 0000000000..9ae7fbe6e1 --- /dev/null +++ b/fees/keller/keller-v2.ts @@ -0,0 +1,159 @@ +import { FetchResultFees } from "../../adapters/types"; +import * as sdk from "@defillama/sdk"; +import { getPrices } from "../../utils/prices"; +import BigNumber from "bignumber.js"; +import { CHAIN } from "../../helpers/chains"; + +interface ILog { + data: string; + transactionHash: string; +} +interface IAmount { + amount0: string; + amount1: string; +} +const topic_name = 'Swap(index_topic_1 address sender, index_topic_2 address to, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out)'; +const topic0 = '0x112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602'; +const FACTORY_ADDRESS = '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367'; + +type TABI = { + [k: string]: object; +} +const ABIs: TABI = { + allPairsLength: { + "inputs": [], + "name": "allPairsLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + allPairs: { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "allPairs", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +}; + +const PAIR_TOKEN_ABI = (token: string): object => { + return { + "constant": true, + "inputs": [], + "name": token, + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } +}; + + +export const fetchV2 = async (fromBlock: number, toBlock: number, timestamp: number): Promise => { + try { + const poolLength = (await sdk.api.abi.call({ + target: FACTORY_ADDRESS, + chain: CHAIN.SCROLL, + abi: ABIs.allPairsLength, + })).output; + + const poolsRes = await sdk.api.abi.multiCall({ + abi: ABIs.allPairs, + calls: Array.from(Array(Number(poolLength)).keys()).map((i) => ({ + target: FACTORY_ADDRESS, + params: i, + })), + chain: CHAIN.SCROLL + }); + + const lpTokens = poolsRes.output + .map(({ output }: any) => output); + + const [underlyingToken0, underlyingToken1] = await Promise.all( + ['token0', 'token1'].map((method) => + sdk.api.abi.multiCall({ + abi: PAIR_TOKEN_ABI(method), + calls: lpTokens.map((address: string) => ({ + target: address, + })), + chain: CHAIN.SCROLL, + //permitFailure: true, + }) + ) + ); + + const tokens0 = underlyingToken0.output.map((res: any) => res.output); + const tokens1 = underlyingToken1.output.map((res: any) => res.output); + const logs: ILog[][] = (await Promise.all(lpTokens.map((address: string) => sdk.api.util.getLogs({ + target: address, + topic: topic_name, + toBlock: toBlock, + fromBlock: fromBlock, + keys: [], + chain: CHAIN.SCROLL, + topics: [topic0] + })))) + .map((p: any) => p) + .map((a: any) => a.output); + const rawCoins = [...tokens0, ...tokens1].map((e: string) => `${"scroll"}:${e}`); + const coins = [...new Set(rawCoins)] + const prices = await getPrices(coins, timestamp); + const untrackVolumes: number[] = lpTokens.map((_: string, index: number) => { + const log: IAmount[] = logs[index] + .map((e: ILog) => { return { ...e, data: e.data.replace('0x', '') } }) + .map((p: ILog) => { + BigNumber.config({ POW_PRECISION: 100 }); + const amount0 = new BigNumber('0x' + p.data.slice(0, 64)).toString(); + const amount1 = new BigNumber('0x' + p.data.slice(64, 128)).toString(); + return { + amount0, + amount1, + } as IAmount + }) as IAmount[]; + const token0Price = (prices[`${"scroll"}:${tokens0[index]}`]?.price || 0); + const token1Price = (prices[`${"scroll"}:${tokens1[index]}`]?.price || 0); + const token0Decimals = (prices[`${"scroll"}:${tokens0[index]}`]?.decimals || 0) + const token1Decimals = (prices[`${"scroll"}:${tokens1[index]}`]?.decimals || 0) + const totalAmount0 = log + .reduce((a: number, b: IAmount) => Number(b.amount0) + a, 0) / 10 ** token0Decimals * token0Price; + const totalAmount1 = log + .reduce((a: number, b: IAmount) => Number(b.amount1) + Number(b.amount1) + a, 0) / 10 ** token1Decimals * token1Price; + return (totalAmount0 + totalAmount1); + }); + + const dailyFees = untrackVolumes.reduce((a: number, b: number) => a + b, 0); + return { + dailyFees: `${dailyFees}`, + dailyRevenue: `${dailyFees}`, + dailyHoldersRevenue: `${dailyFees}`, + timestamp, + }; + } catch(error) { + console.error(error); + throw error; + } +} From 669d2bdd090504f4673ecbf9ffe1fc719eee330f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 28 Mar 2024 13:37:48 +0000 Subject: [PATCH 0231/1590] rename --- aggregators/{aperture => aperture-swap}/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename aggregators/{aperture => aperture-swap}/index.ts (98%) diff --git a/aggregators/aperture/index.ts b/aggregators/aperture-swap/index.ts similarity index 98% rename from aggregators/aperture/index.ts rename to aggregators/aperture-swap/index.ts index d0ebf048da..9491bffa57 100644 --- a/aggregators/aperture/index.ts +++ b/aggregators/aperture-swap/index.ts @@ -52,7 +52,7 @@ const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) = } }) } - + if (data.totalVolume) { data.totalVolume.forEach(r => { if (r.chainId == chainId) { @@ -60,7 +60,7 @@ const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) = } }) } - + return { dailyVolume: dailyVolume, totalVolume: totalVolume, @@ -126,4 +126,4 @@ const adapter: SimpleAdapter = { } }; -export default adapter \ No newline at end of file +export default adapter From 4e131c7f058d4b30282ed04fbd34908a12936e16 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 28 Mar 2024 13:40:01 +0000 Subject: [PATCH 0232/1590] allow trigger test --- .github/workflows/getFileList.js | 4 ++-- aggregators/aperture-swap/index.ts | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/getFileList.js b/.github/workflows/getFileList.js index d4a5c63022..193a10494a 100644 --- a/.github/workflows/getFileList.js +++ b/.github/workflows/getFileList.js @@ -1,4 +1,4 @@ -const ALLOWED_ROOTS = ['volumes', 'dexs', 'options', 'derivatives', 'incentives', 'fees', 'options', 'protocols'] +const ALLOWED_ROOTS = ['volumes', 'dexs', 'options', 'derivatives', 'incentives', 'fees', 'options', 'protocols', 'aggregators'] const MODIFIED = parse(process.env.MODIFIED) const ADDED = parse(process.env.ADDED) const fileSet = new Set(); @@ -13,4 +13,4 @@ console.log(JSON.stringify([...fileSet])) function parse(data) { return data.replace('[', '').replace(']', '').split(',') -} \ No newline at end of file +} diff --git a/aggregators/aperture-swap/index.ts b/aggregators/aperture-swap/index.ts index 9491bffa57..b712184a2d 100644 --- a/aggregators/aperture-swap/index.ts +++ b/aggregators/aperture-swap/index.ts @@ -17,6 +17,7 @@ const chainToId: Record = { [CHAIN.MANTA]: 169, }; + const url = "https://api.aperture.finance/getMetricsBreakDownSinceInception" interface VolumeInfo { From 5db6408787abd55c62584c3237edd7444c8cd8c1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 28 Mar 2024 16:28:26 +0000 Subject: [PATCH 0233/1590] fix --- dexs/keller/index.ts | 177 +-------------------------------------- fees/keller/bribes.ts | 25 +++--- fees/keller/index.ts | 36 ++++---- fees/keller/keller-v2.ts | 159 ----------------------------------- 4 files changed, 31 insertions(+), 366 deletions(-) delete mode 100644 fees/keller/keller-v2.ts diff --git a/dexs/keller/index.ts b/dexs/keller/index.ts index 4910ff5c40..a24743f812 100644 --- a/dexs/keller/index.ts +++ b/dexs/keller/index.ts @@ -1,183 +1,14 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import * as sdk from "@defillama/sdk"; -import { getBlock } from "../../helpers/getBlock"; -import { getPrices } from "../../utils/prices"; -import BigNumber from "bignumber.js"; -import { getTimestamp } from "@defillama/sdk/build/util"; +import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; -interface ILog { - data: string; - transactionHash: string; -} -interface IAmount { - amount0In: string; - amount1In: string; - amount0Out: string; - amount1Out: string; -} - -const topic0 = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822'; const FACTORY_ADDRESS = '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367'; -type TABI = { - [k: string]: object; -} -const ABIs: TABI = { - allPairsLength: { - "type": "function", - "stateMutability": "view", - "outputs": [ - { - "type": "uint256", - "name": "", - "internalType": "uint256" - } - ], - "name": "allPairsLength", - "inputs": [] - }, - allPairs: { - "type": "function", - "stateMutability": "view", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "inputs": [ - { - "type": "uint256", - "name": "", - "internalType": "uint256" - } - ], - "name": "allPairs", - } -}; - -const PAIR_TOKEN_ABI = (token: string): object => { - return { - "constant": true, - "inputs": [], - "name": token, - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } -}; - - -const fetch = async (timestamp: number) => { - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - try { - const poolLength = (await sdk.api.abi.call({ - target: FACTORY_ADDRESS, - chain: CHAIN.SCROLL, - abi: ABIs.allPairsLength, - }).catch(e =>{ - console.log('error', e); - throw e; - })).output; - console.log('poolLength', poolLength); - const poolsRes = await sdk.api.abi.multiCall({ - abi: ABIs.allPairs, - calls: Array.from(Array(Number(poolLength)).keys()).map((i) => ({ - target: FACTORY_ADDRESS, - params: i, - })), - chain: CHAIN.SCROLL - }); - - const lpTokens = poolsRes.output - .map(({ output }: any) => output); - - const [underlyingToken0, underlyingToken1] = await Promise.all( - ['token0', 'token1'].map((method) => - sdk.api.abi.multiCall({ - abi: PAIR_TOKEN_ABI(method), - calls: lpTokens.map((address: string) => ({ - target: address, - })), - chain: 'scroll' - }) - ) - ); - - const tokens0 = underlyingToken0.output.map((res: any) => res.output); - const tokens1 = underlyingToken1.output.map((res: any) => res.output); - const fromBlock = await getBlock(fromTimestamp, CHAIN.SCROLL, {}); - const toBlock = await getBlock(toTimestamp, CHAIN.SCROLL, {}); - - const logs: ILog[][] = (await Promise.all(lpTokens.map((address: string) => sdk.api.util.getLogs({ - target: address, - topic: '', - toBlock: toBlock, - fromBlock: fromBlock, - keys: [], - chain: CHAIN.SCROLL, - topics: [topic0] - })))) - .map((p: any) => p) - .map((a: any) => a.output); - const rawCoins = [...tokens0, ...tokens1].map((e: string) => `scroll:${e}`); - const coins = [...new Set(rawCoins)] - const prices = await getPrices(coins, timestamp); - const untrackVolumes: number[] = lpTokens.map((_: string, index: number) => { - const log: IAmount[] = logs[index] - .map((e: ILog) => { return { ...e, data: e.data.replace('0x', '') } }) - .map((p: ILog) => { - BigNumber.config({ POW_PRECISION: 100 }); - const amount0In = new BigNumber('0x' + p.data.slice(0, 64)).toString(); - const amount1In = new BigNumber('0x' + p.data.slice(64, 128)).toString(); - const amount0Out = new BigNumber('0x' + p.data.slice(128, 192)).toString(); - const amount1Out = new BigNumber('0x' + p.data.slice(192, 256)).toString(); - return { - amount0In, - amount1In, - amount0Out, - amount1Out, - } as IAmount - }) as IAmount[]; - const token0Price = (prices[`scroll:${tokens0[index]}`]?.price || 0); - const token1Price = (prices[`scroll:${tokens1[index]}`]?.price || 0); - const token0Decimals = (prices[`scroll:${tokens0[index]}`]?.decimals || 0) - const token1Decimals = (prices[`scroll:${tokens1[index]}`]?.decimals || 0) - const totalAmount0 = log - .reduce((a: number, b: IAmount) => Number(b.amount0In) + Number(b.amount0Out) + a, 0) / 10 ** token0Decimals * token0Price; - const totalAmount1 = log - .reduce((a: number, b: IAmount) => Number(b.amount1In) + Number(b.amount1Out) + a, 0) / 10 ** token1Decimals * token1Price; - - const untrackAmountUSD = token0Price !== 0 ? totalAmount0 : token1Price !== 0 ? totalAmount1 : 0; // counted only we have price data - return untrackAmountUSD; - }); - - const dailyVolume = untrackVolumes.reduce((a: number, b: number) => a + b, 0); - return { - dailyVolume: `${dailyVolume}`, - timestamp, - }; - } catch(error) { - console.error(error); - throw error; - } -} - const adapter: SimpleAdapter = { adapter: { - ["scroll"]: { - fetch, - start: async () => getTimestamp(4265908, "scroll") , + [CHAIN.SCROLL]: { + fetch: getDexVolumeExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS }), + start: 1710806400, }, } }; diff --git a/fees/keller/bribes.ts b/fees/keller/bribes.ts index 542ba5164c..9c218efb79 100644 --- a/fees/keller/bribes.ts +++ b/fees/keller/bribes.ts @@ -1,7 +1,7 @@ import * as sdk from "@defillama/sdk"; -import { getPrices } from "../../utils/prices"; import { ethers } from "ethers"; import { CHAIN } from "../../helpers/chains"; +import { FetchOptions } from "../../adapters/types"; const event_notify_reward = 'event NotifyReward(address indexed from,address indexed reward,uint256 indexed epoch,uint256 amount)'; const event_geuge_created = 'event GaugeCreated(address indexed poolFactory,address indexed votingRewardsFactory,address indexed gaugeFactory,address pool,address bribeVotingReward,address feeVotingReward,address gauge,address creator)' @@ -24,12 +24,15 @@ interface IBribes { } -export const fees_bribes = async (fromBlock: number, toBlock: number, timestamp: number): Promise => { +export const getBribes = async (options: FetchOptions): Promise => { try { + const dailyBribesRevenue = options.createBalances(); + const fromBlock = await options.getFromBlock(); + const toBlock = await options.getToBlock(); const voter = '0x30f827DECe6F25c74F37d0dD45bC245d893266e6'; const logs_geuge_created: ethers.EventLog[] = (await sdk.api.util.getLogs({ target: voter, - fromBlock: 4265908, //Block number of the contract's creation + fromBlock: 4265093, //Block number of the contract's creation toBlock: toBlock, topic: '', topics: [topic0_geuge_created], @@ -37,7 +40,7 @@ export const fees_bribes = async (fromBlock: number, toBlock: number, timestamp: keys: [] })).output; const bribes_contract: string[] = logs_geuge_created.map((e: ethers.EventLog) => { - const value = contract_interface.parseLog(e); + const value = contract_interface.parseLog(e as any); return value?.args.bribeVotingReward; }) @@ -60,14 +63,12 @@ export const fees_bribes = async (fromBlock: number, toBlock: number, timestamp: amount: Number(value?.args.amount._hex) } as IBribes }) - const coins = [...new Set(logs_bribes.map((e: IBribes) => `${"scroll"}:${e.token.toLowerCase()}`))] - const prices = await getPrices(coins, timestamp); - const fees_bribes_usd = logs_bribes.map((e: IBribes) => { - const price = prices[`${"scroll"}:${e.token.toLowerCase()}`]?.price || 0; - const decimals = prices[`${"scroll"}:${e.token.toLowerCase()}`]?.decimals || 0; - return (Number(e.amount) / 10 ** decimals) * price; - }).reduce((a: number, b: number) => a+b, 0); - return fees_bribes_usd; + logs_bribes.forEach((e: IBribes) => { + dailyBribesRevenue.add(e.token, e.amount) + }); + return { + dailyBribesRevenue + }; } catch (error) { console.error(error); throw error; diff --git a/fees/keller/index.ts b/fees/keller/index.ts index 2f295f20af..21a2a38d1e 100644 --- a/fees/keller/index.ts +++ b/fees/keller/index.ts @@ -1,35 +1,27 @@ -import { Adapter, FetchResultFees } from '../../adapters/types'; +import { Adapter, FetchOptions, FetchResultV2 } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains'; -import { fetchV2 } from './keller-v2'; -import { fees_bribes } from './bribes'; -import { getBlock } from '../../helpers/getBlock'; -import { getTimestamp } from '@defillama/sdk/build/util'; +import { getBribes } from './bribes'; +import { exportDexVolumeAndFees } from '../../helpers/dexVolumeLogs'; - -const getFees = async (timestamp: number): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - const fromBlock = (await getBlock(fromTimestamp, CHAIN.SCROLL, {})); - const toBlock = (await getBlock(toTimestamp, CHAIN.SCROLL, {})); - - const [feeV2, bribes] = await Promise.all([fetchV2(fromBlock, toBlock, timestamp), fees_bribes(fromBlock, toBlock, timestamp)]); - const dailyFees = Number(feeV2.dailyFees); - const dailyRevenue = Number(feeV2.dailyRevenue) + bribes; - const dailyHoldersRevenue = Number(feeV2.dailyHoldersRevenue) + bribes; +const FACTORY_ADDRESS = '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367'; +const getFees = async (options: FetchOptions): Promise => { + const v1Results = await exportDexVolumeAndFees({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options) + const bribesResult = await getBribes(options); + v1Results.dailyBribesRevenue = bribesResult.dailyBribesRevenue; return { - dailyFees: `${dailyFees}`, - dailyRevenue: `${dailyRevenue}`, - dailyHoldersRevenue: `${dailyHoldersRevenue}`, - dailyBribesRevenue: `${bribes}`, - timestamp + dailyFees: v1Results.dailyFees, + dailyRevenue: v1Results.dailyRevenue, + dailyHoldersRevenue: v1Results.dailyFees, + dailyBribesRevenue: v1Results.dailyBribesRevenue, } } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.SCROLL]: { fetch: getFees, - start: async () => getTimestamp(4265908, "scroll"), // TODO: Add accurate timestamp + start: 1710806400 }, }, }; diff --git a/fees/keller/keller-v2.ts b/fees/keller/keller-v2.ts deleted file mode 100644 index 9ae7fbe6e1..0000000000 --- a/fees/keller/keller-v2.ts +++ /dev/null @@ -1,159 +0,0 @@ -import { FetchResultFees } from "../../adapters/types"; -import * as sdk from "@defillama/sdk"; -import { getPrices } from "../../utils/prices"; -import BigNumber from "bignumber.js"; -import { CHAIN } from "../../helpers/chains"; - -interface ILog { - data: string; - transactionHash: string; -} -interface IAmount { - amount0: string; - amount1: string; -} -const topic_name = 'Swap(index_topic_1 address sender, index_topic_2 address to, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out)'; -const topic0 = '0x112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602'; -const FACTORY_ADDRESS = '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367'; - -type TABI = { - [k: string]: object; -} -const ABIs: TABI = { - allPairsLength: { - "inputs": [], - "name": "allPairsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - allPairs: { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "allPairs", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -}; - -const PAIR_TOKEN_ABI = (token: string): object => { - return { - "constant": true, - "inputs": [], - "name": token, - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } -}; - - -export const fetchV2 = async (fromBlock: number, toBlock: number, timestamp: number): Promise => { - try { - const poolLength = (await sdk.api.abi.call({ - target: FACTORY_ADDRESS, - chain: CHAIN.SCROLL, - abi: ABIs.allPairsLength, - })).output; - - const poolsRes = await sdk.api.abi.multiCall({ - abi: ABIs.allPairs, - calls: Array.from(Array(Number(poolLength)).keys()).map((i) => ({ - target: FACTORY_ADDRESS, - params: i, - })), - chain: CHAIN.SCROLL - }); - - const lpTokens = poolsRes.output - .map(({ output }: any) => output); - - const [underlyingToken0, underlyingToken1] = await Promise.all( - ['token0', 'token1'].map((method) => - sdk.api.abi.multiCall({ - abi: PAIR_TOKEN_ABI(method), - calls: lpTokens.map((address: string) => ({ - target: address, - })), - chain: CHAIN.SCROLL, - //permitFailure: true, - }) - ) - ); - - const tokens0 = underlyingToken0.output.map((res: any) => res.output); - const tokens1 = underlyingToken1.output.map((res: any) => res.output); - const logs: ILog[][] = (await Promise.all(lpTokens.map((address: string) => sdk.api.util.getLogs({ - target: address, - topic: topic_name, - toBlock: toBlock, - fromBlock: fromBlock, - keys: [], - chain: CHAIN.SCROLL, - topics: [topic0] - })))) - .map((p: any) => p) - .map((a: any) => a.output); - const rawCoins = [...tokens0, ...tokens1].map((e: string) => `${"scroll"}:${e}`); - const coins = [...new Set(rawCoins)] - const prices = await getPrices(coins, timestamp); - const untrackVolumes: number[] = lpTokens.map((_: string, index: number) => { - const log: IAmount[] = logs[index] - .map((e: ILog) => { return { ...e, data: e.data.replace('0x', '') } }) - .map((p: ILog) => { - BigNumber.config({ POW_PRECISION: 100 }); - const amount0 = new BigNumber('0x' + p.data.slice(0, 64)).toString(); - const amount1 = new BigNumber('0x' + p.data.slice(64, 128)).toString(); - return { - amount0, - amount1, - } as IAmount - }) as IAmount[]; - const token0Price = (prices[`${"scroll"}:${tokens0[index]}`]?.price || 0); - const token1Price = (prices[`${"scroll"}:${tokens1[index]}`]?.price || 0); - const token0Decimals = (prices[`${"scroll"}:${tokens0[index]}`]?.decimals || 0) - const token1Decimals = (prices[`${"scroll"}:${tokens1[index]}`]?.decimals || 0) - const totalAmount0 = log - .reduce((a: number, b: IAmount) => Number(b.amount0) + a, 0) / 10 ** token0Decimals * token0Price; - const totalAmount1 = log - .reduce((a: number, b: IAmount) => Number(b.amount1) + Number(b.amount1) + a, 0) / 10 ** token1Decimals * token1Price; - return (totalAmount0 + totalAmount1); - }); - - const dailyFees = untrackVolumes.reduce((a: number, b: number) => a + b, 0); - return { - dailyFees: `${dailyFees}`, - dailyRevenue: `${dailyFees}`, - dailyHoldersRevenue: `${dailyFees}`, - timestamp, - }; - } catch(error) { - console.error(error); - throw error; - } -} From 423d71c3bae699d23c371334f98d922199ebdce5 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 28 Mar 2024 16:52:15 +0000 Subject: [PATCH 0234/1590] update name --- fees/{ramses-exchange => ramses-exchange-v1}/bribes.ts | 0 fees/{ramses-exchange => ramses-exchange-v1}/index.ts | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename fees/{ramses-exchange => ramses-exchange-v1}/bribes.ts (100%) rename fees/{ramses-exchange => ramses-exchange-v1}/index.ts (100%) diff --git a/fees/ramses-exchange/bribes.ts b/fees/ramses-exchange-v1/bribes.ts similarity index 100% rename from fees/ramses-exchange/bribes.ts rename to fees/ramses-exchange-v1/bribes.ts diff --git a/fees/ramses-exchange/index.ts b/fees/ramses-exchange-v1/index.ts similarity index 100% rename from fees/ramses-exchange/index.ts rename to fees/ramses-exchange-v1/index.ts From c38edcbedff1a0c7e1f98f2d896599232a8d4d75 Mon Sep 17 00:00:00 2001 From: itsmenikolaos Date: Fri, 29 Mar 2024 16:40:00 +0400 Subject: [PATCH 0235/1590] Add Swych derivative adapter --- dexs/swych/index.ts | 136 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 dexs/swych/index.ts diff --git a/dexs/swych/index.ts b/dexs/swych/index.ts new file mode 100644 index 0000000000..315b3c2a46 --- /dev/null +++ b/dexs/swych/index.ts @@ -0,0 +1,136 @@ +import axios from "axios"; + +const STATUS = { + FILLED: "FILLED", +}; + +const SUBGRAPHS = { + pdex: "https://api.thegraph.com/subgraphs/name/crypnosis/swych-pdex-v1", +}; + +const toBigInt = (value: string | number) => { + return BigInt(value); +}; + +const convertToUsd = (value: bigint, decimals = 30) => { + if (!value) { + return 0; + } + + const wei = toBigInt(10) ** toBigInt(decimals); + return Number(value / wei); +}; + +const calculate24hTimestamps = (timestamp: number) => { + const currentDate = new Date(timestamp * 1000); + const currentUtcDate = new Date(currentDate.toUTCString()); + currentUtcDate.setUTCHours(0, 0, 0, 0); + const startOfCurrentDay = currentUtcDate.getTime() / 1000; + const endOfCurrentDay = startOfCurrentDay + 86400; + + return { + startOfCurrentDay, + endOfCurrentDay, + }; +}; + +const generateOrdersQuery = (timeStart: number = 0, timeEnd: number, skip: number = 0, first: number = 1000) => { + return { + query: ` + { + orders( + where: { + submissionTimestamp_gt: "${timeStart}", + submissionTimestamp_lt: "${timeEnd}" + }, + first: ${first}, + skip: ${skip}, + orderBy: submissionTimestamp, + orderDirection: asc + ) { + id + side + type + status + submissionTimestamp + collateralValue + sizeChange + updateType + owner + } + }` + }; +}; + +const queryOrders = async (timestamp: number) => { + const timeStart = 0; + const timeEnd = timestamp; + const orders = []; + const pageSize = 1000; + let hasMoreData = true; + + while (hasMoreData) { + const query = generateOrdersQuery(timeStart, timeEnd, orders.length, pageSize); + const response = await axios.post(SUBGRAPHS.pdex, query); + const fetchedOrders = response?.data?.data?.orders; + if (!fetchedOrders) { + hasMoreData = false; + continue; + } + orders.push(...fetchedOrders); + hasMoreData = fetchedOrders.length === pageSize; + } + + return orders; +}; + +const getOrders = async (timestamp: number) => { + return queryOrders(timestamp); +}; + +const calculateTradingVolumeFromOrders = (orders: Array, timestamp: number) => { + const filteredOrders = orders.filter( + order => order.status === STATUS.FILLED + ); + const {startOfCurrentDay, endOfCurrentDay} = calculate24hTimestamps(timestamp); + const filteredOrders24h = filteredOrders.filter( + order => order.submissionTimestamp >= startOfCurrentDay + && order.submissionTimestamp <= endOfCurrentDay + ); + const tradingVolume = filteredOrders.reduce( + (acc, order) => acc + toBigInt(order.sizeChange), + toBigInt(0) + ); + const tradingVolume24h = filteredOrders24h.reduce( + (acc, order) => acc + toBigInt(order.sizeChange), + toBigInt(0) + ); + return { + tradingVolume, + tradingVolume24h, + }; +}; + +const fetchVolumeStats = async (timestamp: number) => { + const orders = await getOrders(timestamp); + const {tradingVolume, tradingVolume24h} = calculateTradingVolumeFromOrders(orders, timestamp); + const [ + convertedTradingVolume, + convertedTradingVolume24h, + ] = [tradingVolume, tradingVolume24h].map(value => convertToUsd(value)); + return { + dayVolume: convertedTradingVolume24h.toString(), + totalVolume: convertedTradingVolume.toString(), + }; +}; + +export default { + adapter: { + bsc: { + fetch: fetchVolumeStats, + start: async () => 1701720000, + runAtCurrTime: false, + }, + }, +}; + From 933916b8b0d2beeb0f07bab489eace71331456ff Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 29 Mar 2024 16:51:10 +0100 Subject: [PATCH 0236/1590] update sdk version --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 61f9a8bfcf..12c7c6b755 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.46", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.46.tgz", - "integrity": "sha512-fANQAVsb+I/Ha9TlAB3T6VdWLh+SWWvhWYSOxm+x0fD6fjYNFkt8N6N1nEa6U8DIcl0vHetfBLQll4D+o3Rt5A==", + "version": "5.0.49", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.49.tgz", + "integrity": "sha512-CggIAtMd5lwOpIPoGPkTMqS2KYVIectlt1cOHUc/O/tcBOQ9XSy2OfF4JI8tIMuAJQSvYlPnEtxpFkUwuFt27A==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@supercharge/promise-pool": "^2.1.0", From 5b11b9296ed8bc0743bf64aa6be1d2d41632470d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 29 Mar 2024 18:13:15 +0000 Subject: [PATCH 0237/1590] fix query --- dexs/swych/index.ts | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/dexs/swych/index.ts b/dexs/swych/index.ts index 315b3c2a46..9d9b7082e6 100644 --- a/dexs/swych/index.ts +++ b/dexs/swych/index.ts @@ -1,4 +1,6 @@ import axios from "axios"; +import {CHAIN} from "../../helpers/chains"; +import {getTimestampAtStartOfDayUTC} from "../../utils/date"; const STATUS = { FILLED: "FILLED", @@ -22,12 +24,8 @@ const convertToUsd = (value: bigint, decimals = 30) => { }; const calculate24hTimestamps = (timestamp: number) => { - const currentDate = new Date(timestamp * 1000); - const currentUtcDate = new Date(currentDate.toUTCString()); - currentUtcDate.setUTCHours(0, 0, 0, 0); - const startOfCurrentDay = currentUtcDate.getTime() / 1000; - const endOfCurrentDay = startOfCurrentDay + 86400; - + const startOfCurrentDay = getTimestampAtStartOfDayUTC(timestamp); + const endOfCurrentDay = startOfCurrentDay + 24 * 60 * 60; return { startOfCurrentDay, endOfCurrentDay, @@ -41,7 +39,8 @@ const generateOrdersQuery = (timeStart: number = 0, timeEnd: number, skip: numbe orders( where: { submissionTimestamp_gt: "${timeStart}", - submissionTimestamp_lt: "${timeEnd}" + submissionTimestamp_lt: "${timeEnd}", + status: FILLED }, first: ${first}, skip: ${skip}, @@ -65,10 +64,9 @@ const generateOrdersQuery = (timeStart: number = 0, timeEnd: number, skip: numbe const queryOrders = async (timestamp: number) => { const timeStart = 0; const timeEnd = timestamp; - const orders = []; + const orders: Array = []; const pageSize = 1000; let hasMoreData = true; - while (hasMoreData) { const query = generateOrdersQuery(timeStart, timeEnd, orders.length, pageSize); const response = await axios.post(SUBGRAPHS.pdex, query); @@ -112,8 +110,9 @@ const calculateTradingVolumeFromOrders = (orders: Array, timestamp: number) }; const fetchVolumeStats = async (timestamp: number) => { - const orders = await getOrders(timestamp); - const {tradingVolume, tradingVolume24h} = calculateTradingVolumeFromOrders(orders, timestamp); + const {startOfCurrentDay, endOfCurrentDay} = calculate24hTimestamps(timestamp); + const orders = await getOrders(endOfCurrentDay); + const {tradingVolume, tradingVolume24h} = calculateTradingVolumeFromOrders(orders, startOfCurrentDay); const [ convertedTradingVolume, convertedTradingVolume24h, @@ -126,11 +125,10 @@ const fetchVolumeStats = async (timestamp: number) => { export default { adapter: { - bsc: { + [CHAIN.BSC]: { fetch: fetchVolumeStats, - start: async () => 1701720000, + start: 1701720000, runAtCurrTime: false, }, }, }; - From 70a1d2d02126143b18858aeed144d169bc75373c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 29 Mar 2024 18:18:57 +0000 Subject: [PATCH 0238/1590] fix return --- dexs/swych/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/swych/index.ts b/dexs/swych/index.ts index 9d9b7082e6..9b350c0f74 100644 --- a/dexs/swych/index.ts +++ b/dexs/swych/index.ts @@ -118,7 +118,8 @@ const fetchVolumeStats = async (timestamp: number) => { convertedTradingVolume24h, ] = [tradingVolume, tradingVolume24h].map(value => convertToUsd(value)); return { - dayVolume: convertedTradingVolume24h.toString(), + timestamp, + dailyVolume: convertedTradingVolume24h.toString(), totalVolume: convertedTradingVolume.toString(), }; }; From 8f7494e2394aef47b9caa63f971a9b19becd8b48 Mon Sep 17 00:00:00 2001 From: mattt21 Date: Fri, 29 Mar 2024 21:40:47 -0500 Subject: [PATCH 0239/1590] Update graph API --- dexs/mute.io/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/mute.io/index.ts b/dexs/mute.io/index.ts index 2ef992c945..075e70deb8 100644 --- a/dexs/mute.io/index.ts +++ b/dexs/mute.io/index.ts @@ -2,7 +2,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ERA]: "https://api.studio.thegraph.com/query/12332/muteswitch---zksync-era/v0.0.5", + [CHAIN.ERA]: "https://api.goldsky.com/api/public/project_clmtie4nnezuh2nw6hhjg6mo7/subgraphs/mute_switch/v0.0.7/gn", }; const adapter = univ2Adapter(endpoints, { From 47b868eb1daeb84f8ac717e4e32e6b37fb9a0efd Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 30 Mar 2024 08:31:48 +0000 Subject: [PATCH 0240/1590] fix stuck adapter --- dexs/litx/index.ts | 2 ++ dexs/veniceswap/index.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/dexs/litx/index.ts b/dexs/litx/index.ts index dc6bba5367..b40364adcb 100644 --- a/dexs/litx/index.ts +++ b/dexs/litx/index.ts @@ -15,5 +15,7 @@ const adapters = univ2Adapter({ adapters.adapter.bsc.start = 1687305600; adapters.adapter.pulse.start = 1686096000; +adapters.adapter.bsc.fetch = async (timestamp: number) => {return{timestamp, dailyVolume: 0}} +adapters.adapter.pulse.fetch = async (timestamp: number) => {return{timestamp, dailyVolume: 0}} adapters.adapter[DISABLED_ADAPTER_KEY] = disabledAdapter; export default adapters; diff --git a/dexs/veniceswap/index.ts b/dexs/veniceswap/index.ts index d4735e6cde..99f48c4b9f 100644 --- a/dexs/veniceswap/index.ts +++ b/dexs/veniceswap/index.ts @@ -13,6 +13,7 @@ const adapter = univ2Adapter(endpoints, { }); adapter.adapter.findora.start = 1675036800; +adapter.adapter.findora.fetch = async (timestamp: number) => {return{timestamp}} adapter.adapter[DISABLED_ADAPTER_KEY] = disabledAdapter; export default adapter From c4bd7027e4eb092f7e04c70ce893447ba957ce78 Mon Sep 17 00:00:00 2001 From: tec05 Date: Sat, 30 Mar 2024 03:38:02 -0700 Subject: [PATCH 0241/1590] Add volume adapter for Archly on Mode --- dexs/archly-finance-v2/index.ts | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/dexs/archly-finance-v2/index.ts b/dexs/archly-finance-v2/index.ts index 1779660e72..7a4cc6a947 100644 --- a/dexs/archly-finance-v2/index.ts +++ b/dexs/archly-finance-v2/index.ts @@ -7,19 +7,19 @@ const FACTORY_ADDRESS = '0x12508dd9108Abab2c5fD8fC6E4984E46a3CF7824'; const adapter: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM_NOVA]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.ARBITRUM_NOVA, factory: FACTORY_ADDRESS }), start: 1700784000, }, [CHAIN.ARBITRUM]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS }), start: 1700784000, }, [CHAIN.AVAX]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.AVAX, factory: FACTORY_ADDRESS }), start: 1708473600, }, [CHAIN.BASE]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.BASE, factory: FACTORY_ADDRESS }), start: 1700784000, }, [CHAIN.BLAST]: { @@ -27,11 +27,11 @@ const adapter: SimpleAdapter = { start: 1710720000, }, [CHAIN.BSC]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.BSC, factory: FACTORY_ADDRESS }), start: 1700784000, }, [CHAIN.CRONOS]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.CRONOS, factory: FACTORY_ADDRESS }), start: 1708473600, }, [CHAIN.FANTOM]: { @@ -47,31 +47,35 @@ const adapter: SimpleAdapter = { start: 1710720000, }, [CHAIN.KAVA]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.KAVA, factory: FACTORY_ADDRESS }), start: 1700784000, }, [CHAIN.MANTLE]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.MANTLE, factory: FACTORY_ADDRESS }), start: 1708473600, }, [CHAIN.METIS]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.METIS, factory: FACTORY_ADDRESS }), start: 1708473600, }, + [CHAIN.MODE]: { + fetch: getDexVolumeExports({ chain: CHAIN.MODE, factory: FACTORY_ADDRESS }), + start: 1711792800, + }, [CHAIN.NEON]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.NEON, factory: FACTORY_ADDRESS }), start: 1708473600, }, [CHAIN.OPTIMISM]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.OPTIMISM, factory: FACTORY_ADDRESS }), start: 1700784000, }, [CHAIN.POLYGON]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.POLYGON, factory: FACTORY_ADDRESS }), start: 1700784000, }, [CHAIN.TELOS]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), + fetch: getDexVolumeExports({ chain: CHAIN.TELOS, factory: FACTORY_ADDRESS }), start: 1700784000, }, } From 94afb943ae174b718d7efc1387d00e9cc8cd634d Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Sun, 31 Mar 2024 02:49:11 +0100 Subject: [PATCH 0242/1590] no bribes --- fees/railgun.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fees/railgun.ts b/fees/railgun.ts index 1fb691d77b..9b788aad95 100644 --- a/fees/railgun.ts +++ b/fees/railgun.ts @@ -38,8 +38,7 @@ const fetchFees: FetchV2 = async ({ createBalances, getLogs, chain, }) => { return { dailyFees: dailyFees, - dailyRevenue: dailyFees, - dailyBribesRevenue: dailyFees, + dailyRevenue: dailyFees } } From 4d96fcd5cf57c915afce9b9c9180fd3121fb7d6e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 31 Mar 2024 15:38:12 +0000 Subject: [PATCH 0243/1590] fix run current --- dexs/apollox/index.ts | 4 ++++ fees/apollox/index.ts | 1 + 2 files changed, 5 insertions(+) diff --git a/dexs/apollox/index.ts b/dexs/apollox/index.ts index 85538dde59..e6a57cb77d 100644 --- a/dexs/apollox/index.ts +++ b/dexs/apollox/index.ts @@ -59,6 +59,7 @@ const fetchV1Volume = async () => { const adapter: SimpleAdapter = { adapter: { [CHAIN.BSC]: { + runAtCurrTime: true, fetch: async (timestamp) => { const [v1, v2] = await Promise.all([ fetchV2Volume(CHAIN.BSC), @@ -72,6 +73,7 @@ const adapter: SimpleAdapter = { start: 1682035200, }, [CHAIN.ARBITRUM]: { + runAtCurrTime: true, fetch: async (timestamp) => { const dailyVolume = await fetchV2Volume(CHAIN.ARBITRUM); return { @@ -82,6 +84,7 @@ const adapter: SimpleAdapter = { start: 1682035200, }, [CHAIN.OP_BNB]: { + runAtCurrTime: true, fetch: async (timestamp) => { const dailyVolume = await fetchV2Volume('opbnb'); return { @@ -92,6 +95,7 @@ const adapter: SimpleAdapter = { start: 1682035200, }, [CHAIN.BASE]: { + runAtCurrTime: true, fetch: async (timestamp) => { const dailyVolume = await fetchV2Volume(CHAIN.BASE); return { diff --git a/fees/apollox/index.ts b/fees/apollox/index.ts index 7135baa1f4..6e078a97d6 100644 --- a/fees/apollox/index.ts +++ b/fees/apollox/index.ts @@ -26,6 +26,7 @@ const request = (urls: ChainEndpoints) => { const adapter: Adapter = { adapter: { [CHAIN.BSC]: { + runAtCurrTime: true, fetch: request(endpoints)(CHAIN.BSC), start: 1689609600, }, From 17333ff0cbf3e3132b512cdcce7c667d104cfe0f Mon Sep 17 00:00:00 2001 From: tec05 Date: Mon, 1 Apr 2024 17:57:08 -0700 Subject: [PATCH 0244/1590] Add volume adapter for Archly on Zora/Add Zora to chains list --- dexs/archly-finance-v2/index.ts | 4 ++++ helpers/chains.ts | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/dexs/archly-finance-v2/index.ts b/dexs/archly-finance-v2/index.ts index 7a4cc6a947..351a7fd353 100644 --- a/dexs/archly-finance-v2/index.ts +++ b/dexs/archly-finance-v2/index.ts @@ -78,6 +78,10 @@ const adapter: SimpleAdapter = { fetch: getDexVolumeExports({ chain: CHAIN.TELOS, factory: FACTORY_ADDRESS }), start: 1700784000, }, + [CHAIN.ZORA]: { + fetch: getDexVolumeExports({ chain: CHAIN.ZORA, factory: FACTORY_ADDRESS }), + start: 1711929600, + }, } }; diff --git a/helpers/chains.ts b/helpers/chains.ts index 822813907c..ad217994c5 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -141,7 +141,8 @@ export enum CHAIN { FILECOIN = "filecoin", FRAXTAL = "fraxtal", IMX = "imx", - KROMA = "kroma" + KROMA = "kroma", + ZORA = "zora" } // Don´t use From ef117770c2f41bf35da0b8a0102ac861f2c9930b Mon Sep 17 00:00:00 2001 From: mattt21 Date: Mon, 1 Apr 2024 20:03:14 -0500 Subject: [PATCH 0245/1590] add koi-finance fees --- dexs/mute.io/index.ts | 4 +-- fees/koi-finance/index.ts | 27 ++++++++++++++ fees/koi-finance/koi-finance.ts | 62 +++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 fees/koi-finance/index.ts create mode 100644 fees/koi-finance/koi-finance.ts diff --git a/dexs/mute.io/index.ts b/dexs/mute.io/index.ts index 2ef992c945..e9832a49c1 100644 --- a/dexs/mute.io/index.ts +++ b/dexs/mute.io/index.ts @@ -2,7 +2,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ERA]: "https://api.studio.thegraph.com/query/12332/muteswitch---zksync-era/v0.0.5", + [CHAIN.ERA]: "https://api.goldsky.com/api/public/project_clmtie4nnezuh2nw6hhjg6mo7/subgraphs/mute_switch/v0.0.7/gn", }; const adapter = univ2Adapter(endpoints, { @@ -15,4 +15,4 @@ const adapter = univ2Adapter(endpoints, { adapter.adapter.era.start = 1679529600 -export default adapter +export default adapter \ No newline at end of file diff --git a/fees/koi-finance/index.ts b/fees/koi-finance/index.ts new file mode 100644 index 0000000000..1431899b4d --- /dev/null +++ b/fees/koi-finance/index.ts @@ -0,0 +1,27 @@ +import { Adapter, FetchResultFees } from '../../adapters/types'; +import { ZKSYNC } from '../../helpers/chains'; +import { fetchV1 } from './koi-finance'; + + +const getFees = async (timestamp: number): Promise => { + const [feeV1] = await Promise.all([fetchV1()(timestamp)]); + const dailyFees = Number(feeV1.dailyFees); + const dailyRevenue = Number(feeV1.dailyRevenue); + + return { + dailyFees: `${dailyFees}`, + dailyRevenue: `${dailyRevenue}`, + timestamp + } +} + +const adapter: Adapter = { + adapter: { + [ZKSYNC]: { + fetch: getFees, + start: 1677110400, // TODO: Add accurate timestamp + }, + }, +}; + +export default adapter; \ No newline at end of file diff --git a/fees/koi-finance/koi-finance.ts b/fees/koi-finance/koi-finance.ts new file mode 100644 index 0000000000..1a524282c8 --- /dev/null +++ b/fees/koi-finance/koi-finance.ts @@ -0,0 +1,62 @@ +import request, { gql } from "graphql-request"; +import { getBlock } from "../../helpers/getBlock"; +import { + getTimestampAtStartOfDayUTC, + getTimestampAtStartOfPreviousDayUTC +} from "../../utils/date"; +import BigNumber from "bignumber.js"; + +const endpoint = "https://api.goldsky.com/api/public/project_clmtie4nnezuh2nw6hhjg6mo7/subgraphs/mute_switch/v0.0.7/gn" + +export const fetchV1 = () => { + return async (timestamp: number) => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); + const yesterdaysTimestamp = getTimestampAtStartOfPreviousDayUTC(timestamp); + const todaysBlock = await getBlock( + todaysTimestamp, + "era", + {} + ); + + const yesterdaysBlock = await getBlock(yesterdaysTimestamp, "era", {}); + + const query = gql` + query fees { + yesterday: pairs(block: {number: ${yesterdaysBlock}}, where: {volumeUSD_gt: "0"}, first: 1000, orderBy:volumeUSD, orderDirection:desc) { + id + stable + pairFee + volumeUSD + } + today: pairs(block: {number: ${todaysBlock}}, where: {volumeUSD_gt: "0"}, first: 1000, orderBy:volumeUSD, orderDirection:desc) { + id + stable + pairFee + volumeUSD + } + } + `; + const todayVolume: { [id: string]: BigNumber } = {}; + const graphRes = await request(endpoint, query); + let dailyFee = new BigNumber(0); + for (const pool of graphRes["today"]) { + todayVolume[pool.id] = new BigNumber(pool.volumeUSD); + } + + for (const pool of graphRes["yesterday"]) { + if (!todayVolume[pool.id]) continue; + + const dailyVolume = BigNumber(todayVolume[pool.id]).minus( + pool.volumeUSD + ); + + dailyFee = dailyFee.plus(dailyVolume.times(pool.pairFee).div(10000)) + } + + return { + timestamp, + dailyFees: dailyFee.toString(), + dailyRevenue: dailyFee.times(0.2).toString(), + }; + }; +}; \ No newline at end of file From 55a2dca1230ec479fe9ac30d7b686836f5691586 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 2 Apr 2024 12:54:29 +0000 Subject: [PATCH 0246/1590] update throw swap api --- fees/thorswap/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/fees/thorswap/index.ts b/fees/thorswap/index.ts index 783fff94e1..94a84be8da 100644 --- a/fees/thorswap/index.ts +++ b/fees/thorswap/index.ts @@ -45,8 +45,8 @@ interface IEarning { const fetchFees = async (timestamp: number): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const url1 = "https://api.flipsidecrypto.com/api/v2/queries/1d13d4a1-d073-4a73-a46b-d7aadf060672/data/latest" - const url2 = "https://api.flipsidecrypto.com/api/v2/queries/46dc4fa4-a362-420e-97ec-d3a58d46b9e7/data/latest" + const url1 = "https://flipsidecrypto.xyz/api/v1/queries/9ed4f699-100a-41e5-a3e6-a7f9ed3bfd5c/data/latest" + const url2 = "https://flipsidecrypto.xyz/api/v1/queries/40798a6b-1e67-4ecb-b8b3-8f8354b5798a/data/latest" const url3 = `https://midgard.ninerealms.com/v2/history/earnings?interval=day&count=400` const [reveune, fees, earnings]: any = (await Promise.all([ httpGet(url1), @@ -83,10 +83,12 @@ const fetchFees = async (timestamp: number): Promise => { const adapters: SimpleAdapter = { adapter: { [CHAIN.THORCHAIN]: { + runAtCurrTime: true, fetch: fetchFees, start: 1618099200, } - } + }, + isExpensiveAdapter: true } export default adapters From 274991832b62e875d3cfa0a0ac4cfb6740aff570 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 2 Apr 2024 15:33:22 +0100 Subject: [PATCH 0247/1590] across --- fees/across.ts | 122 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 90 insertions(+), 32 deletions(-) diff --git a/fees/across.ts b/fees/across.ts index d36eb7ebef..a5f2361e41 100644 --- a/fees/across.ts +++ b/fees/across.ts @@ -1,47 +1,105 @@ -import { Chain } from "@defillama/sdk/build/general" -import { ChainBlocks, FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types" -import { CHAIN } from "../helpers/chains" +import { Chain } from "@defillama/sdk/build/general"; +import { + ChainBlocks, + FetchOptions, + FetchResultFees, + SimpleAdapter, +} from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; const abis = { - "FundsDeposited": "event FundsDeposited(uint256 amount, uint256 originChainId, uint256 indexed destinationChainId, int64 relayerFeePct, uint32 indexed depositId, uint32 quoteTimestamp, address originToken, address recipient, address indexed depositor, bytes message)", - "FilledRelay": "event FilledRelay(uint256 amount, uint256 totalFilledAmount, uint256 fillAmount, uint256 repaymentChainId, uint256 indexed originChainId, uint256 destinationChainId, int64 relayerFeePct, int64 realizedLpFeePct, uint32 indexed depositId, address destinationToken, address relayer, address indexed depositor, address recipient, bytes message, (address recipient, bytes message, int64 relayerFeePct, bool isSlowRelay, int256 payoutAdjustmentPct) updatableRelayData)" -} -const topic0_fund_disposit_v2 = '0xafc4df6845a4ab948b492800d3d8a25d538a102a2bc07cd01f1cfa097fddcff6'; -const topic0_filled_replay_v2 = '0x8ab9dc6c19fe88e69bc70221b339c84332752fdd49591b7c51e66bae3947b73c'; - + FundsDeposited: + "event FundsDeposited(uint256 amount, uint256 originChainId, uint256 indexed destinationChainId, int64 relayerFeePct, uint32 indexed depositId, uint32 quoteTimestamp, address originToken, address recipient, address indexed depositor, bytes message)", + V3FundsDeposited: + "event V3FundsDeposited(address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount, uint256 indexed destinationChainId, uint32 depositId, uint32 quoteTimestamp, uint32 fillDeadline, uint32 exclusivityDeadline, address indexed depositor, address recipient, address exclusiveRelayer, bytes message)", + FilledRelay: + "event FilledRelay(uint256 amount, uint256 totalFilledAmount, uint256 fillAmount, uint256 repaymentChainId, uint256 indexed originChainId, uint256 destinationChainId, int64 relayerFeePct, int64 realizedLpFeePct, uint32 indexed depositId, address destinationToken, address relayer, address indexed depositor, address recipient, bytes message, (address recipient, bytes message, int64 relayerFeePct, bool isSlowRelay, int256 payoutAdjustmentPct) updatableRelayData)", + FilledV3Relay: + "event FilledV3Relay(address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount, uint256 repaymentChainId, uint256 indexed originChainId, uint32 indexed depositId, uint32 fillDeadline, uint32 exclusivityDeadline, address exclusiveRelayer, address indexed relayer, address depositor, address recipient, bytes message, (address updatedRecipient, bytes updatedMessage, uint256 updatedOutputAmount, uint8 fillType) relayExecutionInfo)", +}; +const topic0_fund_disposit_v2 = + "0xafc4df6845a4ab948b492800d3d8a25d538a102a2bc07cd01f1cfa097fddcff6"; +const topic0_fund_disposit_v3 = + "0xa123dc29aebf7d0c3322c8eeb5b999e859f39937950ed31056532713d0de396f"; +const topic0_filled_replay_v2 = + "0x8ab9dc6c19fe88e69bc70221b339c84332752fdd49591b7c51e66bae3947b73c"; +const topic0_filled_replay_v3 = + "0x571749edf1d5c9599318cdbc4e28a6475d65e87fd3b2ddbe1e9a8d5e7a0f0ff7"; const address: any = { - [CHAIN.ETHEREUM]: '0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5', - [CHAIN.ARBITRUM]: '0xe35e9842fceaCA96570B734083f4a58e8F7C5f2A', - [CHAIN.OPTIMISM]: '0x6f26Bf09B1C792e3228e5467807a900A503c0281', - [CHAIN.POLYGON]: '0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096' -} - + [CHAIN.ETHEREUM]: "0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5", + [CHAIN.ARBITRUM]: "0xe35e9842fceaCA96570B734083f4a58e8F7C5f2A", + [CHAIN.OPTIMISM]: "0x6f26Bf09B1C792e3228e5467807a900A503c0281", + [CHAIN.POLYGON]: "0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096", +}; const graph = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, }: FetchOptions): Promise => { - const dailyFees = createBalances() - const logs_fund_disposit = (await getLogs({ - target: address[chain], - eventAbi: abis.FundsDeposited, - topic: topic0_fund_disposit_v2, - })).filter((a: any) => Number(a!.destinationChainId) === 288) + return async ( + timestamp: number, + _: ChainBlocks, + { createBalances, getLogs }: FetchOptions, + ): Promise => { + const dailyFees = createBalances(); + const logs_fund_disposit = ( + await getLogs({ + target: address[chain], + eventAbi: abis.FundsDeposited, + topic: topic0_fund_disposit_v2, + }) + ).filter((a: any) => Number(a!.destinationChainId) === 288); + + const logs_fund_disposit_v3 = ( + await getLogs({ + target: address[chain], + eventAbi: abis.V3FundsDeposited, + topic: topic0_fund_disposit_v3, + }) + ).filter((a: any) => Number(a!.destinationChainId) === 288); - const logs_filled_replay = (await getLogs({ + const logs_filled_replay = await getLogs({ target: address[chain], eventAbi: abis.FilledRelay, topic: topic0_filled_replay_v2, - })) + }); + + const logs_filled_replay_v3 = await getLogs({ + target: address[chain], + eventAbi: abis.FilledV3Relay, + topic: topic0_filled_replay_v3, + }); + + logs_fund_disposit.map((a: any) => + dailyFees.add(a.originToken, Number(a.amount * a.relayerFeePct) / 1e18), + ); + + logs_fund_disposit_v3.map((a: any) => + dailyFees.add( + a.outputToken, + Number(a.inputAmount - a.outputAmount) / 1e18, + ), + ); + + logs_filled_replay.map((a: any) => + dailyFees.add( + a.destinationToken, + (Number(a.amount) * Number(a.relayerFeePct + a.realizedLpFeePct)) / + 1e18, + ), + ); + + logs_filled_replay_v3.map((a: any) => + dailyFees.add( + a.outputToken, + Number(a.inputAmount - a.outputAmount) / 1e18, + ), + ); - logs_fund_disposit.map((a: any) => dailyFees.add(a.originToken, Number(a.amount * a.relayerFeePct) / 1e18)); - logs_filled_replay.map((a: any) => dailyFees.add(a.destinationToken, Number(a.amount) * Number(a.relayerFeePct + a.realizedLpFeePct) / 1e18)) return { dailyFees, dailySupplySideRevenue: dailyFees, - timestamp - } - } -} - + timestamp, + }; + }; +}; const adapter: SimpleAdapter = { adapter: { @@ -61,7 +119,7 @@ const adapter: SimpleAdapter = { fetch: graph(CHAIN.POLYGON), start: 1682840443, }, - } + }, }; export default adapter; From 2ca553668164f3182b3245f77c63895bbab1f9d8 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 2 Apr 2024 15:45:56 +0100 Subject: [PATCH 0248/1590] raw qtys --- fees/across.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/fees/across.ts b/fees/across.ts index a5f2361e41..02df95501d 100644 --- a/fees/across.ts +++ b/fees/across.ts @@ -72,10 +72,7 @@ const graph = (chain: Chain) => { ); logs_fund_disposit_v3.map((a: any) => - dailyFees.add( - a.outputToken, - Number(a.inputAmount - a.outputAmount) / 1e18, - ), + dailyFees.add(a.outputToken, Number(a.inputAmount - a.outputAmount)), ); logs_filled_replay.map((a: any) => @@ -87,10 +84,7 @@ const graph = (chain: Chain) => { ); logs_filled_replay_v3.map((a: any) => - dailyFees.add( - a.outputToken, - Number(a.inputAmount - a.outputAmount) / 1e18, - ), + dailyFees.add(a.outputToken, Number(a.inputAmount - a.outputAmount)), ); return { From 9b0e7167a6b884d08c08e56c3d6df141f343442d Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 2 Apr 2024 16:29:37 +0100 Subject: [PATCH 0249/1590] solana hashflow --- dexs/hashflow/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/hashflow/index.ts b/dexs/hashflow/index.ts index 6ce860adf9..3738aa0895 100644 --- a/dexs/hashflow/index.ts +++ b/dexs/hashflow/index.ts @@ -3,12 +3,13 @@ import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpGet } from "../../utils/fetchURL"; -const chains = [CHAIN.ETHEREUM, CHAIN.AVAX, CHAIN.BSC, CHAIN.ARBITRUM, CHAIN.OPTIMISM, CHAIN.POLYGON] +const chains = [CHAIN.ETHEREUM, CHAIN.AVAX, CHAIN.BSC, CHAIN.ARBITRUM, CHAIN.OPTIMISM, CHAIN.POLYGON, CHAIN.SOLANA] const dateToTs = (date: string) => new Date(date).getTime() / 1000 const normalizeChain = (c: string) => { if (c === "bnb") return CHAIN.BSC if (c === "avalanche") return CHAIN.AVAX + if(c === "solana-mainnet") return CHAIN.SOLANA return c } From 845422e1c014e7a8ac3ce802c9f9c5bc2ed617e1 Mon Sep 17 00:00:00 2001 From: htanh9320 Date: Wed, 3 Apr 2024 16:59:51 +0700 Subject: [PATCH 0250/1590] add ash-perp --- dexs/ash-perp/index.ts | 46 ++++++++++++++++++++++++++++++++++++++ fees/ash-perp/index.ts | 50 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 dexs/ash-perp/index.ts create mode 100644 fees/ash-perp/index.ts diff --git a/dexs/ash-perp/index.ts b/dexs/ash-perp/index.ts new file mode 100644 index 0000000000..6318a46653 --- /dev/null +++ b/dexs/ash-perp/index.ts @@ -0,0 +1,46 @@ +import { request } from "graphql-request"; +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const API_URL = 'http://localhost:3000/graphql'; + +interface IVolume { + volume: string; + timestamp: number; +} + +const VolumeQuery = ` +query GetAllPairStatisticsToday { + pairs { + getAllPairStatistics { + volume + timestamp + } + } +} +` + +const fetch = async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + 86400; + const results: IVolume[] = (await request(API_URL, VolumeQuery)).pairs.getAllPairStatistics; + let dailyVolume = results.filter((volumeInfo)=>{ + return volumeInfo.timestamp === dayTimestamp; + }) + return { + dailyVolume: dailyVolume ? `${dailyVolume[0].volume}` : undefined, + timestamp: dayTimestamp, + }; +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ELROND]: { + fetch: fetch, + runAtCurrTime: true, + start: 1707782400 + }, + }, +}; + +export default adapter; diff --git a/fees/ash-perp/index.ts b/fees/ash-perp/index.ts new file mode 100644 index 0000000000..00fc346aaf --- /dev/null +++ b/fees/ash-perp/index.ts @@ -0,0 +1,50 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { Adapter, FetchResultFees } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { queryDune } from "../../helpers/dune"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import request from "graphql-request"; + +const API_URL = 'http://localhost:3000/graphql'; + +interface IFee { + time: string; + v2_fees: number; + total_fees: number; +} + +const fetch = (chain: Chain) => { + return async (timestamp: number): Promise => { + const startTs = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + const endTs = startTs + 86400; + const feeQuery =`query Trading { + trading { + getDailyFee(from: ${startTs}, to: ${endTs}){ + daily_fees + daily_holders_revenue + daily_protocol_revenue + } + } + }`; + + const dailyFee = (await request(API_URL, feeQuery)); + return { + dailyFees: `${dailyFee.trading.getDailyFee.daily_fees}`, + dailyHoldersRevenue: `${dailyFee.trading.getDailyFee.daily_holders_revenue}`, + dailyProtocolRevenue: `${dailyFee.trading.getDailyFee.daily_protocol_revenue}`, + timestamp, + }; + }; +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.ELROND]: { + fetch: fetch(CHAIN.ARBITRUM), + start: 1706745600, + runAtCurrTime: true, + } + }, + isExpensiveAdapter: true, +}; +export default adapter; From f47338e1a36801dac5de1bebf95d05eefacbad46 Mon Sep 17 00:00:00 2001 From: igorshelkovenkov Date: Wed, 3 Apr 2024 12:14:42 +0200 Subject: [PATCH 0251/1590] add daily volume and fees of dusdstaking --- dexs/javsphere/index.ts | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/dexs/javsphere/index.ts b/dexs/javsphere/index.ts index 18db7d6559..ca8574f4c4 100644 --- a/dexs/javsphere/index.ts +++ b/dexs/javsphere/index.ts @@ -18,18 +18,26 @@ type DexData = { }; +type StakingData = { + totalFees: number, + dailyFees: number, + totalVolume: number, + dailyVolume: number, +}; + const methodology = { - Fees: "User pays 0.1% fees on each trade.", - Volume: "User buys and sell RWA tokens.", + Fees: "User pays 0.1% fees on each trade. User pays 10% fee of rewards in dusdstaking.", + Volume: "User buys and sell RWA tokens. User get in and out of dusdstaking.", } const fetch = async (timestamp: number) => { const stats: DexData = (await fetchURL(`https://aws-api.javlis.com/api/dtoken/stats`)).data; + const statsStaking: StakingData = (await fetchURL(`https://aws-api.javlis.com/api/dusdStaking/stats`)).data; return { - totalVolume: `${stats.volumeTotal}`, - totalFees: `${stats.feeTotal}`, - dailyFees: `${stats.fee24}`, - dailyVolume: `${stats.volume24}`, + totalVolume: `${stats.volumeTotal + statsStaking.totalVolume}`, + totalFees: `${stats.feeTotal + statsStaking.totalFees}`, + dailyFees: `${stats.fee24 + statsStaking.dailyFees}`, + dailyVolume: `${stats.volume24 + statsStaking.dailyVolume}`, timestamp, }; }; From 4a5a13d640c61f0a4ec230cf4d1fc8372d78b54e Mon Sep 17 00:00:00 2001 From: htanh9320 Date: Wed, 3 Apr 2024 17:31:34 +0700 Subject: [PATCH 0252/1590] ashperp-volumes-fees --- dexs/ash-perp/index.ts | 2 +- fees/ash-perp/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/ash-perp/index.ts b/dexs/ash-perp/index.ts index 6318a46653..d997b6ad86 100644 --- a/dexs/ash-perp/index.ts +++ b/dexs/ash-perp/index.ts @@ -3,7 +3,7 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -const API_URL = 'http://localhost:3000/graphql'; +const API_URL = 'https://statistic-api.ashperp.trade/graphql'; interface IVolume { volume: string; diff --git a/fees/ash-perp/index.ts b/fees/ash-perp/index.ts index 00fc346aaf..c31629608e 100644 --- a/fees/ash-perp/index.ts +++ b/fees/ash-perp/index.ts @@ -5,7 +5,7 @@ import { queryDune } from "../../helpers/dune"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import request from "graphql-request"; -const API_URL = 'http://localhost:3000/graphql'; +const API_URL = 'https://statistic-api.ashperp.trade/graphql'; interface IFee { time: string; From dbed15282e77865bd158b30310b20dd2e894ede9 Mon Sep 17 00:00:00 2001 From: halfdoctor Date: Wed, 3 Apr 2024 11:41:46 +0000 Subject: [PATCH 0253/1590] Added BASE revenue for SONNE finance Removed Velodrome V1 revenue code as no longer valid stream. (todo - velodrome v2 revenue generation schema) --- fees/sonne-finance/index.ts | 54 +++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/fees/sonne-finance/index.ts b/fees/sonne-finance/index.ts index f880a1d78d..c7d60c9856 100644 --- a/fees/sonne-finance/index.ts +++ b/fees/sonne-finance/index.ts @@ -5,36 +5,50 @@ import { } from "./helpers"; import { getFees } from "../../helpers/compoundV2"; -const unitroller = "0x60CF091cD3f50420d50fD7f707414d0DF4751C58"; -const veloGauge = "0x3786d4419d6b4a902607ceb2bb319bb336735df8"; -const veloToken = "0x3c8b650257cfb5f272f799f5e2b4e65093a11a05"; -const veVeloHolder = "0x17063ad4e83b0aba4ca0f3fc3a9794e807a00ed7"; - -const getDailyVeloRewards = async ({ api, fromTimestamp, toTimestamp, createBalances }: FetchOptions) => { - const balances = createBalances(); - const { lastEarn, earned } = await getVeloGaugeDetails(veloGauge, veloToken, veVeloHolder, api,); - - const timespan = toTimestamp - fromTimestamp; - const earnedTimespan = toTimestamp - lastEarn; - const ratio = timespan / earnedTimespan; - balances.add(veloToken, earned * ratio); - return balances +const unitrollerOP = "0x60CF091cD3f50420d50fD7f707414d0DF4751C58"; +const unitrollerBASE = "0x1DB2466d9F5e10D7090E7152B68d62703a2245F0"; +// const veloGauge = "0x62D9e4e99482aF8D573d5ce1ed527C96783153ad"; +// const veloToken = "0x9560e827aF36c94D2Ac33a39bCE1Fe78631088Db"; +// const veVeloHolder = "0x784b82a27029c9e114b521abcc39d02b3d1deaf2"; + +// const getDailyVeloRewards = async ({ api, fromTimestamp, toTimestamp, createBalances }: FetchOptions) => { +// const balances = createBalances(); +// const { lastEarn, earned } = await getVeloGaugeDetails(veloGauge, veloToken, veVeloHolder, api,); + +// const timespan = toTimestamp - fromTimestamp; +// const earnedTimespan = toTimestamp - lastEarn; +// const ratio = timespan / earnedTimespan; +// balances.add(veloToken, earned * ratio); +// return balances +// }; + + +const fetchoptimism = async (timestamp: number, chainBlocks: ChainBlocks, options: FetchOptions): Promise => { + const { dailyFees, dailyRevenue } = await getFees(unitrollerOP, options, {}); + // const dailyHoldersRevenue = await getDailyVeloRewards(options) + // dailyHoldersRevenue.addBalances(dailyRevenue) + + return { timestamp, dailyFees, dailyRevenue, }; }; -const fetch = async (timestamp: number, chainBlocks: ChainBlocks, options: FetchOptions): Promise => { - const { dailyFees, dailyRevenue } = await getFees(unitroller, options, {}); - const dailyHoldersRevenue = await getDailyVeloRewards(options) - dailyHoldersRevenue.addBalances(dailyRevenue) +const fetchbase = async (timestamp: number, chainBlocks: ChainBlocks, options: FetchOptions): Promise => { + const { dailyFees, dailyRevenue } = await getFees(unitrollerBASE, options, {}); + // const dailyHoldersRevenue = await getDailyVeloRewards(options) + // dailyHoldersRevenue.addBalances(dailyRevenue) - return { timestamp, dailyFees, dailyRevenue, dailyHoldersRevenue, }; + return { timestamp, dailyFees, dailyRevenue, }; }; const adapter: Adapter = { adapter: { [CHAIN.OPTIMISM]: { - fetch: fetch as any, + fetch: fetchoptimism as any, start: 1664582400, }, + [CHAIN.BASE]: { + fetch: fetchbase as any, + start: 1693449471, + }, }, }; From 7c593f63d9ee5d3c02733cdb4f75b094580c0b4b Mon Sep 17 00:00:00 2001 From: igorshelkovenkov Date: Wed, 3 Apr 2024 14:37:30 +0200 Subject: [PATCH 0254/1590] remove volume --- dexs/javsphere/index.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/dexs/javsphere/index.ts b/dexs/javsphere/index.ts index ca8574f4c4..d58f0d0189 100644 --- a/dexs/javsphere/index.ts +++ b/dexs/javsphere/index.ts @@ -21,23 +21,21 @@ type DexData = { type StakingData = { totalFees: number, dailyFees: number, - totalVolume: number, - dailyVolume: number, }; const methodology = { Fees: "User pays 0.1% fees on each trade. User pays 10% fee of rewards in dusdstaking.", - Volume: "User buys and sell RWA tokens. User get in and out of dusdstaking.", + Volume: "User buys and sell RWA tokens.", } const fetch = async (timestamp: number) => { const stats: DexData = (await fetchURL(`https://aws-api.javlis.com/api/dtoken/stats`)).data; const statsStaking: StakingData = (await fetchURL(`https://aws-api.javlis.com/api/dusdStaking/stats`)).data; return { - totalVolume: `${stats.volumeTotal + statsStaking.totalVolume}`, + totalVolume: `${stats.volumeTotal}`, totalFees: `${stats.feeTotal + statsStaking.totalFees}`, dailyFees: `${stats.fee24 + statsStaking.dailyFees}`, - dailyVolume: `${stats.volume24 + statsStaking.dailyVolume}`, + dailyVolume: `${stats.volume24}`, timestamp, }; }; From c66eb2e357ec639b2e5c51ac5f06feb289c3d08c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Apr 2024 13:09:01 +0000 Subject: [PATCH 0255/1590] fix the graph url --- dexs/shimmersea/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/shimmersea/index.ts b/dexs/shimmersea/index.ts index c837061bc7..706467e701 100644 --- a/dexs/shimmersea/index.ts +++ b/dexs/shimmersea/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const v3Endpoints = { - [CHAIN.SHIMMER_EVM]: "https://graph-c.shimmersea.finance/subgraphs/name/shimmersea/shimmer-dex", + [CHAIN.SHIMMER_EVM]: "https://graph-c-ha.shimmersea.finance/subgraphs/name/shimmersea/shimmer-dex", } const v3Graphs = getGraphDimensions({ graphUrls: v3Endpoints, From 8c30f31f3d5e7361bd01d96dfcfa129e2c749ffe Mon Sep 17 00:00:00 2001 From: AbbasNaqvi10 Date: Wed, 3 Apr 2024 18:18:39 +0500 Subject: [PATCH 0256/1590] fix: volume --- dexs/optionBlitz/index.ts | 4 +- yarn.lock | 2408 +++++++++++++++++++++++++++++++++++++ 2 files changed, 2410 insertions(+), 2 deletions(-) create mode 100644 yarn.lock diff --git a/dexs/optionBlitz/index.ts b/dexs/optionBlitz/index.ts index 541200e7e1..af59d3dccc 100644 --- a/dexs/optionBlitz/index.ts +++ b/dexs/optionBlitz/index.ts @@ -59,8 +59,8 @@ const fetch = async (): Promise => { balances1.add(ADDRESSES.arbitrum.USDC_CIRCLE, totalVolume.toString()); return { - dailyVolume: await balances.getUSDString(), - totalVolume: await balances1.getUSDString(), + dailyPremiumVolume: await balances.getUSDString(), + totalPremiumVolume: await balances1.getUSDString(), timestamp: dayTimestamp, }; }; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..22c574f558 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2408 @@ +# 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@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-s3@^3.400.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.540.0.tgz#ab9f0e488009c79f676d7b3489b9de0ec6a1cde3" + integrity sha512-rYBuNB7uqCO9xZc0OAwM2K6QJAo2Syt1L5OhEaf7zG7FulNMyrK6kJPg1WrvNE90tW6gUdDaTy3XsQ7lq6O7uA== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.540.0" + "@aws-sdk/core" "3.535.0" + "@aws-sdk/credential-provider-node" "3.540.0" + "@aws-sdk/middleware-bucket-endpoint" "3.535.0" + "@aws-sdk/middleware-expect-continue" "3.535.0" + "@aws-sdk/middleware-flexible-checksums" "3.535.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-location-constraint" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-sdk-s3" "3.535.0" + "@aws-sdk/middleware-signing" "3.535.0" + "@aws-sdk/middleware-ssec" "3.537.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/signature-v4-multi-region" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@aws-sdk/xml-builder" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.0" + "@smithy/eventstream-serde-browser" "^2.2.0" + "@smithy/eventstream-serde-config-resolver" "^2.2.0" + "@smithy/eventstream-serde-node" "^2.2.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-blob-browser" "^2.2.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/hash-stream-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/md5-js" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.0" + "@smithy/middleware-retry" "^2.2.0" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.0" + "@smithy/util-defaults-mode-node" "^2.3.0" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-stream" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + "@smithy/util-waiter" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.540.0.tgz#e4c52889d33ca969add269011b790f2d634fb6d2" + integrity sha512-LZYK0lBRQK8D8M3Sqc96XiXkAV2v70zhTtF6weyzEpgwxZMfSuFJjs0jFyhaeZBZbZv7BBghIdhJ5TPavNxGMQ== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.540.0" + "@aws-sdk/core" "3.535.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.0" + "@smithy/middleware-retry" "^2.2.0" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.0" + "@smithy/util-defaults-mode-node" "^2.3.0" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.540.0.tgz#732a7f325de3905a719c20ce05e555b445f82b4a" + integrity sha512-rrQZMuw4sxIo3eyAUUzPQRA336mPRnrAeSlSdVHBKZD8Fjvoy0lYry2vNhkPLpFZLso1J66KRyuIv4LzRR3v1Q== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.535.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.0" + "@smithy/middleware-retry" "^2.2.0" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.0" + "@smithy/util-defaults-mode-node" "^2.3.0" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.540.0.tgz#16ce14db1c5387be3ad9be6dd4f8ed33b63193c8" + integrity sha512-ITHUQxvpqfQX6obfpIi3KYGzZYfe/I5Ixjfxoi5lB7ISCtmxqObKB1fzD93wonkMJytJ7LUO8panZl/ojiJ1uw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.535.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.0" + "@smithy/middleware-retry" "^2.2.0" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.0" + "@smithy/util-defaults-mode-node" "^2.3.0" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.535.0.tgz#f3a726c297cea9634d19a1db4e958c918c506c8b" + integrity sha512-+Yusa9HziuaEDta1UaLEtMAtmgvxdxhPn7jgfRY6PplqAqgsfa5FR83sxy5qr2q7xjQTwHtV4MjQVuOjG9JsLw== + dependencies: + "@smithy/core" "^1.4.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.2.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz#26248e263a8107953d5496cb3760d4e7c877abcf" + integrity sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.535.0.tgz#0a42f6b1a61d927bbce9f4afd25112f486bd05da" + integrity sha512-kdj1wCmOMZ29jSlUskRqN04S6fJ4dvt0Nq9Z32SA6wO7UG8ht6Ot9h/au/eTWJM3E1somZ7D771oK7dQt9b8yw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.540.0.tgz#8e17b23bf242152775db1473f7d2952beb6a5ef9" + integrity sha512-igN/RbsnulIBwqXbwsWmR3srqmtbPF1dm+JteGvUY31FW65fTVvWvSr945Y/cf1UbhPmIQXntlsqESqpkhTHwg== + dependencies: + "@aws-sdk/client-sts" "3.540.0" + "@aws-sdk/credential-provider-env" "3.535.0" + "@aws-sdk/credential-provider-process" "3.535.0" + "@aws-sdk/credential-provider-sso" "3.540.0" + "@aws-sdk/credential-provider-web-identity" "3.540.0" + "@aws-sdk/types" "3.535.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.540.0.tgz#e6fd3404de68e7f9580f01aa542b16e9abc58e5c" + integrity sha512-HKQZJbLHlrHX9A0B1poiYNXIIQfy8whTjuosTCYKPDBhhUyVAQfxy/KG726j0v43IhaNPLgTGZCJve4hAsazSw== + dependencies: + "@aws-sdk/credential-provider-env" "3.535.0" + "@aws-sdk/credential-provider-http" "3.535.0" + "@aws-sdk/credential-provider-ini" "3.540.0" + "@aws-sdk/credential-provider-process" "3.535.0" + "@aws-sdk/credential-provider-sso" "3.540.0" + "@aws-sdk/credential-provider-web-identity" "3.540.0" + "@aws-sdk/types" "3.535.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz#ea1e8a38a32e36bbdc3f75eb03352e6eafa0c659" + integrity sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.540.0.tgz#1fc5c53a0df8227249c73a3cb7660b1accb79186" + integrity sha512-tKkFqK227LF5ajc5EL6asXS32p3nkofpP8G7NRpU7zOEOQCg01KUc4JRX+ItI0T007CiN1J19yNoFqHLT/SqHg== + dependencies: + "@aws-sdk/client-sso" "3.540.0" + "@aws-sdk/token-providers" "3.540.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.540.0.tgz#775a2090e9f4f89efe2ebdf1e2c109a47561c0e9" + integrity sha512-OpDm9w3A168B44hSjpnvECP4rvnFzD86rN4VYdGADuCvEa5uEcdA/JuT5WclFPDqdWEmFBqS1pxBIJBf0g2Q9Q== + dependencies: + "@aws-sdk/client-sts" "3.540.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz#8e19f3f9a89d618b3d75782343cb77c80ef6c7c4" + integrity sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-arn-parser" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz#4b95208f26430a7a360da088db61573b93061bcd" + integrity sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.535.0.tgz#278ae5e824ca0b73b80adf88a6aa40138bdd6b4c" + integrity sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.535.0" + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz#d5264f813592f5e77df25e5a14bbb0e6441812db" + integrity sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.535.0.tgz#718c776c118ef78a33117fa353803d079ebcc8fa" + integrity sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz#1a8ffd6c368edd6cb32e1edf7b1dced95c1820ee" + integrity sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz#6aa1e1bd1e84730d58a73021b745e20d4341a92d" + integrity sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.535.0.tgz#3cb76342d91a5e0e94d9a380dbaba9a9ee4849e0" + integrity sha512-/dLG/E3af6ohxkQ5GBHT8tZfuPIg6eItKxCXuulvYj0Tqgf3Mb+xTsvSkxQsJF06RS4sH7Qsg/PnB8ZfrJrXpg== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-arn-parser" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.2.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.535.0.tgz#cf98354e6d48e275689db6a4a513f62bd1555518" + integrity sha512-Rb4sfus1Gc5paRl9JJgymJGsb/i3gJKK/rTuFZICdd1PBBE5osIOHP5CpzWYBtc5LlyZE1a2QoxPMCyG+QUGPw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.537.0": + version "3.537.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.537.0.tgz#c64e4234e38f285e9e2bdf06fdbbb57f6bc848b2" + integrity sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz#4981c64c1eeb6b5c453bce02d060b8c71d44994d" + integrity sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz#20a30fb5fbbe27ab70f2ed16327bae7e367b5cec" + integrity sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.535.0.tgz#6a5413ab087d984794e12b04cac5d64c1e37a53f" + integrity sha512-tqCsEsEj8icW0SAh3NvyhRUq54Gz2pu4NM2tOSrFp7SO55heUUaRLSzYteNZCTOupH//AAaZvbN/UUTO/DrOog== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.540.0.tgz#06fb874a62d3c496875768ac648bc6cca4c75a79" + integrity sha512-9BvtiVEZe5Ev88Wa4ZIUbtT6BVcPwhxmVInQ6c12MYNb0WNL54BN6wLy/eknAfF05gpX2/NDU2pUDOyMPdm/+g== + dependencies: + "@aws-sdk/client-sso-oidc" "3.540.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.535.0", "@aws-sdk/types@^3.222.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" + integrity sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.535.0.tgz#046aafff4438caa3740cebec600989b1e840b934" + integrity sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz#a7fea1d2a5e64623353aaa6ee32dbb86ab9cd3f8" + integrity sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + "@smithy/util-endpoints" "^1.2.0" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz#0200a336fddd47dd6567ce15d01f62be50a315d7" + integrity sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz#d67d72e8b933051620f18ddb1c2be225f79f588f" + integrity sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz#f5c26fb6f3f561d3cf35f96f303b1775afad0a5b" + integrity sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.535.0.tgz#dbe66338f64e283951778f7d07a4afd2d7d09bfd" + integrity sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng== + dependencies: + "@smithy/types" "^2.12.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.49" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.49.tgz#f568e0c27299008fe103de71b616e8c462a23991" + integrity sha512-CggIAtMd5lwOpIPoGPkTMqS2KYVIectlt1cOHUc/O/tcBOQ9XSy2OfF4JI8tIMuAJQSvYlPnEtxpFkUwuFt27A== + dependencies: + "@aws-sdk/client-s3" "^3.400.0" + "@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" + +"@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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" + integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" + integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== + dependencies: + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" + integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" + integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/core@^1.4.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.1.tgz#42d1413ccade7c9a5418d739df68f5f6a039a7c0" + integrity sha512-jCnbEQHvTOUQXxXOS110FIMc83dCXUlrqiG/q0QzUSYhglDj9bJVPFjXmxc6qUfARe0mEb8h9LeVoh7FUYHuUg== + dependencies: + "@smithy/middleware-endpoint" "^2.5.0" + "@smithy/middleware-retry" "^2.3.0" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" + integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" + integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" + integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" + integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" + integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" + integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== + dependencies: + "@smithy/eventstream-codec" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" + integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" + integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== + dependencies: + "@smithy/chunked-blob-reader" "^2.2.0" + "@smithy/chunked-blob-reader-native" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/hash-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" + integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" + integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" + integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== + dependencies: + "@smithy/types" "^2.12.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/md5-js@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" + integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" + integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.0.tgz#9f1459e9b4cbf00fadfd99e98f88d4b1a2aeb987" + integrity sha512-OBhI9ZEAG8Xen0xsFJwwNOt44WE2CWkfYIxTognC8x42Lfsdf0VN/wCMqpdkySMDio/vts10BiovAxQp0T0faA== + dependencies: + "@smithy/middleware-serde" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/middleware-retry@^2.2.0", "@smithy/middleware-retry@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.0.tgz#b7b9a279f364b43e097cf96ca7a4192f361f3776" + integrity sha512-5H7kD0My2RkZryvYIWA4C9w6t/pdJfbgEdq+fcZhbnZsqHm/4vYFVjDsOzb5pC7PEpksuijoM9fGbM6eN4rLSg== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/service-error-classification" "^2.1.5" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" + integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" + integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" + integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" + integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/property-provider@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" + integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" + integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" + integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-uri-escape" "^2.2.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" + integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" + integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== + dependencies: + "@smithy/types" "^2.12.0" + +"@smithy/shared-ini-file-loader@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" + integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.2.0.tgz#8fe6a574188b71fba6056111b88d50c84babb060" + integrity sha512-+B5TNzj/fRZzVW3z8UUJOkNx15+4E0CLuvJmJUA1JUIZFp3rdJ/M2H5r2SqltaVPXL0oIxv/6YK92T9TsFGbFg== + dependencies: + "@smithy/eventstream-codec" "^2.2.0" + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-uri-escape" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.0.tgz#8de4fff221d232dda34a8e706d6a4f2911dffe2e" + integrity sha512-DDXWHWdimtS3y/Kw1Jo46KQ0ZYsDKcldFynQERUGBPDpkW1lXOTHy491ALHjwfiBQvzsVKVxl5+ocXNIgJuX4g== + dependencies: + "@smithy/middleware-endpoint" "^2.5.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@smithy/types@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" + integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== + dependencies: + "@smithy/querystring-parser" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-base64@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" + integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" + integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" + integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== + 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-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" + integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.0.tgz#963a9d3c3351272764dd1c5dc07c26f2c8abcb02" + integrity sha512-2okTdZaCBvOJszAPU/KSvlimMe35zLOKbQpHhamFJmR7t95HSe0K3C92jQPjKY3PmDBD+7iMkOnuW05F5OlF4g== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.0.tgz#5005058ca0a299f0948b47c288f7c3d4f36cb26e" + integrity sha512-hfKXnNLmsW9cmLb/JXKIvtuO6Cf4SuqN5PN1C2Ru/TBIws+m1wSgb+A53vo0r66xzB6E82inKG2J7qtwdi+Kkw== + dependencies: + "@smithy/config-resolver" "^2.2.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" + integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" + integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" + integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-retry@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" + integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== + dependencies: + "@smithy/service-error-classification" "^2.1.5" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-stream@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" + integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== + dependencies: + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" + integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" + integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/types" "^2.12.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.12.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.3.tgz#d6658c2c7776c1cad93534bb45428195ed840c65" + integrity sha512-sD+ia2ubTeWrOu+YMF+MTAB7E+O7qsMqAbMfW7DG3K1URwhZ5hN1pLlRVGbf4wDFzSfikL05M17EyorS86jShw== + 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.29" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.29.tgz#e7e9d796c1e195be7e7daf82b4abc50d017fb9db" + integrity sha512-5pAX7ggTmWZdhUrhRWLPf+5oM7F80bcKVCBbr0zwEkTNzTJL2CWQjznpFgHYy6GrzkYi2Yjy7DHKoynFxqPV8g== + 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.11.9" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +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.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + 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.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + 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.11.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af" + integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg== + 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.5.0" + +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.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + 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.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.10.2" + +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.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +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== + +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@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + 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.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +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.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +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== + +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" + +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.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== + 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.11.5" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" + integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== + 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== + +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +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.2" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.2.tgz#f98052f81c40c26ba85382fcb35e7346308542f4" + integrity sha512-bnb7swGANONXCTrVyebpOOZssLwQrVkYX2tcC6qOIvH+P+OhsoMBi7c3GXI5bC+Z4b4tOl+kQy6yeqLCZ1YQAQ== + 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": + 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@^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@^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": + 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@^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@^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.11.1, 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.3.1, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +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.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== + +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== + +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.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" + integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + +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.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +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== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +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 10d380292e3671335b1e62714094afa614b89dc2 Mon Sep 17 00:00:00 2001 From: Nils Date: Wed, 3 Apr 2024 16:06:14 +0200 Subject: [PATCH 0257/1590] init --- dexs/dusa/index.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 dexs/dusa/index.ts diff --git a/dexs/dusa/index.ts b/dexs/dusa/index.ts new file mode 100644 index 0000000000..bb794976b8 --- /dev/null +++ b/dexs/dusa/index.ts @@ -0,0 +1,18 @@ +import { Adapter, FetchResultVolume } from "../../adapters/types"; + +const getVolumeStats = async (): Promise => { + return fetch("https://api-mainnet-dusa.up.railway.app/volume") + .then((res) => res.json()) + .then((res) => res.data); +}; + +const adapter: Adapter = { + adapter: { + ethereum: { + fetch: getVolumeStats, + start: 1669420800, + }, + }, +}; + +export default adapter; From b93fb920cf45b8adac10992817e933e21aa31d75 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Apr 2024 14:56:11 +0000 Subject: [PATCH 0258/1590] add savmswap --- dexs/savmswap/index.ts | 11 +++++++++++ helpers/chains.ts | 3 ++- helpers/env.ts | 4 ++-- 3 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 dexs/savmswap/index.ts diff --git a/dexs/savmswap/index.ts b/dexs/savmswap/index.ts new file mode 100644 index 0000000000..30d4e502e5 --- /dev/null +++ b/dexs/savmswap/index.ts @@ -0,0 +1,11 @@ +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapter = univ2Adapter({ + [CHAIN.SVM]: "https://subgraph.8gr.xyz/subgraphs/name/savmswap/savmswap", +}, { + hasTotalVolume: false, +}); + +adapter.adapter.svm.start = 1711411200 +export default adapter diff --git a/helpers/chains.ts b/helpers/chains.ts index ad217994c5..f1b46d8da3 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -142,7 +142,8 @@ export enum CHAIN { FRAXTAL = "fraxtal", IMX = "imx", KROMA = "kroma", - ZORA = "zora" + ZORA = "zora", + SVM = "svm", } // Don´t use diff --git a/helpers/env.ts b/helpers/env.ts index 09256c464c..086fd7f6ec 100644 --- a/helpers/env.ts +++ b/helpers/env.ts @@ -4,7 +4,8 @@ const BOOL_KEYS = [ const DEFAULTS: any = { ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', - ZETA_RPC: "https://zetachain-evm.blockpi.network/v1/rpc/public,https://zetachain-mainnet-archive.allthatnode.com:8545" + ZETA_RPC: "https://zetachain-evm.blockpi.network/v1/rpc/public,https://zetachain-mainnet-archive.allthatnode.com:8545", + SVM_RPC: "https://rpc.cosvm.net" } export const ENV_KEYS = new Set([ @@ -38,4 +39,3 @@ export function getEnv(key: string): any { const value = process.env[key] ?? DEFAULTS[key] return BOOL_KEYS.includes(key) ? !!value : value } - From 5d45b77432d9757f48d0c561f87299a31c952f68 Mon Sep 17 00:00:00 2001 From: AbbasNaqvi10 Date: Wed, 3 Apr 2024 20:17:14 +0500 Subject: [PATCH 0259/1590] Revert "fix: volume" This reverts commit 8c30f31f3d5e7361bd01d96dfcfa129e2c749ffe. --- dexs/optionBlitz/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/optionBlitz/index.ts b/dexs/optionBlitz/index.ts index af59d3dccc..541200e7e1 100644 --- a/dexs/optionBlitz/index.ts +++ b/dexs/optionBlitz/index.ts @@ -59,8 +59,8 @@ const fetch = async (): Promise => { balances1.add(ADDRESSES.arbitrum.USDC_CIRCLE, totalVolume.toString()); return { - dailyPremiumVolume: await balances.getUSDString(), - totalPremiumVolume: await balances1.getUSDString(), + dailyVolume: await balances.getUSDString(), + totalVolume: await balances1.getUSDString(), timestamp: dayTimestamp, }; }; From 57576567b944e21bc1ef9b7df87e9e082dbbda6f Mon Sep 17 00:00:00 2001 From: AbbasNaqvi10 Date: Wed, 3 Apr 2024 20:18:09 +0500 Subject: [PATCH 0260/1590] fix: volume --- dexs/optionBlitz/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/optionBlitz/index.ts b/dexs/optionBlitz/index.ts index 541200e7e1..af59d3dccc 100644 --- a/dexs/optionBlitz/index.ts +++ b/dexs/optionBlitz/index.ts @@ -59,8 +59,8 @@ const fetch = async (): Promise => { balances1.add(ADDRESSES.arbitrum.USDC_CIRCLE, totalVolume.toString()); return { - dailyVolume: await balances.getUSDString(), - totalVolume: await balances1.getUSDString(), + dailyPremiumVolume: await balances.getUSDString(), + totalPremiumVolume: await balances1.getUSDString(), timestamp: dayTimestamp, }; }; From c44517cd6a5228c52fd46c19c89bff4dcaf0c3e4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Apr 2024 15:21:45 +0000 Subject: [PATCH 0261/1590] fix set default fees --- fees/frax-amo.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fees/frax-amo.ts b/fees/frax-amo.ts index cff5067948..e03c431e92 100644 --- a/fees/frax-amo.ts +++ b/fees/frax-amo.ts @@ -14,8 +14,8 @@ const query = (amo: string, timestamp: number) => gql` depositAddress name fraxAccountingPerDay( - first: 3, - orderBy: timestamp, + first: 3, + orderBy: timestamp, orderDirection: desc where: { timestamp_lt: ${timestamp} @@ -42,6 +42,7 @@ const fetch = async ({ createBalances, chain, toTimestamp }: FetchOptions) => { const client = getGQLClient(graph); const dailyRevenue = createBalances(); const totalRevenue = createBalances(); + const dailyFees = createBalances(); await Promise.all( amos.map(async (amo: string) => { @@ -55,7 +56,7 @@ const fetch = async ({ createBalances, chain, toTimestamp }: FetchOptions) => { }), ); - return { dailyRevenue, totalRevenue }; + return { dailyFees, dailyRevenue, totalRevenue }; }; const config: { From fcc8c6dbe218633f8f7589ebaa38a9e6c7b518a1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Apr 2024 15:41:09 +0000 Subject: [PATCH 0262/1590] move to options --- {dexs => options}/optionBlitz/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) rename {dexs => options}/optionBlitz/index.ts (91%) diff --git a/dexs/optionBlitz/index.ts b/options/optionBlitz/index.ts similarity index 91% rename from dexs/optionBlitz/index.ts rename to options/optionBlitz/index.ts index af59d3dccc..75c09e986d 100644 --- a/dexs/optionBlitz/index.ts +++ b/options/optionBlitz/index.ts @@ -29,7 +29,7 @@ const fetch = async (): Promise => { dayData(id: ${dayTimestamp}) { id volumeUsdc - } + } }`; const totalDataQuery = gql` @@ -59,9 +59,11 @@ const fetch = async (): Promise => { balances1.add(ADDRESSES.arbitrum.USDC_CIRCLE, totalVolume.toString()); return { - dailyPremiumVolume: await balances.getUSDString(), - totalPremiumVolume: await balances1.getUSDString(), timestamp: dayTimestamp, + dailyNotionalVolume: await balances.getUSDString(), + dailyPremiumVolume: 0, + totalNotionalVolume: await balances1.getUSDString(), + totalPremiumVolume: 0, }; }; From 8aef5e61452cebf77be10521aeb284be6669a993 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Apr 2024 15:51:50 +0000 Subject: [PATCH 0263/1590] fix timestamp --- fees/optionBlitz/index.ts | 22 ++++++++++------------ options/optionBlitz/index.ts | 10 +++++----- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/fees/optionBlitz/index.ts b/fees/optionBlitz/index.ts index 8207f8485d..fa1a4ac8c5 100644 --- a/fees/optionBlitz/index.ts +++ b/fees/optionBlitz/index.ts @@ -2,8 +2,8 @@ import ADDRESSES from "../../helpers/coreAssets.json"; import { FetchResult, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, request } from "graphql-request"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import * as sdk from "@defillama/sdk"; +import { getTimestampAtStartOfDay } from "../../utils/date"; interface IDayDataGraph { id: string; @@ -19,20 +19,18 @@ interface ITotalDataGraph { const URL = "https://api.thegraph.com/subgraphs/name/web3dev00/optionblitz"; -const fetch = async (): Promise => { - const date = new Date(); - date.setUTCHours(0, 0, 0, 0); - const dayTimestamp = date.getTime(); +const fetch = async (timestamp: number): Promise => { + const dayTimestamp = getTimestampAtStartOfDay(timestamp); const chain = CHAIN.ARBITRUM; const balances = new sdk.Balances({ chain }); const balances1 = new sdk.Balances({ chain }); const dayDataQuery = gql` { - dayData(id: ${dayTimestamp}) { + dayData(id: ${dayTimestamp * 1000}) { id rewardsUsdc lossesUsdc - } + } }`; const totalDataQuery = gql` @@ -48,17 +46,17 @@ const fetch = async (): Promise => { const dayDataResponse: IDayDataGraph = (await request(URL, dayDataQuery)).dayData; const totalDataResponse: ITotalDataGraph[] = (await request(URL, totalDataQuery)).totalDatas; - let perDayIncome = BigInt(0); - let totalIncome = BigInt(0); + let perDayIncome = 0; + let totalIncome = 0; if (dayDataResponse) { - perDayIncome = BigInt(dayDataResponse.rewardsUsdc) - BigInt(dayDataResponse.lossesUsdc); + perDayIncome = Math.abs(Number(dayDataResponse.rewardsUsdc) - Number(dayDataResponse.lossesUsdc)); } if (totalDataResponse.length > 0) { - totalIncome = BigInt(totalDataResponse[0].totalRewardsUsdc) - BigInt(totalDataResponse[0].totalLossesUsdc); + totalIncome = Math.abs(Number(totalDataResponse[0].totalRewardsUsdc) - Number(totalDataResponse[0].totalLossesUsdc)); } - + balances.add(ADDRESSES[chain].USDC_CIRCLE, perDayIncome); balances1.add(ADDRESSES[chain].USDC_CIRCLE, totalIncome); diff --git a/options/optionBlitz/index.ts b/options/optionBlitz/index.ts index 75c09e986d..0de84c6c22 100644 --- a/options/optionBlitz/index.ts +++ b/options/optionBlitz/index.ts @@ -3,6 +3,8 @@ import { FetchResult, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, request } from "graphql-request"; import * as sdk from "@defillama/sdk"; +import { get } from "http"; +import { getCurrentUnixTimestamp, getTimestampAtStartOfDay } from "../../utils/date"; interface IDayDataGraph { id: string; @@ -16,17 +18,15 @@ interface ITotalDataGraph { const URL = "https://api.thegraph.com/subgraphs/name/web3dev00/optionblitz"; -const fetch = async (): Promise => { - const date = new Date(); - date.setUTCHours(0, 0, 0, 0); - const dayTimestamp = date.getTime(); +const fetch = async (timestamp: number): Promise => { + const dayTimestamp = getTimestampAtStartOfDay(timestamp); const chain = CHAIN.ARBITRUM; const balances = new sdk.Balances({ chain }); const balances1 = new sdk.Balances({ chain }); const dayDataQuery = gql` { - dayData(id: ${dayTimestamp}) { + dayData(id: ${dayTimestamp * 1000}) { id volumeUsdc } From 8a25473e2044d28d259bfb979c565a6039475764 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Apr 2024 15:55:29 +0000 Subject: [PATCH 0264/1590] revert yarn lock --- yarn.lock | 2408 ----------------------------------------------------- 1 file changed, 2408 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 22c574f558..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2408 +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@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@^3.400.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.540.0.tgz#ab9f0e488009c79f676d7b3489b9de0ec6a1cde3" - integrity sha512-rYBuNB7uqCO9xZc0OAwM2K6QJAo2Syt1L5OhEaf7zG7FulNMyrK6kJPg1WrvNE90tW6gUdDaTy3XsQ7lq6O7uA== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.540.0" - "@aws-sdk/core" "3.535.0" - "@aws-sdk/credential-provider-node" "3.540.0" - "@aws-sdk/middleware-bucket-endpoint" "3.535.0" - "@aws-sdk/middleware-expect-continue" "3.535.0" - "@aws-sdk/middleware-flexible-checksums" "3.535.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-location-constraint" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-sdk-s3" "3.535.0" - "@aws-sdk/middleware-signing" "3.535.0" - "@aws-sdk/middleware-ssec" "3.537.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/signature-v4-multi-region" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@aws-sdk/xml-builder" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.0" - "@smithy/eventstream-serde-browser" "^2.2.0" - "@smithy/eventstream-serde-config-resolver" "^2.2.0" - "@smithy/eventstream-serde-node" "^2.2.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-blob-browser" "^2.2.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/hash-stream-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/md5-js" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.0" - "@smithy/middleware-retry" "^2.2.0" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.0" - "@smithy/util-defaults-mode-node" "^2.3.0" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-stream" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - "@smithy/util-waiter" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.540.0.tgz#e4c52889d33ca969add269011b790f2d634fb6d2" - integrity sha512-LZYK0lBRQK8D8M3Sqc96XiXkAV2v70zhTtF6weyzEpgwxZMfSuFJjs0jFyhaeZBZbZv7BBghIdhJ5TPavNxGMQ== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.540.0" - "@aws-sdk/core" "3.535.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.0" - "@smithy/middleware-retry" "^2.2.0" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.0" - "@smithy/util-defaults-mode-node" "^2.3.0" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.540.0.tgz#732a7f325de3905a719c20ce05e555b445f82b4a" - integrity sha512-rrQZMuw4sxIo3eyAUUzPQRA336mPRnrAeSlSdVHBKZD8Fjvoy0lYry2vNhkPLpFZLso1J66KRyuIv4LzRR3v1Q== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.535.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.0" - "@smithy/middleware-retry" "^2.2.0" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.0" - "@smithy/util-defaults-mode-node" "^2.3.0" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.540.0.tgz#16ce14db1c5387be3ad9be6dd4f8ed33b63193c8" - integrity sha512-ITHUQxvpqfQX6obfpIi3KYGzZYfe/I5Ixjfxoi5lB7ISCtmxqObKB1fzD93wonkMJytJ7LUO8panZl/ojiJ1uw== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.535.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.0" - "@smithy/middleware-retry" "^2.2.0" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.0" - "@smithy/util-defaults-mode-node" "^2.3.0" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.535.0.tgz#f3a726c297cea9634d19a1db4e958c918c506c8b" - integrity sha512-+Yusa9HziuaEDta1UaLEtMAtmgvxdxhPn7jgfRY6PplqAqgsfa5FR83sxy5qr2q7xjQTwHtV4MjQVuOjG9JsLw== - dependencies: - "@smithy/core" "^1.4.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.2.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz#26248e263a8107953d5496cb3760d4e7c877abcf" - integrity sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.535.0.tgz#0a42f6b1a61d927bbce9f4afd25112f486bd05da" - integrity sha512-kdj1wCmOMZ29jSlUskRqN04S6fJ4dvt0Nq9Z32SA6wO7UG8ht6Ot9h/au/eTWJM3E1somZ7D771oK7dQt9b8yw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.540.0.tgz#8e17b23bf242152775db1473f7d2952beb6a5ef9" - integrity sha512-igN/RbsnulIBwqXbwsWmR3srqmtbPF1dm+JteGvUY31FW65fTVvWvSr945Y/cf1UbhPmIQXntlsqESqpkhTHwg== - dependencies: - "@aws-sdk/client-sts" "3.540.0" - "@aws-sdk/credential-provider-env" "3.535.0" - "@aws-sdk/credential-provider-process" "3.535.0" - "@aws-sdk/credential-provider-sso" "3.540.0" - "@aws-sdk/credential-provider-web-identity" "3.540.0" - "@aws-sdk/types" "3.535.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.540.0.tgz#e6fd3404de68e7f9580f01aa542b16e9abc58e5c" - integrity sha512-HKQZJbLHlrHX9A0B1poiYNXIIQfy8whTjuosTCYKPDBhhUyVAQfxy/KG726j0v43IhaNPLgTGZCJve4hAsazSw== - dependencies: - "@aws-sdk/credential-provider-env" "3.535.0" - "@aws-sdk/credential-provider-http" "3.535.0" - "@aws-sdk/credential-provider-ini" "3.540.0" - "@aws-sdk/credential-provider-process" "3.535.0" - "@aws-sdk/credential-provider-sso" "3.540.0" - "@aws-sdk/credential-provider-web-identity" "3.540.0" - "@aws-sdk/types" "3.535.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz#ea1e8a38a32e36bbdc3f75eb03352e6eafa0c659" - integrity sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.540.0.tgz#1fc5c53a0df8227249c73a3cb7660b1accb79186" - integrity sha512-tKkFqK227LF5ajc5EL6asXS32p3nkofpP8G7NRpU7zOEOQCg01KUc4JRX+ItI0T007CiN1J19yNoFqHLT/SqHg== - dependencies: - "@aws-sdk/client-sso" "3.540.0" - "@aws-sdk/token-providers" "3.540.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.540.0.tgz#775a2090e9f4f89efe2ebdf1e2c109a47561c0e9" - integrity sha512-OpDm9w3A168B44hSjpnvECP4rvnFzD86rN4VYdGADuCvEa5uEcdA/JuT5WclFPDqdWEmFBqS1pxBIJBf0g2Q9Q== - dependencies: - "@aws-sdk/client-sts" "3.540.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz#8e19f3f9a89d618b3d75782343cb77c80ef6c7c4" - integrity sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-arn-parser" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz#4b95208f26430a7a360da088db61573b93061bcd" - integrity sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.535.0.tgz#278ae5e824ca0b73b80adf88a6aa40138bdd6b4c" - integrity sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.535.0" - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz#d5264f813592f5e77df25e5a14bbb0e6441812db" - integrity sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.535.0.tgz#718c776c118ef78a33117fa353803d079ebcc8fa" - integrity sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz#1a8ffd6c368edd6cb32e1edf7b1dced95c1820ee" - integrity sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz#6aa1e1bd1e84730d58a73021b745e20d4341a92d" - integrity sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.535.0.tgz#3cb76342d91a5e0e94d9a380dbaba9a9ee4849e0" - integrity sha512-/dLG/E3af6ohxkQ5GBHT8tZfuPIg6eItKxCXuulvYj0Tqgf3Mb+xTsvSkxQsJF06RS4sH7Qsg/PnB8ZfrJrXpg== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-arn-parser" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.2.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.535.0.tgz#cf98354e6d48e275689db6a4a513f62bd1555518" - integrity sha512-Rb4sfus1Gc5paRl9JJgymJGsb/i3gJKK/rTuFZICdd1PBBE5osIOHP5CpzWYBtc5LlyZE1a2QoxPMCyG+QUGPw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.537.0": - version "3.537.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.537.0.tgz#c64e4234e38f285e9e2bdf06fdbbb57f6bc848b2" - integrity sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz#4981c64c1eeb6b5c453bce02d060b8c71d44994d" - integrity sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz#20a30fb5fbbe27ab70f2ed16327bae7e367b5cec" - integrity sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.535.0.tgz#6a5413ab087d984794e12b04cac5d64c1e37a53f" - integrity sha512-tqCsEsEj8icW0SAh3NvyhRUq54Gz2pu4NM2tOSrFp7SO55heUUaRLSzYteNZCTOupH//AAaZvbN/UUTO/DrOog== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.540.0.tgz#06fb874a62d3c496875768ac648bc6cca4c75a79" - integrity sha512-9BvtiVEZe5Ev88Wa4ZIUbtT6BVcPwhxmVInQ6c12MYNb0WNL54BN6wLy/eknAfF05gpX2/NDU2pUDOyMPdm/+g== - dependencies: - "@aws-sdk/client-sso-oidc" "3.540.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.535.0", "@aws-sdk/types@^3.222.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" - integrity sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-arn-parser@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.535.0.tgz#046aafff4438caa3740cebec600989b1e840b934" - integrity sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-endpoints@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz#a7fea1d2a5e64623353aaa6ee32dbb86ab9cd3f8" - integrity sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - "@smithy/util-endpoints" "^1.2.0" - tslib "^2.6.2" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz#0200a336fddd47dd6567ce15d01f62be50a315d7" - integrity sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-browser@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz#d67d72e8b933051620f18ddb1c2be225f79f588f" - integrity sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz#f5c26fb6f3f561d3cf35f96f303b1775afad0a5b" - integrity sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.535.0.tgz#dbe66338f64e283951778f7d07a4afd2d7d09bfd" - integrity sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng== - dependencies: - "@smithy/types" "^2.12.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.49" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.49.tgz#f568e0c27299008fe103de71b616e8c462a23991" - integrity sha512-CggIAtMd5lwOpIPoGPkTMqS2KYVIectlt1cOHUc/O/tcBOQ9XSy2OfF4JI8tIMuAJQSvYlPnEtxpFkUwuFt27A== - dependencies: - "@aws-sdk/client-s3" "^3.400.0" - "@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" - -"@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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" - integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader-native@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" - integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== - dependencies: - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" - integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" - integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/core@^1.4.0": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.1.tgz#42d1413ccade7c9a5418d739df68f5f6a039a7c0" - integrity sha512-jCnbEQHvTOUQXxXOS110FIMc83dCXUlrqiG/q0QzUSYhglDj9bJVPFjXmxc6qUfARe0mEb8h9LeVoh7FUYHuUg== - dependencies: - "@smithy/middleware-endpoint" "^2.5.0" - "@smithy/middleware-retry" "^2.3.0" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" - integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" - integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" - integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" - integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" - integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" - integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== - dependencies: - "@smithy/eventstream-codec" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" - integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" - integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== - dependencies: - "@smithy/chunked-blob-reader" "^2.2.0" - "@smithy/chunked-blob-reader-native" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/hash-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" - integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" - integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" - integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== - dependencies: - "@smithy/types" "^2.12.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/md5-js@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" - integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" - integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.0.tgz#9f1459e9b4cbf00fadfd99e98f88d4b1a2aeb987" - integrity sha512-OBhI9ZEAG8Xen0xsFJwwNOt44WE2CWkfYIxTognC8x42Lfsdf0VN/wCMqpdkySMDio/vts10BiovAxQp0T0faA== - dependencies: - "@smithy/middleware-serde" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/middleware-retry@^2.2.0", "@smithy/middleware-retry@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.0.tgz#b7b9a279f364b43e097cf96ca7a4192f361f3776" - integrity sha512-5H7kD0My2RkZryvYIWA4C9w6t/pdJfbgEdq+fcZhbnZsqHm/4vYFVjDsOzb5pC7PEpksuijoM9fGbM6eN4rLSg== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/service-error-classification" "^2.1.5" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" - integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" - integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" - integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" - integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/property-provider@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" - integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" - integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" - integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-uri-escape" "^2.2.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" - integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" - integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== - dependencies: - "@smithy/types" "^2.12.0" - -"@smithy/shared-ini-file-loader@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" - integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.2.0.tgz#8fe6a574188b71fba6056111b88d50c84babb060" - integrity sha512-+B5TNzj/fRZzVW3z8UUJOkNx15+4E0CLuvJmJUA1JUIZFp3rdJ/M2H5r2SqltaVPXL0oIxv/6YK92T9TsFGbFg== - dependencies: - "@smithy/eventstream-codec" "^2.2.0" - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-uri-escape" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.0.tgz#8de4fff221d232dda34a8e706d6a4f2911dffe2e" - integrity sha512-DDXWHWdimtS3y/Kw1Jo46KQ0ZYsDKcldFynQERUGBPDpkW1lXOTHy491ALHjwfiBQvzsVKVxl5+ocXNIgJuX4g== - dependencies: - "@smithy/middleware-endpoint" "^2.5.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@smithy/types@^2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" - integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" - integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== - dependencies: - "@smithy/querystring-parser" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-base64@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" - integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== - dependencies: - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" - integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" - integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== - 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-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" - integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.0.tgz#963a9d3c3351272764dd1c5dc07c26f2c8abcb02" - integrity sha512-2okTdZaCBvOJszAPU/KSvlimMe35zLOKbQpHhamFJmR7t95HSe0K3C92jQPjKY3PmDBD+7iMkOnuW05F5OlF4g== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.0.tgz#5005058ca0a299f0948b47c288f7c3d4f36cb26e" - integrity sha512-hfKXnNLmsW9cmLb/JXKIvtuO6Cf4SuqN5PN1C2Ru/TBIws+m1wSgb+A53vo0r66xzB6E82inKG2J7qtwdi+Kkw== - dependencies: - "@smithy/config-resolver" "^2.2.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" - integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" - integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" - integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-retry@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" - integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== - dependencies: - "@smithy/service-error-classification" "^2.1.5" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-stream@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" - integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== - dependencies: - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" - integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" - integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/types" "^2.12.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.12.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.3.tgz#d6658c2c7776c1cad93534bb45428195ed840c65" - integrity sha512-sD+ia2ubTeWrOu+YMF+MTAB7E+O7qsMqAbMfW7DG3K1URwhZ5hN1pLlRVGbf4wDFzSfikL05M17EyorS86jShw== - 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.29" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.29.tgz#e7e9d796c1e195be7e7daf82b4abc50d017fb9db" - integrity sha512-5pAX7ggTmWZdhUrhRWLPf+5oM7F80bcKVCBbr0zwEkTNzTJL2CWQjznpFgHYy6GrzkYi2Yjy7DHKoynFxqPV8g== - 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.11.9" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" - integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -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.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - 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.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - 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.11.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af" - integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg== - 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.5.0" - -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.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - 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.3.12" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" - integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.6" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.10.2" - -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.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -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== - -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@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - 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.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -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.1: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -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== - -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" - -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.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" - integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== - 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.11.5" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" - integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== - 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== - -semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -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.2" - resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.2.tgz#f98052f81c40c26ba85382fcb35e7346308542f4" - integrity sha512-bnb7swGANONXCTrVyebpOOZssLwQrVkYX2tcC6qOIvH+P+OhsoMBi7c3GXI5bC+Z4b4tOl+kQy6yeqLCZ1YQAQ== - 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": - 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@^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@^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": - 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@^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@^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.11.1, 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.3.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -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.4.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" - integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== - -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== - -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.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -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.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -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== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -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 4d7be307705cd8e906895ff24a9c47a8f92360c7 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Apr 2024 15:58:23 +0000 Subject: [PATCH 0265/1590] fix volume --- options/optionBlitz/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/options/optionBlitz/index.ts b/options/optionBlitz/index.ts index 0de84c6c22..0fdad90a09 100644 --- a/options/optionBlitz/index.ts +++ b/options/optionBlitz/index.ts @@ -60,10 +60,10 @@ const fetch = async (timestamp: number): Promise => { return { timestamp: dayTimestamp, - dailyNotionalVolume: await balances.getUSDString(), - dailyPremiumVolume: 0, - totalNotionalVolume: await balances1.getUSDString(), - totalPremiumVolume: 0, + dailyNotionalVolume: 0, + dailyPremiumVolume: await balances.getUSDString(), + totalNotionalVolume: 0, + totalPremiumVolume: await balances1.getUSDString(), }; }; From f11d3760e7e88754cedf3523f92e096e9bb436d1 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 3 Apr 2024 18:09:21 +0100 Subject: [PATCH 0266/1590] fees --- fees/frax-amo.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fees/frax-amo.ts b/fees/frax-amo.ts index cff5067948..f0f2a3b4a8 100644 --- a/fees/frax-amo.ts +++ b/fees/frax-amo.ts @@ -55,7 +55,12 @@ const fetch = async ({ createBalances, chain, toTimestamp }: FetchOptions) => { }), ); - return { dailyRevenue, totalRevenue }; + return { + dailyRevenue, + totalRevenue, + dailyFees: dailyRevenue, + totalFees: totalRevenue, + }; }; const config: { From d859dff463290a0fb395b78faed2d73a7aecee53 Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:06:22 +0100 Subject: [PATCH 0267/1590] force using total volume --- helpers/getUniSubgraphVolume.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index 79aeb6aed7..c1397e57b8 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -63,7 +63,7 @@ function getChainVolume({ dateField: DEFAULT_DAILY_DATE_FIELD }, customDailyVolume = undefined, - hasDailyVolume = true, + hasDailyVolume = false, hasTotalVolume = true, getCustomBlock = undefined, }: IGetChainVolumeParams) { From 64a4eff36ff003b93bf751449753df292f70592c Mon Sep 17 00:00:00 2001 From: ngfam Date: Thu, 4 Apr 2024 16:24:16 +0700 Subject: [PATCH 0268/1590] [PENDLE] Added mantle TVL & pool whitelisting & separate supply side fees from revenue --- fees/pendle.ts | 193 ++++++++++++++++++++++++++++++------------------- 1 file changed, 119 insertions(+), 74 deletions(-) diff --git a/fees/pendle.ts b/fees/pendle.ts index 749fe7990e..555e5a1625 100644 --- a/fees/pendle.ts +++ b/fees/pendle.ts @@ -6,33 +6,25 @@ import { } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; -import request from "graphql-request"; import { addTokensReceived } from "../helpers/token"; -import { StringNumber } from "@defillama/sdk/build/types"; import BigNumber from "bignumber.js"; +import { getConfig } from "../helpers/cache"; +import { ChainApi } from "@defillama/sdk"; + +const ABI = { + assetInfo: "function assetInfo() view returns (uint8,address,uint8)", + getRewardTokens: "function getRewardTokens() view returns (address[])", + exchangeRate: "function exchangeRate() view returns (uint256)", + marketSwapEvent: + "event Swap(address indexed caller, address indexed receiver, int256 netPtOut, int256 netSyOut, uint256 netSyFee, uint256 netSyToReserve)", +}; type IConfig = { [s: string | Chain]: { - endpoint: string; treasury: string; }; }; -const gqlQuery = ` -{ - assets(first: 1000, where: { - type_in: ["SY"] - }) { - id, - type - accountingAssetType - accountingAsset { - id - } - } -} -`; - const STETH_ETHEREUM = "ethereum:0xae7ab96520de3a18e5e111b5eaab095312d7fe84"; const EETH_ETHEREUM = "ethereum:0x35fa164735182de50811e8e2e824cfb9b6118ac2"; const WETH_ETHEREUM = "ethereum:0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; @@ -52,31 +44,26 @@ const BRIDGED_ASSETS = [ }, { sy: "0x9d6d509c0354aca187aac6bea7d063d3ef68e2a0", - asset: WETH_ETHEREUM + asset: WETH_ETHEREUM, }, ]; const chainConfig: IConfig = { [CHAIN.ETHEREUM]: { - endpoint: - "https://api.thegraph.com/subgraphs/name/pendle-finance/core-mainnet-23-dec-18", treasury: "0x8270400d528c34e1596ef367eedec99080a1b592", }, [CHAIN.ARBITRUM]: { - endpoint: - "https://api.thegraph.com/subgraphs/name/pendle-finance/core-arbitrum-23-dec-18", treasury: "0xcbcb48e22622a3778b6f14c2f5d258ba026b05e6", }, [CHAIN.BSC]: { - endpoint: - "https://api.thegraph.com/subgraphs/name/pendle-finance/core-bsc-23-dec-18", treasury: "0xd77e9062c6df3f2d1cb5bf45855fa1e7712a059e", }, [CHAIN.OPTIMISM]: { - endpoint: - "https://api.thegraph.com/subgraphs/name/pendle-finance/core-optimism-23-dec-18", treasury: "0xe972d450ec5b11b99d97760422e0e054afbc8042", }, + [CHAIN.MANTLE]: { + treasury: "0x5c30d3578a4d07a340650a76b9ae5df20d5bdf55" + } }; const fetch = (chain: Chain) => { @@ -85,94 +72,130 @@ const fetch = (chain: Chain) => { _: ChainBlocks, options: FetchOptions ): Promise => { - const { api } = options; - const allSyDatas: { - id: string; - type: string; - accountingAssetType: number; - accountingAsset: { - id: string; - }; - }[] = (await request(chainConfig[chain].endpoint, gqlQuery)).assets; - - const allSy: string[] = allSyDatas - .filter((token: any) => token.type === "SY") - .map((token: any) => token.id.toLowerCase()); + await getWhitelistedAssets(options.api); + const { api, getLogs, createBalances } = options; + + const { markets, sys, marketToSy } = await getWhitelistedAssets(api); const rewardTokens: string[] = ( await api.multiCall({ permitFailure: true, - abi: getRewardTokensABI, - calls: allSy, + abi: ABI.getRewardTokens, + calls: sys, }) ).flat(); const exchangeRates: String | null[] = []; - for (const sy of allSy) { + const assetInfos: (string[] | null)[] = []; + for (const sy of sys) { try { - const exchangeRate = await api.call({ target: sy, abi: exchangeRateABI, }); - exchangeRates.push(exchangeRate) + const exchangeRate = await api.call({ + target: sy, + abi: ABI.exchangeRate, + }); + const assetInfo = await api.call({ target: sy, abi: ABI.assetInfo }); + exchangeRates.push(exchangeRate); + assetInfos.push(assetInfo); } catch (e) { - console.error(e) - exchangeRates.push(null) + exchangeRates.push(null); + assetInfos.push(null); } } - const dailyFees = await addTokensReceived({ + const dailySupplySideFees = createBalances(); + await Promise.all( + markets.map(async (market) => { + const allSwapEvent = await getLogs({ + target: market, + eventAbi: ABI.marketSwapEvent, + }); + + for (const swapEvent of allSwapEvent) { + const netSyFee = swapEvent.netSyFee; + const netSyToReserve = swapEvent.netSyToReserve; + dailySupplySideFees.add( + marketToSy.get(market)!, + netSyFee - netSyToReserve + ); // excluding revenue fee + } + }) + ); + + const dailyRevenue = await addTokensReceived({ options, target: chainConfig[chain].treasury, - tokens: rewardTokens.concat(allSy), + tokens: rewardTokens.concat(sys), }); - const allTokenList = dailyFees.getBalances(); - for (const token in allTokenList) { + const allRevenueTokenList = dailyRevenue.getBalances(); + const allSupplySideTokenList = dailySupplySideFees.getBalances(); + + for (const token in allRevenueTokenList) { const tokenAddr = token.split(":")[1]; - const index = allSyDatas.findIndex( - (syData) => syData.id.toLowerCase() === tokenAddr.toLowerCase() - ); + const index = sys.indexOf(tokenAddr); - if (index == -1) continue; + if (index == -1 || !assetInfos[index]) continue; - const rawAmount = allTokenList[token]; - dailyFees.removeTokenBalance(token); + const rawAmountRevenue = allRevenueTokenList[token]; + const rawAmountSupplySide = allSupplySideTokenList[token]; - let underlyingAsset = allSyDatas[index].accountingAsset.id; + dailyRevenue.removeTokenBalance(token); + dailySupplySideFees.removeTokenBalance(token); + + let underlyingAsset = assetInfos[index][1]; let isBridged = false; for (const bridge of BRIDGED_ASSETS) { - if (bridge.sy.toLowerCase() === tokenAddr.toLowerCase()) { + if (bridge.sy === tokenAddr) { underlyingAsset = bridge.asset; isBridged = true; break; } } - let assetAmount = new BigNumber(rawAmount) - if (allSyDatas[index].accountingAssetType === 0) { - assetAmount = assetAmount.times(exchangeRates[index] ?? 0) + let assetAmountRevenue = new BigNumber(rawAmountRevenue); + let assetAmountSupplySide = new BigNumber(rawAmountSupplySide); + if (assetInfos[index][0] === "0") { + const rate = exchangeRates[index] ?? 0; + assetAmountRevenue = assetAmountRevenue + .times(rate) + .dividedToIntegerBy(1e18); + assetAmountSupplySide = assetAmountSupplySide + .times(rate) .dividedToIntegerBy(1e18); } - - dailyFees.addToken( + dailyRevenue.addToken( underlyingAsset, - assetAmount, + assetAmountRevenue, isBridged ? { - skipChain: true, - } + skipChain: true, + } : undefined ); + + if (rawAmountSupplySide !== undefined) { + dailySupplySideFees.addToken( + underlyingAsset, + assetAmountSupplySide, + isBridged + ? { + skipChain: true, + } + : undefined + ); + } } - const dailyRevenue = dailyFees.clone(); - const dailySupplySideRevenue = dailyFees.clone(); + const dailyFees = dailyRevenue.clone(); + dailyFees.addBalances(dailySupplySideFees); return { dailyFees: dailyFees, - dailyRevenue: dailyFees, + dailyRevenue: dailyRevenue, dailyHoldersRevenue: dailyRevenue, - dailySupplySideRevenue: dailySupplySideRevenue, + dailySupplySideRevenue: dailySupplySideFees, timestamp, }; }; @@ -195,11 +218,33 @@ const adapter: SimpleAdapter = { [CHAIN.OPTIMISM]: { fetch: fetch(CHAIN.OPTIMISM), start: 1691733600, - } + }, + [CHAIN.MANTLE]: { + fetch: fetch(CHAIN.MANTLE), + start: 1711506087, + }, }, }; -const getRewardTokensABI = "address[]:getRewardTokens"; -const exchangeRateABI = "uint256:exchangeRate"; +async function getWhitelistedAssets(api: ChainApi): Promise<{ + markets: string[]; + sys: string[]; + marketToSy: Map; +}> { + const { results } = await getConfig( + "pendle/v2/revenue-" + api.chain, + `https://api-v2.pendle.finance/core/v1/${api.chainId!}/markets?order_by=name%3A1&skip=0&limit=100&select=all` + ); + const markets = results.map((d: any) => d.lp.address); + const sySet: Set = new Set(results.map((d: any) => d.sy.address)); + const sys = Array.from(sySet); + + const marketToSy = new Map(); + for (const result of results) { + marketToSy.set(result.lp.address, result.sy.address); + } + + return { markets, sys, marketToSy }; +} export default adapter; From 417ce2c8373c90982434345a489d5a0be82361c8 Mon Sep 17 00:00:00 2001 From: ngfam Date: Thu, 4 Apr 2024 16:34:13 +0700 Subject: [PATCH 0269/1590] Fix nullable check for assetinfo --- fees/pendle.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fees/pendle.ts b/fees/pendle.ts index 555e5a1625..a2b51e88d8 100644 --- a/fees/pendle.ts +++ b/fees/pendle.ts @@ -136,13 +136,15 @@ const fetch = (chain: Chain) => { if (index == -1 || !assetInfos[index]) continue; + const assetInfo = assetInfos[index]!; + const rawAmountRevenue = allRevenueTokenList[token]; const rawAmountSupplySide = allSupplySideTokenList[token]; dailyRevenue.removeTokenBalance(token); dailySupplySideFees.removeTokenBalance(token); - let underlyingAsset = assetInfos[index][1]; + let underlyingAsset = assetInfo[1]!; let isBridged = false; for (const bridge of BRIDGED_ASSETS) { @@ -155,7 +157,7 @@ const fetch = (chain: Chain) => { let assetAmountRevenue = new BigNumber(rawAmountRevenue); let assetAmountSupplySide = new BigNumber(rawAmountSupplySide); - if (assetInfos[index][0] === "0") { + if (assetInfo[0] === "0") { const rate = exchangeRates[index] ?? 0; assetAmountRevenue = assetAmountRevenue .times(rate) From ebe411b641f302db9ef55b654a0f1d900aa8604d Mon Sep 17 00:00:00 2001 From: Lemon Date: Thu, 4 Apr 2024 12:57:02 +0200 Subject: [PATCH 0270/1590] fix: Core markets volume in blast, separated volumes of intentx in base and blast --- dexs/core-markets/index.ts | 2 +- dexs/intent-x/index.tsx | 39 +++++++++++++++++++----- fees/core-markets/index.ts | 2 +- fees/intent-x/index.tsx | 61 +++++++++++++++++++++++++++++++++----- 4 files changed, 86 insertions(+), 18 deletions(-) diff --git a/dexs/core-markets/index.ts b/dexs/core-markets/index.ts index eb7141a799..9f6a9a1c7b 100644 --- a/dexs/core-markets/index.ts +++ b/dexs/core-markets/index.ts @@ -80,7 +80,7 @@ const fetchVolume = async (timestamp: number): Promise => { const adapter: SimpleAdapter = { adapter: { - [CHAIN.BASE]: { + [CHAIN.BLAST]: { fetch: fetchVolume, start: async () => 236678, }, diff --git a/dexs/intent-x/index.tsx b/dexs/intent-x/index.tsx index 5616ddb74b..d05e5dee31 100644 --- a/dexs/intent-x/index.tsx +++ b/dexs/intent-x/index.tsx @@ -96,10 +96,6 @@ const fetchVolume = async (timestamp: number): Promise => { from: String(timestamp - ONE_DAY_IN_SECONDS), to: String(timestamp), }); - const response_blast: IGraphResponse = await request(endpoint_blast, queryBlast, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), - }); let dailyVolume = new BigNumber(0); response_0_8_0.dailyHistories.forEach((data) => { @@ -108,10 +104,6 @@ const fetchVolume = async (timestamp: number): Promise => { response.dailyHistories.forEach((data) => { dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); }); - response_blast.dailyHistories.forEach((data) => { - dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); - }); - let totalVolume = new BigNumber(0); response_0_8_0.totalHistories.forEach((data) => { @@ -120,6 +112,33 @@ const fetchVolume = async (timestamp: number): Promise => { response.totalHistories.forEach((data) => { totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); }); + + dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); + totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); + + const _dailyVolume = toString(dailyVolume); + const _totalVolume = toString(totalVolume); + + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + + return { + timestamp: dayTimestamp, + dailyVolume: _dailyVolume ?? "0", + totalVolume: _totalVolume ?? "0", + }; +}; + +const fetchVolumeBlast = async (timestamp: number): Promise => { + let dailyVolume = new BigNumber(0); + let totalVolume = new BigNumber(0); + + const response_blast: IGraphResponse = await request(endpoint_blast, queryBlast, { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + }); + response_blast.dailyHistories.forEach((data) => { + dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); + }); response_blast.totalHistories.forEach((data) => { totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); }); @@ -145,6 +164,10 @@ const adapter: SimpleAdapter = { fetch: fetchVolume, start: 1698796800, }, + [CHAIN.BLAST]: { + fetch: fetchVolumeBlast, + start: 1698796800, + }, }, }; diff --git a/fees/core-markets/index.ts b/fees/core-markets/index.ts index ebd5f738fc..5d6776a8d0 100644 --- a/fees/core-markets/index.ts +++ b/fees/core-markets/index.ts @@ -107,7 +107,7 @@ const fetchVolume = async (timestamp: number): Promise => { const adapter: SimpleAdapter = { adapter: { - [CHAIN.BASE]: { + [CHAIN.BLAST]: { fetch: fetchVolume, start: async () => 236678, }, diff --git a/fees/intent-x/index.tsx b/fees/intent-x/index.tsx index e1aaace540..817482e92f 100644 --- a/fees/intent-x/index.tsx +++ b/fees/intent-x/index.tsx @@ -96,10 +96,6 @@ const fetchVolume = async (timestamp: number): Promise => { from: String(timestamp - ONE_DAY_IN_SECONDS), to: String(timestamp), }); - const response_blast: IGraphResponse = await request(endpoint_blast, queryBlast, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), - }); // Merging both responses let dailyFees = new BigNumber(0); @@ -109,9 +105,6 @@ const fetchVolume = async (timestamp: number): Promise => { response.dailyHistories.forEach((data) => { dailyFees = dailyFees.plus(new BigNumber(data.platformFee)); }); - response_blast.dailyHistories.forEach((data) => { - dailyFees = dailyFees.plus(new BigNumber(data.platformFee)); - }); let totalFees = new BigNumber(0); response_0_8_0.totalHistories.forEach((data) => { @@ -120,13 +113,61 @@ const fetchVolume = async (timestamp: number): Promise => { response.totalHistories.forEach((data) => { totalFees = totalFees.plus(new BigNumber(data.platformFee)); }); + + dailyFees = dailyFees.dividedBy(new BigNumber(1e18)); + totalFees = totalFees.dividedBy(new BigNumber(1e18)); + + const _dailyFees = toString(dailyFees); + const _totalFees = toString(totalFees); + + const dailyUserFees = _dailyFees; + const dailyRevenue = _dailyFees; + const dailyProtocolRevenue = "0"; + const dailyHoldersRevenue = _dailyFees; + const dailySupplySideRevenue = "0"; + + const totalUserFees = _totalFees; + const totalRevenue = _totalFees; + const totalProtocolRevenue = "0"; + const totalSupplySideRevenue = "0"; + + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + + return { + timestamp: dayTimestamp, + + dailyFees: _dailyFees ?? "0", + totalFees: _totalFees ?? "0", + + dailyUserFees: dailyUserFees ?? "0", + dailyRevenue: dailyRevenue ?? "0", + dailyProtocolRevenue: dailyProtocolRevenue ?? "0", + dailyHoldersRevenue: dailyHoldersRevenue ?? "0", + dailySupplySideRevenue: dailySupplySideRevenue ?? "0", + totalUserFees: totalUserFees ?? "0", + totalRevenue: totalRevenue ?? "0", + totalProtocolRevenue: totalProtocolRevenue ?? "0", + totalSupplySideRevenue: totalSupplySideRevenue ?? "0", + }; +}; + +const fetchVolumeBlast = async (timestamp: number): Promise => { + let dailyFees = new BigNumber(0); + let totalFees = new BigNumber(0); + + const response_blast: IGraphResponse = await request(endpoint_blast, queryBlast, { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + }); + response_blast.dailyHistories.forEach((data) => { + dailyFees = dailyFees.plus(new BigNumber(data.platformFee)); + }); response_blast.totalHistories.forEach((data) => { totalFees = totalFees.plus(new BigNumber(data.platformFee)); }); dailyFees = dailyFees.dividedBy(new BigNumber(1e18)); totalFees = totalFees.dividedBy(new BigNumber(1e18)); - const _dailyFees = toString(dailyFees); const _totalFees = toString(totalFees); @@ -167,6 +208,10 @@ const adapter: SimpleAdapter = { fetch: fetchVolume, start: 1698796800, }, + [CHAIN.BLAST]: { + fetch: fetchVolumeBlast, + start: 1698796800, + }, }, }; export default adapter; From 7ca380fd1219a76b1897c71bb46de0f1d8e9c293 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 4 Apr 2024 12:36:05 +0000 Subject: [PATCH 0271/1590] fix rev --- fees/ash-perp/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fees/ash-perp/index.ts b/fees/ash-perp/index.ts index c31629608e..16152079d5 100644 --- a/fees/ash-perp/index.ts +++ b/fees/ash-perp/index.ts @@ -28,8 +28,10 @@ const fetch = (chain: Chain) => { }`; const dailyFee = (await request(API_URL, feeQuery)); + const dailyRevenue = Number(dailyFee.trading.getDailyFee.daily_holders_revenue) + Number(dailyFee.trading.getDailyFee.daily_protocol_revenue); return { dailyFees: `${dailyFee.trading.getDailyFee.daily_fees}`, + dailyRevenue: `${dailyRevenue}`, dailyHoldersRevenue: `${dailyFee.trading.getDailyFee.daily_holders_revenue}`, dailyProtocolRevenue: `${dailyFee.trading.getDailyFee.daily_protocol_revenue}`, timestamp, From 3817e6ba7ec3e7e7dabf8d5aa0c83bc1e811943b Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Thu, 4 Apr 2024 21:47:12 +0700 Subject: [PATCH 0272/1590] magpie protocol --- aggregators/magpie/index.ts | 61 +++++++++++++++++++++++++++++++++++++ helpers/env | 1 + helpers/newRequest.ts | 43 ++++++++++++++++++++++++++ 3 files changed, 105 insertions(+) create mode 100644 aggregators/magpie/index.ts create mode 100644 helpers/env create mode 100644 helpers/newRequest.ts diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts new file mode 100644 index 0000000000..2339cd98a3 --- /dev/null +++ b/aggregators/magpie/index.ts @@ -0,0 +1,61 @@ +import { FetchResult, } from "../../adapters/types"; +import fetchUrl from "../../utils/fetchURL" +import { getTimestampAtStartOfDayUTC } from "../../utils/date" +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { fetchURLWithRetry } from "../../helpers/duneRequest"; + +const chainsMap: Record = { + ETHEREUM: "ethereum", + ARBITRUM: "arbitrum", + POLYGON: "polygon", + BNB: "bnb", + AVALANCHE: "avalanche_c", + OPTIMISM: "optimism", + BASE: "base" +}; + +const fetch = + (chain: string) => + async (timestamp: number): Promise => { + const unixTimestamp1 = getTimestampAtStartOfDayUTC(timestamp) + const unixTimestamp2 = getUniqStartOfTodayTimestamp(); + if (unixTimestamp1 < unixTimestamp2) { + const url = `https://script.google.com/macros/s/AKfycbxqWlzQQzpG-KVGVpVLPafPljYkXejEAJ7TpQc8iBaHuvvu5jx5BnRFYEfQu0pqK5j_-Q/exec?timestamp=${timestamp.toString()}` + const data = await fetchUrl(url) + const chainData = data.result.rows.find( + (row: any) => chainsMap[row.chain] === chain + ); + return { + dailyVolume: chainData.dailyVolume, + timestamp: unixTimestamp1, + }; + } else { + const url = `https://api.dune.com/api/v1/query/3587739/results?api_key=eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0` + const data = await fetchUrl(url) + const chainData = data.result.rows.find( + (row: any) => chainsMap[row.chain] === chain + ); + return { + dailyVolume: chainData.dailyVolume, + timestamp: unixTimestamp2, + }; + } + }; + +const adapter: any = { + timetravel: false, + adapter: { + ...Object.values(chainsMap).reduce((acc, chain) => { + return { + ...acc, + [(chainsMap as any)[chain] || chain]: { + fetch: fetch(chain), + start: 1662595200, + }, + }; + }, {}), + }, + isExpensiveAdapter: true, +}; + +export default adapter; diff --git a/helpers/env b/helpers/env new file mode 100644 index 0000000000..efd35cf127 --- /dev/null +++ b/helpers/env @@ -0,0 +1 @@ +MAGPIE_DUNE_API_KEYS=sssas \ No newline at end of file diff --git a/helpers/newRequest.ts b/helpers/newRequest.ts new file mode 100644 index 0000000000..28fe0d2b77 --- /dev/null +++ b/helpers/newRequest.ts @@ -0,0 +1,43 @@ +import retry from "async-retry"; +import fetchURL from "../utils/fetchURL"; +import { getEnv } from "./env"; + +const API_KEYS = getEnv('MAGPIE_DUNE_API_KEYS')?.split(",") ?? []; +type IRequest = { + [key: string]: Promise; +} +const requests: IRequest = {} + +export async function fetchURLWithRetry(url: string) { + if (!requests[url]) + requests[url] = _fetchURLWithRetry(url) + return requests[url] +} + +async function _fetchURLWithRetry(url: string): Promise { + let API_KEY_INDEX = 0; + + return await retry( + async (bail, _attempt: number) => { + const api_key = API_KEYS[API_KEY_INDEX] ?? '' + try { + const response = await fetchURL(`${url}?api_key=${api_key}`); + return response; + } catch (error: any) { + console.log("Dune: Failed to fetch url", `${url}?api_key=${api_key}`); + if (API_KEY_INDEX < API_KEYS.length - 1) { + API_KEY_INDEX++; + } else { + const errorMessage = "Dune: All API keys failed"; + bail(new Error(errorMessage)); + } + delete error.stack; + throw error; + } + }, + { + retries: 3 + API_KEYS.length * 2, + factor: 1, + } + ); +} From d45d5aa2a630d2853cd50918ccbb7e96673b0995 Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Thu, 4 Apr 2024 23:00:53 +0700 Subject: [PATCH 0273/1590] magpie2 --- aggregators/magpie/index.ts | 27 ++++++++++++++++----------- package-lock.json | 10 +++++----- package.json | 4 ++-- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts index 2339cd98a3..86bc76ab79 100644 --- a/aggregators/magpie/index.ts +++ b/aggregators/magpie/index.ts @@ -2,26 +2,30 @@ import { FetchResult, } from "../../adapters/types"; import fetchUrl from "../../utils/fetchURL" import { getTimestampAtStartOfDayUTC } from "../../utils/date" import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import { fetchURLWithRetry } from "../../helpers/duneRequest"; const chainsMap: Record = { - ETHEREUM: "ethereum", - ARBITRUM: "arbitrum", - POLYGON: "polygon", - BNB: "bnb", - AVALANCHE: "avalanche_c", - OPTIMISM: "optimism", - BASE: "base" + ETHEREUM: "ETHEREUM", + ARBITRUM: "ARBITRUM", + POLYGON: "POLYGON", + AVALANCHE: "AVALANCHE", + BNB: "BNB", + OPTIMISM: "OPTIMISM", + BASE: "BASE" }; + + const fetch = (chain: string) => async (timestamp: number): Promise => { const unixTimestamp1 = getTimestampAtStartOfDayUTC(timestamp) const unixTimestamp2 = getUniqStartOfTodayTimestamp(); + console.log(chain, timestamp, unixTimestamp1, unixTimestamp2) if (unixTimestamp1 < unixTimestamp2) { - const url = `https://script.google.com/macros/s/AKfycbxqWlzQQzpG-KVGVpVLPafPljYkXejEAJ7TpQc8iBaHuvvu5jx5BnRFYEfQu0pqK5j_-Q/exec?timestamp=${timestamp.toString()}` - const data = await fetchUrl(url) + // console.log("Method 1") + const url = `https://script.google.com/macros/s/AKfycbxqWlzQQzpG-KVGVpVLPafPljYkXejEAJ7TpQc8iBaHuvvu5jx5BnRFYEfQu0pqK5j_-Q/exec?timestamp=${unixTimestamp1.toString()}` + const data = await fetchUrl(url, 10) + const chainData = data.result.rows.find( (row: any) => chainsMap[row.chain] === chain ); @@ -30,8 +34,9 @@ const fetch = timestamp: unixTimestamp1, }; } else { + // console.log("Method 2") const url = `https://api.dune.com/api/v1/query/3587739/results?api_key=eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0` - const data = await fetchUrl(url) + const data = await fetchUrl(url, 10) const chainData = data.result.rows.find( (row: any) => chainsMap[row.chain] === chain ); diff --git a/package-lock.json b/package-lock.json index 12c7c6b755..31d0fcac11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "async-retry": "^1.3.3", "axios": "^1.6.5", "bignumber.js": "^9.1.0", - "dotenv": "^16.0.3", + "dotenv": "^16.4.5", "ethers": "^6.9.2", "graphql": "^16.6.0", "graphql-request": "5.1.0", @@ -2045,14 +2045,14 @@ } }, "node_modules/dotenv": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", - "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/dottie": { diff --git a/package.json b/package.json index b224fae1d1..24217b555e 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "async-retry": "^1.3.3", "axios": "^1.6.5", "bignumber.js": "^9.1.0", - "dotenv": "^16.0.3", + "dotenv": "^16.4.5", "ethers": "^6.9.2", "graphql": "^16.6.0", "graphql-request": "5.1.0", @@ -37,8 +37,8 @@ "tron-format-address": "^0.1.11" }, "devDependencies": { - "glob": "^10.3.10", "@types/node": "^18.7.23", + "glob": "^10.3.10", "inquirer": "^8.0.0", "inquirer-fuzzy-path": "^2.3.0", "ts-node": "^10.9.1", From c5fec7103011d76a8954f5f7b31641f97c5ad0d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Giuseppe=20Scarf=C3=B2?= Date: Thu, 4 Apr 2024 18:07:07 +0200 Subject: [PATCH 0274/1590] Add Smilee Finance Daily Stats --- options/smilee-finance/index.ts | 82 +++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 options/smilee-finance/index.ts diff --git a/options/smilee-finance/index.ts b/options/smilee-finance/index.ts new file mode 100644 index 0000000000..00e824a003 --- /dev/null +++ b/options/smilee-finance/index.ts @@ -0,0 +1,82 @@ +import { gql, request } from "graphql-request"; +import { Fetch, FetchResultOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import * as sdk from "@defillama/sdk"; + +interface Trade { + notionalUp: string; + notionalDown: string; + premium: string; +} + +interface CumulativeData { + cumulativeVolume: string; + cumulativePremium: string; +} + +const BASE_TOKEN = "0xaf88d065e77c8cc2239327c5edb3a432268e5831"; +const SUBGRAPH_URL = "https://api.studio.thegraph.com/proxy/64770/smilee-finance/version/latest"; + +const tradeQuery = gql` + query trades($timestampFrom: Int!, $timestampTo: Int!) { + trades(where: {timestamp_gt: $timestampFrom, timestamp_lte: $timestampTo}) { + notionalUp + notionalDown + premium + } + }`; + +const cumulativeStatsQuery = gql` + query trades { + protocolStatistics { + cumulativeVolume + cumulativePremium + } + }`; + +const fetch: Fetch = async (timestamp) => { + const timestampFrom = timestamp - 60 * 60 * 24; + + const tradedNotional = new sdk.Balances({ chain: CHAIN.ARBITRUM, timestamp }); + const tradedPremium = new sdk.Balances({ chain: CHAIN.ARBITRUM, timestamp }); + // const totalTradedNotional = new sdk.Balances({ chain: CHAIN.ARBITRUM }); + // const totalTradedPremium = new sdk.Balances({ chain: CHAIN.ARBITRUM }); + + // Fetching daily trades + const tradeResponse = await request(SUBGRAPH_URL, tradeQuery, { + timestampFrom, + timestampTo: timestamp, + }) as { trades: Trade[] }; + + tradeResponse.trades.forEach((trade: Trade) => { + tradedNotional.add('usd', (Number(trade.notionalUp) + Number(trade.notionalDown)) / 1e6, { skipChain: true }); + tradedPremium.add('usd', Number(trade.premium) / 1e6, { skipChain: true }); + }); + + // Fetching cumulative statistics + // const statsResponse = await request(SUBGRAPH_URL, cumulativeStatsQuery) as { protocolStatistics: CumulativeData }; + // totalTradedNotional.add('usd', Number() / 1e6); + // totalTradedPremium.add('usd', Number(statsResponse.protocolStatistics.cumulativePremium) / 1e6); + + // Building fetch result + const fetchResult: FetchResultOptions = { + timestamp: timestampFrom, + dailyNotionalVolume: await tradedNotional.getUSDString(), + dailyPremiumVolume: await tradedPremium.getUSDString(), + // totalNotionalVolume: BigInt.(statsResponse.protocolStatistics.cumulativeVolume) / 1e6, + // totalPremiumVolume: Number(statsResponse.protocolStatistics.cumulativePremium) / 1e6 + }; + + return fetchResult; +}; + +const adapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch, + start: 1710440552 + }, + } +}; + +export default adapter; From 5af415bd14aacff7316f89bb4ea911476ce7aff8 Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Fri, 5 Apr 2024 00:12:59 +0700 Subject: [PATCH 0275/1590] Delete helpers/newRequest.ts --- helpers/newRequest.ts | 43 ------------------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 helpers/newRequest.ts diff --git a/helpers/newRequest.ts b/helpers/newRequest.ts deleted file mode 100644 index 28fe0d2b77..0000000000 --- a/helpers/newRequest.ts +++ /dev/null @@ -1,43 +0,0 @@ -import retry from "async-retry"; -import fetchURL from "../utils/fetchURL"; -import { getEnv } from "./env"; - -const API_KEYS = getEnv('MAGPIE_DUNE_API_KEYS')?.split(",") ?? []; -type IRequest = { - [key: string]: Promise; -} -const requests: IRequest = {} - -export async function fetchURLWithRetry(url: string) { - if (!requests[url]) - requests[url] = _fetchURLWithRetry(url) - return requests[url] -} - -async function _fetchURLWithRetry(url: string): Promise { - let API_KEY_INDEX = 0; - - return await retry( - async (bail, _attempt: number) => { - const api_key = API_KEYS[API_KEY_INDEX] ?? '' - try { - const response = await fetchURL(`${url}?api_key=${api_key}`); - return response; - } catch (error: any) { - console.log("Dune: Failed to fetch url", `${url}?api_key=${api_key}`); - if (API_KEY_INDEX < API_KEYS.length - 1) { - API_KEY_INDEX++; - } else { - const errorMessage = "Dune: All API keys failed"; - bail(new Error(errorMessage)); - } - delete error.stack; - throw error; - } - }, - { - retries: 3 + API_KEYS.length * 2, - factor: 1, - } - ); -} From cfe857f06c75d99390a5090b0e62b67818ea91e9 Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Fri, 5 Apr 2024 00:13:50 +0700 Subject: [PATCH 0276/1590] Delete helpers/env --- helpers/env | 1 - 1 file changed, 1 deletion(-) delete mode 100644 helpers/env diff --git a/helpers/env b/helpers/env deleted file mode 100644 index efd35cf127..0000000000 --- a/helpers/env +++ /dev/null @@ -1 +0,0 @@ -MAGPIE_DUNE_API_KEYS=sssas \ No newline at end of file From 324a9f171b6a3913ce7f382fb5684f207c0c7d9d Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Fri, 5 Apr 2024 00:31:57 +0700 Subject: [PATCH 0277/1590] Update index.ts --- aggregators/magpie/index.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts index 86bc76ab79..a0b9dcc18b 100644 --- a/aggregators/magpie/index.ts +++ b/aggregators/magpie/index.ts @@ -29,10 +29,17 @@ const fetch = const chainData = data.result.rows.find( (row: any) => chainsMap[row.chain] === chain ); + if (chainData === undefined ) { + return { + dailyVolume: 0, + timestamp: unixTimestamp2, + }; + } else { return { dailyVolume: chainData.dailyVolume, - timestamp: unixTimestamp1, + timestamp: unixTimestamp2, }; + } } else { // console.log("Method 2") const url = `https://api.dune.com/api/v1/query/3587739/results?api_key=eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0` @@ -40,11 +47,18 @@ const fetch = const chainData = data.result.rows.find( (row: any) => chainsMap[row.chain] === chain ); + if (chainData === undefined ) { + return { + dailyVolume: 0, + timestamp: unixTimestamp2, + }; + } else { return { dailyVolume: chainData.dailyVolume, timestamp: unixTimestamp2, }; } + } }; const adapter: any = { From a88a2001359590838d250fa9a27a0772e3334325 Mon Sep 17 00:00:00 2001 From: mobydev01 Date: Fri, 5 Apr 2024 14:46:18 +0900 Subject: [PATCH 0278/1590] feat: add moby options volume --- options/moby/index.ts | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 options/moby/index.ts diff --git a/options/moby/index.ts b/options/moby/index.ts new file mode 100644 index 0000000000..06350a1d0b --- /dev/null +++ b/options/moby/index.ts @@ -0,0 +1,52 @@ +import { SimpleAdapter } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; + +interface IMobyVolumeResponse { + daily_notional_volume: string; + daily_premium_volume: string; + total_notional_volume: string; + total_premium_volume: string; +} + +// endTime is in ms +export const mobyVolumeEndpoint = (endTime: number) => { + return `https://ikbdfwmzl6.execute-api.ap-northeast-2.amazonaws.com/default/moby-prod-query?method=feedDefillama&end_time=${endTime}`; +} + +export const moby_adapter: SimpleAdapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetchMobyVolumeData, + start: 1712217600 + }, + }, +}; + +export async function fetchMobyVolumeData( + /** Timestamp representing the end of the 24 hour period */ + timestamp: number +) { + let timestamp_in_ms = timestamp * 1000 + const mobyVolumeData = await getMobyVolumeData(mobyVolumeEndpoint(timestamp_in_ms)); + + const dailyNotionalVolume = Number(mobyVolumeData.daily_notional_volume).toFixed(2); + const dailyPremiumVolume = Number(mobyVolumeData.daily_premium_volume).toFixed(2); + const totalNotionalVolume = Number(mobyVolumeData.total_notional_volume).toFixed(2); + const totalPremiumVolume = Number(mobyVolumeData.total_premium_volume).toFixed(2); + + return { + timestamp, + dailyNotionalVolume, + dailyPremiumVolume, + totalNotionalVolume, + totalPremiumVolume, + }; +} + +async function getMobyVolumeData(endpoint: string): Promise { + const results = await fetchURL(endpoint) + return results.result; +} + +export default moby_adapter; From 6aefb7b8f2e193d46e8234ba89df56b0f8212aad Mon Sep 17 00:00:00 2001 From: mobydev01 Date: Fri, 5 Apr 2024 15:15:40 +0900 Subject: [PATCH 0279/1590] fix: fix endpoint URL --- options/moby/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options/moby/index.ts b/options/moby/index.ts index 06350a1d0b..ae5d00be13 100644 --- a/options/moby/index.ts +++ b/options/moby/index.ts @@ -11,7 +11,7 @@ interface IMobyVolumeResponse { // endTime is in ms export const mobyVolumeEndpoint = (endTime: number) => { - return `https://ikbdfwmzl6.execute-api.ap-northeast-2.amazonaws.com/default/moby-prod-query?method=feedDefillama&end_time=${endTime}`; + return `https://kv6mtyhua5.execute-api.ap-northeast-2.amazonaws.com/prod/getVolumeData?end_time=${endTime}`; } export const moby_adapter: SimpleAdapter = { From 31e722bab0d407b8b0cad6739a20dd14db1e8746 Mon Sep 17 00:00:00 2001 From: rohithkumar0369 Date: Fri, 5 Apr 2024 11:50:24 +0530 Subject: [PATCH 0280/1590] aptos swap removed temporarily --- aggregators/kanalabs/index.ts | 5 +- yarn.lock | 2407 +++++++++++++++++++++++++++++++++ 2 files changed, 2409 insertions(+), 3 deletions(-) create mode 100644 yarn.lock diff --git a/aggregators/kanalabs/index.ts b/aggregators/kanalabs/index.ts index 995f81255f..f7e9bc948e 100644 --- a/aggregators/kanalabs/index.ts +++ b/aggregators/kanalabs/index.ts @@ -80,11 +80,10 @@ const adapter: SimpleAdapter = { }, [CHAIN.APTOS]: { fetch: async (timestamp: number) => { - const swap = await fetch(KanaChainID.aptos)(timestamp); const trade = await fetchDerivatives(KanaChainID.aptos)(timestamp); return { - dailyVolume: (+swap.dailyVolume + +trade.dailyVolume).toString(), - totalVolume: (+swap.totalVolume + +trade.totalVolume).toString(), + dailyVolume: (+trade.dailyVolume).toString(), + totalVolume: (+trade.totalVolume).toString(), timestamp, }; }, diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..5dfdcf064b --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2407 @@ +# 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@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-s3@^3.400.0": + version "3.549.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.549.0.tgz#24e9aab9c90981ff86dd46c333c81daa84214739" + integrity sha512-mogi9u0blkrpol2RPuc3iO73jRhL43/iT5TR80zm3QR+i+tRxAuH2cxvyDvIxkRua296aZ9VNxwg47tM5xsHRQ== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.549.0" + "@aws-sdk/core" "3.549.0" + "@aws-sdk/credential-provider-node" "3.549.0" + "@aws-sdk/middleware-bucket-endpoint" "3.535.0" + "@aws-sdk/middleware-expect-continue" "3.535.0" + "@aws-sdk/middleware-flexible-checksums" "3.535.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-location-constraint" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-sdk-s3" "3.535.0" + "@aws-sdk/middleware-signing" "3.535.0" + "@aws-sdk/middleware-ssec" "3.537.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/signature-v4-multi-region" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@aws-sdk/xml-builder" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.1" + "@smithy/eventstream-serde-browser" "^2.2.0" + "@smithy/eventstream-serde-config-resolver" "^2.2.0" + "@smithy/eventstream-serde-node" "^2.2.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-blob-browser" "^2.2.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/hash-stream-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/md5-js" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.0" + "@smithy/middleware-retry" "^2.3.0" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.0" + "@smithy/util-defaults-mode-node" "^2.3.0" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-stream" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + "@smithy/util-waiter" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.549.0": + version "3.549.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.549.0.tgz#1a0f4ea4d5d34d2bccea5f0f4db27231f9c299a7" + integrity sha512-FbB4A78ILAb8sM4TfBd+3CrQcfZIhe0gtVZNbaxpq5cJZh1K7oZ8vPfKw4do9JWkDUXPLsD9Bwz12f8/JpAb6Q== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.549.0" + "@aws-sdk/core" "3.549.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.1" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.0" + "@smithy/middleware-retry" "^2.3.0" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.0" + "@smithy/util-defaults-mode-node" "^2.3.0" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.549.0": + version "3.549.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.549.0.tgz#fa493de7366946971dc82bd07c181f23d4cb6be9" + integrity sha512-lz+yflOAj5Q263FlCsKpNqttaCb2NPh8jC76gVCqCt7TPxRDBYVaqg0OZYluDaETIDNJi4DwN2Azcck7ilwuPw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.549.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.1" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.0" + "@smithy/middleware-retry" "^2.3.0" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.0" + "@smithy/util-defaults-mode-node" "^2.3.0" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.549.0": + version "3.549.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.549.0.tgz#d8b6034c80f190dded7add83e99d2da209b61699" + integrity sha512-63IreJ598Dzvpb+6sy81KfIX5iQxnrWSEtlyeCdC2GO6gmSQVwJzc9kr5pAC83lHmlZcm/Q3KZr3XBhRQqP0og== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.549.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.1" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.0" + "@smithy/middleware-retry" "^2.3.0" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.0" + "@smithy/util-defaults-mode-node" "^2.3.0" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.549.0": + version "3.549.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.549.0.tgz#1c40b7abbea37479db5e5ac39957f26f0a7e2119" + integrity sha512-jC61OxJn72r/BbuDRCcluiw05Xw9eVLG0CwxQpF3RocxfxyZqlrGYaGecZ8Wy+7g/3sqGRC/Ar5eUhU1YcLx7w== + dependencies: + "@smithy/core" "^1.4.1" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.2.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz#26248e263a8107953d5496cb3760d4e7c877abcf" + integrity sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.535.0.tgz#0a42f6b1a61d927bbce9f4afd25112f486bd05da" + integrity sha512-kdj1wCmOMZ29jSlUskRqN04S6fJ4dvt0Nq9Z32SA6wO7UG8ht6Ot9h/au/eTWJM3E1somZ7D771oK7dQt9b8yw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.549.0": + version "3.549.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.549.0.tgz#261654741e1c75f2adf888e06a443aa60ec32bad" + integrity sha512-k6IIrluZjQpzui5Din8fW3bFFhHaJ64XrsfYx0Ks1mb7xan84dJxmYP3tdDDmLzUeJv5h95ag88taHfjY9rakA== + dependencies: + "@aws-sdk/client-sts" "3.549.0" + "@aws-sdk/credential-provider-env" "3.535.0" + "@aws-sdk/credential-provider-process" "3.535.0" + "@aws-sdk/credential-provider-sso" "3.549.0" + "@aws-sdk/credential-provider-web-identity" "3.549.0" + "@aws-sdk/types" "3.535.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.549.0": + version "3.549.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.549.0.tgz#765b3d00b3771ff35f0aa333c3c3891eff22afb6" + integrity sha512-f3YgalsMuywEAVX4AUm9tojqrBdfpAac0+D320ePzas0Ntbp7ItYu9ceKIhgfzXO3No7P3QK0rCrOxL+ABTn8Q== + dependencies: + "@aws-sdk/credential-provider-env" "3.535.0" + "@aws-sdk/credential-provider-http" "3.535.0" + "@aws-sdk/credential-provider-ini" "3.549.0" + "@aws-sdk/credential-provider-process" "3.535.0" + "@aws-sdk/credential-provider-sso" "3.549.0" + "@aws-sdk/credential-provider-web-identity" "3.549.0" + "@aws-sdk/types" "3.535.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz#ea1e8a38a32e36bbdc3f75eb03352e6eafa0c659" + integrity sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.549.0": + version "3.549.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.549.0.tgz#1aa9f148715230233cb130afd8af3fea0b8947c7" + integrity sha512-BGopRKHs7W8zkoH8qmSHrjudj263kXbhVkAUPxVUz0I28+CZNBgJC/RfVCbOpzmysIQEpwSqvOv1y0k+DQzIJQ== + dependencies: + "@aws-sdk/client-sso" "3.549.0" + "@aws-sdk/token-providers" "3.549.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.549.0": + version "3.549.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.549.0.tgz#5c11204dd00a3d0dfbeb0392a22e429251685826" + integrity sha512-QzclVXPxuwSI7515l34sdvliVq5leroO8P7RQFKRgfyQKO45o1psghierwG3PgV6jlMiv78FIAGJBr/n4qZ7YA== + dependencies: + "@aws-sdk/client-sts" "3.549.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz#8e19f3f9a89d618b3d75782343cb77c80ef6c7c4" + integrity sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-arn-parser" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz#4b95208f26430a7a360da088db61573b93061bcd" + integrity sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.535.0.tgz#278ae5e824ca0b73b80adf88a6aa40138bdd6b4c" + integrity sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.535.0" + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz#d5264f813592f5e77df25e5a14bbb0e6441812db" + integrity sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.535.0.tgz#718c776c118ef78a33117fa353803d079ebcc8fa" + integrity sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz#1a8ffd6c368edd6cb32e1edf7b1dced95c1820ee" + integrity sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz#6aa1e1bd1e84730d58a73021b745e20d4341a92d" + integrity sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.535.0.tgz#3cb76342d91a5e0e94d9a380dbaba9a9ee4849e0" + integrity sha512-/dLG/E3af6ohxkQ5GBHT8tZfuPIg6eItKxCXuulvYj0Tqgf3Mb+xTsvSkxQsJF06RS4sH7Qsg/PnB8ZfrJrXpg== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-arn-parser" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.2.0" + "@smithy/smithy-client" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.535.0.tgz#cf98354e6d48e275689db6a4a513f62bd1555518" + integrity sha512-Rb4sfus1Gc5paRl9JJgymJGsb/i3gJKK/rTuFZICdd1PBBE5osIOHP5CpzWYBtc5LlyZE1a2QoxPMCyG+QUGPw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.537.0": + version "3.537.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.537.0.tgz#c64e4234e38f285e9e2bdf06fdbbb57f6bc848b2" + integrity sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz#4981c64c1eeb6b5c453bce02d060b8c71d44994d" + integrity sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz#20a30fb5fbbe27ab70f2ed16327bae7e367b5cec" + integrity sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.535.0.tgz#6a5413ab087d984794e12b04cac5d64c1e37a53f" + integrity sha512-tqCsEsEj8icW0SAh3NvyhRUq54Gz2pu4NM2tOSrFp7SO55heUUaRLSzYteNZCTOupH//AAaZvbN/UUTO/DrOog== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.549.0": + version "3.549.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.549.0.tgz#0e4aa04d6d50d633c34c78bbed62e3924bc10103" + integrity sha512-rJyeXkXknLukRFGuMQOgKnPBa+kLODJtOqEBf929SpQ96f1I6ytdndmWbB5B/OQN5Fu5DOOQUQqJypDQVl5ibQ== + dependencies: + "@aws-sdk/client-sso-oidc" "3.549.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.535.0", "@aws-sdk/types@^3.222.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" + integrity sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.535.0.tgz#046aafff4438caa3740cebec600989b1e840b934" + integrity sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz#a7fea1d2a5e64623353aaa6ee32dbb86ab9cd3f8" + integrity sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + "@smithy/util-endpoints" "^1.2.0" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz#0200a336fddd47dd6567ce15d01f62be50a315d7" + integrity sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz#d67d72e8b933051620f18ddb1c2be225f79f588f" + integrity sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz#f5c26fb6f3f561d3cf35f96f303b1775afad0a5b" + integrity sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.535.0.tgz#dbe66338f64e283951778f7d07a4afd2d7d09bfd" + integrity sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng== + dependencies: + "@smithy/types" "^2.12.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.51" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.51.tgz#5b06ee07ce9520ce3091619f8b6031aab4861f0c" + integrity sha512-9xph+m9PykFw23K49AUagVLj+iu9mHMUeoZwBmdpVT0GBQNpLadMjCWc9NEgivrguOqMC76MhxZBsZMOTlzXHw== + dependencies: + "@aws-sdk/client-s3" "^3.400.0" + "@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" + +"@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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" + integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" + integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== + dependencies: + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" + integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" + integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/core@^1.4.1": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" + integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" + integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" + integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" + integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" + integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" + integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" + integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== + dependencies: + "@smithy/eventstream-codec" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" + integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" + integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== + dependencies: + "@smithy/chunked-blob-reader" "^2.2.0" + "@smithy/chunked-blob-reader-native" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/hash-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" + integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" + integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" + integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== + dependencies: + "@smithy/types" "^2.12.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/md5-js@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" + integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" + integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^2.5.0", "@smithy/middleware-endpoint@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" + integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== + dependencies: + "@smithy/middleware-serde" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/middleware-retry@^2.3.0", "@smithy/middleware-retry@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" + integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/service-error-classification" "^2.1.5" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" + integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" + integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" + integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" + integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/property-provider@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" + integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" + integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" + integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-uri-escape" "^2.2.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" + integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" + integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== + dependencies: + "@smithy/types" "^2.12.0" + +"@smithy/shared-ini-file-loader@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" + integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.2.1.tgz#9b32571e9785c8f69aa4115517bf2a784f690c4d" + integrity sha512-j5fHgL1iqKTsKJ1mTcw88p0RUcidDu95AWSeZTgiYJb+QcfwWU/UpBnaqiB59FNH5MiAZuSbOBnZlwzeeY2tIw== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-uri-escape" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^2.5.0", "@smithy/smithy-client@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" + integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@smithy/types@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" + integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== + dependencies: + "@smithy/querystring-parser" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-base64@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" + integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" + integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" + integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== + 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-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" + integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" + integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^2.3.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" + integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== + dependencies: + "@smithy/config-resolver" "^2.2.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" + integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" + integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" + integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-retry@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" + integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== + dependencies: + "@smithy/service-error-classification" "^2.1.5" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-stream@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" + integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== + dependencies: + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" + integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" + integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/types" "^2.12.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.12.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.4.tgz#af5921bd75ccdf3a3d8b3fa75bf3d3359268cd11" + integrity sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw== + 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.29" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.29.tgz#e7e9d796c1e195be7e7daf82b4abc50d017fb9db" + integrity sha512-5pAX7ggTmWZdhUrhRWLPf+5oM7F80bcKVCBbr0zwEkTNzTJL2CWQjznpFgHYy6GrzkYi2Yjy7DHKoynFxqPV8g== + 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.11.9" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +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.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + 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.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + 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.11.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af" + integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg== + 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.5.0" + +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.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + 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.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.10.2" + +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.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +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== + +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@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + 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.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +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.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +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== + +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" + +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.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== + 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.11.5" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" + integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== + 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== + +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +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.2" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.2.tgz#f98052f81c40c26ba85382fcb35e7346308542f4" + integrity sha512-bnb7swGANONXCTrVyebpOOZssLwQrVkYX2tcC6qOIvH+P+OhsoMBi7c3GXI5bC+Z4b4tOl+kQy6yeqLCZ1YQAQ== + 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": + 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@^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@^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": + 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@^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@^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.11.1, 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.3.1, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +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.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952" + integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw== + +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== + +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.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" + integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + +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.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +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== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +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 34e598ecfce62a24c520d584ee15498db9186825 Mon Sep 17 00:00:00 2001 From: rohithkumar0369 Date: Fri, 5 Apr 2024 12:10:19 +0530 Subject: [PATCH 0281/1590] daily data only removed , total volume added again for aptos --- aggregators/kanalabs/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aggregators/kanalabs/index.ts b/aggregators/kanalabs/index.ts index f7e9bc948e..2d7acaab29 100644 --- a/aggregators/kanalabs/index.ts +++ b/aggregators/kanalabs/index.ts @@ -80,10 +80,11 @@ const adapter: SimpleAdapter = { }, [CHAIN.APTOS]: { fetch: async (timestamp: number) => { + const swap = await fetch(KanaChainID.aptos)(timestamp); const trade = await fetchDerivatives(KanaChainID.aptos)(timestamp); return { dailyVolume: (+trade.dailyVolume).toString(), - totalVolume: (+trade.totalVolume).toString(), + totalVolume: (+swap.totalVolume + +trade.totalVolume).toString(), timestamp, }; }, From 60283c9a22f5b2019155e80c066b83497e284a84 Mon Sep 17 00:00:00 2001 From: mobydev01 Date: Fri, 5 Apr 2024 15:40:40 +0900 Subject: [PATCH 0282/1590] fix: fix start block --- options/moby/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/options/moby/index.ts b/options/moby/index.ts index ae5d00be13..a529527fda 100644 --- a/options/moby/index.ts +++ b/options/moby/index.ts @@ -18,7 +18,7 @@ export const moby_adapter: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM]: { fetch: fetchMobyVolumeData, - start: 1712217600 + start: 196746973 }, }, }; @@ -46,6 +46,7 @@ export async function fetchMobyVolumeData( async function getMobyVolumeData(endpoint: string): Promise { const results = await fetchURL(endpoint) + return results.result; } From aec20add8d124151432e4b785bfc9cf69a5eca00 Mon Sep 17 00:00:00 2001 From: 0xDosa <90966498+0xDosa@users.noreply.github.com> Date: Fri, 5 Apr 2024 14:04:06 +0530 Subject: [PATCH 0283/1590] feat: add rage derivatives aggregator volume --- aggregator-derivatives/rage-trade/index.ts | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 aggregator-derivatives/rage-trade/index.ts diff --git a/aggregator-derivatives/rage-trade/index.ts b/aggregator-derivatives/rage-trade/index.ts new file mode 100644 index 0000000000..5d69779b01 --- /dev/null +++ b/aggregator-derivatives/rage-trade/index.ts @@ -0,0 +1,44 @@ +import { postURL } from '../../utils/fetchURL' +import { FetchResult, SimpleAdapter } from '../../adapters/types' +import { CHAIN } from '../../helpers/chains' + +const URL = 'https://leaderboard-production.rage.trade' +const endpoint = '/api/stats/defillama' +const arbitrumStartTimestamp = 1701302400 // 2023-11-30 00:00:00 +const optimismStartTimestamp = 1701302400 // 2023-11-30 00:00:00 +const ethereumStartTimestamp = 1710374400 // 2023-11-30 00:00:00 + +const fetch = + (chain: string) => + async (timestamp: number): Promise => { + const { dailyVolume: dailyVolumeE30, totalVolume: totalVolumeE30 } = + await postURL(`${URL}${endpoint}`, { + timestamp, + chain, + }) + + return { + dailyVolume: dailyVolumeE30 ? dailyVolumeE30 / 1e30 : 0, + totalVolume: totalVolumeE30 ? totalVolumeE30 / 1e30 : 0, + timestamp, + } + } + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetch(CHAIN.ARBITRUM), + start: arbitrumStartTimestamp, + }, + [CHAIN.ETHEREUM]: { + fetch: fetch(CHAIN.ETHEREUM), + start: ethereumStartTimestamp, + }, + [CHAIN.OPTIMISM]: { + fetch: fetch(CHAIN.OPTIMISM), + start: optimismStartTimestamp, + }, + }, +} + +export default adapter From 264f14cdd4b5f49904b8832912152dff0f6faaee Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 5 Apr 2024 13:28:13 +0200 Subject: [PATCH 0284/1590] track eesee.io fees --- fees/eesee.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 fees/eesee.ts diff --git a/fees/eesee.ts b/fees/eesee.ts new file mode 100644 index 0000000000..2de0fd2435 --- /dev/null +++ b/fees/eesee.ts @@ -0,0 +1,30 @@ +import { Adapter, FetchV2, } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const abi_event = { + TokenPaymasterOperation: "event TokenPaymasterOperation (address indexed sender, address indexed token, uint256 indexed totalCharge, address oracleAggregator, uint32 priceMarkup, bytes32 userOpHash, uint256 exchangeRate, uint8 priceSource)", +}; + +const paymaster = '0x00000f7365ca6c59a2c93719ad53d567ed49c14c'; + +const adapter: Adapter = { + adapter: { + [CHAIN.BLAST]: { + fetch: (async (options) => { + const dailyFees = options.createBalances(); + const logs = await options.getLogs({ target: paymaster, eventAbi: abi_event.TokenPaymasterOperation, }) + logs.map((tx: any) => { + dailyFees.add(tx.token, tx.totalCharge) + }) + return { dailyFees, } + }) as FetchV2, + start: 0, + meta: { + methodology: {} + } + }, + }, + version: 2, +} + +export default adapter; \ No newline at end of file From d59b639a331d23f315979aba3dc17165ce9092f2 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 5 Apr 2024 12:29:31 +0000 Subject: [PATCH 0285/1590] remvoe yarn lock --- yarn.lock | 2407 ----------------------------------------------------- 1 file changed, 2407 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 5dfdcf064b..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2407 +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@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@^3.400.0": - version "3.549.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.549.0.tgz#24e9aab9c90981ff86dd46c333c81daa84214739" - integrity sha512-mogi9u0blkrpol2RPuc3iO73jRhL43/iT5TR80zm3QR+i+tRxAuH2cxvyDvIxkRua296aZ9VNxwg47tM5xsHRQ== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.549.0" - "@aws-sdk/core" "3.549.0" - "@aws-sdk/credential-provider-node" "3.549.0" - "@aws-sdk/middleware-bucket-endpoint" "3.535.0" - "@aws-sdk/middleware-expect-continue" "3.535.0" - "@aws-sdk/middleware-flexible-checksums" "3.535.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-location-constraint" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-sdk-s3" "3.535.0" - "@aws-sdk/middleware-signing" "3.535.0" - "@aws-sdk/middleware-ssec" "3.537.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/signature-v4-multi-region" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@aws-sdk/xml-builder" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.1" - "@smithy/eventstream-serde-browser" "^2.2.0" - "@smithy/eventstream-serde-config-resolver" "^2.2.0" - "@smithy/eventstream-serde-node" "^2.2.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-blob-browser" "^2.2.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/hash-stream-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/md5-js" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.0" - "@smithy/middleware-retry" "^2.3.0" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.0" - "@smithy/util-defaults-mode-node" "^2.3.0" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-stream" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - "@smithy/util-waiter" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.549.0": - version "3.549.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.549.0.tgz#1a0f4ea4d5d34d2bccea5f0f4db27231f9c299a7" - integrity sha512-FbB4A78ILAb8sM4TfBd+3CrQcfZIhe0gtVZNbaxpq5cJZh1K7oZ8vPfKw4do9JWkDUXPLsD9Bwz12f8/JpAb6Q== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.549.0" - "@aws-sdk/core" "3.549.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.1" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.0" - "@smithy/middleware-retry" "^2.3.0" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.0" - "@smithy/util-defaults-mode-node" "^2.3.0" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.549.0": - version "3.549.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.549.0.tgz#fa493de7366946971dc82bd07c181f23d4cb6be9" - integrity sha512-lz+yflOAj5Q263FlCsKpNqttaCb2NPh8jC76gVCqCt7TPxRDBYVaqg0OZYluDaETIDNJi4DwN2Azcck7ilwuPw== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.549.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.1" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.0" - "@smithy/middleware-retry" "^2.3.0" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.0" - "@smithy/util-defaults-mode-node" "^2.3.0" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.549.0": - version "3.549.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.549.0.tgz#d8b6034c80f190dded7add83e99d2da209b61699" - integrity sha512-63IreJ598Dzvpb+6sy81KfIX5iQxnrWSEtlyeCdC2GO6gmSQVwJzc9kr5pAC83lHmlZcm/Q3KZr3XBhRQqP0og== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.549.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.1" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.0" - "@smithy/middleware-retry" "^2.3.0" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.0" - "@smithy/util-defaults-mode-node" "^2.3.0" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.549.0": - version "3.549.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.549.0.tgz#1c40b7abbea37479db5e5ac39957f26f0a7e2119" - integrity sha512-jC61OxJn72r/BbuDRCcluiw05Xw9eVLG0CwxQpF3RocxfxyZqlrGYaGecZ8Wy+7g/3sqGRC/Ar5eUhU1YcLx7w== - dependencies: - "@smithy/core" "^1.4.1" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.2.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz#26248e263a8107953d5496cb3760d4e7c877abcf" - integrity sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.535.0.tgz#0a42f6b1a61d927bbce9f4afd25112f486bd05da" - integrity sha512-kdj1wCmOMZ29jSlUskRqN04S6fJ4dvt0Nq9Z32SA6wO7UG8ht6Ot9h/au/eTWJM3E1somZ7D771oK7dQt9b8yw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.549.0": - version "3.549.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.549.0.tgz#261654741e1c75f2adf888e06a443aa60ec32bad" - integrity sha512-k6IIrluZjQpzui5Din8fW3bFFhHaJ64XrsfYx0Ks1mb7xan84dJxmYP3tdDDmLzUeJv5h95ag88taHfjY9rakA== - dependencies: - "@aws-sdk/client-sts" "3.549.0" - "@aws-sdk/credential-provider-env" "3.535.0" - "@aws-sdk/credential-provider-process" "3.535.0" - "@aws-sdk/credential-provider-sso" "3.549.0" - "@aws-sdk/credential-provider-web-identity" "3.549.0" - "@aws-sdk/types" "3.535.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.549.0": - version "3.549.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.549.0.tgz#765b3d00b3771ff35f0aa333c3c3891eff22afb6" - integrity sha512-f3YgalsMuywEAVX4AUm9tojqrBdfpAac0+D320ePzas0Ntbp7ItYu9ceKIhgfzXO3No7P3QK0rCrOxL+ABTn8Q== - dependencies: - "@aws-sdk/credential-provider-env" "3.535.0" - "@aws-sdk/credential-provider-http" "3.535.0" - "@aws-sdk/credential-provider-ini" "3.549.0" - "@aws-sdk/credential-provider-process" "3.535.0" - "@aws-sdk/credential-provider-sso" "3.549.0" - "@aws-sdk/credential-provider-web-identity" "3.549.0" - "@aws-sdk/types" "3.535.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz#ea1e8a38a32e36bbdc3f75eb03352e6eafa0c659" - integrity sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.549.0": - version "3.549.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.549.0.tgz#1aa9f148715230233cb130afd8af3fea0b8947c7" - integrity sha512-BGopRKHs7W8zkoH8qmSHrjudj263kXbhVkAUPxVUz0I28+CZNBgJC/RfVCbOpzmysIQEpwSqvOv1y0k+DQzIJQ== - dependencies: - "@aws-sdk/client-sso" "3.549.0" - "@aws-sdk/token-providers" "3.549.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.549.0": - version "3.549.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.549.0.tgz#5c11204dd00a3d0dfbeb0392a22e429251685826" - integrity sha512-QzclVXPxuwSI7515l34sdvliVq5leroO8P7RQFKRgfyQKO45o1psghierwG3PgV6jlMiv78FIAGJBr/n4qZ7YA== - dependencies: - "@aws-sdk/client-sts" "3.549.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz#8e19f3f9a89d618b3d75782343cb77c80ef6c7c4" - integrity sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-arn-parser" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz#4b95208f26430a7a360da088db61573b93061bcd" - integrity sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.535.0.tgz#278ae5e824ca0b73b80adf88a6aa40138bdd6b4c" - integrity sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.535.0" - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz#d5264f813592f5e77df25e5a14bbb0e6441812db" - integrity sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.535.0.tgz#718c776c118ef78a33117fa353803d079ebcc8fa" - integrity sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz#1a8ffd6c368edd6cb32e1edf7b1dced95c1820ee" - integrity sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz#6aa1e1bd1e84730d58a73021b745e20d4341a92d" - integrity sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.535.0.tgz#3cb76342d91a5e0e94d9a380dbaba9a9ee4849e0" - integrity sha512-/dLG/E3af6ohxkQ5GBHT8tZfuPIg6eItKxCXuulvYj0Tqgf3Mb+xTsvSkxQsJF06RS4sH7Qsg/PnB8ZfrJrXpg== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-arn-parser" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.2.0" - "@smithy/smithy-client" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.535.0.tgz#cf98354e6d48e275689db6a4a513f62bd1555518" - integrity sha512-Rb4sfus1Gc5paRl9JJgymJGsb/i3gJKK/rTuFZICdd1PBBE5osIOHP5CpzWYBtc5LlyZE1a2QoxPMCyG+QUGPw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.537.0": - version "3.537.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.537.0.tgz#c64e4234e38f285e9e2bdf06fdbbb57f6bc848b2" - integrity sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz#4981c64c1eeb6b5c453bce02d060b8c71d44994d" - integrity sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz#20a30fb5fbbe27ab70f2ed16327bae7e367b5cec" - integrity sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.535.0.tgz#6a5413ab087d984794e12b04cac5d64c1e37a53f" - integrity sha512-tqCsEsEj8icW0SAh3NvyhRUq54Gz2pu4NM2tOSrFp7SO55heUUaRLSzYteNZCTOupH//AAaZvbN/UUTO/DrOog== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.549.0": - version "3.549.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.549.0.tgz#0e4aa04d6d50d633c34c78bbed62e3924bc10103" - integrity sha512-rJyeXkXknLukRFGuMQOgKnPBa+kLODJtOqEBf929SpQ96f1I6ytdndmWbB5B/OQN5Fu5DOOQUQqJypDQVl5ibQ== - dependencies: - "@aws-sdk/client-sso-oidc" "3.549.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.535.0", "@aws-sdk/types@^3.222.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" - integrity sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-arn-parser@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.535.0.tgz#046aafff4438caa3740cebec600989b1e840b934" - integrity sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-endpoints@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz#a7fea1d2a5e64623353aaa6ee32dbb86ab9cd3f8" - integrity sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - "@smithy/util-endpoints" "^1.2.0" - tslib "^2.6.2" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz#0200a336fddd47dd6567ce15d01f62be50a315d7" - integrity sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-browser@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz#d67d72e8b933051620f18ddb1c2be225f79f588f" - integrity sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz#f5c26fb6f3f561d3cf35f96f303b1775afad0a5b" - integrity sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.535.0.tgz#dbe66338f64e283951778f7d07a4afd2d7d09bfd" - integrity sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng== - dependencies: - "@smithy/types" "^2.12.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.51" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.51.tgz#5b06ee07ce9520ce3091619f8b6031aab4861f0c" - integrity sha512-9xph+m9PykFw23K49AUagVLj+iu9mHMUeoZwBmdpVT0GBQNpLadMjCWc9NEgivrguOqMC76MhxZBsZMOTlzXHw== - dependencies: - "@aws-sdk/client-s3" "^3.400.0" - "@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" - -"@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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" - integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader-native@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" - integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== - dependencies: - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" - integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" - integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/core@^1.4.1": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" - integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" - integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" - integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" - integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" - integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" - integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" - integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== - dependencies: - "@smithy/eventstream-codec" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" - integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" - integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== - dependencies: - "@smithy/chunked-blob-reader" "^2.2.0" - "@smithy/chunked-blob-reader-native" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/hash-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" - integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" - integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" - integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== - dependencies: - "@smithy/types" "^2.12.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/md5-js@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" - integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" - integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^2.5.0", "@smithy/middleware-endpoint@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" - integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== - dependencies: - "@smithy/middleware-serde" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/middleware-retry@^2.3.0", "@smithy/middleware-retry@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" - integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/service-error-classification" "^2.1.5" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" - integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" - integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" - integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" - integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/property-provider@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" - integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" - integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" - integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-uri-escape" "^2.2.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" - integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" - integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== - dependencies: - "@smithy/types" "^2.12.0" - -"@smithy/shared-ini-file-loader@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" - integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.2.1.tgz#9b32571e9785c8f69aa4115517bf2a784f690c4d" - integrity sha512-j5fHgL1iqKTsKJ1mTcw88p0RUcidDu95AWSeZTgiYJb+QcfwWU/UpBnaqiB59FNH5MiAZuSbOBnZlwzeeY2tIw== - dependencies: - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-uri-escape" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^2.5.0", "@smithy/smithy-client@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" - integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@smithy/types@^2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" - integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" - integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== - dependencies: - "@smithy/querystring-parser" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-base64@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" - integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== - dependencies: - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" - integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" - integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== - 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-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" - integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" - integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^2.3.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" - integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== - dependencies: - "@smithy/config-resolver" "^2.2.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" - integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" - integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" - integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-retry@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" - integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== - dependencies: - "@smithy/service-error-classification" "^2.1.5" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-stream@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" - integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== - dependencies: - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" - integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" - integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/types" "^2.12.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.12.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.4.tgz#af5921bd75ccdf3a3d8b3fa75bf3d3359268cd11" - integrity sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw== - 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.29" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.29.tgz#e7e9d796c1e195be7e7daf82b4abc50d017fb9db" - integrity sha512-5pAX7ggTmWZdhUrhRWLPf+5oM7F80bcKVCBbr0zwEkTNzTJL2CWQjznpFgHYy6GrzkYi2Yjy7DHKoynFxqPV8g== - 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.11.9" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" - integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -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.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - 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.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - 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.11.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af" - integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg== - 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.5.0" - -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.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - 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.3.12" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" - integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.6" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.10.2" - -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.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -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== - -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@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - 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.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -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.1: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -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== - -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" - -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.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" - integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== - 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.11.5" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" - integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== - 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== - -semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -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.2" - resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.2.tgz#f98052f81c40c26ba85382fcb35e7346308542f4" - integrity sha512-bnb7swGANONXCTrVyebpOOZssLwQrVkYX2tcC6qOIvH+P+OhsoMBi7c3GXI5bC+Z4b4tOl+kQy6yeqLCZ1YQAQ== - 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": - 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@^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@^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": - 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@^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@^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.11.1, 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.3.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -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.4.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952" - integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw== - -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== - -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.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -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.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -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== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -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 ccddcc655407fc74f1b2aece74da6dafd5798d06 Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Fri, 5 Apr 2024 19:33:22 +0700 Subject: [PATCH 0286/1590] Delete aggregators/magpie/index.ts --- aggregators/magpie/index.ts | 80 ------------------------------------- 1 file changed, 80 deletions(-) delete mode 100644 aggregators/magpie/index.ts diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts deleted file mode 100644 index a0b9dcc18b..0000000000 --- a/aggregators/magpie/index.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { FetchResult, } from "../../adapters/types"; -import fetchUrl from "../../utils/fetchURL" -import { getTimestampAtStartOfDayUTC } from "../../utils/date" -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; - -const chainsMap: Record = { - ETHEREUM: "ETHEREUM", - ARBITRUM: "ARBITRUM", - POLYGON: "POLYGON", - AVALANCHE: "AVALANCHE", - BNB: "BNB", - OPTIMISM: "OPTIMISM", - BASE: "BASE" -}; - - - -const fetch = - (chain: string) => - async (timestamp: number): Promise => { - const unixTimestamp1 = getTimestampAtStartOfDayUTC(timestamp) - const unixTimestamp2 = getUniqStartOfTodayTimestamp(); - console.log(chain, timestamp, unixTimestamp1, unixTimestamp2) - if (unixTimestamp1 < unixTimestamp2) { - // console.log("Method 1") - const url = `https://script.google.com/macros/s/AKfycbxqWlzQQzpG-KVGVpVLPafPljYkXejEAJ7TpQc8iBaHuvvu5jx5BnRFYEfQu0pqK5j_-Q/exec?timestamp=${unixTimestamp1.toString()}` - const data = await fetchUrl(url, 10) - - const chainData = data.result.rows.find( - (row: any) => chainsMap[row.chain] === chain - ); - if (chainData === undefined ) { - return { - dailyVolume: 0, - timestamp: unixTimestamp2, - }; - } else { - return { - dailyVolume: chainData.dailyVolume, - timestamp: unixTimestamp2, - }; - } - } else { - // console.log("Method 2") - const url = `https://api.dune.com/api/v1/query/3587739/results?api_key=eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0` - const data = await fetchUrl(url, 10) - const chainData = data.result.rows.find( - (row: any) => chainsMap[row.chain] === chain - ); - if (chainData === undefined ) { - return { - dailyVolume: 0, - timestamp: unixTimestamp2, - }; - } else { - return { - dailyVolume: chainData.dailyVolume, - timestamp: unixTimestamp2, - }; - } - } - }; - -const adapter: any = { - timetravel: false, - adapter: { - ...Object.values(chainsMap).reduce((acc, chain) => { - return { - ...acc, - [(chainsMap as any)[chain] || chain]: { - fetch: fetch(chain), - start: 1662595200, - }, - }; - }, {}), - }, - isExpensiveAdapter: true, -}; - -export default adapter; From 64ac204a424ee22bf6bc2e2def43374ade93608f Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Fri, 5 Apr 2024 19:38:02 +0700 Subject: [PATCH 0287/1590] Revert "Delete aggregators/magpie/index.ts" This reverts commit ccddcc655407fc74f1b2aece74da6dafd5798d06. --- aggregators/magpie/index.ts | 80 +++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 aggregators/magpie/index.ts diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts new file mode 100644 index 0000000000..a0b9dcc18b --- /dev/null +++ b/aggregators/magpie/index.ts @@ -0,0 +1,80 @@ +import { FetchResult, } from "../../adapters/types"; +import fetchUrl from "../../utils/fetchURL" +import { getTimestampAtStartOfDayUTC } from "../../utils/date" +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const chainsMap: Record = { + ETHEREUM: "ETHEREUM", + ARBITRUM: "ARBITRUM", + POLYGON: "POLYGON", + AVALANCHE: "AVALANCHE", + BNB: "BNB", + OPTIMISM: "OPTIMISM", + BASE: "BASE" +}; + + + +const fetch = + (chain: string) => + async (timestamp: number): Promise => { + const unixTimestamp1 = getTimestampAtStartOfDayUTC(timestamp) + const unixTimestamp2 = getUniqStartOfTodayTimestamp(); + console.log(chain, timestamp, unixTimestamp1, unixTimestamp2) + if (unixTimestamp1 < unixTimestamp2) { + // console.log("Method 1") + const url = `https://script.google.com/macros/s/AKfycbxqWlzQQzpG-KVGVpVLPafPljYkXejEAJ7TpQc8iBaHuvvu5jx5BnRFYEfQu0pqK5j_-Q/exec?timestamp=${unixTimestamp1.toString()}` + const data = await fetchUrl(url, 10) + + const chainData = data.result.rows.find( + (row: any) => chainsMap[row.chain] === chain + ); + if (chainData === undefined ) { + return { + dailyVolume: 0, + timestamp: unixTimestamp2, + }; + } else { + return { + dailyVolume: chainData.dailyVolume, + timestamp: unixTimestamp2, + }; + } + } else { + // console.log("Method 2") + const url = `https://api.dune.com/api/v1/query/3587739/results?api_key=eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0` + const data = await fetchUrl(url, 10) + const chainData = data.result.rows.find( + (row: any) => chainsMap[row.chain] === chain + ); + if (chainData === undefined ) { + return { + dailyVolume: 0, + timestamp: unixTimestamp2, + }; + } else { + return { + dailyVolume: chainData.dailyVolume, + timestamp: unixTimestamp2, + }; + } + } + }; + +const adapter: any = { + timetravel: false, + adapter: { + ...Object.values(chainsMap).reduce((acc, chain) => { + return { + ...acc, + [(chainsMap as any)[chain] || chain]: { + fetch: fetch(chain), + start: 1662595200, + }, + }; + }, {}), + }, + isExpensiveAdapter: true, +}; + +export default adapter; From e2a99693ee2a1bc29ced065527f817df320f5056 Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Fri, 5 Apr 2024 19:39:53 +0700 Subject: [PATCH 0288/1590] Delete package-lock.json --- package-lock.json | 3658 --------------------------------------------- 1 file changed, 3658 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 31d0fcac11..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,3658 +0,0 @@ -{ - "name": "adapters", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "adapters", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@defillama/sdk": "^5.0.10", - "@supercharge/promise-pool": "^3.1.0", - "@types/async-retry": "^1.4.8", - "async-retry": "^1.3.3", - "axios": "^1.6.5", - "bignumber.js": "^9.1.0", - "dotenv": "^16.4.5", - "ethers": "^6.9.2", - "graphql": "^16.6.0", - "graphql-request": "5.1.0", - "pg": "^8.11.3", - "sequelize": "^6.36.0", - "tron-format-address": "^0.1.11" - }, - "devDependencies": { - "@types/node": "^18.7.23", - "glob": "^10.3.10", - "inquirer": "^8.0.0", - "inquirer-fuzzy-path": "^2.3.0", - "ts-node": "^10.9.1", - "typescript": "^5.0.0" - } - }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", - "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==" - }, - "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/crc32c": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32c/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha1-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", - "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", - "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", - "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.499.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.499.0.tgz", - "integrity": "sha512-4ssQqde/iY5fTJbWuFPzPuECtihdCAA9tfluv6fXYCJS3wMLf9x21qp6b7fIbUf6vjOJ2edmYd+DXk+0CMnTFg==", - "dependencies": { - "@aws-crypto/sha1-browser": "3.0.0", - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.499.0", - "@aws-sdk/core": "3.496.0", - "@aws-sdk/credential-provider-node": "3.499.0", - "@aws-sdk/middleware-bucket-endpoint": "3.496.0", - "@aws-sdk/middleware-expect-continue": "3.496.0", - "@aws-sdk/middleware-flexible-checksums": "3.496.0", - "@aws-sdk/middleware-host-header": "3.496.0", - "@aws-sdk/middleware-location-constraint": "3.496.0", - "@aws-sdk/middleware-logger": "3.496.0", - "@aws-sdk/middleware-recursion-detection": "3.496.0", - "@aws-sdk/middleware-sdk-s3": "3.499.0", - "@aws-sdk/middleware-signing": "3.496.0", - "@aws-sdk/middleware-ssec": "3.498.0", - "@aws-sdk/middleware-user-agent": "3.496.0", - "@aws-sdk/region-config-resolver": "3.496.0", - "@aws-sdk/signature-v4-multi-region": "3.499.0", - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-endpoints": "3.496.0", - "@aws-sdk/util-user-agent-browser": "3.496.0", - "@aws-sdk/util-user-agent-node": "3.496.0", - "@aws-sdk/xml-builder": "3.496.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/eventstream-serde-browser": "^2.1.1", - "@smithy/eventstream-serde-config-resolver": "^2.1.1", - "@smithy/eventstream-serde-node": "^2.1.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-blob-browser": "^2.1.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/hash-stream-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/md5-js": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-stream": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "@smithy/util-waiter": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.496.0.tgz", - "integrity": "sha512-fuaMuxKg7CMUsP9l3kxYWCOxFsBjdA0xj5nlikaDm1661/gB4KkAiGqRY8LsQkpNXvXU8Nj+f7oCFADFyGYzyw==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.496.0", - "@aws-sdk/middleware-host-header": "3.496.0", - "@aws-sdk/middleware-logger": "3.496.0", - "@aws-sdk/middleware-recursion-detection": "3.496.0", - "@aws-sdk/middleware-user-agent": "3.496.0", - "@aws-sdk/region-config-resolver": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-endpoints": "3.496.0", - "@aws-sdk/util-user-agent-browser": "3.496.0", - "@aws-sdk/util-user-agent-node": "3.496.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.499.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.499.0.tgz", - "integrity": "sha512-Eyj9STw2DXMtXL5V/v0HYHO6+JjGPi257M5IYyxwqlvRchq6jbOsedobfxclB/gBUyBRtZdnyAIS8uCKjb4kpA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.496.0", - "@aws-sdk/credential-provider-node": "3.499.0", - "@aws-sdk/middleware-host-header": "3.496.0", - "@aws-sdk/middleware-logger": "3.496.0", - "@aws-sdk/middleware-recursion-detection": "3.496.0", - "@aws-sdk/middleware-user-agent": "3.496.0", - "@aws-sdk/region-config-resolver": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-endpoints": "3.496.0", - "@aws-sdk/util-user-agent-browser": "3.496.0", - "@aws-sdk/util-user-agent-node": "3.496.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.496.0.tgz", - "integrity": "sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A==", - "dependencies": { - "@smithy/core": "^1.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.496.0.tgz", - "integrity": "sha512-lukQMJ8SWWP5RqkRNOHi/H+WMhRvSWa3Fc5Jf/VP6xHiPLfF1XafcvthtV91e0VwPCiseI+HqChrcGq8pvnxHw==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.496.0.tgz", - "integrity": "sha512-2nD1jp1sIwcQaWK1y/9ruQOkW16RUxZpzgjbW/gnK3iiUXwx+/FNQWxshud+GTSx3Q4x6eIhqsbjtP4VVPPuUA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.496.0", - "@aws-sdk/credential-provider-process": "3.496.0", - "@aws-sdk/credential-provider-sso": "3.496.0", - "@aws-sdk/credential-provider-web-identity": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.499.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.499.0.tgz", - "integrity": "sha512-EsiSevVmcVSMIq7D9siSH/XVc5I0vMntg1rx6KQdng1Fq8X/RBL5t9wSWEwOl7KFo5HlEsWrLWIpo1WHuzIL/w==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.496.0", - "@aws-sdk/credential-provider-ini": "3.496.0", - "@aws-sdk/credential-provider-process": "3.496.0", - "@aws-sdk/credential-provider-sso": "3.496.0", - "@aws-sdk/credential-provider-web-identity": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.496.0.tgz", - "integrity": "sha512-/YZscCTGOKVmGr916Th4XF8Sz6JDtZ/n2loHG9exok9iy/qIbACsTRNLP9zexPxhPoue/oZqecY5xbVljfY34A==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.496.0.tgz", - "integrity": "sha512-eP7GxpT2QYubSDG7uk1GJW4eNymZCq65IxDyEFCXOP/kfqkxriCY+iVEFG6/Mo3LxvgrgHXU4jxrCAXMAWN43g==", - "dependencies": { - "@aws-sdk/client-sso": "3.496.0", - "@aws-sdk/token-providers": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.496.0.tgz", - "integrity": "sha512-IbP+qLlvJSpNPj+zW6TtFuLRTK5Tf0hW+2pom4vFyi5YSH4pn8UOC136UdewX8vhXGS9BJQ5zBDMasIyl5VeGQ==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.496.0.tgz", - "integrity": "sha512-B+ilBMSs3+LJuo2bl2KB8GFdu+8PPVtYEWtwhNkmnaU8iMisgMBp5uuM8sUDvJX7I4iSF0WbgnhguX4cJqfAew==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-arn-parser": "3.495.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.496.0.tgz", - "integrity": "sha512-+exo5DVc+BeDus2iI6Fz1thefHGDXxUhHZ+4VHQ6HkStMy3Y22HugyEGHSQZmtRL86Hjr7dFbEWFsC47a2ItGA==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.496.0.tgz", - "integrity": "sha512-yQIWfjEMvgsAJ7ku224vXDjXPD+f9zfKZFialJva8VUlEr7hQp4CQ0rxV3YThSaixKEDDs5k6kOjWAd2BPGr2A==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.496.0", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.496.0.tgz", - "integrity": "sha512-jUdPpSJeqCYXf6hSjfwsfHway7peIV8Vz51w/BN91bF4vB/bYwAC5o9/iJiK/EoByp5asxA8fg9wFOyGjzdbLg==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.496.0.tgz", - "integrity": "sha512-i4ocJ2Zs86OtPREbB18InFukhqg2qtBxb5gywv79IHDPVmpOYE4m/3v3yGUrkjfF2GTlUL0k5FskNNqw41yfng==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.496.0.tgz", - "integrity": "sha512-EwMVSY6iBMeGbVnvwdaFl/ClMS/YWtxCAo+bcEtgk8ltRuo7qgbJem8Km/fvWC1vdWvIbe4ArdJ8iGzq62ffAw==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.496.0.tgz", - "integrity": "sha512-+IuOcFsfqg2WAnaEzH6KhVbicqCxtOq9w3DH2jwTpddRlCx2Kqf6wCzg8luhHRGyjBZdsbIS+OXwyMevoppawA==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.499.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.499.0.tgz", - "integrity": "sha512-thTb47U1hYHk5ei+yO0D0aehbgQXeAcgvyyxOID9/HDuRfWuTvKdclWh/goIeDfvSS87VBukEAjnCa5JYBwzug==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-arn-parser": "3.495.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.496.0.tgz", - "integrity": "sha512-Oq73Brs4IConvWnRlh8jM1V7LHoTw9SVQklu/QW2FPlNrB3B8fuTdWHHYIWv7ybw1bykXoCY99v865Mmq/Or/g==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.498.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.498.0.tgz", - "integrity": "sha512-sWujXgzeTqMZzj/pRYEnnEbSzhBosqw9DXHOY1Mg2igI9NEfGlB7lPARp6aKmCaYlP3Bcj2X86vKCqF53mbyig==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.496.0.tgz", - "integrity": "sha512-+iMtRxFk0GmFWNUF4ilxylOQd9PZdR4ZC9jkcPIh1PZlvKtpCyFywKlk5RRZKklSoJ/CttcqwhMvOXTNbWm/0w==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-endpoints": "3.496.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.496.0.tgz", - "integrity": "sha512-URrNVOPHPgEDm6QFu6lDC2cUFs+Jx23mA3jEwCvoKlXiEY/ZoWjH8wlX3OMUlLrF1qoUTuD03jjrJzF6zoCgug==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.499.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.499.0.tgz", - "integrity": "sha512-8HSFnZErRm7lAfk+Epxrf4QNdQEamg1CnbLybtKQQEjmvxLuXYvj16KlpYEZIwEENOMEvnCqMc7syTPkmjVhJA==", - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.499.0", - "@aws-sdk/types": "3.496.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.496.0.tgz", - "integrity": "sha512-fyi8RcObEa1jNETJdc2H6q9VHrrdKCj/b6+fbLvymb7mUVRd0aWUn+24SNUImnSOnrwYnwaMfyyEC388X4MbFQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.496.0", - "@aws-sdk/middleware-logger": "3.496.0", - "@aws-sdk/middleware-recursion-detection": "3.496.0", - "@aws-sdk/middleware-user-agent": "3.496.0", - "@aws-sdk/region-config-resolver": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-endpoints": "3.496.0", - "@aws-sdk/util-user-agent-browser": "3.496.0", - "@aws-sdk/util-user-agent-node": "3.496.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.496.0.tgz", - "integrity": "sha512-umkGadK4QuNQaMoDICMm7NKRI/mYSXiyPjcn3d53BhsuArYU/52CebGQKdt4At7SwwsiVJZw9RNBHyN5Mm0HVw==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.495.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz", - "integrity": "sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.496.0.tgz", - "integrity": "sha512-1QzOiWHi383ZwqSi/R2KgKCd7M+6DxkxI5acqLPm8mvDRDP2jRjrnVaC0g9/tlttWousGEemDUWStwrD2mVYSw==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/types": "^2.9.1", - "@smithy/util-endpoints": "^1.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.495.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", - "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.496.0.tgz", - "integrity": "sha512-4j2spN+h0I0qfSMsGvJXTfQBu1e18rPdekKvzsGJxhaAE1tNgUfUT4nbvc5uVn0sNjZmirskmJ3kfbzVOrqIFg==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/types": "^2.9.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.496.0.tgz", - "integrity": "sha512-h0Ax0jlDc7UIo3KoSI4C4tVLBFoiAdx3+DhTVfgLS7x93d41dMlziPoBX2RgdcFn37qnzw6AQKTVTMwDbRCGpg==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.496.0.tgz", - "integrity": "sha512-GvEjh537IIeOw1ZkZuB37sV12u+ipS5Z1dwjEC/HAvhl5ac23ULtTr1/n+U1gLNN+BAKSWjKiQ2ksj8DiUzeyw==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@defillama/sdk": { - "version": "5.0.49", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.49.tgz", - "integrity": "sha512-CggIAtMd5lwOpIPoGPkTMqS2KYVIectlt1cOHUc/O/tcBOQ9XSy2OfF4JI8tIMuAJQSvYlPnEtxpFkUwuFt27A==", - "dependencies": { - "@aws-sdk/client-s3": "^3.400.0", - "@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" - } - }, - "node_modules/@defillama/sdk/node_modules/@supercharge/promise-pool": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-2.4.0.tgz", - "integrity": "sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@smithy/abort-controller": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.1.tgz", - "integrity": "sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz", - "integrity": "sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ==", - "dependencies": { - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.1.tgz", - "integrity": "sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ==", - "dependencies": { - "@smithy/util-base64": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/config-resolver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.1.tgz", - "integrity": "sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.1.tgz", - "integrity": "sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/credential-provider-imds": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz", - "integrity": "sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-codec": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz", - "integrity": "sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.9.1", - "@smithy/util-hex-encoding": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.1.tgz", - "integrity": "sha512-JvEdCmGlZUay5VtlT8/kdR6FlvqTDUiJecMjXsBb0+k1H/qc9ME5n2XKPo8q/MZwEIA1GmGgYMokKGjVvMiDow==", - "dependencies": { - "@smithy/eventstream-serde-universal": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.1.tgz", - "integrity": "sha512-EqNqXYp3+dk//NmW3NAgQr9bEQ7fsu/CcxQmTiq07JlaIcne/CBWpMZETyXm9w5LXkhduBsdXdlMscfDUDn2fA==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.1.tgz", - "integrity": "sha512-LF882q/aFidFNDX7uROAGxq3H0B7rjyPkV6QDn6/KDQ+CG7AFkRccjxRf1xqajq/Pe4bMGGr+VKAaoF6lELIQw==", - "dependencies": { - "@smithy/eventstream-serde-universal": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.1.tgz", - "integrity": "sha512-LR0mMT+XIYTxk4k2fIxEA1BPtW3685QlqufUEUAX1AJcfFfxNDKEvuCRZbO8ntJb10DrIFVJR9vb0MhDCi0sAQ==", - "dependencies": { - "@smithy/eventstream-codec": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/fetch-http-handler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz", - "integrity": "sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==", - "dependencies": { - "@smithy/protocol-http": "^3.1.1", - "@smithy/querystring-builder": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-base64": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/hash-blob-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.1.tgz", - "integrity": "sha512-jizu1+2PAUjiGIfRtlPEU8Yo6zn+d78ti/ZHDesdf1SUn2BuZW433JlPoCOLH3dBoEEvTgLvQ8tUGSoTTALA+A==", - "dependencies": { - "@smithy/chunked-blob-reader": "^2.1.1", - "@smithy/chunked-blob-reader-native": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/hash-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.1.tgz", - "integrity": "sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==", - "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/hash-stream-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.1.1.tgz", - "integrity": "sha512-VgDaKcfCy0iHcmtAZgZ3Yw9g37Gkn2JsQiMtFQXUh8Wmo3GfNgDwLOtdhJ272pOT7DStzpe9cNr+eV5Au8KfQA==", - "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/invalid-dependency": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz", - "integrity": "sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/is-array-buffer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz", - "integrity": "sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/md5-js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.1.1.tgz", - "integrity": "sha512-L3MbIYBIdLlT+MWTYrdVSv/dow1+6iZ1Ad7xS0OHxTTs17d753ZcpOV4Ro7M7tRAVWML/sg2IAp/zzCb6aAttg==", - "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/middleware-content-length": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz", - "integrity": "sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==", - "dependencies": { - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-endpoint": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz", - "integrity": "sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==", - "dependencies": { - "@smithy/middleware-serde": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-retry": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz", - "integrity": "sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/service-error-classification": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-serde": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz", - "integrity": "sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-stack": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz", - "integrity": "sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/node-config-provider": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz", - "integrity": "sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==", - "dependencies": { - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/node-http-handler": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz", - "integrity": "sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==", - "dependencies": { - "@smithy/abort-controller": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/querystring-builder": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/property-provider": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.1.tgz", - "integrity": "sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.1.1.tgz", - "integrity": "sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/querystring-builder": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz", - "integrity": "sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==", - "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-uri-escape": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/querystring-parser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz", - "integrity": "sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/service-error-classification": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz", - "integrity": "sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==", - "dependencies": { - "@smithy/types": "^2.9.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz", - "integrity": "sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/signature-v4": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.1.tgz", - "integrity": "sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==", - "dependencies": { - "@smithy/eventstream-codec": "^2.1.1", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-uri-escape": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.3.1.tgz", - "integrity": "sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-stream": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.9.1.tgz", - "integrity": "sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/url-parser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.1.tgz", - "integrity": "sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==", - "dependencies": { - "@smithy/querystring-parser": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/util-base64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.1.1.tgz", - "integrity": "sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==", - "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-body-length-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz", - "integrity": "sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==", - "dependencies": { - "tslib": "^2.5.0" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz", - "integrity": "sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-buffer-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz", - "integrity": "sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==", - "dependencies": { - "@smithy/is-array-buffer": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-config-provider": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz", - "integrity": "sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz", - "integrity": "sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==", - "dependencies": { - "@smithy/property-provider": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz", - "integrity": "sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==", - "dependencies": { - "@smithy/config-resolver": "^2.1.1", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-endpoints": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz", - "integrity": "sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@smithy/util-hex-encoding": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz", - "integrity": "sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.1.tgz", - "integrity": "sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==", - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-retry": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.1.tgz", - "integrity": "sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==", - "dependencies": { - "@smithy/service-error-classification": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@smithy/util-stream": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.1.tgz", - "integrity": "sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-uri-escape": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz", - "integrity": "sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.1.1.tgz", - "integrity": "sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==", - "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-waiter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.1.1.tgz", - "integrity": "sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA==", - "dependencies": { - "@smithy/abort-controller": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@supercharge/promise-pool": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-3.1.0.tgz", - "integrity": "sha512-gB3NukbIcYzRtPoE6dx9svQYPodxvnfQlaaQd8N/z87E6WaMfRE7o5HwB+LZ+KeM0nsNAq1n4TmBtfz1VCUR+Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/async-retry": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@types/async-retry/-/async-retry-1.4.8.tgz", - "integrity": "sha512-Qup/B5PWLe86yI5I3av6ePGaeQrIHNKCwbsQotD6aHQ6YkHsMUxVZkZsmx/Ry3VZQ6uysHwTjQ7666+k6UjVJA==", - "dependencies": { - "@types/retry": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" - }, - "node_modules/@types/node": { - "version": "18.19.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.10.tgz", - "integrity": "sha512-IZD8kAM02AW1HRDTPOlz3npFava678pr8Ie9Vp8uRhBROXAv8MXT2pCnGZZAKYdromsNQLHQcfWQ6EOatVLtqA==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/retry": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", - "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==" - }, - "node_modules/@types/validator": { - "version": "13.11.9", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.9.tgz", - "integrity": "sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw==" - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "dependencies": { - "retry": "0.13.1" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", - "dependencies": { - "follow-redirects": "^1.15.4", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "engines": { - "node": "*" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dottie": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", - "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ethers": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.10.0.tgz", - "integrity": "sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@adraffy/ens-normalize": "1.10.0", - "@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.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/ethers/node_modules/@types/node": { - "version": "18.15.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" - }, - "node_modules/ethers/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extract-files": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", - "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", - "engines": { - "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/jaydenseric" - } - }, - "node_modules/fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fuzzy": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", - "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graphql": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" - } - }, - "node_modules/graphql-request": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-5.1.0.tgz", - "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" - }, - "peerDependencies": { - "graphql": "14 - 16" - } - }, - "node_modules/graphql-request/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/inflection": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", - "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", - "engines": [ - "node >= 0.4.0" - ] - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer-autocomplete-prompt": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz", - "integrity": "sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "figures": "^3.2.0", - "run-async": "^2.4.0", - "rxjs": "^6.6.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "inquirer": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/inquirer-fuzzy-path": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/inquirer-fuzzy-path/-/inquirer-fuzzy-path-2.3.0.tgz", - "integrity": "sha512-zfHC/97GSkxKKM7IctZM22x1sVi+FYBh9oaHTmI7Er/GKFpNykUgtviTmqqpiFQs5yJoSowxbT0PHy6N+H+QRg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "node_modules/inquirer-fuzzy-path/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/inquirer-fuzzy-path/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/inquirer/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, - "node_modules/inquirer-fuzzy-path/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-fuzzy-path/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "engines": { - "node": "*" - } - }, - "node_modules/moment-timezone": { - "version": "0.5.45", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", - "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", - "dependencies": { - "moment": "^2.29.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/pg": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", - "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", - "dependencies": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.6.2", - "pg-pool": "^3.6.1", - "pg-protocol": "^1.6.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" - }, - "engines": { - "node": ">= 8.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.1.1" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-cloudflare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", - "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", - "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", - "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "dependencies": { - "split2": "^4.1.0" - } - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/retry-as-promised": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", - "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sequelize": { - "version": "6.36.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.36.0.tgz", - "integrity": "sha512-PqOa11EHwA/zLmGDU4aynbsavbHJUlgRvFuC/2cA4LhOuV6NHKcQ0IXB+hNdFrGT3rULmvc4kdIwnfCNsrECMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/sequelize" - } - ], - "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" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependenciesMeta": { - "ibm_db": { - "optional": true - }, - "mariadb": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "oracledb": { - "optional": true - }, - "pg": { - "optional": true - }, - "pg-hstore": { - "optional": true - }, - "snowflake-sdk": { - "optional": true - }, - "sqlite3": { - "optional": true - }, - "tedious": { - "optional": true - } - } - }, - "node_modules/sequelize-pool": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", - "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/toposort-class": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tron-format-address": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/tron-format-address/-/tron-format-address-0.1.11.tgz", - "integrity": "sha512-Jx2i3R1yXrEMQsfc2jueAI71ivnySzdeva6SiSM/pddwj8TK7PVABSP6s/iYcTRI63GxJEgGMmOJXNNKoBmbQw==" - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "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" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/validator": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", - "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wkx": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", - "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} From 47fb564a9f03d862ca17b080b2b43f741db677d1 Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Fri, 5 Apr 2024 19:40:05 +0700 Subject: [PATCH 0289/1590] Delete package.json --- package.json | 47 ----------------------------------------------- 1 file changed, 47 deletions(-) delete mode 100644 package.json diff --git a/package.json b/package.json deleted file mode 100644 index 24217b555e..0000000000 --- a/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "adapters", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "update-submodules": "git submodule update --init --recursive --remote --merge", - "test": "yarn run update-submodules && ts-node --transpile-only cli/testAdapter.ts", - "ts-check": "yarn run update-submodules && tsc --project tsconfig.json", - "ts-check-cli": "yarn run update-submodules && tsc --project tsconfig.cli.json", - "use-token-labels": "node helpers/useTokenLabels.js", - "interactive": "node cli/interactive.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/DefiLlama/adapters.git" - }, - "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/DefiLlama/adapters/issues" - }, - "homepage": "https://github.com/DefiLlama/adapters#readme", - "dependencies": { - "@defillama/sdk": "^5.0.10", - "@supercharge/promise-pool": "^3.1.0", - "@types/async-retry": "^1.4.8", - "async-retry": "^1.3.3", - "axios": "^1.6.5", - "bignumber.js": "^9.1.0", - "dotenv": "^16.4.5", - "ethers": "^6.9.2", - "graphql": "^16.6.0", - "graphql-request": "5.1.0", - "pg": "^8.11.3", - "sequelize": "^6.36.0", - "tron-format-address": "^0.1.11" - }, - "devDependencies": { - "@types/node": "^18.7.23", - "glob": "^10.3.10", - "inquirer": "^8.0.0", - "inquirer-fuzzy-path": "^2.3.0", - "ts-node": "^10.9.1", - "typescript": "^5.0.0" - } -} From cb228d7f00333967bd33bc2ddeddb41b1fd25234 Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Fri, 5 Apr 2024 19:42:10 +0700 Subject: [PATCH 0290/1590] Revert "Delete package-lock.json" This reverts commit e2a99693ee2a1bc29ced065527f817df320f5056. --- package-lock.json | 3658 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3658 insertions(+) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..31d0fcac11 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3658 @@ +{ + "name": "adapters", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "adapters", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@defillama/sdk": "^5.0.10", + "@supercharge/promise-pool": "^3.1.0", + "@types/async-retry": "^1.4.8", + "async-retry": "^1.3.3", + "axios": "^1.6.5", + "bignumber.js": "^9.1.0", + "dotenv": "^16.4.5", + "ethers": "^6.9.2", + "graphql": "^16.6.0", + "graphql-request": "5.1.0", + "pg": "^8.11.3", + "sequelize": "^6.36.0", + "tron-format-address": "^0.1.11" + }, + "devDependencies": { + "@types/node": "^18.7.23", + "glob": "^10.3.10", + "inquirer": "^8.0.0", + "inquirer-fuzzy-path": "^2.3.0", + "ts-node": "^10.9.1", + "typescript": "^5.0.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", + "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==" + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32c/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.499.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.499.0.tgz", + "integrity": "sha512-4ssQqde/iY5fTJbWuFPzPuECtihdCAA9tfluv6fXYCJS3wMLf9x21qp6b7fIbUf6vjOJ2edmYd+DXk+0CMnTFg==", + "dependencies": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.499.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/credential-provider-node": "3.499.0", + "@aws-sdk/middleware-bucket-endpoint": "3.496.0", + "@aws-sdk/middleware-expect-continue": "3.496.0", + "@aws-sdk/middleware-flexible-checksums": "3.496.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-location-constraint": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-sdk-s3": "3.499.0", + "@aws-sdk/middleware-signing": "3.496.0", + "@aws-sdk/middleware-ssec": "3.498.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/signature-v4-multi-region": "3.499.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", + "@aws-sdk/xml-builder": "3.496.0", + "@smithy/config-resolver": "^2.1.1", + "@smithy/core": "^1.3.1", + "@smithy/eventstream-serde-browser": "^2.1.1", + "@smithy/eventstream-serde-config-resolver": "^2.1.1", + "@smithy/eventstream-serde-node": "^2.1.1", + "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/hash-blob-browser": "^2.1.1", + "@smithy/hash-node": "^2.1.1", + "@smithy/hash-stream-node": "^2.1.1", + "@smithy/invalid-dependency": "^2.1.1", + "@smithy/md5-js": "^2.1.1", + "@smithy/middleware-content-length": "^2.1.1", + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-retry": "^2.1.1", + "@smithy/middleware-serde": "^2.1.1", + "@smithy/middleware-stack": "^2.1.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/node-http-handler": "^2.3.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.1", + "@smithy/util-defaults-mode-node": "^2.1.1", + "@smithy/util-endpoints": "^1.1.1", + "@smithy/util-retry": "^2.1.1", + "@smithy/util-stream": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", + "@smithy/util-waiter": "^2.1.1", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.496.0.tgz", + "integrity": "sha512-fuaMuxKg7CMUsP9l3kxYWCOxFsBjdA0xj5nlikaDm1661/gB4KkAiGqRY8LsQkpNXvXU8Nj+f7oCFADFyGYzyw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", + "@smithy/config-resolver": "^2.1.1", + "@smithy/core": "^1.3.1", + "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/hash-node": "^2.1.1", + "@smithy/invalid-dependency": "^2.1.1", + "@smithy/middleware-content-length": "^2.1.1", + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-retry": "^2.1.1", + "@smithy/middleware-serde": "^2.1.1", + "@smithy/middleware-stack": "^2.1.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/node-http-handler": "^2.3.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.1", + "@smithy/util-defaults-mode-node": "^2.1.1", + "@smithy/util-endpoints": "^1.1.1", + "@smithy/util-retry": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.499.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.499.0.tgz", + "integrity": "sha512-Eyj9STw2DXMtXL5V/v0HYHO6+JjGPi257M5IYyxwqlvRchq6jbOsedobfxclB/gBUyBRtZdnyAIS8uCKjb4kpA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/credential-provider-node": "3.499.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", + "@smithy/config-resolver": "^2.1.1", + "@smithy/core": "^1.3.1", + "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/hash-node": "^2.1.1", + "@smithy/invalid-dependency": "^2.1.1", + "@smithy/middleware-content-length": "^2.1.1", + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-retry": "^2.1.1", + "@smithy/middleware-serde": "^2.1.1", + "@smithy/middleware-stack": "^2.1.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/node-http-handler": "^2.3.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.1", + "@smithy/util-defaults-mode-node": "^2.1.1", + "@smithy/util-endpoints": "^1.1.1", + "@smithy/util-middleware": "^2.1.1", + "@smithy/util-retry": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.496.0.tgz", + "integrity": "sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A==", + "dependencies": { + "@smithy/core": "^1.3.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/signature-v4": "^2.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.496.0.tgz", + "integrity": "sha512-lukQMJ8SWWP5RqkRNOHi/H+WMhRvSWa3Fc5Jf/VP6xHiPLfF1XafcvthtV91e0VwPCiseI+HqChrcGq8pvnxHw==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/property-provider": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.496.0.tgz", + "integrity": "sha512-2nD1jp1sIwcQaWK1y/9ruQOkW16RUxZpzgjbW/gnK3iiUXwx+/FNQWxshud+GTSx3Q4x6eIhqsbjtP4VVPPuUA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.496.0", + "@aws-sdk/credential-provider-process": "3.496.0", + "@aws-sdk/credential-provider-sso": "3.496.0", + "@aws-sdk/credential-provider-web-identity": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@smithy/credential-provider-imds": "^2.2.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.499.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.499.0.tgz", + "integrity": "sha512-EsiSevVmcVSMIq7D9siSH/XVc5I0vMntg1rx6KQdng1Fq8X/RBL5t9wSWEwOl7KFo5HlEsWrLWIpo1WHuzIL/w==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.496.0", + "@aws-sdk/credential-provider-ini": "3.496.0", + "@aws-sdk/credential-provider-process": "3.496.0", + "@aws-sdk/credential-provider-sso": "3.496.0", + "@aws-sdk/credential-provider-web-identity": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@smithy/credential-provider-imds": "^2.2.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.496.0.tgz", + "integrity": "sha512-/YZscCTGOKVmGr916Th4XF8Sz6JDtZ/n2loHG9exok9iy/qIbACsTRNLP9zexPxhPoue/oZqecY5xbVljfY34A==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/property-provider": "^2.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.496.0.tgz", + "integrity": "sha512-eP7GxpT2QYubSDG7uk1GJW4eNymZCq65IxDyEFCXOP/kfqkxriCY+iVEFG6/Mo3LxvgrgHXU4jxrCAXMAWN43g==", + "dependencies": { + "@aws-sdk/client-sso": "3.496.0", + "@aws-sdk/token-providers": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@smithy/property-provider": "^2.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.496.0.tgz", + "integrity": "sha512-IbP+qLlvJSpNPj+zW6TtFuLRTK5Tf0hW+2pom4vFyi5YSH4pn8UOC136UdewX8vhXGS9BJQ5zBDMasIyl5VeGQ==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/property-provider": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.496.0.tgz", + "integrity": "sha512-B+ilBMSs3+LJuo2bl2KB8GFdu+8PPVtYEWtwhNkmnaU8iMisgMBp5uuM8sUDvJX7I4iSF0WbgnhguX4cJqfAew==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-arn-parser": "3.495.0", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", + "@smithy/util-config-provider": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.496.0.tgz", + "integrity": "sha512-+exo5DVc+BeDus2iI6Fz1thefHGDXxUhHZ+4VHQ6HkStMy3Y22HugyEGHSQZmtRL86Hjr7dFbEWFsC47a2ItGA==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.496.0.tgz", + "integrity": "sha512-yQIWfjEMvgsAJ7ku224vXDjXPD+f9zfKZFialJva8VUlEr7hQp4CQ0rxV3YThSaixKEDDs5k6kOjWAd2BPGr2A==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.496.0", + "@smithy/is-array-buffer": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.496.0.tgz", + "integrity": "sha512-jUdPpSJeqCYXf6hSjfwsfHway7peIV8Vz51w/BN91bF4vB/bYwAC5o9/iJiK/EoByp5asxA8fg9wFOyGjzdbLg==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.496.0.tgz", + "integrity": "sha512-i4ocJ2Zs86OtPREbB18InFukhqg2qtBxb5gywv79IHDPVmpOYE4m/3v3yGUrkjfF2GTlUL0k5FskNNqw41yfng==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.496.0.tgz", + "integrity": "sha512-EwMVSY6iBMeGbVnvwdaFl/ClMS/YWtxCAo+bcEtgk8ltRuo7qgbJem8Km/fvWC1vdWvIbe4ArdJ8iGzq62ffAw==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.496.0.tgz", + "integrity": "sha512-+IuOcFsfqg2WAnaEzH6KhVbicqCxtOq9w3DH2jwTpddRlCx2Kqf6wCzg8luhHRGyjBZdsbIS+OXwyMevoppawA==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.499.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.499.0.tgz", + "integrity": "sha512-thTb47U1hYHk5ei+yO0D0aehbgQXeAcgvyyxOID9/HDuRfWuTvKdclWh/goIeDfvSS87VBukEAjnCa5JYBwzug==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-arn-parser": "3.495.0", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/signature-v4": "^2.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/util-config-provider": "^2.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.496.0.tgz", + "integrity": "sha512-Oq73Brs4IConvWnRlh8jM1V7LHoTw9SVQklu/QW2FPlNrB3B8fuTdWHHYIWv7ybw1bykXoCY99v865Mmq/Or/g==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/property-provider": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/signature-v4": "^2.1.1", + "@smithy/types": "^2.9.1", + "@smithy/util-middleware": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.498.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.498.0.tgz", + "integrity": "sha512-sWujXgzeTqMZzj/pRYEnnEbSzhBosqw9DXHOY1Mg2igI9NEfGlB7lPARp6aKmCaYlP3Bcj2X86vKCqF53mbyig==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.496.0.tgz", + "integrity": "sha512-+iMtRxFk0GmFWNUF4ilxylOQd9PZdR4ZC9jkcPIh1PZlvKtpCyFywKlk5RRZKklSoJ/CttcqwhMvOXTNbWm/0w==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.496.0.tgz", + "integrity": "sha512-URrNVOPHPgEDm6QFu6lDC2cUFs+Jx23mA3jEwCvoKlXiEY/ZoWjH8wlX3OMUlLrF1qoUTuD03jjrJzF6zoCgug==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/types": "^2.9.1", + "@smithy/util-config-provider": "^2.2.1", + "@smithy/util-middleware": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.499.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.499.0.tgz", + "integrity": "sha512-8HSFnZErRm7lAfk+Epxrf4QNdQEamg1CnbLybtKQQEjmvxLuXYvj16KlpYEZIwEENOMEvnCqMc7syTPkmjVhJA==", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.499.0", + "@aws-sdk/types": "3.496.0", + "@smithy/protocol-http": "^3.1.1", + "@smithy/signature-v4": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.496.0.tgz", + "integrity": "sha512-fyi8RcObEa1jNETJdc2H6q9VHrrdKCj/b6+fbLvymb7mUVRd0aWUn+24SNUImnSOnrwYnwaMfyyEC388X4MbFQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", + "@smithy/config-resolver": "^2.1.1", + "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/hash-node": "^2.1.1", + "@smithy/invalid-dependency": "^2.1.1", + "@smithy/middleware-content-length": "^2.1.1", + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-retry": "^2.1.1", + "@smithy/middleware-serde": "^2.1.1", + "@smithy/middleware-stack": "^2.1.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/node-http-handler": "^2.3.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.1", + "@smithy/util-defaults-mode-node": "^2.1.1", + "@smithy/util-endpoints": "^1.1.1", + "@smithy/util-retry": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.496.0.tgz", + "integrity": "sha512-umkGadK4QuNQaMoDICMm7NKRI/mYSXiyPjcn3d53BhsuArYU/52CebGQKdt4At7SwwsiVJZw9RNBHyN5Mm0HVw==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz", + "integrity": "sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.496.0.tgz", + "integrity": "sha512-1QzOiWHi383ZwqSi/R2KgKCd7M+6DxkxI5acqLPm8mvDRDP2jRjrnVaC0g9/tlttWousGEemDUWStwrD2mVYSw==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/types": "^2.9.1", + "@smithy/util-endpoints": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", + "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.496.0.tgz", + "integrity": "sha512-4j2spN+h0I0qfSMsGvJXTfQBu1e18rPdekKvzsGJxhaAE1tNgUfUT4nbvc5uVn0sNjZmirskmJ3kfbzVOrqIFg==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/types": "^2.9.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.496.0.tgz", + "integrity": "sha512-h0Ax0jlDc7UIo3KoSI4C4tVLBFoiAdx3+DhTVfgLS7x93d41dMlziPoBX2RgdcFn37qnzw6AQKTVTMwDbRCGpg==", + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.496.0.tgz", + "integrity": "sha512-GvEjh537IIeOw1ZkZuB37sV12u+ipS5Z1dwjEC/HAvhl5ac23ULtTr1/n+U1gLNN+BAKSWjKiQ2ksj8DiUzeyw==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@defillama/sdk": { + "version": "5.0.49", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.49.tgz", + "integrity": "sha512-CggIAtMd5lwOpIPoGPkTMqS2KYVIectlt1cOHUc/O/tcBOQ9XSy2OfF4JI8tIMuAJQSvYlPnEtxpFkUwuFt27A==", + "dependencies": { + "@aws-sdk/client-s3": "^3.400.0", + "@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" + } + }, + "node_modules/@defillama/sdk/node_modules/@supercharge/promise-pool": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-2.4.0.tgz", + "integrity": "sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "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" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz", + "integrity": "sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.1.tgz", + "integrity": "sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ==", + "dependencies": { + "@smithy/util-base64": "^2.1.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.1.tgz", + "integrity": "sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==", + "dependencies": { + "@smithy/node-config-provider": "^2.2.1", + "@smithy/types": "^2.9.1", + "@smithy/util-config-provider": "^2.2.1", + "@smithy/util-middleware": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.1.tgz", + "integrity": "sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-retry": "^2.1.1", + "@smithy/middleware-serde": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/util-middleware": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz", + "integrity": "sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==", + "dependencies": { + "@smithy/node-config-provider": "^2.2.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz", + "integrity": "sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.9.1", + "@smithy/util-hex-encoding": "^2.1.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.1.tgz", + "integrity": "sha512-JvEdCmGlZUay5VtlT8/kdR6FlvqTDUiJecMjXsBb0+k1H/qc9ME5n2XKPo8q/MZwEIA1GmGgYMokKGjVvMiDow==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.1.tgz", + "integrity": "sha512-EqNqXYp3+dk//NmW3NAgQr9bEQ7fsu/CcxQmTiq07JlaIcne/CBWpMZETyXm9w5LXkhduBsdXdlMscfDUDn2fA==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.1.tgz", + "integrity": "sha512-LF882q/aFidFNDX7uROAGxq3H0B7rjyPkV6QDn6/KDQ+CG7AFkRccjxRf1xqajq/Pe4bMGGr+VKAaoF6lELIQw==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.1.tgz", + "integrity": "sha512-LR0mMT+XIYTxk4k2fIxEA1BPtW3685QlqufUEUAX1AJcfFfxNDKEvuCRZbO8ntJb10DrIFVJR9vb0MhDCi0sAQ==", + "dependencies": { + "@smithy/eventstream-codec": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz", + "integrity": "sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==", + "dependencies": { + "@smithy/protocol-http": "^3.1.1", + "@smithy/querystring-builder": "^2.1.1", + "@smithy/types": "^2.9.1", + "@smithy/util-base64": "^2.1.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.1.tgz", + "integrity": "sha512-jizu1+2PAUjiGIfRtlPEU8Yo6zn+d78ti/ZHDesdf1SUn2BuZW433JlPoCOLH3dBoEEvTgLvQ8tUGSoTTALA+A==", + "dependencies": { + "@smithy/chunked-blob-reader": "^2.1.1", + "@smithy/chunked-blob-reader-native": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.1.tgz", + "integrity": "sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==", + "dependencies": { + "@smithy/types": "^2.9.1", + "@smithy/util-buffer-from": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.1.1.tgz", + "integrity": "sha512-VgDaKcfCy0iHcmtAZgZ3Yw9g37Gkn2JsQiMtFQXUh8Wmo3GfNgDwLOtdhJ272pOT7DStzpe9cNr+eV5Au8KfQA==", + "dependencies": { + "@smithy/types": "^2.9.1", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz", + "integrity": "sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz", + "integrity": "sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.1.1.tgz", + "integrity": "sha512-L3MbIYBIdLlT+MWTYrdVSv/dow1+6iZ1Ad7xS0OHxTTs17d753ZcpOV4Ro7M7tRAVWML/sg2IAp/zzCb6aAttg==", + "dependencies": { + "@smithy/types": "^2.9.1", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz", + "integrity": "sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==", + "dependencies": { + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz", + "integrity": "sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==", + "dependencies": { + "@smithy/middleware-serde": "^2.1.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "@smithy/util-middleware": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz", + "integrity": "sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==", + "dependencies": { + "@smithy/node-config-provider": "^2.2.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/service-error-classification": "^2.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/util-middleware": "^2.1.1", + "@smithy/util-retry": "^2.1.1", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz", + "integrity": "sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz", + "integrity": "sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz", + "integrity": "sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==", + "dependencies": { + "@smithy/property-provider": "^2.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz", + "integrity": "sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==", + "dependencies": { + "@smithy/abort-controller": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/querystring-builder": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.1.tgz", + "integrity": "sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.1.1.tgz", + "integrity": "sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz", + "integrity": "sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==", + "dependencies": { + "@smithy/types": "^2.9.1", + "@smithy/util-uri-escape": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz", + "integrity": "sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz", + "integrity": "sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==", + "dependencies": { + "@smithy/types": "^2.9.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz", + "integrity": "sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.1.tgz", + "integrity": "sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==", + "dependencies": { + "@smithy/eventstream-codec": "^2.1.1", + "@smithy/is-array-buffer": "^2.1.1", + "@smithy/types": "^2.9.1", + "@smithy/util-hex-encoding": "^2.1.1", + "@smithy/util-middleware": "^2.1.1", + "@smithy/util-uri-escape": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.3.1.tgz", + "integrity": "sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-stack": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", + "@smithy/util-stream": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.9.1.tgz", + "integrity": "sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.1.tgz", + "integrity": "sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==", + "dependencies": { + "@smithy/querystring-parser": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.1.1.tgz", + "integrity": "sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==", + "dependencies": { + "@smithy/util-buffer-from": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz", + "integrity": "sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz", + "integrity": "sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz", + "integrity": "sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==", + "dependencies": { + "@smithy/is-array-buffer": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz", + "integrity": "sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz", + "integrity": "sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==", + "dependencies": { + "@smithy/property-provider": "^2.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz", + "integrity": "sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==", + "dependencies": { + "@smithy/config-resolver": "^2.1.1", + "@smithy/credential-provider-imds": "^2.2.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz", + "integrity": "sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==", + "dependencies": { + "@smithy/node-config-provider": "^2.2.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz", + "integrity": "sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.1.tgz", + "integrity": "sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==", + "dependencies": { + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.1.tgz", + "integrity": "sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==", + "dependencies": { + "@smithy/service-error-classification": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.1.tgz", + "integrity": "sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/node-http-handler": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-buffer-from": "^2.1.1", + "@smithy/util-hex-encoding": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz", + "integrity": "sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.1.1.tgz", + "integrity": "sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.1.1.tgz", + "integrity": "sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA==", + "dependencies": { + "@smithy/abort-controller": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@supercharge/promise-pool": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-3.1.0.tgz", + "integrity": "sha512-gB3NukbIcYzRtPoE6dx9svQYPodxvnfQlaaQd8N/z87E6WaMfRE7o5HwB+LZ+KeM0nsNAq1n4TmBtfz1VCUR+Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/async-retry": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@types/async-retry/-/async-retry-1.4.8.tgz", + "integrity": "sha512-Qup/B5PWLe86yI5I3av6ePGaeQrIHNKCwbsQotD6aHQ6YkHsMUxVZkZsmx/Ry3VZQ6uysHwTjQ7666+k6UjVJA==", + "dependencies": { + "@types/retry": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, + "node_modules/@types/node": { + "version": "18.19.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.10.tgz", + "integrity": "sha512-IZD8kAM02AW1HRDTPOlz3npFava678pr8Ie9Vp8uRhBROXAv8MXT2pCnGZZAKYdromsNQLHQcfWQ6EOatVLtqA==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/retry": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", + "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==" + }, + "node_modules/@types/validator": { + "version": "13.11.9", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.9.tgz", + "integrity": "sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw==" + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dottie": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", + "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ethers": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.10.0.tgz", + "integrity": "sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@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.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "node_modules/ethers/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-files": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", + "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", + "engines": { + "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/jaydenseric" + } + }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-request": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-5.1.0.tgz", + "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" + }, + "peerDependencies": { + "graphql": "14 - 16" + } + }, + "node_modules/graphql-request/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inflection": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", + "engines": [ + "node >= 0.4.0" + ] + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer-autocomplete-prompt": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz", + "integrity": "sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "figures": "^3.2.0", + "run-async": "^2.4.0", + "rxjs": "^6.6.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "inquirer": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/inquirer-autocomplete-prompt/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/inquirer-fuzzy-path": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/inquirer-fuzzy-path/-/inquirer-fuzzy-path-2.3.0.tgz", + "integrity": "sha512-zfHC/97GSkxKKM7IctZM22x1sVi+FYBh9oaHTmI7Er/GKFpNykUgtviTmqqpiFQs5yJoSowxbT0PHy6N+H+QRg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "node_modules/inquirer-fuzzy-path/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/inquirer-fuzzy-path/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "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" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/inquirer/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "dev": true + }, + "node_modules/inquirer-fuzzy-path/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-fuzzy-path/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/pg": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", + "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.6.2", + "pg-pool": "^3.6.1", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/retry-as-promised": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", + "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sequelize": { + "version": "6.36.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.36.0.tgz", + "integrity": "sha512-PqOa11EHwA/zLmGDU4aynbsavbHJUlgRvFuC/2cA4LhOuV6NHKcQ0IXB+hNdFrGT3rULmvc4kdIwnfCNsrECMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/sequelize" + } + ], + "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" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependenciesMeta": { + "ibm_db": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-hstore": { + "optional": true + }, + "snowflake-sdk": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tron-format-address": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/tron-format-address/-/tron-format-address-0.1.11.tgz", + "integrity": "sha512-Jx2i3R1yXrEMQsfc2jueAI71ivnySzdeva6SiSM/pddwj8TK7PVABSP6s/iYcTRI63GxJEgGMmOJXNNKoBmbQw==" + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "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" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} From ee83dfe86f32c6f18016eca786d890e183f5e875 Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Fri, 5 Apr 2024 19:42:13 +0700 Subject: [PATCH 0291/1590] Revert "Delete package.json" This reverts commit 47fb564a9f03d862ca17b080b2b43f741db677d1. --- package.json | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 0000000000..24217b555e --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "name": "adapters", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "update-submodules": "git submodule update --init --recursive --remote --merge", + "test": "yarn run update-submodules && ts-node --transpile-only cli/testAdapter.ts", + "ts-check": "yarn run update-submodules && tsc --project tsconfig.json", + "ts-check-cli": "yarn run update-submodules && tsc --project tsconfig.cli.json", + "use-token-labels": "node helpers/useTokenLabels.js", + "interactive": "node cli/interactive.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/DefiLlama/adapters.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/DefiLlama/adapters/issues" + }, + "homepage": "https://github.com/DefiLlama/adapters#readme", + "dependencies": { + "@defillama/sdk": "^5.0.10", + "@supercharge/promise-pool": "^3.1.0", + "@types/async-retry": "^1.4.8", + "async-retry": "^1.3.3", + "axios": "^1.6.5", + "bignumber.js": "^9.1.0", + "dotenv": "^16.4.5", + "ethers": "^6.9.2", + "graphql": "^16.6.0", + "graphql-request": "5.1.0", + "pg": "^8.11.3", + "sequelize": "^6.36.0", + "tron-format-address": "^0.1.11" + }, + "devDependencies": { + "@types/node": "^18.7.23", + "glob": "^10.3.10", + "inquirer": "^8.0.0", + "inquirer-fuzzy-path": "^2.3.0", + "ts-node": "^10.9.1", + "typescript": "^5.0.0" + } +} From d1699320302765a6e88901d2f9525088f7ec5a17 Mon Sep 17 00:00:00 2001 From: Dongminh1997 <31241137+Dongminh1997@users.noreply.github.com> Date: Fri, 5 Apr 2024 19:48:08 +0700 Subject: [PATCH 0292/1590] revert config --- package-lock.json | 10 +++++----- package.json | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 31d0fcac11..12c7c6b755 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "async-retry": "^1.3.3", "axios": "^1.6.5", "bignumber.js": "^9.1.0", - "dotenv": "^16.4.5", + "dotenv": "^16.0.3", "ethers": "^6.9.2", "graphql": "^16.6.0", "graphql-request": "5.1.0", @@ -2045,14 +2045,14 @@ } }, "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "version": "16.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", + "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", "engines": { "node": ">=12" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, "node_modules/dottie": { diff --git a/package.json b/package.json index 24217b555e..b224fae1d1 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "async-retry": "^1.3.3", "axios": "^1.6.5", "bignumber.js": "^9.1.0", - "dotenv": "^16.4.5", + "dotenv": "^16.0.3", "ethers": "^6.9.2", "graphql": "^16.6.0", "graphql-request": "5.1.0", @@ -37,8 +37,8 @@ "tron-format-address": "^0.1.11" }, "devDependencies": { - "@types/node": "^18.7.23", "glob": "^10.3.10", + "@types/node": "^18.7.23", "inquirer": "^8.0.0", "inquirer-fuzzy-path": "^2.3.0", "ts-node": "^10.9.1", From 3384b69b2e6d4d6bca29fc4e3a4d09f90e16f068 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 5 Apr 2024 13:38:09 +0000 Subject: [PATCH 0293/1590] add new chain --- fees/gamma.ts | 12 ++++++++++++ helpers/chains.ts | 1 + 2 files changed, 13 insertions(+) diff --git a/fees/gamma.ts b/fees/gamma.ts index 08cadadec7..a05976f466 100644 --- a/fees/gamma.ts +++ b/fees/gamma.ts @@ -121,6 +121,18 @@ const adapter: SimpleAdapter = { fetch: fetchFees("metis"), start: 1682121600, }, + [CHAIN.IMX]: { + fetch: fetchFees("immutable_zkevm"), + start: 1682121600, + }, + [CHAIN.ASTRZK]: { + fetch: fetchFees("astar_zkevm"), + start: 1682121600, + }, + [CHAIN.BLAST]: { + fetch: fetchFees("blast"), + start: 1682121600, + }, } } diff --git a/helpers/chains.ts b/helpers/chains.ts index f1b46d8da3..b2b2723a88 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -144,6 +144,7 @@ export enum CHAIN { KROMA = "kroma", ZORA = "zora", SVM = "svm", + ASTRZK = "astrzk", } // Don´t use From 9a759dbdc678b28f745d3fdc43c9a0531590cbd1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 5 Apr 2024 13:39:33 +0000 Subject: [PATCH 0294/1590] remove base --- fees/gamma.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/fees/gamma.ts b/fees/gamma.ts index a05976f466..f75c83a64a 100644 --- a/fees/gamma.ts +++ b/fees/gamma.ts @@ -96,10 +96,6 @@ const adapter: SimpleAdapter = { [CHAIN.MANTA]: { fetch: fetchFees("manta"), start: 1682121600, - }, - [CHAIN.BASE]: { - fetch: fetchFees("base"), - start: 1682121600, }, [CHAIN.AVAX]: { fetch: fetchFees("avalanche"), From 464499530a9bb1ebdf6659f8e667e0abd4f5d01a Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 5 Apr 2024 16:12:33 +0100 Subject: [PATCH 0295/1590] remove totalVolume field from myx finance --- dexs/myx-finance/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/dexs/myx-finance/index.ts b/dexs/myx-finance/index.ts index 0570aa85c2..1add297a52 100644 --- a/dexs/myx-finance/index.ts +++ b/dexs/myx-finance/index.ts @@ -46,7 +46,6 @@ const getFetch = async (optios: FetchOptions) => { return { timestamp: dayTimestamp, dailyVolume: dailyData.tradeVolume?.volume || "0", - totalVolume: totalData.tradeVolume?.volume || "0", } } From 4be9509460df455fdcf597f9600d7824e3b35009 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 5 Apr 2024 15:46:01 +0000 Subject: [PATCH 0296/1590] add synthetix-v3 --- fees/synthetix-v3.ts | 47 ++++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 6 +++--- 2 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 fees/synthetix-v3.ts diff --git a/fees/synthetix-v3.ts b/fees/synthetix-v3.ts new file mode 100644 index 0000000000..4c07a7bc34 --- /dev/null +++ b/fees/synthetix-v3.ts @@ -0,0 +1,47 @@ +import { ethers } from "ethers"; +import { ChainBlocks, FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { log } from "console"; + +const contract_address = '0x0a2af931effd34b81ebcc57e3d3c9b1e1de1c9ce'; +const snxUSD = '0x09d51516F38980035153a554c26Df3C6f51a23C3' +const event_order_settled = 'event OrderSettled(uint128 indexed marketId,uint128 indexed accountId,uint256 fillPrice,int256 pnl,int256 accruedFunding,int128 sizeDelta,int128 newSize,uint256 totalFees,uint256 referralFees,uint256 collectedFees,uint256 settlementReward,bytes32 indexed trackingCode,address settler)' +const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { + const dailyFees = options.createBalances(); + const dailyRevenue = options.createBalances(); + const dailyHoldersRevenue = options.createBalances(); + const dailySupplySideRevenue = options.createBalances(); + const logs = await options.getLogs({ + target: contract_address, + eventAbi: event_order_settled + }); + + logs.forEach((log: any) => { + const totalFees = log.totalFees + const collectedFees = log.collectedFees + const referralFees = log.referralFees + const settlementReward = log.settlementReward + dailyFees.add(snxUSD, totalFees) + dailyRevenue.add(snxUSD, collectedFees) + dailyHoldersRevenue.add(snxUSD, collectedFees) + const supplySideRevenue = Number(totalFees) - Number(collectedFees) - Number(referralFees) - Number(settlementReward) + dailySupplySideRevenue.add(snxUSD, supplySideRevenue) + }); + return { + dailyFees: dailyFees, + dailyRevenue: dailyRevenue, + dailyHoldersRevenue: dailyHoldersRevenue, + dailySupplySideRevenue: dailySupplySideRevenue, + timestamp + } +} + +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.BASE]: { + fetch: fetchFees, + start: 1682121600, + }, + } +} +export default adapters diff --git a/package-lock.json b/package-lock.json index 12c7c6b755..5f3f3de59e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.49", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.49.tgz", - "integrity": "sha512-CggIAtMd5lwOpIPoGPkTMqS2KYVIectlt1cOHUc/O/tcBOQ9XSy2OfF4JI8tIMuAJQSvYlPnEtxpFkUwuFt27A==", + "version": "5.0.51", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.51.tgz", + "integrity": "sha512-9xph+m9PykFw23K49AUagVLj+iu9mHMUeoZwBmdpVT0GBQNpLadMjCWc9NEgivrguOqMC76MhxZBsZMOTlzXHw==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@supercharge/promise-pool": "^2.1.0", From 2a863ec616071c209a3c615f6c1d3bfdf7c4ab03 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 5 Apr 2024 15:51:25 +0000 Subject: [PATCH 0297/1590] use cg --- fees/synthetix-v3.ts | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/fees/synthetix-v3.ts b/fees/synthetix-v3.ts index 4c07a7bc34..2f07226974 100644 --- a/fees/synthetix-v3.ts +++ b/fees/synthetix-v3.ts @@ -1,10 +1,8 @@ -import { ethers } from "ethers"; import { ChainBlocks, FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { log } from "console"; const contract_address = '0x0a2af931effd34b81ebcc57e3d3c9b1e1de1c9ce'; -const snxUSD = '0x09d51516F38980035153a554c26Df3C6f51a23C3' +const snxUSD = 'tether' const event_order_settled = 'event OrderSettled(uint128 indexed marketId,uint128 indexed accountId,uint256 fillPrice,int256 pnl,int256 accruedFunding,int128 sizeDelta,int128 newSize,uint256 totalFees,uint256 referralFees,uint256 collectedFees,uint256 settlementReward,bytes32 indexed trackingCode,address settler)' const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { const dailyFees = options.createBalances(); @@ -17,16 +15,17 @@ const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOption }); logs.forEach((log: any) => { - const totalFees = log.totalFees - const collectedFees = log.collectedFees - const referralFees = log.referralFees - const settlementReward = log.settlementReward - dailyFees.add(snxUSD, totalFees) - dailyRevenue.add(snxUSD, collectedFees) - dailyHoldersRevenue.add(snxUSD, collectedFees) + const totalFees = Number(log.totalFees) + const collectedFees = Number(log.collectedFees) + const referralFees = Number(log.referralFees) + const settlementReward = Number(log.settlementReward) + dailyFees.addCGToken(snxUSD, totalFees/1e18) + dailyRevenue.addCGToken(snxUSD, collectedFees/1e18) + dailyHoldersRevenue.addCGToken(snxUSD, collectedFees/1e18) const supplySideRevenue = Number(totalFees) - Number(collectedFees) - Number(referralFees) - Number(settlementReward) - dailySupplySideRevenue.add(snxUSD, supplySideRevenue) + dailySupplySideRevenue.addCGToken(snxUSD, supplySideRevenue/1e18) }); + return { dailyFees: dailyFees, dailyRevenue: dailyRevenue, From 76f0e1337ee183b63b8b90a3e124691380102835 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 5 Apr 2024 15:52:06 +0000 Subject: [PATCH 0298/1590] rename --- fees/synthetix-v3.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fees/synthetix-v3.ts b/fees/synthetix-v3.ts index 2f07226974..dabb09c11c 100644 --- a/fees/synthetix-v3.ts +++ b/fees/synthetix-v3.ts @@ -2,7 +2,7 @@ import { ChainBlocks, FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; const contract_address = '0x0a2af931effd34b81ebcc57e3d3c9b1e1de1c9ce'; -const snxUSD = 'tether' +const usdt = 'tether' const event_order_settled = 'event OrderSettled(uint128 indexed marketId,uint128 indexed accountId,uint256 fillPrice,int256 pnl,int256 accruedFunding,int128 sizeDelta,int128 newSize,uint256 totalFees,uint256 referralFees,uint256 collectedFees,uint256 settlementReward,bytes32 indexed trackingCode,address settler)' const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { const dailyFees = options.createBalances(); @@ -19,11 +19,11 @@ const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOption const collectedFees = Number(log.collectedFees) const referralFees = Number(log.referralFees) const settlementReward = Number(log.settlementReward) - dailyFees.addCGToken(snxUSD, totalFees/1e18) - dailyRevenue.addCGToken(snxUSD, collectedFees/1e18) - dailyHoldersRevenue.addCGToken(snxUSD, collectedFees/1e18) + dailyFees.addCGToken(usdt, totalFees/1e18) + dailyRevenue.addCGToken(usdt, collectedFees/1e18) + dailyHoldersRevenue.addCGToken(usdt, collectedFees/1e18) const supplySideRevenue = Number(totalFees) - Number(collectedFees) - Number(referralFees) - Number(settlementReward) - dailySupplySideRevenue.addCGToken(snxUSD, supplySideRevenue/1e18) + dailySupplySideRevenue.addCGToken(usdt, supplySideRevenue/1e18) }); return { From 1e31c5caf64ec8d6fc4d7736f9d82ebddfbe586d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 5 Apr 2024 15:54:39 +0000 Subject: [PATCH 0299/1590] fix start time --- fees/synthetix-v3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/synthetix-v3.ts b/fees/synthetix-v3.ts index dabb09c11c..93107239e5 100644 --- a/fees/synthetix-v3.ts +++ b/fees/synthetix-v3.ts @@ -39,7 +39,7 @@ const adapters: SimpleAdapter = { adapter: { [CHAIN.BASE]: { fetch: fetchFees, - start: 1682121600, + start: 1705104000, }, } } From f65822e2f81cacf8c91678c1da13543df048b47f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 5 Apr 2024 16:06:55 +0000 Subject: [PATCH 0300/1590] fix thorswap fees --- fees/thorswap/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fees/thorswap/index.ts b/fees/thorswap/index.ts index 94a84be8da..e80fa8c683 100644 --- a/fees/thorswap/index.ts +++ b/fees/thorswap/index.ts @@ -62,11 +62,11 @@ const fetchFees = async (timestamp: number): Promise => { const dailyRevenueData: IRevenue = reveuneData.find(item => item.DAY.split(" ")[0] === dayTimestampStr) as IRevenue const dailyFeesData: IFees = feesData.find(item => item.DAY.split(" ")[0] === dayTimestampStr) as IFees const dailyErningData: IEarning = earningData.find(item => Number(item.startTime) === dayTimestamp) as IEarning - const dailyFees = dailyRevenueData.REVENUE; + const dailyFees = Number(dailyRevenueData.REVENUE) * Number(dailyErningData.runePriceUSD); const dailyUsersFees = dailyFeesData?.LIQUIDITY_FEES || 0 + dailyRevenueData?.OUTBOUND_FEE || 0; - const dailyRevenue = dailyRevenueData.REVENUE; - const dailyProtocolRev = dailyRevenueData.REVENUE; - const dailyHoldersRevenue = (Number(dailyErningData.bondingEarnings) / 1e8) * Number(dailyErningData.runePriceUSD); + const dailyRevenue = Number(dailyRevenueData.REVENUE) * Number(dailyErningData.runePriceUSD); + const dailyProtocolRev = Number(dailyRevenueData.REVENUE) * Number(dailyErningData.runePriceUSD); + const dailyHoldersRevenue = (Number(dailyErningData.bondingEarnings) / 1e8) *Number(dailyErningData.runePriceUSD); const dailySupplySideRevenue = dailyHoldersRevenue From 66b97ab4b2dc52f271050643e619c76d9b265864 Mon Sep 17 00:00:00 2001 From: ReflectiveChimp <55021052+ReflectiveChimp@users.noreply.github.com> Date: Fri, 5 Apr 2024 18:42:41 +0100 Subject: [PATCH 0301/1590] add beefy fees revenue --- fees/beefy/index.ts | 128 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 fees/beefy/index.ts diff --git a/fees/beefy/index.ts b/fees/beefy/index.ts new file mode 100644 index 0000000000..2b64d543b1 --- /dev/null +++ b/fees/beefy/index.ts @@ -0,0 +1,128 @@ +import { Adapter, Fetch, FetchResultFees } from '../../adapters/types'; +import { CHAIN } from '../../helpers/chains'; +import { queryDune } from '../../helpers/dune'; + +const totalFee = 9.5; +const strategistFee = 0.5; +const callFee = 0.01; +const revenueFee = totalFee - strategistFee - callFee; +const holderShare = 36; +const protocolShare = 64; + +function getDay(timestamp: number): string { + const date = new Date(timestamp * 1000); + return date.toISOString().split('T')[0]; +} + +interface IRevenue { + day: string; + arbitrum: number; + base: number; + polygon: number; + avalanche: number; + fantom: number; + optimism: number; + BNB: number; + ethereum: number; +} + +const fetch = (chain: Exclude): Fetch => { + return async (timestamp, _, {startOfDay}): Promise => { + const endTimestamp = startOfDay + 86400; + const allRevenue: IRevenue[] = (await queryDune('3594948', {endTimestamp})); + const day = getDay(timestamp); + const entry = allRevenue.find(r => r.day === day); + + if (!entry) { + throw new Error(`No fees found for ${day}`); + } + + const dailyRevenue = entry[chain] || 0; + const dailyFees = dailyRevenue * (totalFee / revenueFee); + return { + dailyFees, + dailyRevenue, + dailyProtocolRevenue: `${dailyRevenue * (protocolShare/100)}`, + dailyHoldersRevenue: `${dailyRevenue * (holderShare/100)}`, + timestamp, + }; + }; +}; + +const methodology = { + Fees: `${totalFee}% of each harvest is charged as a performance fee`, + Revenue: `All fees except for ${strategistFee}% to strategist and variable harvest() call fee are revenue`, + HoldersRevenue: `${holderShare}% of revenue is distributed to holders who stake`, + ProtocolRevenue: `${protocolShare}% of revenue is distributed to the treasury`, +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetch('arbitrum'), + start: 1693958400, // 2023-09-06 + runAtCurrTime: false, + meta: { + methodology + } + }, + [CHAIN.BASE]: { + fetch: fetch('base'), + start: 1692921600, // 2023-08-25 + runAtCurrTime: false, + meta: { + methodology + } + }, + [CHAIN.POLYGON]: { + fetch: fetch('polygon'), + start: 1693958400, // 2023-09-06 + runAtCurrTime: false, + meta: { + methodology + } + }, + [CHAIN.AVAX]: { + fetch: fetch('avalanche'), + start: 1693958400, // 2023-09-06 + runAtCurrTime: false, + meta: { + methodology + } + }, + [CHAIN.FANTOM]: { + fetch: fetch('fantom'), + start: 1692921600, // 2023-08-25 + runAtCurrTime: false, + meta: { + methodology + } + }, + [CHAIN.OPTIMISM]: { + fetch: fetch('optimism'), + start: 1692921600, // 2023-08-25 + runAtCurrTime: false, + meta: { + methodology + } + }, + [CHAIN.BSC]: { + fetch: fetch('BNB'), + start: 1692921600, // 2023-08-25 + runAtCurrTime: false, + meta: { + methodology + } + }, + [CHAIN.ETHEREUM]: { + fetch: fetch('ethereum'), + start: 1698105600, // 2023-10-24 + runAtCurrTime: false, + meta: { + methodology + } + }, + }, + isExpensiveAdapter: true, +}; +export default adapter; From f1db5a9bdf36c874c8841eb8b896913a74879348 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 6 Apr 2024 02:35:36 +0100 Subject: [PATCH 0302/1590] add pumpdotfun --- fees/primordium.ts | 3 ++- fees/pumpdotfun.ts | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 fees/pumpdotfun.ts diff --git a/fees/primordium.ts b/fees/primordium.ts index f1f74f5e10..d716557eaf 100644 --- a/fees/primordium.ts +++ b/fees/primordium.ts @@ -6,7 +6,8 @@ const fetch: any = async (options: FetchOptions) => { const dailyFees = options.createBalances(); const value = (await queryDune("3521814", { start: options.startTimestamp, - end: options.endTimestamp + end: options.endTimestamp, + receiver: '9yMwSPk9mrXSN7yDHUuZurAh1sjbJsfpUqjZ7SvVtdco' })); dailyFees.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); diff --git a/fees/pumpdotfun.ts b/fees/pumpdotfun.ts new file mode 100644 index 0000000000..0c2bc80820 --- /dev/null +++ b/fees/pumpdotfun.ts @@ -0,0 +1,29 @@ +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("3521814", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: 'CebN5WGQ4jvEPvsVU4EoHEpgzq1VV7AbicfhtW4xC9iM' + })); + 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; From 519ad8fa34039cf12717105a066aed179826b189 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 6 Apr 2024 10:35:06 +0000 Subject: [PATCH 0303/1590] fix handle api key --- helpers/flipsidecrypto.ts | 16 ++++++++++------ utils/fetchURL.ts | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/helpers/flipsidecrypto.ts b/helpers/flipsidecrypto.ts index 7b2e1b94c8..52e9b2f13e 100644 --- a/helpers/flipsidecrypto.ts +++ b/helpers/flipsidecrypto.ts @@ -48,8 +48,8 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { headers: { "x-api-key": FLIPSIDE_API_KEY, 'Content-Type': 'application/json' - } - }) + }, + }, { withMetadata: true }) if(query?.result?.queryRun?.id){ token[sqlQuery] = query?.result.queryRun.id } else { @@ -70,6 +70,10 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { throw error } } + if (!e.response) { + bail(e) + throw e; + } console.log("make query flipside", e.response, e) throw e } @@ -92,7 +96,7 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { headers: { "x-api-key": FLIPSIDE_API_KEY } - }) + }, { withMetadata: true }) const status = queryStatus.result.queryRun.state if (status === "QUERY_STATE_SUCCESS") { @@ -119,7 +123,7 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { headers: { "x-api-key": FLIPSIDE_API_KEY } - }) + }, { withMetadata: true }) if(results.result.rows === null){ return [] // empty result } @@ -151,13 +155,13 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { headers: { "x-api-key": FLIPSIDE_API_KEY } - }) + }, { withMetadata: true }) bail(new Error('max retries exceeded')) } throw new Error("Still running") }, { - retries: MAX_RETRIES, + retries: FLIPSIDE_API_KEYS.length + 3, maxTimeout: 1000 * 60 * 5 } ); diff --git a/utils/fetchURL.ts b/utils/fetchURL.ts index b5d6a31f4d..53e252c51e 100644 --- a/utils/fetchURL.ts +++ b/utils/fetchURL.ts @@ -43,13 +43,14 @@ export async function httpGet(url: string, options?: AxiosRequestConfig, { withM } } -export async function httpPost(url: string, data: any, options?: AxiosRequestConfig) { +export async function httpPost(url: string, data: any, options?: AxiosRequestConfig, { withMetadata = false } = {}) { try { const res = await axios.post(url, data, options) if (!successCodes.includes(res.status)) throw new Error(`Error fetching ${url}: ${res.status} ${res.statusText}`) if (!res.data) throw new Error(`Error fetching ${url}: no data`) return res.data } catch (error) { + if (withMetadata) throw error throw formAxiosError(url, error, { method: 'POST' }) } } From e90a97b66f6cdf66c94f2064c446a3dcf9f2cd3d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 6 Apr 2024 10:49:27 +0000 Subject: [PATCH 0304/1590] fix retry --- helpers/flipsidecrypto.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/helpers/flipsidecrypto.ts b/helpers/flipsidecrypto.ts index 52e9b2f13e..63fd2a23ee 100644 --- a/helpers/flipsidecrypto.ts +++ b/helpers/flipsidecrypto.ts @@ -6,7 +6,7 @@ import { getEnv } from "./env"; const token = {} as IJSON const FLIPSIDE_API_KEYS = getEnv('FLIPSIDE_API_KEY')?.split(',') ?? ["f3b65679-a179-4983-b794-e41cf40103ed"] let API_KEY_INDEX = 0; -const MAX_RETRIES = 20; +const MAX_RETRIES = FLIPSIDE_API_KEYS.length + 3; type IRequest = { [key: string]: Promise; @@ -161,7 +161,7 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { throw new Error("Still running") }, { - retries: FLIPSIDE_API_KEYS.length + 3, + retries: MAX_RETRIES, maxTimeout: 1000 * 60 * 5 } ); From 545279c63c605a9bde9e8d30a1e4831af49ff421 Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Sun, 7 Apr 2024 06:17:27 +0900 Subject: [PATCH 0305/1590] DackieSwap on Mode --- dexs/dackieswap-v2/index.ts | 4 +++- dexs/dackieswap/index.ts | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dexs/dackieswap-v2/index.ts b/dexs/dackieswap-v2/index.ts index 5a82fd901d..458dd0cbe5 100644 --- a/dexs/dackieswap-v2/index.ts +++ b/dexs/dackieswap-v2/index.ts @@ -10,6 +10,7 @@ const endpoints: ChainEndpoints = { [CHAIN.OPTIMISM]: "https://api.studio.thegraph.com/query/50473/v2-optimism/version/latest", [CHAIN.ARBITRUM]: "https://api.studio.thegraph.com/query/50473/v2-arbitrum/version/latest", [CHAIN.BLAST]: "https://api.studio.thegraph.com/query/50473/v2-blast/version/latest", + [CHAIN.MODE]: "https://graph.dackieswap.xyz/mode/subgraphs/name/v2-mode", }; // Fetch function to query the subgraphs @@ -53,7 +54,8 @@ const adapter: SimpleAdapter = { : chain === CHAIN.OPTIMISM ? 1705993200 : chain === CHAIN.ARBITRUM ? 1707885300 : chain === CHAIN.BLAST ? 1709722800 - : 0, + : chain === CHAIN.MODE ? 1712371653 + : 0, customBackfill: customBackfill(chain, graphs), meta: {methodology}, } diff --git a/dexs/dackieswap/index.ts b/dexs/dackieswap/index.ts index 6c4859ad2b..715707902e 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -12,6 +12,8 @@ const v3Endpoint = { "https://api.studio.thegraph.com/query/50473/v3-arbitrum/version/latest", [CHAIN.BLAST]: "https://api.studio.thegraph.com/query/50473/v3-blast/version/latest", + [CHAIN.MODE]: + "https://graph.dackieswap.xyz/mode/subgraphs/name/v3-mode", }; const VOLUME_USD = "volumeUSD"; @@ -39,6 +41,7 @@ const v3StartTimes = { [CHAIN.OPTIMISM]: 1705993200, [CHAIN.ARBITRUM]: 1707885300, [CHAIN.BLAST]: 1709722800, + [CHAIN.MODE]: 1712371653, } as IJSON; const adapter: SimpleAdapter = { @@ -59,6 +62,10 @@ const adapter: SimpleAdapter = { fetch: v3Graph(CHAIN.BLAST), start: async () => v3StartTimes[CHAIN.BLAST] }, + [CHAIN.MODE]: { + fetch: v3Graph(CHAIN.MODE), + start: async () => v3StartTimes[CHAIN.MODE] + }, }, version: 2 }; From 109e465e3a20a99ba65dcf6d279989f5355e5978 Mon Sep 17 00:00:00 2001 From: Krunal Amin Date: Sat, 6 Apr 2024 16:41:45 -0500 Subject: [PATCH 0306/1590] add aggregated stats --- aggregator-derivatives/unidex/index.ts | 204 +++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 aggregator-derivatives/unidex/index.ts diff --git a/aggregator-derivatives/unidex/index.ts b/aggregator-derivatives/unidex/index.ts new file mode 100644 index 0000000000..4be86baa2e --- /dev/null +++ b/aggregator-derivatives/unidex/index.ts @@ -0,0 +1,204 @@ +import { SimpleAdapter, FetchResultVolume } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; +import { Chain } from "@defillama/sdk/build/general"; +import request, { gql } from "graphql-request"; + +interface IReferralRecord { + volume: string; // Assuming volume is a string that represents a number + timestamp: number; +} + +type TChainIDs = { + [key in Chain]?: number; +}; + +const chainIDs: TChainIDs = { + [CHAIN.FANTOM]: 250, + [CHAIN.ARBITRUM]: 42161, + [CHAIN.OPTIMISM]: 10, + [CHAIN.ERA]: 324, + [CHAIN.BASE]: 8453, + [CHAIN.EVMOS]: 9001, + [CHAIN.METIS]: 1088, +}; + +interface IDayProduct { + cumulativeVolumeUsd: number; + _id: string; +} + +const fetchReferralVolume = async (timestamp: number): Promise => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); + + const referralQuery = gql` + { + referrerStats( + where: {referrer: "0x8c128f336b479b142429a5f351af225457a987fa", timestamp_gt: "${todaysTimestamp}"} + ) { + volume + } + } + `; + + const referralEndpoint = 'https://api.thegraph.com/subgraphs/name/gmx-io/gmx-arbitrum-referrals'; + const referralRes = await request(referralEndpoint, referralQuery); + + // If there's no volume data, return 0 + if (!referralRes.referrerStats || referralRes.referrerStats.length === 0) { + return 0; + } + + return Number(referralRes.referrerStats[0].volume) / 10 ** 30; +}; + + +const fetchMuxReferralVolume = async (timestamp: number): Promise => { + const startOfDayTimestamp = getTimestampAtStartOfDayUTC(timestamp); + const endOfDayTimestamp = startOfDayTimestamp + 86400; // Add one day's worth of seconds for the end of the day + + const referralQuery = gql` + query MyQuery($timestamp_gte: BigInt = "", $timestamp_lte: BigInt = "") { + referralRecords( + where: { + referralCode: "0x556e694465780000000000000000000000000000000000000000000000000000", + timestamp_gte: $timestamp_gte, + timestamp_lte: $timestamp_lte + } + ) { + volume + timestamp + } + } + `; + + const variables = { + timestamp_gte: startOfDayTimestamp.toString(), + timestamp_lte: endOfDayTimestamp.toString() + }; + + const referralEndpoint = 'https://api.thegraph.com/subgraphs/name/mux-world/mux-referral-arb'; + const referralRes = await request(referralEndpoint, referralQuery, variables); + + // Sum up the volumes + let totalVolume = 0; + + if (referralRes.referralRecords && Array.isArray(referralRes.referralRecords)) { + referralRes.referralRecords.forEach((record: IReferralRecord) => { + const volume = parseFloat(record.volume); + if (!isNaN(volume)) { + totalVolume += volume / 10 ** 18; // Adjust the unit conversion as needed + } + }); + } + + return totalVolume; +}; + + + + + + + +const fetch = (chain: Chain) => { + return async (timestamp: number): Promise => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); + + const graphQuery = gql` + query MyQuery { + DayProducts(filter: {date: ${todaysTimestamp}}) { + cumulativeVolumeUsd + _id + } + } + `; + + const endpoint = 'https://arkiver.moltennetwork.com/graphql'; + const response = await request(endpoint, graphQuery); + const dayProducts: IDayProduct[] = response.DayProducts; + + const chainID = chainIDs[chain]; + let dailyVolumeUSD = 0; + + dayProducts.forEach((product) => { + const productChainID = parseInt(product._id.split(':')[2]); + if (productChainID === chainID) { + dailyVolumeUSD += product.cumulativeVolumeUsd; + } + }); + + if (chain === CHAIN.ARBITRUM) { + const referralVolumeUSD = await fetchReferralVolume(timestamp); + const muxReferralVolumeUSD = await fetchMuxReferralVolume(timestamp); + dailyVolumeUSD += referralVolumeUSD + muxReferralVolumeUSD; + } + + return { + dailyVolume: dailyVolumeUSD.toString(), + timestamp: todaysTimestamp + }; + }; +}; + + +const methodology = { + dailyVolume: "Sum of cumulativeVolumeUsd for all products on the specified chain for the given day", +}; + + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.OPTIMISM]: { + fetch: fetch(CHAIN.OPTIMISM), + start: 1687422746, + meta: { + methodology, + }, + }, + [CHAIN.ERA]: { + fetch: fetch(CHAIN.ERA), + start: 1687422746, + meta: { + methodology, + }, + }, + [CHAIN.ARBITRUM]: { + fetch: fetch(CHAIN.ARBITRUM), + start: 1687422746, + meta: { + methodology, + }, + }, + [CHAIN.BASE]: { + fetch: fetch(CHAIN.BASE), + start: 1687422746, + meta: { + methodology, + }, + }, + [CHAIN.FANTOM]: { + fetch: fetch(CHAIN.FANTOM), + start: 1687422746, + meta: { + methodology, + }, + }, + [CHAIN.METIS]: { + fetch: fetch(CHAIN.METIS), + start: 1687898060, + meta: { + methodology, + }, + }, + [CHAIN.EVMOS]: { + fetch: fetch(CHAIN.EVMOS), + start: 1700104066, + meta: { + methodology, + }, + }, + } +}; + +export default adapter; \ No newline at end of file From 2e13b3c269976679b503f8aef7300174c4a831b5 Mon Sep 17 00:00:00 2001 From: sandy-wombat <142200506+sandy-wombat@users.noreply.github.com> Date: Sun, 7 Apr 2024 22:36:37 +0800 Subject: [PATCH 0307/1590] update adapter to v2 to fix fee in wombat --- dexs/wombat-exchange/index.ts | 8 +++++--- fees/wombat-exchange.ts | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dexs/wombat-exchange/index.ts b/dexs/wombat-exchange/index.ts index 19c772fb80..58bce99796 100644 --- a/dexs/wombat-exchange/index.ts +++ b/dexs/wombat-exchange/index.ts @@ -1,4 +1,4 @@ -import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import {FetchOptions, FetchResultV2, SimpleAdapter} from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, request } from "graphql-request"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; @@ -41,9 +41,10 @@ const endpoints: TEndpoint = { }; const fetchVolume = (chain: Chain) => { - return async (timestamp: number): Promise => { + return async (options: FetchOptions): Promise => { + const { startTimestamp} = options; const dayTimestamp = getUniqStartOfTodayTimestamp( - new Date(timestamp * 1000) + new Date(startTimestamp * 1000) ); const todaysBlock = await getBlock(dayTimestamp, chain, {}); const dayID = dayTimestamp / 86400; @@ -71,6 +72,7 @@ const fetchVolume = (chain: Chain) => { }; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BSC]: { fetch: fetchVolume(CHAIN.BSC), diff --git a/fees/wombat-exchange.ts b/fees/wombat-exchange.ts index a2bd7c813e..891558873d 100644 --- a/fees/wombat-exchange.ts +++ b/fees/wombat-exchange.ts @@ -2,7 +2,7 @@ import { Adapter } from "../adapters/types"; import volumeAdapter from "../dexs/wombat-exchange"; import { getDexChainFees } from "../helpers/getUniSubgraphFees"; -const TOTAL_FEES = 0.0001; +const TOTAL_FEES = 0.0004; const feeAdapter = getDexChainFees({ totalFees: TOTAL_FEES, From 21c0222e3b22e82be05e0517555dde460e9c432c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 8 Apr 2024 11:52:32 +0000 Subject: [PATCH 0308/1590] fix breackdown --- dexs/unidex/index.ts | 13 ++++++++++--- .../unidex}/unidex/index.ts | 18 ++++++++++-------- 2 files changed, 20 insertions(+), 11 deletions(-) rename {aggregator-derivatives => dexs/unidex}/unidex/index.ts (92%) diff --git a/dexs/unidex/index.ts b/dexs/unidex/index.ts index ae5d159a9f..78e2e95d05 100644 --- a/dexs/unidex/index.ts +++ b/dexs/unidex/index.ts @@ -1,8 +1,9 @@ -import { SimpleAdapter, FetchResultVolume } from "../../adapters/types"; +import { SimpleAdapter, FetchResultVolume, BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; +import { adapteraggderivative } from './unidex/index' type TChainIDs = { [key in Chain]?: number; @@ -62,7 +63,7 @@ const methodology = { "Sum of cumulativeVolumeUsd for all products on the specified chain for the given day", }; -const adapter: SimpleAdapter = { +const adapter: any = { adapter: { [CHAIN.OPTIMISM]: { fetch: fetch(CHAIN.OPTIMISM), @@ -116,4 +117,10 @@ const adapter: SimpleAdapter = { }, }; -export default adapter; +const adapterbreakdown: BreakdownAdapter = { + breakdown: { + "unidex": adapter["adapter"], + "unidex-agg-derivative": adapteraggderivative["adapter"], + } +} +export default adapterbreakdown; diff --git a/aggregator-derivatives/unidex/index.ts b/dexs/unidex/unidex/index.ts similarity index 92% rename from aggregator-derivatives/unidex/index.ts rename to dexs/unidex/unidex/index.ts index 4be86baa2e..62fbb701ac 100644 --- a/aggregator-derivatives/unidex/index.ts +++ b/dexs/unidex/unidex/index.ts @@ -1,6 +1,6 @@ -import { SimpleAdapter, FetchResultVolume } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; +import { SimpleAdapter, FetchResultVolume } from "../../../adapters/types"; +import { CHAIN } from "../../../helpers/chains"; +import { getTimestampAtStartOfDayUTC } from "../../../utils/date"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; @@ -91,7 +91,7 @@ const fetchMuxReferralVolume = async (timestamp: number): Promise => { } }); } - + return totalVolume; }; @@ -130,8 +130,8 @@ const fetch = (chain: Chain) => { if (chain === CHAIN.ARBITRUM) { const referralVolumeUSD = await fetchReferralVolume(timestamp); - const muxReferralVolumeUSD = await fetchMuxReferralVolume(timestamp); - dailyVolumeUSD += referralVolumeUSD + muxReferralVolumeUSD; + // const muxReferralVolumeUSD = await fetchMuxReferralVolume(timestamp); // errror + dailyVolumeUSD += referralVolumeUSD; } return { @@ -147,7 +147,7 @@ const methodology = { }; -const adapter: SimpleAdapter = { +const adapteraggderivative: any = { adapter: { [CHAIN.OPTIMISM]: { fetch: fetch(CHAIN.OPTIMISM), @@ -201,4 +201,6 @@ const adapter: SimpleAdapter = { } }; -export default adapter; \ No newline at end of file +export { + adapteraggderivative +} From eb227d556c34853ab092c3a760b85eb97b40813f Mon Sep 17 00:00:00 2001 From: tec05 Date: Mon, 8 Apr 2024 04:57:45 -0700 Subject: [PATCH 0309/1590] Add volume adapter for Archly on zkSync Era --- dexs/archly-finance-v2/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dexs/archly-finance-v2/index.ts b/dexs/archly-finance-v2/index.ts index 351a7fd353..71b52aa51b 100644 --- a/dexs/archly-finance-v2/index.ts +++ b/dexs/archly-finance-v2/index.ts @@ -3,6 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0x12508dd9108Abab2c5fD8fC6E4984E46a3CF7824'; +const FACTORY_ADDRESS_ZKSYNC = '0x30A0DD3D0D9E99BD0E67b323FB706788766dCff2'; const adapter: SimpleAdapter = { adapter: { @@ -78,6 +79,10 @@ const adapter: SimpleAdapter = { fetch: getDexVolumeExports({ chain: CHAIN.TELOS, factory: FACTORY_ADDRESS }), start: 1700784000, }, + [CHAIN.ERA]: { + fetch: getDexVolumeExports({ chain: CHAIN.ERA, factory: FACTORY_ADDRESS_ZKSYNC }), + start: 1708473600, + }, [CHAIN.ZORA]: { fetch: getDexVolumeExports({ chain: CHAIN.ZORA, factory: FACTORY_ADDRESS }), start: 1711929600, From bd7931e2a491e1c47ba2b1e9e474cd09e57fe1ac Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 8 Apr 2024 15:25:00 +0000 Subject: [PATCH 0310/1590] fix div --- options/optionBlitz/index.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/options/optionBlitz/index.ts b/options/optionBlitz/index.ts index 0fdad90a09..82db7c7421 100644 --- a/options/optionBlitz/index.ts +++ b/options/optionBlitz/index.ts @@ -44,19 +44,19 @@ const fetch = async (timestamp: number): Promise => { const dayDataResponse: IDayDataGraph = (await request(URL, dayDataQuery)).dayData; const totalDataResponse: ITotalDataGraph[] = (await request(URL, totalDataQuery)).totalDatas; - let dailyVolume = BigInt(0); - let totalVolume = BigInt(0); + let dailyVolume = Number(0); + let totalVolume = Number(0); if (dayDataResponse) { - dailyVolume = BigInt(dayDataResponse.volumeUsdc); + dailyVolume = Number(dayDataResponse.volumeUsdc) / 1000; } if (totalDataResponse.length > 0) { - totalVolume = BigInt(totalDataResponse[0].totalVolumeUsdc); + totalVolume = Number(totalDataResponse[0].totalVolumeUsdc) / 1000; } - balances.add(ADDRESSES.arbitrum.USDC_CIRCLE, dailyVolume.toString()); - balances1.add(ADDRESSES.arbitrum.USDC_CIRCLE, totalVolume.toString()); + balances.add(ADDRESSES.arbitrum.USDC_CIRCLE, dailyVolume); + balances1.add(ADDRESSES.arbitrum.USDC_CIRCLE, totalVolume); return { timestamp: dayTimestamp, From e1f1667773738cf73a8d15181f6b3c67471350b4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 8 Apr 2024 15:41:53 +0000 Subject: [PATCH 0311/1590] add synthetix-v3 volume --- dexs/synthetix-v3/index.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 dexs/synthetix-v3/index.ts diff --git a/dexs/synthetix-v3/index.ts b/dexs/synthetix-v3/index.ts new file mode 100644 index 0000000000..00a41add82 --- /dev/null +++ b/dexs/synthetix-v3/index.ts @@ -0,0 +1,33 @@ +import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const contract_address = '0x0a2af931effd34b81ebcc57e3d3c9b1e1de1c9ce'; +const usdt = 'tether' +const event_order_settled = 'event OrderSettled(uint128 indexed marketId,uint128 indexed accountId,uint256 fillPrice,int256 pnl,int256 accruedFunding,int128 sizeDelta,int128 newSize,uint256 totalFees,uint256 referralFees,uint256 collectedFees,uint256 settlementReward,bytes32 indexed trackingCode,address settler)' +const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { + const dailyVolume = options.createBalances(); + const logs = await options.getLogs({ + target: contract_address, + eventAbi: event_order_settled + }); + + logs.forEach((log: any) => { + const volume = Math.abs(Number(log.fillPrice)/1e18 * Number(log.sizeDelta)/1e18) + dailyVolume.addCGToken(usdt, volume) + }); + + return { + dailyVolume: dailyVolume, + timestamp + } +} + +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.BASE]: { + fetch: fetchFees, + start: 1705104000, + }, + } +} +export default adapters From 0e3718172ab4bf0a191721b4570ac4a9fd03657e Mon Sep 17 00:00:00 2001 From: sp-aark Date: Tue, 9 Apr 2024 13:33:28 +0900 Subject: [PATCH 0312/1590] Use public api endpoint --- dexs/aark/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/aark/index.ts b/dexs/aark/index.ts index d564fa2873..84663e396b 100644 --- a/dexs/aark/index.ts +++ b/dexs/aark/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import fetchURL from "../../utils/fetchURL"; -const endpoint = "https://api.aark.digital/stats/volume/futures"; +const endpoint = "https://public-api.aark.digital/stats/volume/futures"; const fetch = async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); From a8d1a9d68fe6792edf60dd52decbcd378b1243e2 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 9 Apr 2024 13:38:18 +0000 Subject: [PATCH 0313/1590] fix magpie; --- aggregators/magpie/index.ts | 136 +++++++++++++++++++++--------------- 1 file changed, 81 insertions(+), 55 deletions(-) diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts index a0b9dcc18b..da48ee77ce 100644 --- a/aggregators/magpie/index.ts +++ b/aggregators/magpie/index.ts @@ -1,78 +1,104 @@ -import { FetchResult, } from "../../adapters/types"; -import fetchUrl from "../../utils/fetchURL" -import { getTimestampAtStartOfDayUTC } from "../../utils/date" +import { ChainBlocks, FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types"; +import fetchUrl from "../../utils/fetchURL"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; const chainsMap: Record = { - ETHEREUM: "ETHEREUM", - ARBITRUM: "ARBITRUM", - POLYGON: "POLYGON", - AVALANCHE: "AVALANCHE", - BNB: "BNB", - OPTIMISM: "OPTIMISM", - BASE: "BASE" + ETHEREUM: CHAIN.ETHEREUM, + ARBITRUM: CHAIN.ARBITRUM, + POLYGON: CHAIN.POLYGON, + AVALANCHE: CHAIN.AVAX, + BNB: CHAIN.BSC, + OPTIMISM: CHAIN.OPTIMISM, + BASE: CHAIN.BASE, }; +type IRequest = { + [key: string]: Promise; +} +const requests: IRequest = {} +export async function _fetchURL(url: string, retries: number = 10) { + if (!requests[url]) { + requests[url] = fetchUrl(url, retries) + } + return requests[url] +} -const fetch = - (chain: string) => - async (timestamp: number): Promise => { - const unixTimestamp1 = getTimestampAtStartOfDayUTC(timestamp) - const unixTimestamp2 = getUniqStartOfTodayTimestamp(); - console.log(chain, timestamp, unixTimestamp1, unixTimestamp2) - if (unixTimestamp1 < unixTimestamp2) { - // console.log("Method 1") - const url = `https://script.google.com/macros/s/AKfycbxqWlzQQzpG-KVGVpVLPafPljYkXejEAJ7TpQc8iBaHuvvu5jx5BnRFYEfQu0pqK5j_-Q/exec?timestamp=${unixTimestamp1.toString()}` - const data = await fetchUrl(url, 10) - - const chainData = data.result.rows.find( - (row: any) => chainsMap[row.chain] === chain - ); - if (chainData === undefined ) { - return { - dailyVolume: 0, - timestamp: unixTimestamp2, - }; - } else { +const fetch = async (timestamp: number, _: ChainBlocks, {chain}: FetchOptions): Promise => { + const unixTimestamp1 = getTimestampAtStartOfDayUTC(timestamp); + const unixTimestamp2 = getUniqStartOfTodayTimestamp(); + if (unixTimestamp1 < unixTimestamp2) { + const url = `https://script.google.com/macros/s/AKfycbxqWlzQQzpG-KVGVpVLPafPljYkXejEAJ7TpQc8iBaHuvvu5jx5BnRFYEfQu0pqK5j_-Q/exec?timestamp=${unixTimestamp1.toString()}`; + const data = await _fetchURL(url, 10); + const chainData = data.result.rows.find((row: any) => chainsMap[row.chain] === chain); + if (chainData === undefined) { + return { + dailyVolume: 0, + timestamp: unixTimestamp2, + }; + } else { return { dailyVolume: chainData.dailyVolume, timestamp: unixTimestamp2, }; } + } else { + const url = `https://api.dune.com/api/v1/query/3587739/results?api_key=eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0`; + const data = await fetchUrl(url, 10); + const chainData = data.result.rows.find((row: any) => chainsMap[row.chain] === chain); + if (chainData === undefined) { + return { + dailyVolume: 0, + timestamp: unixTimestamp2, + }; } else { - // console.log("Method 2") - const url = `https://api.dune.com/api/v1/query/3587739/results?api_key=eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0` - const data = await fetchUrl(url, 10) - const chainData = data.result.rows.find( - (row: any) => chainsMap[row.chain] === chain - ); - if (chainData === undefined ) { - return { - dailyVolume: 0, - timestamp: unixTimestamp2, - }; - } else { return { dailyVolume: chainData.dailyVolume, timestamp: unixTimestamp2, }; } - } - }; + } + }; -const adapter: any = { - timetravel: false, +const adapter: SimpleAdapter = { adapter: { - ...Object.values(chainsMap).reduce((acc, chain) => { - return { - ...acc, - [(chainsMap as any)[chain] || chain]: { - fetch: fetch(chain), - start: 1662595200, - }, - }; - }, {}), + [CHAIN.ETHEREUM]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.ARBITRUM]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.POLYGON]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.AVAX]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.BSC]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.OPTIMISM]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.BASE]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, }, isExpensiveAdapter: true, }; From 50ebc45d7089876d16bcfaee88fe62e493fed814 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 9 Apr 2024 16:59:17 +0000 Subject: [PATCH 0314/1590] fix startime --- options/moby/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options/moby/index.ts b/options/moby/index.ts index a529527fda..9995072e39 100644 --- a/options/moby/index.ts +++ b/options/moby/index.ts @@ -18,7 +18,7 @@ export const moby_adapter: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM]: { fetch: fetchMobyVolumeData, - start: 196746973 + start: 1712102400 }, }, }; From bd2c42c925587167999c5db5dfbc54aff6f4e0a4 Mon Sep 17 00:00:00 2001 From: omurovec Date: Tue, 9 Apr 2024 10:00:37 -0700 Subject: [PATCH 0315/1590] add increment-protocol volume --- dexs/increment-protocol/index.ts | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 dexs/increment-protocol/index.ts diff --git a/dexs/increment-protocol/index.ts b/dexs/increment-protocol/index.ts new file mode 100644 index 0000000000..01730b2b9a --- /dev/null +++ b/dexs/increment-protocol/index.ts @@ -0,0 +1,53 @@ +import { request, gql } from "graphql-request"; + +const subgraphUrl = + "https://subgraph.increment.finance/subgraphs/name/Increment-Finance/subgraph"; + +const volumeQuery = gql` + query volumeQuery($endTimestamp: Int!) { + markets { + hourlyCandles( + orderBy: openTimestamp + orderDirection: desc + first: 24 + where: { openTimestamp_lte: $endTimestamp } + ) { + volume + } + dailyCandles( + orderBy: openTimestamp + orderDirection: desc + first: 1000 + where: { openTimestamp_lte: $endTimestamp } + ) { + volume + } + } + } +`; + +export default { + adapter: { + era: { + fetch: async ({ endTimestamp }) => { + const volumeData = await request(subgraphUrl, volumeQuery, { + endTimestamp: endTimestamp ?? Math.floor(Date.now() / 1000) + }); + let dailyVolume = 0; + let totalVolume = 0; + for (const market of volumeData.markets) { + dailyVolume += market.hourlyCandles.reduce( + (acc, { volume }) => acc + volume * 10 ** -18, + 0 + ); + totalVolume += market.dailyCandles.reduce( + (acc, { volume }) => acc + volume * 10 ** -18, + 0 + ); + } + return { dailyVolume, totalVolume }; + }, + start: 1710004200 // 2024-03-09 09:10 + } + } +}; From d4944cd7aa729844539f966c00533e5da93aca5d Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Wed, 10 Apr 2024 07:26:48 +0100 Subject: [PATCH 0316/1590] rename --- users/routers/routerAddresses.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index c066cd3634..b014ac4636 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -2153,7 +2153,7 @@ export default ([ }, { "id":"2899", - "name":"Vertex Protocol", + "name":"Vertex", "addresses":{ "arbitrum":[ "0xbbee07b3e8121227afcfe1e2b82772246226128e", // endpoint From dc71e35618dc31475739ac2da9d5f2369ffeefd8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 10 Apr 2024 12:09:50 +0000 Subject: [PATCH 0317/1590] fix run current time --- dexs/sushiswap/trident.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/sushiswap/trident.ts b/dexs/sushiswap/trident.ts index 3ffdf7208d..9ba77ad98e 100644 --- a/dexs/sushiswap/trident.ts +++ b/dexs/sushiswap/trident.ts @@ -10,7 +10,7 @@ const endpointsTrident: Record = { [CHAIN.OPTIMISM]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-optimism', //[CHAIN.KAVA]: 'https://pvt.graph.kava.io/subgraphs/name/sushi-v2/trident-kava', // [CHAIN.METIS]: 'https://andromeda.thegraph.metis.io/subgraphs/name/sushi-v2/trident-metis', - [CHAIN.BITTORRENT]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v2/trident-bttc', + // [CHAIN.BITTORRENT]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v2/trident-bttc', [CHAIN.ARBITRUM]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-arbitrum', [CHAIN.BSC]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-bsc', [CHAIN.AVAX]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-avalanche', From 9999cc55d61d5817bced4fd4014b41bed74b69c5 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 10 Apr 2024 12:44:02 +0000 Subject: [PATCH 0318/1590] fix disable get for sheet --- aggregators/magpie/index.ts | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts index da48ee77ce..51cfbe8f12 100644 --- a/aggregators/magpie/index.ts +++ b/aggregators/magpie/index.ts @@ -29,24 +29,24 @@ export async function _fetchURL(url: string, retries: number = 10) { const fetch = async (timestamp: number, _: ChainBlocks, {chain}: FetchOptions): Promise => { const unixTimestamp1 = getTimestampAtStartOfDayUTC(timestamp); const unixTimestamp2 = getUniqStartOfTodayTimestamp(); - if (unixTimestamp1 < unixTimestamp2) { - const url = `https://script.google.com/macros/s/AKfycbxqWlzQQzpG-KVGVpVLPafPljYkXejEAJ7TpQc8iBaHuvvu5jx5BnRFYEfQu0pqK5j_-Q/exec?timestamp=${unixTimestamp1.toString()}`; - const data = await _fetchURL(url, 10); - const chainData = data.result.rows.find((row: any) => chainsMap[row.chain] === chain); - if (chainData === undefined) { - return { - dailyVolume: 0, - timestamp: unixTimestamp2, - }; - } else { - return { - dailyVolume: chainData.dailyVolume, - timestamp: unixTimestamp2, - }; - } - } else { + // if (unixTimestamp1 < unixTimestamp2) { + // const url = `https://script.google.com/macros/s/AKfycbxqWlzQQzpG-KVGVpVLPafPljYkXejEAJ7TpQc8iBaHuvvu5jx5BnRFYEfQu0pqK5j_-Q/exec?timestamp=${unixTimestamp1.toString()}`; + // const data = await _fetchURL(url, 10); + // const chainData = data.result.rows.find((row: any) => chainsMap[row.chain] === chain); + // if (chainData === undefined) { + // return { + // dailyVolume: 0, + // timestamp: unixTimestamp2, + // }; + // } else { + // return { + // dailyVolume: chainData.dailyVolume, + // timestamp: unixTimestamp2, + // }; + // } + // } else { const url = `https://api.dune.com/api/v1/query/3587739/results?api_key=eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0`; - const data = await fetchUrl(url, 10); + const data = await _fetchURL(url, 10); const chainData = data.result.rows.find((row: any) => chainsMap[row.chain] === chain); if (chainData === undefined) { return { @@ -58,7 +58,7 @@ const fetch = async (timestamp: number, _: ChainBlocks, {chain}: FetchOptions): dailyVolume: chainData.dailyVolume, timestamp: unixTimestamp2, }; - } + // } } }; From ce4cd2532cbb2a9f2f232929d94395c99e8e4903 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 10 Apr 2024 14:23:24 +0000 Subject: [PATCH 0319/1590] fix adapter --- dexs/increment-protocol/index.ts | 43 ++++++++++---------------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/dexs/increment-protocol/index.ts b/dexs/increment-protocol/index.ts index 01730b2b9a..41ab1dabfd 100644 --- a/dexs/increment-protocol/index.ts +++ b/dexs/increment-protocol/index.ts @@ -5,23 +5,13 @@ const subgraphUrl = const volumeQuery = gql` query volumeQuery($endTimestamp: Int!) { - markets { - hourlyCandles( - orderBy: openTimestamp - orderDirection: desc - first: 24 - where: { openTimestamp_lte: $endTimestamp } - ) { - volume - } - dailyCandles( - orderBy: openTimestamp - orderDirection: desc - first: 1000 - where: { openTimestamp_lte: $endTimestamp } - ) { - volume - } + dailyCandles( + orderBy: openTimestamp + orderDirection: desc + first: 24 + where: { openTimestamp: $endTimestamp } + ) { + volume } } `; @@ -29,23 +19,16 @@ const volumeQuery = gql` export default { adapter: { era: { - fetch: async ({ endTimestamp }) => { + fetch: async (_t: any, _c: any, { endTimestamp }) => { const volumeData = await request(subgraphUrl, volumeQuery, { endTimestamp: endTimestamp ?? Math.floor(Date.now() / 1000) }); let dailyVolume = 0; - let totalVolume = 0; - for (const market of volumeData.markets) { - dailyVolume += market.hourlyCandles.reduce( - (acc, { volume }) => acc + volume * 10 ** -18, - 0 - ); - totalVolume += market.dailyCandles.reduce( - (acc, { volume }) => acc + volume * 10 ** -18, - 0 - ); - } - return { dailyVolume, totalVolume }; + dailyVolume += volumeData.dailyCandles.reduce( + (acc, { volume }) => acc + volume * 10 ** -18, + 0 + ); + return { dailyVolume }; }, start: 1710004200 // 2024-03-09 09:10 } From 3ac341fbf0f18a98d8f56342aeef370ffa0221b3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 10 Apr 2024 14:29:03 +0000 Subject: [PATCH 0320/1590] fix starttime increment-protocol --- dexs/increment-protocol/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/increment-protocol/index.ts b/dexs/increment-protocol/index.ts index 41ab1dabfd..5b03779bc4 100644 --- a/dexs/increment-protocol/index.ts +++ b/dexs/increment-protocol/index.ts @@ -30,7 +30,7 @@ export default { ); return { dailyVolume }; }, - start: 1710004200 // 2024-03-09 09:10 + start: 1710720000 } } }; From a515b1d0b36ea1780a38cd2fe4c4eadd45e7e649 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 10 Apr 2024 14:29:52 +0000 Subject: [PATCH 0321/1590] fix type --- dexs/increment-protocol/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dexs/increment-protocol/index.ts b/dexs/increment-protocol/index.ts index 5b03779bc4..95df7609ec 100644 --- a/dexs/increment-protocol/index.ts +++ b/dexs/increment-protocol/index.ts @@ -23,8 +23,7 @@ export default { const volumeData = await request(subgraphUrl, volumeQuery, { endTimestamp: endTimestamp ?? Math.floor(Date.now() / 1000) }); - let dailyVolume = 0; - dailyVolume += volumeData.dailyCandles.reduce( + const dailyVolume = volumeData.dailyCandles.reduce( (acc, { volume }) => acc + volume * 10 ** -18, 0 ); From 5e359fc1a5f65d04c8f2506418c69e4bf0232626 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 10 Apr 2024 15:11:15 +0000 Subject: [PATCH 0322/1590] fix version --- fees/equalizer-exchange.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/equalizer-exchange.ts b/fees/equalizer-exchange.ts index f461759b82..858278a33a 100644 --- a/fees/equalizer-exchange.ts +++ b/fees/equalizer-exchange.ts @@ -6,6 +6,7 @@ const VOTER_ADDRESS = '0xE3D1A117dF7DCaC2eB0AC8219341bAd92f18dAC1'; const FACTORY_ADDRESS = '0xc6366EFD0AF1d09171fe0EBF32c7943BB310832a'; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.FANTOM]: { fetch: getFeesExport({ VOTER_ADDRESS, FACTORY_ADDRESS }), @@ -14,4 +15,4 @@ const adapter: SimpleAdapter = { } }; -export default adapter; \ No newline at end of file +export default adapter; From 20006025037c5d07e9691b35de06297865568a39 Mon Sep 17 00:00:00 2001 From: Krugo-D Date: Thu, 11 Apr 2024 19:18:44 +0700 Subject: [PATCH 0323/1590] update graph version --- dexs/lynex-v1/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/lynex-v1/index.ts b/dexs/lynex-v1/index.ts index 5500411e3f..e73311b003 100644 --- a/dexs/lynex-v1/index.ts +++ b/dexs/lynex-v1/index.ts @@ -4,7 +4,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter( { [CHAIN.LINEA]: - "https://api.studio.thegraph.com/query/59052/lynex-v1/v0.0.4", + "https://api.studio.thegraph.com/query/59052/lynex-v1/v0.1.0", }, { factoriesName: "factories", From 6b1ec445503c7c224c4f97a8b8dd81edf707de1f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Apr 2024 12:34:42 +0000 Subject: [PATCH 0324/1590] fix function get volume --- dexs/lynex-v1/index.ts | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/dexs/lynex-v1/index.ts b/dexs/lynex-v1/index.ts index e73311b003..6316ff536b 100644 --- a/dexs/lynex-v1/index.ts +++ b/dexs/lynex-v1/index.ts @@ -1,19 +1,32 @@ +import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter( - { - [CHAIN.LINEA]: - "https://api.studio.thegraph.com/query/59052/lynex-v1/v0.1.0", +const graphqlV3 = getChainVolume({ + graphUrls: { + [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/59052/lynex-v1/v0.0.4", }, - { - factoriesName: "factories", - dayData: "dayData", - dailyVolume: "dailyVolumeUSD", - totalVolume: "totalVolumeUSD", - } -); + totalVolume: { + factory: "factories", + field: "totalVolumeUSD", + }, + dailyVolume: { + factory: "dayData", + field: "dailyVolumeUSD", + dateField: "date" + }, + hasDailyVolume: true, +}); + + +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.LINEA]: { + fetch: graphqlV3(CHAIN.LINEA), + start: 1707620640, + }, + }, + version: 2, +} -// New v1 factory contract created at block 2202427 = UNIX timestamp 1707620640 -adapters.adapter.linea.start = 1707620640; export default adapters; From 4b1488e682a4902c2c7a6ba6998ec3105e31a987 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Apr 2024 13:08:04 +0000 Subject: [PATCH 0325/1590] fix missing rebase --- dexs/lynex-v1/index.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dexs/lynex-v1/index.ts b/dexs/lynex-v1/index.ts index 6316ff536b..b39e01e723 100644 --- a/dexs/lynex-v1/index.ts +++ b/dexs/lynex-v1/index.ts @@ -4,7 +4,7 @@ import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; const graphqlV3 = getChainVolume({ graphUrls: { - [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/59052/lynex-v1/v0.0.4", + [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/59052/lynex-v1/v0.1.0", }, totalVolume: { factory: "factories", @@ -14,8 +14,7 @@ const graphqlV3 = getChainVolume({ factory: "dayData", field: "dailyVolumeUSD", dateField: "date" - }, - hasDailyVolume: true, + } }); From f4bf6d5994fc1fedb1e71092adc870b93ffca0e0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Apr 2024 13:38:15 +0000 Subject: [PATCH 0326/1590] fix error the graph --- dexs/metavault-v3/index.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dexs/metavault-v3/index.ts b/dexs/metavault-v3/index.ts index 0a529b07f6..bf5329928c 100644 --- a/dexs/metavault-v3/index.ts +++ b/dexs/metavault-v3/index.ts @@ -1,11 +1,10 @@ import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; -import { BreakdownAdapter } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions } from "../../adapters/types"; const endpointsV3 = { - [CHAIN.LINEA]: - "https://linea-graph-node.metavault.trade/subgraphs/name/metavault/v3", + // [CHAIN.LINEA]: "https://linea-graph-node.metavault.trade/subgraphs/name/metavault/v3", [CHAIN.SCROLL]: "https://api.studio.thegraph.com/query/55804/metavault-v3/version/latest", }; From 753b0e8b7e0fdee2941a3a2dab2d6b60a0b8c005 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Apr 2024 13:57:38 +0000 Subject: [PATCH 0327/1590] fix uniswap and remove log --- fees/Omnidrome/bribes.ts | 82 +------------------------------------- protocols/uniswap/index.ts | 4 +- 2 files changed, 4 insertions(+), 82 deletions(-) diff --git a/fees/Omnidrome/bribes.ts b/fees/Omnidrome/bribes.ts index 9bcf65df5a..bfea32d53a 100644 --- a/fees/Omnidrome/bribes.ts +++ b/fees/Omnidrome/bribes.ts @@ -1,5 +1,4 @@ import * as sdk from "@defillama/sdk"; -import { getPrices } from "../../utils/prices"; import { ethers } from "ethers"; import { CHAIN } from "../../helpers/chains"; import { FetchOptions } from "../../adapters/types"; @@ -9,19 +8,11 @@ const event_notify_reward = const event_geuge_created = "event GaugeCreated(address indexed poolFactory,address indexed votingRewardsFactory,address indexed gaugeFactory,address pool,address bribeVotingReward,address feeVotingReward,address gauge,address creator)"; -// const topic0_geuge_created = -// "0xef9f7d1ffff3b249c6b9bf2528499e935f7d96bb6d6ec4e7da504d1d3c6279e1"; const contract_interface = new ethers.Interface([ event_notify_reward, event_geuge_created, ]); -// type TPrice = { -// [s: string]: { -// price: number; -// decimals: number; -// }; -// }; interface ILog { data: string; @@ -29,13 +20,6 @@ interface ILog { topics: string[]; } -// interface IBribes { -// token: string; -// name: string; -// symbol: string; -// decimals: number; -// amount: number; -// } const lphelper = "0x11D66FF243715169d6C14865E18fcc30d3557830"; const factory = "0x769d1BcB5FDf30F5a9D19f1ab8A3cF8b60a6e855"; @@ -48,9 +32,6 @@ const abis: any = { export const fees_bribes = async ( fetchOptions: FetchOptions - // fromBlock: number, - // toBlock: number, - // timestamp: number ): Promise => { let poolsArr: any[] = []; const allPoolsLength = Number( @@ -82,21 +63,12 @@ export const fees_bribes = async ( poolsArr = [...poolsArr, ...pools4page]; } } - console.log(poolsArr); + const bribeVotingReward: string[] = poolsArr .map((e: any) => { return e[4].bribeAddress; }) .filter((e: string) => e !== ZERO_ADDRESS); - - // const bribeVotingReward: string[] = (await sdk.api2.abi.call({ - // target: lphelper, - // params: [1, 1000, "0x769d1BcB5FDf30F5a9D19f1ab8A3cF8b60a6e855", '0x0000000000000000000000000000000000000000'], - // abi: abis.getLPDetailsPaginated, - // chain: CHAIN.ZETA, - // })).map((e: any) => { - // return e[4].bribeAddress; - // }).filter((e: string) => e !== ZERO_ADDRESS); const bribe_contracct = [...new Set(bribeVotingReward)]; const logs: ILog[] = await fetchOptions.getLogs({ targets: bribe_contracct, @@ -110,54 +82,4 @@ export const fees_bribes = async ( return { dailyBribesRevenue: dailyBribesRevenue }; - // const logs: ILog[] = ( - // await Promise.all( - // bribe_contracct.map((address: string) => - // sdk.getEventLogs({ - // target: address, - // toBlock: toBlock, - // fromBlock: fromBlock, - // chain: CHAIN.ZETA, - // topics: [ - // "0x52977ea98a2220a03ee9ba5cb003ada08d394ea10155483c95dc2dc77a7eb24b", - // ], - // }) - // ) - // ) - // ).flat() as ILog[]; - - // const logs_bribes = logs.map((e: ILog) => { - // const value = contract_interface.parseLog(e); - // return { - // token: value!.args.reward, - // amount: Number(value!.args.amount), - // } as IBribes; - // }); - // const coins = [ - // ...new Set( - // logs_bribes.map((e: IBribes) => `${CHAIN.ZETA}:${e.token.toLowerCase()}`) - // ), - // ]; - // const coins_split: string[][] = []; - // for (let i = 0; i < coins.length; i += 100) { - // coins_split.push(coins.slice(i, i + 100)); - // } - // const prices_result: any = ( - // await Promise.all(coins_split.map((a: string[]) => getPrices(a, timestamp))) - // ) - // .flat() - // .flat() - // .flat(); - // const prices: TPrice = Object.assign({}, {}); - // prices_result.map((a: any) => Object.assign(prices, a)); - // const fees_bribes_usd = logs_bribes - // .map((e: IBribes) => { - // const price = - // prices[`${CHAIN.ZETA}:${e.token.toLowerCase()}`]?.price || 0; - // const decimals = - // prices[`${CHAIN.ZETA}:${e.token.toLowerCase()}`]?.decimals || 0; - // return (Number(e.amount) / 10 ** decimals) * price; - // }) - // .reduce((a: number, b: number) => a + b, 0); - // return fees_bribes_usd; -}; +} diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index e2004f32aa..620f42d2d3 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -67,10 +67,10 @@ const v3Endpoints = { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3", [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optmism-regen", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/id/QmZ5uwhnwsJXAQGYEF8qKPQ85iVhYAcVZcZAPfrF7ZNb9z", - [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/"+KEY+"/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm", + // [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/"+KEY+"/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm", [CHAIN.CELO]: "https://api.thegraph.com/subgraphs/name/jesse-sawa/uniswap-celo", [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-bsc", - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-avax", + // [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-avax", [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-base", [CHAIN.ERA]: "https://api.thegraph.com/subgraphs/name/freakyfractal/uniswap-v3-zksync-era" }; From e5adf5defd4c333ed74e11d24450515b833d164f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Apr 2024 14:02:53 +0000 Subject: [PATCH 0328/1590] error the graph --- fees/keom.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/fees/keom.ts b/fees/keom.ts index 9088f3a82b..117b245c50 100644 --- a/fees/keom.ts +++ b/fees/keom.ts @@ -31,17 +31,17 @@ const graphs = (graphUrls: ChainEndpoints) => { const graphRes = await request(graphUrls[chain], graphQuery); - const totalFee = new BigNumber( - graphRes.financialsDailySnapshot.cumulativeTotalRevenueUSD + const totalFee = Number( + graphRes.financialsDailySnapshot?.cumulativeTotalRevenueUSD || '0' ); - const dailyFee = new BigNumber( - graphRes.financialsDailySnapshot.dailyTotalRevenueUSD + const dailyFee = Number( + graphRes.financialsDailySnapshot?.dailyTotalRevenueUSD || '0' ); - const totalRev = new BigNumber( - graphRes.financialsDailySnapshot.cumulativeProtocolSideRevenueUSD + const totalRev = Number( + graphRes.financialsDailySnapshot?.cumulativeProtocolSideRevenueUSD || '0' ); - const dailyRev = new BigNumber( - graphRes.financialsDailySnapshot.dailyProtocolSideRevenueUSD + const dailyRev = Number( + graphRes.financialsDailySnapshot?.dailyProtocolSideRevenueUSD || '0' ); return { @@ -61,10 +61,10 @@ const adapter: Adapter = { fetch: graphs(endpoints)(CHAIN.POLYGON), start: 1699520408, }, - [CHAIN.POLYGON_ZKEVM]: { - fetch: graphs(endpoints)(CHAIN.POLYGON_ZKEVM), - start: 1679921168, - }, + // [CHAIN.POLYGON_ZKEVM]: { + // fetch: graphs(endpoints)(CHAIN.POLYGON_ZKEVM), // error the graph is not available + // start: 1679921168, + // }, [CHAIN.MANTA]: { fetch: graphs(endpoints)(CHAIN.MANTA), start: 1698838028, @@ -72,4 +72,4 @@ const adapter: Adapter = { }, }; -export default adapter; \ No newline at end of file +export default adapter; From 9f493599145c8aeedecd53c51ad133bd5acc1896 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Apr 2024 14:06:02 +0000 Subject: [PATCH 0329/1590] disable era chain --- dexs/wagmi/index.ts | 8 ++++---- fees/wagmi/index.ts | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/dexs/wagmi/index.ts b/dexs/wagmi/index.ts index b3b8ea0c0a..49004ea9e5 100644 --- a/dexs/wagmi/index.ts +++ b/dexs/wagmi/index.ts @@ -4,10 +4,10 @@ import { fetchVolume } from "./wagmi"; const adapter: SimpleAdapter = { adapter: { - [CHAIN.ERA]: { - fetch: fetchVolume(CHAIN.ERA), - start: 1681257600, - }, + // [CHAIN.ERA]: { + // fetch: fetchVolume(CHAIN.ERA), error: "Wagmi does not exist on Era", + // start: 1681257600, + // }, [CHAIN.FANTOM]: { fetch: fetchVolume(CHAIN.FANTOM), start: 1681257600, diff --git a/fees/wagmi/index.ts b/fees/wagmi/index.ts index 8694c7f5f0..6011d5191c 100644 --- a/fees/wagmi/index.ts +++ b/fees/wagmi/index.ts @@ -12,13 +12,13 @@ const methodology = { const adapter: SimpleAdapter = { adapter: { - [CHAIN.ERA]: { - fetch: fetchFee(CHAIN.ERA), - start: 1681257600, - meta: { - methodology, - }, - }, + // [CHAIN.ERA]: { + // fetch: fetchFee(CHAIN.ERA), + // start: 1681257600, + // meta: { + // methodology, + // }, + // }, [CHAIN.FANTOM]: { fetch: fetchFee(CHAIN.FANTOM), start: 1681257600, From 778a9f3ad9da234dba913b033c07d54120cf4413 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Apr 2024 14:18:50 +0000 Subject: [PATCH 0330/1590] fix error adapter --- fees/blazebot.ts | 6 ++++-- fees/kperp-exchange.ts | 2 +- fees/merlin.ts | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fees/blazebot.ts b/fees/blazebot.ts index a192cb198e..698632b886 100644 --- a/fees/blazebot.ts +++ b/fees/blazebot.ts @@ -1,7 +1,8 @@ -import { Adapter, ChainBlocks, FetchOptions, FetchResultFees } from "../adapters/types"; +import { Adapter, ChainBlocks, DISABLED_ADAPTER_KEY, FetchOptions, FetchResultFees } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; import { request, } from "graphql-request"; +import disabledAdapter from "../helpers/disabledAdapter"; type TEndpoint = { [s: Chain | string]: string; @@ -37,8 +38,9 @@ const graphs = (chain: Chain) => { const adapter: Adapter = { adapter: { + [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.BASE]: { - fetch: graphs(CHAIN.BASE), + fetch: async (timestamp: number) => {return{timestamp}}, start: 1694131200, }, } diff --git a/fees/kperp-exchange.ts b/fees/kperp-exchange.ts index 7309b904f5..62ee4e645e 100644 --- a/fees/kperp-exchange.ts +++ b/fees/kperp-exchange.ts @@ -47,7 +47,7 @@ const adapter: Adapter = { adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.KAVA]: { - fetch: graphs(endpoints)(CHAIN.KAVA), + fetch: async (timestamp: number) => {return{timestamp}}, start: 2578000, meta: { methodology: 'All mint, burn, marginAndLiquidation and swap fees are collected and the daily fee amount is determined. Daily revenue is calculated as 30% of the total fee.' diff --git a/fees/merlin.ts b/fees/merlin.ts index 12f3aabbf3..45ba2aaef4 100644 --- a/fees/merlin.ts +++ b/fees/merlin.ts @@ -55,7 +55,7 @@ const adapter: Adapter = { adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.ERA]: { - fetch: fetch(CHAIN.ERA), + fetch: async (timestamp: number) => {return{timestamp}}, start: 1680274800, }, }, From 1ee7259d3ea81057583d290004dbb5322340a26a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Apr 2024 15:18:24 +0000 Subject: [PATCH 0331/1590] disable miaswap --- dexs/miaswap/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dexs/miaswap/index.ts b/dexs/miaswap/index.ts index da01785875..d726bb852d 100644 --- a/dexs/miaswap/index.ts +++ b/dexs/miaswap/index.ts @@ -1,5 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { DISABLED_ADAPTER_KEY, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import disabledAdapter from "../../helpers/disabledAdapter"; import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; const v3Endpoints = { @@ -36,8 +37,9 @@ const v3Graphs = getGraphDimensions({ const adapter: SimpleAdapter = { version: 2, adapter: { + [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.ONUS]: { - fetch: v3Graphs(CHAIN.ONUS), + fetch: async (timestamp: number) => { return { timestamp } }, start: 1685577600, }, }, From de96ce6504672934b2e9f17641afc9e5f97bdbc6 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 11 Apr 2024 18:01:06 +0200 Subject: [PATCH 0332/1590] add more subgraphs for sushiswap --- dexs/sushiswap/classic.ts | 2 ++ dexs/sushiswap/v3.ts | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index 7130c329dd..a3a10c411a 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -66,6 +66,8 @@ const endpointsClassic = { // [CHAIN.MOONBEAM]: 'https://api.thegraph.com/subgraphs/name/sushiswap/exchange-moonbeam', [CHAIN.BOBA]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/sushiswap-boba', [CHAIN.FUSE]: 'https://api.thegraph.com/subgraphs/name/sushiswap/exchange-fuse', + [CHAIN.CORE]: 'https://thegraph.coredao.org/subgraphs/name/sushi-v2/sushiswap-core', + [CHAIN.BLAST]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/sushiswap-blast/gn', }; const VOLUME_FIELD = "volumeUSD"; diff --git a/dexs/sushiswap/v3.ts b/dexs/sushiswap/v3.ts index b3bac22b94..d267020757 100644 --- a/dexs/sushiswap/v3.ts +++ b/dexs/sushiswap/v3.ts @@ -1,7 +1,6 @@ import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; -import { Adapter, SimpleAdapter } from "../../adapters/types"; const endpointsV3 = { [CHAIN.ARBITRUM_NOVA]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v3/v3-arbitrum-nova', @@ -18,7 +17,9 @@ const endpointsV3 = { [CHAIN.POLYGON]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-polygon', [CHAIN.POLYGON_ZKEVM]: 'https://api.studio.thegraph.com/query/32073/v3-polygon-zkevm/v0.0.2', [CHAIN.THUNDERCORE]: 'https://graph-node.thundercore.com/subgraphs/name/sushi-v3/v3-thundercore', - [CHAIN.BASE]: "https://api.studio.thegraph.com/query/32073/v3-base/v0.0.1" + [CHAIN.BASE]: "https://api.studio.thegraph.com/query/32073/v3-base/v0.0.1", + [CHAIN.CORE]: "https://thegraph.coredao.org/subgraphs/name/sushi-v3/v3-core", + [CHAIN.BLAST]: "https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/v3-blast/gn", } const v3Graphs = getGraphDimensions({ From f181d78729e27a6133a6b97818ae8e50841dfbef Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Apr 2024 16:31:41 +0000 Subject: [PATCH 0333/1590] fix api --- dexs/rollup-finace/index.ts | 39 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/dexs/rollup-finace/index.ts b/dexs/rollup-finace/index.ts index e54ab18b66..19834d5916 100644 --- a/dexs/rollup-finace/index.ts +++ b/dexs/rollup-finace/index.ts @@ -1,7 +1,9 @@ import request, { gql } from "graphql-request"; -import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, DISABLED_ADAPTER_KEY, Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import disabledAdapter from "../../helpers/disabledAdapter"; +import { httpGet } from "../../utils/fetchURL"; const endpoints: { [key: string]: string } = { [CHAIN.ERA]: "https://subgraph.rollup.finance/subgraphs/name/rollUp/stats", @@ -25,41 +27,24 @@ const historicalDataDerivatives = gql` ` interface IGraphResponse { - volumeStats: Array<{ + list: Array<{ burn: string, liquidation: string, margin: string, mint: string, swap: string, + period: string }> } -const getFetch = (query: string)=> (chain: string): Fetch => async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000))) - const fromTimestamp = dayTimestamp - 60 * 60 * 24 - const dailyData: IGraphResponse = await request(endpoints[chain], query, { - id: String(dayTimestamp), - period: 'daily', - }) - const yesterDay: IGraphResponse = await request(endpoints[chain], query, { - id: String(fromTimestamp), - period: 'daily', - }) - const totalData: IGraphResponse = await request(endpoints[chain], query, { - id: 'total', - period: 'total', - }) - const todayVolume = Number(Object.values(dailyData.volumeStats[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30 - const yesterdayVolume = Number(Object.values(yesterDay.volumeStats[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30 - const dailyVolume = (todayVolume - yesterdayVolume); +const fetchDerivatives = async (timestamp: number) => { + const data: IGraphResponse = (await httpGet("https://terminal.rollup.finance/analy-v1/analytics/volume?pageNum=1&pageSize=32")).data + const dataItem = data.list.find((e) => e.period === getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)).toString()) + const dailyVolume = Number(dataItem?.liquidation || 0) + Number(dataItem?.margin || 0) return { - timestamp: dayTimestamp, - dailyVolume: `${dailyVolume}`, - totalVolume: - totalData.volumeStats.length == 1 - ? String(Number(Object.values(totalData.volumeStats[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30) - : undefined, + dailyFees: dailyVolume.toString(), + timestamp } } @@ -82,7 +67,7 @@ const adapter: BreakdownAdapter = { return { ...acc, [chain]: { - fetch: getFetch(historicalDataDerivatives)(chain), + fetch: fetchDerivatives, start: startTimestamps[chain] } } From eafcd5218335b5e9eec0896a904fc91581eb610c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Apr 2024 16:37:01 +0000 Subject: [PATCH 0334/1590] fix missing startime --- dexs/sushiswap/v3.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dexs/sushiswap/v3.ts b/dexs/sushiswap/v3.ts index d267020757..fa3fbfc08b 100644 --- a/dexs/sushiswap/v3.ts +++ b/dexs/sushiswap/v3.ts @@ -58,6 +58,8 @@ const startTimeV3: {[key: string]: number} = { [CHAIN.POLYGON_ZKEVM]: 1680739200, [CHAIN.THUNDERCORE]: 1684281600, [CHAIN.BASE]: 1691020800, + [CHAIN.CORE]: 1689897600, + [CHAIN.BLAST]: 1709337600, } const v3 = Object.keys(endpointsV3).reduce( From 5c53c4e90d5ba8ec4608c5ad1bab6e6f054f5bdf Mon Sep 17 00:00:00 2001 From: Tomachi Anura Date: Fri, 12 Apr 2024 11:55:16 +0200 Subject: [PATCH 0335/1590] completed dimension adapter for hsuite-dex --- dexs/hbarsuite-dex/index.ts | 49 +++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/dexs/hbarsuite-dex/index.ts b/dexs/hbarsuite-dex/index.ts index 9fa74391f9..a0083a14dc 100644 --- a/dexs/hbarsuite-dex/index.ts +++ b/dexs/hbarsuite-dex/index.ts @@ -3,6 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import axios from "axios"; import asyncRetry from "async-retry"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +const BigNumber = require("bignumber.js"); /* * HbarSuite is a decentralized network of features built on Hedera Hashgraph. @@ -29,16 +30,17 @@ const nodes = [ ] interface IHbarSuiteVolumes { - allTimeVolume: number - allTimeVolumesByPools: Array<{ - pool_id: string - pool_name: string - volume: number - }> - dailyVolumes: Array<{ - timestamp: number - volume: number - }> + ticker: string + pool: string + daily: string + total: string +} + +const methodology = { + UserFees: "User pays 0.3% fees on each swap.", + ProtocolRevenue: "Liquidity Providers earn a fixed APR in HSUITE tokens.", + Revenue: "All revenue generated comes from user fees.", + Fees: "All fees comes from the user." } const fetch = async (timestamp: number) => { @@ -47,30 +49,35 @@ const fetch = async (timestamp: number) => { // generating a random number, so to grab a random smart-node from the network.. let randomNode = nodes[Math.floor(Math.random() * nodes.length)]; - // fetching the HBAR price from coingecko.. - let price_feed = await asyncRetry(async() => await axios.get( - 'https://api.coingecko.com/api/v3/simple/price?ids=hedera-hashgraph&vs_currencies=usd' - )); - - let volumes: IHbarSuiteVolumes = (await asyncRetry(async() => await axios.get( - `${randomNode}/pools/volumes` + let volumesForPools: Array = (await asyncRetry(async() => await axios.get( + `${randomNode}/dex/analytics/volumes` ))).data; - let dailyVolume = volumes.dailyVolumes.find((volume) => volume.timestamp >= dayTimestamp); + let dailyVolumes = volumesForPools.reduce((acc, pool) => { + acc = new BigNumber(acc).plus(pool.daily); + return acc; + }, "0"); + + let allTimeVolumes = volumesForPools.reduce((acc, pool) => { + acc = new BigNumber(acc).plus(pool.total); + return acc; + }, "0"); return { - totalVolume: (volumes.allTimeVolume * price_feed.data['hedera-hashgraph'].usd).toString(), - dailyVolume: dailyVolume ? (dailyVolume.volume * price_feed.data['hedera-hashgraph'].usd).toString() : "0", + totalVolume: allTimeVolumes.toString(), + dailyVolume: dailyVolumes.toString(), timestamp: dayTimestamp }; }; - const adapter: SimpleAdapter = { adapter: { [CHAIN.HEDERA]: { fetch, start: async () => 1672531200, + meta: { + methodology + } }, }, }; From d3466d6a8872d657925977f857eda509006ce187 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 12 Apr 2024 13:23:58 +0000 Subject: [PATCH 0336/1590] add flag run current time --- dexs/hbarsuite-dex/index.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/dexs/hbarsuite-dex/index.ts b/dexs/hbarsuite-dex/index.ts index a0083a14dc..0b05f6c925 100644 --- a/dexs/hbarsuite-dex/index.ts +++ b/dexs/hbarsuite-dex/index.ts @@ -7,13 +7,13 @@ const BigNumber = require("bignumber.js"); /* * HbarSuite is a decentralized network of features built on Hedera Hashgraph. - * It is a suite of products that are built on top of the layer 1, + * It is a suite of products that are built on top of the layer 1, * relying on the security and speed of the Hedera network. - * - * HbarSute Network relies entirely on HCS (Hedera Consensus Service) for its data storage, + * + * HbarSute Network relies entirely on HCS (Hedera Consensus Service) for its data storage, * and HFS (Hedera File Service) for its file storage. - * - * It also uses NFTs (Non-Fungible Tokens) to represent the Liquidity Providers' shares in the pools, + * + * It also uses NFTs (Non-Fungible Tokens) to represent the Liquidity Providers' shares in the pools, * storing the data on IPFS. */ @@ -45,7 +45,7 @@ const methodology = { const fetch = async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - + // generating a random number, so to grab a random smart-node from the network.. let randomNode = nodes[Math.floor(Math.random() * nodes.length)]; @@ -77,7 +77,8 @@ const adapter: SimpleAdapter = { start: async () => 1672531200, meta: { methodology - } + }, + runAtCurrTime: true }, }, }; From 085ba3733d8a475bbd01874f4a32816f3083af6e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 12 Apr 2024 14:42:27 +0000 Subject: [PATCH 0337/1590] add merchant-moe-liquidity-book --- dexs/merchant-moe-liquidity-book/index.ts | 47 +++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 dexs/merchant-moe-liquidity-book/index.ts diff --git a/dexs/merchant-moe-liquidity-book/index.ts b/dexs/merchant-moe-liquidity-book/index.ts new file mode 100644 index 0000000000..5240738b56 --- /dev/null +++ b/dexs/merchant-moe-liquidity-book/index.ts @@ -0,0 +1,47 @@ +import { ChainBlocks, FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; +import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; + +const endpointsV2 = { + [CHAIN.MANTLE]: "https://barn.merchantmoe.com/v1/lb/dex/analytics/mantle?startTime=1712844491&aggregateBy=daily" +} + +interface IData { + feesUsd: number; + protocolFeesUsd: number; + volumeUsd: number; + timestamp: number; +} + +const graph = async (timestamp: number, _c: ChainBlocks, { chain }: FetchOptions): Promise => { + const dayTimestamp = getTimestampAtStartOfDayUTC(timestamp) + const historical: IData[] = (await httpGet(endpointsV2[chain])); + const dailyFees = historical + .find(dayItem => dayItem.timestamp === dayTimestamp)?.feesUsd || 0 + const dailyRevenue = historical + .find(dayItem => dayItem.timestamp === dayTimestamp)?.protocolFeesUsd || 0 + const dailyVolume = historical + .find(dayItem => dayItem.timestamp === dayTimestamp)?.volumeUsd || 0 + return { + dailyVolume:`${dailyVolume}`, + dailyUserFees: `${dailyFees}`, + dailyFees: `${dailyFees}`, + dailyRevenue: `${dailyRevenue}`, + dailyHoldersRevenue: `${dailyRevenue}`, + dailySupplySideRevenue: dailyFees ? `${(dailyFees || 0) - (dailyRevenue || 0)}` : undefined, + dailyProtocolRevenue: `${dailyRevenue}`, + timestamp + } + +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.MANTLE]: { + fetch: graph, + start: 1709251200 + } + } +} +export default adapter From a59802779e997849acc9e71cde98b52958f2bdf1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 12 Apr 2024 14:43:26 +0000 Subject: [PATCH 0338/1590] restuck --- {dexs => protocols}/merchant-moe-liquidity-book/index.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {dexs => protocols}/merchant-moe-liquidity-book/index.ts (100%) diff --git a/dexs/merchant-moe-liquidity-book/index.ts b/protocols/merchant-moe-liquidity-book/index.ts similarity index 100% rename from dexs/merchant-moe-liquidity-book/index.ts rename to protocols/merchant-moe-liquidity-book/index.ts From a38fc01a567d4fbd8240203ff5d89d2ab87a725a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 12 Apr 2024 14:45:36 +0000 Subject: [PATCH 0339/1590] fix time --- protocols/merchant-moe-liquidity-book/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protocols/merchant-moe-liquidity-book/index.ts b/protocols/merchant-moe-liquidity-book/index.ts index 5240738b56..203c1511e4 100644 --- a/protocols/merchant-moe-liquidity-book/index.ts +++ b/protocols/merchant-moe-liquidity-book/index.ts @@ -14,8 +14,8 @@ interface IData { timestamp: number; } -const graph = async (timestamp: number, _c: ChainBlocks, { chain }: FetchOptions): Promise => { - const dayTimestamp = getTimestampAtStartOfDayUTC(timestamp) +const graph = async (timestamp: number, _c: ChainBlocks, { chain, startOfDay }: FetchOptions): Promise => { + const dayTimestamp = getTimestampAtStartOfDayUTC(startOfDay) const historical: IData[] = (await httpGet(endpointsV2[chain])); const dailyFees = historical .find(dayItem => dayItem.timestamp === dayTimestamp)?.feesUsd || 0 From 0667749e0995b1c458fdc5fc29787a13b6a39cad Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 12 Apr 2024 14:54:04 +0000 Subject: [PATCH 0340/1590] fix starttime --- protocols/merchant-moe-liquidity-book/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/merchant-moe-liquidity-book/index.ts b/protocols/merchant-moe-liquidity-book/index.ts index 203c1511e4..e96780787b 100644 --- a/protocols/merchant-moe-liquidity-book/index.ts +++ b/protocols/merchant-moe-liquidity-book/index.ts @@ -40,7 +40,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.MANTLE]: { fetch: graph, - start: 1709251200 + start: 1711929600 } } } From 7a9b59424280bccbacfade95ccaba37bb9bdf0f8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 12 Apr 2024 14:59:06 +0000 Subject: [PATCH 0341/1590] fix url --- protocols/merchant-moe-liquidity-book/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/merchant-moe-liquidity-book/index.ts b/protocols/merchant-moe-liquidity-book/index.ts index e96780787b..318e2b691f 100644 --- a/protocols/merchant-moe-liquidity-book/index.ts +++ b/protocols/merchant-moe-liquidity-book/index.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; const endpointsV2 = { - [CHAIN.MANTLE]: "https://barn.merchantmoe.com/v1/lb/dex/analytics/mantle?startTime=1712844491&aggregateBy=daily" + [CHAIN.MANTLE]: "https://barn.merchantmoe.com/v1/lb/dex/analytics/mantle?startTime=1711929600&aggregateBy=daily" } interface IData { From 809d9f8cf835594962d926dfa7d7ed262966eea4 Mon Sep 17 00:00:00 2001 From: Danylo Moshenskyi Date: Fri, 12 Apr 2024 17:28:55 +0200 Subject: [PATCH 0342/1590] etaswap --- aggregators/etaswap/index.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 aggregators/etaswap/index.ts diff --git a/aggregators/etaswap/index.ts b/aggregators/etaswap/index.ts new file mode 100644 index 0000000000..796d88e79a --- /dev/null +++ b/aggregators/etaswap/index.ts @@ -0,0 +1,25 @@ +import axios from "axios" +import BigNumber from "bignumber.js"; +import { CHAIN } from "../../helpers/chains"; + +const fetchLogs = async (timestamp: number) => { + const res = await axios.get(`https://api.etaswap.com/v1/statistics/volume/total?timestamp=${timestamp}`); + return { + dailyVolume: new BigNumber(res.data.volume_USD_24h).div(100).toFixed(2), + totalVolume: new BigNumber(res.data.volume_USD_total).div(100).toFixed(2), + dailyFees: new BigNumber(res.data.fee_USD_24h).div(100).toFixed(2), + totalFees: new BigNumber(res.data.fee_USD_total).div(100).toFixed(2), + timestamp: timestamp, + }; +}; + +const adapter: any = { + adapter: { + [CHAIN.HEDERA]: { + fetch: fetchLogs, + start: 1709395559, + }, + }, +}; + +export default adapter; From cc3c1d92d3ce5fbbe86fe66181432020173d3c31 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 12 Apr 2024 15:48:21 +0000 Subject: [PATCH 0343/1590] fix use wrap function --- aggregators/etaswap/index.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/aggregators/etaswap/index.ts b/aggregators/etaswap/index.ts index 796d88e79a..a4aea7c301 100644 --- a/aggregators/etaswap/index.ts +++ b/aggregators/etaswap/index.ts @@ -1,14 +1,14 @@ -import axios from "axios" import BigNumber from "bignumber.js"; import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; const fetchLogs = async (timestamp: number) => { - const res = await axios.get(`https://api.etaswap.com/v1/statistics/volume/total?timestamp=${timestamp}`); + const res = await httpGet(`https://api.etaswap.com/v1/statistics/volume/total?timestamp=${timestamp}`); return { - dailyVolume: new BigNumber(res.data.volume_USD_24h).div(100).toFixed(2), - totalVolume: new BigNumber(res.data.volume_USD_total).div(100).toFixed(2), - dailyFees: new BigNumber(res.data.fee_USD_24h).div(100).toFixed(2), - totalFees: new BigNumber(res.data.fee_USD_total).div(100).toFixed(2), + dailyVolume: new BigNumber(res.volume_USD_24h).div(100).toFixed(2), + totalVolume: new BigNumber(res.volume_USD_total).div(100).toFixed(2), + dailyFees: new BigNumber(res.fee_USD_24h).div(100).toFixed(2), + totalFees: new BigNumber(res.fee_USD_total).div(100).toFixed(2), timestamp: timestamp, }; }; From 27a1c726cc8558f6fdad7b9000601ca7e76cbf82 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 13 Apr 2024 09:46:04 +0000 Subject: [PATCH 0344/1590] fix spike volume --- dexs/ipor/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dexs/ipor/index.ts b/dexs/ipor/index.ts index 732b719a25..d56b459fd3 100644 --- a/dexs/ipor/index.ts +++ b/dexs/ipor/index.ts @@ -41,11 +41,13 @@ const fetch: any = async (timestamp: number, _: any, { chain, getLogs, createBal const logsStables = await getLogs({ targets: stables, topic: OpenSwapStablesTopic, eventAbi: openSwapStablesEventAbi }); const logsStETHs = await getLogs({ targets: stETHs, topic: OpenSwapStEthTopic, eventAbi: openSwapStETHEventAbi }); const logs = logsStables.concat(logsStETHs) - logs.forEach(log => { let balance = Number(log.money?.notional || log.amounts?.notional) if (log.asset.toLowerCase() === '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'.toLowerCase()) { - balance = balance / 1e18 + balance = balance / 1e12 + } + if (log.asset.toLowerCase() === '0xdAC17F958D2ee523a2206206994597C13D831ec7'.toLowerCase()) { + balance = balance / 1e10 } dailyNotionalVolume.add(log.asset, balance) }) From 264c1acbdc1d30db1edb25f071c0660f0a31542c Mon Sep 17 00:00:00 2001 From: george-lr Date: Sat, 13 Apr 2024 12:11:43 +0200 Subject: [PATCH 0345/1590] Add Yologames fees and volume --- fees/yologames/index.ts | 134 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 fees/yologames/index.ts diff --git a/fees/yologames/index.ts b/fees/yologames/index.ts new file mode 100644 index 0000000000..d78d46e75a --- /dev/null +++ b/fees/yologames/index.ts @@ -0,0 +1,134 @@ +import { ETHER_ADDRESS } from "@defillama/sdk/build/general"; +import { Adapter, FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { queryIndexer } from "../../helpers/indexer"; + +const fetchVolume = async (options: FetchOptions) => { + const volumeResult: any = await queryIndexer( + ` + SELECT sum(Value) as "value" FROM ( + SELECT b.Value as Value FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE a.contract_address = LOWER('\\x0000000000E14E87e5c80A8A90817308fFF715d3') + AND a.tx_status = 'SUCCESS' + AND a.topics[0] = '\\x73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca' -- yolo deposited + UNION ALL + SELECT b.Value as Value FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE contract_address = LOWER('\\x0000000000E14E87e5c80A8A90817308fFF715d3') + AND tx_status = 'SUCCESS' + AND topics[0] = '\\xa315167fc4200676e8597c5df065fafa8cecfeac15a8e2aded299a649e4a5175' -- yolo multientry + UNION ALL + SELECT b.Value as Value FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE contract_address = LOWER('\\xA56A95F41e64Bc76CDE7423aB2A2ee1763bD8Bcc') + AND tx_status = 'SUCCESS' + AND topics[0] = '\\xe0498ef6c8973f40195b2ced16991e2e7cba0d33e6a5e42a2e7797d156c874a3' -- btc moon + UNION ALL + SELECT b.Value as Value FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE contract_address = LOWER('\\x693B37a9859Ce9465Fb2aAdeB03811a26A0c37C0') + AND tx_status = 'SUCCESS' + AND topics[0] = '\\xe0498ef6c8973f40195b2ced16991e2e7cba0d33e6a5e42a2e7797d156c874a3' -- eth moon + UNION ALL + SELECT b.Value as Value FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE contract_address = LOWER('\\xA56A95F41e64Bc76CDE7423aB2A2ee1763bD8Bcc') + AND tx_status = 'SUCCESS' + AND topics[0] = '\\xd63b8da4d354e3b7b933761d564d3f17070134d43c981eb109c7c35f87932d29' -- btc doom + UNION ALL + SELECT b.Value as Value FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE contract_address = LOWER('\\x693B37a9859Ce9465Fb2aAdeB03811a26A0c37C0') + AND tx_status = 'SUCCESS' + AND topics[0] = '\\xd63b8da4d354e3b7b933761d564d3f17070134d43c981eb109c7c35f87932d29' -- eth doom + UNION ALL + SELECT b.Value as Value FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE contract_address = LOWER('\\x0000000000acc01064aa5280da3f1c41a35827bc') + AND tx_status = 'SUCCESS' + AND topics[0] = '\\x9a711314e8e01b50116aefb9d50edc1a6b06e39986010af70d18671666586d0e' -- ptb rounds entered + ) + WHERE block_time BETWEEN llama_replace_date_range;`, + options + ); + return volumeResult[0].value; +}; + +const fetchFees = async (options: FetchOptions) => { + const volumeResult: any = await queryIndexer( + ` + SELECT sum(Value) as "value" FROM ( + SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE a.contract_address = LOWER('\\x0000000000E14E87e5c80A8A90817308fFF715d3') + AND a.tx_status = 'SUCCESS' + AND a.topics[0] = '\\x73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca' -- yolo deposited + UNION ALL + SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE contract_address = LOWER('\\x0000000000E14E87e5c80A8A90817308fFF715d3') + AND tx_status = 'SUCCESS' + AND topics[0] = '\\xa315167fc4200676e8597c5df065fafa8cecfeac15a8e2aded299a649e4a5175' -- yolo multientry + UNION ALL + SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE contract_address = LOWER('\\xA56A95F41e64Bc76CDE7423aB2A2ee1763bD8Bcc') + AND tx_status = 'SUCCESS' + AND topics[0] = '\\xe0498ef6c8973f40195b2ced16991e2e7cba0d33e6a5e42a2e7797d156c874a3' -- btc moon + UNION ALL + SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE contract_address = LOWER('\\x693B37a9859Ce9465Fb2aAdeB03811a26A0c37C0') + AND tx_status = 'SUCCESS' + AND topics[0] = '\\xe0498ef6c8973f40195b2ced16991e2e7cba0d33e6a5e42a2e7797d156c874a3' -- eth moon + UNION ALL + SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE contract_address = LOWER('\\xA56A95F41e64Bc76CDE7423aB2A2ee1763bD8Bcc') + AND tx_status = 'SUCCESS' + AND topics[0] = '\\xd63b8da4d354e3b7b933761d564d3f17070134d43c981eb109c7c35f87932d29' -- btc doom + UNION ALL + SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a + INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH + WHERE contract_address = LOWER('\\x693B37a9859Ce9465Fb2aAdeB03811a26A0c37C0') + AND tx_status = 'SUCCESS' + AND topics[0] = '\\xd63b8da4d354e3b7b933761d564d3f17070134d43c981eb109c7c35f87932d29' -- eth doom + UNION ALL + SELECT DATE_TRUNC('day', block_timestamp) as day, value as Fee FROM blast.core.fact_traces + WHERE TO_ADDRESS = LOWER('\\x6b86fF7863e27d1C8CCf05dF9cB03b8eFaA52125') + AND FROM_ADDRESS = LOWER('\\x0000000000acc01064aa5280da3f1c41a35827bc') -- PTB + ) + WHERE block_time BETWEEN llama_replace_date_range;`, + options + ); + return volumeResult[0].value; +}; + +const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { + const [volume, fees] = await Promise.all([ + fetchVolume(options), + fetchFees(options), + ]); + console.log(`Volume, fees`, volume, fees); + const dailyFees = options.createBalances(); + const dailyVolume = options.createBalances(); + dailyFees.add(ETHER_ADDRESS, fees); + dailyVolume.add(ETHER_ADDRESS, volume); + return { + dailyFees, + dailyVolume, + timestamp, + }; +} + +const adapter: Adapter = { + adapter: { + [CHAIN.BLAST]: { + fetch, + start: 1709251200, + }, + }, +}; + +export default adapter; From 8bf92bf22d64b5da737f4fc7f6a8b09aeb03e0dc Mon Sep 17 00:00:00 2001 From: george-lr Date: Sat, 13 Apr 2024 15:02:59 +0200 Subject: [PATCH 0346/1590] Remove console.log --- fees/yologames/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fees/yologames/index.ts b/fees/yologames/index.ts index d78d46e75a..512ecbd614 100644 --- a/fees/yologames/index.ts +++ b/fees/yologames/index.ts @@ -110,7 +110,6 @@ const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { fetchVolume(options), fetchFees(options), ]); - console.log(`Volume, fees`, volume, fees); const dailyFees = options.createBalances(); const dailyVolume = options.createBalances(); dailyFees.add(ETHER_ADDRESS, fees); @@ -126,7 +125,7 @@ const adapter: Adapter = { adapter: { [CHAIN.BLAST]: { fetch, - start: 1709251200, + start: 1709233200, // 29th February 2024 }, }, }; From efa1c6870eb072b1e0d76fb68baf3150248a9e90 Mon Sep 17 00:00:00 2001 From: george-lr Date: Sat, 13 Apr 2024 15:22:50 +0200 Subject: [PATCH 0347/1590] Add methodology --- fees/yologames/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fees/yologames/index.ts b/fees/yologames/index.ts index 512ecbd614..3e222f2eae 100644 --- a/fees/yologames/index.ts +++ b/fees/yologames/index.ts @@ -126,6 +126,12 @@ const adapter: Adapter = { [CHAIN.BLAST]: { fetch, start: 1709233200, // 29th February 2024 + meta: { + methodology: { + Fees: "YOLO Games collects a 1% fee for Moon Or Doom and YOLO winnings, and a 3% fee on Poke The Bear winnings.", + Volume: "YOLO Games derives volume data from the deposit transactions into all the games." + }, + }, }, }, }; From e3c906de04b3a3498bca29719373f5cdbae6fb8b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 13 Apr 2024 15:39:59 +0000 Subject: [PATCH 0348/1590] fix pika --- dexs/pika-protocol/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/pika-protocol/index.ts b/dexs/pika-protocol/index.ts index 670c1f9279..51cc6f48c1 100644 --- a/dexs/pika-protocol/index.ts +++ b/dexs/pika-protocol/index.ts @@ -45,8 +45,8 @@ const fetch = (chain: Chain) => { `; const res: IValume = (await request(endpoints[chain], graphQuery)); - const dailyVolume = Number(res.vaultDayData.cumulativeVolume) / 10 ** 8; - const totalVolume = Number(res.vaults[0].cumulativeVolume) / 10 ** 8; + const dailyVolume = Number(res.vaultDayData?.cumulativeVolume || 0) / 10 ** 8; + const totalVolume = Number(res.vaults[0]?.cumulativeVolume || 0) / 10 ** 8; return { timestamp, From 928ea40e1bbc71dca2150f53a3ca71ea78e55db5 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 13 Apr 2024 16:07:00 +0000 Subject: [PATCH 0349/1590] fix zrx --- dexs/0x/index.ts | 2 ++ {aggregators => dexs/0x}/zrx/index.ts | 49 ++++++++++++++++----------- 2 files changed, 31 insertions(+), 20 deletions(-) rename {aggregators => dexs/0x}/zrx/index.ts (56%) diff --git a/dexs/0x/index.ts b/dexs/0x/index.ts index fbc85ca214..7eab4db09e 100644 --- a/dexs/0x/index.ts +++ b/dexs/0x/index.ts @@ -1,5 +1,6 @@ import { BreakdownAdapter, FetchV2, } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import { adapter_aggs } from './zrx/index' // https://0x.org/docs/introduction/0x-cheat-sheet const config = { @@ -91,6 +92,7 @@ const adapter: BreakdownAdapter = { // "0x ERC1155": adaptersERC1155, // "0x ERC721": adaptersERC721, "0x Limit": adaptersERCLimit, + "zrx": adapter_aggs["adapter"] }, version: 2 } diff --git a/aggregators/zrx/index.ts b/dexs/0x/zrx/index.ts similarity index 56% rename from aggregators/zrx/index.ts rename to dexs/0x/zrx/index.ts index 51e1b50ed2..024e27f1d6 100644 --- a/aggregators/zrx/index.ts +++ b/dexs/0x/zrx/index.ts @@ -1,6 +1,7 @@ import { GraphQLClient, gql } from "graphql-request"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import { getEnv } from "../../helpers/env"; +import { getUniqStartOfTodayTimestamp } from "../../../helpers/getUniSubgraphVolume"; +import { getEnv } from "../../../helpers/env"; +import { FetchOptions } from "../../../adapters/types"; const CHAINS = [ "Arbitrum", @@ -41,35 +42,43 @@ const getVolumeByChain = async (chain: string) => { return data; }; -const fetch = (chain: string) => async (timestamp: number) => { +const fetch = async (options: FetchOptions) => { const unixTimestamp = getUniqStartOfTodayTimestamp( - new Date(timestamp * 1000) + new Date(options.endTimestamp * 1000) ); - - const data = await getVolumeByChain(chain); - const dayData = data.find( - ({ timestamp }: { timestamp: number }) => - getUniqStartOfTodayTimestamp(new Date(timestamp)) === unixTimestamp - ); - - return { - dailyVolume: dayData.volumeUSD, - timestamp: unixTimestamp, - }; + try { + const data = await getVolumeByChain(options.chain); + const dayData = data.find( + ({ timestamp }: { timestamp: number }) => + getUniqStartOfTodayTimestamp(new Date(timestamp)) === unixTimestamp + ); + return { + dailyVolume: dayData.volumeUSD, + timestamp: unixTimestamp, + }; + } catch (e) { + console.error(e); + return { + dailyVolume: "0", + timestamp: unixTimestamp, + }; + } }; -const adapter: any = { +const adapter_aggs: any = { + version: 2, adapter: { ...Object.values(CHAINS).reduce((acc, chain) => { return { ...acc, [chain]: { - fetch: fetch(chain), - start: 1671062400, + fetch: fetch, + start: 0, }, }; }, {}), }, }; - -export default adapter; +export { + adapter_aggs +} From a3593afb2f4f09b212ee42192d0b866a8732d1b8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 13 Apr 2024 16:16:45 +0000 Subject: [PATCH 0350/1590] fix catch error --- dexs/orderly-network/index.ts | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/dexs/orderly-network/index.ts b/dexs/orderly-network/index.ts index 984aa335ba..b06ad23fc9 100644 --- a/dexs/orderly-network/index.ts +++ b/dexs/orderly-network/index.ts @@ -1,4 +1,4 @@ -import type { BreakdownAdapter } from "../../adapters/types"; +import type { BreakdownAdapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpGet } from "../../utils/fetchURL"; @@ -12,12 +12,20 @@ const adapter: BreakdownAdapter = { "orderly-network": { [CHAIN.NEAR]: { start: 1669977923, - fetch: async(ts)=>{ - const data = await httpGet(apiNear) - const cleanTimestamp = getUniqStartOfTodayTimestamp(new Date(ts * 1000)) - return { - timestamp: cleanTimestamp, - dailyVolume: data.find((t:any)=>dateToTs(t.date) === cleanTimestamp)?.volume + fetch: async(__t: number, _: any, { startOfDay }: FetchOptions) => { + try { + const data = await httpGet(apiNear) // error + const cleanTimestamp = getUniqStartOfTodayTimestamp(new Date(startOfDay * 1000)) + return { + timestamp: cleanTimestamp, + dailyVolume: data.find((t:any)=>dateToTs(t.date) === cleanTimestamp)?.volume + } + } catch (e) { + console.error(e); + return { + timestamp: startOfDay, + dailyVolume: 0 + } } } }, @@ -25,9 +33,9 @@ const adapter: BreakdownAdapter = { "orderly-network-derivatives": { [CHAIN.ARBITRUM]: { start: 1698278400, - fetch: async (timestamp: number) =>{ + fetch: async (__t: number, _: any, { startOfDay }: FetchOptions) =>{ const data = await httpGet(apiEVM) - const cleanTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + const cleanTimestamp = getUniqStartOfTodayTimestamp(new Date(startOfDay * 1000)) return { timestamp: cleanTimestamp, dailyVolume: data.find((t:any)=>dateToTs(t.date) === cleanTimestamp)?.volume From 495467426087b6e4e08108aab2fd87bb128e8686 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 13 Apr 2024 20:37:00 +0100 Subject: [PATCH 0351/1590] add more uniswap fee collectors --- fees/uniswap-lab.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/fees/uniswap-lab.ts b/fees/uniswap-lab.ts index 255ec44a11..1d431ecb26 100644 --- a/fees/uniswap-lab.ts +++ b/fees/uniswap-lab.ts @@ -1,13 +1,15 @@ import ADDRESSES from '../helpers/coreAssets.json' import { ChainBlocks, FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; -import { CHAIN } from "../helpers/chains"; import { addTokensReceived } from '../helpers/token'; const config: any = { ethereum: { tokens: [ADDRESSES.ethereum.USDC], targets: ['0x163c5e051049e92915017fe7bb9b8ce6182bcbb1', '0x6460d14dbaeb27aefec8ebef85db35defa31c3b9', '0x27213E28D7fDA5c57Fe9e5dD923818DBCcf71c47'] }, - optimism: { tokens: [ADDRESSES.optimism.USDC_CIRCLE], targets: ['0xd4ce1f1b8640c1988360a6729d9a73c85a0c80a3'] }, - polygon: { tokens: [ADDRESSES.polygon.USDC, ADDRESSES.polygon.USDC_CIRCLE], targets: ['0xce946931adf7afc0797de2a76270a28458f487ed'] }, - arbitrum: { tokens: [ADDRESSES.arbitrum.USDC_CIRCLE], targets: ['0xd4ce1f1b8640c1988360a6729d9a73c85a0c80a3'] }, + optimism: { tokens: [ADDRESSES.optimism.USDC_CIRCLE], targets: ['0xd4ce1f1b8640c1988360a6729d9a73c85a0c80a3', '0x7ffc3dbf3b2b50ff3a1d5523bc24bb5043837b14'] }, + polygon: { tokens: [ADDRESSES.polygon.USDC, ADDRESSES.polygon.USDC_CIRCLE], targets: ['0xce946931adf7afc0797de2a76270a28458f487ed', '0x7ffc3dbf3b2b50ff3a1d5523bc24bb5043837b14'] }, + arbitrum: { tokens: [ADDRESSES.arbitrum.USDC_CIRCLE], targets: ['0xd4ce1f1b8640c1988360a6729d9a73c85a0c80a3', '0x7ffc3dbf3b2b50ff3a1d5523bc24bb5043837b14'] }, + base: {tokens: [ADDRESSES.base.USDC], targets: ["0x7ffc3dbf3b2b50ff3a1d5523bc24bb5043837b14"]}, + bsc: {tokens: [ADDRESSES.bsc.USDC], targets: ["0x7ffc3dbf3b2b50ff3a1d5523bc24bb5043837b14"]}, + avax: {tokens: [ADDRESSES.avax.USDC], targets: ["0x7ffc3dbf3b2b50ff3a1d5523bc24bb5043837b14"]}, } const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions): Promise => { @@ -16,11 +18,9 @@ const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions): } const adapters: SimpleAdapter = { - adapter: { - [CHAIN.ETHEREUM]: { fetch, start: 1696896000 }, - [CHAIN.OPTIMISM]: { fetch, start: 1696896000 }, - [CHAIN.POLYGON]: { fetch, start: 1696896000 }, - [CHAIN.ARBITRUM]: { fetch, start: 1696896000 } - } + adapter: Object.keys(config).reduce((all, chain)=>({ + ...all, + [chain]: { fetch, start: 1696896000 } + }), {}) } export default adapters; From 2e1e8e5c7a29ab3899cbee1530e959b781064d92 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 15 Apr 2024 14:34:39 +0000 Subject: [PATCH 0352/1590] fix cache time --- dexs/rabbitx/index.ts | 2 +- fees/arbitrum/index.ts | 2 +- fees/chainlink-requests.ts | 4 ++-- fees/op-bnb.ts | 2 +- fees/polygon.ts | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dexs/rabbitx/index.ts b/dexs/rabbitx/index.ts index c2992063b1..b1f65a3921 100644 --- a/dexs/rabbitx/index.ts +++ b/dexs/rabbitx/index.ts @@ -5,7 +5,7 @@ import { getTimestampAtStartOfDay, getTimestampAtStartOfDayUTC, getTimestampAtSt const historicalVolumeEndpoint = "https://api.prod.rabbitx.io/markets" const candles = (market: string, timestampFrom: number, timestampTo: number) => { - const url = `https://api.prod.rabbitx.io/candles?market_id=${market}×tamp_from=${timestampFrom}×tamp_to=${timestampTo}&period=1440`; +const url = `https://api.prod.rabbitx.io/candles?market_id=${market}×tamp_from=${timestampFrom}×tamp_to=${timestampTo}&period=1440`; return url; } diff --git a/fees/arbitrum/index.ts b/fees/arbitrum/index.ts index 368d44e73f..bd0be1e7fe 100644 --- a/fees/arbitrum/index.ts +++ b/fees/arbitrum/index.ts @@ -25,7 +25,7 @@ const adapter: Adapter = { ` // const seqGas: number = sequencerGas[0].sum const seqGas: any = await queryIndexer(sequencerGas, options) - const feeQuery = await queryFlipside(`SELECT SUM(TX_FEE) from arbitrum.core.fact_transactions where BLOCK_NUMBER > ${startblock} AND BLOCK_NUMBER < ${endblock}`) + const feeQuery = await queryFlipside(`SELECT SUM(TX_FEE) from arbitrum.core.fact_transactions where BLOCK_NUMBER > ${startblock} AND BLOCK_NUMBER < ${endblock}`, 560) const fees = Number(feeQuery[0][0]) dailyFees.addGasToken(fees * 1e18) diff --git a/fees/chainlink-requests.ts b/fees/chainlink-requests.ts index 4888862b0c..ba62cb0f5d 100644 --- a/fees/chainlink-requests.ts +++ b/fees/chainlink-requests.ts @@ -65,7 +65,7 @@ const fetchRequests = (chain: Chain) => { const query_paid = build_link_query(timestamp) const gas_query = build_gas_query(timestamp) - const linkPaid_logs: ILog[] = (await queryFlipside(query_paid, 360)) + const linkPaid_logs: ILog[] = (await queryFlipside(query_paid, 560)) .map(([data, topics, transactionHash, chain]: [string, string[], string, string]) => { return { data, @@ -80,7 +80,7 @@ const fetchRequests = (chain: Chain) => { const payments = Number('0x'+data.slice(128, 192)) / 10 ** 18; return payments; }).reduce((a: number, b: number) => a + b, 0); - const ethGas = await queryFlipside(gas_query, 360) + const ethGas = await queryFlipside(gas_query, 560) const gas_fees = ethGas.map(([fee, chain]: [string, string]) => { return { diff --git a/fees/op-bnb.ts b/fees/op-bnb.ts index 511f69d9cc..40816a76dd 100644 --- a/fees/op-bnb.ts +++ b/fees/op-bnb.ts @@ -36,7 +36,7 @@ const fetch = async (timestamp: number, _chainBlocks: ChainBlocks, options: Fetc and BLOCK_NUMBER > ${await getFromBlock()} AND BLOCK_NUMBER < ${await getToBlock()} ` - const cost_to_l1: number[] = (await queryFlipside(query, 260)).flat(); + const cost_to_l1: number[] = (await queryFlipside(query, 560)).flat(); const dailyFees = await getFees(options) const dailyRevenue = dailyFees.clone(); dailyRevenue.addGasToken((cost_to_l1[0] ?? 0) * 1e18 * -1) diff --git a/fees/polygon.ts b/fees/polygon.ts index 6a61ba186f..6a11164ca5 100644 --- a/fees/polygon.ts +++ b/fees/polygon.ts @@ -46,7 +46,7 @@ const adapter: Adapter = { LEFT JOIN BlockTotals bt ON tt.BLOCK_NUMBER = bt.BLOCK_NUMBER;` - const [tx_fee, burn_fee]: number[] = (await queryFlipside(query_tx_fee, 260)).flat(); + const [tx_fee, burn_fee]: number[] = (await queryFlipside(query_tx_fee, 560)).flat(); const maticAddress = "ethereum:" + ADDRESSES.ethereum.MATIC; dailyFees.addTokenVannila(maticAddress, tx_fee * 1e18); From a0b8b658396fc2feccd054d64e6fa1843cfa32ce Mon Sep 17 00:00:00 2001 From: surf-rd Date: Mon, 15 Apr 2024 23:27:21 +0800 Subject: [PATCH 0353/1590] Add transaction statistics from the Merlin chain --- dexs/surfone/index.ts | 20 +++++++++++--------- fees/surfone/index.ts | 16 +++++++++------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/dexs/surfone/index.ts b/dexs/surfone/index.ts index 56228b97d9..3417ba1c11 100644 --- a/dexs/surfone/index.ts +++ b/dexs/surfone/index.ts @@ -3,26 +3,28 @@ import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpGet } from "../../utils/fetchURL"; -const volumeEndpoint = "https://apigateway.surf.one/pool/24h/data" +// const volumeEndpoint = "https://apigateway.surf.one/pool/24h/data" +const volumeEndpointV2 = "https://apigateway.surf.one/v2/market/total/stat" const headers = { - "Block-Chain-Id": '8453', + "Block-Chain-Id":"4200", + "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 { - totalVolume: number, - totalTradeSize: number, + 'total_vol': number, + '24h_vol': number, } const fetch = () => { return async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const response = (await httpGet(volumeEndpoint, { headers })); + const response = (await httpGet(volumeEndpointV2, { headers })); const volume: IVolume = response.data; return { - totalVolume: `${volume?.totalVolume || undefined}`, - dailyVolume: `${volume?.totalTradeSize || undefined}`, + totalVolume: `${volume?.total_vol || undefined}`, + dailyVolume: `${volume['24h_vol'] || undefined}`, timestamp: dayTimestamp, }; }; @@ -31,10 +33,10 @@ const fetch = () => { const adapter: SimpleAdapter = { adapter: { - [CHAIN.BASE]: { + ['merlin']: { fetch: fetch(), runAtCurrTime: true, - start: 7963804, + start: 9142115, } }, }; diff --git a/fees/surfone/index.ts b/fees/surfone/index.ts index 7daeade8d5..f77f41ead3 100644 --- a/fees/surfone/index.ts +++ b/fees/surfone/index.ts @@ -3,24 +3,26 @@ import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpGet } from "../../utils/fetchURL"; -const volumeEndpoint = "https://apigateway.surf.one/pool/24h/data" +// const volumeEndpoint = "https://apigateway.surf.one/pool/24h/data" +const volumeEndpointV2 = "https://apigateway.surf.one/v2/market/total/stat" const headers = { - "Block-Chain-Id": '8453', + "Block-Chain-Id":"4200", + "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 { - totalTradeFee: number, + total_fee: number, } const fetch = () => { return async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const response = (await httpGet(volumeEndpoint, { headers })); + const response = (await httpGet(volumeEndpointV2, { headers })); const volume: IVolume = response.data; return { - dailyFees: `${volume?.totalTradeFee || undefined}`, + dailyFees: `${volume?.total_fee || undefined}`, timestamp: dayTimestamp, }; }; @@ -29,10 +31,10 @@ const fetch = () => { const adapter: SimpleAdapter = { adapter: { - [CHAIN.BASE]: { + ['merlin']: { fetch: fetch(), runAtCurrTime: true, - start: 7963804, + start: 9142115, } }, }; From b46a884837d5f46105d8fab33262a7118a435dc6 Mon Sep 17 00:00:00 2001 From: itsmenikolaos Date: Mon, 15 Apr 2024 20:00:39 +0400 Subject: [PATCH 0354/1590] add swych fees adapter --- fees/swych/index.ts | 125 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 fees/swych/index.ts diff --git a/fees/swych/index.ts b/fees/swych/index.ts new file mode 100644 index 0000000000..a0d2730e23 --- /dev/null +++ b/fees/swych/index.ts @@ -0,0 +1,125 @@ +import {Adapter, FetchResult} from "../../adapters/types"; +import {BSC} from "../../helpers/chains"; +import {ethers} from "ethers"; +import axios from "axios"; + +export const SUBGRAPHS = { + pdex: "https://api.thegraph.com/subgraphs/name/crypnosis/swych-pdex-v1", +}; + +const contractAddresses = { + Pool: "0xF86f70fb4959a9FCF1e7dD67A05dC0AC95c3802d", + Oracle: "0xe4460109425EbC1CE34cAd59Ab7ce60535956BF5", +}; + +const PoolABI = [ + "function feeReserves(address token) view returns (uint256)", +]; + +const OracleABI = [ + "function getPrice(address token, bool useCache) view returns (uint256)", +]; + +const feeTokenList = Object.values([ + "0x55d398326f99059fF775485246999027B3197955", + "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", + "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", + "0x570A5D26f7765Ecb712C0924E4De545B89fD43dF", +]); + +const toBigInt = (value: string | number) => { + return BigInt(value); +}; + +const convertToUsd = (value: bigint, decimals = 30) => { + if (!value) { + return 0; + } + + const wei = toBigInt(10) ** toBigInt(decimals); + return Number(value / wei); +}; + +const generateWithdrawalFeesQuery = (timeStart = 0, skip = 0, limit = 1000) => { + return { + query: ` + { + feeWithdrawals( + first: ${limit} + skip: ${skip} + orderBy: timestamp + orderDirection: asc + where: {timestamp_gt: "${timeStart}"} + ) { + amount + id + recipient + timestamp + token + } + }` + }; +}; + +const fetchWithdrawalFees = async () => { + const data = []; + const pageSize = 1000; + let hasMoreData = true; + + while (hasMoreData) { + const query = generateWithdrawalFeesQuery(0, data.length, pageSize); + const response = await axios.post(SUBGRAPHS.pdex, query); + const fetchedData = response?.data?.data?.feeWithdrawals; + if (!fetchedData) { + hasMoreData = false; + continue; + } + data.push(...fetchedData); + hasMoreData = fetchedData.length === pageSize; + } + + return data; +}; + +const fetchTotalProtocolRevenue = async () => { + const provider = new ethers.JsonRpcProvider("https://bsc-dataseed.binance.org/"); + const Pool = new ethers.Contract(contractAddresses.Pool, PoolABI, provider); + const Oracle = new ethers.Contract(contractAddresses.Oracle, OracleABI, provider); + const fees = await Promise.all(feeTokenList.map(async (token) => { + const fee: bigint = await Pool.feeReserves(token); + const tokenPrice: bigint = await Oracle.getPrice(token, true); + return fee * tokenPrice; + })).then( + (values) => values.reduce((a, b) => a + b, toBigInt(0)) + ); + return convertToUsd(fees); +}; + +const fetchFees = async () => { + const totalRevenue = await fetchTotalProtocolRevenue(); + const totalWithdrawalFeeData = await fetchWithdrawalFees(); + const totalWithdrawalFees = totalWithdrawalFeeData.reduce((acc, fee) => acc + fee.amount, toBigInt(0)); + const totalWithdrawalFeesUsd = convertToUsd(totalWithdrawalFees); + const totalFees = totalRevenue + totalWithdrawalFeesUsd; + + return { + totalFees + } as FetchResult; +}; + +const adapter: Adapter = { + adapter: { + [BSC]: { + fetch: fetchFees, + start: 1701720000, + meta: { + methodology: { + Fees: 'Swych collects fees from different transactions done on the Perpetual Exchange.', + }, + }, + }, + }, +} + +export default adapter From 6a6bba1fa4536d25e4a485d3016beab1f2c177d6 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 15 Apr 2024 17:09:49 +0000 Subject: [PATCH 0355/1590] the graph does not have value --- fees/pika-protocol.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/pika-protocol.ts b/fees/pika-protocol.ts index 12494bdeb7..5a4ef6a146 100644 --- a/fees/pika-protocol.ts +++ b/fees/pika-protocol.ts @@ -121,7 +121,7 @@ const fetch = (chain: Chain) => { const adapter: Adapter = { adapter: { [CHAIN.OPTIMISM]: { - fetch: fetch(CHAIN.OPTIMISM), + fetch: async (timestamp: number) => {return {timestamp, dailyFees: "0", dailyRevenue: "0", dailySupplySideRevenue: "0", dailyProtocolRevenue: "0"}}, start: 1658534400, }, }, From aabed9cf5a4a8a24409233e54387bc128c8600c1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 15 Apr 2024 17:27:22 +0000 Subject: [PATCH 0356/1590] fix find data --- dexs/0x/zrx/index.ts | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/dexs/0x/zrx/index.ts b/dexs/0x/zrx/index.ts index 024e27f1d6..59a3a056d4 100644 --- a/dexs/0x/zrx/index.ts +++ b/dexs/0x/zrx/index.ts @@ -2,18 +2,22 @@ import { GraphQLClient, gql } from "graphql-request"; import { getUniqStartOfTodayTimestamp } from "../../../helpers/getUniSubgraphVolume"; import { getEnv } from "../../../helpers/env"; import { FetchOptions } from "../../../adapters/types"; +import { CHAIN } from "../../../helpers/chains"; -const CHAINS = [ - "Arbitrum", - "Avalanche", - "Base", - "BSC", - "Celo", - "Ethereum", - "Fantom", - "Optimism", - "Polygon", -]; +type TChain = { + [key: string]: string; +} +const CHAINS: TChain = { + [CHAIN.ARBITRUM]: "Arbitrum", + [CHAIN.AVAX]: "Avalanche", + [CHAIN.BASE]: "Base", + [CHAIN.BSC]: "BSC", + [CHAIN.CELO]: "Celo", + [CHAIN.ETHEREUM]: "Ethereum", + [CHAIN.FANTOM]: "Fantom", + [CHAIN.OPTIMISM]: "Optimism", + [CHAIN.POLYGON]: "Polygon", +}; const graphQLClient = new GraphQLClient("https://api.0x.org/data/v0"); const getGQLClient = () => { @@ -48,9 +52,10 @@ const fetch = async (options: FetchOptions) => { ); try { const data = await getVolumeByChain(options.chain); + const strDate = new Date(unixTimestamp * 1000).toISOString().split("T")[0]; const dayData = data.find( - ({ timestamp }: { timestamp: number }) => - getUniqStartOfTodayTimestamp(new Date(timestamp)) === unixTimestamp + ({ timestamp }: { timestamp: string }) => + timestamp.split("T")[0] === strDate ); return { dailyVolume: dayData.volumeUSD, From c8fe28aa006e565063a431018c44c9a60f6d41f2 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 16 Apr 2024 08:13:06 +0000 Subject: [PATCH 0357/1590] change name to hyperliquid --- dexs/hyperliquid/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/hyperliquid/index.ts b/dexs/hyperliquid/index.ts index 40ed0c1798..ae19b88d21 100644 --- a/dexs/hyperliquid/index.ts +++ b/dexs/hyperliquid/index.ts @@ -23,7 +23,7 @@ const fetch = async (timestamp: number) => { const adapter: SimpleAdapter = { adapter: { - [CHAIN.ARBITRUM]: { + "hyperliquid": { fetch, start: 1677283200, runAtCurrTime: true, From 3405ebd41a25dd0cf5711f7d6977804333058981 Mon Sep 17 00:00:00 2001 From: "Web3.World" <165679484+web3world@users.noreply.github.com> Date: Tue, 16 Apr 2024 15:54:32 +0700 Subject: [PATCH 0358/1590] feat: web3world dex adapter has been added --- dexs/web3world/index.ts | 69 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 dexs/web3world/index.ts diff --git a/dexs/web3world/index.ts b/dexs/web3world/index.ts new file mode 100644 index 0000000000..f1c5af619d --- /dev/null +++ b/dexs/web3world/index.ts @@ -0,0 +1,69 @@ +import BigNumber from "bignumber.js"; +import { FetchOptions, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { postURL } from "../../utils/fetchURL"; + +interface IWeb3WorldPoolsStats { + pools: Array<{ + meta: { + currencies: string[]; + currencyAddresses: string[]; + poolAddress: string; + lpAddress: string; + pairType: string; + fee: string; + feeBeneficiary: string | null; + beneficiaryAddress: string | null; + }; + tvl: string; + tvlChange: string; + volumesLocked: string[]; + prices: string[]; + lpLocked: string; + count24Transactions: number; + volume24h: string; + volume24hChange: string; + volume7d: string; + fee24h: string; + fee7d: string; + feeAllTime: string; + stableOneSwap: string[] | null; + }>; +} + +const fetch: FetchV2 = async (options: FetchOptions) => { + const response: IWeb3WorldPoolsStats = await postURL( + "https://api.web3.world/v2/pools", + { + limit: 1000, + offset: 0, + ordering: "tvldescending", + whiteListUri: "https://static.web3.world/assets/manifest.json", + } + ); + let dailyVolumeBN = new BigNumber(0); + let dailyFeesBN = new BigNumber(0); + let totalFeesBN = new BigNumber(0); + response.pools.forEach((pool) => { + dailyVolumeBN = dailyVolumeBN.plus(pool.volume24h); + dailyFeesBN = dailyFeesBN.plus(pool.fee24h); + totalFeesBN = totalFeesBN.plus(pool.feeAllTime); + }); + return { + dailyVolume: dailyVolumeBN.toString(10), + dailyFees: dailyFeesBN.toString(10), + dailyUserFees: dailyFeesBN.toString(10), + totalFees: totalFeesBN.toString(10), + }; +}; +const adapter: SimpleAdapter = { + adapter: { + venom: { + fetch, + runAtCurrTime: true, + start: 1713139200, // 2024-04-15T00:00:00.000Z + }, + }, + version: 2, +}; + +export default adapter; From 3494d1fa3faa887d1c7e9006a19fb243de43e714 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 16 Apr 2024 10:30:23 +0000 Subject: [PATCH 0359/1590] fix version --- dexs/web3world/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/web3world/index.ts b/dexs/web3world/index.ts index f1c5af619d..9476f69893 100644 --- a/dexs/web3world/index.ts +++ b/dexs/web3world/index.ts @@ -63,7 +63,7 @@ const adapter: SimpleAdapter = { start: 1713139200, // 2024-04-15T00:00:00.000Z }, }, - version: 2, + version: 1, }; export default adapter; From 9240f43b7c06bcd6ef3ea4b4b08df68ec5fe9a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=87t?= <90208509+moonieew@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:42:57 +0700 Subject: [PATCH 0360/1590] add active addresses for Chat3 --- users/routers/routerAddresses.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index b014ac4636..c54e76aa38 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -2696,6 +2696,15 @@ export default ([ ] } }, + { + "id":"3733", + "name":"Chat3", + "addresses":{ + "mantle":[ + "0xAd3dbD09835CF15c543Bc59d31865D659b71060e" + ] + } + }, { "id":"970", "name": "Drift", From e4e92310cd928ab906c80f5ef418d0a844e38d44 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 16 Apr 2024 16:45:18 +0000 Subject: [PATCH 0361/1590] fix swych --- fees/swych/index.ts | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/fees/swych/index.ts b/fees/swych/index.ts index a0d2730e23..51c7b324a6 100644 --- a/fees/swych/index.ts +++ b/fees/swych/index.ts @@ -1,4 +1,4 @@ -import {Adapter, FetchResult} from "../../adapters/types"; +import {Adapter, Fetch, FetchOptions, FetchResult, FetchResultFees} from "../../adapters/types"; import {BSC} from "../../helpers/chains"; import {ethers} from "ethers"; import axios from "axios"; @@ -40,8 +40,15 @@ const convertToUsd = (value: bigint, decimals = 30) => { const wei = toBigInt(10) ** toBigInt(decimals); return Number(value / wei); }; +interface FeeWithdrawal { + amount: bigint; + id: string; + recipient: string; + timestamp: number; + token: string; +} -const generateWithdrawalFeesQuery = (timeStart = 0, skip = 0, limit = 1000) => { +const generateWithdrawalFeesQuery = (timeStart = 0, endTime = 0, skip = 0, limit = 1000) => { return { query: ` { @@ -50,7 +57,7 @@ const generateWithdrawalFeesQuery = (timeStart = 0, skip = 0, limit = 1000) => { skip: ${skip} orderBy: timestamp orderDirection: asc - where: {timestamp_gt: "${timeStart}"} + where: {timestamp_gt: "${timeStart}" timestamp_lte: "${endTime}"} ) { amount id @@ -62,15 +69,16 @@ const generateWithdrawalFeesQuery = (timeStart = 0, skip = 0, limit = 1000) => { }; }; -const fetchWithdrawalFees = async () => { - const data = []; +const fetchWithdrawalFees = async (timestamp: number): Promise => { + const data: FeeWithdrawal[] = []; const pageSize = 1000; + const endTime = timestamp + 24 * 60 * 60; let hasMoreData = true; while (hasMoreData) { - const query = generateWithdrawalFeesQuery(0, data.length, pageSize); + const query = generateWithdrawalFeesQuery(0, endTime, data.length, pageSize); const response = await axios.post(SUBGRAPHS.pdex, query); - const fetchedData = response?.data?.data?.feeWithdrawals; + const fetchedData: FeeWithdrawal[] = response?.data?.data?.feeWithdrawals; if (!fetchedData) { hasMoreData = false; continue; @@ -83,6 +91,7 @@ const fetchWithdrawalFees = async () => { }; const fetchTotalProtocolRevenue = async () => { + // swap fees, in/de fees, liquidation fees const provider = new ethers.JsonRpcProvider("https://bsc-dataseed.binance.org/"); const Pool = new ethers.Contract(contractAddresses.Pool, PoolABI, provider); const Oracle = new ethers.Contract(contractAddresses.Oracle, OracleABI, provider); @@ -96,16 +105,21 @@ const fetchTotalProtocolRevenue = async () => { return convertToUsd(fees); }; -const fetchFees = async () => { +const fetchFees = async (timestamp: number, _c: any, { startOfDay }: FetchOptions): Promise => { const totalRevenue = await fetchTotalProtocolRevenue(); - const totalWithdrawalFeeData = await fetchWithdrawalFees(); + const totalWithdrawalFeeData = await fetchWithdrawalFees(startOfDay); + const dailyFees = totalWithdrawalFeeData + .filter((fee) => Number(fee.timestamp) >= startOfDay) + .reduce((acc, fee) => acc + Number(fee.amount), 0); const totalWithdrawalFees = totalWithdrawalFeeData.reduce((acc, fee) => acc + fee.amount, toBigInt(0)); const totalWithdrawalFeesUsd = convertToUsd(totalWithdrawalFees); const totalFees = totalRevenue + totalWithdrawalFeesUsd; return { + timestamp, + dailyFees: String(dailyFees), totalFees - } as FetchResult; + } }; const adapter: Adapter = { From 58ea7d86c508d851a8b3119b9fcbe7a1fa5617d1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 16 Apr 2024 17:26:34 +0000 Subject: [PATCH 0362/1590] fix daily fees --- fees/swych/index.ts | 136 +++++++++++++++++++++----------------------- 1 file changed, 65 insertions(+), 71 deletions(-) diff --git a/fees/swych/index.ts b/fees/swych/index.ts index 51c7b324a6..8def2ae5eb 100644 --- a/fees/swych/index.ts +++ b/fees/swych/index.ts @@ -1,6 +1,5 @@ -import {Adapter, Fetch, FetchOptions, FetchResult, FetchResultFees} from "../../adapters/types"; -import {BSC} from "../../helpers/chains"; -import {ethers} from "ethers"; +import {Adapter, FetchOptions, FetchResultFees} from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; import axios from "axios"; export const SUBGRAPHS = { @@ -12,34 +11,10 @@ const contractAddresses = { Oracle: "0xe4460109425EbC1CE34cAd59Ab7ce60535956BF5", }; -const PoolABI = [ - "function feeReserves(address token) view returns (uint256)", -]; - -const OracleABI = [ - "function getPrice(address token, bool useCache) view returns (uint256)", -]; - -const feeTokenList = Object.values([ - "0x55d398326f99059fF775485246999027B3197955", - "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", - "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", - "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", - "0x570A5D26f7765Ecb712C0924E4De545B89fD43dF", -]); - -const toBigInt = (value: string | number) => { - return BigInt(value); -}; - -const convertToUsd = (value: bigint, decimals = 30) => { - if (!value) { - return 0; - } - - const wei = toBigInt(10) ** toBigInt(decimals); - return Number(value / wei); -}; +const event_incress_position = "event IncreasePosition(bytes32 indexed key,address account,address collateralToken,address indexToken,uint256 collateralValue,uint256 sizeChanged,uint8 side,uint256 indexPrice,uint256 feeValue)"; +const event_decrease_position = "event DecreasePosition(bytes32 indexed key,address account,address collateralToken,address indexToken,uint256 collateralChanged,uint256 sizeChanged,uint8 side,uint256 indexPrice,uint256 pnl,uint256 feeValue)"; +const event_liquidate_position = "event LiquidatePosition(bytes32 indexed key,address account,address collateralToken,address indexToken,uint8 side,uint256 size,uint256 collateralValue,uint256 reserveAmount,uint256 indexPrice,uint256 pnl,uint256 feeValue)"; +const event_swap = "event Swap(address indexed sender,address tokenIn,address tokenOut,uint256 amountIn,uint256 amountOut,uint256 fee)"; interface FeeWithdrawal { amount: bigint; id: string; @@ -52,19 +27,19 @@ const generateWithdrawalFeesQuery = (timeStart = 0, endTime = 0, skip = 0, limit return { query: ` { - feeWithdrawals( - first: ${limit} - skip: ${skip} - orderBy: timestamp - orderDirection: asc - where: {timestamp_gt: "${timeStart}" timestamp_lte: "${endTime}"} - ) { - amount - id - recipient - timestamp - token - } + feeWithdrawals( + first: ${limit} + skip: ${skip} + orderBy: timestamp + orderDirection: asc + where: {timestamp_gt: "${timeStart}" timestamp_lte: "${endTime}"} + ) { + amount + id + recipient + timestamp + token + } }` }; }; @@ -72,11 +47,12 @@ const generateWithdrawalFeesQuery = (timeStart = 0, endTime = 0, skip = 0, limit const fetchWithdrawalFees = async (timestamp: number): Promise => { const data: FeeWithdrawal[] = []; const pageSize = 1000; + const startTime = timestamp; const endTime = timestamp + 24 * 60 * 60; let hasMoreData = true; while (hasMoreData) { - const query = generateWithdrawalFeesQuery(0, endTime, data.length, pageSize); + const query = generateWithdrawalFeesQuery(startTime, endTime, data.length, pageSize); const response = await axios.post(SUBGRAPHS.pdex, query); const fetchedData: FeeWithdrawal[] = response?.data?.data?.feeWithdrawals; if (!fetchedData) { @@ -90,41 +66,59 @@ const fetchWithdrawalFees = async (timestamp: number): Promise return data; }; -const fetchTotalProtocolRevenue = async () => { - // swap fees, in/de fees, liquidation fees - const provider = new ethers.JsonRpcProvider("https://bsc-dataseed.binance.org/"); - const Pool = new ethers.Contract(contractAddresses.Pool, PoolABI, provider); - const Oracle = new ethers.Contract(contractAddresses.Oracle, OracleABI, provider); - const fees = await Promise.all(feeTokenList.map(async (token) => { - const fee: bigint = await Pool.feeReserves(token); - const tokenPrice: bigint = await Oracle.getPrice(token, true); - return fee * tokenPrice; - })).then( - (values) => values.reduce((a, b) => a + b, toBigInt(0)) - ); - return convertToUsd(fees); +const fetchTotalProtocolRevenue = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const logs_incress_position = await options.getLogs({ target: contractAddresses.Pool, eventAbi: event_incress_position }); + const logs_decrease_position = await options.getLogs({ target: contractAddresses.Pool, eventAbi: event_decrease_position }); + const logs_liquidate_position = await options.getLogs({ target: contractAddresses.Pool, eventAbi: event_liquidate_position }); + const logs_swap = await options.getLogs({ target: contractAddresses.Pool, eventAbi: event_swap }); + const collateralToken = [...new Set([...logs_incress_position, ...logs_decrease_position, ...logs_liquidate_position].map((log) => log.collateralToken))]; + const decimals: string[] = await options.api.multiCall({ abi: 'erc20:decimals', calls: collateralToken}) + + logs_swap.forEach((log) => { + dailyFees.add(log.tokenIn, log.fee); + }) + logs_incress_position.forEach((log) => { + const index = collateralToken.indexOf(log.collateralToken); + const token_decimal = Number(decimals[index]); + const fee = Number(log.feeValue)/10 ** (30 - token_decimal) + dailyFees.add(log.collateralToken, fee); + }) + logs_decrease_position.forEach((log) => { + const index = collateralToken.indexOf(log.collateralToken); + const token_decimal = Number(decimals[index]); + const fee = Number(log.feeValue)/10 ** (30 - token_decimal) + dailyFees.add(log.collateralToken, fee); + }) + logs_liquidate_position.forEach((log) => { + const index = collateralToken.indexOf(log.collateralToken); + const token_decimal = Number(decimals[index]); + const fee = Number(log.feeValue)/10 ** (30 - token_decimal) + dailyFees.add(log.collateralToken, fee); + }); + return dailyFees; }; -const fetchFees = async (timestamp: number, _c: any, { startOfDay }: FetchOptions): Promise => { - const totalRevenue = await fetchTotalProtocolRevenue(); - const totalWithdrawalFeeData = await fetchWithdrawalFees(startOfDay); - const dailyFees = totalWithdrawalFeeData - .filter((fee) => Number(fee.timestamp) >= startOfDay) - .reduce((acc, fee) => acc + Number(fee.amount), 0); - const totalWithdrawalFees = totalWithdrawalFeeData.reduce((acc, fee) => acc + fee.amount, toBigInt(0)); - const totalWithdrawalFeesUsd = convertToUsd(totalWithdrawalFees); - const totalFees = totalRevenue + totalWithdrawalFeesUsd; - +const fetchFees = async (timestamp: number, _c: any, options: FetchOptions): Promise => { + const dailyFees = await fetchTotalProtocolRevenue(options); + const totalWithdrawalFeeData = await fetchWithdrawalFees(options.startOfDay); + const tokenWithdrawalFees = [...new Set(totalWithdrawalFeeData.map((fee) => fee.token))]; + const decimals: string[] = await options.api.multiCall({ abi: 'erc20:decimals', calls: tokenWithdrawalFees}) + totalWithdrawalFeeData.forEach((fee) => { + const index = tokenWithdrawalFees.indexOf(fee.token); + const token_decimal = Number(decimals[index]); + const feeValue = Number(fee.amount)/10 ** (30 - token_decimal) + dailyFees.add(fee.token, feeValue); + }); return { timestamp, - dailyFees: String(dailyFees), - totalFees + dailyFees: dailyFees, } }; const adapter: Adapter = { adapter: { - [BSC]: { + [CHAIN.BSC]: { fetch: fetchFees, start: 1701720000, meta: { From f57bcb8f78150ad96980b6aa316f319458ee0bec Mon Sep 17 00:00:00 2001 From: Eric Fan Date: Tue, 16 Apr 2024 11:56:08 +0800 Subject: [PATCH 0363/1590] SynFutures V3 Fee --- fees/synfutures-v3/index.ts | 68 +++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 fees/synfutures-v3/index.ts diff --git a/fees/synfutures-v3/index.ts b/fees/synfutures-v3/index.ts new file mode 100644 index 0000000000..93bc1e5059 --- /dev/null +++ b/fees/synfutures-v3/index.ts @@ -0,0 +1,68 @@ +import { Adapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { request, gql } from "graphql-request"; +import type { ChainEndpoints, FetchV2 } from "../../adapters/types" +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; + +const endpoints = { + [CHAIN.BLAST]: "https://api.synfutures.com/thegraph/v3-blast", +} + +const methodology = { + Fees: "Fees paid by takers" +} + +const graphs = (graphUrls: ChainEndpoints) => { + const fetch: FetchV2 = async ({ chain, startTimestamp, createBalances }) => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(startTimestamp) + const graphQuery = gql + `{ + dailyQuoteDatas(where: {timestamp: "${todaysTimestamp}"}){ + timestamp + quote{ + id + symbol + } + takerFee + protocolFee + + totalTakerFee + totalProtocolFee + } + }`; + + const dailyFee = createBalances(); + const totalFee = createBalances(); + + const graphRes = await request(graphUrls[chain], graphQuery); + + // console.info(JSON.stringify(graphRes, null, 2)); + + for (const record of graphRes.dailyQuoteDatas) { + dailyFee.addToken(record.quote.id, Number(record.takerFee) + Number(record.protocolFee)) + totalFee.addToken(record.quote.id, Number(record.totalTakerFee) + Number(record.totalProtocolFee)) + } + + return { + dailyFees: await dailyFee.getUSDValue(), + totalFees: await totalFee.getUSDValue(), + }; + }; + return fetch +}; + + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.BLAST]: { + fetch: graphs(endpoints), + start: 1709049600, + meta: { + methodology + } + } + } +} + +export default adapter; From b96c119dce4b4806df24bae14b061eec28cdbab1 Mon Sep 17 00:00:00 2001 From: chaitanyasjoshi Date: Wed, 17 Apr 2024 16:50:29 +0530 Subject: [PATCH 0364/1590] add ithaca protocol --- options/ithaca/index.ts | 57 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 options/ithaca/index.ts diff --git a/options/ithaca/index.ts b/options/ithaca/index.ts new file mode 100644 index 0000000000..bb641fcbaf --- /dev/null +++ b/options/ithaca/index.ts @@ -0,0 +1,57 @@ +import { SimpleAdapter } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; +import { Balances } from "@defillama/sdk"; +import { parseUnits } from "ethers"; + +const WETH_CONTRACT = '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'; +const USDC_CONTRACT = '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'; + +interface IIthacaStatsResponse { + "response": { + "daily_fees": number, + "total_fees": number, + "daily_premium": number, + "total_premium": number, + "daily_volume_numeraire": number, + "daily_volume_underlier": number, + "total_volume_numeraire": number, + "total_volume_underlier": number + } +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetchIthacaVolumeData, + start: 1713205800, + runAtCurrTime: true + }, + }, +}; + +export async function fetchIthacaVolumeData( + timestamp: number +) { + const { response: ithacaStats } = await fetchURL(`https://app.ithacaprotocol.io/api/v1/analytics/WETH/USDC/stats`) as IIthacaStatsResponse; + + const dailyNotionalVolume = new Balances({ chain: CHAIN.ARBITRUM }) + dailyNotionalVolume.addToken(USDC_CONTRACT, parseUnits(ithacaStats.daily_volume_numeraire.toFixed(6), 6)) + dailyNotionalVolume.addToken(WETH_CONTRACT, parseUnits(`${ithacaStats.daily_volume_underlier}`, 18)) + + const totalNotionalVolume = new Balances({ chain: CHAIN.ARBITRUM }) + totalNotionalVolume.addToken(USDC_CONTRACT, parseUnits(ithacaStats.total_volume_numeraire.toFixed(6), 6)) + totalNotionalVolume.addToken(WETH_CONTRACT, parseUnits(`${ithacaStats.total_volume_underlier}`, 18)) + + return { + timestamp, + dailyFees: ithacaStats.daily_fees, + totalFees: ithacaStats.total_fees, + dailyPremiumVolume: ithacaStats.daily_premium, + totalPremiumVolume: ithacaStats.total_premium, + dailyNotionalVolume, + totalNotionalVolume, + }; +} + +export default adapter; From fd89793808da6a46e2b66c87c6dfdc8f0796d688 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 17 Apr 2024 13:56:06 +0000 Subject: [PATCH 0365/1590] fix mark --- fees/swych/index.ts | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/fees/swych/index.ts b/fees/swych/index.ts index 8def2ae5eb..cb4fe9e25f 100644 --- a/fees/swych/index.ts +++ b/fees/swych/index.ts @@ -23,6 +23,20 @@ interface FeeWithdrawal { token: string; } +type TIsStable = { + [key: string]: boolean; +} +const isStable:TIsStable = { + "0x55d398326f99059ff775485246999027b3197955": true, + "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c": false, + "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c": false, + "0x2170ed0880ac9a755fd29b2688956bd959f933f8": false, + "0x570a5d26f7765ecb712c0924e4de545b89fd43df": false, +} +const OracleABI = { + getPrice: "function getPrice(address token, bool useCache) view returns (uint256)", +}; + const generateWithdrawalFeesQuery = (timeStart = 0, endTime = 0, skip = 0, limit = 1000) => { return { query: ` @@ -72,28 +86,40 @@ const fetchTotalProtocolRevenue = async (options: FetchOptions) => { const logs_decrease_position = await options.getLogs({ target: contractAddresses.Pool, eventAbi: event_decrease_position }); const logs_liquidate_position = await options.getLogs({ target: contractAddresses.Pool, eventAbi: event_liquidate_position }); const logs_swap = await options.getLogs({ target: contractAddresses.Pool, eventAbi: event_swap }); - const collateralToken = [...new Set([...logs_incress_position, ...logs_decrease_position, ...logs_liquidate_position].map((log) => log.collateralToken))]; + const collateralToken = [...new Set([...logs_incress_position, + ...logs_decrease_position, + ...logs_liquidate_position + ].map((log) => log.collateralToken))]; const decimals: string[] = await options.api.multiCall({ abi: 'erc20:decimals', calls: collateralToken}) - + const oracle: string[] = await options.api.multiCall({ abi: OracleABI.getPrice, calls: collateralToken.map((token) => { + return { + target: contractAddresses.Oracle, + params: [token, true], + } + }) as any }) as string[]; logs_swap.forEach((log) => { - dailyFees.add(log.tokenIn, log.fee); + const fee = Number(log.fee) + dailyFees.add(log.tokenIn, fee); }) logs_incress_position.forEach((log) => { const index = collateralToken.indexOf(log.collateralToken); const token_decimal = Number(decimals[index]); - const fee = Number(log.feeValue)/10 ** (30 - token_decimal) + const collateralPrice = isStable[log.collateralToken.toLowerCase()] ? 10 ** (30 - token_decimal) : Number(10 ** 6) + const fee = Number(log.feeValue)/collateralPrice dailyFees.add(log.collateralToken, fee); }) logs_decrease_position.forEach((log) => { const index = collateralToken.indexOf(log.collateralToken); const token_decimal = Number(decimals[index]); - const fee = Number(log.feeValue)/10 ** (30 - token_decimal) + const collateralPrice = isStable[log.collateralToken.toLowerCase()] ? 10 ** (30 - token_decimal) : Number(10 ** 6) + const fee = Number(log.feeValue)/collateralPrice dailyFees.add(log.collateralToken, fee); }) logs_liquidate_position.forEach((log) => { const index = collateralToken.indexOf(log.collateralToken); const token_decimal = Number(decimals[index]); - const fee = Number(log.feeValue)/10 ** (30 - token_decimal) + const collateralPrice = isStable[log.collateralToken.toLowerCase()] ? 10 ** (30 - token_decimal) : Number(10 ** 6) + const fee = Number(log.feeValue)/collateralPrice dailyFees.add(log.collateralToken, fee); }); return dailyFees; From cc21475a9a171c5b7d36eb46cd357174b8f4f9e6 Mon Sep 17 00:00:00 2001 From: tec05 Date: Wed, 17 Apr 2024 06:56:16 -0700 Subject: [PATCH 0366/1590] Add volume adapter for Archly on Ethereum --- dexs/archly-finance-v2/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dexs/archly-finance-v2/index.ts b/dexs/archly-finance-v2/index.ts index 71b52aa51b..7eaf7dd46f 100644 --- a/dexs/archly-finance-v2/index.ts +++ b/dexs/archly-finance-v2/index.ts @@ -4,6 +4,7 @@ import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0x12508dd9108Abab2c5fD8fC6E4984E46a3CF7824'; const FACTORY_ADDRESS_ZKSYNC = '0x30A0DD3D0D9E99BD0E67b323FB706788766dCff2'; +const FACTORY_ADDRESS_ETHERUEM = '0xE8E2b714C57937E0b29c6ABEAF00B52388cAb598'; const adapter: SimpleAdapter = { adapter: { @@ -35,6 +36,10 @@ const adapter: SimpleAdapter = { fetch: getDexVolumeExports({ chain: CHAIN.CRONOS, factory: FACTORY_ADDRESS }), start: 1708473600, }, + [CHAIN.ETHEREUM]: { + fetch: getDexVolumeExports({ chain: CHAIN.ETHEREUM, factory: FACTORY_ADDRESS_ETHERUEM }), + start: 1713070800, + }, [CHAIN.FANTOM]: { fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), start: 1700784000, From 6609ceafedc6cc3d8a58304c9653e35d133e4c31 Mon Sep 17 00:00:00 2001 From: paulvaden Date: Wed, 17 Apr 2024 10:36:44 -0400 Subject: [PATCH 0367/1590] add lyra perps volume --- dexs/lyra/index.ts | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 dexs/lyra/index.ts diff --git a/dexs/lyra/index.ts b/dexs/lyra/index.ts new file mode 100644 index 0000000000..d79c0b2264 --- /dev/null +++ b/dexs/lyra/index.ts @@ -0,0 +1,49 @@ +import { SimpleAdapter } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; + +interface ILyraVolumeResponse { + daily_premium_volume: string; + total_premium_volume: string; +} + +// endTime is in nanoseconds +export const lyraVolumeEndpoint = (endTime: number) => { + return ( + "https://api.lyra.finance/public/statistics?instrument_name=PERP&end_time=" + + endTime + ); +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: fetchLyraVolumeData, + start: 1702630075, + }, + }, +}; + +export async function fetchLyraVolumeData( + timestamp: number +) { + let timestamp_in_ms = timestamp * 1000 + const lyraVolumeData = await getLyraVolumeData(lyraVolumeEndpoint(timestamp_in_ms)); + const dailyVolume = Number(lyraVolumeData.daily_premium_volume).toFixed(2); + const totalVolume = Number(lyraVolumeData.total_premium_volume).toFixed(2); + + return { + timestamp, + dailyVolume, + totalVolume, + }; +} + +async function getLyraVolumeData( + endpoint: string +): Promise { + const results = await fetchURL(endpoint) + return results.result; +} + +export default adapter; From 8239b5387f4359bd9ea3e277a1fd23da43fca85d Mon Sep 17 00:00:00 2001 From: paulvaden Date: Wed, 17 Apr 2024 10:38:57 -0400 Subject: [PATCH 0368/1590] Add Lyra Chain and Lyra Perps volume --- dexs/lyra/index.ts | 2 +- helpers/chains.ts | 1 + options/lyra-v2/index.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dexs/lyra/index.ts b/dexs/lyra/index.ts index d79c0b2264..cf77ca6395 100644 --- a/dexs/lyra/index.ts +++ b/dexs/lyra/index.ts @@ -17,7 +17,7 @@ export const lyraVolumeEndpoint = (endTime: number) => { const adapter: SimpleAdapter = { adapter: { - [CHAIN.ETHEREUM]: { + [CHAIN.LYRA]: { fetch: fetchLyraVolumeData, start: 1702630075, }, diff --git a/helpers/chains.ts b/helpers/chains.ts index b2b2723a88..31847b332e 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -145,6 +145,7 @@ export enum CHAIN { ZORA = "zora", SVM = "svm", ASTRZK = "astrzk", + LYRA = "lyra", } // Don´t use diff --git a/options/lyra-v2/index.ts b/options/lyra-v2/index.ts index 866c4f1e2a..d79dbd33f5 100644 --- a/options/lyra-v2/index.ts +++ b/options/lyra-v2/index.ts @@ -16,7 +16,7 @@ export const lyraVolumeEndpoint = (endTime: number) => { export const v2_adapter: SimpleAdapter = { adapter: { - [CHAIN.ETHEREUM]: { + [CHAIN.LYRA]: { fetch: fetchLyraVolumeData, start: 1702630075 }, From 36aebf481405dffefca924e36d444ef4e4d5a57d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 17 Apr 2024 15:55:47 +0000 Subject: [PATCH 0369/1590] fix inflow --- fees/ethena.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/ethena.ts b/fees/ethena.ts index 65dacb78c9..6239e4df68 100644 --- a/fees/ethena.ts +++ b/fees/ethena.ts @@ -17,7 +17,7 @@ const fetch = async (options: FetchOptions) => { WHERE block_number > 18637861 AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' - AND topic_2 in ('\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87') + AND topic_2 in ('\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87', '\\x0000000000000000000000002b5ab59163a6e93b4486f6055d33ca4a115dd4d5') AND block_time BETWEEN llama_replace_date_range; `, options); From 2a7f68a5ea6f2903c1177db77cc393df5043238a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 17 Apr 2024 17:44:48 +0000 Subject: [PATCH 0370/1590] add some logoc --- fees/swych/index.ts | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/fees/swych/index.ts b/fees/swych/index.ts index cb4fe9e25f..7e59bb4de9 100644 --- a/fees/swych/index.ts +++ b/fees/swych/index.ts @@ -90,36 +90,36 @@ const fetchTotalProtocolRevenue = async (options: FetchOptions) => { ...logs_decrease_position, ...logs_liquidate_position ].map((log) => log.collateralToken))]; - const decimals: string[] = await options.api.multiCall({ abi: 'erc20:decimals', calls: collateralToken}) - const oracle: string[] = await options.api.multiCall({ abi: OracleABI.getPrice, calls: collateralToken.map((token) => { - return { - target: contractAddresses.Oracle, - params: [token, true], - } - }) as any }) as string[]; + // const decimals: string[] = await options.api.multiCall({ abi: 'erc20:decimals', calls: collateralToken}) + // // const oracle: string[] = await options.api.multiCall({ abi: OracleABI.getPrice, calls: collateralToken.map((token) => { + // // return { + // // target: contractAddresses.Oracle, + // // params: [token, true], + // // } + // // }) as any }) as string[]; logs_swap.forEach((log) => { const fee = Number(log.fee) dailyFees.add(log.tokenIn, fee); }) logs_incress_position.forEach((log) => { const index = collateralToken.indexOf(log.collateralToken); - const token_decimal = Number(decimals[index]); - const collateralPrice = isStable[log.collateralToken.toLowerCase()] ? 10 ** (30 - token_decimal) : Number(10 ** 6) - const fee = Number(log.feeValue)/collateralPrice + // const token_decimal = Number(decimals[index]); + const collateralPrice = Number(log.indexPrice) + const fee = (Number(log.feeValue)/collateralPrice) dailyFees.add(log.collateralToken, fee); }) logs_decrease_position.forEach((log) => { const index = collateralToken.indexOf(log.collateralToken); - const token_decimal = Number(decimals[index]); - const collateralPrice = isStable[log.collateralToken.toLowerCase()] ? 10 ** (30 - token_decimal) : Number(10 ** 6) - const fee = Number(log.feeValue)/collateralPrice + // const token_decimal = Number(decimals[index]); + const collateralPrice = Number(log.indexPrice) + const fee = (Number(log.feeValue)/collateralPrice) dailyFees.add(log.collateralToken, fee); }) logs_liquidate_position.forEach((log) => { const index = collateralToken.indexOf(log.collateralToken); - const token_decimal = Number(decimals[index]); - const collateralPrice = isStable[log.collateralToken.toLowerCase()] ? 10 ** (30 - token_decimal) : Number(10 ** 6) - const fee = Number(log.feeValue)/collateralPrice + // const token_decimal = Number(decimals[index]); + const collateralPrice = Number(log.indexPrice) + const fee = (Number(log.feeValue)/collateralPrice) dailyFees.add(log.collateralToken, fee); }); return dailyFees; From 6a91868f8eb9cfbdc3905ddaa0b0e4678192a6b4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 17 Apr 2024 18:09:12 +0000 Subject: [PATCH 0371/1590] fix fees --- fees/swych/index.ts | 36 ++++++++---------------------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/fees/swych/index.ts b/fees/swych/index.ts index 7e59bb4de9..870fb24fda 100644 --- a/fees/swych/index.ts +++ b/fees/swych/index.ts @@ -86,41 +86,21 @@ const fetchTotalProtocolRevenue = async (options: FetchOptions) => { const logs_decrease_position = await options.getLogs({ target: contractAddresses.Pool, eventAbi: event_decrease_position }); const logs_liquidate_position = await options.getLogs({ target: contractAddresses.Pool, eventAbi: event_liquidate_position }); const logs_swap = await options.getLogs({ target: contractAddresses.Pool, eventAbi: event_swap }); - const collateralToken = [...new Set([...logs_incress_position, - ...logs_decrease_position, - ...logs_liquidate_position - ].map((log) => log.collateralToken))]; - // const decimals: string[] = await options.api.multiCall({ abi: 'erc20:decimals', calls: collateralToken}) - // // const oracle: string[] = await options.api.multiCall({ abi: OracleABI.getPrice, calls: collateralToken.map((token) => { - // // return { - // // target: contractAddresses.Oracle, - // // params: [token, true], - // // } - // // }) as any }) as string[]; logs_swap.forEach((log) => { - const fee = Number(log.fee) - dailyFees.add(log.tokenIn, fee); + const fee = Number(log.fee) / 1e30; + dailyFees.addCGToken('tether', fee); }) logs_incress_position.forEach((log) => { - const index = collateralToken.indexOf(log.collateralToken); - // const token_decimal = Number(decimals[index]); - const collateralPrice = Number(log.indexPrice) - const fee = (Number(log.feeValue)/collateralPrice) - dailyFees.add(log.collateralToken, fee); + const fee = (Number(log.feeValue)/ 1e30) + dailyFees.addCGToken('tether', fee); }) logs_decrease_position.forEach((log) => { - const index = collateralToken.indexOf(log.collateralToken); - // const token_decimal = Number(decimals[index]); - const collateralPrice = Number(log.indexPrice) - const fee = (Number(log.feeValue)/collateralPrice) - dailyFees.add(log.collateralToken, fee); + const fee = (Number(log.feeValue)/ 1e30) + dailyFees.addCGToken('tether', fee); }) logs_liquidate_position.forEach((log) => { - const index = collateralToken.indexOf(log.collateralToken); - // const token_decimal = Number(decimals[index]); - const collateralPrice = Number(log.indexPrice) - const fee = (Number(log.feeValue)/collateralPrice) - dailyFees.add(log.collateralToken, fee); + const fee = (Number(log.feeValue)/ 1e30) + dailyFees.addCGToken('tether', fee); }); return dailyFees; }; From 3ea9b801cd89bdd516861bb5a881d1569c1815ed Mon Sep 17 00:00:00 2001 From: babash Date: Thu, 18 Apr 2024 12:49:11 +0530 Subject: [PATCH 0372/1590] add fjord foundry V2 fees and volume --- dexs/fjord-foundry/index.ts | 52 +++++++++++++++++++++++++++++++ fees/fjord-foundry/index.ts | 62 +++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 dexs/fjord-foundry/index.ts create mode 100644 fees/fjord-foundry/index.ts diff --git a/dexs/fjord-foundry/index.ts b/dexs/fjord-foundry/index.ts new file mode 100644 index 0000000000..2195fc04d6 --- /dev/null +++ b/dexs/fjord-foundry/index.ts @@ -0,0 +1,52 @@ +import { BreakdownAdapter, FetchV2 } from "../../adapters/types"; +import { getTimestampAtStartOfPreviousDayUTC } from "../../utils/date"; +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; + +const feeEndpoint = "https://fjord-api.vercel.app/api/daily-stats?version=2"; + +const v2ChainIDs = { + [CHAIN.ETHEREUM]: 1, + [CHAIN.POLYGON]: 137, + [CHAIN.ARBITRUM]: 42161, + [CHAIN.AVAX]: 43114, + [CHAIN.BASE]: 8453, + [CHAIN.BLAST]: 81457, + [CHAIN.BSC]: 56, +}; + +const getV2Data = async (endTimestamp, chainId) => { + const dayTimestamp = getTimestampAtStartOfPreviousDayUTC(endTimestamp) + const historicalVolume = (await fetchURL(feeEndpoint)) + + const chainData = historicalVolume.stats.find(cd => cd.chainId === chainId); + + const totalVolume = chainData.stats + .filter(item => item.timestamp <= dayTimestamp) + .reduce((acc, { volume }) => acc + volume, 0) + + const dailyVolume = chainData.stats + .find(dayItem => dayItem.timestamp === dayTimestamp)?.volume + + return { + timestamp: dayTimestamp, + totalVolume: `${totalVolume}`, + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + }; +}; + +const adapter: BreakdownAdapter = { + breakdown: { + v2: Object.keys(v2ChainIDs).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: async (ts: number) => await getV2Data(ts, v2ChainIDs[chain]), + start: 1702857600, + }, + } + }, {}), + } +} + +export default adapter; diff --git a/fees/fjord-foundry/index.ts b/fees/fjord-foundry/index.ts new file mode 100644 index 0000000000..e9449ae8fa --- /dev/null +++ b/fees/fjord-foundry/index.ts @@ -0,0 +1,62 @@ +import { BreakdownAdapter, FetchV2 } from "../../adapters/types"; +import { getTimestampAtStartOfPreviousDayUTC } from "../../utils/date"; +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; + +const feeEndpoint = "https://fjord-api.vercel.app/api/daily-stats?version=2"; + +const v2ChainIDs = { + [CHAIN.ETHEREUM]: 1, + [CHAIN.POLYGON]: 137, + [CHAIN.ARBITRUM]: 42161, + [CHAIN.AVAX]: 43114, + [CHAIN.BASE]: 8453, + [CHAIN.BLAST]: 81457, + [CHAIN.BSC]: 56, +}; + +const getV2Data = async (endTimestamp, chainId) => { + const dayTimestamp = getTimestampAtStartOfPreviousDayUTC(endTimestamp) + const historicalFees = (await fetchURL(feeEndpoint)) + + const chainData = historicalFees.stats.find(cd => cd.chainId === chainId); + + const totalFee = chainData.stats + .filter(item => item.timestamp <= dayTimestamp) + .reduce((acc, { fees }) => acc + fees, 0) + + const dailyFee = chainData.stats + .find(dayItem => dayItem.timestamp === dayTimestamp)?.fees + + return { + timestamp: dayTimestamp, + totalFees: `${totalFee}`, + dailyFees: dailyFee ? `${dailyFee}` : undefined, + totalRevenue: `${totalFee}`, + dailyRevenue: dailyFee ? `${dailyFee}` : undefined, + }; +}; + +const methodology = { + Fees: "Fees collected from user trading fees", + Revenue: "Revenue is 100% fee of each swap which goes to treasury", +}; + +const adapter: BreakdownAdapter = { + breakdown: { + v2: Object.keys(v2ChainIDs).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: async (ts: number) => await getV2Data(ts, v2ChainIDs[chain]), + start: 1702857600, + meta: { + methodology, + }, + }, + } + }, {}), + } +} + +export default adapter; From de7bfa7e253168b2b33b4a5fd51250bc93567265 Mon Sep 17 00:00:00 2001 From: george-lr Date: Thu, 18 Apr 2024 10:03:24 +0200 Subject: [PATCH 0373/1590] Rewrite using the stats API --- fees/yologames/index.ts | 136 ++++++++-------------------------------- 1 file changed, 25 insertions(+), 111 deletions(-) diff --git a/fees/yologames/index.ts b/fees/yologames/index.ts index 3e222f2eae..5a1c0a2d4c 100644 --- a/fees/yologames/index.ts +++ b/fees/yologames/index.ts @@ -1,135 +1,49 @@ import { ETHER_ADDRESS } from "@defillama/sdk/build/general"; import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { queryIndexer } from "../../helpers/indexer"; +import fetchURL from "../../utils/fetchURL"; -const fetchVolume = async (options: FetchOptions) => { - const volumeResult: any = await queryIndexer( - ` - SELECT sum(Value) as "value" FROM ( - SELECT b.Value as Value FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE a.contract_address = LOWER('\\x0000000000E14E87e5c80A8A90817308fFF715d3') - AND a.tx_status = 'SUCCESS' - AND a.topics[0] = '\\x73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca' -- yolo deposited - UNION ALL - SELECT b.Value as Value FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE contract_address = LOWER('\\x0000000000E14E87e5c80A8A90817308fFF715d3') - AND tx_status = 'SUCCESS' - AND topics[0] = '\\xa315167fc4200676e8597c5df065fafa8cecfeac15a8e2aded299a649e4a5175' -- yolo multientry - UNION ALL - SELECT b.Value as Value FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE contract_address = LOWER('\\xA56A95F41e64Bc76CDE7423aB2A2ee1763bD8Bcc') - AND tx_status = 'SUCCESS' - AND topics[0] = '\\xe0498ef6c8973f40195b2ced16991e2e7cba0d33e6a5e42a2e7797d156c874a3' -- btc moon - UNION ALL - SELECT b.Value as Value FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE contract_address = LOWER('\\x693B37a9859Ce9465Fb2aAdeB03811a26A0c37C0') - AND tx_status = 'SUCCESS' - AND topics[0] = '\\xe0498ef6c8973f40195b2ced16991e2e7cba0d33e6a5e42a2e7797d156c874a3' -- eth moon - UNION ALL - SELECT b.Value as Value FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE contract_address = LOWER('\\xA56A95F41e64Bc76CDE7423aB2A2ee1763bD8Bcc') - AND tx_status = 'SUCCESS' - AND topics[0] = '\\xd63b8da4d354e3b7b933761d564d3f17070134d43c981eb109c7c35f87932d29' -- btc doom - UNION ALL - SELECT b.Value as Value FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE contract_address = LOWER('\\x693B37a9859Ce9465Fb2aAdeB03811a26A0c37C0') - AND tx_status = 'SUCCESS' - AND topics[0] = '\\xd63b8da4d354e3b7b933761d564d3f17070134d43c981eb109c7c35f87932d29' -- eth doom - UNION ALL - SELECT b.Value as Value FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE contract_address = LOWER('\\x0000000000acc01064aa5280da3f1c41a35827bc') - AND tx_status = 'SUCCESS' - AND topics[0] = '\\x9a711314e8e01b50116aefb9d50edc1a6b06e39986010af70d18671666586d0e' -- ptb rounds entered - ) - WHERE block_time BETWEEN llama_replace_date_range;`, - options - ); - return volumeResult[0].value; -}; +const nextDayTimestamp = (timestamp: number) => timestamp + 86_400_000; -const fetchFees = async (options: FetchOptions) => { - const volumeResult: any = await queryIndexer( - ` - SELECT sum(Value) as "value" FROM ( - SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE a.contract_address = LOWER('\\x0000000000E14E87e5c80A8A90817308fFF715d3') - AND a.tx_status = 'SUCCESS' - AND a.topics[0] = '\\x73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca' -- yolo deposited - UNION ALL - SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE contract_address = LOWER('\\x0000000000E14E87e5c80A8A90817308fFF715d3') - AND tx_status = 'SUCCESS' - AND topics[0] = '\\xa315167fc4200676e8597c5df065fafa8cecfeac15a8e2aded299a649e4a5175' -- yolo multientry - UNION ALL - SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE contract_address = LOWER('\\xA56A95F41e64Bc76CDE7423aB2A2ee1763bD8Bcc') - AND tx_status = 'SUCCESS' - AND topics[0] = '\\xe0498ef6c8973f40195b2ced16991e2e7cba0d33e6a5e42a2e7797d156c874a3' -- btc moon - UNION ALL - SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE contract_address = LOWER('\\x693B37a9859Ce9465Fb2aAdeB03811a26A0c37C0') - AND tx_status = 'SUCCESS' - AND topics[0] = '\\xe0498ef6c8973f40195b2ced16991e2e7cba0d33e6a5e42a2e7797d156c874a3' -- eth moon - UNION ALL - SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE contract_address = LOWER('\\xA56A95F41e64Bc76CDE7423aB2A2ee1763bD8Bcc') - AND tx_status = 'SUCCESS' - AND topics[0] = '\\xd63b8da4d354e3b7b933761d564d3f17070134d43c981eb109c7c35f87932d29' -- btc doom - UNION ALL - SELECT b.Value*0.01 as Fee FROM blast.core.fact_event_logs a - INNER JOIN blast.core.fact_transactions b ON a.TX_HASH = b.TX_HASH - WHERE contract_address = LOWER('\\x693B37a9859Ce9465Fb2aAdeB03811a26A0c37C0') - AND tx_status = 'SUCCESS' - AND topics[0] = '\\xd63b8da4d354e3b7b933761d564d3f17070134d43c981eb109c7c35f87932d29' -- eth doom - UNION ALL - SELECT DATE_TRUNC('day', block_timestamp) as day, value as Fee FROM blast.core.fact_traces - WHERE TO_ADDRESS = LOWER('\\x6b86fF7863e27d1C8CCf05dF9cB03b8eFaA52125') - AND FROM_ADDRESS = LOWER('\\x0000000000acc01064aa5280da3f1c41a35827bc') -- PTB - ) - WHERE block_time BETWEEN llama_replace_date_range;`, - options - ); - return volumeResult[0].value; +const fetchDailyStats = async ( + timestampSeconds: number +): Promise<{ volumeETH: number; feesETH: number }> => { + const timestampMs = timestampSeconds * 1000; + const url = `https://stats.yologames.io/stats?from=${timestampMs}&to=${nextDayTimestamp( + timestampMs + )}`; + return fetchURL(url) + .then((res) => { + return { volumeETH: Number(res.volumeETH), feesETH: Number(res.feesETH) }; + }) + .catch(() => { + return { volumeETH: 0, feesETH: 0 }; + }); }; -const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { - const [volume, fees] = await Promise.all([ - fetchVolume(options), - fetchFees(options), - ]); +const fetch: any = async (timestampSeconds: number, _: any, options: FetchOptions) => { const dailyFees = options.createBalances(); const dailyVolume = options.createBalances(); - dailyFees.add(ETHER_ADDRESS, fees); - dailyVolume.add(ETHER_ADDRESS, volume); + const statsApiResponse = await fetchDailyStats(timestampSeconds); + dailyFees.add(ETHER_ADDRESS, statsApiResponse.feesETH); + dailyVolume.add(ETHER_ADDRESS, statsApiResponse.volumeETH); return { + timestamp: timestampSeconds, dailyFees, dailyVolume, - timestamp, }; -} +}; const adapter: Adapter = { adapter: { [CHAIN.BLAST]: { fetch, - start: 1709233200, // 29th February 2024 + start: 1709251200, meta: { methodology: { Fees: "YOLO Games collects a 1% fee for Moon Or Doom and YOLO winnings, and a 3% fee on Poke The Bear winnings.", - Volume: "YOLO Games derives volume data from the deposit transactions into all the games." + Volume: + "YOLO Games derives volume data from the deposit transactions into all the games.", }, }, }, From f353419ad2d5e9630edc9235df18594fa2240fd8 Mon Sep 17 00:00:00 2001 From: george-lr Date: Thu, 18 Apr 2024 10:13:59 +0200 Subject: [PATCH 0374/1590] Fix expected output format --- fees/yologames/index.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/fees/yologames/index.ts b/fees/yologames/index.ts index 5a1c0a2d4c..d3e70d63a5 100644 --- a/fees/yologames/index.ts +++ b/fees/yologames/index.ts @@ -22,15 +22,11 @@ const fetchDailyStats = async ( }; const fetch: any = async (timestampSeconds: number, _: any, options: FetchOptions) => { - const dailyFees = options.createBalances(); - const dailyVolume = options.createBalances(); const statsApiResponse = await fetchDailyStats(timestampSeconds); - dailyFees.add(ETHER_ADDRESS, statsApiResponse.feesETH); - dailyVolume.add(ETHER_ADDRESS, statsApiResponse.volumeETH); return { timestamp: timestampSeconds, - dailyFees, - dailyVolume, + dailyFees: statsApiResponse.feesETH.toString(), + dailyVolume: statsApiResponse.volumeETH.toString(), }; }; From 6f18f2ddd56fe14555eecb75e518e7791e4a3dd9 Mon Sep 17 00:00:00 2001 From: george-lr Date: Thu, 18 Apr 2024 10:29:17 +0200 Subject: [PATCH 0375/1590] Fix expected output units --- fees/yologames/index.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fees/yologames/index.ts b/fees/yologames/index.ts index d3e70d63a5..59b78b0b6b 100644 --- a/fees/yologames/index.ts +++ b/fees/yologames/index.ts @@ -22,11 +22,15 @@ const fetchDailyStats = async ( }; const fetch: any = async (timestampSeconds: number, _: any, options: FetchOptions) => { + const dailyFees = options.createBalances(); + const dailyVolume = options.createBalances(); const statsApiResponse = await fetchDailyStats(timestampSeconds); + dailyFees.add(ETHER_ADDRESS, statsApiResponse.feesETH * 1e18); + dailyVolume.add(ETHER_ADDRESS, statsApiResponse.volumeETH * 1e18); return { timestamp: timestampSeconds, - dailyFees: statsApiResponse.feesETH.toString(), - dailyVolume: statsApiResponse.volumeETH.toString(), + dailyFees, + dailyVolume, }; }; From 15b5229f656e99f58130b8eed1832d41fa41fb9c Mon Sep 17 00:00:00 2001 From: JoscelynFarr Date: Thu, 18 Apr 2024 17:55:50 +0800 Subject: [PATCH 0376/1590] update jojo --- dexs/jojo/index.ts | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/dexs/jojo/index.ts b/dexs/jojo/index.ts index 76a1d7dd21..15b9c9ec34 100644 --- a/dexs/jojo/index.ts +++ b/dexs/jojo/index.ts @@ -7,24 +7,7 @@ const historicalVolumeEndpointZk = (symbol: string, chain: string) => `https://a const coins = { 'ethusdc': 'coingecko:ethereum', 'btcusdc': 'coingecko:bitcoin', - 'arbusdc': 'coingecko:arbitrum', - 'solusdc': 'coingecko:solana', - 'linkusdc': 'coingecko:link', - 'memeusdc': 'coingecko:meme', - 'ordiusdc': 'coingecko:ordi', - 'wldusdc': 'coingecko:wld', - 'agixusdc': 'coingecko:agix', - 'arusdc': 'coingecko:ar', - 'tiausdc': 'coingecko:tia', - 'strkusdc': 'coingecko:strk', - 'avaxusdc': 'coingecko:avax', - 'xrpusdc': 'coingecko:xrp', - 'trxusdc': 'coingecko:trx', - 'rndrusdc': 'coingecko:rndr', - 'adausdc': 'coingecko:ada', - 'altusdc': 'coingecko:alt', - 'dogeusdc': 'coingecko:doge', - 'xaiusdc': 'coingecko:xai' + 'solusdc': 'coingecko:solana' } interface IVolumeall { @@ -65,6 +48,10 @@ const adapter: SimpleAdapter = { fetch: getFetch("arbitrum"), start: 1687017600, }, + [CHAIN.BASE]: { + fetch: getFetch("base"), + start: 1711965100, + }, }, }; From 4a1b6706531e0f79d7677c62c2a254d32273d90f Mon Sep 17 00:00:00 2001 From: george-lr Date: Thu, 18 Apr 2024 14:28:00 +0200 Subject: [PATCH 0377/1590] Remove volume from the adapter --- fees/yologames/index.ts | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/fees/yologames/index.ts b/fees/yologames/index.ts index 59b78b0b6b..f4623caa5c 100644 --- a/fees/yologames/index.ts +++ b/fees/yologames/index.ts @@ -7,30 +7,27 @@ const nextDayTimestamp = (timestamp: number) => timestamp + 86_400_000; const fetchDailyStats = async ( timestampSeconds: number -): Promise<{ volumeETH: number; feesETH: number }> => { +): Promise<{ feesETH: number }> => { const timestampMs = timestampSeconds * 1000; const url = `https://stats.yologames.io/stats?from=${timestampMs}&to=${nextDayTimestamp( timestampMs )}`; return fetchURL(url) .then((res) => { - return { volumeETH: Number(res.volumeETH), feesETH: Number(res.feesETH) }; + return { feesETH: Number(res.feesETH) }; }) .catch(() => { - return { volumeETH: 0, feesETH: 0 }; + return {feesETH: 0 }; }); }; const fetch: any = async (timestampSeconds: number, _: any, options: FetchOptions) => { const dailyFees = options.createBalances(); - const dailyVolume = options.createBalances(); const statsApiResponse = await fetchDailyStats(timestampSeconds); dailyFees.add(ETHER_ADDRESS, statsApiResponse.feesETH * 1e18); - dailyVolume.add(ETHER_ADDRESS, statsApiResponse.volumeETH * 1e18); return { timestamp: timestampSeconds, dailyFees, - dailyVolume, }; }; @@ -42,8 +39,6 @@ const adapter: Adapter = { meta: { methodology: { Fees: "YOLO Games collects a 1% fee for Moon Or Doom and YOLO winnings, and a 3% fee on Poke The Bear winnings.", - Volume: - "YOLO Games derives volume data from the deposit transactions into all the games.", }, }, }, From 1a884cfe7e8384532e0085c488edb68717e409e0 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 18 Apr 2024 13:44:05 +0100 Subject: [PATCH 0378/1590] kyber chains --- aggregators/kyberswap/index.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/aggregators/kyberswap/index.ts b/aggregators/kyberswap/index.ts index 99eea6b75d..c0b43c3a70 100644 --- a/aggregators/kyberswap/index.ts +++ b/aggregators/kyberswap/index.ts @@ -16,6 +16,11 @@ const chainToId: Record = { [CHAIN.SCROLL]: 534352, [CHAIN.ERA]: 324, [CHAIN.CRONOS]: 25, + [CHAIN.BASE]: 8453, + [CHAIN.MANTLE]: 5000, + [CHAIN.BLAST]: 81457, + [CHAIN.POLYGON_ZKEVM]: 1101, + [CHAIN.BITTORRENT]: 199 }; const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { @@ -31,6 +36,26 @@ const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) = const adapter: SimpleAdapter = { adapter: { + [CHAIN.BASE]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.MANTLE]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.BLAST]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.POLYGON_ZKEVM]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.BITTORRENT]: { + fetch: fetch, + start: 1622544000, + }, [CHAIN.ETHEREUM]: { fetch: fetch, start: 1622544000, From 518f84b198e4c31ad82a9b7fb2391351c5f9da5a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 18 Apr 2024 13:20:27 +0000 Subject: [PATCH 0379/1590] fix dodo --- {aggregators => dexs/dodo}/dodo-agg/index.ts | 15 ++++++++------- dexs/dodo/index.ts | 16 ++++++++++++---- 2 files changed, 20 insertions(+), 11 deletions(-) rename {aggregators => dexs/dodo}/dodo-agg/index.ts (88%) diff --git a/aggregators/dodo-agg/index.ts b/dexs/dodo/dodo-agg/index.ts similarity index 88% rename from aggregators/dodo-agg/index.ts rename to dexs/dodo/dodo-agg/index.ts index 45796de7bb..5a44b86a11 100644 --- a/aggregators/dodo-agg/index.ts +++ b/dexs/dodo/dodo-agg/index.ts @@ -1,6 +1,6 @@ // https://api.dodoex.io/dodo-contract/list -const config = { +const config: any = { ethereum: { DODOFeeRouteProxys: ['0x21b9F852534Fb9DdC3A0A7B24f067B50d8AC9a99', '0x50f9bDe1c76bba997a5d6e7FEFff695ec8536194']}, optimism: { DODOFeeRouteProxys: ['0x716fcc67dcA500A91B4a28c9255262c398D8f971', '0xc7d7CC1e9f5E823887980c9C51F9c418ee3A3e28']}, bsc: { DODOFeeRouteProxys: ['0xa8b034301Bb5DD3610db585Def3e7C0d52f2319F', '0x0656fD85364d03b103CEEda192FB2D3906A6ac15']}, @@ -16,13 +16,13 @@ const config = { scroll: { DODOFeeRouteProxys: ['0xf0512872fEc0173d1d99c2dd8CDCb770054b675b', '0x4e998615aD430C1cA46A69d813edE6EB3EC55eDb']}, } -import { ChainBlocks, FetchOptions } from "../../adapters/types"; +import { ChainBlocks, FetchOptions } from "../../../adapters/types"; const abis = { "OrderHistory": "event OrderHistory (address fromToken, address toToken, address sender, uint256 fromAmount, uint256 returnAmount)", } -const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions) => { +const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain }: FetchOptions) => { const dailyVolume = createBalances() const logs = await getLogs({ targets: config[chain].DODOFeeRouteProxys, eventAbi: abis.OrderHistory, }) @@ -32,10 +32,11 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLog return { timestamp, dailyVolume } }; -const adapter: any = { +const adapter_agg: any = { adapter: {}, }; -Object.keys(config).forEach((chain) => adapter.adapter[chain] = { fetch, start: 1690848000, }); - -export default adapter; +Object.keys(config).forEach((chain) => adapter_agg.adapter[chain] = { fetch, start: 1690848000, }); +export { + adapter_agg +} diff --git a/dexs/dodo/index.ts b/dexs/dodo/index.ts index 2c76d0fe09..1d4a0ddc45 100644 --- a/dexs/dodo/index.ts +++ b/dexs/dodo/index.ts @@ -1,9 +1,9 @@ -import { Adapter, ChainEndpoints, Fetch, IStartTimestamp, SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, Fetch, IStartTimestamp } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { postURL } from "../../utils/fetchURL"; import dailyVolumePayload from "./dailyVolumePayload"; -import totalVolumePayload from "./totalVolumePayload"; +import { adapter_agg } from "./dodo-agg/index"; /* const endpoints = { [CHAIN.ARBITRUM]: "https://api.dodoex.io/graphql?opname=FetchDashboardDailyData", @@ -95,7 +95,15 @@ const volume = chains.reduce( {} ); -const adapter: SimpleAdapter = { +const adapter: any = { adapter: volume }; -export default adapter; + +const adapterBreakdown: BreakdownAdapter = { + breakdown: { + "dodo": adapter.adapter, + "dodo-agg": adapter_agg["adapter"], + } +} + +export default adapterBreakdown From 37ccb1b07a4dd0bcd0c75b76bebeeb40c008ad9a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 18 Apr 2024 13:45:54 +0000 Subject: [PATCH 0380/1590] fix cache time --- fees/arbitrum/index.ts | 2 +- fees/chainlink-requests.ts | 4 ++-- fees/op-bnb.ts | 2 +- fees/polygon.ts | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fees/arbitrum/index.ts b/fees/arbitrum/index.ts index bd0be1e7fe..fc77ba06ed 100644 --- a/fees/arbitrum/index.ts +++ b/fees/arbitrum/index.ts @@ -25,7 +25,7 @@ const adapter: Adapter = { ` // const seqGas: number = sequencerGas[0].sum const seqGas: any = await queryIndexer(sequencerGas, options) - const feeQuery = await queryFlipside(`SELECT SUM(TX_FEE) from arbitrum.core.fact_transactions where BLOCK_NUMBER > ${startblock} AND BLOCK_NUMBER < ${endblock}`, 560) + const feeQuery = await queryFlipside(`SELECT SUM(TX_FEE) from arbitrum.core.fact_transactions where BLOCK_NUMBER > ${startblock} AND BLOCK_NUMBER < ${endblock}`, 260) const fees = Number(feeQuery[0][0]) dailyFees.addGasToken(fees * 1e18) diff --git a/fees/chainlink-requests.ts b/fees/chainlink-requests.ts index ba62cb0f5d..749992d00c 100644 --- a/fees/chainlink-requests.ts +++ b/fees/chainlink-requests.ts @@ -65,7 +65,7 @@ const fetchRequests = (chain: Chain) => { const query_paid = build_link_query(timestamp) const gas_query = build_gas_query(timestamp) - const linkPaid_logs: ILog[] = (await queryFlipside(query_paid, 560)) + const linkPaid_logs: ILog[] = (await queryFlipside(query_paid, 260)) .map(([data, topics, transactionHash, chain]: [string, string[], string, string]) => { return { data, @@ -80,7 +80,7 @@ const fetchRequests = (chain: Chain) => { const payments = Number('0x'+data.slice(128, 192)) / 10 ** 18; return payments; }).reduce((a: number, b: number) => a + b, 0); - const ethGas = await queryFlipside(gas_query, 560) + const ethGas = await queryFlipside(gas_query, 260) const gas_fees = ethGas.map(([fee, chain]: [string, string]) => { return { diff --git a/fees/op-bnb.ts b/fees/op-bnb.ts index 40816a76dd..511f69d9cc 100644 --- a/fees/op-bnb.ts +++ b/fees/op-bnb.ts @@ -36,7 +36,7 @@ const fetch = async (timestamp: number, _chainBlocks: ChainBlocks, options: Fetc and BLOCK_NUMBER > ${await getFromBlock()} AND BLOCK_NUMBER < ${await getToBlock()} ` - const cost_to_l1: number[] = (await queryFlipside(query, 560)).flat(); + const cost_to_l1: number[] = (await queryFlipside(query, 260)).flat(); const dailyFees = await getFees(options) const dailyRevenue = dailyFees.clone(); dailyRevenue.addGasToken((cost_to_l1[0] ?? 0) * 1e18 * -1) diff --git a/fees/polygon.ts b/fees/polygon.ts index 6a11164ca5..6a61ba186f 100644 --- a/fees/polygon.ts +++ b/fees/polygon.ts @@ -46,7 +46,7 @@ const adapter: Adapter = { LEFT JOIN BlockTotals bt ON tt.BLOCK_NUMBER = bt.BLOCK_NUMBER;` - const [tx_fee, burn_fee]: number[] = (await queryFlipside(query_tx_fee, 560)).flat(); + const [tx_fee, burn_fee]: number[] = (await queryFlipside(query_tx_fee, 260)).flat(); const maticAddress = "ethereum:" + ADDRESSES.ethereum.MATIC; dailyFees.addTokenVannila(maticAddress, tx_fee * 1e18); From ca4176d6a11bc9c6277973884b1f728aab7fc0b6 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 18 Apr 2024 14:27:35 +0000 Subject: [PATCH 0381/1590] fix kyberswap fees --- fees/kyberswap.ts | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/fees/kyberswap.ts b/fees/kyberswap.ts index 9dd5af4b44..d3182b1b67 100644 --- a/fees/kyberswap.ts +++ b/fees/kyberswap.ts @@ -110,18 +110,21 @@ const graphsElasticV2 = (chain: Chain) => { }`; if (!elasticEndpointsV2[chain]) return { timestamp }; - const graphRes: IPoolDay = await request(elasticEndpointsV2[chain], graphQuery); - const dailyFee = new BigNumber(graphRes.poolDayDatas.reduce((a: number, b: IData) => a + Number(b.feesUSD), 0)) - - return { - timestamp, - dailyUserFees: dailyFee.toString(), - dailyFees: dailyFee.toString(), - dailyRevenue: dailyFee.multipliedBy(0.16).toString(), - dailyProtocolRevenue: "0", - dailyHoldersRevenue: dailyFee.multipliedBy(0.16).toString(), - dailySupplySideRevenue: dailyFee.multipliedBy(0.84).toString(), - }; + try { + const graphRes: IPoolDay = await request(elasticEndpointsV2[chain], graphQuery); + const dailyFee = new BigNumber(graphRes.poolDayDatas.reduce((a: number, b: IData) => a + Number(b.feesUSD), 0)) + return { + timestamp, + dailyUserFees: dailyFee.toString(), + dailyFees: dailyFee.toString(), + dailyRevenue: dailyFee.multipliedBy(0.16).toString(), + dailyProtocolRevenue: "0", + dailyHoldersRevenue: dailyFee.multipliedBy(0.16).toString(), + dailySupplySideRevenue: dailyFee.multipliedBy(0.84).toString(), + }; + } catch (e) { + return { timestamp }; + } }; }; @@ -183,6 +186,7 @@ const graphsClassic = (chain: Chain) => { } } `; + try { const graphRes: IPoolData[] = (await request(classicEndpoints[chain], graphQuery)).poolDayDatas; const dailyFeeUSD = graphRes.reduce((a: number, b: IPoolData) => a + Number(b.dailyFeeUSD), 0) @@ -198,6 +202,9 @@ const graphsClassic = (chain: Chain) => { dailyHoldersRevenue: dailyFee.multipliedBy(0.16).toString(), dailySupplySideRevenue: dailyFee.multipliedBy(0.84).toString(), }; + } catch (e) { + return { timestamp } + } }; }; From 3b796b8b9fba7fe7b2f0477bd65b6279cce7da99 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 18 Apr 2024 14:31:22 +0000 Subject: [PATCH 0382/1590] fix verse fees --- fees/verse.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fees/verse.ts b/fees/verse.ts index ab40815dda..57f00b60de 100644 --- a/fees/verse.ts +++ b/fees/verse.ts @@ -2,6 +2,7 @@ import { CHAIN } from "../helpers/chains"; import { BaseAdapter, Adapter, ChainBlocks, FetchOptions, Fetch } from "../adapters/types"; import volumeAdapter from "../dexs/verse"; import BigNumber from "bignumber.js"; +import { version } from "os"; const adapterObj = volumeAdapter.adapter; @@ -49,11 +50,12 @@ const baseAdapter: BaseAdapter = { meta: { methodology } - } + }, } const adapter: Adapter = { - adapter: baseAdapter + adapter: baseAdapter, + version: 2 }; export default adapter; From 5f3482d138151678ba7bd8b09652df410be569ba Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 18 Apr 2024 14:53:49 +0000 Subject: [PATCH 0383/1590] disable el-dorado-exchange --- dexs/el-dorado-exchange/index.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/dexs/el-dorado-exchange/index.ts b/dexs/el-dorado-exchange/index.ts index 7293b34417..2b4192b806 100644 --- a/dexs/el-dorado-exchange/index.ts +++ b/dexs/el-dorado-exchange/index.ts @@ -1,7 +1,8 @@ import request, { gql } from "graphql-request"; -import {BreakdownAdapter, Fetch, SimpleAdapter} from "../../adapters/types"; +import {BreakdownAdapter, DISABLED_ADAPTER_KEY, Fetch, SimpleAdapter} from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import disabledAdapter from "../../helpers/disabledAdapter"; const endpoints: { [key: string]: string } = { // [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/metaverseblock/ede_stats_elpall_test", @@ -79,12 +80,15 @@ const startTimestamps: { [chain: string]: number } = { const adapter: BreakdownAdapter = { + breakdown: { + "swap": Object.keys(endpoints).reduce((acc, chain) => { return { ...acc, + [DISABLED_ADAPTER_KEY]: disabledAdapter, [chain]: { - fetch: getFetch(historicalDataSwap)(chain), + fetch: async (timestamp: number) => {return {timestamp}}, start: startTimestamps[chain] } } @@ -92,8 +96,9 @@ const adapter: BreakdownAdapter = { "derivatives": Object.keys(endpoints).reduce((acc, chain) => { return { ...acc, + [DISABLED_ADAPTER_KEY]: disabledAdapter, [chain]: { - fetch: getFetch(historicalDataDerivatives)(chain), + fetch: async (timestamp: number) => {return {timestamp}}, start: startTimestamps[chain] } } From b25acdaa7c4f422648c9fe29c73cd8ba3446227f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 18 Apr 2024 14:55:21 +0000 Subject: [PATCH 0384/1590] disable el-dorado-exchange --- fees/el-dorado-exchange.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/fees/el-dorado-exchange.ts b/fees/el-dorado-exchange.ts index b5b0765a88..1ccfe44db9 100644 --- a/fees/el-dorado-exchange.ts +++ b/fees/el-dorado-exchange.ts @@ -1,9 +1,10 @@ import { Chain } from "@defillama/sdk/build/general"; import { gql, request } from "graphql-request"; import type { ChainEndpoints } from "../adapters/types"; -import { Adapter } from "../adapters/types"; -import { BSC, ARBITRUM } from "../helpers/chains"; +import { Adapter, DISABLED_ADAPTER_KEY } from "../adapters/types"; +import { ARBITRUM } from "../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; +import disabledAdapter from "../helpers/disabledAdapter"; const endpoints = { // [BSC]: "https://api.thegraph.com/subgraphs/name/metaverseblock/ede_stats_elpall_test", @@ -48,7 +49,9 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + adapter: { + [DISABLED_ADAPTER_KEY]: disabledAdapter, // [BSC]: { // fetch: graphs(endpoints)(BSC), // start: 1670659200, @@ -61,7 +64,7 @@ const adapter: Adapter = { // } // }, [ARBITRUM]: { - fetch: graphs(endpoints)(ARBITRUM), + fetch: async (timestamp: number) => {return {timestamp}}, start: 1678147200, meta: { methodology: { From ff56023e8e7bdaa817043523f448b2fa3df26c54 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 18 Apr 2024 15:50:15 +0000 Subject: [PATCH 0385/1590] fix kyber --- dexs/kyberswap/index.ts | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/dexs/kyberswap/index.ts b/dexs/kyberswap/index.ts index 2de8e244d3..c32d9bcbd8 100644 --- a/dexs/kyberswap/index.ts +++ b/dexs/kyberswap/index.ts @@ -34,7 +34,7 @@ const kyberswapElasticV2 = univ2Adapter({ dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); - +kyberswapElasticV2.version = 2; kyberswapElasticV2.adapter.ethereum.start = 1654905600; kyberswapElasticV2.adapter.bsc.start = 1654732800; kyberswapElasticV2.adapter.polygon.start = 1654732800; @@ -213,19 +213,14 @@ function buildFromEndpoints(endpoints: typeof classicEndpoints, graphs: typeof c fetch: async (options: FetchOptions) => { const a = (customeElasicVolumeFunctions[chain] !== undefined) && isElastic ? await customeElasicVolumeFunctions[chain](options.endTimestamp) : (await graphs(chain as any)(options)) const elasticV2 = (kyberswapElasticV2.adapter[chain as Chain]?.fetch != undefined && isElastic) ? (await kyberswapElasticV2.adapter[chain as Chain]?.fetch(options as any, {}, options)) : {} as FetchResultVolume; - const dailyVolume = Number(a.dailyVolume) + Number(elasticV2?.dailyVolume || 0) - const totalVolume = Number(a.totalVolume) + Number(elasticV2?.totalVolume || 0) + const dailyVolume = Number(a?.dailyVolume || 0) + Number(elasticV2?.dailyVolume || 0) + const totalVolume = Number(a?.totalVolume || 0) + Number(elasticV2?.totalVolume || 0) return { dailyVolume: `${dailyVolume}`, totalVolume: chain === CHAIN.ARBITRUM ? undefined : `${totalVolume}`, }; }, - start: getStartTimestamp({ - endpoints: endpoints, - chain: chain, - volumeField, - dailyDataField - }) + start: 0, } return acc }, {} as BaseAdapter) @@ -234,7 +229,7 @@ function buildFromEndpoints(endpoints: typeof classicEndpoints, graphs: typeof c const adapter: BreakdownAdapter = { version: 2, breakdown: { - classic: buildFromEndpoints(classicEndpoints, classicGraphs, DEFAULT_DAILY_VOLUME_FIELD, "dmmDayDatas", false), + // classic: buildFromEndpoints(classicEndpoints, classicGraphs, DEFAULT_DAILY_VOLUME_FIELD, "dmmDayDatas", false), elastic: buildFromEndpoints(elasticEndpoints, elasticGraphs, "volumeUSD", "kyberSwapDayDatas", true) } } From 6dabd85c544c9c8095476a69bd44203d2d852d20 Mon Sep 17 00:00:00 2001 From: babash Date: Fri, 19 Apr 2024 11:44:39 +0530 Subject: [PATCH 0386/1590] remove timestamp --- dexs/fjord-foundry/index.ts | 1 - fees/fjord-foundry/index.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/dexs/fjord-foundry/index.ts b/dexs/fjord-foundry/index.ts index 2195fc04d6..7b6f57bc85 100644 --- a/dexs/fjord-foundry/index.ts +++ b/dexs/fjord-foundry/index.ts @@ -29,7 +29,6 @@ const getV2Data = async (endTimestamp, chainId) => { .find(dayItem => dayItem.timestamp === dayTimestamp)?.volume return { - timestamp: dayTimestamp, totalVolume: `${totalVolume}`, dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, }; diff --git a/fees/fjord-foundry/index.ts b/fees/fjord-foundry/index.ts index e9449ae8fa..474db1df51 100644 --- a/fees/fjord-foundry/index.ts +++ b/fees/fjord-foundry/index.ts @@ -29,7 +29,6 @@ const getV2Data = async (endTimestamp, chainId) => { .find(dayItem => dayItem.timestamp === dayTimestamp)?.fees return { - timestamp: dayTimestamp, totalFees: `${totalFee}`, dailyFees: dailyFee ? `${dailyFee}` : undefined, totalRevenue: `${totalFee}`, From 35f566889e8b1b954064394203b0459956464eb1 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 19 Apr 2024 09:46:43 +0100 Subject: [PATCH 0387/1590] btt comment --- aggregators/kyberswap/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/aggregators/kyberswap/index.ts b/aggregators/kyberswap/index.ts index c0b43c3a70..8c063a51dd 100644 --- a/aggregators/kyberswap/index.ts +++ b/aggregators/kyberswap/index.ts @@ -52,10 +52,10 @@ const adapter: SimpleAdapter = { fetch: fetch, start: 1622544000, }, - [CHAIN.BITTORRENT]: { - fetch: fetch, - start: 1622544000, - }, + // [CHAIN.BITTORRENT]: { + // fetch: fetch, + // start: 1622544000, + // }, [CHAIN.ETHEREUM]: { fetch: fetch, start: 1622544000, From dd900113802f7789eafa4a7741e5939b6d47bea1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 19 Apr 2024 11:37:01 +0000 Subject: [PATCH 0388/1590] fix use endtime stamp --- dexs/lyra/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/lyra/index.ts b/dexs/lyra/index.ts index cf77ca6395..b953d707bc 100644 --- a/dexs/lyra/index.ts +++ b/dexs/lyra/index.ts @@ -1,4 +1,4 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; @@ -25,9 +25,9 @@ const adapter: SimpleAdapter = { }; export async function fetchLyraVolumeData( - timestamp: number + timestamp: number, _:ChainBlocks, { endTimestamp }: FetchOptions ) { - let timestamp_in_ms = timestamp * 1000 + const timestamp_in_ms = endTimestamp * 1000 const lyraVolumeData = await getLyraVolumeData(lyraVolumeEndpoint(timestamp_in_ms)); const dailyVolume = Number(lyraVolumeData.daily_premium_volume).toFixed(2); const totalVolume = Number(lyraVolumeData.total_premium_volume).toFixed(2); From 953f029f623d00c30d35ec4e39f940fac04a1acc Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 19 Apr 2024 11:39:24 +0000 Subject: [PATCH 0389/1590] fix endtime --- dexs/lyra/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dexs/lyra/index.ts b/dexs/lyra/index.ts index b953d707bc..060016a7f0 100644 --- a/dexs/lyra/index.ts +++ b/dexs/lyra/index.ts @@ -1,6 +1,7 @@ import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; +import { getTimestampAtStartOfNextDayUTC } from "../../utils/date"; interface ILyraVolumeResponse { daily_premium_volume: string; @@ -25,9 +26,10 @@ const adapter: SimpleAdapter = { }; export async function fetchLyraVolumeData( - timestamp: number, _:ChainBlocks, { endTimestamp }: FetchOptions + timestamp: number ) { - const timestamp_in_ms = endTimestamp * 1000 + const dayTimestamp = getTimestampAtStartOfNextDayUTC(timestamp); + const timestamp_in_ms = dayTimestamp * 1000 const lyraVolumeData = await getLyraVolumeData(lyraVolumeEndpoint(timestamp_in_ms)); const dailyVolume = Number(lyraVolumeData.daily_premium_volume).toFixed(2); const totalVolume = Number(lyraVolumeData.total_premium_volume).toFixed(2); From b6eeaaa5dd34bf8d46d8a0e5ff5d482b2e8fd29f Mon Sep 17 00:00:00 2001 From: EPETE-EPETE <89405534+EPETE-EPETE@users.noreply.github.com> Date: Fri, 19 Apr 2024 10:26:07 -0400 Subject: [PATCH 0390/1590] add linea to Beefy fee adapter --- fees/beefy/index.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fees/beefy/index.ts b/fees/beefy/index.ts index 2b64d543b1..f12feddb3e 100644 --- a/fees/beefy/index.ts +++ b/fees/beefy/index.ts @@ -122,6 +122,14 @@ const adapter: Adapter = { methodology } }, + [CHAIN.LINEA]: { + fetch: fetch('linea'), + start: 1710028800, // 20024-03-10 + runAtCurrTime: false, + meta: { + methodology + } + }, }, isExpensiveAdapter: true, }; From d22368f132b163c6cdb3d294ff92362a2f0c15a7 Mon Sep 17 00:00:00 2001 From: EPETE-EPETE <89405534+EPETE-EPETE@users.noreply.github.com> Date: Fri, 19 Apr 2024 10:40:15 -0400 Subject: [PATCH 0391/1590] add linea to IRevenue and fix year typo --- fees/beefy/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/beefy/index.ts b/fees/beefy/index.ts index f12feddb3e..8c49baf9a5 100644 --- a/fees/beefy/index.ts +++ b/fees/beefy/index.ts @@ -24,6 +24,7 @@ interface IRevenue { optimism: number; BNB: number; ethereum: number; + linea: number; } const fetch = (chain: Exclude): Fetch => { @@ -124,7 +125,7 @@ const adapter: Adapter = { }, [CHAIN.LINEA]: { fetch: fetch('linea'), - start: 1710028800, // 20024-03-10 + start: 1710028800, // 2024-03-10 runAtCurrTime: false, meta: { methodology From 993e347a32646a48bbbfb6c35b6da38ab26b39b3 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 21 Apr 2024 06:08:47 +0100 Subject: [PATCH 0392/1590] v2 --- fees/uniswap-lab.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fees/uniswap-lab.ts b/fees/uniswap-lab.ts index 1d431ecb26..6a52a6e1b8 100644 --- a/fees/uniswap-lab.ts +++ b/fees/uniswap-lab.ts @@ -1,5 +1,5 @@ import ADDRESSES from '../helpers/coreAssets.json' -import { ChainBlocks, FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { addTokensReceived } from '../helpers/token'; const config: any = { @@ -12,15 +12,16 @@ const config: any = { avax: {tokens: [ADDRESSES.avax.USDC], targets: ["0x7ffc3dbf3b2b50ff3a1d5523bc24bb5043837b14"]}, } -const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions): Promise => { +const fetch = async (options: FetchOptions) => { const dailyFees = await addTokensReceived({ ...config[options.chain], options}) - return { timestamp, dailyFees, dailyRevenue: dailyFees } + return { dailyFees, dailyRevenue: dailyFees } } const adapters: SimpleAdapter = { adapter: Object.keys(config).reduce((all, chain)=>({ ...all, [chain]: { fetch, start: 1696896000 } - }), {}) + }), {}), + version: 2 } export default adapters; From 6d5e700b05e354db059fd53e6ac2f8e0bfb25f8f Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 21 Apr 2024 06:36:36 +0100 Subject: [PATCH 0393/1590] calculate wbtc fees --- fees/wbtc/index.ts | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 fees/wbtc/index.ts diff --git a/fees/wbtc/index.ts b/fees/wbtc/index.ts new file mode 100644 index 0000000000..a9896dfc71 --- /dev/null +++ b/fees/wbtc/index.ts @@ -0,0 +1,47 @@ +import { FetchOptions } from "../../adapters/types"; + +const btcRpcCall = (method:string, params:any)=> fetch("https://rpc.ankr.com/btc", { + method: "POST", + body: JSON.stringify({ + "jsonrpc": "1.0", + "id": "1", + method, + params + }) + }).then(r=>r.json()) + +async function getBitcoinTx(txId:string){ + const fullTx = await btcRpcCall("getrawtransaction",[txId]) + return btcRpcCall("decoderawtransaction", [fullTx.result]) +} + +function findClosest(arr:number[], target:number){ + return arr.reduce((best, item)=>{ + if(Math.abs(target-item) < Math.abs(target-best)){ + return item + } + return best + }) +} + +export default { + adapter: { + "ethereum": { + fetch: async ({ getLogs, createBalances }: FetchOptions) => { + const mints = await getLogs({target: "0xe5A5F138005E19A3E6D0FE68b039397EeEf2322b", eventAbi: "event MintConfirmed (uint256 indexed nonce, address indexed requester, uint256 amount, string btcDepositAddress, string btcTxid, uint256 timestamp, bytes32 requestHash)"}) + const burns = await getLogs({target: "0xe5A5F138005E19A3E6D0FE68b039397EeEf2322b", eventAbi: "event BurnConfirmed (uint256 indexed nonce, address indexed requester, uint256 amount, string btcDepositAddress, string btcTxid, uint256 timestamp, bytes32 inputRequestHash)"}) + const dailyFees = createBalances(); + await Promise.all(mints.concat(burns).map(async event=>{ + const amount = Number(event.amount) + const btcTx = await getBitcoinTx(event.btcTxid) + const btcSend = findClosest(btcTx.result.vout.map(v=>v.value), amount/1e8) + dailyFees.add('0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', Math.abs(amount-btcSend*1e8)); + })) + return { dailyFees, dailyRevenue: dailyFees } + + }, + start: 0 + } + }, + version: 2 +} \ No newline at end of file From 3757bbb9dd81ae074b2d95a1baf6271391d51149 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 21 Apr 2024 07:17:46 +0100 Subject: [PATCH 0394/1590] fix start --- fees/wbtc/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/wbtc/index.ts b/fees/wbtc/index.ts index a9896dfc71..e2cfd9c039 100644 --- a/fees/wbtc/index.ts +++ b/fees/wbtc/index.ts @@ -40,7 +40,7 @@ export default { return { dailyFees, dailyRevenue: dailyFees } }, - start: 0 + start: 1543017600 } }, version: 2 From 036745807b73137275c989b10d54c6b821b0f09f Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 21 Apr 2024 13:59:38 +0100 Subject: [PATCH 0395/1590] fix case of split utxos --- fees/wbtc/index.ts | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/fees/wbtc/index.ts b/fees/wbtc/index.ts index e2cfd9c039..016274ddfa 100644 --- a/fees/wbtc/index.ts +++ b/fees/wbtc/index.ts @@ -15,15 +15,6 @@ async function getBitcoinTx(txId:string){ return btcRpcCall("decoderawtransaction", [fullTx.result]) } -function findClosest(arr:number[], target:number){ - return arr.reduce((best, item)=>{ - if(Math.abs(target-item) < Math.abs(target-best)){ - return item - } - return best - }) -} - export default { adapter: { "ethereum": { @@ -34,7 +25,7 @@ export default { await Promise.all(mints.concat(burns).map(async event=>{ const amount = Number(event.amount) const btcTx = await getBitcoinTx(event.btcTxid) - const btcSend = findClosest(btcTx.result.vout.map(v=>v.value), amount/1e8) + const btcSend = btcTx.result.vout.filter(v=>v.scriptPubKey.address === event.btcDepositAddress).reduce((sum, v)=>sum+v.value, 0) dailyFees.add('0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', Math.abs(amount-btcSend*1e8)); })) return { dailyFees, dailyRevenue: dailyFees } From e6ba2e5e38387c141163895de0c788757cc78a96 Mon Sep 17 00:00:00 2001 From: 0xgreatape <0xgreatape@gmail.com> Date: Sun, 21 Apr 2024 23:43:30 +0700 Subject: [PATCH 0396/1590] Updated the dex dasboard with firefly --- dexs/firefly/index.ts | 66 ++ yarn.lock | 2391 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2457 insertions(+) create mode 100644 dexs/firefly/index.ts create mode 100644 yarn.lock diff --git a/dexs/firefly/index.ts b/dexs/firefly/index.ts new file mode 100644 index 0000000000..e6d4232a20 --- /dev/null +++ b/dexs/firefly/index.ts @@ -0,0 +1,66 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { BreakdownAdapter, BaseAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +import { + getGraphDimensions, + DEFAULT_DAILY_VOLUME_FACTORY, + DEFAULT_TOTAL_VOLUME_FIELD, +} from "../../helpers/getUniSubgraph"; + +const v3Endpoints = { + [CHAIN.MANTA]: "https://subgraph.fireflydex.io/subgraphs/name/firefly/v3", +}; + +const VOLUME_USD = "volumeUSD"; + +const v3Graphs = getGraphDimensions({ + graphUrls: v3Endpoints, + totalVolume: { + factory: "factories", + field: DEFAULT_TOTAL_VOLUME_FIELD, + }, + dailyVolume: { + factory: DEFAULT_DAILY_VOLUME_FACTORY, + field: VOLUME_USD, + }, + feesPercent: { + type: "fees", + UserFees: 100, // User fees are 100% of collected fees + SupplySideRevenue: 100, // 100% of fees are going to LPs + }, +}); + +const methodology = { + UserFees: "Users pay 0.05%, 0.3%, 1% depending on the fee rate for the swap.", + ProtocolRevenue: "Protocol have no revenue.", + SupplySideRevenue: "All user fees are distributed among LPs.", + HoldersRevenue: "Holders have no revenue.", +}; + +type TStartTime = { + [key: string]: number; +}; +const startTimeV3: TStartTime = { + [CHAIN.MANTA]: 1711991119, +}; + +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + v3: Object.keys(v3Endpoints).reduce((acc, chain) => { + acc[chain] = { + fetch: v3Graphs(chain as Chain), + start: startTimeV3[chain], + meta: { + methodology: { + ...methodology, + }, + }, + }; + return acc; + }, {} as BaseAdapter), + }, +}; + +export default adapter; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..3760b5df84 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2391 @@ +# 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@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-s3@^3.400.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.556.0.tgz#b32c12e7857326072df7c53c40b36bdf5d8e6169" + integrity sha512-6WF9Kuzz1/8zqX8hKBpqj9+FYwQ5uTsVcOKpTW94AMX2qtIeVRlwlnNnYyywWo61yqD3g59CMNHcqSsaqAwglg== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.556.0" + "@aws-sdk/core" "3.556.0" + "@aws-sdk/credential-provider-node" "3.556.0" + "@aws-sdk/middleware-bucket-endpoint" "3.535.0" + "@aws-sdk/middleware-expect-continue" "3.535.0" + "@aws-sdk/middleware-flexible-checksums" "3.535.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-location-constraint" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-sdk-s3" "3.556.0" + "@aws-sdk/middleware-signing" "3.556.0" + "@aws-sdk/middleware-ssec" "3.537.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/signature-v4-multi-region" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@aws-sdk/xml-builder" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/eventstream-serde-browser" "^2.2.0" + "@smithy/eventstream-serde-config-resolver" "^2.2.0" + "@smithy/eventstream-serde-node" "^2.2.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-blob-browser" "^2.2.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/hash-stream-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/md5-js" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-stream" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + "@smithy/util-waiter" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.556.0.tgz#4c19fccc35361de046d2cd74a7a685d71aa5dd1e" + integrity sha512-AXKd2TB6nNrksu+OfmHl8uI07PdgzOo4o8AxoRO8SHlwoMAGvcT9optDGVSYoVfgOKTymCoE7h8/UoUfPc11wQ== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.556.0" + "@aws-sdk/core" "3.556.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.556.0.tgz#7beeeebb6a437f09680edefc5c998822292a528a" + integrity sha512-unXdWS7uvHqCcOyC1de+Fr8m3F2vMg2m24GPea0bg7rVGTYmiyn9mhUX11VCt+ozydrw+F50FQwL6OqoqPocmw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.556.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.556.0.tgz#3aa20cca462839f1451f11efada2be119dd36a6b" + integrity sha512-TsK3js7Suh9xEmC886aY+bv0KdLLYtzrcmVt6sJ/W6EnDXYQhBuKYFhp03NrN2+vSvMGpqJwR62DyfKe1G0QzQ== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.556.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.556.0.tgz#d0f4431a72282b71cfbcaedfb803f7f2807cf60b" + integrity sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA== + dependencies: + "@smithy/core" "^1.4.2" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz#26248e263a8107953d5496cb3760d4e7c877abcf" + integrity sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.552.0": + version "3.552.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.552.0.tgz#ecc88d02cba95621887e6b85b2583e756ad29eb6" + integrity sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.556.0.tgz#bf780feb92a7920cc525cd7cb7870ea61b84c125" + integrity sha512-0Nz4ErOlXhe3muxWYMbPwRMgfKmVbBp36BAE2uv/z5wTbfdBkcgUwaflEvlKCLUTdHzuZsQk+BFS/gVyaUeOuA== + dependencies: + "@aws-sdk/client-sts" "3.556.0" + "@aws-sdk/credential-provider-env" "3.535.0" + "@aws-sdk/credential-provider-process" "3.535.0" + "@aws-sdk/credential-provider-sso" "3.556.0" + "@aws-sdk/credential-provider-web-identity" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.556.0.tgz#51f3dc4506053249f8593765d1ab2cef53732fa3" + integrity sha512-s1xVtKjyGc60O8qcNIzS1X3H+pWEwEfZ7TgNznVDNyuXvLrlNWiAcigPWGl2aAkc8tGcsSG0Qpyw2KYC939LFg== + dependencies: + "@aws-sdk/credential-provider-env" "3.535.0" + "@aws-sdk/credential-provider-http" "3.552.0" + "@aws-sdk/credential-provider-ini" "3.556.0" + "@aws-sdk/credential-provider-process" "3.535.0" + "@aws-sdk/credential-provider-sso" "3.556.0" + "@aws-sdk/credential-provider-web-identity" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz#ea1e8a38a32e36bbdc3f75eb03352e6eafa0c659" + integrity sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.556.0.tgz#26dfdd2c6e034f66e82985d65bd6aa3ae09d5e19" + integrity sha512-ETuBgcnpfxqadEAqhQFWpKoV1C/NAgvs5CbBc5EJbelJ8f4prTdErIHjrRtVT8c02MXj92QwczsiNYd5IoOqyw== + dependencies: + "@aws-sdk/client-sso" "3.556.0" + "@aws-sdk/token-providers" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.556.0.tgz#94cd55eaee6ca96354237569102dfaf6774544f4" + integrity sha512-R/YAL8Uh8i+dzVjzMnbcWLIGeeRi2mioHVGnVF+minmaIkCiQMZg2HPrdlKm49El+RljT28Nl5YHRuiqzEIwMA== + dependencies: + "@aws-sdk/client-sts" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz#8e19f3f9a89d618b3d75782343cb77c80ef6c7c4" + integrity sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-arn-parser" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz#4b95208f26430a7a360da088db61573b93061bcd" + integrity sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.535.0.tgz#278ae5e824ca0b73b80adf88a6aa40138bdd6b4c" + integrity sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.535.0" + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz#d5264f813592f5e77df25e5a14bbb0e6441812db" + integrity sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.535.0.tgz#718c776c118ef78a33117fa353803d079ebcc8fa" + integrity sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz#1a8ffd6c368edd6cb32e1edf7b1dced95c1820ee" + integrity sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz#6aa1e1bd1e84730d58a73021b745e20d4341a92d" + integrity sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.556.0.tgz#ff135d1fbfc843a93860eb3a4000da9d721442c0" + integrity sha512-4W/dnxqj1B6/uS/5Z+3UHaqDDGjNPgEVlqf5d3ToOFZ31ZfpANwhcCmyX39JklC4aolCEi9renQ5wHnTCC8K8g== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-arn-parser" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.556.0.tgz#2892d76cddf3cb956122618588d163ff7a42c43f" + integrity sha512-kWrPmU8qd3gI5qzpuW9LtWFaH80cOz1ZJDavXx6PRpYZJ5JaKdUHghwfDlVTzzFYAeJmVsWIkPcLT5d5mY5ZTQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.537.0": + version "3.537.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.537.0.tgz#c64e4234e38f285e9e2bdf06fdbbb57f6bc848b2" + integrity sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz#4981c64c1eeb6b5c453bce02d060b8c71d44994d" + integrity sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz#20a30fb5fbbe27ab70f2ed16327bae7e367b5cec" + integrity sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.556.0.tgz#34ff26a1617b885a845752e62aca7bc29deb33ac" + integrity sha512-bWDSK0ggK7QzAOmPZGv29UAIZocL1MNY7XyOvm3P3P1U3tFMoIBilQQBLabXyHoZ9J3Ik0Vv4n95htUhRQ35ow== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.556.0.tgz#96b4dd4fec67ae62f8c98ae8c2f94e4ed050073a" + integrity sha512-tvIiugNF0/+2wfuImMrpKjXMx4nCnFWQjQvouObny+wrif/PGqqQYrybwxPJDvzbd965bu1I+QuSv85/ug7xsg== + dependencies: + "@aws-sdk/client-sso-oidc" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.535.0", "@aws-sdk/types@^3.222.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" + integrity sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.535.0.tgz#046aafff4438caa3740cebec600989b1e840b934" + integrity sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz#a7fea1d2a5e64623353aaa6ee32dbb86ab9cd3f8" + integrity sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + "@smithy/util-endpoints" "^1.2.0" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz#0200a336fddd47dd6567ce15d01f62be50a315d7" + integrity sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz#d67d72e8b933051620f18ddb1c2be225f79f588f" + integrity sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz#f5c26fb6f3f561d3cf35f96f303b1775afad0a5b" + integrity sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.535.0.tgz#dbe66338f64e283951778f7d07a4afd2d7d09bfd" + integrity sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng== + dependencies: + "@smithy/types" "^2.12.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.52" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.52.tgz#bad3e7a44ba90f15e4888ef1c1f28b2f69a9b340" + integrity sha512-BhkY2eFcoAyGgIaMEheb9PIFC94Lfb1K8UXOmWsOod3GOE5nuJcn/mY7HUtHowSD/LZy+xrnCdDMTtCREjqDZQ== + dependencies: + "@aws-sdk/client-s3" "^3.400.0" + "@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" + +"@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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" + integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" + integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== + dependencies: + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" + integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" + integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/core@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" + integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" + integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" + integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" + integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" + integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" + integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" + integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== + dependencies: + "@smithy/eventstream-codec" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" + integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" + integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== + dependencies: + "@smithy/chunked-blob-reader" "^2.2.0" + "@smithy/chunked-blob-reader-native" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/hash-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" + integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" + integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" + integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== + dependencies: + "@smithy/types" "^2.12.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/md5-js@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" + integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" + integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" + integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== + dependencies: + "@smithy/middleware-serde" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/middleware-retry@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" + integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/service-error-classification" "^2.1.5" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" + integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" + integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" + integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" + integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/property-provider@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" + integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" + integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" + integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-uri-escape" "^2.2.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" + integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" + integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== + dependencies: + "@smithy/types" "^2.12.0" + +"@smithy/shared-ini-file-loader@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" + integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz#c30dd4028ae50c607db99459981cce8cdab7a3fd" + integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-uri-escape" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" + integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@smithy/types@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" + integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== + dependencies: + "@smithy/querystring-parser" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-base64@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" + integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" + integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" + integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== + 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-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" + integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" + integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" + integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== + dependencies: + "@smithy/config-resolver" "^2.2.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" + integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" + integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" + integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-retry@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" + integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== + dependencies: + "@smithy/service-error-classification" "^2.1.5" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-stream@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" + integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== + dependencies: + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" + integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" + integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/types" "^2.12.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.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + 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.31" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd" + integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA== + 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.11.9" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +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.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + 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.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + 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.12.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.0.tgz#b0c2ce207ae5a3b5125be966e32ffea7c1f2481a" + integrity sha512-zL5NlOTjML239gIvtVJuaSk0N9GQLi1Hom3ZWUszE5lDTQE/IVB62mrPkQ2W1bGcZwVGSLaetQbWNQSvI4rGDQ== + 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.5.0" + +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.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + 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.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.10.2" + +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.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +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== + +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@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + 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.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +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.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +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== + +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" + +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.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== + 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.11.5" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" + integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== + 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== + +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +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.11.1, 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.3.1, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +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.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + +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== + +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.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" + integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + +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.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +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== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +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 b424233219526d23bcdf72de521bc5c18829d25c Mon Sep 17 00:00:00 2001 From: JoscelynFarr Date: Mon, 22 Apr 2024 14:30:43 +0800 Subject: [PATCH 0397/1590] update jojo volume --- dexs/jojo/index.ts | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/dexs/jojo/index.ts b/dexs/jojo/index.ts index 15b9c9ec34..37ba47ba36 100644 --- a/dexs/jojo/index.ts +++ b/dexs/jojo/index.ts @@ -2,8 +2,7 @@ import fetchURL from "../../utils/fetchURL" import { SimpleAdapter, Fetch } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; - -const historicalVolumeEndpointZk = (symbol: string, chain: string) => `https://api.`+ chain +`-mainnet.jojo.exchange/v1/klines?marketId=${symbol}&interval=1D&startTime=1687017600000&limit=500` +const historicalVolumeEndpointZk = (symbol: string, chain: string) => `https://api.` + chain +`-mainnet.jojo.exchange/v1/platform/tradeVolume?marketId=${symbol}` const coins = { 'ethusdc': 'coingecko:ethereum', 'btcusdc': 'coingecko:bitcoin', @@ -14,23 +13,26 @@ interface IVolumeall { id: string; volume: string; timestamp: number; - quoteVolume: string; } + const getVolume = async (timestamp: number, chain: string) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const historical = (await Promise.all(Object.keys(coins).map((coins: string) => fetchURL(historicalVolumeEndpointZk(coins, chain))))) - .map((a: any, index: number) => a.map((e: any) => { return { timestamp: e.time / 1000, volume: e.volume, id: Object.values(coins)[index], quoteVolume: e.quote_volume } })).flat() - const historicalUSD = historical.map((e: IVolumeall) => { + const historical = (await Promise.all(Object.keys(coins).map((coins: string) => fetchURL(historicalVolumeEndpointZk(coins, chain))))); + + const historicalVolume = historical.map((item => item.dailyVolume)) + const historicalUSD = historicalVolume.map((a: any, index: number) => a.map((e: any) => { return { timestamp: e.t / 1000, volume: e.v, id: Object.values(coins)[index]} })).flat() + const historicalUSD2 = historicalUSD.map((e: IVolumeall) => { return { ...e, - volumeUSD: Number(e.quoteVolume) + volumeUSD: Number(e.volume) } }); - const dailyVolume = historicalUSD.filter((e: IVolumeall) => e.timestamp === dayTimestamp) - .reduce((a: number, { volumeUSD }) => a + volumeUSD, 0); - const totalVolume = historicalUSD.filter((e: IVolumeall) => e.timestamp <= dayTimestamp) + const dailyVolume = historicalUSD2.filter((e: IVolumeall) => e.timestamp === dayTimestamp) .reduce((a: number, { volumeUSD }) => a + volumeUSD, 0); + console.log(dailyVolume) + + const totalVolume = historical.map(item => item.totalVolume).reduce((accumulator, currentValue) => accumulator + parseFloat(currentValue), 0); return { totalVolume: `${totalVolume}`, dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, @@ -44,10 +46,6 @@ const getFetch = (chain: string): Fetch => async (timestamp: number) => { const adapter: SimpleAdapter = { adapter: { - [CHAIN.ARBITRUM]: { - fetch: getFetch("arbitrum"), - start: 1687017600, - }, [CHAIN.BASE]: { fetch: getFetch("base"), start: 1711965100, From 9f2f2a2f98c9cd583c9aca09e9d42090dfbe56c1 Mon Sep 17 00:00:00 2001 From: bswan Date: Mon, 22 Apr 2024 17:44:21 +0800 Subject: [PATCH 0398/1590] glyph-exchange add fees and revenue --- dexs/glyph-exchange/index.ts | 72 ++++++++++++++++++++++++++++++++---- 1 file changed, 65 insertions(+), 7 deletions(-) diff --git a/dexs/glyph-exchange/index.ts b/dexs/glyph-exchange/index.ts index 61250536b4..c32aeb3e72 100644 --- a/dexs/glyph-exchange/index.ts +++ b/dexs/glyph-exchange/index.ts @@ -1,11 +1,69 @@ +import { BreakdownAdapter } from "../../adapters/types"; +import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -const adapters = univ2Adapter({ +const endpointsClassic = { [CHAIN.CORE]: "https://thegraph.coredao.org/subgraphs/name/glyph/glyph-tvl" -}, { - factoriesName: "glyphFactories", - dayData: "glyphDayData" +}; + +const VOLUME_FIELD = "totalVolumeUSD"; +const DEFAULT_DAILY_VOLUME_FIELD = "dailyVolumeUSD"; + +//0.3 swap fee, 6/10 to lp, 4/10 to treasury +const feesPercent = { + type: "volume" as "volume", + Fees: 0.3, + UserFees: 0.3, + Revenue: 0.12, + ProtocolRevenue: 0.12, + SupplySideRevenue: 0.18 +} + +const graphsClassic = getGraphDimensions({ + graphUrls: endpointsClassic, + totalVolume: { + factory: "glyphFactories", + field: VOLUME_FIELD, + }, + dailyVolume: { + factory: "glyphDayData", + field: DEFAULT_DAILY_VOLUME_FIELD, + }, + feesPercent }); -adapters.adapter.core.start = 1710806400; -export default adapters; + +const startTimeQueryClassic = { + endpoints: endpointsClassic, + dailyDataField: "glyphDayData", +}; + +const classic = Object.keys(endpointsClassic).reduce( + (acc, chain) => ({ + ...acc, + [chain]: { + fetch: graphsClassic(chain as Chain), + start: getStartTimestamp({ ...startTimeQueryClassic, chain }), + meta: { + methodology: { + Fees: "GlyphExchange charges a flat 0.3% fee", + UserFees: "Users pay a 0.3% fee on each trade", + Revenue: "A 0.12% of each trade goes to treasury", + ProtocolRevenue: "Treasury receives a share of the fees", + SupplySideRevenue: "Liquidity providers get 6/10 of all trades in their pools" + } + } + }, + }), + {} +) as any; + +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + classic: classic, + } +} + +export default adapter From 69ccfc6b106f103344634c89c57a578d09ae1da5 Mon Sep 17 00:00:00 2001 From: 0xR <0xr@metavault.org> Date: Mon, 22 Apr 2024 17:50:27 +0300 Subject: [PATCH 0399/1590] Add Grizzly Trade Derivatives V2 dimensions adapters. --- dexs/grizzly-trade-derivatives-v2/index.ts | 69 ++++++++++++++++++++++ fees/grizzly-trade-derivatives-v2.ts | 60 +++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 dexs/grizzly-trade-derivatives-v2/index.ts create mode 100644 fees/grizzly-trade-derivatives-v2.ts diff --git a/dexs/grizzly-trade-derivatives-v2/index.ts b/dexs/grizzly-trade-derivatives-v2/index.ts new file mode 100644 index 0000000000..6ee8157756 --- /dev/null +++ b/dexs/grizzly-trade-derivatives-v2/index.ts @@ -0,0 +1,69 @@ +import request, { gql } from "graphql-request"; +import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; + +const grizzlyPerpsV2Subgraph = + "https://api.studio.thegraph.com/query/55804/bnb-trade/version/latest"; + +interface IReferralRecord { + volume: string; // Assuming volume is a string that represents a number + timestamp: number; +} + +interface IVolumeStat { + cumulativeVolumeUsd: string; + volumeUsd: string; + id: string; +} + +const fetch = () => { + return async (timestamp: number): Promise => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); + + const graphQuery = gql` + query MyQuery { + volumeStats(where: {timestamp: ${todaysTimestamp}, period: "daily"}) { + cumulativeVolumeUsd + id + volumeUsd + } + } + `; + + const response = await request(grizzlyPerpsV2Subgraph, graphQuery); + const volumeStats: IVolumeStat[] = response.volumeStats; + + let dailyVolumeUSD = BigInt(0); + + volumeStats.forEach((vol) => { + dailyVolumeUSD += BigInt(vol.volumeUsd); + }); + + const finalDailyVolume = parseInt(dailyVolumeUSD.toString()) / 1e18; + + return { + dailyVolume: finalDailyVolume.toString(), + timestamp: todaysTimestamp, + }; + }; +}; + +const methodology = { + dailyVolume: + "Total cumulativeVolumeUsd for specified chain for the given day", +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.BSC]: { + fetch: fetch(), + start: async () => 1706832000, + meta: { + methodology, + }, + }, + }, +}; + +export default adapter; diff --git a/fees/grizzly-trade-derivatives-v2.ts b/fees/grizzly-trade-derivatives-v2.ts new file mode 100644 index 0000000000..c35b728e36 --- /dev/null +++ b/fees/grizzly-trade-derivatives-v2.ts @@ -0,0 +1,60 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { gql, request } from "graphql-request"; +import type { ChainEndpoints } from "../adapters/types"; +import { Adapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +import { getTimestampAtStartOfDayUTC } from "../utils/date"; + +const endpoints = { + [CHAIN.BSC]: + "https://api.studio.thegraph.com/query/55804/bnb-trade/version/latest", +}; + +const graphs = (graphUrls: ChainEndpoints) => { + return (chain: Chain) => { + return async (timestamp: number) => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); + const period = "daily"; + + const graphQuery = gql`{ + feeStats(where: {timestamp: ${todaysTimestamp}, period: "${period}"}) { + id + timestamp + period + cumulativeFee + cumulativeFeeUsd + feeUsd + } + }`; + + const graphRes = await request(graphUrls[chain], graphQuery); + + const dailyFee = parseInt(graphRes.feeStats[0].feeUsd); + + const finalDailyFee = dailyFee / 1e18; + const totalFees = parseInt(graphRes.feeStats[0].cumulativeFeeUsd) / 1e18; + + return { + timestamp, + dailyFees: finalDailyFee.toString(), + totalFees: totalFees.toString(), + //dailyRevenue: (finalDailyFee * 0.3).toString(), + }; + }; + }; +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.BSC]: { + fetch: graphs(endpoints)(CHAIN.BSC), + start: async () => 1706832000, + meta: { + methodology: "All treasury, pool and keeper fees are collected", + }, + }, + }, +}; + +export default adapter; From a86491e90af6403329c6825d12fd0490e4bb794b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 22 Apr 2024 14:57:10 +0000 Subject: [PATCH 0400/1590] fix starttime --- dexs/glyph-exchange/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/glyph-exchange/index.ts b/dexs/glyph-exchange/index.ts index c32aeb3e72..a181dd2080 100644 --- a/dexs/glyph-exchange/index.ts +++ b/dexs/glyph-exchange/index.ts @@ -44,7 +44,7 @@ const classic = Object.keys(endpointsClassic).reduce( ...acc, [chain]: { fetch: graphsClassic(chain as Chain), - start: getStartTimestamp({ ...startTimeQueryClassic, chain }), + start: 1710806400, meta: { methodology: { Fees: "GlyphExchange charges a flat 0.3% fee", From 6e852bf3e0a567adc4d52d7ef48b84cc15f117ea Mon Sep 17 00:00:00 2001 From: dtmkeng <0xgnek@gmail.com> Date: Mon, 22 Apr 2024 22:05:43 +0700 Subject: [PATCH 0401/1590] Delete yarn.lock --- yarn.lock | 2391 ----------------------------------------------------- 1 file changed, 2391 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 3760b5df84..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2391 +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@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@^3.400.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.556.0.tgz#b32c12e7857326072df7c53c40b36bdf5d8e6169" - integrity sha512-6WF9Kuzz1/8zqX8hKBpqj9+FYwQ5uTsVcOKpTW94AMX2qtIeVRlwlnNnYyywWo61yqD3g59CMNHcqSsaqAwglg== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.556.0" - "@aws-sdk/core" "3.556.0" - "@aws-sdk/credential-provider-node" "3.556.0" - "@aws-sdk/middleware-bucket-endpoint" "3.535.0" - "@aws-sdk/middleware-expect-continue" "3.535.0" - "@aws-sdk/middleware-flexible-checksums" "3.535.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-location-constraint" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-sdk-s3" "3.556.0" - "@aws-sdk/middleware-signing" "3.556.0" - "@aws-sdk/middleware-ssec" "3.537.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/signature-v4-multi-region" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@aws-sdk/xml-builder" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/eventstream-serde-browser" "^2.2.0" - "@smithy/eventstream-serde-config-resolver" "^2.2.0" - "@smithy/eventstream-serde-node" "^2.2.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-blob-browser" "^2.2.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/hash-stream-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/md5-js" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-stream" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - "@smithy/util-waiter" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.556.0.tgz#4c19fccc35361de046d2cd74a7a685d71aa5dd1e" - integrity sha512-AXKd2TB6nNrksu+OfmHl8uI07PdgzOo4o8AxoRO8SHlwoMAGvcT9optDGVSYoVfgOKTymCoE7h8/UoUfPc11wQ== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.556.0" - "@aws-sdk/core" "3.556.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.556.0.tgz#7beeeebb6a437f09680edefc5c998822292a528a" - integrity sha512-unXdWS7uvHqCcOyC1de+Fr8m3F2vMg2m24GPea0bg7rVGTYmiyn9mhUX11VCt+ozydrw+F50FQwL6OqoqPocmw== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.556.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.556.0.tgz#3aa20cca462839f1451f11efada2be119dd36a6b" - integrity sha512-TsK3js7Suh9xEmC886aY+bv0KdLLYtzrcmVt6sJ/W6EnDXYQhBuKYFhp03NrN2+vSvMGpqJwR62DyfKe1G0QzQ== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.556.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.556.0.tgz#d0f4431a72282b71cfbcaedfb803f7f2807cf60b" - integrity sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA== - dependencies: - "@smithy/core" "^1.4.2" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz#26248e263a8107953d5496cb3760d4e7c877abcf" - integrity sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.552.0": - version "3.552.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.552.0.tgz#ecc88d02cba95621887e6b85b2583e756ad29eb6" - integrity sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.556.0.tgz#bf780feb92a7920cc525cd7cb7870ea61b84c125" - integrity sha512-0Nz4ErOlXhe3muxWYMbPwRMgfKmVbBp36BAE2uv/z5wTbfdBkcgUwaflEvlKCLUTdHzuZsQk+BFS/gVyaUeOuA== - dependencies: - "@aws-sdk/client-sts" "3.556.0" - "@aws-sdk/credential-provider-env" "3.535.0" - "@aws-sdk/credential-provider-process" "3.535.0" - "@aws-sdk/credential-provider-sso" "3.556.0" - "@aws-sdk/credential-provider-web-identity" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.556.0.tgz#51f3dc4506053249f8593765d1ab2cef53732fa3" - integrity sha512-s1xVtKjyGc60O8qcNIzS1X3H+pWEwEfZ7TgNznVDNyuXvLrlNWiAcigPWGl2aAkc8tGcsSG0Qpyw2KYC939LFg== - dependencies: - "@aws-sdk/credential-provider-env" "3.535.0" - "@aws-sdk/credential-provider-http" "3.552.0" - "@aws-sdk/credential-provider-ini" "3.556.0" - "@aws-sdk/credential-provider-process" "3.535.0" - "@aws-sdk/credential-provider-sso" "3.556.0" - "@aws-sdk/credential-provider-web-identity" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz#ea1e8a38a32e36bbdc3f75eb03352e6eafa0c659" - integrity sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.556.0.tgz#26dfdd2c6e034f66e82985d65bd6aa3ae09d5e19" - integrity sha512-ETuBgcnpfxqadEAqhQFWpKoV1C/NAgvs5CbBc5EJbelJ8f4prTdErIHjrRtVT8c02MXj92QwczsiNYd5IoOqyw== - dependencies: - "@aws-sdk/client-sso" "3.556.0" - "@aws-sdk/token-providers" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.556.0.tgz#94cd55eaee6ca96354237569102dfaf6774544f4" - integrity sha512-R/YAL8Uh8i+dzVjzMnbcWLIGeeRi2mioHVGnVF+minmaIkCiQMZg2HPrdlKm49El+RljT28Nl5YHRuiqzEIwMA== - dependencies: - "@aws-sdk/client-sts" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz#8e19f3f9a89d618b3d75782343cb77c80ef6c7c4" - integrity sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-arn-parser" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz#4b95208f26430a7a360da088db61573b93061bcd" - integrity sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.535.0.tgz#278ae5e824ca0b73b80adf88a6aa40138bdd6b4c" - integrity sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.535.0" - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz#d5264f813592f5e77df25e5a14bbb0e6441812db" - integrity sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.535.0.tgz#718c776c118ef78a33117fa353803d079ebcc8fa" - integrity sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz#1a8ffd6c368edd6cb32e1edf7b1dced95c1820ee" - integrity sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz#6aa1e1bd1e84730d58a73021b745e20d4341a92d" - integrity sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.556.0.tgz#ff135d1fbfc843a93860eb3a4000da9d721442c0" - integrity sha512-4W/dnxqj1B6/uS/5Z+3UHaqDDGjNPgEVlqf5d3ToOFZ31ZfpANwhcCmyX39JklC4aolCEi9renQ5wHnTCC8K8g== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-arn-parser" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.556.0.tgz#2892d76cddf3cb956122618588d163ff7a42c43f" - integrity sha512-kWrPmU8qd3gI5qzpuW9LtWFaH80cOz1ZJDavXx6PRpYZJ5JaKdUHghwfDlVTzzFYAeJmVsWIkPcLT5d5mY5ZTQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.537.0": - version "3.537.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.537.0.tgz#c64e4234e38f285e9e2bdf06fdbbb57f6bc848b2" - integrity sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz#4981c64c1eeb6b5c453bce02d060b8c71d44994d" - integrity sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz#20a30fb5fbbe27ab70f2ed16327bae7e367b5cec" - integrity sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.556.0.tgz#34ff26a1617b885a845752e62aca7bc29deb33ac" - integrity sha512-bWDSK0ggK7QzAOmPZGv29UAIZocL1MNY7XyOvm3P3P1U3tFMoIBilQQBLabXyHoZ9J3Ik0Vv4n95htUhRQ35ow== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.556.0.tgz#96b4dd4fec67ae62f8c98ae8c2f94e4ed050073a" - integrity sha512-tvIiugNF0/+2wfuImMrpKjXMx4nCnFWQjQvouObny+wrif/PGqqQYrybwxPJDvzbd965bu1I+QuSv85/ug7xsg== - dependencies: - "@aws-sdk/client-sso-oidc" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.535.0", "@aws-sdk/types@^3.222.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" - integrity sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-arn-parser@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.535.0.tgz#046aafff4438caa3740cebec600989b1e840b934" - integrity sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-endpoints@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz#a7fea1d2a5e64623353aaa6ee32dbb86ab9cd3f8" - integrity sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - "@smithy/util-endpoints" "^1.2.0" - tslib "^2.6.2" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz#0200a336fddd47dd6567ce15d01f62be50a315d7" - integrity sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-browser@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz#d67d72e8b933051620f18ddb1c2be225f79f588f" - integrity sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz#f5c26fb6f3f561d3cf35f96f303b1775afad0a5b" - integrity sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.535.0.tgz#dbe66338f64e283951778f7d07a4afd2d7d09bfd" - integrity sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng== - dependencies: - "@smithy/types" "^2.12.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.52" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.52.tgz#bad3e7a44ba90f15e4888ef1c1f28b2f69a9b340" - integrity sha512-BhkY2eFcoAyGgIaMEheb9PIFC94Lfb1K8UXOmWsOod3GOE5nuJcn/mY7HUtHowSD/LZy+xrnCdDMTtCREjqDZQ== - dependencies: - "@aws-sdk/client-s3" "^3.400.0" - "@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" - -"@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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" - integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader-native@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" - integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== - dependencies: - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" - integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" - integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/core@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" - integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" - integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" - integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" - integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" - integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" - integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" - integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== - dependencies: - "@smithy/eventstream-codec" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" - integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" - integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== - dependencies: - "@smithy/chunked-blob-reader" "^2.2.0" - "@smithy/chunked-blob-reader-native" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/hash-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" - integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" - integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" - integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== - dependencies: - "@smithy/types" "^2.12.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/md5-js@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" - integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" - integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" - integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== - dependencies: - "@smithy/middleware-serde" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/middleware-retry@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" - integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/service-error-classification" "^2.1.5" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" - integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" - integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" - integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" - integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/property-provider@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" - integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" - integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" - integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-uri-escape" "^2.2.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" - integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" - integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== - dependencies: - "@smithy/types" "^2.12.0" - -"@smithy/shared-ini-file-loader@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" - integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz#c30dd4028ae50c607db99459981cce8cdab7a3fd" - integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== - dependencies: - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-uri-escape" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" - integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@smithy/types@^2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" - integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" - integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== - dependencies: - "@smithy/querystring-parser" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-base64@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" - integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== - dependencies: - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" - integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" - integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== - 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-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" - integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" - integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" - integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== - dependencies: - "@smithy/config-resolver" "^2.2.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" - integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" - integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" - integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-retry@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" - integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== - dependencies: - "@smithy/service-error-classification" "^2.1.5" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-stream@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" - integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== - dependencies: - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" - integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" - integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/types" "^2.12.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.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== - 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.31" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd" - integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA== - 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.11.9" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" - integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -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.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - 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.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - 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.12.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.0.tgz#b0c2ce207ae5a3b5125be966e32ffea7c1f2481a" - integrity sha512-zL5NlOTjML239gIvtVJuaSk0N9GQLi1Hom3ZWUszE5lDTQE/IVB62mrPkQ2W1bGcZwVGSLaetQbWNQSvI4rGDQ== - 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.5.0" - -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.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - 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.3.12" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" - integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.6" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.10.2" - -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.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -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== - -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@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - 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.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -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.1: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -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== - -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" - -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.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" - integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== - 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.11.5" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" - integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== - 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== - -semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -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.11.1, 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.3.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -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.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - -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== - -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.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -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.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -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== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -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 c9a5d94e04ac96f079a385aff710aae0f977479c Mon Sep 17 00:00:00 2001 From: ethzoomer Date: Mon, 22 Apr 2024 12:28:08 -0500 Subject: [PATCH 0402/1590] feat: add Slipstream volume --- dexs/velodrome-slipstream/index.ts | 64 ++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 dexs/velodrome-slipstream/index.ts diff --git a/dexs/velodrome-slipstream/index.ts b/dexs/velodrome-slipstream/index.ts new file mode 100644 index 0000000000..14ceadb4b8 --- /dev/null +++ b/dexs/velodrome-slipstream/index.ts @@ -0,0 +1,64 @@ +import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types" +import { CHAIN } from "../../helpers/chains" + +const gurar = '0xc734656F0112CA18cdcaD424ddd8949F3D4c1DdD'; +const abis: any = { + "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" +} + +interface IForSwap { + lp: string; + token0: string; + token1: string; +} + +interface ILog { + address: string; + data: string; + transactionHash: string; + topics: string[]; +} +const event_swap = 'event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)' + +const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { + const dailyVolume = createBalances() + const forSwaps: IForSwap[] = (await api.call({ + target: gurar, + params: [3000, 640], // Slipstream launched after ~650 v2 pools were already created + abi: abis.forSwaps, + chain: CHAIN.OPTIMISM, + })).filter(t => Number(t.type) > 0).map((e: any) => { + return { + lp: e.lp, + token0: e.token0, + token1: e.token1, + } + }) + + const targets = forSwaps.map((forSwap: IForSwap) => forSwap.lp) + + const logs: ILog[][] = await getLogs({ + targets, + eventAbi: event_swap, + flatten: false, + }) + + logs.forEach((logs: ILog[], idx: number) => { + const { token0, token1 } = forSwaps[idx] + logs.forEach((log: any) => { + dailyVolume.add(token0, BigInt(Math.abs(Number(log.amount0)))) + dailyVolume.add(token1, BigInt(Math.abs(Number(log.amount1)))) + }) + }) + + return { dailyVolume, timestamp } +} +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.OPTIMISM]: { + fetch: fetch as any, + start: 1709686921, + } + } +} +export default adapters; From 2e63e8c073faeb04563eb6c28d2c47f08e74bbf8 Mon Sep 17 00:00:00 2001 From: ethzoomer Date: Mon, 22 Apr 2024 13:25:24 -0500 Subject: [PATCH 0403/1590] feat: add Slipstream fees --- fees/velodrome-slipstream/index.ts | 66 ++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 fees/velodrome-slipstream/index.ts diff --git a/fees/velodrome-slipstream/index.ts b/fees/velodrome-slipstream/index.ts new file mode 100644 index 0000000000..8f164d22c2 --- /dev/null +++ b/fees/velodrome-slipstream/index.ts @@ -0,0 +1,66 @@ +import { FetchOptions, FetchResultFees, SimpleAdapter } from "../../adapters/types" +import { CHAIN } from "../../helpers/chains" + +const gurar = '0xc734656F0112CA18cdcaD424ddd8949F3D4c1DdD'; +const abis: any = { + "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" +} + +interface IForSwap { + lp: string; + token0: string; + token1: string; + pool_fee: BigInt; +} + +interface ILog { + address: string; + data: string; + transactionHash: string; + topics: string[]; +} +const event_swap = 'event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)' + +const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { + const dailyFees = createBalances() + const forSwaps: IForSwap[] = (await api.call({ + target: gurar, + params: [3000, 640], // Slipstream launched after ~650 v2 pools were already created + abi: abis.forSwaps, + chain: CHAIN.OPTIMISM, + })).filter(t => Number(t.type) > 0).map((e: any) => { + return { + lp: e.lp, + token0: e.token0, + token1: e.token1, + pool_fee: e.pool_fee, + } + }) + + const targets = forSwaps.map((forSwap: IForSwap) => forSwap.lp) + + const logs: ILog[][] = await getLogs({ + targets, + eventAbi: event_swap, + flatten: false, + }) + + logs.forEach((logs: ILog[], idx: number) => { + const { token0, token1, pool_fee } = forSwaps[idx] + logs.forEach((log: any) => { + dailyFees.add(token0, BigInt( Math.round((((Math.abs(Number(log.amount0))) * Number(pool_fee)) / 1000000)))) // 1% fee represented as pool_fee=10000 + dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1))) * Number(pool_fee)) / 1000000)))) + }) + }) + + return { dailyFees, timestamp, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } +} +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.OPTIMISM]: { + fetch: fetch as any, + start: 1709686921, + } + } +} +export default adapters; From 86d4b0913716cb1fcd98c1ba259ca28eba938b61 Mon Sep 17 00:00:00 2001 From: Eric Fan Date: Tue, 23 Apr 2024 09:57:20 +0800 Subject: [PATCH 0404/1590] SynFutures V3 Fees --- fees/synfutures-v3/index.ts | 40 ++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/fees/synfutures-v3/index.ts b/fees/synfutures-v3/index.ts index 93bc1e5059..7b8e46f2cc 100644 --- a/fees/synfutures-v3/index.ts +++ b/fees/synfutures-v3/index.ts @@ -8,8 +8,13 @@ const endpoints = { [CHAIN.BLAST]: "https://api.synfutures.com/thegraph/v3-blast", } +// Fees = LiquidityFee + ProtocolFee +// LiquidityFee = MakerRebates + FeesToLP const methodology = { - Fees: "Fees paid by takers" + TotalFees: "total fees paid by takers on the protocol by using market orders, these fees paid goes to limit order makers, AMM LP and protocol fees", + TotalMakerRebates: "total fees rebated received by limit order makers on the protocol, these fees are paid by takers", + TotalFeesToLp: "total fees received by AMM LPs on the protocol, these fees are paid by takers", + TotalProcotolFees: "total fees received by the protocol from takers, these fees are paid by takers" } const graphs = (graphUrls: ChainEndpoints) => { @@ -23,29 +28,50 @@ const graphs = (graphUrls: ChainEndpoints) => { id symbol } - takerFee + liquidityFee + poolFee protocolFee - totalTakerFee + totalLiquidityFee + totalPoolFee totalProtocolFee } }`; const dailyFee = createBalances(); + const dailyMakerRebates = createBalances(); + const dailyFeesToLP = createBalances(); + const dailyProcotolFees = createBalances(); + const totalFee = createBalances(); + const totalMakerRebates = createBalances(); + const totalFeesToLP = createBalances(); + const totalProcotolFees = createBalances(); const graphRes = await request(graphUrls[chain], graphQuery); - // console.info(JSON.stringify(graphRes, null, 2)); - for (const record of graphRes.dailyQuoteDatas) { - dailyFee.addToken(record.quote.id, Number(record.takerFee) + Number(record.protocolFee)) - totalFee.addToken(record.quote.id, Number(record.totalTakerFee) + Number(record.totalProtocolFee)) + dailyFee.addToken(record.quote.id, Number(record.liquidityFee) + Number(record.protocolFee)) + dailyMakerRebates.addToken(record.quote.id, Number(record.liquidityFee) - Number(record.poolFee)) + dailyFeesToLP.addToken(record.quote.id, Number(record.poolFee)) + dailyProcotolFees.addToken(record.quote.id, Number(record.protocolFee)) + + totalFee.addToken(record.quote.id, Number(record.totalLiquidityFee) + Number(record.totalProtocolFee)) + totalMakerRebates.addToken(record.quote.id, Number(record.totalLiquidityFee) - Number(record.totalPoolFee)) + totalFeesToLP.addToken(record.quote.id, Number(record.totalPoolFee)) + totalProcotolFees.addToken(record.quote.id, Number(record.totalProtocolFee)) } return { dailyFees: await dailyFee.getUSDValue(), + dailyMakerRebates: await dailyMakerRebates.getUSDValue(), + dailyFeesToLp: await dailyFeesToLP.getUSDValue(), + dailyProcotolFees: await dailyProcotolFees.getUSDValue(), + totalFees: await totalFee.getUSDValue(), + totalMakerRebates: await totalMakerRebates.getUSDValue(), + totalFeesToLp: await totalFeesToLP.getUSDValue(), + totalProcotolFees: await totalProcotolFees.getUSDValue() }; }; return fetch From d87de0a1cf56371da022031909148c5fdc83e1ec Mon Sep 17 00:00:00 2001 From: Eric Fan Date: Tue, 23 Apr 2024 10:15:02 +0800 Subject: [PATCH 0405/1590] revise fees methodology --- fees/synfutures-v3/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fees/synfutures-v3/index.ts b/fees/synfutures-v3/index.ts index 7b8e46f2cc..02954dc88f 100644 --- a/fees/synfutures-v3/index.ts +++ b/fees/synfutures-v3/index.ts @@ -8,13 +8,13 @@ const endpoints = { [CHAIN.BLAST]: "https://api.synfutures.com/thegraph/v3-blast", } -// Fees = LiquidityFee + ProtocolFee +// Fee = LiquidityFee + ProtocolFee // LiquidityFee = MakerRebates + FeesToLP const methodology = { - TotalFees: "total fees paid by takers on the protocol by using market orders, these fees paid goes to limit order makers, AMM LP and protocol fees", - TotalMakerRebates: "total fees rebated received by limit order makers on the protocol, these fees are paid by takers", - TotalFeesToLp: "total fees received by AMM LPs on the protocol, these fees are paid by takers", - TotalProcotolFees: "total fees received by the protocol from takers, these fees are paid by takers" + Fees: "fees paid by takers on the protocol by using market orders, these fees paid goes to limit order makers, AMM LP and protocol fees", + MakerRebates: "fees rebated received by limit order makers on the protocol, these fees are paid by takers", + FeesToLp: "fees received by AMM LPs on the protocol, these fees are paid by takers", + ProcotolFees: "fees received by the protocol from takers, these fees are paid by takers" } const graphs = (graphUrls: ChainEndpoints) => { From b03f83aab8d30b086656e85b127478c12ed5738b Mon Sep 17 00:00:00 2001 From: ethzoomer Date: Tue, 23 Apr 2024 08:00:49 -0500 Subject: [PATCH 0406/1590] fix: sum only one token of Slipstream swap --- dexs/velodrome-slipstream/index.ts | 1 - fees/velodrome-slipstream/index.ts | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/dexs/velodrome-slipstream/index.ts b/dexs/velodrome-slipstream/index.ts index 14ceadb4b8..7977cc3aa9 100644 --- a/dexs/velodrome-slipstream/index.ts +++ b/dexs/velodrome-slipstream/index.ts @@ -46,7 +46,6 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, logs.forEach((logs: ILog[], idx: number) => { const { token0, token1 } = forSwaps[idx] logs.forEach((log: any) => { - dailyVolume.add(token0, BigInt(Math.abs(Number(log.amount0)))) dailyVolume.add(token1, BigInt(Math.abs(Number(log.amount1)))) }) }) diff --git a/fees/velodrome-slipstream/index.ts b/fees/velodrome-slipstream/index.ts index 8f164d22c2..b0f3605a47 100644 --- a/fees/velodrome-slipstream/index.ts +++ b/fees/velodrome-slipstream/index.ts @@ -48,8 +48,7 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, logs.forEach((logs: ILog[], idx: number) => { const { token0, token1, pool_fee } = forSwaps[idx] logs.forEach((log: any) => { - dailyFees.add(token0, BigInt( Math.round((((Math.abs(Number(log.amount0))) * Number(pool_fee)) / 1000000)))) // 1% fee represented as pool_fee=10000 - dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1))) * Number(pool_fee)) / 1000000)))) + dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1))) * Number(pool_fee)) / 1000000)))) // 1% fee represented as pool_fee=10000 }) }) From 28b9bee1126f691b009b0787ecb2d7f3310e8d29 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 23 Apr 2024 15:26:56 +0000 Subject: [PATCH 0407/1590] group adater --- dexs/velodrome-slipstream/index.ts | 12 ++++-- fees/velodrome-slipstream/index.ts | 65 ------------------------------ 2 files changed, 8 insertions(+), 69 deletions(-) delete mode 100644 fees/velodrome-slipstream/index.ts diff --git a/dexs/velodrome-slipstream/index.ts b/dexs/velodrome-slipstream/index.ts index 7977cc3aa9..54f92bfb1d 100644 --- a/dexs/velodrome-slipstream/index.ts +++ b/dexs/velodrome-slipstream/index.ts @@ -1,4 +1,4 @@ -import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types" +import { FetchOptions, FetchResult, FetchResultVolume, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" const gurar = '0xc734656F0112CA18cdcaD424ddd8949F3D4c1DdD'; @@ -10,6 +10,7 @@ interface IForSwap { lp: string; token0: string; token1: string; + pool_fee: string } interface ILog { @@ -20,8 +21,9 @@ interface ILog { } const event_swap = 'event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)' -const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { +const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { const dailyVolume = createBalances() + const dailyFees = createBalances() const forSwaps: IForSwap[] = (await api.call({ target: gurar, params: [3000, 640], // Slipstream launched after ~650 v2 pools were already created @@ -32,6 +34,7 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, lp: e.lp, token0: e.token0, token1: e.token1, + pool_fee: e.pool_fee, } }) @@ -44,13 +47,14 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }) logs.forEach((logs: ILog[], idx: number) => { - const { token0, token1 } = forSwaps[idx] + const { token1, pool_fee } = forSwaps[idx] logs.forEach((log: any) => { dailyVolume.add(token1, BigInt(Math.abs(Number(log.amount1)))) + dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1))) * Number(pool_fee)) / 1000000)))) // 1% fee represented as pool_fee=10000 }) }) - return { dailyVolume, timestamp } + return { dailyVolume, timestamp, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } } const adapters: SimpleAdapter = { adapter: { diff --git a/fees/velodrome-slipstream/index.ts b/fees/velodrome-slipstream/index.ts deleted file mode 100644 index b0f3605a47..0000000000 --- a/fees/velodrome-slipstream/index.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { FetchOptions, FetchResultFees, SimpleAdapter } from "../../adapters/types" -import { CHAIN } from "../../helpers/chains" - -const gurar = '0xc734656F0112CA18cdcaD424ddd8949F3D4c1DdD'; -const abis: any = { - "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" -} - -interface IForSwap { - lp: string; - token0: string; - token1: string; - pool_fee: BigInt; -} - -interface ILog { - address: string; - data: string; - transactionHash: string; - topics: string[]; -} -const event_swap = 'event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)' - -const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { - const dailyFees = createBalances() - const forSwaps: IForSwap[] = (await api.call({ - target: gurar, - params: [3000, 640], // Slipstream launched after ~650 v2 pools were already created - abi: abis.forSwaps, - chain: CHAIN.OPTIMISM, - })).filter(t => Number(t.type) > 0).map((e: any) => { - return { - lp: e.lp, - token0: e.token0, - token1: e.token1, - pool_fee: e.pool_fee, - } - }) - - const targets = forSwaps.map((forSwap: IForSwap) => forSwap.lp) - - const logs: ILog[][] = await getLogs({ - targets, - eventAbi: event_swap, - flatten: false, - }) - - logs.forEach((logs: ILog[], idx: number) => { - const { token0, token1, pool_fee } = forSwaps[idx] - logs.forEach((log: any) => { - dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1))) * Number(pool_fee)) / 1000000)))) // 1% fee represented as pool_fee=10000 - }) - }) - - return { dailyFees, timestamp, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } -} -const adapters: SimpleAdapter = { - adapter: { - [CHAIN.OPTIMISM]: { - fetch: fetch as any, - start: 1709686921, - } - } -} -export default adapters; From 1e4eee7437f25edee7076159ed4bcf4b39427b31 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 23 Apr 2024 17:01:54 +0000 Subject: [PATCH 0408/1590] add revoswap --- dexs/revoswap/index.ts | 16 ++++++++++++++++ helpers/chains.ts | 1 + helpers/env.ts | 3 ++- package-lock.json | 6 +++--- 4 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 dexs/revoswap/index.ts diff --git a/dexs/revoswap/index.ts b/dexs/revoswap/index.ts new file mode 100644 index 0000000000..67636a29e5 --- /dev/null +++ b/dexs/revoswap/index.ts @@ -0,0 +1,16 @@ +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; + +const endpoints = { + [CHAIN.XLAYER]: "https://graph.revoswap.com/subgraphs/name/okx-mainnet/exchange", +}; + +const adapter = univ2Adapter(endpoints, { + factoriesName: "pancakeFactories", + dayData: "pancakeDayData" +}); + +adapter.adapter[CHAIN.XLAYER].start = 1713225600; + + +export default adapter diff --git a/helpers/chains.ts b/helpers/chains.ts index 31847b332e..ac079e4e53 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -146,6 +146,7 @@ export enum CHAIN { SVM = "svm", ASTRZK = "astrzk", LYRA = "lyra", + XLAYER = "xlayer" } // Don´t use diff --git a/helpers/env.ts b/helpers/env.ts index 086fd7f6ec..bb2aaab04c 100644 --- a/helpers/env.ts +++ b/helpers/env.ts @@ -5,7 +5,8 @@ const BOOL_KEYS = [ const DEFAULTS: any = { ANKR_API_KEY: '79258ce7f7ee046decc3b5292a24eb4bf7c910d7e39b691384c7ce0cfb839a01', ZETA_RPC: "https://zetachain-evm.blockpi.network/v1/rpc/public,https://zetachain-mainnet-archive.allthatnode.com:8545", - SVM_RPC: "https://rpc.cosvm.net" + SVM_RPC: "https://rpc.cosvm.net", + XLAYER_RPC: "https://xlayerrpc.okx.com", } export const ENV_KEYS = new Set([ diff --git a/package-lock.json b/package-lock.json index 5f3f3de59e..9ef953c2e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.51", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.51.tgz", - "integrity": "sha512-9xph+m9PykFw23K49AUagVLj+iu9mHMUeoZwBmdpVT0GBQNpLadMjCWc9NEgivrguOqMC76MhxZBsZMOTlzXHw==", + "version": "5.0.53", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.53.tgz", + "integrity": "sha512-FhrgVni9TNEdOHV+7NHHTvfzHCkejI/1dG6Jj4TlK3vIGEgsgIlFxZzXImhnXf2SBxBMKvye9WF95Sk5RO6riQ==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@supercharge/promise-pool": "^2.1.0", From 8eeaf07cbe71a25990f4d11549a43b1e8cd4bc2e Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Tue, 23 Apr 2024 19:29:14 +0100 Subject: [PATCH 0409/1590] add merchant moe dex --- fees/merchant-moe-dex.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 fees/merchant-moe-dex.ts diff --git a/fees/merchant-moe-dex.ts b/fees/merchant-moe-dex.ts new file mode 100644 index 0000000000..9326801b47 --- /dev/null +++ b/fees/merchant-moe-dex.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + mantle: { + factory: '0x5bef015ca9424a7c07b68490616a4c1f094bedec', + } +}) \ No newline at end of file From 5d76f723c1e46bd85fde780ad8d928b6ace19329 Mon Sep 17 00:00:00 2001 From: degencreator <156078277+degencreator@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:30:35 +0200 Subject: [PATCH 0410/1590] feat: IntentX Mantle Volume --- dexs/intent-x/index.tsx | 134 ++++++++++++++++++++++++++++++++++------ 1 file changed, 116 insertions(+), 18 deletions(-) diff --git a/dexs/intent-x/index.tsx b/dexs/intent-x/index.tsx index d05e5dee31..030070c964 100644 --- a/dexs/intent-x/index.tsx +++ b/dexs/intent-x/index.tsx @@ -6,21 +6,32 @@ 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"; -const endpoint = "https://api.studio.thegraph.com/query/62472/intentx-analytics_082/version/latest"; -const endpoint_blast = "https://api.studio.thegraph.com/query/62472/intentx-analytics_082_blast/version/latest"; +const endpoint_0_8_0 = + "https://api.thegraph.com/subgraphs/name/intent-x/perpetuals-analytics_base"; +const endpoint = + "https://api.studio.thegraph.com/query/62472/intentx-analytics_082/version/latest"; +const endpoint_blast = + "https://api.studio.thegraph.com/query/62472/intentx-analytics_082_blast/version/latest"; +const endpoint_mantle = + "https://subgraph-api.mantle.xyz/subgraphs/name/mantle_intentx-analytics_082"; const query_0_8_0 = gql` query stats($from: String!, $to: String!) { dailyHistories( - where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" } + where: { + timestamp_gte: $from + timestamp_lte: $to + accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" + } ) { timestamp platformFee accountSource tradeVolume } - totalHistories(where: { accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" }) { + totalHistories( + where: { accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" } + ) { timestamp platformFee accountSource @@ -32,14 +43,20 @@ const query_0_8_0 = gql` const query = gql` query stats($from: String!, $to: String!) { dailyHistories( - where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" } + where: { + timestamp_gte: $from + timestamp_lte: $to + accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" + } ) { timestamp platformFee accountSource tradeVolume } - totalHistories(where: { accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" }) { + totalHistories( + where: { accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" } + ) { timestamp platformFee accountSource @@ -51,14 +68,45 @@ const query = gql` const queryBlast = gql` query stats($from: String!, $to: String!) { dailyHistories( - where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" } + where: { + timestamp_gte: $from + timestamp_lte: $to + accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" + } ) { timestamp platformFee accountSource tradeVolume } - totalHistories(where: { accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" }) { + totalHistories( + where: { accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + } +`; + +const queryMantle = gql` + query stats($from: String!, $to: String!) { + dailyHistories( + where: { + timestamp_gte: $from + timestamp_lte: $to + accountSource: "0xECbd0788bB5a72f9dFDAc1FFeAAF9B7c2B26E456" + } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + totalHistories( + where: { accountSource: "0xECbd0788bB5a72f9dFDAc1FFeAAF9B7c2B26E456" } + ) { timestamp platformFee accountSource @@ -88,10 +136,14 @@ const toString = (x: BigNumber) => { }; const fetchVolume = async (timestamp: number): Promise => { - const response_0_8_0: IGraphResponse = await request(endpoint_0_8_0, query_0_8_0, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), - }); + const response_0_8_0: IGraphResponse = await request( + endpoint_0_8_0, + query_0_8_0, + { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + } + ); const response: IGraphResponse = await request(endpoint, query, { from: String(timestamp - ONE_DAY_IN_SECONDS), to: String(timestamp), @@ -128,14 +180,20 @@ const fetchVolume = async (timestamp: number): Promise => { }; }; -const fetchVolumeBlast = async (timestamp: number): Promise => { +const fetchVolumeBlast = async ( + timestamp: number +): Promise => { let dailyVolume = new BigNumber(0); let totalVolume = new BigNumber(0); - const response_blast: IGraphResponse = await request(endpoint_blast, queryBlast, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), - }); + const response_blast: IGraphResponse = await request( + endpoint_blast, + queryBlast, + { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + } + ); response_blast.dailyHistories.forEach((data) => { dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); }); @@ -158,6 +216,42 @@ const fetchVolumeBlast = async (timestamp: number): Promise = }; }; +const fetchVolumeMantle = async ( + timestamp: number +): Promise => { + let dailyVolume = new BigNumber(0); + let totalVolume = new BigNumber(0); + + const response_mantle: IGraphResponse = await request( + endpoint_mantle, + queryMantle, + { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + } + ); + response_mantle.dailyHistories.forEach((data) => { + dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); + }); + response_mantle.totalHistories.forEach((data) => { + totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); + }); + + dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); + totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); + + const _dailyVolume = toString(dailyVolume); + const _totalVolume = toString(totalVolume); + + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + + return { + timestamp: dayTimestamp, + dailyVolume: _dailyVolume ?? "0", + totalVolume: _totalVolume ?? "0", + }; +}; + const adapter: SimpleAdapter = { adapter: { [CHAIN.BASE]: { @@ -168,6 +262,10 @@ const adapter: SimpleAdapter = { fetch: fetchVolumeBlast, start: 1698796800, }, + [CHAIN.MANTLE]: { + fetch: fetchVolumeMantle, + start: 1698796800, + }, }, }; From 7dd7e684677d6df023ccbaa7703ed3f481677690 Mon Sep 17 00:00:00 2001 From: degencreator <156078277+degencreator@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:33:09 +0200 Subject: [PATCH 0411/1590] fix: Mantle fees for IntentX --- fees/intent-x/index.tsx | 155 +++++++++++++++++++++++++++++++++++----- 1 file changed, 137 insertions(+), 18 deletions(-) diff --git a/fees/intent-x/index.tsx b/fees/intent-x/index.tsx index 817482e92f..88d3de8167 100644 --- a/fees/intent-x/index.tsx +++ b/fees/intent-x/index.tsx @@ -6,21 +6,32 @@ 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"; -const endpoint = "https://api.studio.thegraph.com/query/62472/intentx-analytics_082/version/latest"; -const endpoint_blast = "https://api.studio.thegraph.com/query/62472/intentx-analytics_082_blast/version/latest"; +const endpoint_0_8_0 = + "https://api.thegraph.com/subgraphs/name/intent-x/perpetuals-analytics_base"; +const endpoint = + "https://api.studio.thegraph.com/query/62472/intentx-analytics_082/version/latest"; +const endpoint_blast = + "https://api.studio.thegraph.com/query/62472/intentx-analytics_082_blast/version/latest"; +const endpoint_mantle = + "https://subgraph-api.mantle.xyz/subgraphs/name/mantle_intentx-analytics_082"; const query_0_8_0 = gql` query stats($from: String!, $to: String!) { dailyHistories( - where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" } + where: { + timestamp_gte: $from + timestamp_lte: $to + accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" + } ) { timestamp platformFee accountSource tradeVolume } - totalHistories(where: { accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" }) { + totalHistories( + where: { accountSource: "0x724796d2e9143920B1b58651B04e1Ed201b8cC98" } + ) { timestamp platformFee accountSource @@ -32,14 +43,20 @@ const query_0_8_0 = gql` const query = gql` query stats($from: String!, $to: String!) { dailyHistories( - where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" } + where: { + timestamp_gte: $from + timestamp_lte: $to + accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" + } ) { timestamp platformFee accountSource tradeVolume } - totalHistories(where: { accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" }) { + totalHistories( + where: { accountSource: "0x8Ab178C07184ffD44F0ADfF4eA2ce6cFc33F3b86" } + ) { timestamp platformFee accountSource @@ -51,14 +68,45 @@ const query = gql` const queryBlast = gql` query stats($from: String!, $to: String!) { dailyHistories( - where: { timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" } + where: { + timestamp_gte: $from + timestamp_lte: $to + accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" + } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + totalHistories( + where: { accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + } +`; + +const queryMantle = gql` + query stats($from: String!, $to: String!) { + dailyHistories( + where: { + timestamp_gte: $from + timestamp_lte: $to + accountSource: "0xECbd0788bB5a72f9dFDAc1FFeAAF9B7c2B26E456" + } ) { timestamp platformFee accountSource tradeVolume } - totalHistories(where: { accountSource: "0x083267D20Dbe6C2b0A83Bd0E601dC2299eD99015" }) { + totalHistories( + where: { accountSource: "0xECbd0788bB5a72f9dFDAc1FFeAAF9B7c2B26E456" } + ) { timestamp platformFee accountSource @@ -88,10 +136,14 @@ const toString = (x: BigNumber) => { }; const fetchVolume = async (timestamp: number): Promise => { - const response_0_8_0: IGraphResponse = await request(endpoint_0_8_0, query_0_8_0, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), - }); + const response_0_8_0: IGraphResponse = await request( + endpoint_0_8_0, + query_0_8_0, + { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + } + ); const response: IGraphResponse = await request(endpoint, query, { from: String(timestamp - ONE_DAY_IN_SECONDS), to: String(timestamp), @@ -151,14 +203,20 @@ const fetchVolume = async (timestamp: number): Promise => { }; }; -const fetchVolumeBlast = async (timestamp: number): Promise => { +const fetchVolumeBlast = async ( + timestamp: number +): Promise => { let dailyFees = new BigNumber(0); let totalFees = new BigNumber(0); - const response_blast: IGraphResponse = await request(endpoint_blast, queryBlast, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), - }); + const response_blast: IGraphResponse = await request( + endpoint_blast, + queryBlast, + { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + } + ); response_blast.dailyHistories.forEach((data) => { dailyFees = dailyFees.plus(new BigNumber(data.platformFee)); }); @@ -202,6 +260,63 @@ const fetchVolumeBlast = async (timestamp: number): Promise => }; }; +const fetchVolumeMantle = async ( + timestamp: number +): Promise => { + let dailyFees = new BigNumber(0); + let totalFees = new BigNumber(0); + + const response_mantle: IGraphResponse = await request( + endpoint_mantle, + queryMantle, + { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + } + ); + response_mantle.dailyHistories.forEach((data) => { + dailyFees = dailyFees.plus(new BigNumber(data.platformFee)); + }); + response_mantle.totalHistories.forEach((data) => { + totalFees = totalFees.plus(new BigNumber(data.platformFee)); + }); + + dailyFees = dailyFees.dividedBy(new BigNumber(1e18)); + totalFees = totalFees.dividedBy(new BigNumber(1e18)); + const _dailyFees = toString(dailyFees); + const _totalFees = toString(totalFees); + + const dailyUserFees = _dailyFees; + const dailyRevenue = _dailyFees; + const dailyProtocolRevenue = "0"; + const dailyHoldersRevenue = _dailyFees; + const dailySupplySideRevenue = "0"; + + const totalUserFees = _totalFees; + const totalRevenue = _totalFees; + const totalProtocolRevenue = "0"; + const totalSupplySideRevenue = "0"; + + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + + return { + timestamp: dayTimestamp, + + dailyFees: _dailyFees ?? "0", + totalFees: _totalFees ?? "0", + + dailyUserFees: dailyUserFees ?? "0", + dailyRevenue: dailyRevenue ?? "0", + dailyProtocolRevenue: dailyProtocolRevenue ?? "0", + dailyHoldersRevenue: dailyHoldersRevenue ?? "0", + dailySupplySideRevenue: dailySupplySideRevenue ?? "0", + totalUserFees: totalUserFees ?? "0", + totalRevenue: totalRevenue ?? "0", + totalProtocolRevenue: totalProtocolRevenue ?? "0", + totalSupplySideRevenue: totalSupplySideRevenue ?? "0", + }; +}; + const adapter: SimpleAdapter = { adapter: { [CHAIN.BASE]: { @@ -212,6 +327,10 @@ const adapter: SimpleAdapter = { fetch: fetchVolumeBlast, start: 1698796800, }, + [CHAIN.MANTLE]: { + fetch: fetchVolumeMantle, + start: 1698796800, + }, }, }; export default adapter; From 5be22db77130633fe5c37c46b78df491a52672dd Mon Sep 17 00:00:00 2001 From: DarkRoku12 Date: Tue, 23 Apr 2024 22:17:49 -0400 Subject: [PATCH 0412/1590] Add Umoja to Options & Fees dashboard. --- fees/umoja/index.ts | 32 ++++++++++++++++++++++++++++++++ options/umoja/constants.ts | 9 +++++++++ options/umoja/index.ts | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 fees/umoja/index.ts create mode 100644 options/umoja/constants.ts create mode 100644 options/umoja/index.ts diff --git a/fees/umoja/index.ts b/fees/umoja/index.ts new file mode 100644 index 0000000000..96356a0ce2 --- /dev/null +++ b/fees/umoja/index.ts @@ -0,0 +1,32 @@ +import * as Fetch from "../../utils/fetchURL"; +import * as Chains from "../../helpers/chains"; +import * as Adapters from "../../adapters/types"; +import * as C from "../../options/umoja/constants"; + +const get_data = async (timestamp: number) => { + const url = `${C.base_endpoint}/tokens/performance/d-llama`; + const date = new Date(timestamp * 1000).toISOString(); + const params = { date: date, range: 24 * 60 * 60, token: "*" }; + const result = await Fetch.httpGet(url, { params: params }, { withMetadata: false }); + + return { + timestamp: timestamp, + dailyFees: result.fees, + totalFees: result.fees_to_date, + }; +}; + +const adapter: Adapters.SimpleAdapter = { + adapter: { + [Chains.ARBITRUM]: { + fetch: get_data, + start: async () => new Date(C.min_start_date).getTime() / 1000, + meta: { + methodology: C.methodology, + hallmarks: C.hallmarks, + }, + }, + }, +}; + +export default adapter; diff --git a/options/umoja/constants.ts b/options/umoja/constants.ts new file mode 100644 index 0000000000..9b54e28e78 --- /dev/null +++ b/options/umoja/constants.ts @@ -0,0 +1,9 @@ +const get_timestamp = (date: string) => new Date(date).getTime() / 1000; + +export const min_start_date = "2024-02-05"; +export const base_endpoint = "https://api.protocol.umoja.xyz"; +export const hallmarks: [[number, string]] = [[get_timestamp("2024-02-05"), "Beta Launch"]]; +export const methodology = { + Revenue: "All revenue generated comes from user fees.", + Fees: "All fees comes from synthetic option activation, which are about 1% of the notional value of option.", +}; diff --git a/options/umoja/index.ts b/options/umoja/index.ts new file mode 100644 index 0000000000..5f728109f0 --- /dev/null +++ b/options/umoja/index.ts @@ -0,0 +1,34 @@ +import * as Fetch from "../../utils/fetchURL"; +import * as Chains from "../../helpers/chains"; +import * as Adapters from "../../adapters/types"; +import * as C from "./constants"; + +const get_data = async (timestamp: number) => { + const url = `${C.base_endpoint}/tokens/performance/d-llama`; + const date = new Date(timestamp * 1000).toISOString(); + const params = { date: date, range: 24 * 60 * 60, token: "*" }; + const result = await Fetch.httpGet(url, { params: params }, { withMetadata: false }); + + return { + timestamp: timestamp, + totalPremiumVolume: result.fees_to_date, + totalNotionalVolume: result.notional_to_date, + dailyPremiumVolume: result.fees, + dailyNotionalVolume: result.notional, + }; +}; + +const adapter: Adapters.SimpleAdapter = { + adapter: { + [Chains.ARBITRUM]: { + fetch: get_data, + start: async () => new Date(C.min_start_date).getTime() / 1000, + meta: { + methodology: C.methodology, + hallmarks: C.hallmarks, + }, + }, + }, +}; + +export default adapter; From 77e5b36403ebb5a2fd263f6577fc0f09d7411ae4 Mon Sep 17 00:00:00 2001 From: Khang NT Date: Wed, 24 Apr 2024 17:03:39 +0700 Subject: [PATCH 0413/1590] [zklite] Add new DEX zklite.io --- dexs/zklite/index.ts | 49 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 dexs/zklite/index.ts diff --git a/dexs/zklite/index.ts b/dexs/zklite/index.ts new file mode 100644 index 0000000000..0a8ef9ef2e --- /dev/null +++ b/dexs/zklite/index.ts @@ -0,0 +1,49 @@ +import fetchURL from "../../utils/fetchURL" +import type { SimpleAdapter } from "../../adapters/types"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; + +type TMarket = { + [s: string]: { + baseVolume: number; + } +} + +type TMarketInfo = { + [s: string]: { + baseAsset: { + usdPrice: number; + }; + } +} + + +const fetch = async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + const markets: TMarket = (await fetchURL('https://api.zklite.io/api/v1/markets')); + const marketInfos: TMarketInfo = (await fetchURL('https://api.zklite.io/api/v1/marketinfos?chain_id=1&market=' + Object.keys(markets).join(','))); + const amountUSD: number[] = Object.keys(markets).map(market => { + const info = marketInfos[market] + const { baseVolume } = markets[market] + if (!info) return 0; + return baseVolume * info.baseAsset.usdPrice; + }) + const dailyVolume = amountUSD.reduce((a: number, b: number) => a+b, 0) + return { + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + timestamp: dayTimestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ZKSYNC]: { + fetch, + runAtCurrTime: true, + customBackfill: undefined, + start: 1713952928, + }, + } +}; + +export default adapter; From 402611d528e0820771e9f19fc6a2210a9167d52a Mon Sep 17 00:00:00 2001 From: Khang NT Date: Wed, 24 Apr 2024 17:10:20 +0700 Subject: [PATCH 0414/1590] [zklite] fix start date --- dexs/zklite/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/zklite/index.ts b/dexs/zklite/index.ts index 0a8ef9ef2e..59658724e6 100644 --- a/dexs/zklite/index.ts +++ b/dexs/zklite/index.ts @@ -41,7 +41,7 @@ const adapter: SimpleAdapter = { fetch, runAtCurrTime: true, customBackfill: undefined, - start: 1713952928, + start: 1712718123, }, } }; From fe5a954c797564e5c131f19afa6429c20344f92a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 24 Apr 2024 11:37:26 +0000 Subject: [PATCH 0415/1590] uncomment error --- dexs/unidex/unidex/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/unidex/unidex/index.ts b/dexs/unidex/unidex/index.ts index 62fbb701ac..581cc67b80 100644 --- a/dexs/unidex/unidex/index.ts +++ b/dexs/unidex/unidex/index.ts @@ -130,8 +130,8 @@ const fetch = (chain: Chain) => { if (chain === CHAIN.ARBITRUM) { const referralVolumeUSD = await fetchReferralVolume(timestamp); - // const muxReferralVolumeUSD = await fetchMuxReferralVolume(timestamp); // errror - dailyVolumeUSD += referralVolumeUSD; + const muxReferralVolumeUSD = await fetchMuxReferralVolume(timestamp); // errror + dailyVolumeUSD += referralVolumeUSD + muxReferralVolumeUSD; } return { From 2cf9d2f1237fe0156b35040de96bd372138d908d Mon Sep 17 00:00:00 2001 From: Sinan BALCIN Date: Wed, 24 Apr 2024 14:58:47 +0100 Subject: [PATCH 0416/1590] update on bfx volume adapter --- dexs/blastfutures/index.ts | 60 +++++++++++++++----------------------- 1 file changed, 24 insertions(+), 36 deletions(-) diff --git a/dexs/blastfutures/index.ts b/dexs/blastfutures/index.ts index b5a8c15af4..8d3cd0fc38 100644 --- a/dexs/blastfutures/index.ts +++ b/dexs/blastfutures/index.ts @@ -1,51 +1,39 @@ import fetchURL from "../../utils/fetchURL" -import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; - -const historicalVolumeEndpoint = "https://api.bfx.trade/markets" -const candles = (market: string, timestampFrom: number, timestampTo: number) => { - const url = `https://api.bfx.trade/candles?market_id=${market}×tamp_from=${timestampFrom}×tamp_to=${timestampTo}&period=1440`; - return url; +import {FetchResultVolume, SimpleAdapter} from "../../adapters/types"; +import {getUniqStartOfTodayTimestamp} from "../../helpers/getUniSubgraphVolume"; +const historicalVolumeEndpoint = "https://api.prod.rabbitx.io/bfx/volume" +const volumeByTime = (timestampFrom: number, timestampTo: number) => { + const url = `${historicalVolumeEndpoint}?start_date=${timestampFrom}&end_date=${timestampTo}`; + return url; } interface IVolumeall { - volume: string; - time: string; - close: string; + volume: string; } const fetchVolume = async (timestamp: number): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - - // Get market data - const response = await fetchURL(historicalVolumeEndpoint); - const marketsData = response.result; - - // Fetch candles for each USD market - const historical: IVolumeall[] = (await Promise.all(marketsData.map((market: any) => fetchURL(candles(market.id, fromTimestamp, toTimestamp))))) - .map((e: any) => e.result) - .flat(); - - // Calculate daily volume - const dailyVolume = historical - .filter((e: IVolumeall) => Number(e.time) >= fromTimestamp ) - .filter((e: IVolumeall) => Number(e.time) <= toTimestamp) - .reduce((a: number, b: IVolumeall) => a + Number(b.volume), 0) - - return { - dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, - timestamp: timestamp, - }; + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + const fromMS = dayTimestamp * 1000 * 1000; + const toMS = (dayTimestamp + 60 * 60 * 24) * 1000 * 1000; + + const response = await fetchURL(volumeByTime(fromMS, toMS)); + const marketsData: IVolumeall[] = response.result; + const dailyVolume = marketsData.reduce((acc, {volume}) => acc + Number(volume), 0); + + return { + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + timestamp: timestamp, + }; }; const adapter: SimpleAdapter = { - adapter: { - "blast": { - fetch: fetchVolume, - start: 1700179200, // Replace with actual start timestamp + adapter: { + "blast": { + fetch: fetchVolume, + start: 1700179200, // Replace with actual start timestamp + }, }, - }, }; export default adapter; From a03e7cc7b76dec30f12b1a6c1ca42b457a536f91 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 24 Apr 2024 14:23:37 +0000 Subject: [PATCH 0417/1590] fix naming --- dexs/unidex/index.ts | 2 +- dexs/unidex/{unidex => unidex-agg-perp}/index.ts | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename dexs/unidex/{unidex => unidex-agg-perp}/index.ts (100%) diff --git a/dexs/unidex/index.ts b/dexs/unidex/index.ts index 78e2e95d05..f1d8766a3b 100644 --- a/dexs/unidex/index.ts +++ b/dexs/unidex/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; -import { adapteraggderivative } from './unidex/index' +import { adapteraggderivative } from './unidex-agg-perp/index' type TChainIDs = { [key in Chain]?: number; diff --git a/dexs/unidex/unidex/index.ts b/dexs/unidex/unidex-agg-perp/index.ts similarity index 100% rename from dexs/unidex/unidex/index.ts rename to dexs/unidex/unidex-agg-perp/index.ts From 23ba2ba21f9d1a53f4f572400c46ad4ece82f9f8 Mon Sep 17 00:00:00 2001 From: Dongminh1997 Date: Wed, 24 Apr 2024 23:57:33 +0700 Subject: [PATCH 0418/1590] Update index.ts --- aggregators/magpie/index.ts | 127 +++++++++++++++++++++++++----------- 1 file changed, 90 insertions(+), 37 deletions(-) diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts index a0b9dcc18b..86fcf5a245 100644 --- a/aggregators/magpie/index.ts +++ b/aggregators/magpie/index.ts @@ -1,80 +1,133 @@ -import { FetchResult, } from "../../adapters/types"; import fetchUrl from "../../utils/fetchURL" +import { ChainBlocks, FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types"; import { getTimestampAtStartOfDayUTC } from "../../utils/date" import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; const chainsMap: Record = { - ETHEREUM: "ETHEREUM", - ARBITRUM: "ARBITRUM", - POLYGON: "POLYGON", - AVALANCHE: "AVALANCHE", - BNB: "BNB", - OPTIMISM: "OPTIMISM", - BASE: "BASE" + ETHEREUM: CHAIN.ETHEREUM, + ARBITRUM: CHAIN.ARBITRUM, + POLYGON: CHAIN.POLYGON, + AVALANCHE: CHAIN.AVAX, + BNB: CHAIN.BSC, + OPTIMISM: CHAIN.OPTIMISM, + BASE: CHAIN.BASE, }; +type IRequest = { + [key: string]: Promise; +} +const requests: IRequest = {} -const fetch = - (chain: string) => - async (timestamp: number): Promise => { +export async function _fetchURL(url: string, retries: number = 10) { + if (!requests[url]) { + requests[url] = fetchUrl(url, retries) + } + return requests[url] +} + +export function getKey(chain: string) { + if (chain === 'ETHEREUM') { + return 'eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0' + } else if (chain === 'ARBITRUM') { + return 'B8GDtFV1J59aQxRfzjTKu3Dt0P9bdJsS' + } else if (chain === 'POLYGON') { + return 'rzB03yaeM47jvGV7gqWX1Uh4yDVeNyB0' + } else if (chain === 'AVALANCHE') { + return '1Bxivmv97g0sxui3guLRZJN3TCRPaTW2' + } else if (chain === 'BSC') { + return '86dsHrnyuMd3p2XRDfugc5UA0e6i91oc' + } else { + return 'eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0' + } +} + +const fetch = async (timestamp: number, _: ChainBlocks, {chain}: FetchOptions): Promise => { const unixTimestamp1 = getTimestampAtStartOfDayUTC(timestamp) - const unixTimestamp2 = getUniqStartOfTodayTimestamp(); - console.log(chain, timestamp, unixTimestamp1, unixTimestamp2) + const unixTimestamp2 = getTimestampAtStartOfDayUTC(getUniqStartOfTodayTimestamp()-1); + // console.log(chain, timestamp, unixTimestamp1, unixTimestamp2) if (unixTimestamp1 < unixTimestamp2) { - // console.log("Method 1") + console.log("Method 1") const url = `https://script.google.com/macros/s/AKfycbxqWlzQQzpG-KVGVpVLPafPljYkXejEAJ7TpQc8iBaHuvvu5jx5BnRFYEfQu0pqK5j_-Q/exec?timestamp=${unixTimestamp1.toString()}` - const data = await fetchUrl(url, 10) + const data = await _fetchURL(url, 10); const chainData = data.result.rows.find( - (row: any) => chainsMap[row.chain] === chain + (row: any) => chainsMap[row.chain] === chain ); if (chainData === undefined ) { return { dailyVolume: 0, - timestamp: unixTimestamp2, + timestamp: unixTimestamp1, }; } else { return { dailyVolume: chainData.dailyVolume, - timestamp: unixTimestamp2, + timestamp: unixTimestamp1, }; } } else { - // console.log("Method 2") - const url = `https://api.dune.com/api/v1/query/3587739/results?api_key=eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0` - const data = await fetchUrl(url, 10) + console.log("Method 2") + const api_key = getKey(chain) + const url = `https://api.dune.com/api/v1/query/3587739/results?api_key=${api_key}` + const data = await _fetchURL(url, 10); + // console.log(data.result) const chainData = data.result.rows.find( - (row: any) => chainsMap[row.chain] === chain + (row: any) => chainsMap[row.chain] === chain && parseInt(row.timestamp) == parseInt(unixTimestamp1.toString()) ); if (chainData === undefined ) { return { dailyVolume: 0, - timestamp: unixTimestamp2, + timestamp: unixTimestamp1, }; } else { return { dailyVolume: chainData.dailyVolume, - timestamp: unixTimestamp2, + timestamp: unixTimestamp1, }; } } }; -const adapter: any = { - timetravel: false, - adapter: { - ...Object.values(chainsMap).reduce((acc, chain) => { - return { - ...acc, - [(chainsMap as any)[chain] || chain]: { - fetch: fetch(chain), + const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: fetch, + runAtCurrTime: true, start: 1662595200, }, - }; - }, {}), - }, - isExpensiveAdapter: true, -}; + [CHAIN.ARBITRUM]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.POLYGON]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.AVAX]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.BSC]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.OPTIMISM]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.BASE]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + }, + isExpensiveAdapter: true, + }; export default adapter; From ee20b480ce26e56a53d76e3ae5e989de1f7e8dbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Ayd=C4=B1nl=C4=B1k?= Date: Wed, 24 Apr 2024 21:44:40 +0300 Subject: [PATCH 0419/1590] feat: hercules data --- dexs/hercules-v3/index.ts | 15 + dexs/hercules/index.ts | 10 + fees/hercules-v2.ts | 61 + fees/hercules-v3.ts | 61 + users/routers/routerAddresses.ts | 9 + yarn.lock | 2391 ++++++++++++++++++++++++++++++ 6 files changed, 2547 insertions(+) create mode 100644 dexs/hercules-v3/index.ts create mode 100644 dexs/hercules/index.ts create mode 100644 fees/hercules-v2.ts create mode 100644 fees/hercules-v3.ts create mode 100644 yarn.lock diff --git a/dexs/hercules-v3/index.ts b/dexs/hercules-v3/index.ts new file mode 100644 index 0000000000..793121bdf0 --- /dev/null +++ b/dexs/hercules-v3/index.ts @@ -0,0 +1,15 @@ +// https://metisapi.0xgraph.xyz/subgraphs/name/cryptoalgebra/analytics +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter({ + [CHAIN.METIS]: "https://metisapi.0xgraph.xyz/subgraphs/name/cryptoalgebra/analytics" +}, { + factoriesName: "factories", + dayData: "algebraDayData", + dailyVolume: "volumeUSD", + totalVolume: "totalVolumeUSD", +}); + +adapters.adapter.metis.start = 1696331700; +export default adapters; diff --git a/dexs/hercules/index.ts b/dexs/hercules/index.ts new file mode 100644 index 0000000000..5bd3a0a750 --- /dev/null +++ b/dexs/hercules/index.ts @@ -0,0 +1,10 @@ +// https://metisapi.0xgraph.xyz/subgraphs/name/amm-subgraph-andromeda/ +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter({ + [CHAIN.METIS]: "https://metisapi.0xgraph.xyz/subgraphs/name/amm-subgraph-andromeda/" +}, {}); + +adapters.adapter.metis.start = 1698103260; +export default adapters; diff --git a/fees/hercules-v2.ts b/fees/hercules-v2.ts new file mode 100644 index 0000000000..87445553da --- /dev/null +++ b/fees/hercules-v2.ts @@ -0,0 +1,61 @@ +import { Chain } from "@defillama/sdk/build/general"; +import BigNumber from "bignumber.js"; +import request, { gql } from "graphql-request"; +import { Adapter, FetchResultFees } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; +import { getTimestampAtStartOfDayUTC } from "../utils/date"; + +interface IPoolData { + date: number; + dailyFeeUSD: string; +} + +type IURL = { + [l: string | Chain]: string; +} + +const endpoints: IURL = { + [CHAIN.METIS]: "https://metisapi.0xgraph.xyz/subgraphs/name/amm-subgraph-andromeda/" +} + +const fetch = (chain: Chain) => { + return async (timestamp: number): Promise => { + const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + const dateId = Math.floor(getTimestampAtStartOfDayUTC(todayTimestamp) / 86400) + const graphQuery = gql + ` + { + uniswapDayData(id: ${dateId}) { + id + dailyFeeUSD + } + } + `; + + const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).uniswapDayData; + const dailyFeeUSD = graphRes; + const dailyFee = dailyFeeUSD?.dailyFeeUSD ? new BigNumber(dailyFeeUSD.dailyFeeUSD) : undefined + if (dailyFee === undefined) return { timestamp } + return { + timestamp, + dailyFees: dailyFee.toString(), + dailyUserFees: dailyFee.toString(), + dailyRevenue: dailyFee.multipliedBy(0.4).toString(), + dailyProtocolRevenue: dailyFee.multipliedBy(0.05).toString(), + dailyHoldersRevenue: dailyFee.multipliedBy(0.35).toString(), + dailySupplySideRevenue: dailyFee.multipliedBy(0.60).toString(), + }; + }; +} + +const adapter: Adapter = { + adapter: { + [CHAIN.METIS]: { + fetch: fetch(CHAIN.METIS), + start: 1698103260, + }, + }, +}; + +export default adapter; diff --git a/fees/hercules-v3.ts b/fees/hercules-v3.ts new file mode 100644 index 0000000000..1488a47429 --- /dev/null +++ b/fees/hercules-v3.ts @@ -0,0 +1,61 @@ +import { Chain } from "@defillama/sdk/build/general"; +import BigNumber from "bignumber.js"; +import request, { gql } from "graphql-request"; +import { Adapter, FetchResultFees } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; +import { getTimestampAtStartOfDayUTC } from "../utils/date"; + +interface IPoolData { + id: number; + feesUSD: string; +} + +type IURL = { + [l: string | Chain]: string; +} + +const endpoints: IURL = { + [CHAIN.METIS]: "https://metisapi.0xgraph.xyz/subgraphs/name/cryptoalgebra/analytics" +} + +const fetch = (chain: Chain) => { + return async (timestamp: number): Promise => { + const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + const dateId = Math.floor(getTimestampAtStartOfDayUTC(todayTimestamp) / 86400) + const graphQuery = gql + ` + { + 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 + if (dailyFee === undefined) return { timestamp } + return { + timestamp, + dailyFees: dailyFee.toString(), + dailyUserFees: dailyFee.toString(), + dailyRevenue: dailyFee.multipliedBy(0.15).toString(), + dailyProtocolRevenue: dailyFee.multipliedBy(0.03).toString(), + dailyHoldersRevenue: dailyFee.multipliedBy(0.12).toString(), + dailySupplySideRevenue: dailyFee.multipliedBy(0.85).toString(), + }; + }; +} + +const adapter: Adapter = { + adapter: { + [CHAIN.METIS]: { + fetch: fetch(CHAIN.METIS), + start: 1696331700, + }, + }, +}; + +export default adapter; diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index c54e76aa38..113f44e84d 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -478,6 +478,15 @@ export default ([ ] } }, + { + "id":"2306", + "name":"Hercules", + "addresses":{ + "metis":[ + "0x14679D1Da243B8c7d1A4c6d0523A2Ce614Ef027C" + ] + } + }, { "id":"parent#thena", "name":"Thena", diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..e325881f95 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2391 @@ +# 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@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-s3@^3.400.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.556.0.tgz#b32c12e7857326072df7c53c40b36bdf5d8e6169" + integrity sha512-6WF9Kuzz1/8zqX8hKBpqj9+FYwQ5uTsVcOKpTW94AMX2qtIeVRlwlnNnYyywWo61yqD3g59CMNHcqSsaqAwglg== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.556.0" + "@aws-sdk/core" "3.556.0" + "@aws-sdk/credential-provider-node" "3.556.0" + "@aws-sdk/middleware-bucket-endpoint" "3.535.0" + "@aws-sdk/middleware-expect-continue" "3.535.0" + "@aws-sdk/middleware-flexible-checksums" "3.535.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-location-constraint" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-sdk-s3" "3.556.0" + "@aws-sdk/middleware-signing" "3.556.0" + "@aws-sdk/middleware-ssec" "3.537.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/signature-v4-multi-region" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@aws-sdk/xml-builder" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/eventstream-serde-browser" "^2.2.0" + "@smithy/eventstream-serde-config-resolver" "^2.2.0" + "@smithy/eventstream-serde-node" "^2.2.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-blob-browser" "^2.2.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/hash-stream-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/md5-js" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-stream" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + "@smithy/util-waiter" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.556.0.tgz#4c19fccc35361de046d2cd74a7a685d71aa5dd1e" + integrity sha512-AXKd2TB6nNrksu+OfmHl8uI07PdgzOo4o8AxoRO8SHlwoMAGvcT9optDGVSYoVfgOKTymCoE7h8/UoUfPc11wQ== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.556.0" + "@aws-sdk/core" "3.556.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.556.0.tgz#7beeeebb6a437f09680edefc5c998822292a528a" + integrity sha512-unXdWS7uvHqCcOyC1de+Fr8m3F2vMg2m24GPea0bg7rVGTYmiyn9mhUX11VCt+ozydrw+F50FQwL6OqoqPocmw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.556.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.556.0.tgz#3aa20cca462839f1451f11efada2be119dd36a6b" + integrity sha512-TsK3js7Suh9xEmC886aY+bv0KdLLYtzrcmVt6sJ/W6EnDXYQhBuKYFhp03NrN2+vSvMGpqJwR62DyfKe1G0QzQ== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.556.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.556.0.tgz#d0f4431a72282b71cfbcaedfb803f7f2807cf60b" + integrity sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA== + dependencies: + "@smithy/core" "^1.4.2" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz#26248e263a8107953d5496cb3760d4e7c877abcf" + integrity sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.552.0": + version "3.552.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.552.0.tgz#ecc88d02cba95621887e6b85b2583e756ad29eb6" + integrity sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.556.0.tgz#bf780feb92a7920cc525cd7cb7870ea61b84c125" + integrity sha512-0Nz4ErOlXhe3muxWYMbPwRMgfKmVbBp36BAE2uv/z5wTbfdBkcgUwaflEvlKCLUTdHzuZsQk+BFS/gVyaUeOuA== + dependencies: + "@aws-sdk/client-sts" "3.556.0" + "@aws-sdk/credential-provider-env" "3.535.0" + "@aws-sdk/credential-provider-process" "3.535.0" + "@aws-sdk/credential-provider-sso" "3.556.0" + "@aws-sdk/credential-provider-web-identity" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.556.0.tgz#51f3dc4506053249f8593765d1ab2cef53732fa3" + integrity sha512-s1xVtKjyGc60O8qcNIzS1X3H+pWEwEfZ7TgNznVDNyuXvLrlNWiAcigPWGl2aAkc8tGcsSG0Qpyw2KYC939LFg== + dependencies: + "@aws-sdk/credential-provider-env" "3.535.0" + "@aws-sdk/credential-provider-http" "3.552.0" + "@aws-sdk/credential-provider-ini" "3.556.0" + "@aws-sdk/credential-provider-process" "3.535.0" + "@aws-sdk/credential-provider-sso" "3.556.0" + "@aws-sdk/credential-provider-web-identity" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz#ea1e8a38a32e36bbdc3f75eb03352e6eafa0c659" + integrity sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.556.0.tgz#26dfdd2c6e034f66e82985d65bd6aa3ae09d5e19" + integrity sha512-ETuBgcnpfxqadEAqhQFWpKoV1C/NAgvs5CbBc5EJbelJ8f4prTdErIHjrRtVT8c02MXj92QwczsiNYd5IoOqyw== + dependencies: + "@aws-sdk/client-sso" "3.556.0" + "@aws-sdk/token-providers" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.556.0.tgz#94cd55eaee6ca96354237569102dfaf6774544f4" + integrity sha512-R/YAL8Uh8i+dzVjzMnbcWLIGeeRi2mioHVGnVF+minmaIkCiQMZg2HPrdlKm49El+RljT28Nl5YHRuiqzEIwMA== + dependencies: + "@aws-sdk/client-sts" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz#8e19f3f9a89d618b3d75782343cb77c80ef6c7c4" + integrity sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-arn-parser" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz#4b95208f26430a7a360da088db61573b93061bcd" + integrity sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.535.0.tgz#278ae5e824ca0b73b80adf88a6aa40138bdd6b4c" + integrity sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.535.0" + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz#d5264f813592f5e77df25e5a14bbb0e6441812db" + integrity sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.535.0.tgz#718c776c118ef78a33117fa353803d079ebcc8fa" + integrity sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz#1a8ffd6c368edd6cb32e1edf7b1dced95c1820ee" + integrity sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz#6aa1e1bd1e84730d58a73021b745e20d4341a92d" + integrity sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.556.0.tgz#ff135d1fbfc843a93860eb3a4000da9d721442c0" + integrity sha512-4W/dnxqj1B6/uS/5Z+3UHaqDDGjNPgEVlqf5d3ToOFZ31ZfpANwhcCmyX39JklC4aolCEi9renQ5wHnTCC8K8g== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-arn-parser" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.556.0.tgz#2892d76cddf3cb956122618588d163ff7a42c43f" + integrity sha512-kWrPmU8qd3gI5qzpuW9LtWFaH80cOz1ZJDavXx6PRpYZJ5JaKdUHghwfDlVTzzFYAeJmVsWIkPcLT5d5mY5ZTQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.537.0": + version "3.537.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.537.0.tgz#c64e4234e38f285e9e2bdf06fdbbb57f6bc848b2" + integrity sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz#4981c64c1eeb6b5c453bce02d060b8c71d44994d" + integrity sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz#20a30fb5fbbe27ab70f2ed16327bae7e367b5cec" + integrity sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.556.0.tgz#34ff26a1617b885a845752e62aca7bc29deb33ac" + integrity sha512-bWDSK0ggK7QzAOmPZGv29UAIZocL1MNY7XyOvm3P3P1U3tFMoIBilQQBLabXyHoZ9J3Ik0Vv4n95htUhRQ35ow== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.556.0.tgz#96b4dd4fec67ae62f8c98ae8c2f94e4ed050073a" + integrity sha512-tvIiugNF0/+2wfuImMrpKjXMx4nCnFWQjQvouObny+wrif/PGqqQYrybwxPJDvzbd965bu1I+QuSv85/ug7xsg== + dependencies: + "@aws-sdk/client-sso-oidc" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.535.0", "@aws-sdk/types@^3.222.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" + integrity sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.535.0.tgz#046aafff4438caa3740cebec600989b1e840b934" + integrity sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz#a7fea1d2a5e64623353aaa6ee32dbb86ab9cd3f8" + integrity sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + "@smithy/util-endpoints" "^1.2.0" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz#0200a336fddd47dd6567ce15d01f62be50a315d7" + integrity sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz#d67d72e8b933051620f18ddb1c2be225f79f588f" + integrity sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz#f5c26fb6f3f561d3cf35f96f303b1775afad0a5b" + integrity sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.535.0.tgz#dbe66338f64e283951778f7d07a4afd2d7d09bfd" + integrity sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng== + dependencies: + "@smithy/types" "^2.12.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.53" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.53.tgz#d2613ade1dbe72c08a0cfa02ecf17fcfc3cfd081" + integrity sha512-FhrgVni9TNEdOHV+7NHHTvfzHCkejI/1dG6Jj4TlK3vIGEgsgIlFxZzXImhnXf2SBxBMKvye9WF95Sk5RO6riQ== + dependencies: + "@aws-sdk/client-s3" "^3.400.0" + "@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" + +"@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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" + integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" + integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== + dependencies: + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" + integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" + integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/core@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" + integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" + integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" + integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" + integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" + integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" + integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" + integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== + dependencies: + "@smithy/eventstream-codec" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" + integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" + integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== + dependencies: + "@smithy/chunked-blob-reader" "^2.2.0" + "@smithy/chunked-blob-reader-native" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/hash-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" + integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" + integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" + integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== + dependencies: + "@smithy/types" "^2.12.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/md5-js@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" + integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" + integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" + integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== + dependencies: + "@smithy/middleware-serde" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/middleware-retry@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" + integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/service-error-classification" "^2.1.5" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" + integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" + integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" + integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" + integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/property-provider@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" + integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" + integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" + integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-uri-escape" "^2.2.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" + integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" + integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== + dependencies: + "@smithy/types" "^2.12.0" + +"@smithy/shared-ini-file-loader@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" + integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz#c30dd4028ae50c607db99459981cce8cdab7a3fd" + integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-uri-escape" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" + integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@smithy/types@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" + integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== + dependencies: + "@smithy/querystring-parser" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-base64@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" + integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" + integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" + integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== + 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-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" + integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" + integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" + integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== + dependencies: + "@smithy/config-resolver" "^2.2.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" + integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" + integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" + integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-retry@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" + integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== + dependencies: + "@smithy/service-error-classification" "^2.1.5" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-stream@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" + integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== + dependencies: + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" + integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" + integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/types" "^2.12.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.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + 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.31" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd" + integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA== + 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.11.9" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +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.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + 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.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + 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.12.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.0.tgz#b0c2ce207ae5a3b5125be966e32ffea7c1f2481a" + integrity sha512-zL5NlOTjML239gIvtVJuaSk0N9GQLi1Hom3ZWUszE5lDTQE/IVB62mrPkQ2W1bGcZwVGSLaetQbWNQSvI4rGDQ== + 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.5.0" + +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.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + 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.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.10.2" + +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.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +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== + +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@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + 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.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +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.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +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== + +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" + +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.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== + 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.11.5" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" + integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== + 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== + +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +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.11.1, 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.3.1, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +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.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + +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== + +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.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" + integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + +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.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +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== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +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 5278a2d86b335b51e28bf8dfadf43cd0588f5b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Ayd=C4=B1nl=C4=B1k?= Date: Wed, 24 Apr 2024 21:54:26 +0300 Subject: [PATCH 0420/1590] fix: remove yarn.lock file (doesnt exist in gitignore) --- yarn.lock | 2391 ----------------------------------------------------- 1 file changed, 2391 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index e325881f95..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2391 +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@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@^3.400.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.556.0.tgz#b32c12e7857326072df7c53c40b36bdf5d8e6169" - integrity sha512-6WF9Kuzz1/8zqX8hKBpqj9+FYwQ5uTsVcOKpTW94AMX2qtIeVRlwlnNnYyywWo61yqD3g59CMNHcqSsaqAwglg== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.556.0" - "@aws-sdk/core" "3.556.0" - "@aws-sdk/credential-provider-node" "3.556.0" - "@aws-sdk/middleware-bucket-endpoint" "3.535.0" - "@aws-sdk/middleware-expect-continue" "3.535.0" - "@aws-sdk/middleware-flexible-checksums" "3.535.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-location-constraint" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-sdk-s3" "3.556.0" - "@aws-sdk/middleware-signing" "3.556.0" - "@aws-sdk/middleware-ssec" "3.537.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/signature-v4-multi-region" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@aws-sdk/xml-builder" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/eventstream-serde-browser" "^2.2.0" - "@smithy/eventstream-serde-config-resolver" "^2.2.0" - "@smithy/eventstream-serde-node" "^2.2.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-blob-browser" "^2.2.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/hash-stream-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/md5-js" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-stream" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - "@smithy/util-waiter" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.556.0.tgz#4c19fccc35361de046d2cd74a7a685d71aa5dd1e" - integrity sha512-AXKd2TB6nNrksu+OfmHl8uI07PdgzOo4o8AxoRO8SHlwoMAGvcT9optDGVSYoVfgOKTymCoE7h8/UoUfPc11wQ== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.556.0" - "@aws-sdk/core" "3.556.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.556.0.tgz#7beeeebb6a437f09680edefc5c998822292a528a" - integrity sha512-unXdWS7uvHqCcOyC1de+Fr8m3F2vMg2m24GPea0bg7rVGTYmiyn9mhUX11VCt+ozydrw+F50FQwL6OqoqPocmw== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.556.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.556.0.tgz#3aa20cca462839f1451f11efada2be119dd36a6b" - integrity sha512-TsK3js7Suh9xEmC886aY+bv0KdLLYtzrcmVt6sJ/W6EnDXYQhBuKYFhp03NrN2+vSvMGpqJwR62DyfKe1G0QzQ== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.556.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.556.0.tgz#d0f4431a72282b71cfbcaedfb803f7f2807cf60b" - integrity sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA== - dependencies: - "@smithy/core" "^1.4.2" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz#26248e263a8107953d5496cb3760d4e7c877abcf" - integrity sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.552.0": - version "3.552.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.552.0.tgz#ecc88d02cba95621887e6b85b2583e756ad29eb6" - integrity sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.556.0.tgz#bf780feb92a7920cc525cd7cb7870ea61b84c125" - integrity sha512-0Nz4ErOlXhe3muxWYMbPwRMgfKmVbBp36BAE2uv/z5wTbfdBkcgUwaflEvlKCLUTdHzuZsQk+BFS/gVyaUeOuA== - dependencies: - "@aws-sdk/client-sts" "3.556.0" - "@aws-sdk/credential-provider-env" "3.535.0" - "@aws-sdk/credential-provider-process" "3.535.0" - "@aws-sdk/credential-provider-sso" "3.556.0" - "@aws-sdk/credential-provider-web-identity" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.556.0.tgz#51f3dc4506053249f8593765d1ab2cef53732fa3" - integrity sha512-s1xVtKjyGc60O8qcNIzS1X3H+pWEwEfZ7TgNznVDNyuXvLrlNWiAcigPWGl2aAkc8tGcsSG0Qpyw2KYC939LFg== - dependencies: - "@aws-sdk/credential-provider-env" "3.535.0" - "@aws-sdk/credential-provider-http" "3.552.0" - "@aws-sdk/credential-provider-ini" "3.556.0" - "@aws-sdk/credential-provider-process" "3.535.0" - "@aws-sdk/credential-provider-sso" "3.556.0" - "@aws-sdk/credential-provider-web-identity" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz#ea1e8a38a32e36bbdc3f75eb03352e6eafa0c659" - integrity sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.556.0.tgz#26dfdd2c6e034f66e82985d65bd6aa3ae09d5e19" - integrity sha512-ETuBgcnpfxqadEAqhQFWpKoV1C/NAgvs5CbBc5EJbelJ8f4prTdErIHjrRtVT8c02MXj92QwczsiNYd5IoOqyw== - dependencies: - "@aws-sdk/client-sso" "3.556.0" - "@aws-sdk/token-providers" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.556.0.tgz#94cd55eaee6ca96354237569102dfaf6774544f4" - integrity sha512-R/YAL8Uh8i+dzVjzMnbcWLIGeeRi2mioHVGnVF+minmaIkCiQMZg2HPrdlKm49El+RljT28Nl5YHRuiqzEIwMA== - dependencies: - "@aws-sdk/client-sts" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz#8e19f3f9a89d618b3d75782343cb77c80ef6c7c4" - integrity sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-arn-parser" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz#4b95208f26430a7a360da088db61573b93061bcd" - integrity sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.535.0.tgz#278ae5e824ca0b73b80adf88a6aa40138bdd6b4c" - integrity sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.535.0" - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz#d5264f813592f5e77df25e5a14bbb0e6441812db" - integrity sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.535.0.tgz#718c776c118ef78a33117fa353803d079ebcc8fa" - integrity sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz#1a8ffd6c368edd6cb32e1edf7b1dced95c1820ee" - integrity sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz#6aa1e1bd1e84730d58a73021b745e20d4341a92d" - integrity sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.556.0.tgz#ff135d1fbfc843a93860eb3a4000da9d721442c0" - integrity sha512-4W/dnxqj1B6/uS/5Z+3UHaqDDGjNPgEVlqf5d3ToOFZ31ZfpANwhcCmyX39JklC4aolCEi9renQ5wHnTCC8K8g== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-arn-parser" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.556.0.tgz#2892d76cddf3cb956122618588d163ff7a42c43f" - integrity sha512-kWrPmU8qd3gI5qzpuW9LtWFaH80cOz1ZJDavXx6PRpYZJ5JaKdUHghwfDlVTzzFYAeJmVsWIkPcLT5d5mY5ZTQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.537.0": - version "3.537.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.537.0.tgz#c64e4234e38f285e9e2bdf06fdbbb57f6bc848b2" - integrity sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz#4981c64c1eeb6b5c453bce02d060b8c71d44994d" - integrity sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz#20a30fb5fbbe27ab70f2ed16327bae7e367b5cec" - integrity sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.556.0.tgz#34ff26a1617b885a845752e62aca7bc29deb33ac" - integrity sha512-bWDSK0ggK7QzAOmPZGv29UAIZocL1MNY7XyOvm3P3P1U3tFMoIBilQQBLabXyHoZ9J3Ik0Vv4n95htUhRQ35ow== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.556.0.tgz#96b4dd4fec67ae62f8c98ae8c2f94e4ed050073a" - integrity sha512-tvIiugNF0/+2wfuImMrpKjXMx4nCnFWQjQvouObny+wrif/PGqqQYrybwxPJDvzbd965bu1I+QuSv85/ug7xsg== - dependencies: - "@aws-sdk/client-sso-oidc" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.535.0", "@aws-sdk/types@^3.222.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" - integrity sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-arn-parser@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.535.0.tgz#046aafff4438caa3740cebec600989b1e840b934" - integrity sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-endpoints@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz#a7fea1d2a5e64623353aaa6ee32dbb86ab9cd3f8" - integrity sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - "@smithy/util-endpoints" "^1.2.0" - tslib "^2.6.2" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz#0200a336fddd47dd6567ce15d01f62be50a315d7" - integrity sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-browser@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz#d67d72e8b933051620f18ddb1c2be225f79f588f" - integrity sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz#f5c26fb6f3f561d3cf35f96f303b1775afad0a5b" - integrity sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.535.0.tgz#dbe66338f64e283951778f7d07a4afd2d7d09bfd" - integrity sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng== - dependencies: - "@smithy/types" "^2.12.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.53" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.53.tgz#d2613ade1dbe72c08a0cfa02ecf17fcfc3cfd081" - integrity sha512-FhrgVni9TNEdOHV+7NHHTvfzHCkejI/1dG6Jj4TlK3vIGEgsgIlFxZzXImhnXf2SBxBMKvye9WF95Sk5RO6riQ== - dependencies: - "@aws-sdk/client-s3" "^3.400.0" - "@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" - -"@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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" - integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader-native@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" - integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== - dependencies: - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" - integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" - integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/core@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" - integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" - integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" - integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" - integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" - integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" - integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" - integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== - dependencies: - "@smithy/eventstream-codec" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" - integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" - integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== - dependencies: - "@smithy/chunked-blob-reader" "^2.2.0" - "@smithy/chunked-blob-reader-native" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/hash-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" - integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" - integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" - integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== - dependencies: - "@smithy/types" "^2.12.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/md5-js@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" - integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" - integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" - integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== - dependencies: - "@smithy/middleware-serde" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/middleware-retry@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" - integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/service-error-classification" "^2.1.5" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" - integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" - integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" - integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" - integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/property-provider@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" - integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" - integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" - integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-uri-escape" "^2.2.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" - integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" - integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== - dependencies: - "@smithy/types" "^2.12.0" - -"@smithy/shared-ini-file-loader@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" - integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz#c30dd4028ae50c607db99459981cce8cdab7a3fd" - integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== - dependencies: - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-uri-escape" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" - integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@smithy/types@^2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" - integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" - integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== - dependencies: - "@smithy/querystring-parser" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-base64@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" - integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== - dependencies: - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" - integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" - integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== - 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-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" - integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" - integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" - integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== - dependencies: - "@smithy/config-resolver" "^2.2.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" - integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" - integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" - integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-retry@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" - integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== - dependencies: - "@smithy/service-error-classification" "^2.1.5" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-stream@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" - integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== - dependencies: - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" - integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" - integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/types" "^2.12.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.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== - 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.31" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd" - integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA== - 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.11.9" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" - integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -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.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - 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.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - 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.12.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.0.tgz#b0c2ce207ae5a3b5125be966e32ffea7c1f2481a" - integrity sha512-zL5NlOTjML239gIvtVJuaSk0N9GQLi1Hom3ZWUszE5lDTQE/IVB62mrPkQ2W1bGcZwVGSLaetQbWNQSvI4rGDQ== - 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.5.0" - -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.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - 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.3.12" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" - integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.6" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.10.2" - -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.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -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== - -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@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - 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.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -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.1: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -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== - -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" - -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.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" - integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== - 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.11.5" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" - integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== - 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== - -semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -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.11.1, 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.3.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -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.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - -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== - -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.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -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.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -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== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -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 1b1874b64aeffd9e6d7201063999ecc852d846a7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 25 Apr 2024 00:01:49 +0200 Subject: [PATCH 0421/1590] New adapters must be in v2 format --- cli/testAdapter.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index 33116dfea4..60ae4d2e2d 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -6,6 +6,17 @@ import { getUniqStartOfTodayTimestamp } from '../helpers/getUniSubgraphVolume'; import runAdapter from '../adapters/utils/runAdapter' import { canGetBlock, getBlock } from '../helpers/getBlock'; import getChainsFromDexAdapter from '../adapters/utils/getChainsFromDexAdapter'; +import { execSync } from 'child_process'; + +function checkIfFileExistsInMasterBranch(filePath) { + const res = execSync(`git ls-tree --name-only -r master`) + + const resString = res.toString() + if (!resString.includes(filePath)) { + console.log("\n\n\nERROR: Use Adapter v2 format for new adapters\n\n\n") + process.exit(1) + } +} // tmp const handleError = (e: Error) => console.error(e) @@ -23,8 +34,11 @@ function getTimestamp30MinutesAgo() { // Get path of module import const adapterType: AdapterType = process.argv[2] as AdapterType +const file = `${adapterType}/${process.argv[3]}` + const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[3]}`); (async () => { + const cleanDayTimestamp = process.argv[4] ? Number(process.argv[4]) : getUniqStartOfTodayTimestamp(new Date()) let endCleanDayTimestamp = cleanDayTimestamp; console.info(`🦙 Running ${process.argv[3].toUpperCase()} adapter 🦙`) @@ -35,9 +49,11 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ let endTimestamp = endCleanDayTimestamp if (adapterVersion === 2) { endTimestamp = (process.argv[4] ? Number(process.argv[4]) : getTimestamp30MinutesAgo()) // 1 day; + } else { + checkIfFileExistsInMasterBranch(file) } - const runAt = adapterVersion === 2 ? endTimestamp : process.argv[4] ? Number(process.argv[4]) : endTimestamp - 1; + const runAt = adapterVersion === 2 ? endTimestamp : process.argv[4] ? Number(process.argv[4]) : endTimestamp - 1; console.info(`${upperCaseFirst(adapterType)} for ${formatTimestampAsDate(String(getUniqStartOfTodayTimestamp(new Date((runAt * 1000)))))}`) console.info(`_______________________________________\n`) From b287630277276f8fea29b255742092f6c9902efb Mon Sep 17 00:00:00 2001 From: stromman Date: Thu, 25 Apr 2024 15:29:52 +0800 Subject: [PATCH 0422/1590] add: bitlayer chain info --- fees/bitlayer/index.ts | 0 helpers/chains.ts | 1 + 2 files changed, 1 insertion(+) create mode 100644 fees/bitlayer/index.ts diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/helpers/chains.ts b/helpers/chains.ts index 31847b332e..d89fff3216 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -146,6 +146,7 @@ export enum CHAIN { SVM = "svm", ASTRZK = "astrzk", LYRA = "lyra", + BITLAYER = "bitlayer", } // Don´t use From 8285899187760f2a6217dd2afb505755fdc65ae8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Ayd=C4=B1nl=C4=B1k?= Date: Thu, 25 Apr 2024 11:18:02 +0300 Subject: [PATCH 0423/1590] fix: match id with defilama-server-id --- users/routers/routerAddresses.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index 113f44e84d..b396fdb147 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -479,7 +479,7 @@ export default ([ } }, { - "id":"2306", + "id":"4372", "name":"Hercules", "addresses":{ "metis":[ From 6bb5bf02bbb03d627961350a7d9c2f61432e0871 Mon Sep 17 00:00:00 2001 From: BitGonzi Date: Thu, 25 Apr 2024 11:06:29 +0200 Subject: [PATCH 0424/1590] Add Helix Markets DEX dailyVolume --- dexs/helix-markets/index.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 dexs/helix-markets/index.ts diff --git a/dexs/helix-markets/index.ts b/dexs/helix-markets/index.ts new file mode 100644 index 0000000000..03a8995011 --- /dev/null +++ b/dexs/helix-markets/index.ts @@ -0,0 +1,28 @@ +import { ChainBlocks, FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import fetchURL from "../../utils/fetchURL" + +const URL = "https://dgw.helixic.io/api/v1/ticker"; +interface IVolume { + quoteVolume: number; +} + +const fetch = async (timestamp: number, _chainBlocks: ChainBlocks, _options: FetchOptions): Promise => { + const quoteVolume: IVolume[] = (await fetchURL(URL)); + const dailyVolume = quoteVolume.reduce((e: number, a: IVolume) => parseFloat(a.quoteVolume) + e, 0); + + return { + dailyVolume: dailyVolume, + timestamp + } +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ICP]: { + fetch: fetch, + start: 1713830400, + } + } +} +export default adapter; From 95d595b9da102b162b6e6dc57e66d30c80b0a833 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 25 Apr 2024 11:10:28 +0200 Subject: [PATCH 0425/1590] test commit --- .github/workflows/test-adapter.yml | 14 +++++++++++--- .github/workflows/ts-check.yml | 7 +++---- cli/testAdapter.ts | 2 +- package.json | 7 +++---- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test-adapter.yml b/.github/workflows/test-adapter.yml index e4252de8cc..1ac11908f6 100644 --- a/.github/workflows/test-adapter.yml +++ b/.github/workflows/test-adapter.yml @@ -13,6 +13,15 @@ jobs: uses: actions/checkout@v2 - name: Run changes files through test script run: | + # Store the current commit hash in a variable + current_commit=$(git rev-parse HEAD) + + # Checkout to master to check if new adapters files are of v2 + git fetch origin master:master + + # Checkout back to the original commit + git checkout $current_commit + RUN_FILES=$( MODIFIED=${{ steps.file_changes.outputs.files_modified}} \ ADDED=${{ steps.file_changes.outputs.files_added}} \ @@ -24,8 +33,7 @@ jobs: exit 0 fi - yarn install --production - yarn upgrade @defillama/sdk + npm ci list=$(echo $RUN_FILES | tr -d '"[]' | tr "," "\n") @@ -33,7 +41,7 @@ jobs: do { IFS='@' read -r -a array <<< "$i" - yarn test ${array[0]} ${array[1]} 2>&1 | tee output.txt + npm run test ${array[0]} ${array[1]} 2>&1 | tee output.txt node ${{ github.workspace }}/.github/workflows/commentResult.js /home/runner/work/dimension-adapters/dimension-adapters/output.txt "${{ github.repository_owner }}" "${{ github.event.repository.name }}" "${{ github.event.number }}" ${i} if grep -q "\-\-\-\- ERROR \-\-\-\-" output.txt; then exit 1; diff --git a/.github/workflows/ts-check.yml b/.github/workflows/ts-check.yml index d91e6701da..1702b75ddc 100644 --- a/.github/workflows/ts-check.yml +++ b/.github/workflows/ts-check.yml @@ -7,13 +7,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - run: yarn run update-submodules - name: Get Node.js uses: actions/setup-node@v1 with: node-version: '16' - - run: yarn + - run: npm ci - name: Checking adapters - run: yarn run ts-check + run: npm run ts-check - name: Checking cli - run: yarn run ts-check-cli \ No newline at end of file + run: npm run ts-check-cli \ No newline at end of file diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index 60ae4d2e2d..1c0c06a30b 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -8,7 +8,7 @@ import { canGetBlock, getBlock } from '../helpers/getBlock'; import getChainsFromDexAdapter from '../adapters/utils/getChainsFromDexAdapter'; import { execSync } from 'child_process'; -function checkIfFileExistsInMasterBranch(filePath) { +function checkIfFileExistsInMasterBranch(filePath: any) { const res = execSync(`git ls-tree --name-only -r master`) const resString = res.toString() diff --git a/package.json b/package.json index b224fae1d1..d8e3955e9d 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,9 @@ "description": "", "main": "index.js", "scripts": { - "update-submodules": "git submodule update --init --recursive --remote --merge", - "test": "yarn run update-submodules && ts-node --transpile-only cli/testAdapter.ts", - "ts-check": "yarn run update-submodules && tsc --project tsconfig.json", - "ts-check-cli": "yarn run update-submodules && tsc --project tsconfig.cli.json", + "test": "ts-node --transpile-only cli/testAdapter.ts", + "ts-check": "tsc --project tsconfig.json", + "ts-check-cli": "tsc --project tsconfig.cli.json", "use-token-labels": "node helpers/useTokenLabels.js", "interactive": "node cli/interactive.js" }, From c2be57bda1ddf018c0bae404fe83d96453696e22 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 25 Apr 2024 11:56:20 +0200 Subject: [PATCH 0426/1590] use v2 adapters --- fees/hercules-v2.ts | 66 +++++++++++++++++++------------------------- fees/hercules-v3.ts | 67 +++++++++++++++++++-------------------------- 2 files changed, 56 insertions(+), 77 deletions(-) diff --git a/fees/hercules-v2.ts b/fees/hercules-v2.ts index 87445553da..c6e4f20b22 100644 --- a/fees/hercules-v2.ts +++ b/fees/hercules-v2.ts @@ -1,15 +1,7 @@ import { Chain } from "@defillama/sdk/build/general"; -import BigNumber from "bignumber.js"; -import request, { gql } from "graphql-request"; -import { Adapter, FetchResultFees } from "../adapters/types"; +import request from "graphql-request"; +import { FetchV2 } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; -import { getTimestampAtStartOfDayUTC } from "../utils/date"; - -interface IPoolData { - date: number; - dailyFeeUSD: string; -} type IURL = { [l: string | Chain]: string; @@ -19,43 +11,41 @@ const endpoints: IURL = { [CHAIN.METIS]: "https://metisapi.0xgraph.xyz/subgraphs/name/amm-subgraph-andromeda/" } -const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { - const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - const dateId = Math.floor(getTimestampAtStartOfDayUTC(todayTimestamp) / 86400) - const graphQuery = gql - ` +const fetch: FetchV2 = async (options) => { + const { api, getStartBlock, getEndBlock, createBalances } = options + const fromBlock = await getStartBlock() + const toBlock = await getEndBlock() + const graphQuery = (block: any) => ` { - uniswapDayData(id: ${dateId}) { + uniswapFactories(block: { number: ${block}}) { id - dailyFeeUSD + totalFeeUSD } } `; - const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).uniswapDayData; - const dailyFeeUSD = graphRes; - const dailyFee = dailyFeeUSD?.dailyFeeUSD ? new BigNumber(dailyFeeUSD.dailyFeeUSD) : undefined - if (dailyFee === undefined) return { timestamp } - return { - timestamp, - dailyFees: dailyFee.toString(), - dailyUserFees: dailyFee.toString(), - dailyRevenue: dailyFee.multipliedBy(0.4).toString(), - dailyProtocolRevenue: dailyFee.multipliedBy(0.05).toString(), - dailyHoldersRevenue: dailyFee.multipliedBy(0.35).toString(), - dailySupplySideRevenue: dailyFee.multipliedBy(0.60).toString(), - }; + const { uniswapFactories: startRes }: any = await request(endpoints[api.chain], graphQuery(fromBlock)) + const { uniswapFactories: endRes }: any = await request(endpoints[api.chain], graphQuery(toBlock)) + + let dailyFees = endRes.reduce((acc: number, val: any) => acc + +val.totalFeeUSD, 0) - startRes.reduce((acc: number, val: any) => acc + +val.totalFeeUSD, 0) + + return { + dailyFees: dailyFees, + dailyUserFees: dailyFees, + dailyRevenue: dailyFees * 0.4, + dailyProtocolRevenue: dailyFees * 0.05, + dailyHoldersRevenue: dailyFees * 0.35, + dailySupplySideRevenue: dailyFees * 0.6, }; -} +}; + +const adapter = { fetch, start: 1685232000, } + -const adapter: Adapter = { +export default { adapter: { - [CHAIN.METIS]: { - fetch: fetch(CHAIN.METIS), - start: 1698103260, - }, + [CHAIN.METIS]: adapter, }, + version: 2, }; -export default adapter; diff --git a/fees/hercules-v3.ts b/fees/hercules-v3.ts index 1488a47429..197ea604a8 100644 --- a/fees/hercules-v3.ts +++ b/fees/hercules-v3.ts @@ -1,16 +1,7 @@ import { Chain } from "@defillama/sdk/build/general"; -import BigNumber from "bignumber.js"; -import request, { gql } from "graphql-request"; -import { Adapter, FetchResultFees } from "../adapters/types"; +import request from "graphql-request"; +import { FetchV2 } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; -import { getTimestampAtStartOfDayUTC } from "../utils/date"; - -interface IPoolData { - id: number; - feesUSD: string; -} - type IURL = { [l: string | Chain]: string; } @@ -19,43 +10,41 @@ const endpoints: IURL = { [CHAIN.METIS]: "https://metisapi.0xgraph.xyz/subgraphs/name/cryptoalgebra/analytics" } -const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { - const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - const dateId = Math.floor(getTimestampAtStartOfDayUTC(todayTimestamp) / 86400) - const graphQuery = gql - ` +const fetch: FetchV2 = async (options) => { + const { api, getStartBlock, getEndBlock, createBalances } = options + const fromBlock = await getStartBlock() + const toBlock = await getEndBlock() + const graphQuery = (block: any) => ` { - algebraDayData(id: ${dateId}) { + factories(block: { number: ${block}}) { id - feesUSD + totalFeesUSD } } `; - const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).algebraDayData; - const dailyFeeUSD = graphRes; - const dailyFee = dailyFeeUSD?.feesUSD ? new BigNumber(dailyFeeUSD.feesUSD) : undefined - if (dailyFee === undefined) return { timestamp } - return { - timestamp, - dailyFees: dailyFee.toString(), - dailyUserFees: dailyFee.toString(), - dailyRevenue: dailyFee.multipliedBy(0.15).toString(), - dailyProtocolRevenue: dailyFee.multipliedBy(0.03).toString(), - dailyHoldersRevenue: dailyFee.multipliedBy(0.12).toString(), - dailySupplySideRevenue: dailyFee.multipliedBy(0.85).toString(), - }; + const { factories: startRes }: any = await request(endpoints[api.chain], graphQuery(fromBlock)) + const { factories: endRes }: any = await request(endpoints[api.chain], graphQuery(toBlock)) + + let dailyFees = endRes.reduce((acc: number, val: any) => acc + +val.totalFeesUSD, 0) - startRes.reduce((acc: number, val: any) => acc + +val.totalFeesUSD, 0) + + return { + dailyFees: dailyFees, + dailyUserFees: dailyFees, + dailyRevenue: dailyFees * 0.15, + dailyProtocolRevenue: dailyFees * 0.03, + dailyHoldersRevenue: dailyFees * 0.12, + dailySupplySideRevenue: dailyFees * 0.85, }; -} +}; + +const adapter = { fetch, start: 1696331700, } + -const adapter: Adapter = { +export default { adapter: { - [CHAIN.METIS]: { - fetch: fetch(CHAIN.METIS), - start: 1696331700, - }, + [CHAIN.METIS]: adapter, }, + version: 2, }; -export default adapter; From 909d37e79d8c9d471ae3348dd735e975653a110d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Apr 2024 11:48:15 +0000 Subject: [PATCH 0427/1590] fix type --- dexs/helix-markets/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/helix-markets/index.ts b/dexs/helix-markets/index.ts index 03a8995011..d6f293a44a 100644 --- a/dexs/helix-markets/index.ts +++ b/dexs/helix-markets/index.ts @@ -1,14 +1,14 @@ import { ChainBlocks, FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import fetchURL from "../../utils/fetchURL" +import { httpGet } from "../../utils/fetchURL" const URL = "https://dgw.helixic.io/api/v1/ticker"; interface IVolume { - quoteVolume: number; + quoteVolume: string; } const fetch = async (timestamp: number, _chainBlocks: ChainBlocks, _options: FetchOptions): Promise => { - const quoteVolume: IVolume[] = (await fetchURL(URL)); + const quoteVolume: IVolume[] = (await httpGet(URL)); const dailyVolume = quoteVolume.reduce((e: number, a: IVolume) => parseFloat(a.quoteVolume) + e, 0); return { From c80636cca0c830b218a7d53e014d86e9dc11b16c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Apr 2024 11:51:28 +0000 Subject: [PATCH 0428/1590] fix adapter v2 --- dexs/helix-markets/index.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 dexs/helix-markets/index.ts diff --git a/dexs/helix-markets/index.ts b/dexs/helix-markets/index.ts new file mode 100644 index 0000000000..b16c62ca5c --- /dev/null +++ b/dexs/helix-markets/index.ts @@ -0,0 +1,27 @@ +import { FetchOptions, FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; + +const URL = "https://dgw.helixic.io/api/v1/ticker"; +interface IVolume { + quoteVolume: string; +} + +const fetch: FetchV2 = async (_: FetchOptions): Promise => { + const quoteVolume: IVolume[] = (await httpGet(URL)); + const dailyVolume = quoteVolume.reduce((e: number, a: IVolume) => parseFloat(a.quoteVolume) + e, 0); + return { + dailyVolume: `${dailyVolume}`, + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ICP]: { + fetch: fetch, + start: 1713830400, + } + } +} +export default adapter; From 73dbb81ad37b8864f3cebd5d303e44cf98a98861 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Apr 2024 11:55:25 +0000 Subject: [PATCH 0429/1590] fix run current --- dexs/helix-markets/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/helix-markets/index.ts b/dexs/helix-markets/index.ts index b16c62ca5c..fdd708d884 100644 --- a/dexs/helix-markets/index.ts +++ b/dexs/helix-markets/index.ts @@ -21,6 +21,7 @@ const adapter: SimpleAdapter = { [CHAIN.ICP]: { fetch: fetch, start: 1713830400, + runAtCurrTime: true, } } } From 91ad7ff78b328b43981ae35a53b27e99171272f4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Apr 2024 11:56:58 +0000 Subject: [PATCH 0430/1590] fix run current --- dexs/helix-markets/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/helix-markets/index.ts b/dexs/helix-markets/index.ts index 745ccd68af..76584efff2 100644 --- a/dexs/helix-markets/index.ts +++ b/dexs/helix-markets/index.ts @@ -24,6 +24,7 @@ const adapter: SimpleAdapter = { [CHAIN.ICP]: { fetch: fetch, start: 1713830400, + runAtCurrTime: true } } } From 73b43b641bcf230312d54e3411ff01f5d6886d9a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Apr 2024 12:00:32 +0000 Subject: [PATCH 0431/1590] delete --- dexs/helix-markets/index.ts | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 dexs/helix-markets/index.ts diff --git a/dexs/helix-markets/index.ts b/dexs/helix-markets/index.ts deleted file mode 100644 index fdd708d884..0000000000 --- a/dexs/helix-markets/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { FetchOptions, FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import { httpGet } from "../../utils/fetchURL"; - -const URL = "https://dgw.helixic.io/api/v1/ticker"; -interface IVolume { - quoteVolume: string; -} - -const fetch: FetchV2 = async (_: FetchOptions): Promise => { - const quoteVolume: IVolume[] = (await httpGet(URL)); - const dailyVolume = quoteVolume.reduce((e: number, a: IVolume) => parseFloat(a.quoteVolume) + e, 0); - return { - dailyVolume: `${dailyVolume}`, - } -} - -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.ICP]: { - fetch: fetch, - start: 1713830400, - runAtCurrTime: true, - } - } -} -export default adapter; From c53d206706d8b4e28777048cf01e41b68138e854 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Apr 2024 13:08:03 +0000 Subject: [PATCH 0432/1590] :wq evert "delete" This reverts commit 73b43b641bcf230312d54e3411ff01f5d6886d9a. --- dexs/helix-markets/index.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 dexs/helix-markets/index.ts diff --git a/dexs/helix-markets/index.ts b/dexs/helix-markets/index.ts new file mode 100644 index 0000000000..fdd708d884 --- /dev/null +++ b/dexs/helix-markets/index.ts @@ -0,0 +1,28 @@ +import { FetchOptions, FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; + +const URL = "https://dgw.helixic.io/api/v1/ticker"; +interface IVolume { + quoteVolume: string; +} + +const fetch: FetchV2 = async (_: FetchOptions): Promise => { + const quoteVolume: IVolume[] = (await httpGet(URL)); + const dailyVolume = quoteVolume.reduce((e: number, a: IVolume) => parseFloat(a.quoteVolume) + e, 0); + return { + dailyVolume: `${dailyVolume}`, + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ICP]: { + fetch: fetch, + start: 1713830400, + runAtCurrTime: true, + } + } +} +export default adapter; From 2331e84a3f61804b22acfc9cbcb7a3d7378cc1b0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Apr 2024 13:21:01 +0000 Subject: [PATCH 0433/1590] fix starttime --- dexs/hercules-v3/index.ts | 2 +- dexs/hercules/index.ts | 2 +- fees/hercules-v2.ts | 3 +-- fees/hercules-v3.ts | 3 +-- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/dexs/hercules-v3/index.ts b/dexs/hercules-v3/index.ts index 793121bdf0..38b6c984d7 100644 --- a/dexs/hercules-v3/index.ts +++ b/dexs/hercules-v3/index.ts @@ -11,5 +11,5 @@ const adapters = univ2Adapter({ totalVolume: "totalVolumeUSD", }); -adapters.adapter.metis.start = 1696331700; +adapters.adapter.metis.start = 1698983690; export default adapters; diff --git a/dexs/hercules/index.ts b/dexs/hercules/index.ts index 5bd3a0a750..79f0cd8e70 100644 --- a/dexs/hercules/index.ts +++ b/dexs/hercules/index.ts @@ -6,5 +6,5 @@ const adapters = univ2Adapter({ [CHAIN.METIS]: "https://metisapi.0xgraph.xyz/subgraphs/name/amm-subgraph-andromeda/" }, {}); -adapters.adapter.metis.start = 1698103260; +adapters.adapter.metis.start = 1710115200; export default adapters; diff --git a/fees/hercules-v2.ts b/fees/hercules-v2.ts index c6e4f20b22..656fbb3aef 100644 --- a/fees/hercules-v2.ts +++ b/fees/hercules-v2.ts @@ -39,7 +39,7 @@ const fetch: FetchV2 = async (options) => { }; }; -const adapter = { fetch, start: 1685232000, } +const adapter = { fetch, start: 1710115200, } export default { @@ -48,4 +48,3 @@ export default { }, version: 2, }; - diff --git a/fees/hercules-v3.ts b/fees/hercules-v3.ts index 197ea604a8..d63af58a92 100644 --- a/fees/hercules-v3.ts +++ b/fees/hercules-v3.ts @@ -38,7 +38,7 @@ const fetch: FetchV2 = async (options) => { }; }; -const adapter = { fetch, start: 1696331700, } +const adapter = { fetch, start: 1698983690, } export default { @@ -47,4 +47,3 @@ export default { }, version: 2, }; - From 9aca7992cf977ed1826b1f11e2b6ee77c3c7df2b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 25 Apr 2024 15:39:48 +0200 Subject: [PATCH 0434/1590] bebop: track optimism --- aggregators/bebop/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/aggregators/bebop/index.ts b/aggregators/bebop/index.ts index 36bd902b3e..ea98ed16a4 100644 --- a/aggregators/bebop/index.ts +++ b/aggregators/bebop/index.ts @@ -116,6 +116,7 @@ const adapter: any = { bsc: { fetch, start: 1685491200, }, blast: { fetch, start: 1685491200, }, era: { fetch, start: 1685491200, }, + optimism: { fetch, start: 1685491200, }, }, }; From ba2e58cb3ec11311c9bc593e705c88e73fa15bc3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Apr 2024 16:06:07 +0000 Subject: [PATCH 0435/1590] fix query flipside --- helpers/flipsidecrypto.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/helpers/flipsidecrypto.ts b/helpers/flipsidecrypto.ts index 63fd2a23ee..9b268debf7 100644 --- a/helpers/flipsidecrypto.ts +++ b/helpers/flipsidecrypto.ts @@ -6,13 +6,18 @@ import { getEnv } from "./env"; const token = {} as IJSON const FLIPSIDE_API_KEYS = getEnv('FLIPSIDE_API_KEY')?.split(',') ?? ["f3b65679-a179-4983-b794-e41cf40103ed"] let API_KEY_INDEX = 0; -const MAX_RETRIES = FLIPSIDE_API_KEYS.length + 3; +const MAX_RETRIES = 20; type IRequest = { [key: string]: Promise; } const query: IRequest = {}; +async function randomDelay() { + const delay = Math.floor(Math.random() * 4) + 1 + return new Promise((resolve) => setTimeout(resolve, delay * 1000)) +} + export async function queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { if (!query[sqlQuery]) { query[sqlQuery] = _queryFlipside(sqlQuery, maxAgeMinutes) @@ -158,6 +163,8 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { }, { withMetadata: true }) bail(new Error('max retries exceeded')) } + await randomDelay() + console.info(`Flipside query ${token[sqlQuery]} is still running`) throw new Error("Still running") }, { From 5be95eb0486f08ef119703d2c38d1e5f4015550a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Apr 2024 16:17:04 +0000 Subject: [PATCH 0436/1590] fix dune query --- fees/banana-gun-trading.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/banana-gun-trading.ts b/fees/banana-gun-trading.ts index 8bfaaf96f1..b0ba6f642c 100644 --- a/fees/banana-gun-trading.ts +++ b/fees/banana-gun-trading.ts @@ -12,7 +12,7 @@ const fethcFeesSolana = async (timestamp: number, _: ChainBlocks, options: Fetch const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); try { const dateStr = new Date(todaysTimestamp * 1000).toISOString().split('T')[0]; - const value: IFees[] = (await queryDune("2685322")); + const value: IFees[] = (await queryDune("3662383")); const dayItem = value.find((item: any) => item.block_date.split(' ')[0] === dateStr); const dailyFees = options.createBalances(); const dailyRevenue = options.createBalances(); From 96ef9b225edd879b8b09fc492d4f9c4f298338c3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Apr 2024 17:25:37 +0000 Subject: [PATCH 0437/1590] add logx --- helpers/flipsidecrypto.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/flipsidecrypto.ts b/helpers/flipsidecrypto.ts index 9b268debf7..6a7ebfef4a 100644 --- a/helpers/flipsidecrypto.ts +++ b/helpers/flipsidecrypto.ts @@ -164,7 +164,7 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { bail(new Error('max retries exceeded')) } await randomDelay() - console.info(`Flipside query ${token[sqlQuery]} is still running`) + console.info(`Flipside query ${token[sqlQuery]} still running... retrying ${attempt}`) throw new Error("Still running") }, { From a018e3083221e64df7c8892843c7f76c57f09096 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Apr 2024 17:27:19 +0000 Subject: [PATCH 0438/1590] add log error --- fees/banana-gun-trading.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/fees/banana-gun-trading.ts b/fees/banana-gun-trading.ts index b0ba6f642c..e88ada51e1 100644 --- a/fees/banana-gun-trading.ts +++ b/fees/banana-gun-trading.ts @@ -25,6 +25,7 @@ const fethcFeesSolana = async (timestamp: number, _: ChainBlocks, options: Fetch timestamp } } catch (error: any) { + console.error('Error fetching fees for Solana', error); return { dailyFees: "0", timestamp From 7b55ea8095f5248619b5e44155f8677652366cec Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 26 Apr 2024 03:07:06 +0000 Subject: [PATCH 0439/1590] fix missing version --- dexs/kyberswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/kyberswap/index.ts b/dexs/kyberswap/index.ts index c32d9bcbd8..439030221b 100644 --- a/dexs/kyberswap/index.ts +++ b/dexs/kyberswap/index.ts @@ -229,7 +229,7 @@ function buildFromEndpoints(endpoints: typeof classicEndpoints, graphs: typeof c const adapter: BreakdownAdapter = { version: 2, breakdown: { - // classic: buildFromEndpoints(classicEndpoints, classicGraphs, DEFAULT_DAILY_VOLUME_FIELD, "dmmDayDatas", false), + classic: buildFromEndpoints(classicEndpoints, classicGraphs, DEFAULT_DAILY_VOLUME_FIELD, "dmmDayDatas", false), elastic: buildFromEndpoints(elasticEndpoints, elasticGraphs, "volumeUSD", "kyberSwapDayDatas", true) } } From 136cc9a28ad2afd6015a2c09fc5c2169819f648f Mon Sep 17 00:00:00 2001 From: sunpuyo Date: Fri, 26 Apr 2024 15:32:53 +0900 Subject: [PATCH 0440/1590] [gambit] add contract addresses for new version v1.6.0 --- dexs/gambit/index.ts | 2 ++ fees/gambit.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/dexs/gambit/index.ts b/dexs/gambit/index.ts index fb0c0f845d..1a39f86106 100644 --- a/dexs/gambit/index.ts +++ b/dexs/gambit/index.ts @@ -30,11 +30,13 @@ const CONTRACT_ADDRESS: IAddress = { "0x50853A14cD14CC6A891BF034A204A15d294AF056", "0x240d75373f9941b8F7FbA660b9ae73dfa655f7Da", // v1.3.4 "0x43c1cc807Dc22bCF7C789eDE4d1B4828C87A06D1", // v1.5.1 + "0x3bEa4Af64689ce3429D312cf205312842C944DeE", // v1.6.0 ], [CHAIN.ARBITRUM]: [ "0x8d85f4615ea5F2Ea8D91C196aaD4C04D8416865C", "0xB88C3A703B3565cb7bfdB1806Ba3728C54dd4b91", // v1.3.1 "0x77233F7F6f11300Fd30B338dA38D96a7bFD5aB86", // v1.5.1 + "0xB4099795021506b67ef974eCb85e10898e2F0D45", // v1.6.0 ], }; diff --git a/fees/gambit.ts b/fees/gambit.ts index fc5b452e0d..f6a4e7db24 100644 --- a/fees/gambit.ts +++ b/fees/gambit.ts @@ -22,11 +22,13 @@ const FEE_ADDRESS = { "0x50853A14cD14CC6A891BF034A204A15d294AF056", "0x240d75373f9941b8F7FbA660b9ae73dfa655f7Da", // v1.3.4 "0x43c1cc807Dc22bCF7C789eDE4d1B4828C87A06D1", // v1.5.1 + "0x3bEa4Af64689ce3429D312cf205312842C944DeE", // v1.6.0 ], [CHAIN.ARBITRUM]: [ "0x8d85f4615ea5F2Ea8D91C196aaD4C04D8416865C", "0xB88C3A703B3565cb7bfdB1806Ba3728C54dd4b91", // v1.3.1 "0x77233F7F6f11300Fd30B338dA38D96a7bFD5aB86", // v1.5.1 + "0xB4099795021506b67ef974eCb85e10898e2F0D45", // v1.6.0 ], }; From 0fa49e9e8377a56a3e106fb811ac2d617bfec82c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 26 Apr 2024 09:42:50 +0000 Subject: [PATCH 0441/1590] add add debug log --- helpers/flipsidecrypto.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/helpers/flipsidecrypto.ts b/helpers/flipsidecrypto.ts index 6a7ebfef4a..2762d01ff1 100644 --- a/helpers/flipsidecrypto.ts +++ b/helpers/flipsidecrypto.ts @@ -68,15 +68,18 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { if(API_KEY_INDEX < nextIndex){ API_KEY_INDEX = nextIndex; } + console.info("flipside increasing API_KEY_INDEX") throw "Increasing API_KEY_INDEX"; } else { const error = new Error(`Payment Required`) bail(error) + console.error("Payment Required") throw error } } if (!e.response) { bail(e) + console.error("flipside not found response error") throw e; } console.log("make query flipside", e.response, e) @@ -85,6 +88,7 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { } if (!token[sqlQuery]) { + console.error("Couldn't get a token from flipsidecrypto") throw new Error("Couldn't get a token from flipsidecrypto") } From 763a326016842fe4fbecc447d335b377ce5243ae Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 26 Apr 2024 12:59:31 +0000 Subject: [PATCH 0442/1590] fix adapter --- dexs/fjord-foundry/index.ts | 13 +++++++------ fees/fjord-foundry/index.ts | 14 +++++++------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/dexs/fjord-foundry/index.ts b/dexs/fjord-foundry/index.ts index 7b6f57bc85..ba770d29c7 100644 --- a/dexs/fjord-foundry/index.ts +++ b/dexs/fjord-foundry/index.ts @@ -1,5 +1,5 @@ -import { BreakdownAdapter, FetchV2 } from "../../adapters/types"; -import { getTimestampAtStartOfPreviousDayUTC } from "../../utils/date"; +import { BreakdownAdapter, FetchOptions } from "../../adapters/types"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; @@ -15,8 +15,9 @@ const v2ChainIDs = { [CHAIN.BSC]: 56, }; -const getV2Data = async (endTimestamp, chainId) => { - const dayTimestamp = getTimestampAtStartOfPreviousDayUTC(endTimestamp) + +const getV2Data = async (endTimestamp: number, chainId: number) => { + const dayTimestamp = getTimestampAtStartOfDayUTC(endTimestamp) const historicalVolume = (await fetchURL(feeEndpoint)) const chainData = historicalVolume.stats.find(cd => cd.chainId === chainId); @@ -30,7 +31,7 @@ const getV2Data = async (endTimestamp, chainId) => { return { totalVolume: `${totalVolume}`, - dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + dailyVolume: dailyVolume ? `${dailyVolume}` : '0', }; }; @@ -40,7 +41,7 @@ const adapter: BreakdownAdapter = { return { ...acc, [chain]: { - fetch: async (ts: number) => await getV2Data(ts, v2ChainIDs[chain]), + fetch: async (_ts: number, _chain: any, { startOfDay }: FetchOptions) => await getV2Data(startOfDay, v2ChainIDs[chain]), start: 1702857600, }, } diff --git a/fees/fjord-foundry/index.ts b/fees/fjord-foundry/index.ts index 474db1df51..62a912db73 100644 --- a/fees/fjord-foundry/index.ts +++ b/fees/fjord-foundry/index.ts @@ -1,5 +1,5 @@ -import { BreakdownAdapter, FetchV2 } from "../../adapters/types"; -import { getTimestampAtStartOfPreviousDayUTC } from "../../utils/date"; +import { BreakdownAdapter, FetchOptions, FetchV2 } from "../../adapters/types"; +import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfPreviousDayUTC } from "../../utils/date"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; @@ -15,8 +15,8 @@ const v2ChainIDs = { [CHAIN.BSC]: 56, }; -const getV2Data = async (endTimestamp, chainId) => { - const dayTimestamp = getTimestampAtStartOfPreviousDayUTC(endTimestamp) +const getV2Data = async (endTimestamp: number, chainId: number) => { + const dayTimestamp = getTimestampAtStartOfDayUTC(endTimestamp) const historicalFees = (await fetchURL(feeEndpoint)) const chainData = historicalFees.stats.find(cd => cd.chainId === chainId); @@ -30,9 +30,9 @@ const getV2Data = async (endTimestamp, chainId) => { return { totalFees: `${totalFee}`, - dailyFees: dailyFee ? `${dailyFee}` : undefined, + dailyFees: dailyFee ? `${dailyFee}` : '0', totalRevenue: `${totalFee}`, - dailyRevenue: dailyFee ? `${dailyFee}` : undefined, + dailyRevenue: dailyFee ? `${dailyFee}` : '0', }; }; @@ -47,7 +47,7 @@ const adapter: BreakdownAdapter = { return { ...acc, [chain]: { - fetch: async (ts: number) => await getV2Data(ts, v2ChainIDs[chain]), + fetch: async (_ts: number, _chain: any, { startOfDay }: FetchOptions) => await getV2Data(startOfDay, v2ChainIDs[chain]), start: 1702857600, meta: { methodology, From 0129ad06232306a0ebf5bbab11519f1455a7539d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 26 Apr 2024 15:46:22 +0000 Subject: [PATCH 0443/1590] move unidex --- aggregators/unidex/index.ts | 53 ------------------------ dexs/unidex/index.ts | 2 + dexs/unidex/unidex-dexs-agg/index.ts | 62 ++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 53 deletions(-) delete mode 100644 aggregators/unidex/index.ts create mode 100644 dexs/unidex/unidex-dexs-agg/index.ts diff --git a/aggregators/unidex/index.ts b/aggregators/unidex/index.ts deleted file mode 100644 index ec2bef8a48..0000000000 --- a/aggregators/unidex/index.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { FetchResult } from "../../adapters/types"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import { CHAIN } from "../../helpers/chains"; -import { httpGet } from "../../utils/fetchURL"; - -const chainsMap: Record = { - ETHEREUM: "ethereum", - ARBITRUM: "arbitrum", - POLYGON: "polygon", - BNB: "bsc", - OPTIMISM: "optimism", - BASE: "base", - FANTOM: "fantom", - METIS: "metis", - GNOSIS: "gnosis", - [CHAIN.ERA]: "zksync", - AVALANCHE: "avax", -}; - -const fetch = - (chain: string) => - async (_: number): Promise => { - const unixTimestamp = getUniqStartOfTodayTimestamp(); - - const response = await httpGet(`https://unidexswaps.metabaseapp.com/api/public/dashboard/f0dd81ef-7bc7-47b5-9ac4-281c7cd71bdc/dashcard/11/card/12?parameters=%5B%5D`) - - const rows = response.data.rows; - const chainData = rows.find( - (row: any) => row[1].toLowerCase() === chain - ); - - return { - dailyVolume: chainData ? chainData[2].toString() : "0", - timestamp: unixTimestamp, - }; - }; - -const adapter: any = { - adapter: { - ...Object.values(chainsMap).reduce((acc, chain) => { - return { - ...acc, - [(chainsMap as any)[chain] || chain]: { - fetch: fetch(chain), - runAtCurrTime: true, - start: 1704348000, - }, - }; - }, {}), - }, -}; - -export default adapter; diff --git a/dexs/unidex/index.ts b/dexs/unidex/index.ts index f1d8766a3b..6849460ae8 100644 --- a/dexs/unidex/index.ts +++ b/dexs/unidex/index.ts @@ -4,6 +4,7 @@ import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; import { adapteraggderivative } from './unidex-agg-perp/index' +import { adapter_dexs_agg } from './unidex-dexs-agg/index' type TChainIDs = { [key in Chain]?: number; @@ -121,6 +122,7 @@ const adapterbreakdown: BreakdownAdapter = { breakdown: { "unidex": adapter["adapter"], "unidex-agg-derivative": adapteraggderivative["adapter"], + "unidex-dexs-agg": adapter_dexs_agg["adapter"], } } export default adapterbreakdown; diff --git a/dexs/unidex/unidex-dexs-agg/index.ts b/dexs/unidex/unidex-dexs-agg/index.ts new file mode 100644 index 0000000000..7a81f1432d --- /dev/null +++ b/dexs/unidex/unidex-dexs-agg/index.ts @@ -0,0 +1,62 @@ +import { FetchResult } from "../../../adapters/types"; +import { getUniqStartOfTodayTimestamp } from "../../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../../helpers/chains"; +import { httpGet } from "../../../utils/fetchURL"; + +const chainsMap: Record = { + ETHEREUM: "ethereum", + ARBITRUM: "arbitrum", + POLYGON: "polygon", + BNB: "bsc", + OPTIMISM: "optimism", + BASE: "base", + FANTOM: "fantom", + METIS: "metis", + GNOSIS: "gnosis", + [CHAIN.ERA]: "zksync", + AVALANCHE: "avax", +}; + +const fetch = + (chain: string) => + async (timestamp: number): Promise => { + try { + const unixTimestamp = getUniqStartOfTodayTimestamp(); + + const response = await httpGet(`https://unidexswaps.metabaseapp.com/api/public/dashboard/f0dd81ef-7bc7-47b5-9ac4-281c7cd71bdc/dashcard/11/card/12?parameters=%5B%5D`) + + const rows = response.data.rows; + const chainData = rows.find( + (row: any) => row[1].toLowerCase() === chain + ); + + return { + dailyVolume: chainData ? chainData[2]?.toString() : "0", + timestamp: unixTimestamp, + }; + } catch (e: any) { + return { + dailyVolume: "0", + timestamp: timestamp, + } + } + }; + +const adapter_dexs_agg: any = { + adapter: { + ...Object.values(chainsMap).reduce((acc, chain) => { + return { + ...acc, + [(chainsMap as any)[chain] || chain]: { + fetch: fetch(chain), + runAtCurrTime: true, + start: 1704348000, + }, + }; + }, {}), + }, +}; + +export { + adapter_dexs_agg +} From 04d7b0da1f164954a618f5004ef46bd5a3ff339c Mon Sep 17 00:00:00 2001 From: Khang NT Date: Sat, 27 Apr 2024 15:08:49 +0700 Subject: [PATCH 0444/1590] [zklite] Add totalVolume --- dexs/zklite/index.ts | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/dexs/zklite/index.ts b/dexs/zklite/index.ts index 59658724e6..9f840401c8 100644 --- a/dexs/zklite/index.ts +++ b/dexs/zklite/index.ts @@ -6,6 +6,8 @@ import { CHAIN } from "../../helpers/chains"; type TMarket = { [s: string]: { baseVolume: number; + usdVolume24h: number; + usdVolumeAll: number; } } @@ -22,15 +24,23 @@ const fetch = async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) const markets: TMarket = (await fetchURL('https://api.zklite.io/api/v1/markets')); const marketInfos: TMarketInfo = (await fetchURL('https://api.zklite.io/api/v1/marketinfos?chain_id=1&market=' + Object.keys(markets).join(','))); - const amountUSD: number[] = Object.keys(markets).map(market => { + let dailyVolume = 0 + let totalVolume = 0 + Object.keys(markets).forEach(market => { + const { baseVolume, usdVolume24h, usdVolumeAll } = markets[market] + if (usdVolume24h) { + dailyVolume += usdVolume24h; + totalVolume += usdVolumeAll; + return; + } + const info = marketInfos[market] - const { baseVolume } = markets[market] - if (!info) return 0; - return baseVolume * info.baseAsset.usdPrice; + if (!info) return; + dailyVolume += baseVolume * info.baseAsset.usdPrice; }) - const dailyVolume = amountUSD.reduce((a: number, b: number) => a+b, 0) return { - dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + dailyVolume, + totalVolume, timestamp: dayTimestamp, }; }; From 6429cfdc3adca1b2a5368ea8d1c40cce5f836e34 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 27 Apr 2024 09:36:03 +0000 Subject: [PATCH 0445/1590] add log debug key --- helpers/flipsidecrypto.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/flipsidecrypto.ts b/helpers/flipsidecrypto.ts index 2762d01ff1..cbe0f5c44e 100644 --- a/helpers/flipsidecrypto.ts +++ b/helpers/flipsidecrypto.ts @@ -68,7 +68,7 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { if(API_KEY_INDEX < nextIndex){ API_KEY_INDEX = nextIndex; } - console.info("flipside increasing API_KEY_INDEX") + console.info("flipside increasing API_KEY_INDEX to -> ", FLIPSIDE_API_KEYS[API_KEY_INDEX]) throw "Increasing API_KEY_INDEX"; } else { const error = new Error(`Payment Required`) From 2bcaab7779376f994e8e69731c9f82b3a80d3fea Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 27 Apr 2024 12:44:51 +0000 Subject: [PATCH 0446/1590] fix adapter quert timestap --- fees/yologames/index.ts | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/fees/yologames/index.ts b/fees/yologames/index.ts index f4623caa5c..8c2a1ca439 100644 --- a/fees/yologames/index.ts +++ b/fees/yologames/index.ts @@ -2,6 +2,7 @@ import { ETHER_ADDRESS } from "@defillama/sdk/build/general"; import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import fetchURL from "../../utils/fetchURL"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const nextDayTimestamp = (timestamp: number) => timestamp + 86_400_000; @@ -9,21 +10,19 @@ const fetchDailyStats = async ( timestampSeconds: number ): Promise<{ feesETH: number }> => { const timestampMs = timestampSeconds * 1000; - const url = `https://stats.yologames.io/stats?from=${timestampMs}&to=${nextDayTimestamp( - timestampMs - )}`; - return fetchURL(url) - .then((res) => { - return { feesETH: Number(res.feesETH) }; - }) - .catch(() => { - return {feesETH: 0 }; - }); + const from = timestampMs; + const to = nextDayTimestamp(timestampMs); + const url = `https://stats.yologames.io/stats?from=${from}&to=${to}`; + const response = await fetchURL(url); + return { + feesETH: response.feesETH + }; }; const fetch: any = async (timestampSeconds: number, _: any, options: FetchOptions) => { const dailyFees = options.createBalances(); - const statsApiResponse = await fetchDailyStats(timestampSeconds); + const today = getTimestampAtStartOfDayUTC(options.startOfDay); + const statsApiResponse = await fetchDailyStats(today); dailyFees.add(ETHER_ADDRESS, statsApiResponse.feesETH * 1e18); return { timestamp: timestampSeconds, From c51f33341f3f3ebf38ae0746d05045dd516cfb0b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 28 Apr 2024 16:16:33 +0000 Subject: [PATCH 0447/1590] update config --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9ef953c2e2..5f11fbacc1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.53", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.53.tgz", - "integrity": "sha512-FhrgVni9TNEdOHV+7NHHTvfzHCkejI/1dG6Jj4TlK3vIGEgsgIlFxZzXImhnXf2SBxBMKvye9WF95Sk5RO6riQ==", + "version": "5.0.54", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.54.tgz", + "integrity": "sha512-0akwrfkgtD8/Fk+vHM3N8nMUBW+vdndc8GfQXU40VQrEXnDm24tmlOZwnfmf0Cb+PL2ts24ll00lLR5HgdP5Gw==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@supercharge/promise-pool": "^2.1.0", From 97935c801658c52e1fb8ef0d1b2023b91e4255f7 Mon Sep 17 00:00:00 2001 From: babash Date: Mon, 29 Apr 2024 07:45:24 +0100 Subject: [PATCH 0448/1590] add v1 data --- dexs/fjord-foundry/index.ts | 34 +++++++++++++++++++++++++++++++ fees/fjord-foundry/index.ts | 40 +++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/dexs/fjord-foundry/index.ts b/dexs/fjord-foundry/index.ts index ba770d29c7..ba984fc71a 100644 --- a/dexs/fjord-foundry/index.ts +++ b/dexs/fjord-foundry/index.ts @@ -4,6 +4,7 @@ import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; const feeEndpoint = "https://fjord-api.vercel.app/api/daily-stats?version=2"; +const feeEndpointV1 = "https://fjord-api.vercel.app/api/daily-stats?version=1"; const v2ChainIDs = { [CHAIN.ETHEREUM]: 1, @@ -15,6 +16,11 @@ const v2ChainIDs = { [CHAIN.BSC]: 56, }; +const v1ChainIDs = { + [CHAIN.ETHEREUM]: 1, + [CHAIN.POLYGON]: 137, + [CHAIN.ARBITRUM]: 42161, +}; const getV2Data = async (endTimestamp: number, chainId: number) => { const dayTimestamp = getTimestampAtStartOfDayUTC(endTimestamp) @@ -35,6 +41,25 @@ const getV2Data = async (endTimestamp: number, chainId: number) => { }; }; +const getV1Data = async (endTimestamp: number, chainId: number) => { + const dayTimestamp = getTimestampAtStartOfDayUTC(endTimestamp) + const historicalVolume = (await fetchURL(feeEndpointV1)) + + const chainData = historicalVolume.stats.find(cd => cd.chainId === chainId); + + const totalVolume = chainData.stats + .filter(item => item.timestamp <= dayTimestamp) + .reduce((acc, { volume }) => acc + volume, 0) + + const dailyVolume = chainData.stats + .find(dayItem => dayItem.timestamp === dayTimestamp)?.volume + + return { + totalVolume: `${totalVolume}`, + dailyVolume: dailyVolume ? `${dailyVolume}` : '0', + }; +}; + const adapter: BreakdownAdapter = { breakdown: { v2: Object.keys(v2ChainIDs).reduce((acc, chain) => { @@ -46,6 +71,15 @@ const adapter: BreakdownAdapter = { }, } }, {}), + v1: Object.keys(v1ChainIDs).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: async (_ts: number, _chain: any, { startOfDay }: FetchOptions) => await getV1Data(startOfDay, v1ChainIDs[chain]), + start: 1631836800, + }, + } + }, {}), } } diff --git a/fees/fjord-foundry/index.ts b/fees/fjord-foundry/index.ts index 62a912db73..50a4c90113 100644 --- a/fees/fjord-foundry/index.ts +++ b/fees/fjord-foundry/index.ts @@ -4,6 +4,7 @@ import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; const feeEndpoint = "https://fjord-api.vercel.app/api/daily-stats?version=2"; +const feeEndpointV1 = "https://fjord-api.vercel.app/api/daily-stats?version=1"; const v2ChainIDs = { [CHAIN.ETHEREUM]: 1, @@ -15,6 +16,12 @@ const v2ChainIDs = { [CHAIN.BSC]: 56, }; +const v1ChainIDs = { + [CHAIN.ETHEREUM]: 1, + [CHAIN.POLYGON]: 137, + [CHAIN.ARBITRUM]: 42161, +}; + const getV2Data = async (endTimestamp: number, chainId: number) => { const dayTimestamp = getTimestampAtStartOfDayUTC(endTimestamp) const historicalFees = (await fetchURL(feeEndpoint)) @@ -36,6 +43,27 @@ const getV2Data = async (endTimestamp: number, chainId: number) => { }; }; +const getV1Data = async (endTimestamp: number, chainId: number) => { + const dayTimestamp = getTimestampAtStartOfDayUTC(endTimestamp) + const historicalFees = (await fetchURL(feeEndpointV1)) + + const chainData = historicalFees.stats.find(cd => cd.chainId === chainId); + + const totalFee = chainData.stats + .filter(item => item.timestamp <= dayTimestamp) + .reduce((acc, { fees }) => acc + fees, 0) + + const dailyFee = chainData.stats + .find(dayItem => dayItem.timestamp === dayTimestamp)?.fees + + return { + totalFees: `${totalFee}`, + dailyFees: dailyFee ? `${dailyFee}` : '0', + totalRevenue: `${totalFee}`, + dailyRevenue: dailyFee ? `${dailyFee}` : '0', + }; +}; + const methodology = { Fees: "Fees collected from user trading fees", Revenue: "Revenue is 100% fee of each swap which goes to treasury", @@ -55,6 +83,18 @@ const adapter: BreakdownAdapter = { }, } }, {}), + v1: Object.keys(v1ChainIDs).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: async (_ts: number, _chain: any, { startOfDay }: FetchOptions) => await getV1Data(startOfDay, v1ChainIDs[chain]), + start: 1631836800, + meta: { + methodology, + }, + }, + } + }, {}), } } From 6e74b3c860f626ddd6d5cd9195da8c83f3184094 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 29 Apr 2024 15:25:23 +0000 Subject: [PATCH 0449/1590] add glowswap --- dexs/glowswap/index.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 dexs/glowswap/index.ts diff --git a/dexs/glowswap/index.ts b/dexs/glowswap/index.ts new file mode 100644 index 0000000000..8e978fbcc8 --- /dev/null +++ b/dexs/glowswap/index.ts @@ -0,0 +1,23 @@ +import { SimpleAdapter } from "../../adapters/types" +import { CHAIN } from "../../helpers/chains" +import { httpGet } from "../../utils/fetchURL" + +const fetch = async () => { + const url = "https://api.glowswap.io/v1/analytics" + const response = await httpGet(url) + const dailyVolume = response.data.volUSD.day; + return { + dailyVolume + } +} +const adapter: SimpleAdapter = { + version: 2, + adapter: { + bsquared: { + fetch, + start: 0, + runAtCurrTime: true, + } + } +} +export default adapter From 10e1336392612b09c15b5f0d43a44724796d9a7f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 29 Apr 2024 15:28:09 +0000 Subject: [PATCH 0450/1590] update --- dexs/glowswap/index.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dexs/glowswap/index.ts b/dexs/glowswap/index.ts index 8e978fbcc8..0b00555f69 100644 --- a/dexs/glowswap/index.ts +++ b/dexs/glowswap/index.ts @@ -1,17 +1,16 @@ import { SimpleAdapter } from "../../adapters/types" -import { CHAIN } from "../../helpers/chains" import { httpGet } from "../../utils/fetchURL" -const fetch = async () => { +const fetch = async (timestamp: number) => { const url = "https://api.glowswap.io/v1/analytics" const response = await httpGet(url) const dailyVolume = response.data.volUSD.day; return { - dailyVolume + dailyVolume, + timestamp } } const adapter: SimpleAdapter = { - version: 2, adapter: { bsquared: { fetch, From fd3912a94d461248744487cec42d550a2fa0986b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 29 Apr 2024 15:37:54 +0000 Subject: [PATCH 0451/1590] fix version 2 --- dexs/glowswap/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/glowswap/index.ts b/dexs/glowswap/index.ts index 0b00555f69..f8897221cc 100644 --- a/dexs/glowswap/index.ts +++ b/dexs/glowswap/index.ts @@ -1,16 +1,16 @@ import { SimpleAdapter } from "../../adapters/types" import { httpGet } from "../../utils/fetchURL" -const fetch = async (timestamp: number) => { +const fetch = async () => { const url = "https://api.glowswap.io/v1/analytics" const response = await httpGet(url) const dailyVolume = response.data.volUSD.day; return { dailyVolume, - timestamp } } const adapter: SimpleAdapter = { + version: 2, adapter: { bsquared: { fetch, From b790c3e2eeba18a25d903fd456deca106c7cb888 Mon Sep 17 00:00:00 2001 From: Rozengarden Date: Mon, 29 Apr 2024 17:59:20 +0200 Subject: [PATCH 0452/1590] add fees for aave on metis, gnosis and BNB + commented out V1 as subgraph is unresponsive + left few comment to help the next one working on this --- fees/aave/index.ts | 53 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/fees/aave/index.ts b/fees/aave/index.ts index 8bf5c26f88..dd39184eb8 100644 --- a/fees/aave/index.ts +++ b/fees/aave/index.ts @@ -7,6 +7,8 @@ import { getTimestampAtStartOfPreviousDayUTC, getTimestampAtStartOfDayUTC, getTi import { V1Reserve, V2Reserve, V3Reserve } from "./types" import { Chain } from "@defillama/sdk/build/general"; +//POOL_ADDRESSES_PROVIDER available in https://github.com/bgd-labs/aave-address-book +//remember to lowercase const poolIDs = { V1: '0x24a42fd28c976a61df5d00d0599c34c4f90748c8', V2: '0xb53c1a33016b2dc2ff3653530bff1848a515c8c5', @@ -15,6 +17,9 @@ const poolIDs = { V2_AVALANCHE: '0xb6a86025f0fe1862b372cb0ca18ce3ede02a318f', V3: '0xa97684ead0e402dc232d5a977953df7ecbab3cdb', V3_ETH: '0x2f39d218133afab8f2b819b1066c7e434ad94e9e', + V3_BNB: '0xff75b6da14ffbbfd355daf7a2731456b3562ba6d', + V3_GNOSIS: '0x36616cf17557639614c1cddb356b1b83fc0b2132', + V3_METIS: '0xb9fabd7500b2c6781c35dd48d54f81fc2299d7af', } type THeader = { [s: string]: string; @@ -37,6 +42,7 @@ const v2Endpoints = { [POLYGON]: "https://api.thegraph.com/subgraphs/name/aave/aave-v2-matic" }; +//V3 endpoints avilable here: 0xb9fabd7500b2c6781c35dd48d54f81fc2299d7af const v3Endpoints = { [POLYGON]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-polygon', [AVAX]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-avalanche', @@ -45,6 +51,9 @@ const v3Endpoints = { [FANTOM]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-fantom', [HARMONY]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-harmony', [CHAIN.ETHEREUM]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3', + [CHAIN.BSC]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-bnb', + [CHAIN.XDAI]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-gnosis', + [CHAIN.METIS]: 'https://andromeda.thegraph.metis.io/subgraphs/name/aave/protocol-v3-metis', } @@ -297,9 +306,26 @@ const v2Graphs = (graphUrls: ChainEndpoints) => { const v3Reserves = async (graphUrls: ChainEndpoints, chain: string, timestamp: number) => { + let poolid; + if (chain === CHAIN.ETHEREUM) { + poolid = poolIDs.V3_ETH; + } + else if (chain === CHAIN.BSC) { + poolid = poolIDs.V3_BNB; + } + else if (chain === CHAIN.XDAI) { + poolid = poolIDs.V3_GNOSIS; + } + else if (chain === CHAIN.METIS) { + poolid = poolIDs.V3_METIS; + } + else { + poolid= poolIDs.V3; + } + const graphQuery = `{ - reserves(where: { pool: "${chain === CHAIN.ETHEREUM ? poolIDs.V3_ETH : poolIDs.V3}" }) { + reserves(where: { pool: "${poolid}" }) { id paramsHistory( where: { timestamp_lte: ${timestamp}, timestamp_gte: ${timestamp - ONE_DAY} }, @@ -403,12 +429,13 @@ const v3Graphs = (graphUrls: ChainEndpoints) => { const adapter: Adapter = { breakdown: { - // v1: { - // [ETHEREUM]: { - // fetch: v1Graphs(v1Endpoints)(ETHEREUM), - // start: 1578459600 - // }, - // }, +//v1 subgraph no longer responding +// v1: { +// [ETHEREUM]: { +// fetch: v1Graphs(v1Endpoints)(ETHEREUM), +// start: 1578459600 +// }, +// }, v2: { [AVAX]: { fetch: v2Graphs(v2Endpoints)(AVAX), @@ -452,6 +479,18 @@ const adapter: Adapter = { fetch: v3Graphs(v3Endpoints)(CHAIN.ETHEREUM), start: 1647230400 }, + [CHAIN.BSC]: { + fetch: v3Graphs(v3Endpoints)(CHAIN.BSC), + start: 1700222400 + }, + [CHAIN.XDAI]: { + fetch: v3Graphs(v3Endpoints)(CHAIN.XDAI), + start: 1696420800 + }, + [CHAIN.METIS]: { + fetch: v3Graphs(v3Endpoints)(CHAIN.METIS), + start: 1682164800 + }, } } } From 29ef76028bfb692b52886868e726bb12c23009a3 Mon Sep 17 00:00:00 2001 From: Rozengarden Date: Mon, 29 Apr 2024 18:47:22 +0200 Subject: [PATCH 0453/1590] add base and bsc + new graph for metis --- fees/aave/index.ts | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/fees/aave/index.ts b/fees/aave/index.ts index dd39184eb8..0e5792dd85 100644 --- a/fees/aave/index.ts +++ b/fees/aave/index.ts @@ -15,11 +15,13 @@ const poolIDs = { V2_AMM: '0xacc030ef66f9dfeae9cbb0cd1b25654b82cfa8d5', V2_POLYGON: '0xd05e3e715d945b59290df0ae8ef85c1bdb684744', V2_AVALANCHE: '0xb6a86025f0fe1862b372cb0ca18ce3ede02a318f', - V3: '0xa97684ead0e402dc232d5a977953df7ecbab3cdb', + V3: '0xa97684ead0e402dc232d5a977953df7ecbab3cdb', // arbitrum, Optimism, fantom, harmony, polygon, avalanche V3_ETH: '0x2f39d218133afab8f2b819b1066c7e434ad94e9e', V3_BNB: '0xff75b6da14ffbbfd355daf7a2731456b3562ba6d', V3_GNOSIS: '0x36616cf17557639614c1cddb356b1b83fc0b2132', V3_METIS: '0xb9fabd7500b2c6781c35dd48d54f81fc2299d7af', + V3_BASE: '0xe20fcbdbffc4dd138ce8b2e6fbb6cb49777ad64d', + V3_SCROLL: '0x69850d0b276776781c063771b161bd8894bcdd04', } type THeader = { [s: string]: string; @@ -42,7 +44,7 @@ const v2Endpoints = { [POLYGON]: "https://api.thegraph.com/subgraphs/name/aave/aave-v2-matic" }; -//V3 endpoints avilable here: 0xb9fabd7500b2c6781c35dd48d54f81fc2299d7af +//V3 endpoints avilable here: https://github.com/aave/protocol-subgraphs const v3Endpoints = { [POLYGON]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-polygon', [AVAX]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-avalanche', @@ -53,7 +55,9 @@ const v3Endpoints = { [CHAIN.ETHEREUM]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3', [CHAIN.BSC]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-bnb', [CHAIN.XDAI]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-gnosis', - [CHAIN.METIS]: 'https://andromeda.thegraph.metis.io/subgraphs/name/aave/protocol-v3-metis', + [CHAIN.METIS]: 'https://metisapi.0xgraph.xyz/subgraphs/name/aave/protocol-v3-metis', + [CHAIN.BASE]: 'https://api.goldsky.com/api/public/project_clk74pd7lueg738tw9sjh79d6/subgraphs/aave-v3-base/1.0.0/gn', + [CHAIN.SCROLL]: 'https://api.goldsky.com/api/public/project_clk74pd7lueg738tw9sjh79d6/subgraphs/aave-v3-scroll/1.0.0/gn', } @@ -319,6 +323,12 @@ const v3Reserves = async (graphUrls: ChainEndpoints, chain: string, timestamp: n else if (chain === CHAIN.METIS) { poolid = poolIDs.V3_METIS; } + else if (chain === CHAIN.BASE) { + poolid = poolIDs.V3_BASE; + } + else if (chain === CHAIN.SCROLL) { + poolid = poolIDs.V3_SCROLL; + } else { poolid= poolIDs.V3; } @@ -491,6 +501,14 @@ const adapter: Adapter = { fetch: v3Graphs(v3Endpoints)(CHAIN.METIS), start: 1682164800 }, + [CHAIN.BASE]: { + fetch: v3Graphs(v3Endpoints)(CHAIN.BASE), + start: 1691496000 + }, + [CHAIN.SCROLL]: { + fetch: v3Graphs(v3Endpoints)(CHAIN.SCROLL), + start: 1705741200 + }, } } } From 5fe53eeeedcb37bddc6e1f4c4a5d2f64074d5fec Mon Sep 17 00:00:00 2001 From: LpcAries <291482574@qq.com> Date: Tue, 30 Apr 2024 10:31:23 +0800 Subject: [PATCH 0454/1590] add merlinSwap adapter --- dexs/merlinswap/index.ts | 73 ++++++++++++++++++++++++++++++++++++++++ helpers/chains.ts | 3 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 dexs/merlinswap/index.ts diff --git a/dexs/merlinswap/index.ts b/dexs/merlinswap/index.ts new file mode 100644 index 0000000000..db8307752c --- /dev/null +++ b/dexs/merlinswap/index.ts @@ -0,0 +1,73 @@ +import fetchURL from "../../utils/fetchURL" +import { Chain } from "@defillama/sdk/build/general"; +import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import customBackfill from "../../helpers/customBackfill"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + + +const historicalVolumeEndpoint = (chain_id: number, page: number) => `https://api-dass.izumi.finance/api/v1/izi_swap/summary_record/?chain_id=${chain_id}&type=4&page_size=100000&page=${page}` + +interface IVolumeall { + volDay: number; + chainId: number; + timestamp: number; +} +type TChains = { + [k: Chain | string]: number; +}; +type TAdapter = { + [key:string]: any; +}; + +const chains: TChains = { + [CHAIN.MERLIN]: 4200, +}; + +const fetch = async (options: FetchOptions): Promise => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) + let isSuccess = true; + let page = 1; + const historical: IVolumeall[] = []; + while (isSuccess) { + const response = (await fetchURL(historicalVolumeEndpoint(chains[options.chain], page))); + if (response.is_success){ + Array.prototype.push.apply(historical, response.data); + page += 1; + } else { + isSuccess = false; + }; + }; + const historicalVolume = historical.filter(e => e.chainId === chains[options.chain]); + const totalVolume = historicalVolume + .filter(volItem => (new Date(volItem.timestamp).getTime()) <= dayTimestamp) + .reduce((acc, { volDay }) => acc + Number(volDay), 0) + + const dailyVolume = historicalVolume + .find(dayItem => (new Date(dayItem.timestamp).getTime()) === dayTimestamp)?.volDay + + return { + totalVolume: `${totalVolume}`, + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + timestamp: dayTimestamp, + }; +} + +const adapters: TAdapter = {}; +for (const chain in chains) { + let startTime = 1706946000; + if (chains.hasOwnProperty(chain)) { + adapters[chain] = { + fetch: fetch, + start: startTime, + customBackfill: customBackfill(chain, () => fetch) + }; + }; +}; + +const adapter: SimpleAdapter = { + adapter: adapters, + version: 2, +}; + +export default adapter; diff --git a/helpers/chains.ts b/helpers/chains.ts index ac079e4e53..c626ca82b1 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -146,7 +146,8 @@ export enum CHAIN { SVM = "svm", ASTRZK = "astrzk", LYRA = "lyra", - XLAYER = "xlayer" + XLAYER = "xlayer", + MERLIN = "merlin" } // Don´t use From 68294006da0992378bacadabb744c66ef280c503 Mon Sep 17 00:00:00 2001 From: JoscelynFarr Date: Tue, 30 Apr 2024 10:31:55 +0800 Subject: [PATCH 0455/1590] update jojo --- dexs/jojo/index.ts | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/dexs/jojo/index.ts b/dexs/jojo/index.ts index 37ba47ba36..0984fa8c60 100644 --- a/dexs/jojo/index.ts +++ b/dexs/jojo/index.ts @@ -2,11 +2,29 @@ import fetchURL from "../../utils/fetchURL" import { SimpleAdapter, Fetch } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -const historicalVolumeEndpointZk = (symbol: string, chain: string) => `https://api.` + chain +`-mainnet.jojo.exchange/v1/platform/tradeVolume?marketId=${symbol}` +const historicalVolumeEndpointZk = (symbol: string, chain: string) => `https://api.` + chain + `-mainnet.jojo.exchange/v1/platform/tradeVolume?marketId=${symbol}` const coins = { 'ethusdc': 'coingecko:ethereum', 'btcusdc': 'coingecko:bitcoin', - 'solusdc': 'coingecko:solana' + 'solusdc': 'coingecko:solana', + 'wifusdc': 'coingecko:wif', + 'enausdc': 'coingecko:ena', + 'ckbusdc': 'coingecko:ckb', + 'bomeusdc': 'coingecko:bome', + 'wusdc': 'coingecko:w', + 'ethfiusdc': 'coingecko:ethfi', + 'ondousdc': 'coingecko:ondo', + 'dogeusdc': 'coingecko:doge', + 'memeusdc': 'coingecko:meme', + 'ordiusdc': 'coingecko:ordi', + 'wldusdc': 'coingecko:wld', + 'agixusdc': 'coingecko:agix', + 'tiausdc': 'coingecko:tia', + 'rndrusdc': 'coingecko:rndr', + 'altusdc': 'coingecko:alt', + 'xaiusdc': 'coingecko:xai', + 'linkusdc': 'coingecko:link' + } interface IVolumeall { @@ -20,8 +38,8 @@ const getVolume = async (timestamp: number, chain: string) => { const historical = (await Promise.all(Object.keys(coins).map((coins: string) => fetchURL(historicalVolumeEndpointZk(coins, chain))))); - const historicalVolume = historical.map((item => item.dailyVolume)) - const historicalUSD = historicalVolume.map((a: any, index: number) => a.map((e: any) => { return { timestamp: e.t / 1000, volume: e.v, id: Object.values(coins)[index]} })).flat() + const historicalVolume = historical.map((item => item.dailyVolume)) + const historicalUSD = historicalVolume.map((a: any, index: number) => a.map((e: any) => { return { timestamp: e.t / 1000, volume: e.v, id: Object.values(coins)[index] } })).flat() const historicalUSD2 = historicalUSD.map((e: IVolumeall) => { return { ...e, From 6d4e16d74bc6491a45af9f3749583ea71df1a468 Mon Sep 17 00:00:00 2001 From: stromman Date: Tue, 30 Apr 2024 20:16:34 +0800 Subject: [PATCH 0456/1590] add api info --- fees/bitlayer/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts index e69de29bb2..26d6989735 100644 --- a/fees/bitlayer/index.ts +++ b/fees/bitlayer/index.ts @@ -0,0 +1,4 @@ +import { CHAIN } from "../../helpers/chains"; +import { etherscanFeeAdapter } from "../../helpers/etherscanFees"; + +export default etherscanFeeAdapter(CHAIN.BITLAYER, "https://api.btrscan.com/scan/v1/chain/txForDefillama") \ No newline at end of file From 1c4cee6ddac5c45aafade2500e3d5de2844cd2c5 Mon Sep 17 00:00:00 2001 From: BSX Engineering Date: Mon, 29 Apr 2024 23:30:46 -0400 Subject: [PATCH 0457/1590] add bsx volume data --- dexs/bsx/index.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 dexs/bsx/index.ts diff --git a/dexs/bsx/index.ts b/dexs/bsx/index.ts new file mode 100644 index 0000000000..576d0d7aa0 --- /dev/null +++ b/dexs/bsx/index.ts @@ -0,0 +1,34 @@ +import { SimpleAdapter, FetchV2 } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; +import { getTimestampAtStartOfPreviousDayUTC } from "../../utils/date"; + +interface IBsxStatsResponse { + volume_24h: string; + volume_total: string; +} + +const fetchBsxVolumeData: FetchV2 = async ({ endTimestamp }) => { + const url = "https://api.bsx.exchange/defillama-stats?end_time=" + endTimestamp * 1e9; + const data: IBsxStatsResponse = await fetchURL(url); + const dailyVolume = Number(data.volume_24h).toFixed(2); + const totalVolume = Number(data.volume_total).toFixed(2); + + return { + timestamp: endTimestamp, + dailyVolume, + totalVolume, + }; +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.BASE]: { + fetch: fetchBsxVolumeData, + start: 1711929600, + }, + }, +}; + +export default adapter; From 45f0c01ad89bca47f3e7f9c3af303a41af5c360d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 1 May 2024 15:59:27 +0000 Subject: [PATCH 0458/1590] fix ccip --- fees/chainlink-ccip.ts | 170 ++++++++++++++++++----------------------- 1 file changed, 74 insertions(+), 96 deletions(-) diff --git a/fees/chainlink-ccip.ts b/fees/chainlink-ccip.ts index 195244ef4f..7b5e304aba 100644 --- a/fees/chainlink-ccip.ts +++ b/fees/chainlink-ccip.ts @@ -1,13 +1,8 @@ -import ADDRESSES from '../helpers/coreAssets.json' -import { Chain } from "@defillama/sdk/build/general"; -import { FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, FetchResultV2, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getBlock } from "../helpers/getBlock"; -import * as sdk from "@defillama/sdk"; -import { getPrices } from "../utils/prices"; -const topic_0 = '0xaffc45517195d6499808c643bd4a7b0ffeedf95bea5852840d7bfcf63f59e821'; +const topic_0 = '0xd0c3c799bf9e2639de44391e7f524d229b2b55f5b1ea94b2bf7da42f7243dddd'; type IContractAddress = { [k: string]: string[]; } @@ -25,145 +20,128 @@ interface ILog { const contract_address: IContractAddress = { [CHAIN.ETHEREUM]: [ - '0xd0b5fc9790a6085b048b8aa1ed26ca2b3b282cf2', - '0x0f27c8532457b66d6037141deb0ed479dad04b3c', - '0xcc19bc4d43d17eb6859f0d22ba300967c97780b0', - '0x181314cec446cd372e555a26fc3bff3c714cd838', - '0x70349b74888b1364ee4862d9ef8cb1af7ab47464', - '0x1c0c7858c7ad7a6b3f4aa813ee81e56d7405c712', - '0x5b0c089abf23b9f078a59c683abf015773f25f66', - '0xe94b16e0fa1f6ff0a28e1dece4946ffb5748c595', - '0xf1e3d79b19b1c810812cc0ce991e6421511f2824', - '0xdf1d7fd22ac3ab5171e275796f123224039f3b24', - '0x333f976915195ba9044fd0cd603cece936f6264e', - '0xe2eb229e88f56691e96bb98256707bc62160fe73', - '0xe5c9121cc3f796a8446b9d35b0d53b67eb4c1ab2', + '0x35F0ca9Be776E4B38659944c257bDd0ba75F1B8B', + '0x86b47d8411006874eef8e4584bdfd7be8e5549d1', + '0xf538da6c673a30338269655f4e019b71ba58cfd4', + '0xcbe7e5da76dc99ac317adf6d99137005fda4e2c4', + '0x925228d7b82d883dde340a55fe8e6da56244a22c', + '0xe2c2ab221aa0b957805f229d2aa57fbe2f4dadf7', + '0x91d25a56db77ad5147437d8b83eb563d46ebfa69', + '0x3df8dae2d123081c4d5e946e655f7c109b9dd630' ], [CHAIN.ARBITRUM]: [ - '0x98dd9e9b8ae458225119ab5b8c947a9d1cd0b648', - '0x6264f5c5bc1c0201159a5bcd6486d9c6c2f75439', - '0x590791aa846ec4d2aa2b8697edeb6158f6054839', - '0x9409b222c96ae8377db6a4b6645350f7dc94e9ef', + '0x122f05f49e90508f089ee8d0d868d1a4f3e5a809', + '0x66a0046ac9fa104eb38b04cff391ccd0122e6fbc', + '0x77b60f85b25fd501e3dded6c1fe7bf565c08a22a', + '0xc09b72e8128620c40d89649019d995cc79f030c3', + '0x79f3abece5a3afff32d47f4cfe45e7b65c9a2d91', + '0x05b723f3db92430fbe4395fd03e40cc7e9d17988', + '0xce11020d56e5fdbfe46d9fc3021641ffbbb5adee', ], [CHAIN.OPTIMISM]: [ - '0xad1b1f2a6dd55627e3893b771a00cd43f69dce35', - '0xd9fb89196c902d46c07ca91e492d3e0c77a5bf93', - '0xf06a2e32477363bcacae5b86479e176ca83d3f9d', - '0xb188bd6cc347299eebb3ae93f57d90f580536b3a', - '0xc40f7c8763e35fb64ab968dc812c2d24c6f8404c', - '0x872f782a861519b3fdfb1060649f4c8343d806fe', + '0x0c9be7cfd12c735e5aae047c1dcb845d54e518c3', + '0x55183db1d2ae0b63e4c92a64bef2cbfc2032b127', + '0xa3c9544b82846c45be37593d5d9acffbe61bf3a6', + '0x82e9f4c5ec4a84e310d60d462a12042e5cba0954', + '0x0b1760a8112183303c5526c6b24569fd3a274f3b', + '0x6b57145e322c877e7d91ed8e31266eb5c02f7efc', + '0xd0d3e757bfbce7ae1881ddd7f6d798ddce588445', ], [CHAIN.BSC]: [ - '0x1f17d464652f5bd74a03446fea20590ccfb3332d', - '0xcad54be1a4bc5e467cd5b53896eb692d9f6956cd', - '0xfdc26aa261655580f7ac413927983f664291fd22', - '0xf7c9b607cf09b4048f09c84236ce7f11df6d6364', + '0x1467ff8f249f5bc604119af26a47035886f856be', + '0x2788b46bacff49bd89562e6ba5c5fbbbe5fa92f7', + '0x6aa72a998859ef93356c6521b72155d355d0cfd2', + '0x0bf40b034872d0b364f3dcec04c7434a4da1c8d9', + '0x6bd4754d86fc87fe5b463d368f26a3587a08347c', + '0x70bc7f7a6d936b289bbf5c0e19ece35b437e2e36', + '0x4feb11a454c9e8038a8d0adf599fe7612ce114ba', ], [CHAIN.BASE]: [ - '0xd44371bfde87f2db3ea6df242091351a06c2e181', - '0xe96563b8a6b4ea245e7fcefaba813104fc889c6c', - '0x064f0960ab66f44a5e6c7d2335b19de4bb75aa0d', - '0x223953db4e0a4c33bac1b17b0df1c22919984c60', + '0xd952feacdd5919cc5e9454b53bf45d4e73dd6457', + '0x1e5ca70d1e7a1b26061125738a880bbea42feb21', + '0x3db8bea142e41ca3633890d0e5640f99a895d6a5', + '0xdd4fb402d41beb0eeef6cfb1bf445f50bdc8c981', + '0xbe5a9e336d9614024b4fa10d8112671fc9a42d96', + '0xdea286dc0e01cb4755650a6cf8d1076b454ea1cb', ], [CHAIN.POLYGON]: [ - '0x84347c236f4d4fb27673929899e554ab1151aa73', - '0xae0e486fa6577188d586a8e4c12360fb82e2a386', - '0x21f786fd1f6734b86ecaaf25fda67c0e6a730d41', - '0x47d945f7bbb814b65775a89c71f5d2229be96ce9', - '0xffaacdd8fb3af6ada58ababaec549587c81351bf', - '0xd8e79def51a98b71c98b4c19d4a314341670ac36', - '0xb0fdecbfcdb211b5db4fcc44a27d2d7d66d582d0', + '0x5fa30697e90eb30954895c45b028f7c0ddd39b12', + '0x3111cfbf5e84b5d9bd952dd8e957f4ca75f728cf', + '0xfd77c53aa4ef0e3c01f5ac012bf7cc7a3ecf5168', + '0x20b028a2e0f6cce3a11f3ce5f2b8986f932e89b4', + '0xd16d025330edb91259eea8ed499dacd39087c295', + '0x5060ef647a1f66be6ee27fae3046faf8d53ceb2d', + '0x4616621704c81801a56d29c961f9395ee153d46c', + '0xf5b5a2fc11bf46b1669c3b19d98b19c79109dca9', ], [CHAIN.AVAX]: [ - '0x3d3817270db2b89e9f68ba27297fb4672082f942', - '0x2d306510fe83cdb33ff1658c71c181e9567f0009', - '0xb4e2776aeab42ba24ac10cd9c73b985845597402', - '0x82834e4d676a1d7a1e1969d0356515e973e6b460', + '0xd0701fcc7818c31935331b02eb21e91ec71a1704', + '0x97500490d9126f34cf9aa0126d64623e170319ef', + '0x9b1ed9de069be4d50957464b359f98ed0bf34dd5', + '0x98f51b041e493fc4d72b8bd33218480ba0c66ddf', + '0x268fb4311d2c6cb2bba01cca9ac073fb3bfd1c7c', + '0x8629008887e073260c5434d6cacfc83c3001d211', + '0x8eaae6462816cb4957184c48b86afa7642d8bf2b', ] } -const fetchFees = (chain: Chain) => { - return async (timestamp: number): Promise => { - const toTimestamp = timestamp; - const fromTimestamp = timestamp - 60 * 60 * 24; - const toBlock = await getBlock(toTimestamp, chain, {}); - const fromBlock = await getBlock(fromTimestamp, chain, {}); - const logs: ILog[] = (await Promise.all(contract_address[chain].map((address: string) => sdk.getEventLogs({ - target: address, - toBlock: toBlock, - fromBlock: fromBlock, - chain: chain, - topics: [topic_0] - })))).flat(); +const fetchFees = async (options: FetchOptions): Promise => { + const logs: ILog[] = await options.getLogs({ + topic: topic_0, + targets: contract_address[options.chain], + }); const rawData = logs.map((log: ILog) => { const data = log.data.replace('0x', ''); - const amount = Number('0x' + data.slice((3 * 64), (3 * 64) + 64)); - const address = data.slice((11 * 64), (11 * 64) + 64); + const amount = Number('0x' + data.slice((9 * 64), (9 * 64) + 64)); + const address = data.slice((8 * 64), (8 * 64) + 64); const addressString = `0x${address.slice(24)}`; return { amount: amount, address: addressString, } }); - const linkETH = `${CHAIN.ETHEREUM}:${ADDRESSES.ethereum.LINK}`; - const coins = [...new Set(rawData.map((e: any) => `${chain}:${e.address}`)), linkETH]; - const prices = await getPrices(coins, timestamp); - const dailyFees = rawData.reduce((acc: number, { amount, address }: any) => { - if (chain === CHAIN.BSC && address === '0x404460c6a5ede2d891e8297795264fde62adbb75') { - const price = prices[linkETH].price; - const decimals = prices[linkETH].decimals; - const normalizedAmount = amount / (10 ** decimals); - return acc + (normalizedAmount * price); - } - if (chain === CHAIN.POLYGON && address === '0xb0897686c545045afc77cf20ec7a532e3120e0f1') { - const price = prices[linkETH].price; - const decimals = prices[linkETH].decimals; - const normalizedAmount = amount / (10 ** decimals); - return acc + (normalizedAmount * price); - } - const price = prices[`${chain}:${address}`].price; - const decimals = prices[`${chain}:${address}`].decimals; - const normalizedAmount = amount / (10 ** decimals); - return acc + (normalizedAmount * price); - }, 0); + const dailyFees = options.createBalances(); + const dailyRevenue = options.createBalances(); + rawData.map((data: any) => { + dailyFees.add(data.address, data.amount); + }); return { - timestamp, - dailyFees: `${dailyFees}`, - dailyRevenue: '0' + dailyFees: dailyFees, + dailyRevenue: dailyRevenue }; - } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { - fetch: fetchFees(CHAIN.ETHEREUM), + fetch: fetchFees, start: 1688515200, }, [CHAIN.ARBITRUM]: { - fetch: fetchFees(CHAIN.ARBITRUM), + fetch: fetchFees, start: 1688515200, }, [CHAIN.OPTIMISM]: { - fetch: fetchFees(CHAIN.OPTIMISM), + fetch: fetchFees, start: 1688515200, }, [CHAIN.BSC]: { - fetch: fetchFees(CHAIN.BSC), + fetch: fetchFees, start: 1688515200, }, [CHAIN.BASE]: { - fetch: fetchFees(CHAIN.BASE), + fetch: fetchFees, start: 1688515200, }, [CHAIN.POLYGON]: { - fetch: fetchFees(CHAIN.POLYGON), + fetch: fetchFees, start: 1688515200, }, [CHAIN.AVAX]: { - fetch: fetchFees(CHAIN.AVAX), + fetch: fetchFees, start: 1688515200, } } From 26c0b35cba02f0dc2b6cf2322ddb798e76e116e8 Mon Sep 17 00:00:00 2001 From: quangkeu95 Date: Wed, 1 May 2024 21:57:00 +0700 Subject: [PATCH 0459/1590] feat: Add meteora adapter --- dexs/meteora/index.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 dexs/meteora/index.ts diff --git a/dexs/meteora/index.ts b/dexs/meteora/index.ts new file mode 100644 index 0000000000..8db184fed1 --- /dev/null +++ b/dexs/meteora/index.ts @@ -0,0 +1,27 @@ +import { CHAIN } from '../../helpers/chains'; +import { httpGet } from '../../utils/fetchURL'; + +const meteoraStatsEndpoint = "https://met-stats.meteora.ag/defillama/stats"; + +interface Stats24H { + dailyVolume: number + timestamp: number +}; + +async function fetch(timestamp: number): Promise { + let response: Stats24H = await httpGet(meteoraStatsEndpoint); + return { + dailyVolume: response.dailyVolume, + timestamp: timestamp + }; +} + +export default { + adapter: { + [CHAIN.SOLANA]: { + fetch: fetch, + runAtCurrTime: true, + start: 1714435200, // Apr 30 2024 - 00:00:00 UTC + } + } +} From 313343846e9305a74e2e17850b3759d5a5f187ed Mon Sep 17 00:00:00 2001 From: Krunal Amin Date: Wed, 1 May 2024 11:17:48 -0500 Subject: [PATCH 0460/1590] number fixes plus track mux op and ftm volume --- dexs/unidex/index.ts | 71 +++++++++++----------------- dexs/unidex/unidex-agg-perp/index.ts | 48 ++++++++++++------- 2 files changed, 60 insertions(+), 59 deletions(-) diff --git a/dexs/unidex/index.ts b/dexs/unidex/index.ts index 6849460ae8..270ecd6df0 100644 --- a/dexs/unidex/index.ts +++ b/dexs/unidex/index.ts @@ -3,13 +3,10 @@ import { CHAIN } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; -import { adapteraggderivative } from './unidex-agg-perp/index' -import { adapter_dexs_agg } from './unidex-dexs-agg/index' - -type TChainIDs = { - [key in Chain]?: number; -}; +import { adapteraggderivative } from './unidex-agg-perp/index'; +import { adapter_dexs_agg } from './unidex-dexs-agg/index'; +type TChainIDs = { [key in Chain]?: number; }; const chainIDs: TChainIDs = { [CHAIN.FANTOM]: 250, [CHAIN.ARBITRUM]: 42161, @@ -22,36 +19,38 @@ const chainIDs: TChainIDs = { interface IDayProduct { cumulativeVolumeUsd: number; - _id: string; + chainId: number; } const fetch = (chain: Chain) => { return async (timestamp: number): Promise => { const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const graphQuery = gql` query MyQuery { - DayProducts(limit: 0, filter: {date: ${todaysTimestamp}}) { + DayProducts(limit: 0, filter: { date: ${todaysTimestamp} }) { cumulativeVolumeUsd - _id + chainId } } `; - - const endpoint = "https://arkiverbackup.moltennetwork.com/graphql"; + const endpoint = "https://arkiver.moltennetwork.com/graphql"; const response = await request(endpoint, graphQuery); const dayProducts: IDayProduct[] = response.DayProducts; - const chainID = chainIDs[chain]; - let dailyVolumeUSD = 0; - + const volumeByChain: { [chainId: number]: number } = {}; dayProducts.forEach((product) => { - const productChainID = parseInt(product._id.split(":")[2]); - if (productChainID === chainID) { - dailyVolumeUSD += product.cumulativeVolumeUsd; + const chainId = product.chainId; + if (chainId === 360) { + // Combine volume for chainID 360 with chainID 42161 + volumeByChain[42161] = (volumeByChain[42161] || 0) + product.cumulativeVolumeUsd; + } else { + volumeByChain[chainId] = (volumeByChain[chainId] || 0) + product.cumulativeVolumeUsd; } }); + const chainID = chainIDs[chain]; + const dailyVolumeUSD = chainID !== undefined ? volumeByChain[chainID] || 0 : 0; + return { dailyVolume: dailyVolumeUSD.toString(), timestamp: todaysTimestamp, @@ -60,8 +59,7 @@ const fetch = (chain: Chain) => { }; const methodology = { - dailyVolume: - "Sum of cumulativeVolumeUsd for all products on the specified chain for the given day", + dailyVolume: "Sum of cumulativeVolumeUsd for all products on the specified chain for the given day", }; const adapter: any = { @@ -69,51 +67,37 @@ const adapter: any = { [CHAIN.OPTIMISM]: { fetch: fetch(CHAIN.OPTIMISM), start: 1687422746, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.ERA]: { fetch: fetch(CHAIN.ERA), start: 1687422746, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.ARBITRUM]: { fetch: fetch(CHAIN.ARBITRUM), start: 1687422746, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.BASE]: { fetch: fetch(CHAIN.BASE), start: 1687422746, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.FANTOM]: { fetch: fetch(CHAIN.FANTOM), start: 1687422746, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.METIS]: { fetch: fetch(CHAIN.METIS), start: 1687898060, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.EVMOS]: { fetch: fetch(CHAIN.EVMOS), start: 1700104066, - meta: { - methodology, - }, + meta: { methodology }, }, }, }; @@ -124,5 +108,6 @@ const adapterbreakdown: BreakdownAdapter = { "unidex-agg-derivative": adapteraggderivative["adapter"], "unidex-dexs-agg": adapter_dexs_agg["adapter"], } -} -export default adapterbreakdown; +}; + +export default adapterbreakdown; \ No newline at end of file diff --git a/dexs/unidex/unidex-agg-perp/index.ts b/dexs/unidex/unidex-agg-perp/index.ts index 581cc67b80..3fa5fbec14 100644 --- a/dexs/unidex/unidex-agg-perp/index.ts +++ b/dexs/unidex/unidex-agg-perp/index.ts @@ -25,7 +25,7 @@ const chainIDs: TChainIDs = { interface IDayProduct { cumulativeVolumeUsd: number; - _id: string; + chainId: number; } const fetchReferralVolume = async (timestamp: number): Promise => { @@ -53,7 +53,7 @@ const fetchReferralVolume = async (timestamp: number): Promise => { }; -const fetchMuxReferralVolume = async (timestamp: number): Promise => { +const fetchMuxReferralVolume = async (chain: Chain, timestamp: number): Promise => { const startOfDayTimestamp = getTimestampAtStartOfDayUTC(timestamp); const endOfDayTimestamp = startOfDayTimestamp + 86400; // Add one day's worth of seconds for the end of the day @@ -77,7 +77,22 @@ const fetchMuxReferralVolume = async (timestamp: number): Promise => { timestamp_lte: endOfDayTimestamp.toString() }; - const referralEndpoint = 'https://api.thegraph.com/subgraphs/name/mux-world/mux-referral-arb'; + let referralEndpoint = ''; + + switch (chain) { + case CHAIN.ARBITRUM: + referralEndpoint = 'https://api.thegraph.com/subgraphs/name/mux-world/mux-referral-arb'; + break; + case CHAIN.OPTIMISM: + referralEndpoint = 'https://api.thegraph.com/subgraphs/name/mux-world/mux-referral-op'; + break; + case CHAIN.FANTOM: + referralEndpoint = 'https://api.thegraph.com/subgraphs/name/mux-world/mux-referral-ftm'; + break; + default: + return 0; // Return 0 for unsupported chains + } + const referralRes = await request(referralEndpoint, referralQuery, variables); // Sum up the volumes @@ -98,9 +113,6 @@ const fetchMuxReferralVolume = async (timestamp: number): Promise => { - - - const fetch = (chain: Chain) => { return async (timestamp: number): Promise => { const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); @@ -109,7 +121,7 @@ const fetch = (chain: Chain) => { query MyQuery { DayProducts(filter: {date: ${todaysTimestamp}}) { cumulativeVolumeUsd - _id + chainId } } `; @@ -118,19 +130,23 @@ const fetch = (chain: Chain) => { const response = await request(endpoint, graphQuery); const dayProducts: IDayProduct[] = response.DayProducts; - const chainID = chainIDs[chain]; - let dailyVolumeUSD = 0; - + const volumeByChain: { [chainId: number]: number } = {}; dayProducts.forEach((product) => { - const productChainID = parseInt(product._id.split(':')[2]); - if (productChainID === chainID) { - dailyVolumeUSD += product.cumulativeVolumeUsd; + const chainId = product.chainId; + if (chainId === 360) { + // Combine volume for chainID 360 with chainID 42161 + volumeByChain[42161] = (volumeByChain[42161] || 0) + product.cumulativeVolumeUsd; + } else { + volumeByChain[chainId] = (volumeByChain[chainId] || 0) + product.cumulativeVolumeUsd; } }); - if (chain === CHAIN.ARBITRUM) { + const chainID = chainIDs[chain]; + let dailyVolumeUSD = chainID !== undefined ? volumeByChain[chainID] || 0 : 0; + + if (chain === CHAIN.ARBITRUM || chain === CHAIN.OPTIMISM || chain === CHAIN.FANTOM) { const referralVolumeUSD = await fetchReferralVolume(timestamp); - const muxReferralVolumeUSD = await fetchMuxReferralVolume(timestamp); // errror + const muxReferralVolumeUSD = await fetchMuxReferralVolume(chain, timestamp); dailyVolumeUSD += referralVolumeUSD + muxReferralVolumeUSD; } @@ -203,4 +219,4 @@ const adapteraggderivative: any = { export { adapteraggderivative -} +} \ No newline at end of file From 593d7a8ea15f8e77cabd2f64f1bf6ad517de8f6a Mon Sep 17 00:00:00 2001 From: Krunal Amin Date: Wed, 1 May 2024 11:43:56 -0500 Subject: [PATCH 0461/1590] update fee adapter with latest protocol endpoint/numbers --- fees/unidex.ts | 68 +++++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 43 deletions(-) diff --git a/fees/unidex.ts b/fees/unidex.ts index 6a715fc209..5273e57f3d 100644 --- a/fees/unidex.ts +++ b/fees/unidex.ts @@ -4,11 +4,7 @@ import { getTimestampAtStartOfDayUTC } from "../utils/date"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; - -type TChainIDs = { - [key in Chain]?: number; -}; - +type TChainIDs = { [key in Chain]?: number }; const chainIDs: TChainIDs = { [CHAIN.FANTOM]: 250, [CHAIN.ARBITRUM]: 42161, @@ -20,7 +16,7 @@ const chainIDs: TChainIDs = { interface IDayProduct { cumulativeFeesUsd: number; - _id: string; + chainId: number; } const fetch = (chain: Chain) => { @@ -31,35 +27,36 @@ const fetch = (chain: Chain) => { query MyQuery { DayProducts(filter: {date: ${todaysTimestamp}}) { cumulativeFeesUsd - _id + chainId } } `; - const endpoint = "https://arkiverbackup.moltennetwork.com/graphql"; + const endpoint = "https://arkiver.moltennetwork.com/graphql"; const response = await request(endpoint, graphQuery); const dayProducts: IDayProduct[] = response.DayProducts; - const chainID = chainIDs[chain]; - let dailyFeeUSD = 0; - + const feesByChain: { [chainId: number]: number } = {}; dayProducts.forEach((product) => { - const productChainID = parseInt(product._id.split(":")[2]); - if (productChainID === chainID) { - dailyFeeUSD += product.cumulativeFeesUsd; + const chainId = product.chainId; + if (chainId === 360) { + feesByChain[42161] = (feesByChain[42161] || 0) + product.cumulativeFeesUsd; + } else { + feesByChain[chainId] = (feesByChain[chainId] || 0) + product.cumulativeFeesUsd; } }); - const dailyHoldersRevenue = dailyFeeUSD * 0.35; - const dailyProtocolRevenue = dailyFeeUSD * 0.70; - const dailySupplySideRevenue = dailyFeeUSD * 0.3; + const chainID = chainIDs[chain]; + const dailyFeeUSD = chainID !== undefined ? feesByChain[chainID] || 0 : 0; + + const dailyHoldersRevenue = dailyFeeUSD * 0.15; + const dailyProtocolRevenue = dailyFeeUSD * 0.85; + return { dailyFees: dailyFeeUSD.toString(), dailyHoldersRevenue: dailyHoldersRevenue.toString(), dailyProtocolRevenue: dailyProtocolRevenue.toString(), - dailyRevenue: dailyProtocolRevenue.toString(), - dailySupplySideRevenue: dailySupplySideRevenue.toString(), - timestamp + timestamp, }; }; }; @@ -68,7 +65,6 @@ const methodology = { Fees: "Fees collected from user trading fees", Revenue: "Fees going to the treasury + holders", HoldersRevenue: "Fees going to token holders", - SupplySideRevenue: "Fees going to liquidity providers of counterparty pools" }; const adapter: Adapter = { @@ -76,53 +72,39 @@ const adapter: Adapter = { [CHAIN.OPTIMISM]: { fetch: fetch(CHAIN.OPTIMISM), start: 1687422746, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.ERA]: { fetch: fetch(CHAIN.ERA), start: 1687422746, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.ARBITRUM]: { fetch: fetch(CHAIN.ARBITRUM), start: 1687422746, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.BASE]: { fetch: fetch(CHAIN.BASE), start: 1687422746, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.FANTOM]: { fetch: fetch(CHAIN.FANTOM), start: 1687422746, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.METIS]: { fetch: fetch(CHAIN.METIS), start: 1687898060, - meta: { - methodology, - }, + meta: { methodology }, }, [CHAIN.EVMOS]: { fetch: fetch(CHAIN.EVMOS), start: 1700104066, - meta: { - methodology, - }, + meta: { methodology }, }, }, }; -export default adapter; +export default adapter; \ No newline at end of file From caed3bc0f20fbe89e762ca3a0d5030f2ac3ae027 Mon Sep 17 00:00:00 2001 From: Krunal Amin Date: Wed, 1 May 2024 11:45:49 -0500 Subject: [PATCH 0462/1590] update protocol rev with right number --- fees/unidex.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/unidex.ts b/fees/unidex.ts index 5273e57f3d..3be5feb64f 100644 --- a/fees/unidex.ts +++ b/fees/unidex.ts @@ -50,7 +50,7 @@ const fetch = (chain: Chain) => { const dailyFeeUSD = chainID !== undefined ? feesByChain[chainID] || 0 : 0; const dailyHoldersRevenue = dailyFeeUSD * 0.15; - const dailyProtocolRevenue = dailyFeeUSD * 0.85; + const dailyProtocolRevenue = dailyFeeUSD * 0.80; return { dailyFees: dailyFeeUSD.toString(), From c330a68db9095344f4429b4aa0175d5bcc575033 Mon Sep 17 00:00:00 2001 From: Krunal Amin Date: Wed, 1 May 2024 11:52:48 -0500 Subject: [PATCH 0463/1590] final fix for misunderstanding because im stupid --- fees/unidex.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/fees/unidex.ts b/fees/unidex.ts index 3be5feb64f..b27ce781df 100644 --- a/fees/unidex.ts +++ b/fees/unidex.ts @@ -49,13 +49,15 @@ const fetch = (chain: Chain) => { const chainID = chainIDs[chain]; const dailyFeeUSD = chainID !== undefined ? feesByChain[chainID] || 0 : 0; - const dailyHoldersRevenue = dailyFeeUSD * 0.15; - const dailyProtocolRevenue = dailyFeeUSD * 0.80; + const dailyHoldersRevenue = dailyFeeUSD * 0.65; + const dailyProtocolRevenue = dailyFeeUSD; + const dailySupplySideRevenue = dailyFeeUSD * 0.20; return { dailyFees: dailyFeeUSD.toString(), dailyHoldersRevenue: dailyHoldersRevenue.toString(), dailyProtocolRevenue: dailyProtocolRevenue.toString(), + dailySupplySideRevenue: dailySupplySideRevenue.toString(), timestamp, }; }; @@ -64,7 +66,7 @@ const fetch = (chain: Chain) => { const methodology = { Fees: "Fees collected from user trading fees", Revenue: "Fees going to the treasury + holders", - HoldersRevenue: "Fees going to token holders", + SupplySideFees: "Fees going to liquidity providers of the protocol", }; const adapter: Adapter = { From 2277b80d1bda12a7b09a5a51ddc9796859da0b44 Mon Sep 17 00:00:00 2001 From: CronosLabsDev Date: Wed, 1 May 2024 20:13:38 -0400 Subject: [PATCH 0464/1590] add orby network to fee dashboard --- fees/orby-network.ts | 69 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 fees/orby-network.ts diff --git a/fees/orby-network.ts b/fees/orby-network.ts new file mode 100644 index 0000000000..9222d21ed5 --- /dev/null +++ b/fees/orby-network.ts @@ -0,0 +1,69 @@ +import { Adapter, ChainEndpoints, FetchV2 } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { getTimestampAtStartOfPreviousDayUTC } from "../utils/date"; +const { request, gql } = require("graphql-request"); + +const endpoints = { + [CHAIN.CRONOS]: "https://graph.cronoslabs.com/subgraphs/name/orby/orby", +}; + +const graphs = (graphUrls: ChainEndpoints) => { + const fetch: FetchV2 = async ({ + chain, + createBalances, + endTimestamp, + getStartBlock, + getEndBlock, + }) => { + const dayTimestamp = getTimestampAtStartOfPreviousDayUTC(endTimestamp); + const dailyFees = createBalances(); + + const graphQuery = gql` + query fees($startOfDayBlock: Int!, $endOfDayBlock: Int!) { + yesterday: global(id: "only", block: { number: $startOfDayBlock }) { + totalBorrowingFeesPaid + totalRedemptionFeesPaid + } + today: global(id: "only", block: { number: $endOfDayBlock }) { + totalBorrowingFeesPaid + totalRedemptionFeesPaid + } + } + `; + + const graphRes = await request(graphUrls[chain], graphQuery, { + startOfDayBlock: await getStartBlock(), + endOfDayBlock: (await getEndBlock()) - 2, + }); + + const borrowingFees = + Number(graphRes.today.totalBorrowingFeesPaid) - + Number(graphRes.yesterday.totalBorrowingFeesPaid); + const redemptionFeesETH = + Number(graphRes.today.totalRedemptionFeesPaid) - + Number(graphRes.yesterday.totalRedemptionFeesPaid); + + dailyFees.addCGToken("tether", borrowingFees); + dailyFees.addGasToken(redemptionFeesETH * 10 ** 18); + + return { + timestamp: dayTimestamp, + dailyFees: dailyFees, + dailyRevenue: dailyFees, + dailyHoldersRevenue: dailyFees, + }; + }; + return fetch; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.CRONOS]: { + fetch: graphs(endpoints), + start: 1706837536, + }, + }, +}; + +export default adapter; From d050e2ea2cc0a16a63afb10c9bb147b58c2da594 Mon Sep 17 00:00:00 2001 From: quangkeu95 Date: Thu, 2 May 2024 11:19:58 +0700 Subject: [PATCH 0465/1590] fix: Using adapter v2 --- dexs/meteora/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/meteora/index.ts b/dexs/meteora/index.ts index 8db184fed1..9f8ad5e67a 100644 --- a/dexs/meteora/index.ts +++ b/dexs/meteora/index.ts @@ -17,6 +17,7 @@ async function fetch(timestamp: number): Promise { } export default { + version: 2, adapter: { [CHAIN.SOLANA]: { fetch: fetch, From 68a8875c74bcaa6d9304ae0f3067c84277bf29cc Mon Sep 17 00:00:00 2001 From: sundayalpaca Date: Thu, 2 May 2024 12:17:15 +0700 Subject: [PATCH 0466/1590] feat : add calculate blast chain and change logic --- dexs/hmx/index.ts | 68 +- fees/hmx.ts | 75 ++ fees/perp88.ts | 114 --- yarn.lock | 2298 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 2415 insertions(+), 140 deletions(-) create mode 100644 fees/hmx.ts delete mode 100644 fees/perp88.ts create mode 100644 yarn.lock diff --git a/dexs/hmx/index.ts b/dexs/hmx/index.ts index 05131417b2..d660850acc 100644 --- a/dexs/hmx/index.ts +++ b/dexs/hmx/index.ts @@ -1,12 +1,15 @@ import { Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { request, gql, GraphQLClient } from "graphql-request"; +import { gql, GraphQLClient } from "graphql-request"; import type { ChainEndpoints } from "../../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; import { HOUR, getTimestampAtStartOfHour } from "../../utils/date"; const endpoints = { - [CHAIN.ARBITRUM]: "https://subgraph.satsuma-prod.com/3a60064481e5/1lxclx3pz4zrusx6414nvj/arbitrum-one-stats/api", + [CHAIN.ARBITRUM]: + "https://subgraph.satsuma-prod.com/3a60064481e5/1lxclx3pz4zrusx6414nvj/arbitrum-one-stats/api", + [CHAIN.BLAST]: + "https://api.studio.thegraph.com/query/45963/blast-mainnet-stats/version/latest", }; type MarketStat = { @@ -17,7 +20,7 @@ type MarketStat = { const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { return async (timestamp: number) => { - if (chain === CHAIN.ARBITRUM) { + if (chain === CHAIN.ARBITRUM || chain === CHAIN.BLAST) { // Get total trading volume const totalTradingVolumeQuery = gql` { @@ -28,7 +31,7 @@ const graphs = (graphUrls: ChainEndpoints) => { } `; const graphQLClient = new GraphQLClient(graphUrls[chain]); - graphQLClient.setHeader('origin', 'https://hmx.org') + graphQLClient.setHeader("origin", "https://hmx.org"); const totalMarketStats = ( await graphQLClient.request(totalTradingVolumeQuery) ).marketStats as Array; @@ -39,23 +42,31 @@ const graphs = (graphUrls: ChainEndpoints) => { 0 as number ) / 1e30; - // Get daily trading volume - const ids: Array = []; - let latestHourIndex = Math.floor( - getTimestampAtStartOfHour(timestamp) / HOUR - ); - for (let i = 0; i < 24; i++) { - for (const marketStat of totalMarketStats) { - ids.push(`"${latestHourIndex - i}_${marketStat.id}"`); - } + const chunkSize = 40; + const splitMarket: MarketStat[][] = []; + for (let i = 0; i < totalMarketStats.length; i += chunkSize) { + const chunk = totalMarketStats.slice(i, i + chunkSize); + splitMarket.push(chunk); } - const filter = ids.join(","); - // first 2400 should covers 100 markets last 24 hours - // which virtually covers all markets - const last24hrVolumeQuery = gql` + + let last24hrVolume = 0; + for (const markets of splitMarket) { + // Get daily trading volume + const ids: Array = []; + let latestHourIndex = Math.floor( + getTimestampAtStartOfHour(timestamp) / HOUR + ); + for (let i = 0; i < 24; i++) { + for (const marketStat of markets) { + ids.push(`"${latestHourIndex - i}_${marketStat.id}"`); + } + } + + const filter = ids.join(","); + + const last24hrVolumeQuery = gql` { marketHourlyStats( - first: 2400 where: { id_in: [${filter}] } @@ -64,14 +75,15 @@ const graphs = (graphUrls: ChainEndpoints) => { } } `; - const last24hrMarketStats = ( - await graphQLClient.request(last24hrVolumeQuery) - ).marketHourlyStats as Array<{ tradingVolume: string }>; - const last24hrVolume = - last24hrMarketStats.reduce( - (accum, t) => accum + parseInt(t.tradingVolume), - 0 as number - ) / 1e30; + const last24hrMarketStats = ( + await graphQLClient.request(last24hrVolumeQuery) + ).marketHourlyStats as Array<{ tradingVolume: string }>; + last24hrVolume += + last24hrMarketStats.reduce( + (accum, t) => accum + parseInt(t.tradingVolume), + 0 as number + ) / 1e30; + } return { timestamp, @@ -95,6 +107,10 @@ const adapter: Adapter = { fetch: graphs(endpoints)(CHAIN.ARBITRUM), start: 1687806000, }, + [CHAIN.BLAST]: { + fetch: graphs(endpoints)(CHAIN.BLAST), + start: 1707094598, + }, }, }; diff --git a/fees/hmx.ts b/fees/hmx.ts new file mode 100644 index 0000000000..46c88f50fd --- /dev/null +++ b/fees/hmx.ts @@ -0,0 +1,75 @@ +import { Adapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { gql, GraphQLClient } from "graphql-request"; +import type { ChainEndpoints } from "../adapters/types"; +import { Chain } from "@defillama/sdk/build/general"; +import { getTimestampAtStartOfDayUTC } from "../utils/date"; + +const endpoints = { + [CHAIN.ARBITRUM]: + "https://subgraph.satsuma-prod.com/3a60064481e5/1lxclx3pz4zrusx6414nvj/arbitrum-one-stats/api", + [CHAIN.BLAST]: + "https://api.studio.thegraph.com/query/45963/blast-mainnet-stats/version/latest", +}; + +const graphs = (graphUrls: ChainEndpoints) => { + return (chain: Chain) => { + return async (timestamp: number) => { + if (chain === CHAIN.ARBITRUM || chain === CHAIN.BLAST) { + const floorDayTimestamp = getTimestampAtStartOfDayUTC(timestamp); + const totalFeeQuery = gql` + { + globalFeesStat(id: "global") { + totalFeePaid + } + } + `; + const dailyFeeQuery = gql` + { + dailyFeesStat(id: "${floorDayTimestamp}") { + totalFeePaid + } + } + `; + const graphQLClient = new GraphQLClient(graphUrls[chain]); + graphQLClient.setHeader("origin", "https://hmx.org"); + const totalFeeResp = await graphQLClient.request(totalFeeQuery); + const dailyFeeResp = await graphQLClient.request(dailyFeeQuery); + + const finalizedDailyFee = + Number(dailyFeeResp.dailyFeesStat.totalFeePaid) / 1e30; + const finalizedTotalFee = + Number(totalFeeResp.globalFeesStat.totalFeePaid) / 1e30; + + return { + timestamp, + dailyFees: finalizedDailyFee.toString(), + totalFees: finalizedTotalFee.toString(), + dailyHoldersRevenue: (finalizedDailyFee * 0.25).toString(), + dailySupplySideRevenue: (finalizedDailyFee * 0.75).toString(), + }; + } + + return { + timestamp, + dailyFees: "0", + totalFees: "0", + }; + }; + }; +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: graphs(endpoints)(CHAIN.ARBITRUM), + start: 1687392000, + }, + [CHAIN.BLAST]: { + fetch: graphs(endpoints)(CHAIN.BLAST), + start: 1707094598, + }, + }, +}; + +export default adapter; diff --git a/fees/perp88.ts b/fees/perp88.ts deleted file mode 100644 index b08734b8b0..0000000000 --- a/fees/perp88.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { Adapter } from "../adapters/types"; -import { ARBITRUM, CHAIN, POLYGON } from "../helpers/chains"; -import { request, gql, GraphQLClient } from "graphql-request"; -import type { ChainEndpoints } from "../adapters/types"; -import { Chain } from "@defillama/sdk/build/general"; -import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../utils/date"; -import { getBlock } from "../helpers/getBlock"; - -const endpoints = { - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/perp88/plp-pool", - [CHAIN.ARBITRUM]: "https://subgraph.satsuma-prod.com/3a60064481e5/1lxclx3pz4zrusx6414nvj/arbitrum-one-stats/api", -}; - -interface IData { - totalFees: string; -} -interface IGraph { - yesterday: IData; - today: IData; - statistic: IData; -} -const graphs = (graphUrls: ChainEndpoints) => { - return (chain: Chain) => { - return async (timestamp: number) => { - if (chain === CHAIN.POLYGON) { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp) - const yesterdaysTimestamp = getTimestampAtStartOfNextDayUTC(timestamp) - - const todaysBlock = (await getBlock(todaysTimestamp, chain, {})); - const yesterdaysBlock = (await getBlock(yesterdaysTimestamp, chain, {})); - const graphQuery = gql` - { - statistic(id: 0, block: {number: ${yesterdaysBlock}}) { - totalFees - } - } - `; - const queryDaily = gql` - query fees { - yesterday: statistic(id: "0", block: {number: ${yesterdaysBlock}}){ - totalFees - } - today: statistic(id: "0", block: {number: ${todaysBlock}}) { - totalFees - } - } - ` - - const graphRes: IGraph = await request(graphUrls[chain], graphQuery); - const graphResDaily: IGraph = await request(graphUrls[chain], queryDaily); - const dailyFee = (Number(graphResDaily.yesterday.totalFees) - Number(graphResDaily.today.totalFees))/1e30; - const totalFees = parseInt(graphRes.statistic.totalFees) / 1e30; - - return { - timestamp, - dailyFees: dailyFee.toString(), - totalFees: totalFees.toString(), - }; - } else if (chain === CHAIN.ARBITRUM) { - const floorDayTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const totalFeeQuery = gql` - { - globalFeesStat(id: "global") { - totalFeePaid - } - } - ` - const dailyFeeQuery = gql` - { - dailyFeesStat(id: "${floorDayTimestamp}") { - totalFeePaid - } - } - ` - const graphQLClient = new GraphQLClient(graphUrls[chain]); - graphQLClient.setHeader('origin', 'https://hmx.org') - const totalFeeResp = await graphQLClient.request(totalFeeQuery); - const dailyFeeResp = await graphQLClient.request(dailyFeeQuery); - - const finalizedDailyFee = (Number(dailyFeeResp.dailyFeesStat.totalFeePaid) / 1e30); - const finalizedTotalFee = (Number(totalFeeResp.globalFeesStat.totalFeePaid) / 1e30); - - return { - timestamp, - dailyFees: finalizedDailyFee.toString(), - totalFees: finalizedTotalFee.toString(), - dailyHoldersRevenue: (finalizedDailyFee * 0.25).toString(), - dailySupplySideRevenue: (finalizedDailyFee * 0.75).toString(), - } - } - - return { - timestamp, - dailyFees: "0", - totalFees: "0", - } - }; - }; -}; - -const adapter: Adapter = { - adapter: { - [CHAIN.POLYGON]: { - fetch: graphs(endpoints)(CHAIN.POLYGON), - start: 1668643200, - }, - [CHAIN.ARBITRUM]: { - fetch: graphs(endpoints)(CHAIN.ARBITRUM), - start: 1687392000, - } - }, -}; - -export default adapter; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..b381b44778 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2298 @@ +# 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@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-s3@^3.400.0": + version "3.565.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.565.0.tgz#25f800b27d5af8aebe00ba04d1bd321c89463be9" + integrity sha512-e5ioE9XBV6bJTrCClvCpK9vGP+Dp69y/LcC4ENfPcEM+BniQau2StCWcNkFuvVXyuKuk0drS+ZLnP+tefNEJ4A== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.556.0" + "@aws-sdk/credential-provider-node" "3.565.0" + "@aws-sdk/middleware-bucket-endpoint" "3.535.0" + "@aws-sdk/middleware-expect-continue" "3.535.0" + "@aws-sdk/middleware-flexible-checksums" "3.535.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-location-constraint" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-sdk-s3" "3.556.0" + "@aws-sdk/middleware-signing" "3.556.0" + "@aws-sdk/middleware-ssec" "3.537.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/signature-v4-multi-region" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@aws-sdk/xml-builder" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/eventstream-serde-browser" "^2.2.0" + "@smithy/eventstream-serde-config-resolver" "^2.2.0" + "@smithy/eventstream-serde-node" "^2.2.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-blob-browser" "^2.2.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/hash-stream-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/md5-js" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-stream" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + "@smithy/util-waiter" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.556.0.tgz#7beeeebb6a437f09680edefc5c998822292a528a" + integrity sha512-unXdWS7uvHqCcOyC1de+Fr8m3F2vMg2m24GPea0bg7rVGTYmiyn9mhUX11VCt+ozydrw+F50FQwL6OqoqPocmw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.556.0" + "@aws-sdk/middleware-host-header" "3.535.0" + "@aws-sdk/middleware-logger" "3.535.0" + "@aws-sdk/middleware-recursion-detection" "3.535.0" + "@aws-sdk/middleware-user-agent" "3.540.0" + "@aws-sdk/region-config-resolver" "3.535.0" + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@aws-sdk/util-user-agent-browser" "3.535.0" + "@aws-sdk/util-user-agent-node" "3.535.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.556.0.tgz#d0f4431a72282b71cfbcaedfb803f7f2807cf60b" + integrity sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA== + dependencies: + "@smithy/core" "^1.4.2" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz#26248e263a8107953d5496cb3760d4e7c877abcf" + integrity sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.552.0": + version "3.552.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.552.0.tgz#ecc88d02cba95621887e6b85b2583e756ad29eb6" + integrity sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.565.0": + version "3.565.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.565.0.tgz#fc64a33b378231fa93005f18abfca1aa66680243" + integrity sha512-H9+etKKjeQot3vKzuE/osTb1xMzYW0UNQZSLSt1T4fZYSMdEgnOFXRwT0kw8yGMtSQuWMYZcXYHv0jMYetho4A== + dependencies: + "@aws-sdk/credential-provider-env" "3.535.0" + "@aws-sdk/credential-provider-process" "3.535.0" + "@aws-sdk/credential-provider-sso" "3.565.0" + "@aws-sdk/credential-provider-web-identity" "3.565.0" + "@aws-sdk/types" "3.535.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.565.0": + version "3.565.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.565.0.tgz#2fc1811ea8d55041cd579054ce0e02a151c06fa7" + integrity sha512-d9xlnyd6Ba7DMJNTy0hoAHexFTOx8LWn1XPWbHZqgyRb+0YDIOhPN2ADYxE4Zq+Dc03MLTqq15zWOUhIqAPLuQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.535.0" + "@aws-sdk/credential-provider-http" "3.552.0" + "@aws-sdk/credential-provider-ini" "3.565.0" + "@aws-sdk/credential-provider-process" "3.535.0" + "@aws-sdk/credential-provider-sso" "3.565.0" + "@aws-sdk/credential-provider-web-identity" "3.565.0" + "@aws-sdk/types" "3.535.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz#ea1e8a38a32e36bbdc3f75eb03352e6eafa0c659" + integrity sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.565.0": + version "3.565.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.565.0.tgz#a6b113c5f6e3b0887987ad5f670ee8a9313e569b" + integrity sha512-MWefgFWt5BvVMlbjS0mxolxJPA8BKSnzfbdgGCoyEImuHa3GzVArYDQru4oWk6lD+naZFVHzPjHzEDYMag2KGw== + dependencies: + "@aws-sdk/client-sso" "3.556.0" + "@aws-sdk/token-providers" "3.565.0" + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.565.0": + version "3.565.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.565.0.tgz#15457bfa32e4c95fbe3deacaac8dd147c748b4c0" + integrity sha512-+MWMp3jxn93Ol2E2gjjXjqoZDNMao03OErGmGoDKMIlu322jNHTvYZo5W0WBy+615mnDKahbX55MmVBge/FwDg== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz#8e19f3f9a89d618b3d75782343cb77c80ef6c7c4" + integrity sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-arn-parser" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz#4b95208f26430a7a360da088db61573b93061bcd" + integrity sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.535.0.tgz#278ae5e824ca0b73b80adf88a6aa40138bdd6b4c" + integrity sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.535.0" + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz#d5264f813592f5e77df25e5a14bbb0e6441812db" + integrity sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.535.0.tgz#718c776c118ef78a33117fa353803d079ebcc8fa" + integrity sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz#1a8ffd6c368edd6cb32e1edf7b1dced95c1820ee" + integrity sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz#6aa1e1bd1e84730d58a73021b745e20d4341a92d" + integrity sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.556.0.tgz#ff135d1fbfc843a93860eb3a4000da9d721442c0" + integrity sha512-4W/dnxqj1B6/uS/5Z+3UHaqDDGjNPgEVlqf5d3ToOFZ31ZfpANwhcCmyX39JklC4aolCEi9renQ5wHnTCC8K8g== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-arn-parser" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.556.0.tgz#2892d76cddf3cb956122618588d163ff7a42c43f" + integrity sha512-kWrPmU8qd3gI5qzpuW9LtWFaH80cOz1ZJDavXx6PRpYZJ5JaKdUHghwfDlVTzzFYAeJmVsWIkPcLT5d5mY5ZTQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.537.0": + version "3.537.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.537.0.tgz#c64e4234e38f285e9e2bdf06fdbbb57f6bc848b2" + integrity sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz#4981c64c1eeb6b5c453bce02d060b8c71d44994d" + integrity sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@aws-sdk/util-endpoints" "3.540.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz#20a30fb5fbbe27ab70f2ed16327bae7e367b5cec" + integrity sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.556.0": + version "3.556.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.556.0.tgz#34ff26a1617b885a845752e62aca7bc29deb33ac" + integrity sha512-bWDSK0ggK7QzAOmPZGv29UAIZocL1MNY7XyOvm3P3P1U3tFMoIBilQQBLabXyHoZ9J3Ik0Vv4n95htUhRQ35ow== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.556.0" + "@aws-sdk/types" "3.535.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.565.0": + version "3.565.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.565.0.tgz#3e87bc0540e229f12f8b6daecbd05d8214d2c69e" + integrity sha512-QPoQUTWijvFZD+7yqu9oJORG6FxqUseD4uhV3iZKVZsj7/Rlpvlh8oEZVCrcnsZ17vKzy+RMUVlnj3vf7Pwp8Q== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.535.0", "@aws-sdk/types@^3.222.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" + integrity sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.535.0.tgz#046aafff4438caa3740cebec600989b1e840b934" + integrity sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.540.0": + version "3.540.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz#a7fea1d2a5e64623353aaa6ee32dbb86ab9cd3f8" + integrity sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + "@smithy/util-endpoints" "^1.2.0" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz#0200a336fddd47dd6567ce15d01f62be50a315d7" + integrity sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz#d67d72e8b933051620f18ddb1c2be225f79f588f" + integrity sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz#f5c26fb6f3f561d3cf35f96f303b1775afad0a5b" + integrity sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ== + dependencies: + "@aws-sdk/types" "3.535.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.535.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.535.0.tgz#dbe66338f64e283951778f7d07a4afd2d7d09bfd" + integrity sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng== + dependencies: + "@smithy/types" "^2.12.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.54" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.54.tgz#64ea30924fb7a6aebec67f264cc52aea6453bdf9" + integrity sha512-0akwrfkgtD8/Fk+vHM3N8nMUBW+vdndc8GfQXU40VQrEXnDm24tmlOZwnfmf0Cb+PL2ts24ll00lLR5HgdP5Gw== + dependencies: + "@aws-sdk/client-s3" "^3.400.0" + "@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" + +"@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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" + integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" + integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== + dependencies: + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" + integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" + integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/core@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" + integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" + integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" + integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" + integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" + integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" + integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" + integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== + dependencies: + "@smithy/eventstream-codec" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" + integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" + integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== + dependencies: + "@smithy/chunked-blob-reader" "^2.2.0" + "@smithy/chunked-blob-reader-native" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/hash-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" + integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" + integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" + integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== + dependencies: + "@smithy/types" "^2.12.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/md5-js@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" + integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" + integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" + integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== + dependencies: + "@smithy/middleware-serde" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/middleware-retry@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" + integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/service-error-classification" "^2.1.5" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" + integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" + integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" + integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" + integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/property-provider@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" + integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" + integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" + integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-uri-escape" "^2.2.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" + integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" + integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== + dependencies: + "@smithy/types" "^2.12.0" + +"@smithy/shared-ini-file-loader@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" + integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz#c30dd4028ae50c607db99459981cce8cdab7a3fd" + integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-uri-escape" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" + integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@smithy/types@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" + integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== + dependencies: + "@smithy/querystring-parser" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-base64@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" + integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" + integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" + integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== + 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-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" + integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" + integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" + integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== + dependencies: + "@smithy/config-resolver" "^2.2.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" + integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" + integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" + integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-retry@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" + integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== + dependencies: + "@smithy/service-error-classification" "^2.1.5" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-stream@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" + integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== + dependencies: + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" + integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" + integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/types" "^2.12.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.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + 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.31" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd" + integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA== + 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.11.9" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +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.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + 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.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + 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.12.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.0.tgz#b0c2ce207ae5a3b5125be966e32ffea7c1f2481a" + integrity sha512-zL5NlOTjML239gIvtVJuaSk0N9GQLi1Hom3ZWUszE5lDTQE/IVB62mrPkQ2W1bGcZwVGSLaetQbWNQSvI4rGDQ== + 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.5.0" + +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.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + 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.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.10.2" + +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.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +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== + +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@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + 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.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +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.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +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== + +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" + +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.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== + 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.11.5" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" + integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== + 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== + +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +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.11.1, 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.3.1, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +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.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + +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== + +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.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" + integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + +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.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +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== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +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 60642797e1ba4ee685f8ac2175129cc8954dbabd Mon Sep 17 00:00:00 2001 From: omry rosenfeld Date: Thu, 2 May 2024 12:00:54 +0300 Subject: [PATCH 0467/1590] add myswapcl volume support --- dexs/myswap-cl/index.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 dexs/myswap-cl/index.ts diff --git a/dexs/myswap-cl/index.ts b/dexs/myswap-cl/index.ts new file mode 100644 index 0000000000..96a95e22d3 --- /dev/null +++ b/dexs/myswap-cl/index.ts @@ -0,0 +1,27 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import fetchURL from "../../utils/fetchURL"; + +type VolumeResponse = { timestamp: number; volume: number }; +const fetch = async (timestamp: number) => { + const response = (await fetchURL( + "https://myswap-cl-charts.s3.amazonaws.com/data/total_volume.json" + )) as VolumeResponse[]; + return { + timestamp: timestamp, + dailyVolume: response[response.length - 1].volume, + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.STARKNET]: { + fetch: fetch, + runAtCurrTime: true, + start: 1695081600, + }, + }, +}; + +export default adapter; From 69ea9b0acb1da0ef5d371146dee533c122f89e17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CTeddyNotBear=E2=80=9D?= Date: Thu, 2 May 2024 15:59:55 +0200 Subject: [PATCH 0468/1590] feat: add Bountive project --- aggregators/bountive/index.ts | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 aggregators/bountive/index.ts diff --git a/aggregators/bountive/index.ts b/aggregators/bountive/index.ts new file mode 100644 index 0000000000..6ae843e2c6 --- /dev/null +++ b/aggregators/bountive/index.ts @@ -0,0 +1,36 @@ +import fetchURL from "../../utils/fetchURL"; +import { FetchResultV2, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const URL = 'https://app.bountive.fi'; +const endpoint = '/api/metrics/volumes/'; +const startTimestamp = 1709356735;// 02.03.2024 + +interface IAPIResponse { + date: number; + dailyVolume: string; + totalVolume: string; +} + +const fetch = async ({ endTimestamp, startTimestamp }): Promise => { + const { dailyVolume, totalVolume }: IAPIResponse = await fetchURL( + `${URL}${endpoint}${startTimestamp * 1000}/${endTimestamp * 1000}`, + ); + + return { + dailyVolume, + totalVolume, + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.STARKNET]: { + fetch: fetch, + start: startTimestamp, + }, + }, +}; + +export default adapter; \ No newline at end of file From bd3d3b36037ccb0738787965bc2c4a810759cd65 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 2 May 2024 14:33:57 +0000 Subject: [PATCH 0469/1590] fix aave fees --- fees/aave/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/aave/index.ts b/fees/aave/index.ts index 0e5792dd85..27699e0886 100644 --- a/fees/aave/index.ts +++ b/fees/aave/index.ts @@ -425,8 +425,8 @@ const v3Graphs = (graphUrls: ChainEndpoints) => { treasuryIncomeUSD: 0, outstandingTreasuryIncomeUSD: 0 }); - const dailyFee = feeBreakdown.depositorInterestUSD + feeBreakdown.outstandingTreasuryIncomeUSD + feeBreakdown.treasuryIncomeUSD - const dailyRev = feeBreakdown.treasuryIncomeUSD + feeBreakdown.outstandingTreasuryIncomeUSD + const dailyFee = feeBreakdown.depositorInterestUSD + feeBreakdown.treasuryIncomeUSD + const dailyRev = feeBreakdown.treasuryIncomeUSD return { timestamp, From 8767ee16ff69d48c253ad3f5b26f2c9e2701d0d6 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 2 May 2024 19:53:03 +0100 Subject: [PATCH 0470/1590] fix bug when query id is reused --- helpers/dune.ts | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/helpers/dune.ts b/helpers/dune.ts index e3711ed112..ab0efcb284 100644 --- a/helpers/dune.ts +++ b/helpers/dune.ts @@ -1,10 +1,8 @@ -import { IJSON } from "../adapters/types"; import { httpGet, httpPost } from "../utils/fetchURL"; import { getEnv } from "./env"; const plimit = require('p-limit'); const limit = plimit(1); -const token = {} as IJSON const API_KEYS =getEnv('DUNE_API_KEYS')?.split(',') ?? ["L0URsn5vwgyrWbBpQo9yS1E3C1DBJpZh"] let API_KEY_INDEX = 0; @@ -31,12 +29,11 @@ const getLatestData = async (queryId: string) => { } const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) -const inquiryStatus = async (queryId: string) => { +const inquiryStatus = async (execution_id: string, queryId:string) => { let _status = undefined; - if (token[queryId] === undefined) throw new Error("execution is not undefined.") do { try { - _status = (await limit(() => httpGet(`https://api.dune.com/api/v1/execution/${token[queryId]}/status`, { + _status = (await limit(() => httpGet(`https://api.dune.com/api/v1/execution/${execution_id}/status`, { headers: { "x-dune-api-key": API_KEYS[API_KEY_INDEX] } @@ -54,23 +51,21 @@ const inquiryStatus = async (queryId: string) => { const submitQuery = async (queryId: string, query_parameters = {}) => { let query: undefined | any = undefined - if (!token[queryId]) { - try { - query = await limit(() => httpPost(`https://api.dune.com/api/v1/query/${queryId}/execute`, { query_parameters }, { - headers: { - "x-dune-api-key": API_KEYS[API_KEY_INDEX], - 'Content-Type': 'application/json' - } - })) - if (query?.execution_id) { - token[queryId] = query?.execution_id - } else { - throw new Error("error query data: " + query) + try { + query = await limit(() => httpPost(`https://api.dune.com/api/v1/query/${queryId}/execute`, { query_parameters }, { + headers: { + "x-dune-api-key": API_KEYS[API_KEY_INDEX], + 'Content-Type': 'application/json' } - } catch (e: any) { - throw e; + })) + if (query?.execution_id) { + return query?.execution_id + } else { + throw new Error("error query data: " + query) } - } + } catch (e: any) { + throw e; + } } @@ -79,12 +74,12 @@ export const queryDune = async (queryId: string, query_parameters = {}) => { const latest_result = await getLatestData(queryId) if (latest_result !== undefined) return latest_result } - await submitQuery(queryId, query_parameters) - const _status = await inquiryStatus(queryId) + const execution_id = await submitQuery(queryId, query_parameters) + const _status = await inquiryStatus(execution_id, queryId) if (_status === 'QUERY_STATE_COMPLETED') { const API_KEY = API_KEYS[API_KEY_INDEX] try { - const queryStatus = await limit(() => httpGet(`https://api.dune.com/api/v1/execution/${token[queryId]}/results?limit=5&offset=0`, { + const queryStatus = await limit(() => httpGet(`https://api.dune.com/api/v1/execution/${execution_id}/results?limit=5&offset=0`, { headers: { "x-dune-api-key": API_KEY } From d87d6eace5a97cf8538e181f75aa01f3038d154f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 3 May 2024 14:22:55 +0000 Subject: [PATCH 0471/1590] disable total volume --- options/ithaca/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/options/ithaca/index.ts b/options/ithaca/index.ts index bb641fcbaf..c68c26cbd6 100644 --- a/options/ithaca/index.ts +++ b/options/ithaca/index.ts @@ -34,7 +34,7 @@ export async function fetchIthacaVolumeData( timestamp: number ) { const { response: ithacaStats } = await fetchURL(`https://app.ithacaprotocol.io/api/v1/analytics/WETH/USDC/stats`) as IIthacaStatsResponse; - + const dailyNotionalVolume = new Balances({ chain: CHAIN.ARBITRUM }) dailyNotionalVolume.addToken(USDC_CONTRACT, parseUnits(ithacaStats.daily_volume_numeraire.toFixed(6), 6)) dailyNotionalVolume.addToken(WETH_CONTRACT, parseUnits(`${ithacaStats.daily_volume_underlier}`, 18)) @@ -48,9 +48,9 @@ export async function fetchIthacaVolumeData( dailyFees: ithacaStats.daily_fees, totalFees: ithacaStats.total_fees, dailyPremiumVolume: ithacaStats.daily_premium, - totalPremiumVolume: ithacaStats.total_premium, + // totalPremiumVolume: ithacaStats.total_premium, dailyNotionalVolume, - totalNotionalVolume, + // totalNotionalVolume, }; } From 5c3cff1c9999441588fa704f4aaec531d9c0f934 Mon Sep 17 00:00:00 2001 From: 0xSather <0xsather@proton.me> Date: Fri, 3 May 2024 18:35:18 +0200 Subject: [PATCH 0472/1590] Add Fenix Finance Dex --- dexs/fenix-finance/index.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 dexs/fenix-finance/index.ts diff --git a/dexs/fenix-finance/index.ts b/dexs/fenix-finance/index.ts new file mode 100644 index 0000000000..4870189d80 --- /dev/null +++ b/dexs/fenix-finance/index.ts @@ -0,0 +1,18 @@ +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter( + { + [CHAIN.BLAST]: + "https://api.studio.thegraph.com/query/67572/mainnet-algebra-fenix/version/latest", + }, + { + factoriesName: "factories", + dayData: "algebraDayData", + dailyVolume: "volumeUSD", + totalVolume: "totalVolumeUSD", + } +); + +adapters.adapter.blast.start = 1714590000; +export default adapters; From b040917788961ecc524a44d27247f0f23d03a5c3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 3 May 2024 16:49:13 +0000 Subject: [PATCH 0473/1590] fix query --- fees/banana-gun-trading.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/fees/banana-gun-trading.ts b/fees/banana-gun-trading.ts index e88ada51e1..60105687b8 100644 --- a/fees/banana-gun-trading.ts +++ b/fees/banana-gun-trading.ts @@ -12,13 +12,15 @@ const fethcFeesSolana = async (timestamp: number, _: ChainBlocks, options: Fetch const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); try { const dateStr = new Date(todaysTimestamp * 1000).toISOString().split('T')[0]; - const value: IFees[] = (await queryDune("3662383")); - const dayItem = value.find((item: any) => item.block_date.split(' ')[0] === dateStr); const dailyFees = options.createBalances(); const dailyRevenue = options.createBalances(); - const fees = (dayItem?.feesSOL || 0) * 1e9; - dailyFees.add('So11111111111111111111111111111111111111112', fees); - dailyRevenue.add('So11111111111111111111111111111111111111112', fees) ; + const value = (await queryDune("3521814", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: '47hEzz83VFR23rLTEeVm9A7eFzjJwjvdupPPmX3cePqF' + })); + dailyFees.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); + dailyRevenue.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); return { dailyFees: dailyFees, dailyRevenue: dailyRevenue, From 84266660bebefdfda797a9121c0a983e6257a65b Mon Sep 17 00:00:00 2001 From: nlx-morpheus Date: Sat, 4 May 2024 03:40:46 +0100 Subject: [PATCH 0474/1590] add nlx protocol... --- dexs/nlx/index.ts | 85 +++++++++++++++++++++++++++++++++ dexs/nlx/nlx-trade/index.ts | 93 +++++++++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 dexs/nlx/index.ts create mode 100644 dexs/nlx/nlx-trade/index.ts diff --git a/dexs/nlx/index.ts b/dexs/nlx/index.ts new file mode 100644 index 0000000000..f4bc6e340b --- /dev/null +++ b/dexs/nlx/index.ts @@ -0,0 +1,85 @@ +import { BreakdownAdapter, FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import * as sdk from "@defillama/sdk"; +import { getBlock } from "../../helpers/getBlock"; +import { Chain } from "@defillama/sdk/build/general"; +import { adapter_trade } from './nlx-trade/index' + +interface ILog { + data: string; + transactionHash: string; + topics: string[]; +} + +const topic0_ins = '0x137a44067c8961cd7e1d876f4754a5a3a75989b4552f1843fc69c3b372def160'; +const topic1_ins = '0xf35c99b746450c623be607459294d15f458678f99d535718db6cfcbccb117c09'; + +interface IToken { + amount: number; + token: string; +} + +type TChain = { + [s: Chain | string]: string; +} + +const contract: TChain = { + [CHAIN.CORE]: '0x29792F84224c77e2c672213c4d942fE280D596ef', +} + +const fetch = (chain: Chain) => { + return async ({ fromTimestamp, toTimestamp }: FetchOptions): Promise => { + + const balances = new sdk.Balances({ chain, timestamp: toTimestamp }) + + const fromBlock = (await getBlock(fromTimestamp, chain, {})); + const toBlock = (await getBlock(toTimestamp, chain, {})); + + const swap_logs: ILog[] = (await sdk.getEventLogs({ + target: contract[chain], + toBlock: toBlock, + fromBlock: fromBlock, + chain: chain, + topics: [topic0_ins, topic1_ins] + })) as ILog[]; + + const raw_in = swap_logs.map((e: ILog) => { + const data = e.data.replace('0x', ''); + const volume = Number('0x' + data.slice(53 * 64, (53 * 64) + 64)); + const address = data.slice(27 * 64, (27 * 64) + 64); + const contract_address = '0x' + address.slice(24, address.length); + return { + amount: volume, + token: contract_address, + } as IToken + }) + + raw_in.map((e: IToken) => { + balances.add(e.token, e.amount) + }) + + return { + dailyVolume: await balances.getUSDString(), + timestamp: toTimestamp + } + } +} + + +const adapter: any = { + adapter: { + [CHAIN.CORE]: { + fetch: fetch(CHAIN.CORE), + start: 1713916800, + }, + }, +}; + +const adapters: BreakdownAdapter = { + breakdown: { + "nlx-swap": adapter["adapter"], + "nlx-trade": adapter_trade["adapter"], + }, + version: 2 +} +export default adapters; diff --git a/dexs/nlx/nlx-trade/index.ts b/dexs/nlx/nlx-trade/index.ts new file mode 100644 index 0000000000..af811be541 --- /dev/null +++ b/dexs/nlx/nlx-trade/index.ts @@ -0,0 +1,93 @@ +import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../../adapters/types"; +import { CHAIN } from "../../../helpers/chains"; +import * as sdk from "@defillama/sdk"; +import { getBlock } from "../../../helpers/getBlock"; +import { Chain } from "@defillama/sdk/build/general"; + +interface ILog { + data: string; + transactionHash: string; + 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'; + +type TChain = { + [s: Chain | string]: string; +} + +const contract: TChain = { + [CHAIN.CORE]: '0x29792F84224c77e2c672213c4d942fE280D596ef', +} + +const fetch = (chain: Chain) => { + return async ({ fromTimestamp, toTimestamp }: FetchOptions): Promise => { + + const fromBlock = (await getBlock(fromTimestamp, chain, {})); + const toBlock = (await getBlock(toTimestamp, chain, {})); + + const posistion_logs: ILog[] = (await sdk.getEventLogs({ + target: contract[chain], + toBlock: toBlock, + fromBlock: fromBlock, + chain: chain, + topics: [topic0_ins, topic1_ins] + })) as ILog[]; + + const decress_logs: ILog[] = (await sdk.getEventLogs({ + target: contract[chain], + toBlock: toBlock, + fromBlock: fromBlock, + chain: chain, + topics: [topic0_des, topic1_des] + })) as ILog[]; + + 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 data = e.data.replace('0x', ''); + const volume = data.slice(100 * 64, (100 * 64) + 64); + return Number('0x' + volume) / 1e30; + }) + + + + const dailyVolume: number = [...raw_des, ...raw_in] + .reduce((a: number, b: number) => a + b, 0); + + return { + dailyVolume: `${dailyVolume}`, + timestamp:toTimestamp + } + } +} + + +const adapter_trade: any = { + adapter: { + [CHAIN.CORE]: { + fetch: fetch(CHAIN.CORE), + start: 1713916800, + }, + + }, +}; +export { + adapter_trade +} From e9c60c6b4e92cae3dc0e433c784730371c2b8e4e Mon Sep 17 00:00:00 2001 From: bergben Date: Sun, 5 May 2024 09:44:26 +0300 Subject: [PATCH 0475/1590] add fluid revenue logic --- fees/fluid/index.ts | 448 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 448 insertions(+) create mode 100644 fees/fluid/index.ts diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts new file mode 100644 index 0000000000..e20c6d08ae --- /dev/null +++ b/fees/fluid/index.ts @@ -0,0 +1,448 @@ +import * as sdk from "@defillama/sdk"; +import { getBlock } from "@defillama/sdk/build/util/blocks"; +import BigNumber from "bignumber.js"; +import { Adapter, FetchOptions, FetchV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { ethers } from "ethers"; + +const fluidLiquidity = "0x52aa899454998be5b000ad077a46bbe360f4e497"; + +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 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)", +}; + +// up until block 19662786, must use historical resolver as new one has not been deployed yet +const vaultResolverExistAfterTimestamp = 1708880700; // vault resolver related revenue only exists after this timestamp. before there has been no such revenue. +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 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 dataStartTimestamp = 1708246655; // when liquidity resolver was deployed, Feb 16 2024 + +const fetch: FetchV2 = async (options: FetchOptions) => { + const { api, fromTimestamp, toTimestamp } = options; + + const listedTokens: string[] = await api.call({ + target: fluidLiquidityResolver, + abi: fluidLiquidityResolverAbi.listedTokens, + }); + + return { + timestamp: 0, + totalFees: 0, + dailyFees: 0, + totalRevenue: await getRevenueFromTo( + api, + listedTokens, + dataStartTimestamp, + toTimestamp + ), + dailyRevenue: await getRevenueFromTo( + api, + listedTokens, + fromTimestamp, + toTimestamp + ), + }; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.ETHEREUM]: { + fetch, + start: dataStartTimestamp, + }, + }, +}; + +export default adapter; + +const getRevenueFromTo = async ( + api: sdk.ChainApi, + tokens: string[], + fromTimestamp: number, + toTimestamp: number +): Promise => { + console.log("\n---------------------"); + console.log( + "GETTING REVENUE fromTimestamp", + fromTimestamp, + "until toTimestamp", + toTimestamp, + "(blocks " + (await getBlock(api.chain, fromTimestamp)).number + "-", + (await getBlock(api.chain, toTimestamp)).number + "):" + ); + + const liquidityRevenue = await getLiquidityRevenueFromTo( + api, + tokens, + fromTimestamp, + toTimestamp + ); + console.log("total liquidityRevenue", liquidityRevenue); + + const vaultsMagnifierRevenue = await getVaultsMagnifierRevenueFromTo( + api, + fromTimestamp, + toTimestamp + ); + console.log("----------------"); + console.log("total liquidityRevenue", liquidityRevenue); + console.log("total vaultsMagnifierRevenue", vaultsMagnifierRevenue); + console.log("total revenue ", liquidityRevenue + vaultsMagnifierRevenue); + console.log("---------------- \n"); + + return liquidityRevenue + vaultsMagnifierRevenue; +}; + +const getLiquidityRevenueFromTo = async ( + api: sdk.ChainApi, + tokens: string[], + fromTimestamp: number, + toTimestamp: number +) => { + const collectRevenueLogs: [string, BigNumber][] = (await sdk.getEventLogs({ + target: fluidLiquidity, + fromBlock: (await getBlock(api.chain, fromTimestamp)).number, + toBlock: (await getBlock(api.chain, toTimestamp)).number, + chain: api.chain, + onlyArgs: true, + eventAbi: + "event LogCollectRevenue(address indexed token, uint256 indexed amount)", + })) as [string, BigNumber][]; + + const balancesApi = new sdk.ChainApi({ + block: await api.getBlock(), + chain: api.chain, + }); + + for await (const token of tokens) { + const revenueFrom = await getLiquidityUncollectedRevenueAt( + api, + fromTimestamp, + token + ); + let revenueTo = await getLiquidityUncollectedRevenueAt( + api, + toTimestamp, + token + ); + + // consider case where collect revenue has been executed in the time frame + const logs = collectRevenueLogs.filter((x) => x[0] == token); + const collectedRevenue: BigNumber = logs.reduce((sum: BigNumber, x) => { + return sum.plus(x[1]); + }, new BigNumber(0)); + + // add collected revenue in time frame to the to time point revenue. + // to revenue = uncollected at that point + all collected revenue since from + revenueTo = revenueTo.plus(collectedRevenue); + + // get uncollected revenue in from -> to timespan + balancesApi.add( + token, + revenueTo.gt(revenueFrom) + ? revenueTo.minus(revenueFrom) + : new BigNumber(0) + ); + } + + console.log( + "liquidityRevenue balances (revenue for period)", + balancesApi.getBalances() + ); + + return await balancesApi.getUSDValue(); +}; + +const getLiquidityUncollectedRevenueAt = async ( + api: sdk.ChainApi, + timestamp: number, + token: string +) => { + const timestampedApi = new sdk.ChainApi({ + chain: api.chain, + block: (await getBlock(api.chain, timestamp)).number, + }); + + // 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[] + ).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], + }); + let liquidityTokenBalance: BigNumber | string; + if (token.toLowerCase() == "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") { + liquidityTokenBalance = ( + await sdk.api.eth.getBalance({ + target: fluidLiquidity, + block: await timestampedApi.getBlock(), + }) + ).output; + } else { + liquidityTokenBalance = await timestampedApi.call({ + target: token, + abi: "erc20:balanceOf", + params: [fluidLiquidity], + }); + } + + // 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 api.call({ + target: fluidRevenueResolver, + abi: fluidRevenueResolverAbi.calcRevenueSimulatedTime, + params: [ + totalAmounts, + exchangePricesAndConfig, + liquidityTokenBalance, + timestamp, + ], + }); + + return new BigNumber(uncollectedRevenue); +}; + +const getVaultsMagnifierRevenueFromTo = async ( + api: sdk.ChainApi, + fromTimestamp: number, + toTimestamp: number +) => { + const vaults: string[] = await api.call({ + target: fluidVaultResolver, + abi: fluidVaultResolverAbi.getAllVaultsAddresses, + }); + + let fromBalancesApi = new sdk.ChainApi({ + block: await api.getBlock(), + chain: api.chain, + }); + + let toBalancesApi = new sdk.ChainApi({ + block: await api.getBlock(), + chain: api.chain, + }); + + for await (const vault of vaults) { + fromBalancesApi = await getVaultMagnifierUncollectedRevenueAt( + api, + fromTimestamp, + vault, + fromBalancesApi + ); + + toBalancesApi = await getVaultMagnifierUncollectedRevenueAt( + api, + toTimestamp, + vault, + toBalancesApi + ); + + // add collected revenue in time frame to the to time point revenue. + // to revenue = uncollected at that point + all collected revenue since from + toBalancesApi = await getVaultMagnifierCollectedRevenueFromTo( + api, + vault, + fromTimestamp, + toTimestamp, + toBalancesApi + ); + } + + const revenueFrom = await fromBalancesApi.getUSDValue(); + const revenueTo = await toBalancesApi.getUSDValue(); + + console.log( + "vault magnifier token balances at FROM timestamp", + fromBalancesApi.getBalances() + ); + console.log( + "vault magnifier token balances at TO timestamp", + toBalancesApi.getBalances() + ); + + console.log( + "vault magnifier token balances at FROM timestamp in USD value", + revenueFrom + ); + console.log( + "vault magnifier token balances at TO timestamp in USD value", + revenueTo + ); + + return revenueTo > revenueFrom ? revenueTo - revenueFrom : 0; +}; + +const getVaultMagnifierCollectedRevenueFromTo = async ( + api: sdk.ChainApi, + vault: string, + fromTimestamp: number, + toTimestamp: number, + balancesApi: sdk.ChainApi +) => { + const initialBalanceUSD = await balancesApi.getUSDValue(); + const rebalanceEventLogs: { colAmt: BigNumber; debtAmt: BigNumber }[] = ( + (await sdk.getEventLogs({ + target: vault, + fromBlock: (await getBlock(api.chain, fromTimestamp)).number, + toBlock: (await getBlock(api.chain, toTimestamp)).number, + chain: api.chain, + onlyArgs: true, + eventAbi: + /// @notice emitted when a `rebalance()` has been executed, balancing out total supply / borrow between Vault + /// and Fluid Liquidity pools. + /// if `colAmt_` is negative then profit, meaning withdrawn from vault and sent to rebalancer address. + /// if `debtAmt_` is positive then profit, meaning borrow from vault and sent to rebalancer address. + "event LogRebalance(int colAmt_, int debtAmt_)", + })) as [BigInt, BigInt][] + ).map((x) => ({ + colAmt: new BigNumber(x[0].toString()), + debtAmt: new BigNumber(x[1].toString()), + })); + + if (rebalanceEventLogs.length == 0) { + return balancesApi; + } + + // get collateral and borrow token of the vault + const { supplyToken, borrowToken } = await api.call({ + target: vault, + abi: fluidVaultAbi.constantsView, + }); + + for await (const log of rebalanceEventLogs) { + if (log.colAmt.isNegative()) { + // add collateral token amount to balances + balancesApi.addToken(supplyToken, log.colAmt.absoluteValue()); + } + if (log.debtAmt.isPositive()) { + // add borrow token amount to balances + balancesApi.addToken(borrowToken, log.debtAmt); + } + } + console.log( + "for vault", + vault, + "with supply token", + supplyToken, + "and borrow token", + borrowToken, + "collected vault magnifier revenue via rebalances in from->to timespan (in USD value):", + (await balancesApi.getUSDValue()) - initialBalanceUSD + ); + + return balancesApi; +}; + +const getVaultMagnifierUncollectedRevenueAt = async ( + api: sdk.ChainApi, + timestamp: number, + vault: string, + balancesApi: sdk.ChainApi +) => { + if (timestamp < vaultResolverExistAfterTimestamp) { + // vault resolver related revenue only exists after this timestamp. before this there has been no such revenue. + return balancesApi; + } + + const targetBlock = (await getBlock(api.chain, timestamp)).number; + + const timestampedApi = new sdk.ChainApi({ + chain: api.chain, + block: targetBlock, + }); + + const { totalSupplyAndBorrow, constantVariables } = await timestampedApi.call( + { + target: + targetBlock > vaultResolverHistoricalBlock + ? fluidVaultResolver + : fluidVaultResolverHistorical, + abi: fluidVaultResolverAbi.getVaultEntireData, + params: [vault], + } + ); + + const totalSupplyVault = new BigNumber(totalSupplyAndBorrow.totalSupplyVault); + const totalBorrowVault = new BigNumber(totalSupplyAndBorrow.totalBorrowVault); + const totalSupplyLiquidity = new BigNumber( + totalSupplyAndBorrow.totalSupplyLiquidity + ); + const totalBorrowLiquidity = new BigNumber( + totalSupplyAndBorrow.totalBorrowLiquidity + ); + + // if more supply at liquidity than at vault -> uncollected profit + const supplyTokenProfit = totalSupplyLiquidity.gt(totalSupplyVault) + ? totalSupplyLiquidity.minus(totalSupplyVault) + : new BigNumber(0); + // if less borrow at liquidity than at vault -> profit + const borrowTokenProfit = totalBorrowVault.gt(totalBorrowLiquidity) + ? totalBorrowVault.minus(totalBorrowLiquidity) + : new BigNumber(0); + + // console.log( + // "for token supply ", + // constantVariables.supplyToken, + // supplyTokenProfit.toString() + // ); + balancesApi.add(constantVariables.supplyToken, supplyTokenProfit); + // console.log("USD balance now", await balancesApi.getUSDValue()); + + // console.log( + // "for token borrowToken ", + // constantVariables.borrowToken, + // borrowTokenProfit.toString() + // ); + + balancesApi.add(constantVariables.borrowToken, borrowTokenProfit); + + // console.log("USD balance now", await balancesApi.getUSDValue()); + + return balancesApi; +}; From c9ab12cd518d25923d67a989fe0dc398b127dc8d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 5 May 2024 12:55:59 +0000 Subject: [PATCH 0476/1590] fix uniswap adapter --- protocols/uniswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 620f42d2d3..af5f764eb4 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -68,7 +68,7 @@ const v3Endpoints = { [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optmism-regen", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/id/QmZ5uwhnwsJXAQGYEF8qKPQ85iVhYAcVZcZAPfrF7ZNb9z", // [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/"+KEY+"/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm", - [CHAIN.CELO]: "https://api.thegraph.com/subgraphs/name/jesse-sawa/uniswap-celo", + // [CHAIN.CELO]: "https://api.thegraph.com/subgraphs/name/jesse-sawa/uniswap-celo", [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-bsc", // [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-avax", [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-base", From 0790597c6c01dcfb3ed4e8ece7d7d10a2552a154 Mon Sep 17 00:00:00 2001 From: Daniel <16984675+DanielRX@users.noreply.github.com> Date: Mon, 6 May 2024 14:29:37 +0100 Subject: [PATCH 0477/1590] Add mangrove adapter --- dexs/mangrove/index.ts | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 dexs/mangrove/index.ts diff --git a/dexs/mangrove/index.ts b/dexs/mangrove/index.ts new file mode 100644 index 0000000000..621eb654ca --- /dev/null +++ b/dexs/mangrove/index.ts @@ -0,0 +1,50 @@ +import { Balances } from "@defillama/sdk"; +import { Adapter, FetchOptions, FetchResultV2, FetchResultVolume } from "../../adapters/types"; + +const api = "https://data.mangrove.exchange/volumes-per-pair/total/all"; + +const adapter: Adapter = { + version: 2, + + adapter: { + blast: { + meta: { + methodology: { + dailyVolume: "Sum of all offers taken in the last 24hrs", + }, + }, + fetch: async (options: FetchOptions): Promise => { + const startBlock = await options.getStartBlock(); + const endBlock = await options.getEndBlock(); + + const url = `${api}/${startBlock}/${endBlock}`; + + const dailyVolume = options.createBalances() as Balances; + + const data = await fetch(url).then((res) => res.json()); + + const markets = Object.keys(data).map((key) => { + const [base, quote] = key.split("-"); + const { totalValueInBase, totalValueInQuote } = data[key][0]; + return { + base, + quote, + totalValueInBase, + totalValueInQuote, + }; + }); + + for (const market of markets) { + const { base, quote, totalValueInBase, totalValueInQuote } = market; + dailyVolume.add(base, totalValueInBase); + dailyVolume.add(quote, totalValueInQuote); + } + + return { dailyVolume }; + }, + start: 1708992000, + }, + }, +}; + +export default adapter; From 2aa1847e5db41003f7479fd76cf4af472891b500 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 6 May 2024 20:38:44 +0100 Subject: [PATCH 0478/1590] add clubs to ft --- fees/friend-tech.ts | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/fees/friend-tech.ts b/fees/friend-tech.ts index 4ce8741b45..0cec6ab876 100644 --- a/fees/friend-tech.ts +++ b/fees/friend-tech.ts @@ -1,11 +1,26 @@ -import { Adapter,} from "../adapters/types"; -import { getFeesExport } from "../helpers/friend-tech"; +import { Adapter, FetchV2, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; const adapter: Adapter = { adapter: { [CHAIN.BASE]: { - fetch: getFeesExport('0xcf205808ed36593aa40a44f10c7f7c2f67d4a4d4'), + fetch: (async ({ getLogs, createBalances, }) => { + const dailyFees = createBalances() + const dailyRevenue = createBalances() + const logs = await getLogs({ target: "0xcf205808ed36593aa40a44f10c7f7c2f67d4a4d4", eventAbi: 'event Trade(address trader, address subject, bool isBuy, uint256 shareAmount, uint256 ethAmount, uint256 protocolEthAmount, uint256 subjectEthAmount, uint256 supply)' }) + logs.map((e: any) => { + dailyFees.addGasToken(e.protocolEthAmount) + dailyRevenue.addGasToken(e.protocolEthAmount) + dailyFees.addGasToken(e.subjectEthAmount) + }) + const clubBuy = await getLogs({ target: "0x201e95f275f39a5890c976dc8a3e1b4af114e635", eventAbi: 'event Buy(uint256 indexed id, uint256 indexed pointsIn, uint256 indexed keysOut, uint256 protocolFee)' }) + const clubSell = await getLogs({ target: "0x201e95f275f39a5890c976dc8a3e1b4af114e635", eventAbi: 'event Sell(uint256 indexed id, uint256 indexed pointsOut, uint256 indexed keysIn, uint256 protocolFee)' }) + clubBuy.concat(clubSell).map(e=>{ + dailyFees.add("0x0bd4887f7d41b35cd75dff9ffee2856106f86670", e.protocolFee * BigInt(2)) + dailyRevenue.add("0x0bd4887f7d41b35cd75dff9ffee2856106f86670", e.protocolFee) + }) + return { dailyFees, dailyRevenue, } + }) as FetchV2, start: 1691539200, }, }, From 496b490747b57ca0362137dee238801e67bc1d0a Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 7 May 2024 04:03:15 +0100 Subject: [PATCH 0479/1590] add fantasy top --- fees/fantasy-top/index.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 fees/fantasy-top/index.ts diff --git a/fees/fantasy-top/index.ts b/fees/fantasy-top/index.ts new file mode 100644 index 0000000000..dfb0a3f185 --- /dev/null +++ b/fees/fantasy-top/index.ts @@ -0,0 +1,23 @@ +import { Adapter, FetchResultV2 } from '../../adapters/types'; +import { CHAIN } from '../../helpers/chains'; +import { addTokensReceived } from '../../helpers/token'; + +const getFees = async (options): Promise => { + const dailyFees = options.createBalances() + + await addTokensReceived({ options, tokens: ["0x4300000000000000000000000000000000000004"], target: "0x8ab15fe88a00b03724ac91ee4ee1f998064f2e31", balances: dailyFees }) + return { + dailyFees, + } +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.BLAST]: { + fetch: getFees, + start: 1714445967 + }, + }, +}; +export default adapter; From c09218fc7bc4308368725164cd7ed8aaf62009b2 Mon Sep 17 00:00:00 2001 From: bergben Date: Tue, 7 May 2024 09:48:12 +0300 Subject: [PATCH 0480/1590] fluid: add fees logic --- fees/fluid/index.ts | 294 ++++++++++++++++++++++++-------------------- 1 file changed, 158 insertions(+), 136 deletions(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index e20c6d08ae..f8681314ed 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -1,9 +1,8 @@ import * as sdk from "@defillama/sdk"; import { getBlock } from "@defillama/sdk/build/util/blocks"; import BigNumber from "bignumber.js"; -import { Adapter, FetchOptions, FetchV2 } from "../../adapters/types"; +import { Adapter, FetchV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { ethers } from "ethers"; const fluidLiquidity = "0x52aa899454998be5b000ad077a46bbe360f4e497"; @@ -25,8 +24,9 @@ const fluidLiquidityResolverAbi = { "function getTotalAmounts(address token_) public view returns (uint256)", }; -// up until block 19662786, must use historical resolver as new one has not been deployed yet -const vaultResolverExistAfterTimestamp = 1708880700; // vault resolver related revenue only exists after this timestamp. before there has been no such revenue. +// 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"; @@ -44,91 +44,154 @@ const fluidVaultAbi = { "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 dataStartTimestamp = 1708246655; // when liquidity resolver was deployed, Feb 16 2024 - -const fetch: FetchV2 = async (options: FetchOptions) => { - const { api, fromTimestamp, toTimestamp } = options; +const methodologyFluid = { + Fees: "Interest paid by borrowers", + Revenue: "Percentage of interest going to treasury", +}; - const listedTokens: string[] = await api.call({ - target: fluidLiquidityResolver, - abi: fluidLiquidityResolverAbi.listedTokens, - }); +const dataStartTimestamp = 1708246655; // ~ when liquidity resolver was deployed +const fetch: FetchV2 = async ({ api, fromTimestamp, toTimestamp }) => { return { - timestamp: 0, - totalFees: 0, - dailyFees: 0, - totalRevenue: await getRevenueFromTo( - api, - listedTokens, - dataStartTimestamp, - toTimestamp - ), - dailyRevenue: await getRevenueFromTo( - api, - listedTokens, - fromTimestamp, - toTimestamp - ), + totalFees: await getFeesFromTo(api, dataStartTimestamp, toTimestamp), + dailyFees: await getFeesFromTo(api, fromTimestamp, toTimestamp), + totalRevenue: await getRevenueFromTo(api, dataStartTimestamp, toTimestamp), + dailyRevenue: await getRevenueFromTo(api, fromTimestamp, toTimestamp), }; }; - const adapter: Adapter = { version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch, start: dataStartTimestamp, + meta: { + methodology: methodologyFluid, + }, }, }, }; export default adapter; -const getRevenueFromTo = async ( +const getFeesFromTo = async ( api: sdk.ChainApi, - tokens: string[], fromTimestamp: number, toTimestamp: number ): Promise => { - console.log("\n---------------------"); - console.log( - "GETTING REVENUE fromTimestamp", - fromTimestamp, - "until toTimestamp", - toTimestamp, - "(blocks " + (await getBlock(api.chain, fromTimestamp)).number + "-", - (await getBlock(api.chain, toTimestamp)).number + "):" - ); + let fromBlock = (await getBlock(api.chain, fromTimestamp)).number; + const toBlock = (await getBlock(api.chain, toTimestamp)).number; - const liquidityRevenue = await getLiquidityRevenueFromTo( - api, - tokens, - fromTimestamp, - toTimestamp - ); - console.log("total liquidityRevenue", liquidityRevenue); + if (fromTimestamp < vaultResolverExistAfterTimestamp) { + fromTimestamp = vaultResolverExistAfterTimestamp; + fromBlock = vaultResolverExistAfterBlock; + } + if (fromTimestamp >= toTimestamp) { + return 0; + } - const vaultsMagnifierRevenue = await getVaultsMagnifierRevenueFromTo( - api, - fromTimestamp, - toTimestamp - ); - console.log("----------------"); - console.log("total liquidityRevenue", liquidityRevenue); - console.log("total vaultsMagnifierRevenue", vaultsMagnifierRevenue); - console.log("total revenue ", liquidityRevenue + vaultsMagnifierRevenue); - console.log("---------------- \n"); + const liquidityOperateLogs = (await sdk.getEventLogs({ + target: fluidLiquidity, + fromBlock, + toBlock, + chain: api.chain, + onlyArgs: true, + eventAbi: + "event LogOperate(address indexed user,address indexed token,int256 supplyAmount,int256 borrowAmount,address withdrawTo,address borrowTo,uint256 totalAmounts,uint256 exchangePricesAndConfig)", + })) as any[]; + + const fromApi = new sdk.ChainApi({ + chain: api.chain, + block: fromBlock, + }); + const toApi = new sdk.ChainApi({ + chain: api.chain, + block: toBlock, + }); + const vaults: string[] = await toApi.call({ + target: fluidVaultResolver, + abi: fluidVaultResolverAbi.getAllVaultsAddresses, + }); + + for await (const vault of vaults) { + let borrowBalance = new BigNumber(0); + let borrowToken = ""; + try { + const { constantVariables, totalSupplyAndBorrow } = await fromApi.call({ + target: + fromBlock > vaultResolverHistoricalBlock + ? fluidVaultResolver + : fluidVaultResolverHistorical, + abi: fluidVaultResolverAbi.getVaultEntireData, + params: [vault], + }); + + borrowToken = constantVariables.borrowToken; + borrowBalance = new BigNumber(totalSupplyAndBorrow.totalBorrowVault); + } catch (ex) { + // when vault did not exist yet, getVaultEntireData() will revert. at from block then we start from 0 balance. + } + + if (!borrowToken) { + const { borrowToken: vaultBorrowToken } = await toApi.call({ + target: vault, + abi: fluidVaultAbi.constantsView, + }); + borrowToken = vaultBorrowToken; + } + + // get block numbers where an update to vault borrow amounts happened + start block and end block + let vaultOperates = liquidityOperateLogs.filter( + (x) => + x[0] == vault && // filter user must be vault + x[1] == borrowToken // filter token must be vault borrow token (ignore supply / withdraw) + ); + + for await (const vaultOperate of vaultOperates) { + borrowBalance = borrowBalance.plus(new BigNumber(vaultOperate[3])); + } + + const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = await toApi.call({ + target: + toBlock > vaultResolverHistoricalBlock + ? fluidVaultResolver + : fluidVaultResolverHistorical, + abi: fluidVaultResolverAbi.getVaultEntireData, + params: [vault], + }); + + toApi.addToken( + borrowToken, + new BigNumber(totalSupplyAndBorrowTo.totalBorrowVault).minus( + borrowBalance + ) + ); + } - return liquidityRevenue + vaultsMagnifierRevenue; + return await toApi.getUSDValue(); +}; + +const getRevenueFromTo = async ( + api: sdk.ChainApi, + fromTimestamp: number, + toTimestamp: number +): Promise => { + return ( + (await getLiquidityRevenueFromTo(api, fromTimestamp, toTimestamp)) + + (await getVaultsMagnifierRevenueFromTo(api, fromTimestamp, toTimestamp)) + ); }; const getLiquidityRevenueFromTo = async ( api: sdk.ChainApi, - tokens: string[], fromTimestamp: number, toTimestamp: number ) => { + const tokens: string[] = await api.call({ + target: fluidLiquidityResolver, + abi: fluidLiquidityResolverAbi.listedTokens, + }); + const collectRevenueLogs: [string, BigNumber][] = (await sdk.getEventLogs({ target: fluidLiquidity, fromBlock: (await getBlock(api.chain, fromTimestamp)).number, @@ -175,11 +238,6 @@ const getLiquidityRevenueFromTo = async ( ); } - console.log( - "liquidityRevenue balances (revenue for period)", - balancesApi.getBalances() - ); - return await balancesApi.getUSDValue(); }; @@ -297,24 +355,6 @@ const getVaultsMagnifierRevenueFromTo = async ( const revenueFrom = await fromBalancesApi.getUSDValue(); const revenueTo = await toBalancesApi.getUSDValue(); - console.log( - "vault magnifier token balances at FROM timestamp", - fromBalancesApi.getBalances() - ); - console.log( - "vault magnifier token balances at TO timestamp", - toBalancesApi.getBalances() - ); - - console.log( - "vault magnifier token balances at FROM timestamp in USD value", - revenueFrom - ); - console.log( - "vault magnifier token balances at TO timestamp in USD value", - revenueTo - ); - return revenueTo > revenueFrom ? revenueTo - revenueFrom : 0; }; @@ -365,16 +405,6 @@ const getVaultMagnifierCollectedRevenueFromTo = async ( balancesApi.addToken(borrowToken, log.debtAmt); } } - console.log( - "for vault", - vault, - "with supply token", - supplyToken, - "and borrow token", - borrowToken, - "collected vault magnifier revenue via rebalances in from->to timespan (in USD value):", - (await balancesApi.getUSDValue()) - initialBalanceUSD - ); return balancesApi; }; @@ -397,52 +427,44 @@ const getVaultMagnifierUncollectedRevenueAt = async ( block: targetBlock, }); - const { totalSupplyAndBorrow, constantVariables } = await timestampedApi.call( - { - target: - targetBlock > vaultResolverHistoricalBlock - ? fluidVaultResolver - : fluidVaultResolverHistorical, - abi: fluidVaultResolverAbi.getVaultEntireData, - params: [vault], - } - ); - - const totalSupplyVault = new BigNumber(totalSupplyAndBorrow.totalSupplyVault); - const totalBorrowVault = new BigNumber(totalSupplyAndBorrow.totalBorrowVault); - const totalSupplyLiquidity = new BigNumber( - totalSupplyAndBorrow.totalSupplyLiquidity - ); - const totalBorrowLiquidity = new BigNumber( - totalSupplyAndBorrow.totalBorrowLiquidity - ); + try { + const { totalSupplyAndBorrow, constantVariables } = + await timestampedApi.call({ + target: + targetBlock > vaultResolverHistoricalBlock + ? fluidVaultResolver + : fluidVaultResolverHistorical, + abi: fluidVaultResolverAbi.getVaultEntireData, + params: [vault], + }); + + const totalSupplyVault = new BigNumber( + totalSupplyAndBorrow.totalSupplyVault + ); + const totalBorrowVault = new BigNumber( + totalSupplyAndBorrow.totalBorrowVault + ); + const totalSupplyLiquidity = new BigNumber( + totalSupplyAndBorrow.totalSupplyLiquidity + ); + const totalBorrowLiquidity = new BigNumber( + totalSupplyAndBorrow.totalBorrowLiquidity + ); - // if more supply at liquidity than at vault -> uncollected profit - const supplyTokenProfit = totalSupplyLiquidity.gt(totalSupplyVault) - ? totalSupplyLiquidity.minus(totalSupplyVault) - : new BigNumber(0); - // if less borrow at liquidity than at vault -> profit - const borrowTokenProfit = totalBorrowVault.gt(totalBorrowLiquidity) - ? totalBorrowVault.minus(totalBorrowLiquidity) - : new BigNumber(0); - - // console.log( - // "for token supply ", - // constantVariables.supplyToken, - // supplyTokenProfit.toString() - // ); - balancesApi.add(constantVariables.supplyToken, supplyTokenProfit); - // console.log("USD balance now", await balancesApi.getUSDValue()); - - // console.log( - // "for token borrowToken ", - // constantVariables.borrowToken, - // borrowTokenProfit.toString() - // ); - - balancesApi.add(constantVariables.borrowToken, borrowTokenProfit); - - // console.log("USD balance now", await balancesApi.getUSDValue()); + // if more supply at liquidity than at vault -> uncollected profit + const supplyTokenProfit = totalSupplyLiquidity.gt(totalSupplyVault) + ? totalSupplyLiquidity.minus(totalSupplyVault) + : new BigNumber(0); + // if less borrow at liquidity than at vault -> profit + const borrowTokenProfit = totalBorrowVault.gt(totalBorrowLiquidity) + ? totalBorrowVault.minus(totalBorrowLiquidity) + : new BigNumber(0); + + balancesApi.add(constantVariables.supplyToken, supplyTokenProfit); + balancesApi.add(constantVariables.borrowToken, borrowTokenProfit); + } catch (ex) { + // when vault did not exist yet, getVaultEntireData() will revert. there is no uncollected revenue at that point. + } return balancesApi; }; From 615f20bea4ece03679ae4422af2231bdcb25b58e Mon Sep 17 00:00:00 2001 From: bergben Date: Tue, 7 May 2024 10:01:05 +0300 Subject: [PATCH 0481/1590] fluid: fix vault resolver target address --- fees/fluid/index.ts | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index f8681314ed..3c2ad9eebd 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -30,7 +30,6 @@ const vaultResolverExistAfterBlock = 19313700; // vault resolver related revenue const vaultResolverHistoricalBlock = 19662786; const fluidVaultResolverHistorical = "0x8DD65DaDb217f73A94Efb903EB2dc7B49D97ECca"; - const fluidVaultResolver = "0x93CAB6529aD849b2583EBAe32D13817A2F38cEb4"; const fluidVaultResolverAbi = { getAllVaultsAddresses: @@ -38,6 +37,11 @@ const fluidVaultResolverAbi = { 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 fluidVaultResolverTarget = async (api: sdk.ChainApi) => { + return (await api.getBlock()) > vaultResolverHistoricalBlock + ? fluidVaultResolver + : fluidVaultResolverHistorical; +}; const fluidVaultAbi = { constantsView: @@ -109,7 +113,7 @@ const getFeesFromTo = async ( block: toBlock, }); const vaults: string[] = await toApi.call({ - target: fluidVaultResolver, + target: await fluidVaultResolverTarget(toApi), abi: fluidVaultResolverAbi.getAllVaultsAddresses, }); @@ -118,10 +122,7 @@ const getFeesFromTo = async ( let borrowToken = ""; try { const { constantVariables, totalSupplyAndBorrow } = await fromApi.call({ - target: - fromBlock > vaultResolverHistoricalBlock - ? fluidVaultResolver - : fluidVaultResolverHistorical, + target: await fluidVaultResolverTarget(fromApi), abi: fluidVaultResolverAbi.getVaultEntireData, params: [vault], }); @@ -152,10 +153,7 @@ const getFeesFromTo = async ( } const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = await toApi.call({ - target: - toBlock > vaultResolverHistoricalBlock - ? fluidVaultResolver - : fluidVaultResolverHistorical, + target: await fluidVaultResolverTarget(toApi), abi: fluidVaultResolverAbi.getVaultEntireData, params: [vault], }); @@ -312,7 +310,7 @@ const getVaultsMagnifierRevenueFromTo = async ( toTimestamp: number ) => { const vaults: string[] = await api.call({ - target: fluidVaultResolver, + target: await fluidVaultResolverTarget(api), abi: fluidVaultResolverAbi.getAllVaultsAddresses, }); @@ -430,10 +428,7 @@ const getVaultMagnifierUncollectedRevenueAt = async ( try { const { totalSupplyAndBorrow, constantVariables } = await timestampedApi.call({ - target: - targetBlock > vaultResolverHistoricalBlock - ? fluidVaultResolver - : fluidVaultResolverHistorical, + target: await fluidVaultResolverTarget(timestampedApi), abi: fluidVaultResolverAbi.getVaultEntireData, params: [vault], }); From 0921e0fe427d3d00c9dc3a2cde98b8383f2ccb50 Mon Sep 17 00:00:00 2001 From: bergben Date: Tue, 7 May 2024 10:28:09 +0300 Subject: [PATCH 0482/1590] fluid: fix get revenue before vault resolver existed --- fees/fluid/index.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index 3c2ad9eebd..bf1bcdf578 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -309,10 +309,9 @@ const getVaultsMagnifierRevenueFromTo = async ( fromTimestamp: number, toTimestamp: number ) => { - const vaults: string[] = await api.call({ - target: await fluidVaultResolverTarget(api), - abi: fluidVaultResolverAbi.getAllVaultsAddresses, - }); + if (toTimestamp < vaultResolverExistAfterTimestamp) { + return 0; + } let fromBalancesApi = new sdk.ChainApi({ block: await api.getBlock(), @@ -320,10 +319,15 @@ const getVaultsMagnifierRevenueFromTo = async ( }); let toBalancesApi = new sdk.ChainApi({ - block: await api.getBlock(), + block: (await getBlock(api.chain, toTimestamp)).number, chain: api.chain, }); + const vaults: string[] = await toBalancesApi.call({ + target: await fluidVaultResolverTarget(toBalancesApi), + abi: fluidVaultResolverAbi.getAllVaultsAddresses, + }); + for await (const vault of vaults) { fromBalancesApi = await getVaultMagnifierUncollectedRevenueAt( api, @@ -363,7 +367,6 @@ const getVaultMagnifierCollectedRevenueFromTo = async ( toTimestamp: number, balancesApi: sdk.ChainApi ) => { - const initialBalanceUSD = await balancesApi.getUSDValue(); const rebalanceEventLogs: { colAmt: BigNumber; debtAmt: BigNumber }[] = ( (await sdk.getEventLogs({ target: vault, From 9c07977078aa1a6c69c0ce750bbb9a8b161f81eb Mon Sep 17 00:00:00 2001 From: AoWangg Date: Tue, 7 May 2024 19:54:11 +0800 Subject: [PATCH 0483/1590] add: dailyFees of bitlayer --- fees/bitlayer/index.ts | 92 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 2 deletions(-) diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts index 26d6989735..293830ceb3 100644 --- a/fees/bitlayer/index.ts +++ b/fees/bitlayer/index.ts @@ -1,4 +1,92 @@ +import { + Adapter, + ChainBlocks, + FetchOptions, + ProtocolType, +} from "../../adapters/types"; +import { httpPost } from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; -import { etherscanFeeAdapter } from "../../helpers/etherscanFees"; +import { getPrices } from "../../utils/prices"; -export default etherscanFeeAdapter(CHAIN.BITLAYER, "https://api.btrscan.com/scan/v1/chain/txForDefillama") \ No newline at end of file +export async function getFeeUSD({ startOfDay }: FetchOptions, url: string) { + const dailyFees = await httpPost(url, { + responseType: "blob", + headers: { + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36", + "Content-Type": "text/csv; charset=utf-8", + Accept: "text/csv; charset=utf-8", + origin: url, + }, + }); + const feesToday = dailyFees + .split("\n") + .filter((d: any) => d?.split(",")?.[1]?.slice(1, -1) == startOfDay); + + const gasToken = "coingecko:bitcoin"; + + return Promise.all( + feesToday.map(async (fee: any) => { + const timestamp = Number(fee.split(",")[1].slice(1, -1)); + const prices = await getPrices([gasToken], timestamp); + const value = Number(fee.split(",")[2].slice(1, -2)); + const amountReal = value / 1e18; + return (amountReal * prices[gasToken].price).toString(); + }) + ); +} + +export async function getEtherscanFees( + { startOfDay }: FetchOptions, + url: string +) { + const dailyFees = await httpPost(url, { + responseType: "blob", + headers: { + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36", + "Content-Type": "text/csv; charset=utf-8", + Accept: "text/csv; charset=utf-8", + origin: url, + }, + }); + const feesToday = dailyFees + .split("\n") + .find((d: any) => d?.split(",")?.[1]?.slice(1, -1) == startOfDay); + return Number(feesToday?.split(",")[2].slice(1, -2)); +} + +const adapter: Adapter = { + adapter: { + [CHAIN.BITLAYER]: { + fetch: async ( + _timestamp: number, + _: ChainBlocks, + options: FetchOptions + ) => { + const amount = await getEtherscanFees( + //精度 应该是18,后端返回值应该知道 + options, + "https://api.btrscan.com/scan/v1/chain/txForDefillama" + ); + + const feeUSD = await getFeeUSD( + options, + "https://api.btrscan.com/scan/v1/chain/txForDefillama" + ); + + console.log("amount", amount); + console.log("feeUSD", feeUSD); + const dailyFees = feeUSD.toString(); + + return { + timestamp: options.startOfDay, + dailyFees, + }; + }, + start: 1713089236, + }, + }, + protocolType: ProtocolType.CHAIN, +}; +export default adapter; From ecc366f05989d8a957fa492dd39d044faeef66dc Mon Sep 17 00:00:00 2001 From: AoWangg Date: Tue, 7 May 2024 20:09:25 +0800 Subject: [PATCH 0484/1590] add: dailyFees of bitlayer --- fees/bitlayer/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts index 293830ceb3..24bb4c57ca 100644 --- a/fees/bitlayer/index.ts +++ b/fees/bitlayer/index.ts @@ -65,7 +65,6 @@ const adapter: Adapter = { options: FetchOptions ) => { const amount = await getEtherscanFees( - //精度 应该是18,后端返回值应该知道 options, "https://api.btrscan.com/scan/v1/chain/txForDefillama" ); From 9d10c67c0f29f894c5c2ed3c08c7bc3830b8217d Mon Sep 17 00:00:00 2001 From: stromman <148442408+stromman@users.noreply.github.com> Date: Tue, 7 May 2024 22:28:30 +0800 Subject: [PATCH 0485/1590] Update index.ts --- fees/bitlayer/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts index 24bb4c57ca..1f0ea1bf57 100644 --- a/fees/bitlayer/index.ts +++ b/fees/bitlayer/index.ts @@ -57,6 +57,7 @@ export async function getEtherscanFees( } const adapter: Adapter = { + version:2, adapter: { [CHAIN.BITLAYER]: { fetch: async ( @@ -83,7 +84,7 @@ const adapter: Adapter = { dailyFees, }; }, - start: 1713089236, + start: true, }, }, protocolType: ProtocolType.CHAIN, From df4249612ceafd292eefd0c971616e17730fc157 Mon Sep 17 00:00:00 2001 From: stromman <148442408+stromman@users.noreply.github.com> Date: Tue, 7 May 2024 22:29:55 +0800 Subject: [PATCH 0486/1590] Update index.ts --- fees/bitlayer/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts index 1f0ea1bf57..164b5f913c 100644 --- a/fees/bitlayer/index.ts +++ b/fees/bitlayer/index.ts @@ -84,7 +84,8 @@ const adapter: Adapter = { dailyFees, }; }, - start: true, + runAtCurrTime: true, + start: 1713089236, }, }, protocolType: ProtocolType.CHAIN, From e1532e177a8c296d7269aa1cc3f9e17b8a4601e6 Mon Sep 17 00:00:00 2001 From: stromman <148442408+stromman@users.noreply.github.com> Date: Tue, 7 May 2024 22:31:07 +0800 Subject: [PATCH 0487/1590] Update index.ts --- fees/bitlayer/index.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts index 164b5f913c..e6adeb025d 100644 --- a/fees/bitlayer/index.ts +++ b/fees/bitlayer/index.ts @@ -74,9 +74,6 @@ const adapter: Adapter = { options, "https://api.btrscan.com/scan/v1/chain/txForDefillama" ); - - console.log("amount", amount); - console.log("feeUSD", feeUSD); const dailyFees = feeUSD.toString(); return { From bfe259e0ddb58ee165de654aae3f171fdc95d961 Mon Sep 17 00:00:00 2001 From: stromman <148442408+stromman@users.noreply.github.com> Date: Tue, 7 May 2024 23:15:12 +0800 Subject: [PATCH 0488/1590] Update index.ts --- fees/bitlayer/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts index e6adeb025d..dd951c4dc6 100644 --- a/fees/bitlayer/index.ts +++ b/fees/bitlayer/index.ts @@ -61,8 +61,6 @@ const adapter: Adapter = { adapter: { [CHAIN.BITLAYER]: { fetch: async ( - _timestamp: number, - _: ChainBlocks, options: FetchOptions ) => { const amount = await getEtherscanFees( From 356412385e5fc9092100c40143bac7436731bb06 Mon Sep 17 00:00:00 2001 From: AoWangg Date: Tue, 7 May 2024 23:33:46 +0800 Subject: [PATCH 0489/1590] fix: httpPost --- fees/bitlayer.ts | 92 ++++++++++++++++++++++++++++++++++++++++++ fees/bitlayer/index.ts | 31 +------------- 2 files changed, 94 insertions(+), 29 deletions(-) create mode 100644 fees/bitlayer.ts diff --git a/fees/bitlayer.ts b/fees/bitlayer.ts new file mode 100644 index 0000000000..f37c4f95ff --- /dev/null +++ b/fees/bitlayer.ts @@ -0,0 +1,92 @@ +import { + Adapter, + SimpleAdapter, + ChainBlocks, + FetchOptions, + ProtocolType, +} from "../adapters/types"; +import { httpPost } from "../utils/fetchURL"; +import { CHAIN } from "../helpers/chains"; +import { getPrices } from "../utils/prices"; + +export async function getFeeUSD({ startOfDay }: FetchOptions, url: string) { + const dailyFees = await httpPost(url, { + responseType: "blob", + headers: { + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36", + "Content-Type": "text/csv; charset=utf-8", + Accept: "text/csv; charset=utf-8", + origin: url, + }, + }); + const feesToday = dailyFees + .split("\n") + .filter((d: any) => d?.split(",")?.[1]?.slice(1, -1) == startOfDay); + + const gasToken = "coingecko:bitcoin"; + + return Promise.all( + feesToday.map(async (fee: any) => { + const timestamp = Number(fee.split(",")[1].slice(1, -1)); + const prices = await getPrices([gasToken], timestamp); + const value = Number(fee.split(",")[2].slice(1, -2)); + const amountReal = value / 1e18; + return (amountReal * prices[gasToken].price).toString(); + }) + ); +} + +export async function getEtherscanFees( + { startOfDay }: FetchOptions, + url: string +) { + const dailyFees = await httpPost(url, { + responseType: "blob", + headers: { + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36", + "Content-Type": "text/csv; charset=utf-8", + Accept: "text/csv; charset=utf-8", + origin: url, + }, + }); + const feesToday = dailyFees + .split("\n") + .find((d: any) => d?.split(",")?.[1]?.slice(1, -1) == startOfDay); + return Number(feesToday?.split(",")[2].slice(1, -2)); +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.BITLAYER]: { + fetch: async ( + _timestamp: number, + _: ChainBlocks, + options: FetchOptions + ) => { + const amount = await getEtherscanFees( + options, + "https://api.btrscan.com/scan/v1/chain/txForDefillama" + ); + + const feeUSD = await getFeeUSD( + options, + "https://api.btrscan.com/scan/v1/chain/txForDefillama" + ); + + console.log("amount", amount); + console.log("feeUSD", feeUSD); + const dailyFees = feeUSD.toString(); + + return { + timestamp: options.startOfDay, + dailyFees, + }; + }, + start: 1713089236, + }, + }, + protocolType: ProtocolType.CHAIN, +}; +export default adapter; diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts index dd951c4dc6..9e173497b2 100644 --- a/fees/bitlayer/index.ts +++ b/fees/bitlayer/index.ts @@ -36,38 +36,11 @@ export async function getFeeUSD({ startOfDay }: FetchOptions, url: string) { ); } -export async function getEtherscanFees( - { startOfDay }: FetchOptions, - url: string -) { - const dailyFees = await httpPost(url, { - responseType: "blob", - headers: { - "User-Agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36", - "Content-Type": "text/csv; charset=utf-8", - Accept: "text/csv; charset=utf-8", - origin: url, - }, - }); - const feesToday = dailyFees - .split("\n") - .find((d: any) => d?.split(",")?.[1]?.slice(1, -1) == startOfDay); - return Number(feesToday?.split(",")[2].slice(1, -2)); -} - const adapter: Adapter = { - version:2, + version: 2, adapter: { [CHAIN.BITLAYER]: { - fetch: async ( - options: FetchOptions - ) => { - const amount = await getEtherscanFees( - options, - "https://api.btrscan.com/scan/v1/chain/txForDefillama" - ); - + fetch: async (options: FetchOptions) => { const feeUSD = await getFeeUSD( options, "https://api.btrscan.com/scan/v1/chain/txForDefillama" From e6c217f403ec6c3cd4f6dbd5d58293e60f910916 Mon Sep 17 00:00:00 2001 From: AoWangg Date: Tue, 7 May 2024 23:35:33 +0800 Subject: [PATCH 0490/1590] remove --- fees/bitlayer.ts | 92 ------------------------------------------------ 1 file changed, 92 deletions(-) delete mode 100644 fees/bitlayer.ts diff --git a/fees/bitlayer.ts b/fees/bitlayer.ts deleted file mode 100644 index f37c4f95ff..0000000000 --- a/fees/bitlayer.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { - Adapter, - SimpleAdapter, - ChainBlocks, - FetchOptions, - ProtocolType, -} from "../adapters/types"; -import { httpPost } from "../utils/fetchURL"; -import { CHAIN } from "../helpers/chains"; -import { getPrices } from "../utils/prices"; - -export async function getFeeUSD({ startOfDay }: FetchOptions, url: string) { - const dailyFees = await httpPost(url, { - responseType: "blob", - headers: { - "User-Agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36", - "Content-Type": "text/csv; charset=utf-8", - Accept: "text/csv; charset=utf-8", - origin: url, - }, - }); - const feesToday = dailyFees - .split("\n") - .filter((d: any) => d?.split(",")?.[1]?.slice(1, -1) == startOfDay); - - const gasToken = "coingecko:bitcoin"; - - return Promise.all( - feesToday.map(async (fee: any) => { - const timestamp = Number(fee.split(",")[1].slice(1, -1)); - const prices = await getPrices([gasToken], timestamp); - const value = Number(fee.split(",")[2].slice(1, -2)); - const amountReal = value / 1e18; - return (amountReal * prices[gasToken].price).toString(); - }) - ); -} - -export async function getEtherscanFees( - { startOfDay }: FetchOptions, - url: string -) { - const dailyFees = await httpPost(url, { - responseType: "blob", - headers: { - "User-Agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36", - "Content-Type": "text/csv; charset=utf-8", - Accept: "text/csv; charset=utf-8", - origin: url, - }, - }); - const feesToday = dailyFees - .split("\n") - .find((d: any) => d?.split(",")?.[1]?.slice(1, -1) == startOfDay); - return Number(feesToday?.split(",")[2].slice(1, -2)); -} - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.BITLAYER]: { - fetch: async ( - _timestamp: number, - _: ChainBlocks, - options: FetchOptions - ) => { - const amount = await getEtherscanFees( - options, - "https://api.btrscan.com/scan/v1/chain/txForDefillama" - ); - - const feeUSD = await getFeeUSD( - options, - "https://api.btrscan.com/scan/v1/chain/txForDefillama" - ); - - console.log("amount", amount); - console.log("feeUSD", feeUSD); - const dailyFees = feeUSD.toString(); - - return { - timestamp: options.startOfDay, - dailyFees, - }; - }, - start: 1713089236, - }, - }, - protocolType: ProtocolType.CHAIN, -}; -export default adapter; From c35b00bdaa3cee7d6ac6885bd5e1915866e532ac Mon Sep 17 00:00:00 2001 From: AoWangg Date: Wed, 8 May 2024 00:18:27 +0800 Subject: [PATCH 0491/1590] fix: startOfDay --- fees/bitlayer/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts index 9e173497b2..12407ad81e 100644 --- a/fees/bitlayer/index.ts +++ b/fees/bitlayer/index.ts @@ -9,6 +9,7 @@ import { CHAIN } from "../../helpers/chains"; import { getPrices } from "../../utils/prices"; export async function getFeeUSD({ startOfDay }: FetchOptions, url: string) { + startOfDay -= 86400; const dailyFees = await httpPost(url, { responseType: "blob", headers: { From 8259a67e2746681eb43cd14b89bad29166e6be6a Mon Sep 17 00:00:00 2001 From: GaussETH Date: Wed, 8 May 2024 13:36:48 +0800 Subject: [PATCH 0492/1590] feat: Add FeeFree volume & fee adpater --- dexs/FeeFree/index.ts | 92 +++++++++++++++++++++++++++++++++++++++++ helpers/coreAssets.json | 3 ++ 2 files changed, 95 insertions(+) create mode 100644 dexs/FeeFree/index.ts diff --git a/dexs/FeeFree/index.ts b/dexs/FeeFree/index.ts new file mode 100644 index 0000000000..8450fd6ac9 --- /dev/null +++ b/dexs/FeeFree/index.ts @@ -0,0 +1,92 @@ +import { FetchOptions, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { addOneToken } from "../../helpers/prices"; + +const INITIALIZE_EVENT_ABI = 'event Initialize(bytes32 id, address indexed currency0, address indexed currency1, uint24 fee, int24 tickSpacing, address hooks)'; +const SWAP_EVENT_ABI = "event Swap(bytes32 indexed id, address sender, int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint24 fee)"; + +const CONFIG = { + [CHAIN.ZORA]: { + pool: "0xB43287b2106BC044F07aE674794f5492E851d3dC", + router: "0x0Fee97363deEFBE4De038D437D805A98dbEbA400", + fromBlock: 13704184, + swapFee: 10000000000000n, + }, + [CHAIN.BASE]: { + pool: "0xc08304a5300D9a2310A603b8D7fB8470f752947F", + router: "0x0Fee76f15DE74A5211e5Bc2aBF95394d7f50C400", + fromBlock: 14089843, + swapFee: 10000000000000n, + }, +}; + +type Pair = { + id: string, + currency0: string; + currency1: string; +}; + +const getTokenPairs = async (options: FetchOptions): Promise<{[id:string]: Pair}> => { + const config = CONFIG[options.chain]; + + const logs = await options.api.getLogs({ + target: config.pool, + eventAbi: INITIALIZE_EVENT_ABI, + fromBlock: config.fromBlock, + toBlock: options.api.block, + onlyArgs: true, + }); + + const pairs = logs.map(log => { + const [id, currency0, currency1] = log + return { id, currency0, currency1 } + }); + + return Object.fromEntries(pairs.map((pair) => [pair.id, pair])); +} + +const fetchVolume: FetchV2 = async (options: FetchOptions) => { + const dailyVolume = options.createBalances(); + const dailyFees = options.createBalances(); + const pairs = await getTokenPairs(options); + + const config = CONFIG[options.chain]; + const logs = await options.getLogs({ + target: config.pool, + eventAbi: SWAP_EVENT_ABI, + }); + logs.forEach((log: any) => { + const [id,,amount0, amount1] = log; + const pair = pairs[id]; + addOneToken({ + balances: dailyVolume, + chain: options.chain, + token0: pair.currency0, + token1: pair.currency1, + amount0, + amount1, + }); + }); + dailyFees.addGasToken(config.swapFee * BigInt(logs.length)); + + return { + dailyVolume, + dailyFees, + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ZORA]: { + fetch: fetchVolume, + start: 1714060800, + }, + [CHAIN.BASE]: { + fetch: fetchVolume, + start: 1714939200, + }, + } +} + +export default adapter; diff --git a/helpers/coreAssets.json b/helpers/coreAssets.json index af9ce98911..6c71d69dee 100644 --- a/helpers/coreAssets.json +++ b/helpers/coreAssets.json @@ -1567,5 +1567,8 @@ }, "zeta": { "WZETA": "0x5f0b1a82749cb4e2278ec87f8bf6b618dc71a8bf" + }, + "zora": { + "USDzC": "0xcccccccc7021b32ebb4e8c08314bd62f7c653ec4" } } From 40e6fedb7bf15f19985161882b6c9fd2b13317b0 Mon Sep 17 00:00:00 2001 From: Jonathan Xina Date: Wed, 8 May 2024 16:20:41 +0700 Subject: [PATCH 0493/1590] feat: revise to adapter v2 --- fees/hmx.ts | 75 -- fees/perp88.ts | 121 +++ yarn.lock | 2298 ------------------------------------------------ 3 files changed, 121 insertions(+), 2373 deletions(-) delete mode 100644 fees/hmx.ts create mode 100644 fees/perp88.ts delete mode 100644 yarn.lock diff --git a/fees/hmx.ts b/fees/hmx.ts deleted file mode 100644 index 46c88f50fd..0000000000 --- a/fees/hmx.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { Adapter } from "../adapters/types"; -import { CHAIN } from "../helpers/chains"; -import { gql, GraphQLClient } from "graphql-request"; -import type { ChainEndpoints } from "../adapters/types"; -import { Chain } from "@defillama/sdk/build/general"; -import { getTimestampAtStartOfDayUTC } from "../utils/date"; - -const endpoints = { - [CHAIN.ARBITRUM]: - "https://subgraph.satsuma-prod.com/3a60064481e5/1lxclx3pz4zrusx6414nvj/arbitrum-one-stats/api", - [CHAIN.BLAST]: - "https://api.studio.thegraph.com/query/45963/blast-mainnet-stats/version/latest", -}; - -const graphs = (graphUrls: ChainEndpoints) => { - return (chain: Chain) => { - return async (timestamp: number) => { - if (chain === CHAIN.ARBITRUM || chain === CHAIN.BLAST) { - const floorDayTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const totalFeeQuery = gql` - { - globalFeesStat(id: "global") { - totalFeePaid - } - } - `; - const dailyFeeQuery = gql` - { - dailyFeesStat(id: "${floorDayTimestamp}") { - totalFeePaid - } - } - `; - const graphQLClient = new GraphQLClient(graphUrls[chain]); - graphQLClient.setHeader("origin", "https://hmx.org"); - const totalFeeResp = await graphQLClient.request(totalFeeQuery); - const dailyFeeResp = await graphQLClient.request(dailyFeeQuery); - - const finalizedDailyFee = - Number(dailyFeeResp.dailyFeesStat.totalFeePaid) / 1e30; - const finalizedTotalFee = - Number(totalFeeResp.globalFeesStat.totalFeePaid) / 1e30; - - return { - timestamp, - dailyFees: finalizedDailyFee.toString(), - totalFees: finalizedTotalFee.toString(), - dailyHoldersRevenue: (finalizedDailyFee * 0.25).toString(), - dailySupplySideRevenue: (finalizedDailyFee * 0.75).toString(), - }; - } - - return { - timestamp, - dailyFees: "0", - totalFees: "0", - }; - }; - }; -}; - -const adapter: Adapter = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch: graphs(endpoints)(CHAIN.ARBITRUM), - start: 1687392000, - }, - [CHAIN.BLAST]: { - fetch: graphs(endpoints)(CHAIN.BLAST), - start: 1707094598, - }, - }, -}; - -export default adapter; diff --git a/fees/perp88.ts b/fees/perp88.ts new file mode 100644 index 0000000000..c082c562e0 --- /dev/null +++ b/fees/perp88.ts @@ -0,0 +1,121 @@ +import { Adapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { gql, GraphQLClient } from "graphql-request"; +import type { ChainEndpoints, FetchV2 } from "../adapters/types"; +import { getTimestampAtStartOfDayUTC } from "../utils/date"; + +const endpoints = { + [CHAIN.ARBITRUM]: + "https://subgraph.satsuma-prod.com/3a60064481e5/1lxclx3pz4zrusx6414nvj/arbitrum-one-stats/api", + [CHAIN.BLAST]: + "https://api.studio.thegraph.com/query/45963/blast-mainnet-stats/version/latest", +}; + +const graphs = (graphUrls: ChainEndpoints) => { + const fetch: FetchV2 = async ({ chain, startTimestamp }) => { + if (chain === CHAIN.ARBITRUM || chain === CHAIN.BLAST) { + const floorDayTimestamp = getTimestampAtStartOfDayUTC(startTimestamp); + const totalFeeQuery = gql` + { + globalFeesStat(id: "global") { + totalFeePaid + settlementFeePaid + liquidationFeePaid + borrowingFeePaid + tradingFeePaid + addLiquidityFeePaid + removeLiquidityFeePaid + fundingFeePaid + } + } + `; + const dailyFeeQuery = gql` + { + dailyFeesStat(id: "${floorDayTimestamp}") { + totalFeePaid + settlementFeePaid + liquidationFeePaid + borrowingFeePaid + tradingFeePaid + addLiquidityFeePaid + removeLiquidityFeePaid + fundingFeePaid + } + } + `; + const graphQLClient = new GraphQLClient(graphUrls[chain]); + graphQLClient.setHeader("origin", "https://hmx.org"); + const totalFeeResp = await graphQLClient.request(totalFeeQuery); + const dailyFeeResp = await graphQLClient.request(dailyFeeQuery); + + const finalizedDailyFee = + Number(dailyFeeResp.dailyFeesStat.totalFeePaid) / 1e30; + const finalizedTotalFee = + Number(totalFeeResp.globalFeesStat.totalFeePaid) / 1e30; + const finalizedDailyFeeWithoutFundingFee = + (Number(dailyFeeResp.dailyFeesStat.tradingFeePaid) + + Number(dailyFeeResp.dailyFeesStat.borrowingFeePaid) + + Number(dailyFeeResp.dailyFeesStat.liquidationFeePaid) + + Number(dailyFeeResp.dailyFeesStat.settlementFeePaid) + + Number(dailyFeeResp.dailyFeesStat.addLiquidityFeePaid) + + Number(dailyFeeResp.dailyFeesStat.removeLiquidityFeePaid)) / + 1e30; + const finalizedDailyUserFee = + (Number(dailyFeeResp.dailyFeesStat.tradingFeePaid) + + Number(dailyFeeResp.dailyFeesStat.borrowingFeePaid) + + Number(dailyFeeResp.dailyFeesStat.liquidationFeePaid) + + Number(dailyFeeResp.dailyFeesStat.fundingFeePaid) + + Number(dailyFeeResp.dailyFeesStat.settlementFeePaid)) / + 1e30; + const finalizedTotalUserFee = + (Number(totalFeeResp.globalFeesStat.tradingFeePaid) + + Number(totalFeeResp.globalFeesStat.borrowingFeePaid) + + Number(totalFeeResp.globalFeesStat.liquidationFeePaid) + + Number(totalFeeResp.globalFeesStat.fundingFeePaid) + + Number(totalFeeResp.globalFeesStat.settlementFeePaid)) / + 1e30; + + const dailyHoldersRevenue = (finalizedDailyFeeWithoutFundingFee * 35) / 90; + const dailyProtocolRevenue = (finalizedDailyFeeWithoutFundingFee * 5) / 90; + const dailySupplySideRevenue = (finalizedDailyFeeWithoutFundingFee * 50) / 90; + return { + dailyFees: finalizedDailyFee.toString(), + dailyUserFees: finalizedDailyUserFee.toString(), + dailyRevenue: (dailyHoldersRevenue + dailyProtocolRevenue).toString(), + dailyProtocolRevenue: dailyProtocolRevenue.toString(), + dailyHoldersRevenue: dailyHoldersRevenue.toString(), + dailySupplySideRevenue: dailySupplySideRevenue.toString(), + totalFees: finalizedTotalFee.toString(), + totalUserFees: finalizedTotalUserFee.toString(), + }; + } + + return { + dailyFees: "0", + dailyUserFees: "0", + dailyRevenue: "0", + dailyProtocolRevenue: "0", + dailyHoldersRevenue: "0", + dailySupplySideRevenue: "0", + totalFees: "0", + totalUserFees: "0", + }; + }; + return fetch; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: graphs(endpoints), + start: 1687392000, + }, + [CHAIN.BLAST]: { + fetch: graphs(endpoints), + start: 1707094598, + }, + }, +}; + +export default adapter; diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index b381b44778..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2298 +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@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@^3.400.0": - version "3.565.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.565.0.tgz#25f800b27d5af8aebe00ba04d1bd321c89463be9" - integrity sha512-e5ioE9XBV6bJTrCClvCpK9vGP+Dp69y/LcC4ENfPcEM+BniQau2StCWcNkFuvVXyuKuk0drS+ZLnP+tefNEJ4A== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.556.0" - "@aws-sdk/credential-provider-node" "3.565.0" - "@aws-sdk/middleware-bucket-endpoint" "3.535.0" - "@aws-sdk/middleware-expect-continue" "3.535.0" - "@aws-sdk/middleware-flexible-checksums" "3.535.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-location-constraint" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-sdk-s3" "3.556.0" - "@aws-sdk/middleware-signing" "3.556.0" - "@aws-sdk/middleware-ssec" "3.537.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/signature-v4-multi-region" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@aws-sdk/xml-builder" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/eventstream-serde-browser" "^2.2.0" - "@smithy/eventstream-serde-config-resolver" "^2.2.0" - "@smithy/eventstream-serde-node" "^2.2.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-blob-browser" "^2.2.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/hash-stream-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/md5-js" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-stream" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - "@smithy/util-waiter" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.556.0.tgz#7beeeebb6a437f09680edefc5c998822292a528a" - integrity sha512-unXdWS7uvHqCcOyC1de+Fr8m3F2vMg2m24GPea0bg7rVGTYmiyn9mhUX11VCt+ozydrw+F50FQwL6OqoqPocmw== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.556.0" - "@aws-sdk/middleware-host-header" "3.535.0" - "@aws-sdk/middleware-logger" "3.535.0" - "@aws-sdk/middleware-recursion-detection" "3.535.0" - "@aws-sdk/middleware-user-agent" "3.540.0" - "@aws-sdk/region-config-resolver" "3.535.0" - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@aws-sdk/util-user-agent-browser" "3.535.0" - "@aws-sdk/util-user-agent-node" "3.535.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.556.0.tgz#d0f4431a72282b71cfbcaedfb803f7f2807cf60b" - integrity sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA== - dependencies: - "@smithy/core" "^1.4.2" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz#26248e263a8107953d5496cb3760d4e7c877abcf" - integrity sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.552.0": - version "3.552.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.552.0.tgz#ecc88d02cba95621887e6b85b2583e756ad29eb6" - integrity sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.565.0": - version "3.565.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.565.0.tgz#fc64a33b378231fa93005f18abfca1aa66680243" - integrity sha512-H9+etKKjeQot3vKzuE/osTb1xMzYW0UNQZSLSt1T4fZYSMdEgnOFXRwT0kw8yGMtSQuWMYZcXYHv0jMYetho4A== - dependencies: - "@aws-sdk/credential-provider-env" "3.535.0" - "@aws-sdk/credential-provider-process" "3.535.0" - "@aws-sdk/credential-provider-sso" "3.565.0" - "@aws-sdk/credential-provider-web-identity" "3.565.0" - "@aws-sdk/types" "3.535.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.565.0": - version "3.565.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.565.0.tgz#2fc1811ea8d55041cd579054ce0e02a151c06fa7" - integrity sha512-d9xlnyd6Ba7DMJNTy0hoAHexFTOx8LWn1XPWbHZqgyRb+0YDIOhPN2ADYxE4Zq+Dc03MLTqq15zWOUhIqAPLuQ== - dependencies: - "@aws-sdk/credential-provider-env" "3.535.0" - "@aws-sdk/credential-provider-http" "3.552.0" - "@aws-sdk/credential-provider-ini" "3.565.0" - "@aws-sdk/credential-provider-process" "3.535.0" - "@aws-sdk/credential-provider-sso" "3.565.0" - "@aws-sdk/credential-provider-web-identity" "3.565.0" - "@aws-sdk/types" "3.535.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz#ea1e8a38a32e36bbdc3f75eb03352e6eafa0c659" - integrity sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.565.0": - version "3.565.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.565.0.tgz#a6b113c5f6e3b0887987ad5f670ee8a9313e569b" - integrity sha512-MWefgFWt5BvVMlbjS0mxolxJPA8BKSnzfbdgGCoyEImuHa3GzVArYDQru4oWk6lD+naZFVHzPjHzEDYMag2KGw== - dependencies: - "@aws-sdk/client-sso" "3.556.0" - "@aws-sdk/token-providers" "3.565.0" - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.565.0": - version "3.565.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.565.0.tgz#15457bfa32e4c95fbe3deacaac8dd147c748b4c0" - integrity sha512-+MWMp3jxn93Ol2E2gjjXjqoZDNMao03OErGmGoDKMIlu322jNHTvYZo5W0WBy+615mnDKahbX55MmVBge/FwDg== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz#8e19f3f9a89d618b3d75782343cb77c80ef6c7c4" - integrity sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-arn-parser" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz#4b95208f26430a7a360da088db61573b93061bcd" - integrity sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.535.0.tgz#278ae5e824ca0b73b80adf88a6aa40138bdd6b4c" - integrity sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.535.0" - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz#d5264f813592f5e77df25e5a14bbb0e6441812db" - integrity sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.535.0.tgz#718c776c118ef78a33117fa353803d079ebcc8fa" - integrity sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz#1a8ffd6c368edd6cb32e1edf7b1dced95c1820ee" - integrity sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz#6aa1e1bd1e84730d58a73021b745e20d4341a92d" - integrity sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.556.0.tgz#ff135d1fbfc843a93860eb3a4000da9d721442c0" - integrity sha512-4W/dnxqj1B6/uS/5Z+3UHaqDDGjNPgEVlqf5d3ToOFZ31ZfpANwhcCmyX39JklC4aolCEi9renQ5wHnTCC8K8g== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-arn-parser" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.556.0.tgz#2892d76cddf3cb956122618588d163ff7a42c43f" - integrity sha512-kWrPmU8qd3gI5qzpuW9LtWFaH80cOz1ZJDavXx6PRpYZJ5JaKdUHghwfDlVTzzFYAeJmVsWIkPcLT5d5mY5ZTQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.537.0": - version "3.537.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.537.0.tgz#c64e4234e38f285e9e2bdf06fdbbb57f6bc848b2" - integrity sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz#4981c64c1eeb6b5c453bce02d060b8c71d44994d" - integrity sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@aws-sdk/util-endpoints" "3.540.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz#20a30fb5fbbe27ab70f2ed16327bae7e367b5cec" - integrity sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.556.0": - version "3.556.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.556.0.tgz#34ff26a1617b885a845752e62aca7bc29deb33ac" - integrity sha512-bWDSK0ggK7QzAOmPZGv29UAIZocL1MNY7XyOvm3P3P1U3tFMoIBilQQBLabXyHoZ9J3Ik0Vv4n95htUhRQ35ow== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.556.0" - "@aws-sdk/types" "3.535.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.565.0": - version "3.565.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.565.0.tgz#3e87bc0540e229f12f8b6daecbd05d8214d2c69e" - integrity sha512-QPoQUTWijvFZD+7yqu9oJORG6FxqUseD4uhV3iZKVZsj7/Rlpvlh8oEZVCrcnsZ17vKzy+RMUVlnj3vf7Pwp8Q== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.535.0", "@aws-sdk/types@^3.222.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" - integrity sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-arn-parser@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.535.0.tgz#046aafff4438caa3740cebec600989b1e840b934" - integrity sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-endpoints@3.540.0": - version "3.540.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz#a7fea1d2a5e64623353aaa6ee32dbb86ab9cd3f8" - integrity sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - "@smithy/util-endpoints" "^1.2.0" - tslib "^2.6.2" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz#0200a336fddd47dd6567ce15d01f62be50a315d7" - integrity sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-browser@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz#d67d72e8b933051620f18ddb1c2be225f79f588f" - integrity sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz#f5c26fb6f3f561d3cf35f96f303b1775afad0a5b" - integrity sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ== - dependencies: - "@aws-sdk/types" "3.535.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.535.0": - version "3.535.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.535.0.tgz#dbe66338f64e283951778f7d07a4afd2d7d09bfd" - integrity sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng== - dependencies: - "@smithy/types" "^2.12.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.54" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.54.tgz#64ea30924fb7a6aebec67f264cc52aea6453bdf9" - integrity sha512-0akwrfkgtD8/Fk+vHM3N8nMUBW+vdndc8GfQXU40VQrEXnDm24tmlOZwnfmf0Cb+PL2ts24ll00lLR5HgdP5Gw== - dependencies: - "@aws-sdk/client-s3" "^3.400.0" - "@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" - -"@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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" - integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader-native@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" - integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== - dependencies: - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" - integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" - integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/core@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" - integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" - integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" - integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" - integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" - integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" - integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" - integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== - dependencies: - "@smithy/eventstream-codec" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" - integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" - integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== - dependencies: - "@smithy/chunked-blob-reader" "^2.2.0" - "@smithy/chunked-blob-reader-native" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/hash-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" - integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" - integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" - integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== - dependencies: - "@smithy/types" "^2.12.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/md5-js@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" - integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" - integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" - integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== - dependencies: - "@smithy/middleware-serde" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/middleware-retry@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" - integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/service-error-classification" "^2.1.5" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" - integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" - integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" - integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" - integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/property-provider@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" - integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" - integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" - integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-uri-escape" "^2.2.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" - integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" - integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== - dependencies: - "@smithy/types" "^2.12.0" - -"@smithy/shared-ini-file-loader@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" - integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz#c30dd4028ae50c607db99459981cce8cdab7a3fd" - integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== - dependencies: - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-uri-escape" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" - integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@smithy/types@^2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" - integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" - integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== - dependencies: - "@smithy/querystring-parser" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-base64@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" - integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== - dependencies: - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" - integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" - integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== - 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-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" - integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" - integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" - integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== - dependencies: - "@smithy/config-resolver" "^2.2.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" - integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" - integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" - integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-retry@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" - integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== - dependencies: - "@smithy/service-error-classification" "^2.1.5" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-stream@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" - integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== - dependencies: - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" - integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" - integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/types" "^2.12.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.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== - 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.31" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd" - integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA== - 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.11.9" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" - integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -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.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - 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.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - 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.12.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.0.tgz#b0c2ce207ae5a3b5125be966e32ffea7c1f2481a" - integrity sha512-zL5NlOTjML239gIvtVJuaSk0N9GQLi1Hom3ZWUszE5lDTQE/IVB62mrPkQ2W1bGcZwVGSLaetQbWNQSvI4rGDQ== - 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.5.0" - -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.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - 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.3.12" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" - integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.6" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.10.2" - -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.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -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== - -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@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - 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.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -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.1: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -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== - -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" - -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.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" - integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== - 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.11.5" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" - integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== - 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== - -semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -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.11.1, 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.3.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -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.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - -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== - -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.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -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.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -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== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -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 beae1e1aea2c8a51a5b3006edc8ee21943228197 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 8 May 2024 13:55:34 +0000 Subject: [PATCH 0494/1590] filter only success txs --- fees/metamask.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/fees/metamask.ts b/fees/metamask.ts index 3ae275cee7..db977eb2ed 100644 --- a/fees/metamask.ts +++ b/fees/metamask.ts @@ -40,6 +40,7 @@ const graph = (chain: Chain) => { ${chain}.core.fact_transactions WHERE to_address = '${address[chain]}' and BLOCK_NUMBER > ${await getFromBlock()} AND BLOCK_NUMBER < ${await getToBlock()} + and status = 'SUCCESS' ` From a2ddc6e96bf4d8e3e41f828d8323412513a0de6e Mon Sep 17 00:00:00 2001 From: bergben Date: Wed, 8 May 2024 18:19:00 +0300 Subject: [PATCH 0495/1590] fluid: fix backfill compatibility --- fees/fluid/index.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index bf1bcdf578..9cc628550b 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -6,6 +6,7 @@ import { CHAIN } from "../../helpers/chains"; const fluidLiquidity = "0x52aa899454998be5b000ad077a46bbe360f4e497"; +const fluidRevenueResolverExistAfterBlock = 19784319; const fluidRevenueResolver = "0x0F683159f14857D61544650607549Cdc21abE774"; const fluidRevenueResolverAbi = { calcRevenueSimulatedTime: @@ -290,7 +291,11 @@ const getLiquidityUncollectedRevenueAt = async ( // 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 api.call({ + + const uncollectedRevenue = await new sdk.ChainApi({ + chain: api.chain, + block: fluidRevenueResolverExistAfterBlock, + }).call({ target: fluidRevenueResolver, abi: fluidRevenueResolverAbi.calcRevenueSimulatedTime, params: [ From 701fe2eebb7a2ae66953a7f2fc822077a196f75b Mon Sep 17 00:00:00 2001 From: galen Date: Thu, 9 May 2024 11:09:08 +0700 Subject: [PATCH 0496/1590] feat: add fees and dexs zeno --- dexs/zeno/index.ts | 112 +++ fees/zeno.ts | 118 +++ yarn.lock | 2378 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2608 insertions(+) create mode 100644 dexs/zeno/index.ts create mode 100644 fees/zeno.ts create mode 100644 yarn.lock diff --git a/dexs/zeno/index.ts b/dexs/zeno/index.ts new file mode 100644 index 0000000000..900d28803c --- /dev/null +++ b/dexs/zeno/index.ts @@ -0,0 +1,112 @@ +import { Adapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, GraphQLClient } from "graphql-request"; +import type { ChainEndpoints } from "../../adapters/types"; +import { Chain } from "@defillama/sdk/build/general"; +import { HOUR, getTimestampAtStartOfHour } from "../../utils/date"; + +const endpoints = { + [CHAIN.METIS]: + "https://metisapi.0xgraph.xyz/subgraphs/name/metis-andromeda-prod-stats", +}; + +type MarketStat = { + id: string; + totalTradingVolume: string; +}; + +const graphs = (graphUrls: ChainEndpoints) => { + return (chain: Chain) => { + return async (timestamp: number) => { + if (chain === CHAIN.METIS) { + // Get total trading volume + const totalTradingVolumeQuery = gql` + { + marketStats { + id + totalTradingVolume + } + } + `; + const graphQLClient = new GraphQLClient(graphUrls[chain]); + graphQLClient.setHeader("origin", "https://zeno.exchange"); + const totalMarketStats = ( + await graphQLClient.request(totalTradingVolumeQuery) + ).marketStats as Array; + const totalVolume = + totalMarketStats.reduce( + (accum: number, t: MarketStat) => + accum + parseInt(t.totalTradingVolume), + 0 as number + ) / 1e30; + + const chunkSize = 40; + const splitMarket: MarketStat[][] = []; + for (let i = 0; i < totalMarketStats.length; i += chunkSize) { + const chunk = totalMarketStats.slice(i, i + chunkSize); + splitMarket.push(chunk); + } + + let last24hrVolume = 0; + for (const markets of splitMarket) { + // Get daily trading volume + const ids: Array = []; + let latestHourIndex = Math.floor( + getTimestampAtStartOfHour(timestamp) / HOUR + ); + for (let i = 0; i < 24; i++) { + for (const marketStat of markets) { + ids.push(`"${latestHourIndex - i}_${marketStat.id}"`); + } + } + + const filter = ids.join(","); + + const last24hrVolumeQuery = gql` + { + marketHourlyStats( + where: { + id_in: [${filter}] + } + ) { + tradingVolume + } + } + `; + const last24hrMarketStats = ( + await graphQLClient.request(last24hrVolumeQuery) + ).marketHourlyStats as Array<{ tradingVolume: string }>; + last24hrVolume += + last24hrMarketStats.reduce( + (accum, t) => accum + parseInt(t.tradingVolume), + 0 as number + ) / 1e30; + } + + return { + timestamp, + totalVolume: totalVolume.toString(), + dailyVolume: last24hrVolume.toString(), + }; + } + + return { + timestamp, + totalVolume: "0", + dailyVolume: "0", + }; + }; + }; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.METIS]: { + fetch: graphs(endpoints)(CHAIN.METIS), + start: 15176760, + }, + }, +}; + +export default adapter; diff --git a/fees/zeno.ts b/fees/zeno.ts new file mode 100644 index 0000000000..89e060ac60 --- /dev/null +++ b/fees/zeno.ts @@ -0,0 +1,118 @@ +import { Adapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { gql, GraphQLClient } from "graphql-request"; +import type { ChainEndpoints, FetchV2 } from "../adapters/types"; +import { getTimestampAtStartOfDayUTC } from "../utils/date"; + +const endpoints = { + [CHAIN.METIS]: + "https://metisapi.0xgraph.xyz/subgraphs/name/metis-andromeda-prod-stats", +}; + +const graphs = (graphUrls: ChainEndpoints) => { + const fetch: FetchV2 = async ({ chain, startTimestamp }) => { + if (chain === CHAIN.METIS) { + const floorDayTimestamp = getTimestampAtStartOfDayUTC(startTimestamp); + const totalFeeQuery = gql` + { + globalFeesStat(id: "global") { + totalFeePaid + settlementFeePaid + liquidationFeePaid + borrowingFeePaid + tradingFeePaid + addLiquidityFeePaid + removeLiquidityFeePaid + fundingFeePaid + } + } + `; + const dailyFeeQuery = gql` + { + dailyFeesStat(id: "${floorDayTimestamp}") { + totalFeePaid + settlementFeePaid + liquidationFeePaid + borrowingFeePaid + tradingFeePaid + addLiquidityFeePaid + removeLiquidityFeePaid + fundingFeePaid + } + } + `; + const graphQLClient = new GraphQLClient(graphUrls[chain]); + graphQLClient.setHeader("origin", "https://zeno.exchange"); + const totalFeeResp = await graphQLClient.request(totalFeeQuery); + const dailyFeeResp = await graphQLClient.request(dailyFeeQuery); + + const finalizedDailyFee = + Number(dailyFeeResp.dailyFeesStat.totalFeePaid) / 1e30; + const finalizedTotalFee = + Number(totalFeeResp.globalFeesStat.totalFeePaid) / 1e30; + const finalizedDailyFeeWithoutFundingFee = + (Number(dailyFeeResp.dailyFeesStat.tradingFeePaid) + + Number(dailyFeeResp.dailyFeesStat.borrowingFeePaid) + + Number(dailyFeeResp.dailyFeesStat.liquidationFeePaid) + + Number(dailyFeeResp.dailyFeesStat.settlementFeePaid) + + Number(dailyFeeResp.dailyFeesStat.addLiquidityFeePaid) + + Number(dailyFeeResp.dailyFeesStat.removeLiquidityFeePaid)) / + 1e30; + const finalizedDailyUserFee = + (Number(dailyFeeResp.dailyFeesStat.tradingFeePaid) + + Number(dailyFeeResp.dailyFeesStat.borrowingFeePaid) + + Number(dailyFeeResp.dailyFeesStat.liquidationFeePaid) + + Number(dailyFeeResp.dailyFeesStat.fundingFeePaid) + + Number(dailyFeeResp.dailyFeesStat.settlementFeePaid)) / + 1e30; + const finalizedTotalUserFee = + (Number(totalFeeResp.globalFeesStat.tradingFeePaid) + + Number(totalFeeResp.globalFeesStat.borrowingFeePaid) + + Number(totalFeeResp.globalFeesStat.liquidationFeePaid) + + Number(totalFeeResp.globalFeesStat.fundingFeePaid) + + Number(totalFeeResp.globalFeesStat.settlementFeePaid)) / + 1e30; + + const dailyHoldersRevenue = + (finalizedDailyFeeWithoutFundingFee * 35) / 90; + const dailyProtocolRevenue = + (finalizedDailyFeeWithoutFundingFee * 5) / 90; + const dailySupplySideRevenue = + (finalizedDailyFeeWithoutFundingFee * 50) / 90; + return { + dailyFees: finalizedDailyFee.toString(), + dailyUserFees: finalizedDailyUserFee.toString(), + dailyRevenue: (dailyHoldersRevenue + dailyProtocolRevenue).toString(), + dailyProtocolRevenue: dailyProtocolRevenue.toString(), + dailyHoldersRevenue: dailyHoldersRevenue.toString(), + dailySupplySideRevenue: dailySupplySideRevenue.toString(), + totalFees: finalizedTotalFee.toString(), + totalUserFees: finalizedTotalUserFee.toString(), + }; + } + + return { + dailyFees: "0", + dailyUserFees: "0", + dailyRevenue: "0", + dailyProtocolRevenue: "0", + dailyHoldersRevenue: "0", + dailySupplySideRevenue: "0", + totalFees: "0", + totalUserFees: "0", + }; + }; + return fetch; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.METIS]: { + fetch: graphs(endpoints), + start: 15176760, + }, + }, +}; + +export default adapter; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..f632e4f834 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2378 @@ +# 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@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-s3@^3.400.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.572.0.tgz#2ef0882029a5f621e11e2d3ce685381f0781bf1b" + integrity sha512-YLtJRVZN+ktOaseWeTtthmimRQoWxygdzRPFlb1HpDPX+akBrGkL7Mz69onpXKfqm9Loz3diUXHqKfpxRX9Pog== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sso-oidc" "3.572.0" + "@aws-sdk/client-sts" "3.572.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/credential-provider-node" "3.572.0" + "@aws-sdk/middleware-bucket-endpoint" "3.568.0" + "@aws-sdk/middleware-expect-continue" "3.572.0" + "@aws-sdk/middleware-flexible-checksums" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-location-constraint" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-sdk-s3" "3.572.0" + "@aws-sdk/middleware-signing" "3.572.0" + "@aws-sdk/middleware-ssec" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/signature-v4-multi-region" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@aws-sdk/xml-builder" "3.567.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/eventstream-serde-browser" "^2.2.0" + "@smithy/eventstream-serde-config-resolver" "^2.2.0" + "@smithy/eventstream-serde-node" "^2.2.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-blob-browser" "^2.2.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/hash-stream-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/md5-js" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-stream" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + "@smithy/util-waiter" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.572.0.tgz#0abe3282c0900f0641770a928d31221a06df494d" + integrity sha512-S6C/S6xYesDakEuzYvlY1DMMKLtKQxdbbygq3hfeG2R0jUt9KpRLsQXK8qrBuVCKa3WcnjN/30hp4g/iUWFU/w== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.572.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/credential-provider-node" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.572.0.tgz#d686db985b4c430dbfa6854c8fa1c17de2c3d7ac" + integrity sha512-S+xhScao5MD79AkrcHmFpEDk+CgoiuB/31WFcTcnrTio5TOUONAaT0QyscOIwRp7BZ7Aez7TBM+loTteJ+TQvg== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.572.0.tgz#75437254cb314a0a0cdb7b28887d502442167408" + integrity sha512-jCQuH2qkbWoSY4wckLSfzf3OPh7zc7ZckEbIGGVUQar/JVff6EIbpQ+uNG29DDEOpdPPd8rrJsVuUlA/nvJdXA== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sso-oidc" "3.572.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/credential-provider-node" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.572.0.tgz#875cbd9e2ca6b78a3c2663cf67aed24e6b143667" + integrity sha512-DBmf94qfN0dfaLl5EnNcq6TakWfOtVXYifHoTbX+VBwESj3rlY4W+W4mAnvBgAqDjlLFy7bBljmx+vnjnV73lg== + dependencies: + "@smithy/core" "^1.4.2" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.568.0.tgz#fc7fda0bc48bbc75065a9084e41d429037e0e1c5" + integrity sha512-MVTQoZwPnP1Ev5A7LG+KzeU6sCB8BcGkZeDT1z1V5Wt7GPq0MgFQTSSjhImnB9jqRSZkl1079Bt3PbO6lfIS8g== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.568.0.tgz#7f7239bed7c23db7356ebeae5f3b3bda9f751b08" + integrity sha512-gL0NlyI2eW17hnCrh45hZV+qjtBquB+Bckiip9R6DIVRKqYcoILyiFhuOgf2bXeF23gVh6j18pvUvIoTaFWs5w== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.572.0.tgz#b6a447e85a10938a1f038bd7e1096c73229e6699" + integrity sha512-05KzbAp77fEiQXqMeodXeMbT83FOqSyBrfSEMz6U8uBXeJCy8zPUjN3acqcbG55/HNJHUvg1cftqzy+fUz71gA== + dependencies: + "@aws-sdk/credential-provider-env" "3.568.0" + "@aws-sdk/credential-provider-process" "3.572.0" + "@aws-sdk/credential-provider-sso" "3.572.0" + "@aws-sdk/credential-provider-web-identity" "3.568.0" + "@aws-sdk/types" "3.567.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.572.0.tgz#dbb1d26a8a2c18c52f8067f6c6371ee850c1fb05" + integrity sha512-anlYZnpmVkfp9Gan+LcEkQvmRf/m0KcbR11th8sBEyI5lxMaHKXhnAtC/hEGT7e3L6rgNOrFYTPuSvllITD/Pg== + dependencies: + "@aws-sdk/credential-provider-env" "3.568.0" + "@aws-sdk/credential-provider-http" "3.568.0" + "@aws-sdk/credential-provider-ini" "3.572.0" + "@aws-sdk/credential-provider-process" "3.572.0" + "@aws-sdk/credential-provider-sso" "3.572.0" + "@aws-sdk/credential-provider-web-identity" "3.568.0" + "@aws-sdk/types" "3.567.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.572.0.tgz#6054c37721d44b3e855b41f4ad8e3dd73f84e6cf" + integrity sha512-hXcOytf0BadSm/MMy7MV8mmY0+Jv3mkavsHNBx0R82hw5ollD0I3JyOAaCtdUpztF0I72F8K+q8SpJQZ+EwArw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.572.0.tgz#d0fe8122538fc498e9d4f797dfe99eed5bfc7443" + integrity sha512-iIlnpJiDXFp3XC4hJNSiNurnU24mr3iLB3HoNa9efr944bo6XBl9FQdk3NssIkqzSmgyoB2CEUx/daBHz4XSow== + dependencies: + "@aws-sdk/client-sso" "3.572.0" + "@aws-sdk/token-providers" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.568.0.tgz#b4e7958dc92a6cbbf5e9fd065cecd76573d4b70f" + integrity sha512-ZJSmTmoIdg6WqAULjYzaJ3XcbgBzVy36lir6Y0UBMRGaxDgos1AARuX6EcYzXOl+ksLvxt/xMQ+3aYh1LWfKSw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.568.0.tgz#790c0943cc097d3a83665131bc9e0743598cc6ca" + integrity sha512-uc/nbSpXv64ct/wV3Ksz0/bXAsEtXuoZu5J9FTcFnM7c2MSofa0YQrtrJ8cG65uGbdeiFoJwPA048BTG/ilhCA== + dependencies: + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.572.0.tgz#91df3b88a0a109450db84577609ed19520dfff38" + integrity sha512-+NKWVK295rOEANU/ohqEfNjkcEdZao7z6HxkMXX4gu4mDpSsVU8WhYr5hp5k3PUhtaiPU8M1rdfQBrZQc4uttw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.572.0.tgz#639ee54f838a5382a69f07351cd783488b6ad89b" + integrity sha512-ysblGDRn1yy8TlKUrwhnFbl3RuMfbVW1rbtePClEYpC/1u9MsqPmm/fmWJJGKat7NclnsgpQyfSQ64DCuaEedg== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.567.0" + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.567.0.tgz#52f278234458ec3035e9534fee582c95a8fec4f7" + integrity sha512-zQHHj2N3in9duKghH7AuRNrOMLnKhW6lnmb7dznou068DJtDr76w475sHp2TF0XELsOGENbbBsOlN/S5QBFBVQ== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.567.0.tgz#c469e745a3fa146dd29d0024a9f4d2a498985822" + integrity sha512-XiGTH4VxrJ5fj6zeF6UL5U5EuJwLqj9bHW5pB+EKfw0pmbnyqfRdYNt46v4GsQql2iVOq1Z/Fiv754nIItBI/A== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.568.0.tgz#aeb85cc8f7da431442d0f5914f3a3e262eb55a09" + integrity sha512-BinH72RG7K3DHHC1/tCulocFv+ZlQ9SrPF9zYT0T1OT95JXuHhB7fH8gEABrc6DAtOdJJh2fgxQjPy5tzPtsrA== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.567.0.tgz#95d91f071b57fb5245d522db70df1652275f06ac" + integrity sha512-rFk3QhdT4IL6O/UWHmNdjJiURutBCy+ogGqaNHf/RELxgXH3KmYorLwCe0eFb5hq8f6vr3zl4/iH7YtsUOuo1w== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.572.0.tgz#62534ecbfc55d91fcb768b97bb14f73577c3b00e" + integrity sha512-ygQL1G2hWoJXkUGL/Xr5q9ojXCH8hgt/oKsxJtc5U8ZXw3SRlL6pCVE7+aiD0l8mgIGbW0vrL08Oc/jYWlakdw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.572.0.tgz#d3c648e3a280774115003d7ea07860f80f79a19d" + integrity sha512-/pEVgHnf8LsTG0hu9yqqvmLMknlKO5c19NM3J9qTWGLPfySi8tWrFuREAFKAxqJFgDw1IdFWd+dXIkodpbGwew== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.567.0.tgz#0a425182d940f963b34146b22dc2872cb21c41e4" + integrity sha512-lhpBwFi3Tcw+jlOdaCsg3lCAg4oOSJB00bW/aLTFeZWutwi9VexMmsddZllx99lN+LDeCjryNyVd2TCRCKwYhQ== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.572.0.tgz#e629083356e3ea1303544240be82e2784d768984" + integrity sha512-R4bBbLp1ywtF1kJoOX1juDMztKPWeQHNj6XuTvtruFDn1RdfnBlbM3+9rguRfH5s4V+xfl8SSWchnyo2cI00xg== + dependencies: + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.572.0.tgz#51a4485bf1b1c3a154fe96e8b9fc0a1e80240fef" + integrity sha512-xkZMIxek44F4YW5r9otD1O5Y/kDkgAb6JNJePkP1qPVojrkCmin3OFYAOZgGm+T4DZAQ5rWhpaqTAWmnRumYfw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.572.0.tgz#0d50b39bbe715ae65dd3954a14df09d9c22fb04d" + integrity sha512-FD6FIi8py1ZAR53NjD2VXKDvvQUhhZu7CDUfC9gjAa7JDtv+rJvM9ZuoiQjaDnzzqYxTr4pKqqjLsd6+8BCSWA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.572.0.tgz#b63ef02f1700057e9f4532365cd098699b0f8328" + integrity sha512-IkSu8p32tQZhKqwmfLZLGfYwNhsS/HUQBLnDMHJlr9VifmDqlTurcr+DwMCaMimuFhcLeb45vqTymKf/ro/OBw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.567.0", "@aws-sdk/types@^3.222.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.567.0.tgz#b2dc88e154140b1ff87e94f63c97447bdb1c1738" + integrity sha512-JBznu45cdgQb8+T/Zab7WpBmfEAh77gsk99xuF4biIb2Sw1mdseONdoGDjEJX57a25TzIv/WUJ2oABWumckz1A== + dependencies: + "@smithy/types" "^2.12.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.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.572.0.tgz#41a42cbeb6744f5cf0b983c1b9dd958cb0bd66e0" + integrity sha512-AIEC7ItIWBqkJLtqcSd0HG8tvdh3zVwqnKPHNrcfFay0Xonqx3p/qTCDwGosh5CM5hDGzyOSRA5PkacEDBTz9w== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + "@smithy/util-endpoints" "^1.2.0" + 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.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.567.0.tgz#1ef37a87b28155274d62e31c1ac5c1c043dcd0b3" + integrity sha512-cqP0uXtZ7m7hRysf3fRyJwcY1jCgQTpJy7BHB5VpsE7DXlXHD5+Ur5L42CY7UrRPrB6lc6YGFqaAOs5ghMcLyA== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.568.0.tgz#8bfb81b23d4947462f1e49c70187b85e7cd3837a" + integrity sha512-NVoZoLnKF+eXPBvXg+KqixgJkPSrerR6Gqmbjwqbv14Ini+0KNKB0/MXas1mDGvvEgtNkHI/Cb9zlJ3KXpti2A== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.567.0.tgz#8dad7461955a8f8458593973b31b3457ea5ad887" + integrity sha512-Db25jK9sZdGa7PEQTdm60YauUVbeYGsSEMQOHGP6ifbXfCknqgkPgWV16DqAKJUsbII0xgkJ9LpppkmYal3K/g== + dependencies: + "@smithy/types" "^2.12.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.55" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.55.tgz#fa3537a9255c2c60d3b4c36b0b2fa25a07f78a5f" + integrity sha512-IYY14D7wSR/lHP3adExvBahynnpcbYubHQKKzmirNq1LVSGaLMtYdPKaf9cwlvZk0hejNwTjP1HF0yF0CehIDA== + dependencies: + "@aws-sdk/client-s3" "^3.400.0" + "@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" + +"@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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" + integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" + integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== + dependencies: + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" + integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" + integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/core@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" + integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" + integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" + integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" + integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" + integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" + integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" + integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== + dependencies: + "@smithy/eventstream-codec" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" + integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" + integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== + dependencies: + "@smithy/chunked-blob-reader" "^2.2.0" + "@smithy/chunked-blob-reader-native" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/hash-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" + integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" + integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" + integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== + dependencies: + "@smithy/types" "^2.12.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/md5-js@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" + integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" + integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" + integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== + dependencies: + "@smithy/middleware-serde" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/middleware-retry@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" + integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/service-error-classification" "^2.1.5" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" + integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" + integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" + integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" + integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/property-provider@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" + integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" + integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" + integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-uri-escape" "^2.2.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" + integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" + integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== + dependencies: + "@smithy/types" "^2.12.0" + +"@smithy/shared-ini-file-loader@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" + integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz#c30dd4028ae50c607db99459981cce8cdab7a3fd" + integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-uri-escape" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" + integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@smithy/types@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" + integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== + dependencies: + "@smithy/querystring-parser" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-base64@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" + integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" + integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" + integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== + 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-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" + integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" + integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" + integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== + dependencies: + "@smithy/config-resolver" "^2.2.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" + integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" + integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" + integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-retry@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" + integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== + dependencies: + "@smithy/service-error-classification" "^2.1.5" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-stream@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" + integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== + dependencies: + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" + integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" + integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/types" "^2.12.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.12.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.11.tgz#c4ef00d3507000d17690643278a60dc55a9dc9be" + integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw== + 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.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.33.tgz#98cd286a1b8a5e11aa06623210240bcc28e95c48" + integrity sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A== + 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.11.9" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +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.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + 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.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + 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.12.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.1.tgz#517ff6d66d4fd5433e38e903051da3e57c87ff37" + integrity sha512-j6wcVoZf06nqEcBbDWkKg8Fp895SS96dSnTCjiXT+8vt2o02raTn4Lo9ERUuIVU5bAjoPYeA+7ytQFexFmLuVw== + 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.5.0" + +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.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + 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.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.10.2" + +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.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +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== + +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@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + 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.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + +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.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.1.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.0.tgz#b545f84af94e567386770159302ca113469c80b8" + integrity sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig== + +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== + +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" + +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.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== + 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.11.5" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" + integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== + 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== + +semver@^7.5.4: + version "7.6.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.1.tgz#60bfe090bf907a25aa8119a72b9f90ef7ca281b2" + integrity sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA== + +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.11.1, 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.3.1, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +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.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + +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== + +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.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" + integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + +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.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +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 2e817a93b1088677b38e5c74c8fe45ce385cc822 Mon Sep 17 00:00:00 2001 From: galen Date: Thu, 9 May 2024 12:30:13 +0700 Subject: [PATCH 0497/1590] chore: remove yarn lock --- yarn.lock | 2378 ----------------------------------------------------- 1 file changed, 2378 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index f632e4f834..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2378 +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@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@^3.400.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.572.0.tgz#2ef0882029a5f621e11e2d3ce685381f0781bf1b" - integrity sha512-YLtJRVZN+ktOaseWeTtthmimRQoWxygdzRPFlb1HpDPX+akBrGkL7Mz69onpXKfqm9Loz3diUXHqKfpxRX9Pog== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sso-oidc" "3.572.0" - "@aws-sdk/client-sts" "3.572.0" - "@aws-sdk/core" "3.572.0" - "@aws-sdk/credential-provider-node" "3.572.0" - "@aws-sdk/middleware-bucket-endpoint" "3.568.0" - "@aws-sdk/middleware-expect-continue" "3.572.0" - "@aws-sdk/middleware-flexible-checksums" "3.572.0" - "@aws-sdk/middleware-host-header" "3.567.0" - "@aws-sdk/middleware-location-constraint" "3.567.0" - "@aws-sdk/middleware-logger" "3.568.0" - "@aws-sdk/middleware-recursion-detection" "3.567.0" - "@aws-sdk/middleware-sdk-s3" "3.572.0" - "@aws-sdk/middleware-signing" "3.572.0" - "@aws-sdk/middleware-ssec" "3.567.0" - "@aws-sdk/middleware-user-agent" "3.572.0" - "@aws-sdk/region-config-resolver" "3.572.0" - "@aws-sdk/signature-v4-multi-region" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-endpoints" "3.572.0" - "@aws-sdk/util-user-agent-browser" "3.567.0" - "@aws-sdk/util-user-agent-node" "3.568.0" - "@aws-sdk/xml-builder" "3.567.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/eventstream-serde-browser" "^2.2.0" - "@smithy/eventstream-serde-config-resolver" "^2.2.0" - "@smithy/eventstream-serde-node" "^2.2.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-blob-browser" "^2.2.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/hash-stream-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/md5-js" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-stream" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - "@smithy/util-waiter" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.572.0.tgz#0abe3282c0900f0641770a928d31221a06df494d" - integrity sha512-S6C/S6xYesDakEuzYvlY1DMMKLtKQxdbbygq3hfeG2R0jUt9KpRLsQXK8qrBuVCKa3WcnjN/30hp4g/iUWFU/w== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.572.0" - "@aws-sdk/core" "3.572.0" - "@aws-sdk/credential-provider-node" "3.572.0" - "@aws-sdk/middleware-host-header" "3.567.0" - "@aws-sdk/middleware-logger" "3.568.0" - "@aws-sdk/middleware-recursion-detection" "3.567.0" - "@aws-sdk/middleware-user-agent" "3.572.0" - "@aws-sdk/region-config-resolver" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-endpoints" "3.572.0" - "@aws-sdk/util-user-agent-browser" "3.567.0" - "@aws-sdk/util-user-agent-node" "3.568.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.572.0.tgz#d686db985b4c430dbfa6854c8fa1c17de2c3d7ac" - integrity sha512-S+xhScao5MD79AkrcHmFpEDk+CgoiuB/31WFcTcnrTio5TOUONAaT0QyscOIwRp7BZ7Aez7TBM+loTteJ+TQvg== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.572.0" - "@aws-sdk/middleware-host-header" "3.567.0" - "@aws-sdk/middleware-logger" "3.568.0" - "@aws-sdk/middleware-recursion-detection" "3.567.0" - "@aws-sdk/middleware-user-agent" "3.572.0" - "@aws-sdk/region-config-resolver" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-endpoints" "3.572.0" - "@aws-sdk/util-user-agent-browser" "3.567.0" - "@aws-sdk/util-user-agent-node" "3.568.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.572.0.tgz#75437254cb314a0a0cdb7b28887d502442167408" - integrity sha512-jCQuH2qkbWoSY4wckLSfzf3OPh7zc7ZckEbIGGVUQar/JVff6EIbpQ+uNG29DDEOpdPPd8rrJsVuUlA/nvJdXA== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sso-oidc" "3.572.0" - "@aws-sdk/core" "3.572.0" - "@aws-sdk/credential-provider-node" "3.572.0" - "@aws-sdk/middleware-host-header" "3.567.0" - "@aws-sdk/middleware-logger" "3.568.0" - "@aws-sdk/middleware-recursion-detection" "3.567.0" - "@aws-sdk/middleware-user-agent" "3.572.0" - "@aws-sdk/region-config-resolver" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-endpoints" "3.572.0" - "@aws-sdk/util-user-agent-browser" "3.567.0" - "@aws-sdk/util-user-agent-node" "3.568.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.572.0.tgz#875cbd9e2ca6b78a3c2663cf67aed24e6b143667" - integrity sha512-DBmf94qfN0dfaLl5EnNcq6TakWfOtVXYifHoTbX+VBwESj3rlY4W+W4mAnvBgAqDjlLFy7bBljmx+vnjnV73lg== - dependencies: - "@smithy/core" "^1.4.2" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.568.0.tgz#fc7fda0bc48bbc75065a9084e41d429037e0e1c5" - integrity sha512-MVTQoZwPnP1Ev5A7LG+KzeU6sCB8BcGkZeDT1z1V5Wt7GPq0MgFQTSSjhImnB9jqRSZkl1079Bt3PbO6lfIS8g== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.568.0.tgz#7f7239bed7c23db7356ebeae5f3b3bda9f751b08" - integrity sha512-gL0NlyI2eW17hnCrh45hZV+qjtBquB+Bckiip9R6DIVRKqYcoILyiFhuOgf2bXeF23gVh6j18pvUvIoTaFWs5w== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.572.0.tgz#b6a447e85a10938a1f038bd7e1096c73229e6699" - integrity sha512-05KzbAp77fEiQXqMeodXeMbT83FOqSyBrfSEMz6U8uBXeJCy8zPUjN3acqcbG55/HNJHUvg1cftqzy+fUz71gA== - dependencies: - "@aws-sdk/credential-provider-env" "3.568.0" - "@aws-sdk/credential-provider-process" "3.572.0" - "@aws-sdk/credential-provider-sso" "3.572.0" - "@aws-sdk/credential-provider-web-identity" "3.568.0" - "@aws-sdk/types" "3.567.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.572.0.tgz#dbb1d26a8a2c18c52f8067f6c6371ee850c1fb05" - integrity sha512-anlYZnpmVkfp9Gan+LcEkQvmRf/m0KcbR11th8sBEyI5lxMaHKXhnAtC/hEGT7e3L6rgNOrFYTPuSvllITD/Pg== - dependencies: - "@aws-sdk/credential-provider-env" "3.568.0" - "@aws-sdk/credential-provider-http" "3.568.0" - "@aws-sdk/credential-provider-ini" "3.572.0" - "@aws-sdk/credential-provider-process" "3.572.0" - "@aws-sdk/credential-provider-sso" "3.572.0" - "@aws-sdk/credential-provider-web-identity" "3.568.0" - "@aws-sdk/types" "3.567.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.572.0.tgz#6054c37721d44b3e855b41f4ad8e3dd73f84e6cf" - integrity sha512-hXcOytf0BadSm/MMy7MV8mmY0+Jv3mkavsHNBx0R82hw5ollD0I3JyOAaCtdUpztF0I72F8K+q8SpJQZ+EwArw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.572.0.tgz#d0fe8122538fc498e9d4f797dfe99eed5bfc7443" - integrity sha512-iIlnpJiDXFp3XC4hJNSiNurnU24mr3iLB3HoNa9efr944bo6XBl9FQdk3NssIkqzSmgyoB2CEUx/daBHz4XSow== - dependencies: - "@aws-sdk/client-sso" "3.572.0" - "@aws-sdk/token-providers" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.568.0.tgz#b4e7958dc92a6cbbf5e9fd065cecd76573d4b70f" - integrity sha512-ZJSmTmoIdg6WqAULjYzaJ3XcbgBzVy36lir6Y0UBMRGaxDgos1AARuX6EcYzXOl+ksLvxt/xMQ+3aYh1LWfKSw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.568.0.tgz#790c0943cc097d3a83665131bc9e0743598cc6ca" - integrity sha512-uc/nbSpXv64ct/wV3Ksz0/bXAsEtXuoZu5J9FTcFnM7c2MSofa0YQrtrJ8cG65uGbdeiFoJwPA048BTG/ilhCA== - dependencies: - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.572.0.tgz#91df3b88a0a109450db84577609ed19520dfff38" - integrity sha512-+NKWVK295rOEANU/ohqEfNjkcEdZao7z6HxkMXX4gu4mDpSsVU8WhYr5hp5k3PUhtaiPU8M1rdfQBrZQc4uttw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.572.0.tgz#639ee54f838a5382a69f07351cd783488b6ad89b" - integrity sha512-ysblGDRn1yy8TlKUrwhnFbl3RuMfbVW1rbtePClEYpC/1u9MsqPmm/fmWJJGKat7NclnsgpQyfSQ64DCuaEedg== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.567.0" - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.567.0.tgz#52f278234458ec3035e9534fee582c95a8fec4f7" - integrity sha512-zQHHj2N3in9duKghH7AuRNrOMLnKhW6lnmb7dznou068DJtDr76w475sHp2TF0XELsOGENbbBsOlN/S5QBFBVQ== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.567.0.tgz#c469e745a3fa146dd29d0024a9f4d2a498985822" - integrity sha512-XiGTH4VxrJ5fj6zeF6UL5U5EuJwLqj9bHW5pB+EKfw0pmbnyqfRdYNt46v4GsQql2iVOq1Z/Fiv754nIItBI/A== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.568.0.tgz#aeb85cc8f7da431442d0f5914f3a3e262eb55a09" - integrity sha512-BinH72RG7K3DHHC1/tCulocFv+ZlQ9SrPF9zYT0T1OT95JXuHhB7fH8gEABrc6DAtOdJJh2fgxQjPy5tzPtsrA== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.567.0.tgz#95d91f071b57fb5245d522db70df1652275f06ac" - integrity sha512-rFk3QhdT4IL6O/UWHmNdjJiURutBCy+ogGqaNHf/RELxgXH3KmYorLwCe0eFb5hq8f6vr3zl4/iH7YtsUOuo1w== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.572.0.tgz#62534ecbfc55d91fcb768b97bb14f73577c3b00e" - integrity sha512-ygQL1G2hWoJXkUGL/Xr5q9ojXCH8hgt/oKsxJtc5U8ZXw3SRlL6pCVE7+aiD0l8mgIGbW0vrL08Oc/jYWlakdw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.572.0.tgz#d3c648e3a280774115003d7ea07860f80f79a19d" - integrity sha512-/pEVgHnf8LsTG0hu9yqqvmLMknlKO5c19NM3J9qTWGLPfySi8tWrFuREAFKAxqJFgDw1IdFWd+dXIkodpbGwew== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.567.0.tgz#0a425182d940f963b34146b22dc2872cb21c41e4" - integrity sha512-lhpBwFi3Tcw+jlOdaCsg3lCAg4oOSJB00bW/aLTFeZWutwi9VexMmsddZllx99lN+LDeCjryNyVd2TCRCKwYhQ== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.572.0.tgz#e629083356e3ea1303544240be82e2784d768984" - integrity sha512-R4bBbLp1ywtF1kJoOX1juDMztKPWeQHNj6XuTvtruFDn1RdfnBlbM3+9rguRfH5s4V+xfl8SSWchnyo2cI00xg== - dependencies: - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-endpoints" "3.572.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.572.0.tgz#51a4485bf1b1c3a154fe96e8b9fc0a1e80240fef" - integrity sha512-xkZMIxek44F4YW5r9otD1O5Y/kDkgAb6JNJePkP1qPVojrkCmin3OFYAOZgGm+T4DZAQ5rWhpaqTAWmnRumYfw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.572.0.tgz#0d50b39bbe715ae65dd3954a14df09d9c22fb04d" - integrity sha512-FD6FIi8py1ZAR53NjD2VXKDvvQUhhZu7CDUfC9gjAa7JDtv+rJvM9ZuoiQjaDnzzqYxTr4pKqqjLsd6+8BCSWA== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.572.0.tgz#b63ef02f1700057e9f4532365cd098699b0f8328" - integrity sha512-IkSu8p32tQZhKqwmfLZLGfYwNhsS/HUQBLnDMHJlr9VifmDqlTurcr+DwMCaMimuFhcLeb45vqTymKf/ro/OBw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.567.0", "@aws-sdk/types@^3.222.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.567.0.tgz#b2dc88e154140b1ff87e94f63c97447bdb1c1738" - integrity sha512-JBznu45cdgQb8+T/Zab7WpBmfEAh77gsk99xuF4biIb2Sw1mdseONdoGDjEJX57a25TzIv/WUJ2oABWumckz1A== - dependencies: - "@smithy/types" "^2.12.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.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.572.0.tgz#41a42cbeb6744f5cf0b983c1b9dd958cb0bd66e0" - integrity sha512-AIEC7ItIWBqkJLtqcSd0HG8tvdh3zVwqnKPHNrcfFay0Xonqx3p/qTCDwGosh5CM5hDGzyOSRA5PkacEDBTz9w== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/types" "^2.12.0" - "@smithy/util-endpoints" "^1.2.0" - 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.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.567.0.tgz#1ef37a87b28155274d62e31c1ac5c1c043dcd0b3" - integrity sha512-cqP0uXtZ7m7hRysf3fRyJwcY1jCgQTpJy7BHB5VpsE7DXlXHD5+Ur5L42CY7UrRPrB6lc6YGFqaAOs5ghMcLyA== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.568.0.tgz#8bfb81b23d4947462f1e49c70187b85e7cd3837a" - integrity sha512-NVoZoLnKF+eXPBvXg+KqixgJkPSrerR6Gqmbjwqbv14Ini+0KNKB0/MXas1mDGvvEgtNkHI/Cb9zlJ3KXpti2A== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.567.0.tgz#8dad7461955a8f8458593973b31b3457ea5ad887" - integrity sha512-Db25jK9sZdGa7PEQTdm60YauUVbeYGsSEMQOHGP6ifbXfCknqgkPgWV16DqAKJUsbII0xgkJ9LpppkmYal3K/g== - dependencies: - "@smithy/types" "^2.12.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.55" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.55.tgz#fa3537a9255c2c60d3b4c36b0b2fa25a07f78a5f" - integrity sha512-IYY14D7wSR/lHP3adExvBahynnpcbYubHQKKzmirNq1LVSGaLMtYdPKaf9cwlvZk0hejNwTjP1HF0yF0CehIDA== - dependencies: - "@aws-sdk/client-s3" "^3.400.0" - "@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" - -"@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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" - integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader-native@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" - integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== - dependencies: - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" - integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" - integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/core@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" - integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" - integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" - integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" - integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" - integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" - integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" - integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== - dependencies: - "@smithy/eventstream-codec" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" - integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" - integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== - dependencies: - "@smithy/chunked-blob-reader" "^2.2.0" - "@smithy/chunked-blob-reader-native" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/hash-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" - integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" - integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" - integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== - dependencies: - "@smithy/types" "^2.12.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/md5-js@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" - integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" - integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" - integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== - dependencies: - "@smithy/middleware-serde" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/middleware-retry@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" - integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/service-error-classification" "^2.1.5" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" - integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" - integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" - integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" - integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/property-provider@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" - integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" - integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" - integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-uri-escape" "^2.2.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" - integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" - integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== - dependencies: - "@smithy/types" "^2.12.0" - -"@smithy/shared-ini-file-loader@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" - integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz#c30dd4028ae50c607db99459981cce8cdab7a3fd" - integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== - dependencies: - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-uri-escape" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" - integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@smithy/types@^2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" - integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" - integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== - dependencies: - "@smithy/querystring-parser" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-base64@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" - integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== - dependencies: - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" - integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" - integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== - 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-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" - integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" - integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" - integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== - dependencies: - "@smithy/config-resolver" "^2.2.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" - integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" - integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" - integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-retry@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" - integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== - dependencies: - "@smithy/service-error-classification" "^2.1.5" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-stream@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" - integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== - dependencies: - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" - integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" - integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/types" "^2.12.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.12.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.11.tgz#c4ef00d3507000d17690643278a60dc55a9dc9be" - integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw== - 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.33" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.33.tgz#98cd286a1b8a5e11aa06623210240bcc28e95c48" - integrity sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A== - 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.11.9" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" - integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -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.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - 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.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - 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.12.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.1.tgz#517ff6d66d4fd5433e38e903051da3e57c87ff37" - integrity sha512-j6wcVoZf06nqEcBbDWkKg8Fp895SS96dSnTCjiXT+8vt2o02raTn4Lo9ERUuIVU5bAjoPYeA+7ytQFexFmLuVw== - 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.5.0" - -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.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - 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.3.12" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" - integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.6" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.10.2" - -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.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -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== - -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@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - 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.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== - -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.1: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.1.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.0.tgz#b545f84af94e567386770159302ca113469c80b8" - integrity sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig== - -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== - -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" - -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.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" - integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== - 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.11.5" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" - integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== - 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== - -semver@^7.5.4: - version "7.6.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.1.tgz#60bfe090bf907a25aa8119a72b9f90ef7ca281b2" - integrity sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA== - -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.11.1, 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.3.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -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.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - -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== - -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.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -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.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -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 89c8acf1e363d4197765d9ddf93662524b2267f0 Mon Sep 17 00:00:00 2001 From: Digtyarenk0 Date: Thu, 9 May 2024 11:44:02 +0200 Subject: [PATCH 0498/1590] fix parsing open position event --- dexs/primex-finance/index.ts | 92 ++++++--- dexs/primex-finance/utils.ts | 368 +++-------------------------------- 2 files changed, 87 insertions(+), 373 deletions(-) diff --git a/dexs/primex-finance/index.ts b/dexs/primex-finance/index.ts index 19d3ea29ec..12e1d37db2 100644 --- a/dexs/primex-finance/index.ts +++ b/dexs/primex-finance/index.ts @@ -1,37 +1,69 @@ -import { ChainBlocks, FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types" -import { config, } from "./utils"; +import { + ChainBlocks, + FetchOptions, + FetchResultVolume, + SimpleAdapter, +} from "../../adapters/types"; +import { config, topics } from "./utils"; const abi = { - "SpotSwap": "event SpotSwap(address indexed trader, address indexed receiver, address tokenA, address tokenB, uint256 amountSold, uint256 amountBought)", - "OpenPosition": "event OpenPosition(uint256 indexed positionId, address indexed trader, address indexed openedBy, (uint256 id, uint256 scaledDebtAmount, address bucket, address soldAsset, uint256 depositAmountInSoldAsset, address positionAsset, uint256 positionAmount, address trader, uint256 openBorrowIndex, uint256 createdAt, uint256 updatedConditionsAt, bytes extraParams) position, address feeToken, uint256 protocolFee, uint256 entryPrice, uint256 leverage, (uint256 managerType, bytes params)[] closeConditions)", - "ClosePosition": "event ClosePosition(uint256 indexed positionId, address indexed trader, address indexed closedBy, address bucketAddress, address soldAsset, address positionAsset, uint256 decreasePositionAmount, int256 profit, uint256 positionDebt, uint256 amountOut, uint8 reason)", - "PartialClosePosition": "event PartialClosePosition(uint256 indexed positionId, address indexed trader, address bucketAddress, address soldAsset, address positionAsset, uint256 decreasePositionAmount, uint256 depositedAmount, uint256 scaledDebtAmount, int256 profit, uint256 positionDebt, uint256 amountOut)" -} + SpotSwap: + "event SpotSwap(address indexed trader, address indexed receiver, address tokenA, address tokenB, uint256 amountSold, uint256 amountBought)", + OpenPosition: + "event OpenPosition(uint256 indexed positionId, address indexed trader, address indexed openedBy, (uint256 id, uint256 scaledDebtAmount, address bucket, address soldAsset, uint256 depositAmountInSoldAsset, address positionAsset, uint256 positionAmount, address trader, uint256 openBorrowIndex, uint256 createdAt, uint256 updatedConditionsAt, bytes extraParams) position, address feeToken, uint256 protocolFee, uint256 entryPrice, uint256 leverage, (uint256 managerType, bytes params)[] closeConditions)", + ClosePosition: + "event ClosePosition(uint256 indexed positionId, address indexed trader, address indexed closedBy, address bucketAddress, address soldAsset, address positionAsset, uint256 decreasePositionAmount, int256 profit, uint256 positionDebt, uint256 amountOut, uint8 reason)", + PartialClosePosition: + "event PartialClosePosition(uint256 indexed positionId, address indexed trader, address bucketAddress, address soldAsset, address positionAsset, uint256 decreasePositionAmount, uint256 depositedAmount, uint256 scaledDebtAmount, int256 profit, uint256 positionDebt, uint256 amountOut)", +}; -const fetch = (chain: string) => async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, }: FetchOptions): Promise => { - const { swapManager, positionManager, batchManager } = config[chain]; - const dailyVolume = createBalances() +const fetch = + (chain: string) => + async ( + timestamp: number, + _: ChainBlocks, + { createBalances, getLogs }: FetchOptions + ): Promise => { + const { swapManager, positionManager, batchManager } = config[chain]; + const dailyVolume = createBalances(); - const logsConfig = [ - { targets: swapManager, eventAbi: abi.SpotSwap }, - { targets: positionManager, eventAbi: abi.OpenPosition }, - { targets: positionManager, eventAbi: abi.ClosePosition }, - { targets: positionManager, eventAbi: abi.PartialClosePosition }, - { targets: batchManager, eventAbi: abi.ClosePosition }, - ] + const logsConfig = [ + { targets: swapManager, eventAbi: abi.SpotSwap }, + { + targets: positionManager, + eventAbi: abi.OpenPosition, + topic: topics.openPosition, + }, + { targets: positionManager, eventAbi: abi.ClosePosition }, + { targets: positionManager, eventAbi: abi.PartialClosePosition }, + { targets: batchManager, eventAbi: abi.ClosePosition }, + ]; - const [swapLogs, openPositionLogs, closePositionLogs, partiallyClosePositionLogs, closePositionBatchLogs] = await Promise.all(logsConfig.map(async (config) => getLogs(config))) + const [ + swapLogs, + openPositionLogs, + closePositionLogs, + partiallyClosePositionLogs, + closePositionBatchLogs, + ] = await Promise.all(logsConfig.map(async (config) => getLogs(config))); - swapLogs.forEach((e: any) => dailyVolume.add(e.tokenA, e.amountSold)) - openPositionLogs.forEach((e: any) => dailyVolume.add(e.position.soldAsset, e.position.amountSold * e.leverage)) - closePositionLogs.forEach((e: any) => dailyVolume.add(e.soldAsset, e.amountOut)) - partiallyClosePositionLogs.forEach((e: any) => dailyVolume.add(e.soldAsset, e.amountOut)) - closePositionBatchLogs.forEach((e: any) => dailyVolume.add(e.soldAsset, e.amountOut)) + swapLogs.forEach((e: any) => dailyVolume.add(e.tokenA, e.amountSold)); + openPositionLogs.forEach((e: any) => + dailyVolume.add(e.position.positionAsset, e.position.positionAmount) + ); + closePositionLogs.forEach((e: any) => + dailyVolume.add(e.soldAsset, e.amountOut) + ); + partiallyClosePositionLogs.forEach((e: any) => + dailyVolume.add(e.soldAsset, e.amountOut) + ); + closePositionBatchLogs.forEach((e: any) => + dailyVolume.add(e.soldAsset, e.amountOut) + ); - return { dailyVolume: dailyVolume, timestamp, } + return { dailyVolume: dailyVolume, timestamp }; + }; - -} const adapters: SimpleAdapter = { adapter: Object.keys(config).reduce((acc, chain) => { return { @@ -39,8 +71,8 @@ const adapters: SimpleAdapter = { [chain]: { fetch: fetch(chain), start: config[chain].start, - } - } - }, {}) -} + }, + }; + }, {}), +}; export default adapters; diff --git a/dexs/primex-finance/utils.ts b/dexs/primex-finance/utils.ts index 1f0c98e769..359eea20f4 100644 --- a/dexs/primex-finance/utils.ts +++ b/dexs/primex-finance/utils.ts @@ -9,357 +9,39 @@ interface ChainConfig { const config: { [chain: string]: ChainConfig } = { [CHAIN.POLYGON]: { - swapManager: ['0x0AaDC2Eae6963ED983d85cbF088b0c294f4c26ff', '0xA0069a14Df3ECd19a38c509757eBc2C2Aaa44992'], - positionManager: ['0x02bcaA4633E466d151b34112608f60A82a4F6035'], - batchManager: ['0xC6B1AF3dEb9E379ccADF2Fa21263a50E91F4776C', '0xc10771D8f5B6Ba702E3a44EC76969f07578F08b7'], + swapManager: [ + "0x0AaDC2Eae6963ED983d85cbF088b0c294f4c26ff", + "0xA0069a14Df3ECd19a38c509757eBc2C2Aaa44992", + ], + positionManager: ["0x02bcaA4633E466d151b34112608f60A82a4F6035"], + batchManager: [ + "0xC6B1AF3dEb9E379ccADF2Fa21263a50E91F4776C", + "0xc10771D8f5B6Ba702E3a44EC76969f07578F08b7", + ], start: 1697587200, }, [CHAIN.ARBITRUM]: { - swapManager: ['0xbE3de856EB22bf6EFA03DD55e65DF22bA212e6Db'], - positionManager: ['0x86890E30cE9E1e13Db5560BbEb435c55567Af1cd'], - batchManager: ['0xF2225a8f90311DaF9e989db1AfFd47617bb69E96'], + swapManager: ["0xbE3de856EB22bf6EFA03DD55e65DF22bA212e6Db"], + positionManager: ["0x86890E30cE9E1e13Db5560BbEb435c55567Af1cd"], + batchManager: ["0xF2225a8f90311DaF9e989db1AfFd47617bb69E96"], start: 1700611200, }, [CHAIN.ETHEREUM]: { - swapManager: ['0xa6d76535e265357187653d4AAd9b362404D42EA8'], - positionManager: ['0x99d63fEA4b3Ef6ca77941df3C5740dAd1586f0B8'], - batchManager: ['0x1da9c104C517C7b4465c8Eef458Da0a6c61835Fe'], + swapManager: ["0xa6d76535e265357187653d4AAd9b362404D42EA8"], + positionManager: ["0x99d63fEA4b3Ef6ca77941df3C5740dAd1586f0B8"], + batchManager: ["0x1da9c104C517C7b4465c8Eef458Da0a6c61835Fe"], start: 1702771200, }, -} +}; const topics = { - swap: '0x5fcf6637f014854f918b233372226c5492e6a5157e517674a8588675550c40c6', - openPosition: '0x3f505465ce78d219c28bcf9bed881a651c4800d1161454b0d5c93225196e7b8e', - partiallyClosePosition: '0xda47f84a849dfb28125ae28a0bf305b75e72bff27796fc4bca36e2f848b0a0e6', - closePosition: '0x4a06c6510972c5a49ff5582d7d8e59f20228038c8cb9ea05d78f02ac7ee40662' -} - -const abi = [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "trader", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "tokenB", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountBought", - "type": "uint256" - } - ], - "name": "SpotSwap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "positionId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "trader", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "openedBy", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "scaledDebtAmount", - "type": "uint256" - }, - { - "internalType": "contract IBucket", - "name": "bucket", - "type": "address" - }, - { - "internalType": "address", - "name": "soldAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "depositAmountInSoldAsset", - "type": "uint256" - }, - { - "internalType": "address", - "name": "positionAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "positionAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "trader", - "type": "address" - }, - { - "internalType": "uint256", - "name": "openBorrowIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "updatedConditionsAt", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraParams", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct PositionLibrary.Position", - "name": "position", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "protocolFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "entryPrice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "leverage", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "managerType", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "params", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct LimitOrderLibrary.Condition[]", - "name": "closeConditions", - "type": "tuple[]" - } - ], - "name": "OpenPosition", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "positionId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "trader", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "closedBy", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "bucketAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "soldAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "positionAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "decreasePositionAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "profit", - "type": "int256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "positionDebt", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum PositionLibrary.CloseReason", - "name": "reason", - "type": "uint8" - } - ], - "name": "ClosePosition", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "positionId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "trader", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "bucketAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "soldAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "positionAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "decreasePositionAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "depositedAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "scaledDebtAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "profit", - "type": "int256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "positionDebt", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "name": "PartialClosePosition", - "type": "event" - } -] + swap: "0x5fcf6637f014854f918b233372226c5492e6a5157e517674a8588675550c40c6", + openPosition: + "0x3f505465ce78d219c28bcf9bed881a651c4800d1161454b0d5c93225196e7b8e", + partiallyClosePosition: + "0xda47f84a849dfb28125ae28a0bf305b75e72bff27796fc4bca36e2f848b0a0e6", + closePosition: + "0x4a06c6510972c5a49ff5582d7d8e59f20228038c8cb9ea05d78f02ac7ee40662", +}; -export { config, topics, abi } \ No newline at end of file +export { config, topics }; From c5840efa65e3475290ba932fa84d50e552f35c00 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 9 May 2024 14:32:45 +0000 Subject: [PATCH 0499/1590] update code --- fees/bitlayer/index.ts | 61 +++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 37 deletions(-) diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts index 12407ad81e..5356e35fd6 100644 --- a/fees/bitlayer/index.ts +++ b/fees/bitlayer/index.ts @@ -1,59 +1,46 @@ import { Adapter, - ChainBlocks, FetchOptions, ProtocolType, } from "../../adapters/types"; import { httpPost } from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; -import { getPrices } from "../../utils/prices"; +import { time } from "console"; -export async function getFeeUSD({ startOfDay }: FetchOptions, url: string) { - startOfDay -= 86400; - const dailyFees = await httpPost(url, { - responseType: "blob", - headers: { - "User-Agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36", - "Content-Type": "text/csv; charset=utf-8", - Accept: "text/csv; charset=utf-8", - origin: url, - }, - }); - const feesToday = dailyFees - .split("\n") - .filter((d: any) => d?.split(",")?.[1]?.slice(1, -1) == startOfDay); +export async function getFeeUSD({ startOfDay, createBalances }: FetchOptions, url: string) { + const dailyFees = createBalances() + const response = await httpPost(url, { + responseType: 'blob', headers: { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36", + "Content-Type": "text/csv; charset=utf-8", + "Accept": "text/csv; charset=utf-8", + "origin": url, + } + }); + const feesToday = response + .split("\n") + .filter((d: any) => d?.split(",")?.[1]?.slice(1, -1) == startOfDay); const gasToken = "coingecko:bitcoin"; - - return Promise.all( - feesToday.map(async (fee: any) => { - const timestamp = Number(fee.split(",")[1].slice(1, -1)); - const prices = await getPrices([gasToken], timestamp); - const value = Number(fee.split(",")[2].slice(1, -2)); - const amountReal = value / 1e18; - return (amountReal * prices[gasToken].price).toString(); - }) - ); + feesToday.forEach((fee: any) => { + const value = Number(fee.split(",")[2].slice(1, -2)); + const amountReal = value / 1e18; + dailyFees.addCGToken(gasToken, amountReal); + }); + return dailyFees; } const adapter: Adapter = { - version: 2, + version: 1, adapter: { [CHAIN.BITLAYER]: { - fetch: async (options: FetchOptions) => { - const feeUSD = await getFeeUSD( - options, - "https://api.btrscan.com/scan/v1/chain/txForDefillama" - ); - const dailyFees = feeUSD.toString(); - + fetch: async (_t: any, _b: any, options: FetchOptions) => { + const url = "https://api.btrscan.com/scan/v1/chain/txForDefillama"; return { timestamp: options.startOfDay, - dailyFees, + dailyFees: (await getFeeUSD(options,url)), }; }, - runAtCurrTime: true, start: 1713089236, }, }, From 1d7eb3f637f0a5ef40ad0b5293e9ada29461b114 Mon Sep 17 00:00:00 2001 From: Kirill Demidov Date: Thu, 9 May 2024 17:37:50 +0300 Subject: [PATCH 0500/1590] update adapter version --- aggregators/rubic/index.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/aggregators/rubic/index.ts b/aggregators/rubic/index.ts index 82587154f5..37f3689eb5 100644 --- a/aggregators/rubic/index.ts +++ b/aggregators/rubic/index.ts @@ -1,5 +1,5 @@ import fetchURL from "../../utils/fetchURL"; -import {FetchResult, SimpleAdapter} from "../../adapters/types"; +import {FetchOptions, FetchResult, SimpleAdapter} from "../../adapters/types"; import {CHAIN} from "../../helpers/chains"; @@ -43,15 +43,15 @@ interface ApiResponce { total_transaction_count: string; } -const fetch = (chain: string) => async (timestamp: number): Promise => { +const fetch = (chain: string) => async (options: FetchOptions): Promise => { const responce: ApiResponce = ( - await fetchURL(`https://api.rubic.exchange/api/stats/defilama_onchain?date=${timestamp}&network=${chain}`) + await fetchURL(`https://api.rubic.exchange/api/stats/defilama_onchain?date=${options.startTimestamp}&network=${chain}`) ); return { dailyVolume: responce?.daily_volume_in_usd || undefined, totalVolume: responce?.total_volume_in_usd || undefined, - timestamp, + timestamp: options.startTimestamp, }; }; @@ -70,6 +70,7 @@ const adapter: SimpleAdapter = { }; }, {}), }, + version: 2 }; export default adapter; From 5b58bd2588a2b4475b492f35daf780bc08750f28 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 9 May 2024 14:52:54 +0000 Subject: [PATCH 0501/1590] fix missing price --- fees/bitlayer/index.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/fees/bitlayer/index.ts b/fees/bitlayer/index.ts index 5356e35fd6..aa45d9f935 100644 --- a/fees/bitlayer/index.ts +++ b/fees/bitlayer/index.ts @@ -19,11 +19,15 @@ export async function getFeeUSD({ startOfDay, createBalances }: FetchOptions, ur }); const feesToday = response .split("\n") - .filter((d: any) => d?.split(",")?.[1]?.slice(1, -1) == startOfDay); - - const gasToken = "coingecko:bitcoin"; + .map((line: any) => { + return { + timestamp: Number((line.split(",")[1] as string)?.replace(/"/g, "")), + value: Number((line.split(",")[2] as string)?.replace(/"/g, "")) + } + }).filter((fee: any) => fee.timestamp === startOfDay) + const gasToken = "bitcoin"; feesToday.forEach((fee: any) => { - const value = Number(fee.split(",")[2].slice(1, -2)); + const value = Number(fee.value); const amountReal = value / 1e18; dailyFees.addCGToken(gasToken, amountReal); }); @@ -36,9 +40,10 @@ const adapter: Adapter = { [CHAIN.BITLAYER]: { fetch: async (_t: any, _b: any, options: FetchOptions) => { const url = "https://api.btrscan.com/scan/v1/chain/txForDefillama"; + const dailyFees = await getFeeUSD(options, url); return { timestamp: options.startOfDay, - dailyFees: (await getFeeUSD(options,url)), + dailyFees: dailyFees, }; }, start: 1713089236, From 0ee014f6a3273d5ca84d68a9995c8ac797221055 Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Thu, 9 May 2024 19:23:11 +0100 Subject: [PATCH 0502/1590] add nuri-v1 and nuri-v2 --- dexs/nuri-exchange-v1/index.ts | 16 ++++++++++++++++ dexs/nuri-exchange-v2/index.ts | 14 ++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 dexs/nuri-exchange-v1/index.ts create mode 100644 dexs/nuri-exchange-v2/index.ts diff --git a/dexs/nuri-exchange-v1/index.ts b/dexs/nuri-exchange-v1/index.ts new file mode 100644 index 0000000000..cd31c681de --- /dev/null +++ b/dexs/nuri-exchange-v1/index.ts @@ -0,0 +1,16 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; + +const FACTORY_ADDRESS = '0xAAA16c016BF556fcD620328f0759252E29b1AB57' + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.SCROLL]: { + fetch: getDexVolumeExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS }), + start: 1714608000, + }, + } +}; + +export default adapter; \ No newline at end of file diff --git a/dexs/nuri-exchange-v2/index.ts b/dexs/nuri-exchange-v2/index.ts new file mode 100644 index 0000000000..5125719eea --- /dev/null +++ b/dexs/nuri-exchange-v2/index.ts @@ -0,0 +1,14 @@ +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter({ + [CHAIN.SCROLL]: "https://api.studio.thegraph.com/query/66247/nuri-cl/version/latest" +}, { + factoriesName: "factories", + dayData: "uniswapDayData", + dailyVolume: "volumeUSD", + totalVolume: "totalVolumeUSD", +}); + +adapters.adapter.scroll.start = 1714608000; +export default adapters; From 322db4e944894d51bc3ea698b4639a2612b01638 Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Thu, 9 May 2024 19:28:51 +0100 Subject: [PATCH 0503/1590] add nuri-v1 and nuri-v2 --- fees/nuri-exchange-v1/index.ts | 16 +++++++ fees/nuri-exchange-v2/bribes.ts | 35 ++++++++++++++ fees/nuri-exchange-v2/index.ts | 85 +++++++++++++++++++++++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 fees/nuri-exchange-v1/index.ts create mode 100644 fees/nuri-exchange-v2/bribes.ts create mode 100644 fees/nuri-exchange-v2/index.ts diff --git a/fees/nuri-exchange-v1/index.ts b/fees/nuri-exchange-v1/index.ts new file mode 100644 index 0000000000..284df52299 --- /dev/null +++ b/fees/nuri-exchange-v1/index.ts @@ -0,0 +1,16 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getDexFeesExports } from "../../helpers/dexVolumeLogs"; + +const FACTORY_ADDRESS = '0xAAA16c016BF556fcD620328f0759252E29b1AB57'; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.SCROLL]: { + fetch: getDexFeesExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS,}), + start: 1714608000, + }, + } +}; + +export default adapter; diff --git a/fees/nuri-exchange-v2/bribes.ts b/fees/nuri-exchange-v2/bribes.ts new file mode 100644 index 0000000000..5aba456d6c --- /dev/null +++ b/fees/nuri-exchange-v2/bribes.ts @@ -0,0 +1,35 @@ +import request from "graphql-request"; +import { Balances } from "@defillama/sdk"; + +interface IBribes { + amount: number; + token: { + id: string; + decimals: number; + }; +} + +export const fees_bribes = async (fromBlock: number, timestamp: number, balances: Balances) => { + const endpoint = 'https://api.studio.thegraph.com/query/66247/nuri-cl/version/latest'; + const graphQuery = ` + query GetBribes($fromBlock: Int!) { + bribes( + where: { timestamp_gte: ${timestamp} } + ) { + amount + token { + id + decimals + } + } + } + `; + + const graphRes: { bribes: IBribes[] } = await request(endpoint, graphQuery, { fromBlock, }); + + const logs_bribes = graphRes.bribes; + + logs_bribes.map((e: IBribes) => { + balances.add(e.token.id, e.amount * Math.pow(10, e.token.decimals)); + }) +}; diff --git a/fees/nuri-exchange-v2/index.ts b/fees/nuri-exchange-v2/index.ts new file mode 100644 index 0000000000..c2677eb6f0 --- /dev/null +++ b/fees/nuri-exchange-v2/index.ts @@ -0,0 +1,85 @@ +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" + +type TStartTime = { + [key: string]: number; +} +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); + bribes.subtract(bribes_delta); + return { + timestamp: toTimestamp, + dailyBribesRevenue: bribes, + }; +}; + +const v2Endpoints = { + [CHAIN.SCROLL]: "https://api.studio.thegraph.com/query/66247/nuri-cl/version/latest", +}; + +const VOLUME_USD = "volumeUSD"; + +const v2Graphs = getGraphDimensions({ + graphUrls: v2Endpoints, + totalVolume: { + factory: "factories", + field: DEFAULT_TOTAL_VOLUME_FIELD, + }, + dailyVolume: { + factory: DEFAULT_DAILY_VOLUME_FACTORY, + field: VOLUME_USD, + }, + feesPercent: { + type: "fees", + HoldersRevenue: 50, + ProtocolRevenue: 5, + SupplySideRevenue: 45, + UserFees: 100, // User fees are 100% of collected fees + Revenue: 50 // Revenue is 100% of collected fees + } +}); +// https://docs.ramses.exchange/ramses-cl-v2/concentrated-liquidity/fee-distribution +const methodology = { + UserFees: "User pays 0.3% fees on each swap.", + ProtocolRevenue: "Revenue going to the protocol. 5% of collected fees. (is probably right because the distribution is dynamic.)", + HoldersRevenue: "User fees are distributed among holders. 75% of collected fees. (is probably right because the distribution is dynamic.)", + SupplySideRevenue: "20% of collected fees are distributed among LPs. (is probably right because the distribution is dynamic.)" +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.SCROLL]: { + fetch: async (options: FetchOptions) => { + const v2Result = await v2Graphs(CHAIN.SCROLL)(options) + const bribesResult = await getBribes(options); + v2Result.dailyBribesRevenue = bribesResult.dailyBribesRevenue; + + return v2Result; + }, + start: startTimeV2[CHAIN.SCROLL], + meta: { + methodology: { + ...methodology, + UserFees: "User pays 0.05%, 0.30%, or 1% on each swap.", + }, + }, + }, + }, +}; + +export default adapter; From 44229f5cecb5521b20e130d1a8a18f91aa8a9365 Mon Sep 17 00:00:00 2001 From: mrben1 Date: Fri, 10 May 2024 14:10:58 +1200 Subject: [PATCH 0504/1590] initial commit --- dexs/apestore/index.ts | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 dexs/apestore/index.ts diff --git a/dexs/apestore/index.ts b/dexs/apestore/index.ts new file mode 100644 index 0000000000..94e2ec61d9 --- /dev/null +++ b/dexs/apestore/index.ts @@ -0,0 +1,39 @@ +import { httpPost } from "../../utils/fetchURL" +import { SimpleAdapter, FetchResultVolume } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const URL = 'https://ape.store/api/public/base/volume' + +interface VolumeInfo { + dailyVolume: string; + totalVolume: string; + timeStamp: number; +} + +const fetch = async (timestamp: number): Promise => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + const volumeData: VolumeInfo = await httpPost(URL, { date: dayTimestamp }, { + headers: { + "Authorization": "8690be69-3c53-4bc1-8e99-e4fe0472b757" + }, + }); + + return { + totalVolume: volumeData.totalVolume, + dailyVolume: volumeData.dailyVolume, + timestamp: volumeData.timeStamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.BASE]: { + fetch: fetch, + runAtCurrTime: true, + start: 1712265900, + } + }, +}; + +export default adapter; \ No newline at end of file From bbafd98b9ac85c736c8249218b62d857da82adde Mon Sep 17 00:00:00 2001 From: mrben1 Date: Fri, 10 May 2024 14:21:37 +1200 Subject: [PATCH 0505/1590] fix backfill --- dexs/apestore/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/dexs/apestore/index.ts b/dexs/apestore/index.ts index 94e2ec61d9..a453b535bb 100644 --- a/dexs/apestore/index.ts +++ b/dexs/apestore/index.ts @@ -30,7 +30,6 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.BASE]: { fetch: fetch, - runAtCurrTime: true, start: 1712265900, } }, From f0d5d0394f6e23816f939eb9fc3988957e73f37e Mon Sep 17 00:00:00 2001 From: mrben1 Date: Fri, 10 May 2024 14:27:03 +1200 Subject: [PATCH 0506/1590] fix --- dexs/apestore/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/apestore/index.ts b/dexs/apestore/index.ts index a453b535bb..2be64a519d 100644 --- a/dexs/apestore/index.ts +++ b/dexs/apestore/index.ts @@ -35,4 +35,5 @@ const adapter: SimpleAdapter = { }, }; + export default adapter; \ No newline at end of file From 989f6436c9dcd33437a8d8ac115ecc884fb02fb0 Mon Sep 17 00:00:00 2001 From: mrben1 Date: Fri, 10 May 2024 15:05:13 +1200 Subject: [PATCH 0507/1590] v2? --- dexs/apestore/index.ts | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/dexs/apestore/index.ts b/dexs/apestore/index.ts index 2be64a519d..4bfd8d30c4 100644 --- a/dexs/apestore/index.ts +++ b/dexs/apestore/index.ts @@ -1,5 +1,5 @@ import { httpPost } from "../../utils/fetchURL" -import { SimpleAdapter, FetchResultVolume } from "../../adapters/types"; +import { SimpleAdapter, FetchResultVolume, FetchOptions, FetchResultV2, Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; @@ -11,9 +11,8 @@ interface VolumeInfo { timeStamp: number; } -const fetch = async (timestamp: number): Promise => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const volumeData: VolumeInfo = await httpPost(URL, { date: dayTimestamp }, { +const fetch = async (options: FetchOptions): Promise => { + const volumeData: VolumeInfo = await httpPost(URL, { date: options.startOfDay }, { headers: { "Authorization": "8690be69-3c53-4bc1-8e99-e4fe0472b757" }, @@ -26,10 +25,23 @@ const fetch = async (timestamp: number): Promise => { }; }; -const adapter: SimpleAdapter = { +const adapter: Adapter = { + version: 2, adapter: { - [CHAIN.BASE]: { - fetch: fetch, + base: { + fetch: async (options: FetchOptions): Promise => { + const volumeData: VolumeInfo = await httpPost(URL, { date: options.startOfDay }, { + headers: { + "Authorization": "8690be69-3c53-4bc1-8e99-e4fe0472b757" + }, + }); + + return { + totalVolume: volumeData.totalVolume, + dailyVolume: volumeData.dailyVolume, + timestamp: volumeData.timeStamp, + }; + }, start: 1712265900, } }, From 42d7d8ec08432a8873e0af6f20e4bb9ae22d92aa Mon Sep 17 00:00:00 2001 From: mrben1 Date: Fri, 10 May 2024 15:06:13 +1200 Subject: [PATCH 0508/1590] clean up --- .vs/VSWorkspaceState.json | 7 + ...4d28a37f-a503-4793-adeb-3456da107c3d.vsidx | Bin 0 -> 2788102 bytes ...5a5c2c4f-76d9-4a47-b232-307df235a6f4.vsidx | Bin 0 -> 427046 bytes ...b8f60702-a8a9-4db1-801f-c491efa037e9.vsidx | Bin 0 -> 389247 bytes ...ecbb4cbf-4142-42ac-92a5-7ccded29d053.vsidx | Bin 0 -> 5883 bytes .../FileContentIndex/read.lock | 0 .vs/dimension-adapters/v17/.wsuo | Bin 0 -> 11264 bytes .vs/slnx.sqlite | Bin 0 -> 868352 bytes dexs/apestore/index.ts | 18 +- yarn.lock | 2378 +++++++++++++++++ 10 files changed, 2386 insertions(+), 17 deletions(-) create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/dimension-adapters/FileContentIndex/4d28a37f-a503-4793-adeb-3456da107c3d.vsidx create mode 100644 .vs/dimension-adapters/FileContentIndex/5a5c2c4f-76d9-4a47-b232-307df235a6f4.vsidx create mode 100644 .vs/dimension-adapters/FileContentIndex/b8f60702-a8a9-4db1-801f-c491efa037e9.vsidx create mode 100644 .vs/dimension-adapters/FileContentIndex/ecbb4cbf-4142-42ac-92a5-7ccded29d053.vsidx create mode 100644 .vs/dimension-adapters/FileContentIndex/read.lock create mode 100644 .vs/dimension-adapters/v17/.wsuo create mode 100644 .vs/slnx.sqlite create mode 100644 yarn.lock diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000000..21e2fe20f6 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\C:\\Users\\benag\\Source\\Repos\\dimension-adapters", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/dimension-adapters/FileContentIndex/4d28a37f-a503-4793-adeb-3456da107c3d.vsidx b/.vs/dimension-adapters/FileContentIndex/4d28a37f-a503-4793-adeb-3456da107c3d.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..cebd6700dc5529ce8ad657a08b8ff06ae602cc68 GIT binary patch literal 2788102 zcmWi=YjWeb(gk=YW@7f?Y}*720x}aM^{{V!T_6cQB)-JAa^v&8u^YZ(eb zDM%3jB@#%SJb6+{n*U$_`Okm;-~Z>w_Wqy$JoX>u|JYvt_y6~J|IdH^&+YZ}DE`w^ z`t&qEJ^g<2c2B~8@^?@EpC@gfbo!*TCtW`2>Ph!cdVKo%^XX^vWRoX5JjK;h+&(4t zDJhM3cTQvWHnPig#=x+kZfT=nFdC$~Oj?kOvu^8Tr?PlbCbo2PPkIuB1(`&8Sf zHh${br>=jxPEWmi8tSK^c^by2VR{;ir?Gt+`=_aSn(fovKHc2Y=kDn%efsS`eItMm zumgAlcnA1~=L(+xz{?F@6L=lL^T8M3Z|^(sHTVer8~E?w{|){J_@Cha0sk9*0LTl- z0p$4TY=^MxVD|wEKyTYKXbl=cC!j0Xu89d?2ABg5Kmhatq=6VH1e$?XU;x&@1kAt& zH~$ z@CxA#q8ErXL6a2F9D}i4r{L0~13BS(ptASq~ z{2Jib2v&n-umM;LHU^u3O~E>_8Q2_b3HAcE0$YP^z;>$n{E+8%;t{`q8ZXxa=9v~heo*=$KLXa3pLP$=KSV&?>5=c@= z93(j;1tcXT7f32dYDij0dPoLHMo1<|W=L+39w4=l#*ikErjR;FGe~ntOGs--8%SG7 zdq@XJCrB4aZ{Qf50T+ThfV1FYa0$2+oCBAE%fS`kN^oaz6}TE)1Fi+vfxCk1!42R> za1*#0+zJ^%#*i7v0?77|S;!K|Qpg-+Ib#eguH^hhP;8ig}jG+hQdOTK#@Y>ps1i|q3EFKp%|bTp_rh!L2-vNhBARNh0;M; zL)k#tLfJz(KsiAwvN2j>jVHJn>GcW@ryJi*1nC5B4^mlQ4zE;(FExKway z;L^gShsyw$5iVQJ8&m|9g(`+Bg~~xyLe)amLDfSwKs7=&K{Z2lgL)6Og*t&ch1x-# zL0v+9hWY|^3-ti?2=xT@4E0v|3mSyRLX$v~LgSz*p{by$p=qJ%pc$YUp_!mrp}9jF zKx?6mp-rH5&}Pu)(4L{aKwCrGK-)pvLpwk_LOVgbK)XVxpbMe1(8bUt(528h=yK=^ z=t}4=&{fbi(6!L@&<)T{&~2@5a5ZpE;9A0UfLt@pdX;$&Mwfe zFaQh(7%U7i3<(S=3=W12h608Xh6@Z83^fc53@r>D3|AO>7)BT-7-kq27`9GsFanGg z#u&x~#uP>eV+LaZV+rFK#tV!Uj5Ul6j4g~Ej6IA4j3bN_j5CZ|4|kX>OfgIeOa)9O zOlO!bFjX)$FtspsF!eAEFpV%xFfA|}m;;!PFk6^om{XV?%q7ef%q`3_%quJhSS&0t zED0G>mJ*gTEEiZRSZY`rSXx**SbA6nSVmYTSY}ujShjxduqs#&uqLpk zusT?CSPNK7SkJIlu-344u=cPHu#RvuaEst(;pX6$!7Ybd3AYMv4cuC|b#UA2OmN@B z-N8MBdkOao+$*@(aBty$g?kV80q!f@Z*afEKMj2P@VSFe4WDoD`3|2S@c9X!-|#QN zzYPBx_&0!mL-;p>fA{e30scM0zbE*z@D;;X0$(Y7Z?;e_f})diU4R{x$Z0&E^?*&wPKj>9ftA z13&fIg>Kj+nRnLbzcxpB{(d+x{Q;qp9;&tv&Kw$J13c`2T6?)i^+ z{$rp2#Ls_{=RfK5pY4sh|T6$@pmtZUNpRD?*-|F?2DlnV_r=7Vv?7@zC`g$ zl)fC|mqYrJ!b`1QZtCSXyxQc|=C8JUwZm)dUgPpLDPEK6HECZ{`|6rkx4vffH7j4U z{vekV-RrPzm)Bu@9d55<`8u|* z7H^WHu0)AN1L-+8|F{5Q{k_x!&-|HJdQ&;NM- zwFsc^C6 zJZ6srk7Lhxp3$Bm&xD?dynwtQ@jfR&-ZoRno;=zkYFP^-Fyu^Bm^OC|#E?!c3N$VxOmrP!2z0`SW>!sWN z&2x?CI?r7_*L!aC-0Zp4b2l%uUgo^4^0L9pMlYMZ+s_|3@~YUYQm=AeReIHSIC{19YUkCZSGQhcy~cUXw$pjdD zYwE4Nck8^n^X?b#!}I>xw#NIX_x|~38+6{M?|tsPPwjoad7tmz=ePIu<^A@(-{0Q% zw|IIIPgXp|;wceNsd#eYDHBh*cq+tGDW1;asS;1McxuH{C!Vh2sTWU!cpAmiB%WsR zbQ4cs0(JtF04)FokN_571Ox)!1pHUPF9B9SEFck(3UC540l9!eKq;USPzz`Tv;sN- zR{?{7QNSc%7O)7o3;0JoTk#x==R`cG;@OGkOgxw3xe?Euc<#mXAf89@ylmD-ypVV? z!UN%X!rKW?2~P_Tg-60;;cce^;f2C`6W)J?_dmk>B|IyQsFt_Wx~saR|u~Z z-dT8+@M_^T!fS=s3GXVrL3pF^CgH8Z`w-qg!uu57mv|Ikh@%iEA*>Lw5Qz|}5Kf3p zh(d@`h>H-F5Va7E5UmiM5WNtC5Tg*25VH`A5UUU$LTnxWdGzP|!k5C|3110c3m=95 zCj58d{}leG@P7;cTm0~av_cL-jzY1}S|AAA35*5)BghxD6Ql+Ef_H*ZFbQVCMsOfF z6ucLF6nqlwgz<&h2}8n!!bHOCg*k|TL|{a?ZGi|w5k?~NMMNTE5d|XJ4)-EDiM=oO zB=(`$N8%8PV<3*9I3C6EBu>7tPr`2RJ7Kl3Z^Hf*_HSWhVH06fVV$su&aoD5o-~@iTH03TM;`Emm;o2+=#dpaWCRQ#G{BO5#L1oA>uEQ z_#$}|i4{pIl3XN(NGg%EA{j(7iDVYZhe&;q{t&4a>6=J@iqwiU7O4|yDbiM?gGfh_ zPQpD2=L@HWdlT-baDNLI3s(u(2zM2(7j6`87H$=p6`2!RDY8mrt;l+jO(I)GZbj}y z-io{zg%yPpMJb9_l)fl;qST^%6J;vOOq97O8&P(m97H*a^B~TXxcK7oCN4k4#fpm) zmqJ`hacRWmCMqqeH&IzpIZ>6OYDLwF>L%(pQCm?vQJ11_MLmed7tNb!tZ1BQTG33R zjYXS^wi9hH+EKJ$qT7j1i|$QyR&-8urRXZrwW8}qcN5o1^jh?9qW>v+D|#pTR`i1y z-o%iK!HJ;|!$l007#cBjVz`Q7J3ESD62l^fn;3mD{t)9%j9QFuVzgp(Vl2d1im?@A zFUCQPqZnr~E@E88coWl4F_mI!#MFtY7t@s)_LZQqHnN__R=YY<BXPXf7_uqa0Z{N4R|Ka(1A`uLoa`zMgzNKTH>*kLfP2=zmlA3wy8AN&LV=LhK@Oh5Se zgWV4k{s{Iz_Vi;P{;=~8H~wg*A6@@r=zff?1eEY8y;tceDXbK!6pa*vl)jYjQl?Tm zDJvOWR93O1sE-Cu1$+K*o`bt&9^Hr!saj&SYH3_#)$0 z#+{6>G9F~S$VAH|m5Gx{E|XFwy-X&VtTMUD>qKx>dTH%nmX; z%IqYwSY}RUh0IEson_X_tdrR&vqfe%nX}AenWr*$GC#}wBJ)n>z060M&oWSv0b^%3_qoB+HX56IrIR%w&0%WhKj6mW?c1S$47ec=USdydG6(Tkmv2}BG0Ql-{r-Z7b!0+FMD}OEz`mFZai& ztVmX&tPZj|$;!$qmQ^CFOjfz9&a$dx)ynEBt5H^ytQJ|VvbxJUko7^qXW#S>I(7%O;aeE}K#|XW3k3GstF=%}us@*`8!;Wn0L$mTe>3PPV;lC)v)j zU1Yn;PRq{9E|py-yGnMQyc&7^DX+1-Ci0rftCQDCUVC{R<#m=l%RZ95mHkEbgX|aC zud=_(A&^5Thoc;<91=OCa&U4e%V{sClbmuno#k|qQ!A&doJKiKa=OV`%h}2~k#j0%C+AGgg`7({ zpXGd!b1Uag&R02)a$e*j<+7JcEtjiYX1OeKWw{!;Mskhin#;A6>shWBxz=)B<&ESm zlDAaeoV?}oR?6F1-Wqvp<*k#qLEcH;_ws&{_gLPYyyx;>$ooa!8+q^LeU$fQ2i``n z?;zemxr1g0?GCyfTz4?+VBEpH`JX%QpPm1{`+>Wi-QkZN;tum2`8%eap`A^4Hrv^H zXS-eewu{?ceA^|{E_1tL+?CC)DtB$a>)dWgcEh+E%iY-S#(6iDyJ^_nFB@CG`xtls zG`r8;?o;pn!0ylY?%UsezbWt)?9}rg^^&U1QTKf1N#*U7_pT%>c~a6TSt{8m*=}C1 zdK9Zvrc|v|r_`v>DvT8-3R8tnVWu!wSSTzNo)uOKYlV%%R$-^`s<2l$DBK!O3TK6j z!d2l-5h&7%Sdmc_C<+xtiuQ^QijIm-imakmF>H&TVySqiSSi+uNii!niUY-w;=SU7 z;-lh|VyF13cu@wF@s#nEQOam#P#IDtP$pC+Qs$t{QJGj7r%a*DS(!$eR+*~`Km}R_ zqykn!sDelZdlej1U{w&Spj1Jtf=LC73RV@|R0t~6DkK%M3Ii2JD%`8^pu(dHPby4Q zn5xjJFjL`Kg@X!L72Z??D$*(<6&+P{Qc7lVt2%-@dg`duQLAI5j#eFGbxB@rBt2G7v(DDYULW`TID+BuFCbw4a$wm zZEa`e7UfpuZYuLsMk=!^OH`Js%&DwYS*5Z@Wv$AtD(h7?s%%o(sP4pw35iw(6XzbE(diIydUvs&l8# zS9R{yc~Iv`oo97k)%m6_s4lU(BL`YA>p7RNJZcs@g%d zi)wGGv#Lu~=TvuAU8A~IbywB(s+&}|s_v$)sIFFBV|7i`HB;9@UC-*;sq3h&le*qi zzgN9gy;FUm`cCz|>IcN&zS_`$7YOU4UsI^sVr`D@l z7qzZxy{TKEZYOoK>ei~;Row=48`W)Aw?*CV>TcCNR`*ohGj+eHd!z0*_0>PT8Q5uP z^fT+{KN~Zvy`2`r=KE>!kM=?P?~j19-UyYgpw?FFSnEXVRBNYorgg4$sdc4wt#zYy zt97S!ul1nysP(M%Z;j6n;&y9|R%5I&(U@v<8Z(W##zJGM@vQNpvC>#;Y&5nSuNr%e zgT_(gq;b}`Xk0bkG~P9VCQp;nq&1-?(!`pKra)7uDblppbkKCv^sZ^u44Pl`=D_hz zv(`+SS+mg`Xbv?;n)jLynva@Kn%^~FG=FOY+PrAvYqQfvYeU+wHb$F3n^2obo4qy% zZBE*}Yje>7=-@>Mz7BRe&^jO;7###U2z3zYV6TIN4&HT;=wPc{>kxGKqC;PYI~{5r zk`7sifes@bo^eN$bQC(DA6_NylG0u{v=&DRfflq|r&MlU^r-P9~kqI$3mb)5%?@q*JTYSf@^> znND+^mO8C;+Um5|>7dg|r>jnH+U*_#(^>5j?K15y+Ev;$+O^tUwd=JTwVSnDwY%%= zs57gxL}yNCrOqmywL0r{HtKBB*`l*m=T_%V=Y`HoomV<8cI)cK?fqYJBxSQkzg zxh_gww7S?nzv*(P%S4x{E^A#jx@>hh=yKHMU7xK!$NKE_In(D-pId$I^m)+dNnfnK zB>Lj?rPP;;zEt|s>Px3Dy}pe4vQ=30<)$mEE2pbcSCy_>U3I#ebam6U)pe?Cr|VMJ zXI(eCZgoBBde-$#H&!=JH<@lq-L$&tbTjE@(XG{OtlNujYuz@w?R4AgcF^sp+ex>x zZohQ5)1B2_synB0#8vR&&9Z1wE)Ti^PuOO zo7~$1sh3(WtzLS)40;*$3VKcT>hxOZwbE;=*Fmq_=Qn+G`c~>&tM5+V zOMSoS`?f#n57Hm3KN9_s>W@r++EgA!3jC@YlH=Dnc8hjD#0e#S>3#1rCw z5iMejm>{Nz4lzT_5evi;@q$<()`$&ai`XGv5qrb|aYURDXT$|@MZ6*25kHVL5+fO; z04YK`BAt*NQj2s&8j)tC1!+ar$b`(u201_ukt5^-vO_MAOXLcSh9?XyhB1aCMj9i+h%qu41sFvb?J+uGlwy=&G+}hZJ>lNqKE(YV_Xj+LcyM@V z@o>dMkH-TZGd!O0IN<4kCyOVCrwmVLJXLsV@zmpKJ9WqZHu!gpe<%2NhJTm%_lUnN z{z~vyiobIFRpPHR{%Y`7hrb5=HKK(Fe`X1-L3>2|6RkxXqfOAJXdT)NZH~4?dqG>F zt^iF7_S)LFp-!XFtM1#m?W5_m^e%dOwO28n6#L5nDm$on2eZAn5>w>!z)c0(-6}m zrWVr}(*)BLQ-^7WX^v@$X^m-%X@}_*(;m|i(+Sh9`3)VT+oL<7v*;3ZDLRL)LRX_} z(6#8U=mvBnx*6SqZpDl+W6VO#EM^I24znDy0<#jcGiDdeD$E+pTFg4ku9)?hjhIcC z&6us5>yP}Zn9rCmnBTFGSP&Kl zixU&4SH}ZG^4GHo?|mn_*jEd%?ECw#K%>w#Bx?w#RnBcEonV zcE)yVb;I_KoqX^g-5xuOU5s6dox?82uE4IuuEMUyuEp+(U60*_-3_}tUKy`@y#B;% zjMoIOIbKV=UhrDuwZm(V*9or+Uhmi&>?7y9$19FKjsuP(juVbEjw_BgoFq;GP7zKPrx>RTP8CiKPAyJ7P6JLO zP7_WuP7BV2GvjP<4sZ@}KH_}B+2Wkw>~PL;zTn*8+~VBf+~YjrJmEa!e8c5{%THV^ zE-@|%E-5Y!mjag(mkTZ}EsI@OH$T#an^55^op0Rd{Rg*5a+l+k&?n-tKs3ydUxI@Lu4(#QO#B72aFCcX;pd zKHz=A`-=A)-tYJU_+jxQ!GARVekbq=b_8z(+x{oPH$DG(2x(tDdf9Etn@w#)F9&*g zqgP9>DZM&+t?0F;*M?qOdhO_SAkQan_wY!(H}c-e`y^pWOys|i?{D#>jb9{RlmAZs z-{k)x|C@gNpdV%ny^st^9=8Ak$&_SH@@i5jAgs3+Pku@c>hzKDJkeLv*P{6g#z z`^38kXSun08xq;B#!PI81LBZ4BHj}ph>yf4;&)<891|zRDX}BYh%4fnxFx<4_rwG7 zNIVfQ#9w59%nKQhj8A6w@Fq8~v;82$WDJ>rOh_govnO*Pb0l*j^G?Q+iOD2nQZkNA zMy4RslIbV_3SKDiDDWxRJ$Tm5J>70kz!Vq?0t!M3A`12t94I(aaH8Oy0!u+mK|(=F zfukU!;7mb9!IgrUf|Y{XL*E^~Q0P(UQ@DH3x0}}+;^W4LOrfDLpfIE`qHs^)fx;t& zCkicvF@*_*DTR*0jKYz^J4Haz3q?LfyNBz%fxGSLMNE;QD4-~$D57Xj(Sf2PMJI~h zDY6vB6eSd;6gi4Aib{$aiWZ7)vpW;OLOi;Y^3EpF16ajxTid=(u|@+#4~l0oZM99+{4YjsYD*I!1Kd z)A2yZBOOn4e50eKV@$_{jwu}-9Wy%CbR6jfbn@sVA58g4KL+@T>15~>&?%%-M5jHS z4s<%w=|rb@I$1i!bV}%y(#g>&qtop%C*I!ZEvC1W-jUwF>2FOIHi;iu??J$C)5S7b zLpC5Al8wmj$sWia$)3nsvN73&Y)aOV&B*3tFJx=74cU(Dm26LTB0G~^$gUIv#m^Lb z6wAj%jG1CXaX@iMaYXT+;seD;icb_u{yy zPAO2T9u^{HN)4p}r6HverF%*blpZNPQEDlTDNQI%DRq=)l-88Cly;Q%l#Y~6l-?-) zA_wHWhnuq58^`1fxqw_qE+V%lcOZ8pcOqxW#pDulDLF?jBbSqF$o1p~awEBg+)D07 z8BpduOjpK~8Oj36Ldqh__LLncJ5qL{?2R%@Sxi|%SxT9sETgQXtfH)@tf6eAY@&Qm z`GN8iqNie_ zVy0rNe52w{B~ckt8B>{4Sx{M0*-+V1IZ?S%d8aecIiT}_&M}=6I+t{==-kk`qw_%L z`4P0gM07dOC8bM6mxeAKT?V>LblJ`>bh%R%P!&;ipem#4OjSiyL)DGyfND#%qq?B_ zOm$6lOLa%}NcBq1jvA)sNX>~FOO2zZpr)nfN=;AAKy5^=qc*3upthy9qxMSeMD0xN zO5KS%M_oo;L0v^%OWl>afx3~piLOjnL)SfB4|M%W*O;y;T{F5?bgk*y&~>EiOxKmJ zcj}RPL;ZnzOZ|oVj{1rEmHHd?cN!uZEDer^f`*cYGYt(5R~iNyW*Qb6RvKEekETE&GSo=S>w$ ztJ)aQ$D+D2t%lZs){xeS);+BUT934zXtlJ)v?jEsv^rWdT60rTau5C4KtzxuZ`_pYQbf zH+_E4=O=xB)4%)2Qvb#Db)>JDzEb*f^p(+9PG2Q`UFfT#ubRGE`s(Pbr>~K|X8Ky_ z>x+KxXoGOyK7H@#8|nLR`u?Kt-}L>>;4|zVyf3^lyfb_y&lIdaG8jE?L*C z2iD_8TCrXkpBeFicOI0=MsQfhm@(Ph?9E$d%oz*DlJU%VVXQXaZ1b`hTgGnlXBd0N zfpKJPv(B46-Hag9g{fy+nEu_KBGd0jw%Mk_=G`M!{P^YDSKm6_ieV0z zL*|Hi&wOA$GM|{=nBSQ#bIhDDr_7EyW3HKd=7st5k-lbL*m!JwHj>Tm5ry6;{EcMV zFyPj)F>C@hA)AQJp3Q;HkshQolvki&?>J%{Dzd5oT#T+FZr5rhqGLCYNE*uRUjU0VF@&)%Vy!UwT^M3aT`)>i0 zJw6ck_89ku_W|!i-bcLO^Zvm5BkxbVx4e&epYT5Az2kkx`wQ)2*&bGB!;7q%7Kn(dYCz;j!zt0j$@7!j#G{u#~H^t$0f%V#|_6F$34dj z$6JRtj_;fRC*H%^+NN(}I0-ljIf*#gb8_J1$jONl%Sp^h!b!@B<0RuG=cM4|%t_5j z!%54@$jQ3pq;mSosmG~)cyF6MNDZd}ry-{ir+ZEhoE|wnar(yTJExY@nA3#QlvBrP z#%aN6$?1jDn$wokp3{NTnbU>St^eQb;Gsj@IO)wb+>DJg>;iTnyNKPM-GSYa-HDxL z7qd&)rR*HLj9t#IU{|qg*j?H6>_&DIXTX`qnS3~!o9W67X8~s+XAx(6&JLU%IXiJ? zIg2?NmoMoI9oK>9FoHd+XIqNwaIGZ`Uadzk2a2|3VaUOG?a(?Fg!g+ zoa=(?lIsiC4c9H#9oHk*GuL-+LT)TK2{$=61veLN25u&9W^NX4R&MSOkG~DLwcIA$ zrrc)Sp1G~L?YW(}ow;M~EO#+?DR+*$Gj|nt4R;-PSMDb67VcK=Zrt4;rcK~zNUP2e9ib;^7X>kimxqSJHB4|I`MVp>%!OjgL3Hi+#k5N+{fHI?sM)-?l0Uo z-1pqi+%Md(JVZPcJd`|~d8m14co=vXd6;;ZdARX#=i!4#%VWZ0%45c3&SSx2$>W8` zhR2r2p2vyDna734m8XEGh^K_7l&6BHGfx+uYMwftdY%TJCZ1NFfoH?>foIEe!gI=V z!E?#;h3AInmgkP=E6)SZBhNF>H=ggj;Dbb2LS9b1{N$zJ<;+XV%axa&mw}gwmzkG^ zmm6=1=_~Pi;PuF>Y*ZwS4RN zw({-9ci=nmJ>dI+?MN6DX0{OR-Ojz2YjzVYWf zfBwy%AN={fkwE-q`77nGjK50$n)$cS-@xCm{Jrfc{{G_c-~9b;z&Efn@MhrMy!hs2 z_fQJF;Fg$YUIO!SFy791Z^nB!-lq}15!Q&rh|Ku#NHOt!DV7*!f| zHtMnohK#C>YK&@)>WtdD?Ts3Y8jYGZ@rqH4QL9lmqwWv7>miBQ^bMP8A>2d;M(>S2 z7=1F@8XX&*810PCjLx^nx6!51XQOMQJEMD}$1TG8(E2@Mgc~T^f>^P^#9(GH-vT5C zOM{icdJ6y;Yz=k>uN#eSaM(y^gZIbZ4?M`$En{!XzwtLQ=0i64pfxuVZi9Fm2e+|i z8@IL5QX7}F(LftVRJidxm!pS;rQKe4t+5K;(w-HYm0MrVZ9?$YX;D+j71w%-b5gEtcEbwk<{5 zYO&e(%`_V>3||aahHJx(;nr}snFhnX;nDD7_~Y@P3XhTD8ME7-(U_Al@5WeTVq+3xQe&JknK6YiwK1JBqcM{)voVV?>*L=V0?!1yhr}|# z2T!@7;H}pnFhOX7$OL;6987RD!N~;gCa@-mO^}!%HGwlhW`f!Ty$MDWOeTa!YU!3S zx#d5F{+1$O!reo;xd~pjIPJ!OZuolpzF}a((1ei*_a;1;@MyySpQATXZez!SHlJlG z+Lz`pij;tZ1E6F|M(z8)d;I&p#|^*xWR0T3(P6WzDY8f$WPX{jf_yUP34kXkXw3!ew^|xHV1gI zSqdh>N-zu7f{kD+_(QN090(2tM}lL)iQrUlCb$K8rE*Md+*0w^IzpRs(OH zmO_)zN@x~Z3vGn9LVpPDgbsubg^q-dg-(Pngf4}yg>Hmyh3_VZVe-aAz_p-EQ}V$2xEnD!UV#E!bHNv!X&~>!mPslI;%VEMcA9L zuP3Gi#Txq|++S7-OTsE)Sy(Ns5!MR(A*>TN5H=Jx5;hh#5jGXJ6t)v~5_T4L5q1;4 z6uvLM?&7Nx&J*q;-0LZXV~>T~)=A+=I3*klr-d`ZS>b%)p29id0^vg8BH?1;65&$e zO5rNu8sU232H{rWjIA|Mec5wHlf2#g4<2%HE45riU$L=cN0 z5kV?~Tm*#(DiL%dm_@LO&_h~UgclLMo}dBLdTa#o*$SlyNrXy-EJ7_pBSI@eC&EC4 zp$H=p#v)8an29hKVIjgwgrf*25zZo9M7WCZ5GYWIE~osDoh3f3krWY$NQsC=q(x*z zWJTme6o@DkQ6!>RM2Uz}5oIFEMbwC>7ttW1Swx$NJrQ3{CjpyOeC}f@ViK_uF^gD> z*ofGQ*oin0aVX+Q#IcAI5f>t^L|luw5pgHtUc`flM-fjVo<+Qh7*{^d5|`w1dKB3H z;u|HAA|a6|k+4X#NQ_9VNSsIlk%S_NL=uZ65lJSJTqK1^I+64u8ALLQWD&_Gl3k=P zBGn=_BDErQA`L_uiZl{wEYeb>gGfh_P9mK}dYr^}rbNaf3q=-*EE8ENvPxvN$a;~@ zB3nduh+K-?i98f}Eb>(3xyT!lPa>a1zKDE1(?SJ{!igdfMI?$u6uBq{QH-LPMX{b) zqViRgT9i(dfhZ$UrlQP5*^6=z}NMU{!F6jdv#Syac# zq||SxR8UJ%lc<%bt*D)-BT>hqPDNdax)gOI>Q2;ys3%b`qFzPw5RDRz6HO?ZNHno% zGSO6`sYTO?rWeg9nprf9Xx3ANXj!yQw1H?N(H5euMcatB6KyZrL9~--7t!L8`zcp+ zT69iyq39yfC8EnjSBkC@T_d_ybe-sW(G8-TL^q3W5#1`fP4o}ZOVN|)mFQXYPtiNk z$D&U}pNhT~eIxow^t#gK}j5<@43K@6i9W-)AH*u`*&(G#N(VcupQX%f>crd`Z0Vt$BOi#ZZ=Eap_q znV54i7h_dtFR<@Z*8@8tLYu>fAduqt_HdDrr8n zN#0lacm-7kR!lyed<60l%10z0v3w-*QOHLvAA@|1Koid1skd)um&4mtzTHm77Npqe zIzyks>;qR7-Y0BJc#W_LVeG+^`+$E2mkS0J%p}-9@NDE;Dc^eehD{NQtS<8Xc7{&g zAE!5aYLu9vAoD?wgK7qC3-S|mB4|1vP+=gKK;3{C0lfe_eEFWq_guc0@*Q^@IHM!_bB@im4M%N|97bDwax1Wu&rFeMse`3Zx39ilmCAN~CI}TF?G4 z{wDb%`6~H#;?gk2p|E0l#V^MsSxIKeTC$OBC4WeEk^{-1drS_%%korq%Cv_loD0L)t zEOjDvDs?V(DRnJ%BXuivFZC$(D)ry9|IA#Zxt)GKgkcQbcux#TqoiSJv@}K;;($3QE()Xo5N#~(0M!L(HrUGIBp&I)D+$oNvQ_`_?S~?@0mCl#W zNf$^LN*75NOP5HON|#ADNH<~c)a0(U!ias_>_(;VhVBnMN{A zWSYvfkZC2;R;Hay2bsP1%XvNE!AvI=As$|{vr zCaYRjt*m-k4YC?#HOXp|wUV`!wUc!q>sZ#QtTS0xvTkMF%X*OYDCpm?O(&Z{Hj`{-*{rgCldU+vINMUTm27L-wz3^$JIZ#F?JV0xcJHzi zveU9lWS7aVmR%#eR(6BzX4&BZhwMrAO7>RvPuYjEk7S?7K9l_-`&|z2a$q@VIXF4Q za!BQn%b}7(Er(VPvm91A>}QkW_;wmfqm(1dQOhxqVMePEibKz_#2cXFiq? z2c_45UL(XN={2R-f?jKSold;#j4DBf!HSLi528C6-8;JDpEi2Do-X2v%R71m^a$xu z(4(S9O^=QqJv~NxOu#znvC?Cw$3c&O&oa)pZ}fJdx7(RLI=MYqkbjjE+o{AsaKd;3y$Lc9 zBpZk<5J8|{d_ZM@B7hA%_S@JbV=GG{BTonF^tcX~{u<&5Pz!yEflv9!w$(m$Gav(XL4W@JxPC?txAVxokoBC3f7qKRlGTFx?5^^H(Yrmm!JXZ#D`9!y}U zYna7wJ*7x7DNV|dvZOvpIZ^?skW@q}CY6v%NtL8}QX8q`Y**#WS(3rGGZl>_1V})* z%8=_Y+~EnbB4%PuY=|wfBMyi|;)pmVPKYbwmbfRLh-c!Jcsm5Sw}V?8VVf`EdMf{22cf`o#Cf|7!of`)>Qf`NjOf{B8ef|Y`uLXW}=g)b-I z2}}U`D`s}wccG$?Dby4i3N3|>!hph%!id6{!i2(V4!h*tz!kWT{!j8h8!kNOA z!i~b6B9EdAMURsn1%m)_7aIcH)RCfyDbf@fiY!HrqJW~1qKKlHqJ*N7qL!kLqMo9e zqLreZVvpj>Nuh#efJlsu1wI_HqL?Yx6dQ^y#g5{D;*jEq;+W!u;*8>g;*#Qu;)ddu z;*R2x;*DZl^EiuyfwcmTfa;8$3O;R#qJ$~Ylo(1ZC61DSl8};!l9-Z&lAMx?lA4m1 zl7W($l8sV9sif3V8dF+OT2b0jI#4=Mx>9;j=23Q`>^o&w%5Ie1DSJ@%eoEaLQ)Vdh zDf^)8ld><$9AyDzA!R9LIb{W9C1ovT17#CsGi3{9D`o#LWxpx=L)l--Unqa4Jfu9O zJfpm#yrsOOe58D$;++aX1yfP9Z(%o9Z?-qolu=pT~J+8Jy4BDE>y2n zAJn{2L)2Jm0%~e%8fscNnJ%Yvm*>SOA2>Kp1?>U-)Z>SyX#>JJ(` z8s1O0VaRA`XlQBZXc%Z1X;^4jX?!6V5%@YEHI0@=M`K81L}Nl@PGe1DLt{&0Pvc1A zLgPl$3r(*yz0(xZl+u*ZRM1q>RMXVZ)Y8<^G|)8Dw9vHDg#XD-(?PRG^DE7o=8)!? z=7i>y=8Wc==APz}=7r{s=AGt)mN!}gT0&YPS`u0^S{hnfT6$UrS{7PXS~glGtxW5a z)_~TK)|l3k)`r%W){fSJ)`ixU){V9o+L$&&o1-nHEv7A@t)i`=t)s1{ZJ=$TZKs`S zceDqzN3{ZtC0XnRx!ERhO%}+|=bmU4EZMRGrFxlBEON>ZX9);8IMB7>)N7z#WA$1foUdN@ z6Kp?|-f)(nQecfmf|`+tR`*cdV|7o|JyZ8u-6wTlkyk__Q9W2aLiI@0qg0Oufgkml z)MHnV^pzIsP`B3emg^oCw>Qd3qBY$6-)$xw}4oIftwCDpc z5U3qMHeh0atpGGp?-_6n^AnJgBb?<3icA5Azz6PSU9j-;Euq|fCB-a0NTA01w?HnS|tu8JtZ$nUX{F^S%Fh8 zgTe*v2a^k=A4oP3R-k=Av-p6@09^o^d2GV5dB#Q;J3wsMlx&rpl{^%AiY|(7ieAr* zJ3Y?u!8t@?^23ydQ3#U|1{X{lm=Cb7V@bxsi4_iu5Ec)7*Jp|e8^uv2;s*<+rwmv*Uz%DT3Ms4Rn{pRC>tspDH|)B zD4Qu;DLW`TE8kZi5B1fZz5ec^-0K-D0g4D;7aAcZT)YX6mD9=@<*af~<(zVXa-njO zac1&0bf6+X_?3rI=W&X6!Mfa4wsS%q4KMuk>| zPKALALls6Uj8&MZuvB5I!d``w3U?KGD!QoX<&4e%w}f{M9TZbMZnTJ1q*Y{8WL4x; z6sRavQKX_+MTv?s6%{HfRaB{{SJ9}VNkxl_Ruye3!j%sd{i|Y6#g{Xb1CSH0I22aw z4{!^|tYWQVqhhOKr{X}xp^76F$0|-#oT)fhajD`)#j8p@m0ZqP4^U9}>dwrBh|3%0!i^Dr;4CsvK2iRAp5asVY`gs;XR7m8$Ufld3jV9jbn)TB=&B+Ne5E zb*$=K)rG2SRd=c$R6VJBQT3`Cp&C*RtH!9tsU}oSq?$xExoS$)RI2Gz)2n7w4IX@` zmd-Dp)~YsCZKT>*wW(?g)t0JlRNJa{Q0=VRMYWr1chz~SBh@+81*(fw7ptyT-Kx4n z^{=XbSG_oQiv3gdPW7ScbJbU>uT?*)epUT`0u+N(gHeN1L#T#G4Y3*uHI!;-)zGP- zSHqx&Q4Omatr`P0#%fH|Sg5g74hL)Tyag z)2`-MH48P9nvI&Bnj8(W_%p$D)o^ z9lQD!s^2&DN2`B7*t@cKW6x&~|NSq2yYN2~U#@()@x|xM2VZ{k)#K}huU8b0p3N@T z55E3BxAHGBza;!pp!bkpCce%5`ij=J6URQg&zN5wzXtqT@axL2`>wS;64ynL#PaSFl4uown9V-ktcpbIA=i0 zh2Q?3=eNB7!|xYA~01Z+ZU@;+fV==q0Yn1k1BeE=3eXQJ zi;6`91D?gg0!pIC^1|}Q@^Qu%PZtor9h@l0Cs^KLL}}PLuwh`F!0LcM0bc=r0JM9S zDO7cqHOn4~BumW49@96b3)7Y9#`MalmpJt`sAG_{AU{Ep!N>qb1~LkS4+s_?&>El! zVC#Y7_~fwK&l7d{8}o(vh53g225;?2_n$8% zet$eyTo*r@*)UsXpV=`7%pr5c95W}(1#`tbFmJ3q))&^dvttkGPoxAuUBS(R1cea^ zm(iNFVQpD|uy(8i)*7W?&%=W3h3$>)tY&N2TDFdD zz&2zXv5na#Y+JS?TU_K|-)G;kpR!-GKd?XXSI5p{cR7Qt$Up!ngHZ{A4bvZ9A*b0H zc9z|fonsfU3)w~NVs;6;lwHQIU{|uM*!ApYb_=_M1CN6X2d`&X7P$&QYA`<`+F_!^ zs~%_$3T-2Uiwq zB1T=@4w2@_aAY}h90eSO97P<(93>p392FeZ95oz`98DZ;9332c9AC~rFtQ^6@nG;m zn8ehKJ1f>48;&i!gyWp!mgA1&f#Z?mnd61y<2)NGxt#H0BvF9% z!7hf(i5VRCX`(qXoLEkLP8=rzCm|;hCov}pClx0(Ck-b9CnF~_CmSaRrw>jgr66ot(}dH4(~8rY(}vTXGmo>^GtitF&Kzd}XCY@9X9Z^^XBB5HX9H&=XA5U5=MT=` zIk%iU&I8U9&MVFb&KJ%%&JQkLxuA33P*^SkE+Q^+E=n$XE+#H!E*35hE)|!K%aF^I z%Z$sM%ZkgI%a+TY%Yn;@%Z1D1bjvHnRm4@yRmxSyRl!xmRm)Y!)yUPv)pl-EYRh%N zb;Nbdb;5PZb;fncb<1_n^~Cke^~TK$H;$W#o0yx7n}VB?o0glNn~|G|o0*%PTaVjU zZr{0;+&XSkZaZ!VZYOS6Zg=h+cR6=D74JXSm|Jb5QgfL+?8c``gXo+6$So-&?to(i5yo<^P~p77w6r;TUBv*S79IpewD zx#qd!x#xM}dFB}p*m*v9dFMqiAcci^al8b)guEoYLZZt>os)J>xy+z2Lp%z2SY}edc}TayyV3Vd z-&=j3P~n6oBmIc#0KxtbgzyoSN6HEK4jPsHbXEBQ7&Yz5RpQn385pzgmV2}==WN`H~PKT?}&?lob!+< z(Bh`WpjY6)KpwzC3g8$(Fj!s?x1eJIvw}SZFbb>_bY=rsP)kqCo0gBW zKH)@~03iW>fq?^c0qZc>7vL$tNRPLxoQ@6`E>IjiwG_sHR=xP(Jld ztBY1wt!`&e;i;NI=Ykpq{Rnaoln=}Z5I!JPKwR*(`hX~aeLHsD*f3*Ti%lu^U79_O zBYpU)`KI}SNfcA#iDRGR8b&LOK^QbJXJAUe>h5DD#;S=$4vQ036s!UGD%afN^RKmc z9u1^#XT!w#hT$c~YlPno&jXjhkI~v{{h_tfI?y`QI?_7UI?+1Uy3)GVy3rb!TD9J_ zKD6<)xoC4cD=QFT1R)OE2#y)#91K3Vo-x{3ZJaiNHla3=HnBE|HjOr&Hq&`}p~Znk zH*H_f(hGzj!I*wz0N}wyCz6wz;;0_I>@;Y3FHo zIV+9PoPi`IKy~0w@a`ZiVgACe<&1V#yQg+eyFj~8yGXlOyF|NGyF$BCyFt5AyGgrE zyIs3O2i|!gRdCV4%UQ^QfF}5NP*ku4p;uw7!>bh-9atSW9RxZEbr9(w)IhfuJWideB&~7NL7#JjAOW8Xa04IvoZ&40RakFxFwB!(4~8 z4qF{|I_z~g=n$7$bhzqpKM#S#!CBEiI=Y;FA;^yc&j;iM#}aZHrcS(>k8R9EqoYcr_J&`GG1NGGvQ5}jl^$#qidq|!;FlU^r-PDY)~I@xsU>GYw~H=PQdvQD2m zbvg}o8tXLIX{pmnr?pOdosK%4bh_wt)7gv8-gM@47V0e0S*){EXPM3los~MPb=K&t z*V&}AMQ6Lt-*rwpXPrBphdR%6p6k5Od8PA4=dI2=osT-7b-wC+(}mQ9(uL7Qpo>r! zkuFkQWV$GIQR$-7MX!rd7n3d)U97s;&!jIXJnRWdr^`T>p)Mm`Cb~>@S?RLTWvk0h zm%T0rUCz2(bh+tr*VRK;LRYLSqbsMYKv%J@GF?@=s&&=rYS7iBt65izu2x;YoLLRv zeh^minXa9#16_x@PIR5>I@5Ko>q6J1t}9))y6$y7>w3}kuA7(B?rxlJ0^LNqNpzFy zCeux>n^HHmZbseAx>Ne7CtlL_*gKkIN&br-od+3gIr*s$VF4JAEyGD1d z?iSr0x_{OEo9?adpSllpAL>5QeX9FR_m%D&-M6~$bU*5T(*3OaMfa=jcikU)(0Z_X zi1d)?A=N{shg=VZ9(p|tdKmSv>ESpD$C30H>M_z|s>e!?wH{kNc6#jfIOuWIp9SKtmj0}sh)E^7kV!B zTGd+`W!B54mt8N1UitjqU1Pmg zdTsSO=ylTTawcpxr8ld$P;ZgmGQAag8}&Bp-RV8hd#LwF?}grLy|;QF^gil+()+6S zT^|p92z?N~&h_E+5$Yq-N2ZTPAFVz*ef0X6^|9z<)5oFz{%gFO@qFWb81Jw7b~WE_ z=5jR`{CPK*4|Dl#uAaGG&GlxkcXRzPFQs`o&fL$c^A{uIhXT-&bn-Pz*rRhxKAq54f7Muu73~c?egdzlm{1Q?|NCY9k zgS-twGKjJiMzlusMvOrDjre1vXXFJ?JD~70^nViAfOEl{zzl(efTb90E|^+Su;5k! zn*tIA+zAjfHL^EyFmeGjcAgbX-wa(0T@Bp~JSEOOJcvf!jC!0MRHwZM6Arc+TrOBN5H>I%z@dSs z0wV-o1)K($1d#F}#HU8(MioYtkf)96q1YNV8Fd);4F7{u4GrH6KhA2aQ$d3S2Hgr8 z6Z9bHC73%Pmq6zDfFuF=0K0wc(y_J1W*GZb!=>TMaBa9X++zoYEsfy?y9L94jP{Ja z7=1fSv(AYYGbn~g41XBZFk@k&!9as?_)_bheSWvM9V%;)2H99xCHhMC8F?ut` zGv;E<)tH+xkF$mAyixE5fiI)J+6<5TMHRi(@XG~yBXiQ{GY)oQIWlV3(Xv}2H zV$5pHb{_1E10L<;?DRsl0|Im4uYnZ7?}AE%X$u##*4PhYow0$jp|O#%v9XDA|jwc!~#YuwW~XIx-hXk27mY+PboYFuet zZCr2MU;@ts7Zbdg;Bj`0p=tsdKJef`oZ!DfxWWL4UoNmFa3%;$5Skz|L2QD=1eFOo z6U-*qOt72aFrjC{iwR%Pt};|sAPWet9Hbc!u5!1PTGCgSUbi2o(*}C|>Evn#h?bFi~it$V9P;5))-6 z%1u<5s4`J)B3x%P(P3iG#Fw)>4HX*5CW3PZx&>bmf*b~0ylJsDu`_XC;?TsAiDMHd zCeBP;n7A}?W#ZbzlZj^&uO{A2;+f=fR`8;X4V@eaI|7^s3kIVS3LhqA+y#j>i8D!H zlF%fPNn(>ECP___nWQvHWs=S$y-7xs%qCe)vY7-|K1@m`)h2Z&4NMxDG%;yv(!!** zNqdtHCf!W-X0pI!iOD*XjV7B+wwmlPxiooT^2p?|$y1ZpCT~pMn|w6+Z1Vl=3@*qN zY>Lnnktt$R)TZc7F`8mF#b!!nN@GfA%EXkZDKk?RrmRd^n{qKF9c!NXX&$B#rje$xrio3Hn5HmIZJN$BlWAttET%b3>zS5K>r5M&HZg5#+S0V0X?xQS zrkzZ?nD#K8FtGc8CNrIW;{^lcjhf7GLte>Xr{zWshM&!m1b(p)S0O_(`cs2OtYC5 zGp%OY&HQ5KcQccjt(gNehh~n<9Gf{ab8hC+%$1pIGdE^#&D@)LF!N;Q+046Hlv$iv z0<(l>iOiCjr8G-rmewqtSthg0W?9U#n&mL->sdClO0(+o%WSn~b!Lss8k;pSYh~8j ztesgWvuKf z`SWJ}2=njN{JojK|61>Ay_@xX>wQ@7uf1IDwEc-Ir zm&LxUXR+dWst^wH!67}^>^hutb5<>$Co~|+EO9`>Ngv!N`v~nLMgOvWqA?rHiGTrPs5}^5nJwTLX*+OAEvU_6WoV zte-$>LBWDm1yl;|6TBwy${ZLUKsrm4rPb1Am1ot(s+(2!vlsK^mOvMQ2LiqWS_DoD zbPFuSfJH!f0Kx!50r~-q0tkZ)b~~(Pc*a)EmOYCjn)zz^2J`Z)*gWk(_<1nlV3@(& zf@uQ@1gknc8{hI5EEd=ya4+CGz$$>aZ#lJ$OZ~Rmv-$!p?<{9Jg)=B$P^_RXK^TIF zg1G=1%7@iokUyYPKwp3mfUP_B+g7JmmsZ!)Yn3&rHJLS)H66aKtl6wNto5wDSbMehX6>uB zcWWPKpXhmq;pV{GiT4069DZ9oS6muDAJ#f+18YNTBWq)86KhLrYioOJ7i<5uK2rXk zb(gc06lGLM{3AUECK{*?Y%YjK7=myO_q5Jg7g!fs7g-lumspotms?j^S6kOu*IPGO zH(9q@x7)z8!NmrTv+EQcS11xdC=IAJ2q3s;(4sI~;i(1A27wJi8$>pUZIIX?wLxKn z(guSKCL7E)SZuJ`(6iy?tW8B-7CH%#Zv(Xrm-IHcV_- z*s!!=ZNtWfoed`&c{aM7=Q^T(6}4OFHb71e^f#a+7TNXIXtvR2W6#Eyv&JBV95GUA!5Zf?3;dtYU9$zjg4CycQ)>AJlJ@)@oHmSbGPwf6VE0Wo4nfOem2FTAq+JPi1Yze z2R{Yx5lS8=Q@pW>vq@l+&?b>hVw)s3No`Wtq_jzIlffpFO%|K1HrZ@)*i_n-Z2Gim zXw%H5g-uJFjy9cby4dW^X2xcL%?g{U2*|xQ9Z`;kbyX~Cq zBHNX=t8F*fZnoWVZU}m3`@r^*?PJ>~woh$e+rF`VYx~jmi|zOG6o^6Cf$b35A+keZ zhuRK}9XdPob{On1+hMcAVaFFchIWkYnAtJ6V`0bIj=dcRJC1go>^R$Tv6Hh?VyDbb zrJWi(b#@xQnJ7;#z?OfQov~y$U!OpXtH#;A8F?Mlw3G5Qt zC9_Lum)b6!T?V_%c9nKjc8%^9kLx7%TNWp}o_v3p?m(C(4lYr8jg@9f^&eYE>x4-e;KSR`EWC3l4Oi0l#DBe6$n zkIWvWJt}*&_89Fk+hg-R&-ec4dsp9k@x6E76TT;Xk9?1PPy3$nJ?neU_X6JweJ}F8 z*!L3OOMNf%z1;T--z$Bu^1a&k8sBSuuk*d$_Xgh^eQ)x;+4mOTTYc~F|2O&n`_I2z z{mae2y!n?5$0YmT|MMS@^Vr_A%6#+R{`&84{yY2c=4|W}%9j!;T%X7%-yeN{^8MNOSKp<+t9)1cuJK*xyU}-xA2>hA{h;xK)(>Vs*!|G?VeE&Q zAC`XD`jPXa*pFI2Zv1%g<^7UhW^<4Or_rBwe{TGF^yk0+ z;{2uc*NeXf{u=vh?yr@<4*ur+U!MQ#;{O``U%&ld|M~xKB#_q>B z{g^&~EbWh9!H@rbJ-yr0`*?cU^MC(6zp3Xp{k*(9FK^Gw$Mbvge9510|2*IB&$o}~ z+rQ6u@A>}E^ZovOe|x@*=evBq)AL*`K=V$c%%%7j-^AmsHJwJ!%=lJ}bo}bI}^Vjq9-{Q~R8T=R7{=>AA?~(msFve*XLM{I`Gp=Y4v&PcQtu+&;g5|NMUa z{N8?k|L^naf8Kw5-reWh_4EDf^ZEAqeE)ok&!_x+(&v*upZfD@K0mLYpC6wt{B+f4 zn0-d~&&Yk|2sVvr~Bu$e=hgWU(M&Q>GR+Jeg1p-{5Sjjcl`1` zzW(>$*WG>HgRgt|b&tO8@z*{1x~E_F?CYL?-K(#A{dI4??(NsT`?~jE_u=b4e%+_9 z`}}oZzV7SSefzrq`g*&4eZ75sgF59DpZ{08|L5+!tMhKo^PTtMyx-3I zdv?r!6YiUK|2X$g@BW$GjCzqs#L_uaYgq5B@Y?}_`Ky6?IB zUb*kJ``)_mz571m=z8~k#*y@uzNY&EqAy1Y{7qhKN|~P>BPg&<5zK7 zDo#Abk)=3!6bFmqOi-Nki6cC5G$u~F#QBsseiDaA;&@0L^oT2UHKj+DbeaX0}EXT0GcH+Ro*HXF`h!})4BN)6|w;b=4*d*<#v&NIWIWjKM% z-Deyjh6BUg9hb$yBsi?=f9~<>9>P5oj%&i9M>x9(XA$8@A)Kj$Gjec-4Gy7kj~*w% z;2am6#e!2+a8`=wY|p)2&ZhtKyb5$^p_>7@LxAvL$Kc9BXvCb3u75Q0qf8&g z_o%8zxjg#cbNAMwwH(de?%i|m|G4*ydw)64l|4(MQPYg#STu5>=>aK5VD%u;;PFDX z#MF<{SQNaXj}^tKXgEbDX^M(Z)M%p1(!I}4c<2^H>)(0!z*&2TS})W^APNaKA2=I~ zVrZY(I-t)B4O}S9LcbMCsZbq-2B-|pO=w3#lM$+g(D;Me9VZSaJ#@RAM;V+ID(F2y z`2>QMApHTy!FGm{ij4@0C(sswiU(9Ppi%+#2WT89ko-p~9>H}4$dL(0z}rb=jXXz} z^I(KCRE#7rg1d-mA~yik4kk8qS!`<%(L|OKp-1Erktam_51~Hf@k&RPqsCE-)S08f z(d=kN@X0C9sf$zh^Sp&KV1o<{f-8ucAdUcn58gQBUhI|-ML=KxxIajJ@bsYJQ-J19 zRp7Y+UIUv3$L!SR*mHbw{Nng=9^i1&s~}K;je_q4iwPtUW;^s_Y`=g5g5Cpc2S^TB z8$h(eapkxM2nD>!@#q*AgiYl+eR2A69tUwkB)~oZZGg7`6#=FJ);-i{Z02Cw!(xXu z4g(vmGpu6Ru>~wor+cRdrx!S0FtMERoVlDQOPrPr+!VMV@Gamsz!iXY4`CboLWtTB zqoE)}|AlA^jkSPS>CFGf(R(g8l3h)^*D@8F0U!{To)p!wY?#dcep4eLmW9G}UN> z(P*N{L_>%!4y_mZCA2g#z322^pgKqWjjEU47kbC5-RNV3x{5xCK6?82AANq(*B2g> z^cCaWr(YlRi|Ci&fTmwg6cKGgv~swAaK+n2Cj0iH+EaW8#E3CC-R*;)1v$u8CXXj<_cth)3ducqP7(L?j!MT?mCk z^arTVVCezV0t+%cF_4i$pn;tOT6X+4!X!eXBu3&SF-by_lH?=>NkvkVG$buaN79oF zBqPa0vXbDven=zI4e2&yQzQHnF?0wU0cRTYK7e6hdWH)J!c|B@u;svzKtIAqs7xxP zN@}D|8k44^8EH;hkd~wsX-(RYwxk_tPdbuLqzmav`a>3xZ9=LEfY!hSfckmFz|y zk#EQkAw&iIY)}aSyn&e;?ji_sA$7s_2Ez|r7tZ8DuH;7U^Vx`z9c8X()Q;IW+ONuLsYl<6+ zTZ%i1dx{5&M~Wwk@tP~eH%cN(_LQ6`xlnSYnvN=hn9 z8cJG921-UsCQ24cZj?rpZYbSRx~KFZgpecU6=8$vh0<3_KPV+inNp!tDRoL?N>fTR zN^?pJN=r&BN^43RN?S@hN_$ENN=Hg3N*7A;7C)5UDLYYirR*`Nhccp!DHF;H$|}lg z${NaA%6iHM%0|j2$`;Ba%J(4@9m$7?xPiky{|q;1&Xfz~O1V+)l*g2(lxLI|l$Vs( zlsA;Oly{W(ln<1Tluwk;l;bs5Dk3WWMaAD#{6octiY*m8Djq`gI^t~+u?T=VjAg}Z zXxEC*P+}Lq!l_U&6+(qlVN^I3F%=0FDHRzNITZyJB^4DFH5CmNEfpOVJrx5LBNY=B zGZhOJ_yNAD_@UxX#UCmoD*vW(L*Dve5~ zGNv-2GNm%3GN-bjvZS)2vZk`3vZb=4vZr#Oa-?#ha;5S{eP&Z#b_ zE~&1luBmRQ9;hCvo~WLwUa5(w*-*2kW=GAQng?nQA(0rVm`FfsuGBmRJ0SG<5WAt( zMwf}RykTmD8l}dlacW{}5^7Rva%u`{N@{9q8frRfdTIu0MrtN%W@;8{@TNCvzNz`4 z=1$EYY7YUi-#!N3L;D)GyX_aXOs!C>)Ec!;ZA@)KZAxuMZBA`LZAooKZB1=MZA)!O zZBOk;?L_TD?Mm&9x`?_hbvx=Fs5^w1TM?xHKYChcgWq8m__C z3BBR)M#BdUUo`xehF{^yJTMJHgVJC$I1Mok2@NR?84WoN1q~$)6%92FEe#zFJq-g5 zBMlP`GYtz3D-AaqzG=AA7}2<+@k-+xjqfym(8x3jjZR}sV@hL2V?kp{V?|?2V@G38 z<3Qs`<3!_3<4WU=rii8kO-SOp5~yj@Q}A<4uQa`dI$~m)geIfOX^Lq|Xi90yXewwb zX{uf{yJX>tdaSJ<~PEqY5t;_Xl9y) zW~JF_PH0YP&S=hQE@-Z3u4!&)?r8359%vqEo@kzFUTFTN`A$nj%Z8RMEjwBsXgP$4 zZ^XL2bIe(fUE_C$0aX z^^4YDp(tCKR-sjCHCmn4l-7dQlGcjWn%0Kame!8ep4NfZk=BXUnbw8YZ(4t7#k>Ee z^$&7%fg+~cGt4)1d!ySs%00RX-HdKA-4eQGbSvmq(ygLfO}CbAJ>5pSEp%Jydqdx6 z`o7TjmA-|(mA+H@&gr|L?~=YJ`u?Gx9sNAe&j;OibidI3O7|DK6Wy8aLU*OR)4ia3 zP4|xOJ>5sT&-8mozaKc-afJW>;OLX1AO6?>`0q3Sef>YL^Nu$Uy!qtK5APm$_sRQ+ z_otBifkJgJym#Kmyia(a^1k4G$@_-)6Ym$^ul#W4!-Wr5K0NY)_`rM+J}4hjK9qc@ z_)znq<3rDffsawBe2>gWK}I_tosTgeQ$Ch_tPn2F$Ci&hAMrOwK2Cf(1kFpxHfAIQ z^T`pui}YDOm3*p^mdYWo6o2i;=ZMc6KJPh1T_Up%p(Ox912+hK4$RyzLP1{)`3yEr zD7_I`hqO5)!y(HJ>1zqX&-h&Ox#Bb879zfE5Xcl#??TQHsM25-g24kvINVeaDMN#U zwH4}j1fL+M1c4$*{y|prM9D2wOF@7a%GEg9v;fu!BGZg31T_9%y=CcZ;Y2c@k z1Ca!N*NC4t{JaNTBV+~!`~(OQz&ZfL06#svXpneA!GxvXN9cZnqaJ>ESlMAXhh048 z=Y*dtey-t6=I4Q*VRwo6Wy3FfI7LGQO)zJ|Q3>lKY>IHUK`;(I6jq4nrC@A>4-Nh? zIKJS~f|;s-ABkUDei`{?g(HPuqYz^lY!xsLS+bbAoP6C!E6^aZBS`p zv55{3A}uJZpo@Z-3ECq_h;n`_`K^Mqh2I9qMEE`8_dN$G!zrXJ28jR`{Mg51kNzC2 zdtuXz-7waq=ohgi#cC7#NGuVt=gauL;P;Z>D}Jx}z2Wzc-v@rbVbg%2CsV}qH`9h` z%d}&9z?ckku8`#z#yyzSV77v32*wteGGH!%W*)saHV+sWqc=rsijEP@8`>)LIcQ7J zLZISDfsQ&GB`-=(RDLyzCloiRIq=BG;}%auJiu_=y0g9+pz7}_G}Mq2exC#Z$}O%f|vlg z2SOD{FaRoG?u2Iol0ao& z_b^N*9+Gx z*LQCA+?=_2=H{In;zqbJZenf{Zc=UvZc1(%Zdz`7ZU$~fZYFLPZf@L0+#a~Sa{I{b zQ-H^`Z`^)`kzOm@Dz`DW1-B))4Yw_~9k)HV1Ggi$Gq(%3H|`?t9=JPjcMYh&?uEP8 zFcIv8JL4|qF5xcaF5|A?uI8@cuH&xfZs2a@ZsKm{ZsqRIeZ>8i`#tvu?vLD`xW90J z<^DOi!25UZKf<69Cu=Xa$j@baNly@aX)ZBazAlDbH8wZ z<00Z<%fp_B2Of^d2j=0z!p&nwS2Ud~7$;pK^!XI@^yD0g9A zlo#X0d5L*Rcu9H5cqw>kdFgoRc^P<_d0BW_dAac#@w(-8$Lj;H2VPISo_W0nE)fLa z&|a;O419$l@yfgkuga_Qn(~_Qn)6!nTJzfQ+Va}-I`BI3I`KO5dgt4ok+^buVlW2a z-n&6j&U_QTDc_85&bNebDc>@_<$NpnR`adpThF(NZ!_OkzTNm+_~(P~Z;Xfkz32NN z(N3ZVi9RIyl;}sIKl1lE#IXFM^3NcfoopUt^C6p0+5E_MBipTPce1_8R%ENPHQBms zW7!t6tz=uvwvlZo+g`SVY**RdWf#eAE4!WS9%Ofv-KXrn0s?dYDtr6~%U)!k%D$9+ zEBj9NgX~Ay&$7SCgUCZ7hkwc85@KNvk8*gD1IdBqAaYPSm>gUVu^jN%3OST=sN_(~ zp^-x;hh7eY940x;a=6KHCr6T_$Wi5Ja&$SSa;)T7%dwGTE5}}rgB)i$MRGcX6q?hU zoZjUma#A^&oLo+coN_r8a;oH1%c+r5FQ-9Hqnsu=A@nzr^G41)IX}qxAm?Mq-wq-7 z$g}}B9qdowslal8R}xkLNawI6Kz)P+Zlq-+-x`V3F><5joXfe8b0z0i&Kc!hrvRoC>%XNEmRM z!bkz(A$BaNE&)yj+Z0SvAVdN5%mCJurwVjSd1}Cp1QZg`MtP3pc_Yt<5QiS{d?4rn zdk0V*XkkEWz`6=&29%6g+MrwoEDW44(73?Tiov>)=M=mudCujzkmnM}Cjgk_xtHfr zo@aT!$x9?Jn-H`fAUFWofIb6E43I8>cEA)1&j&P;SO=jH2D1aK4bU;bvnb@Hl9v|v z1JDiRWssKSHm3*mn}>r5M5%wgvuHwTUcS? zUxn!u#!=WiVTP>WIfOY7u0MGl<#mQHPTnGU+k`0iVDW-G3$7~opx|GE%LrZ|xKg0v z#KH=tIvgqRlfVQ5&qge7sk{~PR>KkimA}085TMI@B<~w2#pV4FvgL!i8ro<`nIS=j zZWuCOh;$*Vg)9^sFx37~g+j^+{Us!lkS#)(2&G^Pv7Nk6^1eWxB_9L{l>EZbFcR7b z?I8;Ysr6wyj>R@s(O4d1%ZsHf)~MKhVpaJSc57jchwT~`U06Y3CxjIa)-BkMV3~oP z1l9u>(_>0rW6+F2Fy^xuk76{5=^=)F7{*~bh7lEJNy3rv1``=fScFd)VT6>_Ffu@g zk8T|OGn!uXt7tFL5PpQUUg($5(xB5oxsUogMp=wH5A_*JC{#bFS5Ru;agN6=9+twh z@PelT&UE3sNF=fm+2L@+A&A2c#}RX?;BqaKFtr2&#+Mp z?~OkyVj?b*h-4y#NF`E>v?85IFEWUXB9q7>vWk3*{D?-P8_}caImEysVhb@2KoNtM z2eb^V+pr};$%~~W+BLj`s;G&&Xd;@4=AwmYDO!s*qJ!utI*Z=LBC(CwR%|EsZ?Oll zgV<5*Bz6vYv&iy7UIduO!194%1CKcTPml~lWM`jZ{}KDI*sriGMVpA<%v8+8Tr3t# z#WJx%tQ4!nYOzMF73;)$u|aGUo5U8eZ?PXS{5*feBk_&+Ui=)=ZjmI0v z2M%?(uOL{)ZWdiBK1f$_6L;}MJQdHxbMZpF6tBc<@lL!KAH^r}S$q*+B|c019C$qO ztHfVn%^RD0 zJ4yDEJVWKu zOVUWvO43QvOEO3@N-{|@OLCLsN0PfF|DU9LNe_~qC4H3iIhfM0tVWxjs-z~VOBzd> zNSaETNm@u+N?J);OWH`{+r`$tZOExKuNhES4;j zESId1td^{mtdp#lY>;e{Y?cf!a+5rg{2$3Tl5Zv7N&X=DLGq*IC&|x}UnGAFd`IZb zA=1o0CI6EAS6Hy;EV)RolAGi%c`SJ%c`A7(c`kV&c`11%c`bP(c`JD*c`x}O`6&4; z`64;q{af-M$?uZ?ks^{}FU3KMlN4tuE>gUQH9iIyg-T&kBvPbOnDP77~%2dis%2LWo%38`s z%2vu=%0bFe%2~=q%9~VIsU8D095|@zHR$dkE~r>4mCB@YsbZ-TsZyy*sVb=&sXD28 zsRpSgsb;AbsaB~YsW(#Zq<)b4B=uS9YY-`5JcDzkR;f*DmpYL;l{%BUkh+w*lDd|< zk-C$*mwJ$TlzNhSmU@x;CiRarku+y%E+HkRc?+rs%zGM<#-&N6$)w4pDWoZ-sidi; zX{2eT>7?nU8KfDdnWec&gO|EXdyw`V(q;g@0$8Gbm-Z{jC@?_6;n$k9E^R7pCT%Wl zA#EvbC2b>ZD{Uw3AnhpaB<(EiBJEAONV<)5mk?jmJxTW*6d5=~JC)9)bLnE~66sRu z3h658YUvv3TIo9J2I)rWCh2DB7U@>$Zqi56Z=~N!znA_&`h)aG=}#fOuz!^PN%}YG zKcxSJK2-W&LH&Wb7tZWnr8nta`dIo@`b_#l`bzp*`bPRr`d<1$`bqj(`fus)GDI?L zWZ25Eli@*zgA7L*P9Y`{#M9wbhBp~LWcZZfD`-px4o`-`WN;Z`84?*%844Ln87diS z85$W{89Ety83q|f8D<$48CDr?GJMPMBLm*|kBlc7FM;ZTi5(s_qsr(qCNicnW-{h7 z7BZGHRx;Kywla1y_A(AKE;6n%-efw;bdu>3;vA<(nO*`Q1QHlLwI-FxWr}4=Wy)mA zWh!N=WU6IqWNKyVWa?!aWLjjp$$Sd1{P`vDMPOc;zhtH`M4UxtmDyx=nPZs~nNyiF znRA&7nJbxFnLC+#nHQN?nQyX0vK(YN$#O;1Q zYFQdtT3LEo23ZzaR$1^mcUdD@x3cbKeUSAa>q*wLtQT1y0izWV;MO-;-(~#@svkV1 zSC!ReO=ZnwEo3catz~UwZDs9b?PVQgU1VKly~&E#|1Gx@Vld_Q8bm`Fm)=ZnF1J{2 ziQH1T<#H?K*2t}uTPL?sZj;;=x!vUZ5{iQFSiW=l{w+T{`FW6^54oS^ev$iC?(cFZ zxwD{VxvShw?y=kxxuA^penpIZOvb+gmWgKj=`^P}5Hw;SDVb-UB;S+`f+ zzUcNnh@rNuThXoR)^zK-O>~>;w$N><+e){!ZX4aUy6tq^>vquXsM|@mvu=Ou_J6vI zbhpvnPInKwJL>MFyAR!c>h4E(|I>e8^xqb|N_*A4>ps?fq5E3*o$g27Pr6@pzv}*` z4-fi4`oQ`y>fx-1s~#Tp@T7+qJ-q7SEr_-btOwD9>cR97>mkuYs)s@kr5+kR^m-Wd zFzI2|!=lG1h`cc5Ms;>nJ(?a}kFg#TJ*Ilh^qA|h&||5`N{_W38$Gsq?DW{{anR$a z$4QT~9`RB)J#F-K(9=avk0CYU^c>KDr#C&l>*-gJlAT0PswdNv>nYY#qNh|(g`P@1 zReGxR)aa?zQ>Uk1PlKLDJxzL=^|b0a((^{odp)1^dM*NdT#XG>Uq}lAH76++34j#FK4}6LWnC8!w_%*HZv%OzyiSs z57QV_Zy5ZeV!fzdOfRmNR4jtDYK-NMeZ{V5%Nd|BjuwURj0c-#lAY_c# zSaw%nN`M;4*|v5}P8lIN&A#b^ta3C<9;twBc{ z8+|{)gbe?12oMf_UHEKaj)j*MPE>eD;aP;}5_=~!Ozm5e+2dz{fhMKU;4Fyl|{d<`t_t=&-(QW&xw9b`rikbDD>Bd z{!;zr`U`rgNNJHRnJ*eoQW`measfHvAGA5{qpx{v&l_qF7Ae&J7ff7PFQr;-< zAw+;~0Goa+=|iq^ScGF~jWsiN!&vKL3yZxec9~emp^wBi4l6P2s1mGsu#dr71sf4; z8n7h5I9|EK)Efh3%uH1xm5s_y`-Z;UO|z8XE`3aDmRrM zJmgem1a_~P+_;y1**;*Y7iYOI>5rmDGW zp<1cds;z3L+N%z#qw1`>s@_!ZYLVJTZL79Zdr&*59o0^1XSGX6t41^;l6(N62d)+H zGXOtejfEG@KGpscM7~&cqDRM@o2j{4td^*yYPnjWR;pEMjasYLsr71u+Nd_E&1#F< zs&-TRR{K%I&+|t;Qs1cW)z9je5SNW?MnnmLf)8FS=xZR3z?%zkF;=XY4d9n{Q+M@5 zJyp-u3-wC9R&Ufh^Tkxn@mkp*EH5N(KOSv)U?vH z*0j;I)wI*J*L2Wy)O6Bx)^ySIrdg!fgJvhq&YE2`yM}N}Fj}yS&RnxtvqZC0vrMyG zvqG~*vsSZCvtF}7vr)52vqker^Nr?v%@3L%H9v(+r~F0p_n_&LZkorMr<&)Q z7n)a^H=4JacbfN_Pnyq~=_8mv17-Gs8lUYOV={dGSxEE zve2^BveL5FveB~DveRsZ=X5^ko-w2HM# zw92(AwW_qLwQ9BMwCc5*w3@YAwT`sjXnoN7to2pv$B=>rSYZ7I6KBxBLjr&y7H-Yj zw05mytrM+Ntuw6)txK&dt!u3tty`@-t$VEptw*gVt!J$lt?@2*Z6a;<+MKnyYV#aq z^%#sbs*P#m+Qix<+GN_~+7#N9+Em)q+BDj9+6>x^+DzKa+AP|v+T66=YkSuAP1~=a z(8tNqnzpWOtZk}orfs2ZrERTkqiv_{pzWybqV1~PM!TJM4lo{p=$Pu5=~(Dk=~(O7=-BGm>DcQy=s4@R=y=m=yK5IsLNTGi!N8> z>+13p(n|o&T!2;h2o{hnmqC|Nmr0jdmqnMG zEAKhTLDz$>M_n&SoYVCMY))O@b^XxwQ&$NOz}0khU1MEST{B&CT?<_+ zT^n6HU3*;zT_;@^UGd6)^mfwQSrIRctd$!8SMLz)=uN_d^p@x?)myH<{zsYQ4>R zTlBW-x9E4R--~|#=>MzqXQw|8`g7Eulm2|@&!_(USMOK7linGVY&?_oZhCjU$9hlo zUg*8ld#(3I@15Rzy$^by^!HAGKj`mI{r#i=d(=OX{`p7$Z1m4o|LpY7gZ??`pAY@> zqkry-Uii-+`|D`Y&Y}m4J}mmQ=*OZz_V?NTzS`f9_K({?sr^&hKZE@<+Gb~)2ittu z=F>L4ZGLPU+4f(y-Pm?(+nsF>wmsSQY}<=%ueN=(?UQYvZTn)|H`|hJIn3ixS!~U= zZrj+liEUHcX12|3TiCX;ZEf4ewykYD+xE5{Y&+U^vh8Bq)wbWZ{cYR-*)Fo(#&%oV z?QHjN+wE=lV7sI3PPY57-KXt-+3wqR|FeG&w!hfkY+u;Evi)KYkv&k*Qaz;h(A&dk z4?lK@?C>u;ob7P2!_^Ltc6heKiydC=KtXkd?Ey-mgW19D5ZfWKLt%%~4wW5hJ2ZCa z?9kg`u)}DF$qus}7CYSR7};@S$Dmyw_{<)(vFoK zYdbb}Z0*?DvA5%3$I*_H9cMc(c3kavx8rX+{mV{!J00wFveVg47du_;^lGPHcA}sW z!>$8`+sW+Yc8cwk*eSJBW~bavg`G+}Rd%ZF)Yz%DQ)j2%PJ^9BJ56?)?X=qIW~bkF zj_ka#^Ulr>c0StqZ0C!euOS2*nT-e+0+k<(TX5Y#KskQ|s}|&GShJvJJe!@}&as^v zJNI^;>^$2gvdhLUJG(sC&@gmoiZ5+O)P4*-i7 z{5ggHg=utI@@)z$H*Qx_PDdh2YWo*%rw{;{XXo;LQh zLx3*gZ;@FWvcy9)EMl6FZva{_2zg-1dXU~y6Z;*9o&nE=SAqNgoZ6TjLgrXt(37H8X5QDl0J`G%SP!3`PhH@UsPsnYG z?YTlekUh7^@3H5>o=3#$AQ8u2B751`%g$aN?B#&?7DTNeE(IAUA*C~9haidpU}M1i zfW7$)=DZL%f!!J!1tc*bJ0Z1~450#u0RWfZUS@k)>@~92zwLEnuLqFR0X+w%Jmjbc zL^wd+z;J_<3_2hFi^d~q=trvQuw$QXO??0o{G#6JFIA0PHXp_d9Ej}%l6`{?asun+u&-}do8`}}SH z+1h`|{=;EKiGJ( zzJhl%IAF1BMf(W%ChU}OKPE=0Q3fv`Y;~}=!Chul!=nWc6|7Bg7QxkHG{RB>1BTI$ z(cL&Q-WczV55`AG|DoE4&K|OONZ3QlSrCgu=M7mlgwzl>LnMm@FM3vJWFcCG{1nnp zXfz?Ugh~?XLkI_<_Jhn0O1QyzG@guSUWCxNO$X}pYfzTub)dm>{ z#1_y-K*|8+!H3DOU{MWwdaRVuC1azE6)$$B*l1!kh`n8j4H?#2CJpvRSoUE1g4Kx0 zXfk1EfGNMpijlhMU#5}i2194lorN*+1E#u|(qe>);U6D?BQvIM*_}qoVGX_LzZti zeQ-wLuExEG+vCIR(?BQ*R~s$}d^h-{@RQ+>o5f~{S!$M<A(H}h|cuNFU9{1OoF zpnt_*!KMsdHh!nrEsiZtEKV)XEY2-1EUqlBEp9FDEbc8HEFLYMEnY3zTXMDJF}R!| z>rNz0S@6LmZb@uOVo7RAWl3#GV@YR8Z^>xMY{_bAWa-w@ouzwA50+jmeYf<(QVQ~L zs2eb?Nn=YBOH)g8OAAX&ODjtoOFK(@O9x9wOD9WbOK+C`Saz}OF$6Ma&z8LejX5L| znTBsEODsz*%Ph++D=n)mYbn)osn=M-`TP=?)KZQJJ1P|sf0f7%XTK-`v+x@>lSqLx2zc28It=e1lVAa8@qg5xX z&Q@KldbH}rs<*(1sy+j#1`c>g{-IdG1P*shPKi)-=|%)^yhN)(qB+)=bvS)-2Yn*4(W5u{N@H zXYGTvM{7^kUaY-Z`)KX6wXfE`S^E(_J?r7b~y0di`>#o*4TK5!k9svIX%B%ad z?#sIWTK6kZ3Si5CstAKpoNAq07h9KDms*!ums?j@S6WwDS6kOu*IL(E*IPGOH(EDY zH(R$@hacu<-M4i=*4?f9WBp&&N7nz#`i=El>vz`w+xiFV57r;8KUsga{$l;r`p1x| z-am)ztp45l59>dz|FZtS*8d6+1-M2adcqtRhi>oIC)TId=hhe2m)2L-*VZ@Ix7K&o z_tp>AkJeAt&(<&2uhxHC|6~2#`rp?7u_3bI9~(9{Y;D-t@LHXUs`*>tw)V$;>8N1L8(dJb`9(;N700Ym}w4TNKu zh2z0BxlOT6iA||ZnN5XFrA?JhwM~sptxcUxgH5ANlTEWtt4)7wj%?oAytDbi=7Y^A zo6j~sBFEL{mw?R%U2^`g`P1gFz`cOiXO=K}$8&Oan`4_3n^T)Jn{%5Bn@gK3n`@gJ zn_HVZn|qrFn@5``n-`l`n{PJXZHa8z*s`@{XUpD}2U`xd9Bnz-a<%0tP%W1aTRv_1 z6?hv92ZKV@qdCZ_8lIXv<{FYRk=*Z(DwB zx!W4qy0LX@>(17_tq-;yY(3g~vh`x?qpeT2z67S``eEyrt-k{8116_cY;{{xTQgg8 zTMJuDTWeceTRU5OTL)VwTW4DrTUT3ew*J_Pcl=|w$Zi|Eo$Pk8+mqd14UBUX8n@VP ziQQ7WWp=CW*4VAJTW`0)Zlm2MyDfIR+3jxMk$rFM`)uDA`+l_VC;R508N~Jj)yj8b z-?@F4_Fda|W8a;95BB|I-}r~W?f+Hwv$LNE`#IXrhy8ro&$rzpyYKA&VE3cl&vw7q z{c86|yFc0e&F%y{S5PBjuYx-0?skvup4dILdtvv|?v>qZyEk@k?cUkFxBFoC(e9Jo zSG(Wr_s)Jl*zZsK6WO1??ax2y-_UFU?-0jbA`}4=62ai5H`t<0>qd&gc`R2hl zAHMnY&5v*Y^6kdAJKvIT#kcBP^R4?f_HF9h!ndVw8{f9R?R-15P>8H+5lb;qpM}FS;`RwP5pRay?^z&1QK1NO;f_H$K2ZR-17?|Op;>11* zW#ifXocOu$bLr>G&x4;wKhJ)N{Id7U*)JErT>bLsm!}Y+jJ!bv_yAWAnCs;uFlOMZ zgCG>EEmWWv_e<=T%rB*1TEBFD>HRYJW%0|+uaRFje%<@^?AME5uYP^>>r;qjMus6m zfq=jVAQsRX81et+_rC)2mHh%5=I{0<;>*|k@KOX(@?2i|J zy!zv#KR$)1XXGLxXb4z+KxYBMf%y-rRqWqTCO^7ACjOZDW8;sVKTiHQ`{T`@B7fTW z)4`w4{&exDt3N&Z(^E)|M#LgAi$LfHzZOg#_y{3@#VQXK_mlfm;!mkR75-HEQ|(W! zKlT1J_|xQ1i$5V-H}dC=KcA6pkNA0H#v|oDBvFU-bVMNm{0}THP(83GLRX6oAqsh9 zQKtxdMt-wD7f9#zm&ji>{&Mh_6EbL#7mLhS1hpbj73rrT{xKwsB0vCmT_As8bA&z@ zn?^JQNPkTHCG(fUUn+lT{AENkpTErha`V^7UpM}GK>Qn$+mN+}q%?$_g^28sC5DV9 zBoctv3x*JUlMwu3b%_oG5lxA|W=JaX*8+h+{#yHMgTNktUH$duZ;`)k{Oy3q76hvx z69sW5h#^66NJ!oe$sEYfK+pj&z#jok6fz+oCB{+|y$hlaGJh+;?gyG5Jbl3N{jK-6 z(cdP2TflkuH?USCf8PLZ4lX&U;(&ky-W@W%10x%RYcQz+7zXqRMo%b|v1>(31io+# zsxN@N{$Bcf?eC4hcmCdkOY858zpp^Jf_Ca(nN#HSkJAQtKCtjWtOH{XcsKyvfM5&B z;el=j9vL8FV19vP3M?f6OK_Az4UN4n+Ar{xfI|Yn2(Tf%AoxB&?Ep6eVhe~W0G)s{ z0>%em8~|qkY_S0J-~_i)Uf!4U_)nezn877S4?k;?{l8dzW8SAod{hLDhj z9*h?7MZm@Y*8z+HQ0GJ0jU6>wNeH_k%Z5lggCH29SSVSc6NS_gI!MSCp*3__puK~5 z&NXt~K&}Lt5yU_c@j!eNg4Tn~1=ndJ zV#kIB7&cPaAz^caor>$tEppqqJz%blF)?Pf7_edtijgITj3LWC4DT>*!%z%!D@S525kl9>Xnx3l~=yzIA*J_@wa5;GOU%c2C?>_sYF?Z`@n=-hFT%-Dmg3 zeRaQi{OIvZ0AR;o9!qG}@lWH}~77@zdDT#M8{v+|$C-%G27@#?#i*&eOru(bLJ(+0(_-)w8{4SI?e2d-3cw zFvc;-z~TdzpHf zd0BW_dRci{d)at7dAWLd^D6S{;MK{ivsaH^y?I5!We!&aR34RutD}m&O1w(F%Dl?G zD!r<_s=aEwYQ5^b>b)Ag8oj!C9eKU=dgt}t>!a5vug_jzyngcf+3OdtKfL}7cvleJ z;AMyR0$LKxdvFcbvDc~Bh1aFmt=FB`z1M@+qt}zyi`T2yc#ChZe|xj{=IYI}H?M&V z*N8Wo$dH-$H)H|Nqr>Rs+#>0Rwz=iT7l;@#@q&HIh_d+(3lpS*tx>4J#U0ralt z;84LZ4EJasd!Krrd7pbdvj&d1)z!N=Lhn@@Y6EI4KKp$2`Nd}qLqVKXbL?~CbLw;EbK!I4bL(^G zbMN!$^W^j5OXSPmmxC`yUrxSUeR=fd$(Lt@HwKgfOg~UCVZ?}&Z;5?Ld`W%De93(& ze5rhCd})2@eCd4|eVP3K=jdFw8#i`!`z+B)V(G{vCF<@TPH*Z4pa2vv#k-e}`aQDy z-4E*Yk2S_hV%crWWD)qjImh8SPS0_EPRr+%KBw$C?Vi&hv(cr=k7TV&v|^#({rAmU*FHy@&U^yECH4dmI6zKrH5q+%LNm#}VOJ;Hkd?*#81 zBpXP!kmQi;AlXB5hU5y#4U#(~4@jPn03-+rLBf!DNGeEbNE%22BrPQN3OytPBqO8? zNYluGOs|mMAiYESfb&& z$hMH}Ap4&PmCUY?-D09GdqDPt3?M_u2r>tmK&Fs+$V$j6$ZE(M$O2?7WF2HZWCLU) zWD{gFY>v?my1B$++2#(LCu{<2TG$M*8DTTSb_d%6wl~;5VGFQrU>jiD!*+n}2-_L* z6!Ibl>umU)6XXoJLhd22A#Wk?ARizfA)jD(g55dZx_1aWft`n42fG1wBkU&F?_j@& zeF6J>9HQ@^uqW78u&-f1z~Kys0uB#2JmG+FaBwhx`5KNH9Jf(zdc4HByB!LS07rx) znF`&U<#6oa*u!yv;{>NQoVIY7pw zH*n5PycezSM)9=FV6=-lGjhRM;ar)*3eF}oFfWn$W^QH>iG%+O!o|Tw%u!*^36n;^ zrGZNem%+3L@X^5MXFR$5vxI+E@XtH^^8^0*2Z{w0Ya?76pgC$iV5lKJ4aW(EGXkc;C=Ci}Oh%(98rjgug9ZeIA{YzLpmheAGaMTflkv;ox`68r zu6wv1;d+W7(g@$N@S`m#o(5zw#)|P!3|wN|5V(5dRu~n+msS+MPBK$rs9c}+-bxGTP*+Rz7jJA)lRf;V_ zoUI(-A@EQem)jKECeAhjwoxoRg3TFi4rp^a8=Tny%SJ!&_=3l`4OZas3m(7WxqxQ^ z&mBDX@I2UKOeEY`nA8?N@kDE9K|6$romcE6VW$DRh1;FdZg_T=f@g0RU%Q3^EbOvk z*9H4Ewzsdn7XdB+9{`_`5gUIz_N}q6*!~cJ17H9FPyi250yF>tpatjv27nP@0e?wtyXA4>$mh zfD_;hv;azhGN2r24|D)J0-b>_k!wrWSV*-{t*yN134}ldA(Pz}@o1)vtF z1L}cBAbaI+a0_rbxIMTdxKlLPxNEGp+V;#n*a0iB2QGmt-~ikLcfdXH06YRu zz%$4KWCN0e>_8461;`cT9(Q{7V-W-)5C#zt1@RyyNCnb>1dtwN02x6hkQsCv>A!l7 zg8#!{2TZT{1*HU{2u%f{5i6O4XtGL zU&}Jvj?p7{0?*(Td2T%WeH^kWdmh^vW2pTa)5G#a)R<3$`@1_RGY{- zuC7o$pn5_DP!UuNl|ZFXd8kULDySN$TBv%c2B;>e*H9-=Z=l{sL!;>|jFfCK?HZs) zs0nI@TA)^_J=7)CHPj8%9n?M41JonbGc;>xQfP8$E|Icq=qX#h+HX%o&^Txq8il5W zrh=x1rhz6v(?Zih(?c^rGeR>#Geh_T!UDn@ge8O(gm(xDgcL#sVGH2^;RxXzg-hWB z!Y72Ek?3rgt8jzxgg_7+1cp#Ts30^D0)!UA0AYe)um1(%8^R0P1++_O*U-L0n?t*U zb`R|l+KVx<%}5`#soG zJHp^#U>F1jg~7v6!O*}EV6cy!VO+qthB1LLg>e_jVV2Fe%if4EIv5#7h0()U!C1rC zz}Ue!!Z^dUfax8k6s8QO158Jl&MR}pSnqab5`-15O({Gp;Ft1_GVcx;KhxrKe$%x$sGlThNr2&{9U~>z*B+m#l!R%mG zm@AlTm>ZY_%pJ@<%md6L%rkr~;Ohoo1Yae5wea-~-+#dO3cf$!`wPB*!|NSh1-!2C zy2Fd$#qd&imGEld)xv9l|Ml>D1;2mcVug!$Tzuf-2QI$x?-t)y`1X!(Kk)4vmkV6J z;c|(~6)sa;ZgH98a*xXcE>E~Tk`*Bt_OVY z@clO?2__p%wwUCY>@eA5a=_$*NrA~Vf(nucCeL_tOAr&rL@-fIJSG(;H6{U*7Ly*+ zH%!l%7MNZm+aSGT`oQ#wDPW425~dDQ##As>OiN5FOdCuCrY)xS;RB{4rW2;WFiSAo zM*ezs#q5sRBi>gt#EdX=m@#I8na8Zcti~*0)?(IS)?+qeHsfZEn=Nj3xH;hFh?@d8 zSKK^s^TZ9{2602UVcc}M8E`Y=X2Q*k+YN5>NPOR3ar?ln;8t;4;WprQ#O;K6ig|{4 zj`<$*1Ll{=hBtnLF;?Chta9854#$Av5HSQ0% zzvKRid&IrReTDmg`xf^D?nm5DxS#Q`#={m5J3Q?1aKOVE4;MTXc(~!=jt9nr;_-~f z3m&iWxN$^05*`_kB_1n0)_83281OjYam1r3)pvM0;pu{>0#A25A)W|NC7yabnXGh+ z=Yt8V@q9M-unB|X81D>tc6b&u-Qu}18>`t>@jRH>6fZl|Nt$F4FGb`CMuVL*=Nw+t z^lzqKGqakB%`h6j9{3^n5lj<>pIiL=#D6yU&lZ1r{8{1u{9h~_oZSiG% z?D28L$H}6Z__*NX!(xJw0U1+t7Fn|Zlud2ztZMluOD|bY$U;08tg(!XMNcdyV&Mr3 zC|EL}v$eYIxozK!kI9y`wra)4H$HyhbAit{d~R)9X3H(x%|vZN+yvM>-O^PyfVR=C z%}j09S=vwxpTQ zTFTF!#!A9cuv9EPmL--ImNk|QmI2Ea%MQyP%K^&?%NeU3R(q_DSY4t6#F(i@<*`bl zr3G!jVGnlp-l+&Hhn2^w#Hzt6VAW#PV>MtkVr4J#!aBoxhxH!o1J*~ZKch~>@T&&+ zu_cK;9oC37VePPHtOaYuy284_I$+&m-C;dqJ!7-LCc!4dW{XXZ%^8~ln`@*5Sw+$U zjJ9vF2hE1C5o{D2k4=e9jZK41z^28f$7aB=!0;D_C59D-cMJ)J6hnq#gJFwdhhdN5 zfZ-UWrr`ra5lOKIBC-~yWh8B-W6!byF%SlafiVaM#ZY3XFw__Vh89DIp~qmKZo=@5 z?E>2sw(r;`*k;%su>FWm6$8*3-^j|H?IUiATEf<0%h(FGifxH)g>8dvi*1kXfbEFw zgzb#o8oM0319nI3PEo#UdKP2Z8Y;TVb^0f zVmDzoW532e!+wMP7W*9g9rmXvdoePuRZjayd}{9rd&XX|_t=-%SJ>CsH`oX4JM0JS zN9-pY7C5YNNN~t-*x-=ku*2bm!zT_!u0>!ubI|DYo&FdbxZ4k))TE~dS6kpqhwFXfs!L7CrZvy_>){Ce=E7ifUqqy6QIOV z!juRlN=ZpcMM*NohrCO=&}EptPm5qqL`Vpme0vUh@}a3(EdOSwh){vOQ&oC?hg{b9STbPT3pv{Fg58BkUX=oE@)6+Jm z?UA-;+TLi3v~{!<+S)%KXgkq%raYy5OZlGi1LY^m&y*LG-za}lj+6`KE$#NSJJ9Y- zyMlIC+CjX*?n>GEA30#SG2Eb-_U-hLr#YxmcI{AIv^d0 z4nl{D4lNx6p`TN5?%K4|KfI@kvKVN2a6Dv7}?5<4mV*R5qQibh^{&K_{dW z(@E%5)2XFXPp6U28#ZRob8TW+*ay6uf?8HKvHA9VYNZa<^>%1Gh2TWsVuWVy>$qA&mF{13|1aIYtyxO<-}G3}V`ari zdL-6Mw7MWYHdeHw$DSSsYg^IdV#OqD=0rq#EUs8f#L5`f6R+8(eoHJ#WC4q%yk1BSfIor5;hMeOA=TP zz*hLSU$-5(ZMAI!Z98CkcD8o4HK%PQ>1nf)CBe#;bGCA`otdq;2)4EvvIP&pB?^$? z2f-)7KT%U=)WA5?x3Rko%I#ol6K5Nw+Vs=Lls06vDWOgJZ2D%CG8=f=#A>ivj15_A zfI{#u;g)b`PpZ**9-rduq02CY_H1L%8#chUW3ru+?OOFJWaJCNBC%1%FatG4^A z-45->W_KgIix4e{)jsiEn z$Ib^6F%t`MP23Q-#2vAH>_9vcPb3SHCCQ59og^ViNivcx$5e~p7b1@a)#kI)`c}u6yhU@ zePdKfJ!wf=k=CSvv?c9Gd(x5gMSem4Kji-+|2O$J@=Nk7^6%sm@+tX@{GR-g{F(d* z`5)vz$^T;t-{`M1__1pc_uI9mAofklCQ|uIMMpthy9 zqqe7ZpmwBoqIRbCi(2~{ep9!mE~74|Zcp8Tx=WNd8cx-qGL}uV>rkiEdFo2)YU z0(C8Q9d$i*BXu+NOX_p#chsM$zeMq4e~UmGD~;I_&qf7yCF>paOubU?sV}LosIRH- zsUN7HY1q(^)3BrAlZJwZTZGwI;ml%j1H?&#T?hxI!P8LF(9zJ-Fw?l8@r}k6jR}n@ zjTwzw8h11vXuQz)5tSXIabb;%^N8`f(IyslL3K1Tjh@Dm#)`(8#)if~V@qR4V^8Bi z<4EH-jW3!qnzl6UXxh_sps9!skm*Jf#;fuqG*vXUG<7ufG)*+kG%sl0(wx(Lj`qv> zYDk{goU?h1-3n$$v(T(Gdzwp{8=3>nEzKRx1I-i7GktC7YfE3>^u40*clu80`-8rJ z&}(ZVO?utw^`IBhi|EDlQhEh?b@UqO*E{`wxy8F%e7IHW)*H7zy7k4a3%91%Smz6H7Toznr|8{hn zwcBKFvvZrh+nghIcf)Q|yG`RZ!EIW%-MH=EZI5nya@)dfpKhyeTf1%Jww>GdF5kNR z{uiZYl{ooE4cPQN9>JE2z zc)A0)gL4P(4y8NP?hxFebBEp?W_Qfp@!*a(cf7k}>5i2&%C0a!^-z z6Ka}%(iM$)8BK_2@5JlX>jib>psEvxvFt-dzvwdNTb|7-q0A+k{yn+->7-TX#FhylTWx+Z51{%?4aH{ILOr zy`g&zxodb_!^^r`Yj9P=p}N~>$Wg=X84=IGaM7G&oaXyICSLDg6fNUk8L7(M*+5S2 z?hTV<$TO;EblEz3ehH-Is>)|Bsu{HXDdz`IO?jAQQHpgaatlFaWNZmu- zqjryAZ87U~S=-9$PuAYCeuyb`snS6acv7#KV!Zi#)2)vYeCi0JsZn4TAX+TIV|F2InT{X2)B{d&dXIC&%YV+BU`* zL!1HIDV5o=IQEW9$CcySapO2R?i^2!XD2%+dnX4crzi(DX_A4u4N)dfClo)wsFTu3 z<)n7fIBA`9PI@P^(}mNu)2-8;(}U9@3YV;ftPsCyWvAk_bXq$NPFttF)4}QJbaH;} zeBylO{KomM^E>DF&Yzq=M`e@0#VWJKuI-3ze|yi)i}UKdcfNK$INv%yI6pdXFEzU| zb>+^L2Ui|ld5(VL@)~jD<=vH!m`|}mxE<9?=Sp^^cV*+s;L6sOy(PvJin|rE$#(<2C;cJRN#+qI2U0u4mc6D%d>*~(cy{iXTkFK6wvvJMAH7D0xTvJ41 zy3OzHA;W(DjdxA$n#MJ~YX;Yhu9;m}xbWt}+J(f0)P>B2tqZveI~NWv9HZyitemE(8}^7djVu7X}wb7bX{G*DhR}xi)w0K02aJoMoiC_Tk!R%=okz z--a!_R$S{{Te`M#ZSC5|wY_Tx*Uqk6xGr!zKX_HHVod~CW~Bi}j%Zellyn@TrTZmQiB+|;?Lchlsi+0AP==WgD)dGF?f zn@?`OxcO?Zd}qYL`Dtq$H>;aVH+OFC-8{H?a$h(1#qO2xAMdNl@9yuR}K5$g_X z;x+SHcwO?k=5@>Kp4TIzhh!{o^caKfA@CnYBp zCxMfelb+KBr*E95oEDs3BlzF&hv}13h!4}LaOyd&IBhxmle0Bv31=B+JI*fARi0g= zD8O)u206$uK741)nR4bit2nDUYd8y>*@t(W^_&fyjl6l|O~#u|Gz@HjH;y;To02yT zZ#v#Cc$@LIh~c#@#;fdBc&ogvcw6(f<*ofU6X$Er51b!4zi?h~e&hTRyC6Ao?m6#x zx8vP`cgJWj*gbehyi?wdyua}N8u^ZP@!m78a@O*w0!9KnDBAW$1@)bK3@5VarSUzK6*Zue60A`^0DJ% z&!>z}dp@1`RPgB*6L}}$lk&;)sp3=M^P0~&pAT_vaTY!+pFN*TJ~w=}f7|nU;PcFv z9bXE*T>0{hfxZjzh54d}3IQa8j@t-_5*k?sK!1n?c;H+a|p>+cX!wDVDh~ z|JH)9Z+y-8y5VbXQdPbl`Fb)xC|@s8Vjn%1ri?H{q-76HKxmpkHUXX~>-bvnwJ}Ya z8P3dAX8tX{CFY3Y+tzGGCLiM4k#8ryo%wd*+ciojq9w(|A(mmZ-KpJp%?Y7=^L#5! za$rINzBPOc2FEu5y}{Y}_Tu}R?>XNOM&pgnib!rXXsL~bjOHnPS0i2Wy)=R(-)p`% zMo~1lA>TWr^6_KAj}<=>eta0XCmIVQ+QuL3+A_vgDbeK^=fyTWg*b1EGdmlTsZE!dN~VgbwmE`5 z!`nl$J)JU5OtU>uu{+y2K6)VI3E0lB&zMWKWq3T&IXh0V6FZLBF~ZISb|bf2AiIv; zXjgN)GTL>Ad1Jq#%qROzuy<`Fsl;!eeHVmTnLTsO9GF|?j=5(ZneAg|mIce1rC_;6 z_=-GPAdU&`&$XKw~(gY>N(`d5;o0klpD`Y$xX#g!%fRg&&|lq#LbJt zg2Nk!C5IJH!58O}O&pa%6So5&uVb8;XhYJs%QPXNZAA=tckC+x8m<`b_d9=o@T)LlG`}AF zdh!eTMf_5Jd45&=s`=IMEAXr3-z)z8&c8GM{fmG9mOuWG#Yz_MviOk24_SQ6;wqY^)0J^WxbR2Mb`INx?Q8Jy{t=F2U)kWp5(od_iNm}yo}5oIp+#Cn6`7Q!S@fPQ9ELa?a$um-A81 zXF1;@PyPIqvy-#Rxs-D)=OE`+&YhfRxh&+emP;;|LM~6afLxqhYPmFW333_a<6rsw zQ$9EHd6CaTKJW6`%Fk4Oe#p;Ke%A8S{_iBkLW-pnD=F4eyi1WtkxG$Cv6Uj1VkgB} zii;FQG*O$W%=qp`T(btbHDd~l3qw0l6e5L6;iV|0sHAA52vW3CbW-$E3{u!9nx*)b z;w9I$Tr;_DF4u!xk8(YkoIaYaqs`rjZq`t@Riv1g+I-KZYBtxhIg(8?Y=&Sn z?8GzM zko%k5S8{(hm5v#4Oj;xNz1$C`2{HGE+&|?0L++n)|7miI=--Y82$L}wYR;Yjut#m4|709jFDY2Ys?Z;1RCkosm;6L{3tOaM)FY9aBiPD-; zRvEIwk2Q80tDRWQL%>2;7Dl&7_r+q<7Id~GaisLcFs@}@ZO?3hP77072-1Rv78A7S zo^8JtLT?sYvb>R{f-IdQw6lCkl%L0-hUFwIxL{EOt7O^Q-cGV=n_b(m+WJ$dwhf}K z@oa@A)Cu)MgV1OT9^2LkeT!R&+lkwYJBll!P2D|ho*T2JaWGnnt8I*B<0l&-iR*2W zBD@ezY*-+i*%Puo&t#|}F&*xlXk z#C8W2S%~~4|Nquyw;z#}-3;u?ZkJ}eq}r9yu3sX1k%P#G$PbZ!?03w5AMDK?jSBI{ zZ?p#ccH8&P_VZ5S9~JQ;rAQ@Gi!>rZq!sBzdXYh768RGOugJH^OXQcxZ_$NlE_x6> zik?M_=pHm|v)|vAZA2_@hUy5(U2l1WwLHs1;LdrKOS5m%9nMj#RnMs*Td6e=j z<%g6-l-`>c(QFcib+r1OrGPD%U{hp!g0a7P>7^{CtfZ`^Y@`fQwo-Od_EHW~j#AoZ znWg-e@+H+DQZ1xfN%byOD%D1+tyDXy_EH_BI!kqt>O-m`Y8XvkVH8QDVp!OCP_;^3 zNnK0bNZm=@OFc-lkY+7SD$PcktuzN|PSO<8T%!%rNR|fYu;6pU(x^0Eno^otnpT=l znqC@vg;APGnpwgh5*8BPBrGMYB&;R8OGqT75;6%}2|EdU2?q%$2^R?;5`IYdDWQ;X zjpj*Hb{II*I*yjJw&+K2@k!C%TtOvx38jQeLM@?@5G1q`Ithb>QNkp_zJMNxPT!Anj4wv$Pj!KcxL3?WeT=Nc&UTLfWgew=^_*fcFk_lVS!4y41FaIuYqJrLXPP^Z#)=_=`J=^E*RbgguqbiH(=^b6?| z>2v9K((k1&B4pGmp*_WgM$hqAuvh85^riH*^o{gE`d0c*di(H6`fnL_G8|?2l%bH} zD#Jqtj1ikbW$-eTGE_3uGBh#-89Et88D<$5GOlGzWXxpDW!%Ylknt$vS;mWuMf8Ol z!Nr=X7S$PDe7GM)MlWM2V=ZGNV=v<<<0PZK+DoQ|On=JsCeu=;l}zt4B{HQlWisV5 zon*Sm^dZv^nLcIuDN`ZSH7ZF>=VDw{L&aDHcCs+OC4+2`U>6>h$;(vARLNA!)W{TM zYGvwV>SY>a8fBVfnq~Tu>02iI8h*+2TjsUQnan$x4>F%*zQ}xy;!~^YT1#Li+Z4&{ zWv*ooGPg2!GWRkM^0kn!jeOH0m$m?BRTY2U3D&%!F znW~u6=Jk-*Q(ho1v`mw{I9@4VDladuQeKt38hHhIwesrZ)yr#;*CfCGlwY;{`j%h+ z%I`nr_uuk+CBNV0cP76-^mD*Tsh}e(2&`7r*tdjsBJEUpswU>D#-$ z{m{4Hx?JdTrOQH>S6$vCp?2wYS?RLTWzc1-%TAXsUH;PLzq)$U)lye0UA^ln)zuGO zed>Cz>!YrV$hBRwuDz}+T?bwFx}NpD(Bv;oHkxcT$u-$&V*lhCU9!nNLU5C(CZGvv zBATcsUXxOjN|Q#Dph>UEtm#72Les0JH%;%6o0~p01x-m)r>SVFntDx3O)E_sO@pSb zrk$p}rh{e+&Hkg=pPIdCmT0!oY^&K$vx8=ZW>?K_(FQRH??jW-E_L?bu;TW(`~NXy>5@X zz3BED9Yj{zww2>nbX)1R(QT{SUblm8N6mB1_nKcL7}(NnImg>(u9|zzOU-M|gXX>F zgXXjDGTm)-x6@sryK8jw?(VvKL~N23Q+8f=rS2--HM$GBYjxM@uGih5yHR(O?sMHA zb$`Dqt|1tr<0xvJ>4VH=>&R0J&~SV9R8g|PpT)cr%F$) zo;p3vdfw~#py!jGi>Mv80pVHoTebI^0A=TR>Uz2th?>*cJMBC3fm_lQ!yfL=GU$_#s1@2KNkA2(T}r!eCS7^AEX~%KZ1S?`nk~0KlSrXKezfb)t`6$8MIhv z@utO6inv^Z*U(c*^|pIQ`JT(!7GwUkku4O?aHd@BZ7KGAl| zHr=#?PoY|PElMpaEgCKCQ?y!iTJ%~BT8vsuTFhE}Yw^g3X0ulrDB8$aRy?x&qwTJ*qF1liQm>U>YrQsl4SH?$+Ua%B>!{aBucldD=xwdH zz1|LbJL>IZ68h+Kj>dE&Pn$>Fgxq#UGo!Pan9ZGR!sAA7!OXj6$u+yJ-UhSDny%H< zs(N4O{Y~#{^Kt5ZqxY=|DfPb7`@vL*X6)1ZHJYNM;LRunW;nB`rj2;bTxFK2p!Zhq zoymbr+haN$6WHiup^v}JE~Ae(eJu5{(#N~`RLp>4ViJ99^szMqhdy@tIOyZ3kCQ$= z^zlOSHngY#J&nSt&!aw1Mmf}HVGzK` z>NZN*6ZJ`kT{A+Nk-rSxWne7BS{Y2rP*D0D^f~F%D%=aB2q|n0d84p1+>F9W;nSEb z3fE}WhPzQkBJ(WLIxN|0!2}zM+j-f@4n|BcT7eMT?nOJ;Nd)O%L zRBb0qJJQ*aOJ!73erZ*&(Qs~FxcJtwAFX{~oP7oH z!6p9js-@RR`5kby9t)->T2mAJw1L7tt^09}!|_lnyHkT3Xq=_zYyP zAf;NLTqc*dKg@(U1EH$h&ylY4_q#7~}TMfB}orZ&klZLZ~4-G#w z{M2xZsQ&Pb=S)yyU=!}?ONMZ+g#hd zwkK`R+J0zTXnWQ68Bs2lXSa7*>$NSlt+j2m4cfNacG~vZj@nMzzO+lU+iI6`&|2- z_6O~c+F!IUw7*3=q8SN{#n?kk+1q=+FSW0H`4n_1Un$uu->Hx7OJ5b#9+0*~vb*OZxbqG4NI&?bpI*dBlOU*hibX@7U)-lmB z)iKjC*Kw!gS;s=htB$wmNigz_W&bU}HFEr=9KDW}jzPy($4t5c`bpwp<+q|>bPTIWRPOy^wZ zgU*G{H=Q5Gs>({q_uk`y}zf=AG(AQR9xxRM# z+Uu*(*HvG4eLeLB)@IO`=*#P?)K{agps!Y6oxXZ~4f^X{fB&t&?SFr&Js|x4?f-c9 zf24k~@{4!B`0$G#e({fAeEY?3|DQkoe}ez>U;o#}|CRf{cK+{&|GV{n_x^3=-`@S( zhkyIw--3T@{oA)+F8uN@zkKt{rC+Z6GWE-|Ulx9O^~;-I-lK_P`SeThONuipJC^{WrR`r%if ze)ZF@?7#W#|Ig8{*M7b6>)fxeQOLOlzec}izZSnP{W|z{=idweevS2x_s%CnoK7RKzbJy3ux?F&5kTN6Z9D~+GYe#FQwWqbvT4`;xZfM=ox}$YZYdqj@ zivFZ%MbU<$14S7{IYmWqcK~Y&ToZ~ZNF8GO6+I~;ikKo#kx--*8AT06Ekzwg14Sck zrnH&UWT3+O27~quqgaSK2*k=V-^Y zQ`)t(>uA5C{hIa>?GxIkwBOQxPx}+?Guqd*zlBy1?%{h+`;HE4IwW-1(&0phoDLNo zZghCif#~4qFwk*L$CQr8pj!ct7Wq)56^@Uv1UM2M9UYmDM#qMZBb_F6TF@z`Q%a{D zo%VD((&k+spxX03(8PImY4+F^n9jWXdLK)d3taLJ>j4AV!31v!| zQPxn_Qr1z{Q#MleP1%dG-;_@%pHe=jd`bC=@-^it* zb|J0-;y1sARu;0ih=E`joIfci${poQxlpc@8|4k>)CBjw+ezo?i{F{NTg z#hi*I6)P&%R76xHRHRhwsW?z^q9UUrr=kdgU#M~b6$T~^%m!4!5coy*1QY1uNrj`r zQz29+6-GrvMN36T#X!YK#Wxjr#@|#DTV9N&87%jAW$h-vqF;u>eb|9XC-vw3`=uaRffhGjHj)AHX8VQIHs7|O( zsosK>PxT47c2LfPbSUtUXS%-8^+MNQ0AB)C3F2h1GzWSk zFpEGU0$+$eAFzNpM!>?HfTaUe4pcb03SAXsG`cn*lmRP7S3LVj*Dtz$)AdFFhs^@Q ziEcZ(9q4ufy9dCXpnwjb830@W_5jud(Il`%u;eGeI6%;#n+LIiZVFNZ2n%%U03)D} z34P4yV}%+#%IfryqVtTpGMdBa?glSYsK26~dJDZn1f6i=5gL!E9ijnGUvq5FdF8@k7I-=eib_ahn_=vtsD5nNB;j)chm15tGZ&5`p)JR13C zM3d>>(H*gj34KoKb55U2`dlHRN}n70OzHE4Xd~i-!4?(5cAy3#>xR4<(q;%@;Xno{ zF2t~qmqOYJaV5lzkOV?%r$JT*F&AVW*ECr>>IJo z!Y&J2AnX~i=*PMoD`2cLu_(lnZX{aZZcUUBZHe}{niHLH6~i@!s0cRi@OB3~9B&c) zBJp#__l8HrA4kMQo=Aw4$cP%Ej;JRZ$W6#i$<4^E$wlN2A|aa^K`$#0%mLaZ0=;&WLm3g18LAF3`=v zZsdE|Q{vUJBW7YDR$?P=h&$q*cpyI|zak%#Pspd_x8(QaPvkT5c@UU`k`4wWTCM(* z{DZtB&*VLMC2!;#@*Vk}{7AAOiAlC3dy)f5PErK_In-g`tb-znUaZ_hC=X|J_-TnF zVGaTb(vkFw^qcfW`kVCs zk^YeVK{g@#AF{v5{wAA}&B*3t3$i8Iifm05k!{FgvV<%p+mh|cj$|jYGua#2h3psE zJ6T4SlNDrTkg9<|Z`VNjL1`Fe5qpFg0NzUG$e7HN37L`^Swq&6^<)FtNcKhc57{@_ zi|jYq4>c2NR@AJiiKt1b*;12HQv`1tAorknqLhq8Bo0V1W58Rranvw1LXA>m)U?#} z)Qr?lsGU+fqjo{Mqn})RjRo*VUmsjp_`-o0x^* zQ`LFuggT|psB5Tesq3igsT-&psh?0krG8HRg8CKpYw9EF6Y96rXVe$emqARIuPJ?P=qskLEq!J5RnS)% z)O=r`^riG=^z}{u5Pi?+drsd=`d-ubnZDoX`<=eO>HCLXb9yc571JxBS4yufz0UN? z=#|r}pjR0bf3KQew@_YxJqYuy7tzbpOX+3wYUtI{YoOOizvuLON&g!COz7ut`kB(t zihkDg6VcC^e*U4K7ybNplewEL-Q?^hZ*KDK{@S?d(oNOPCT{kpo6X&9<7SzgRc`hX zuAnpg)yvI(yZOY;=Wf1q^EWrYxW&RP61Pa*B6o`_s2i4e>@xmy)(Rk>9i zn6>EHBL#pd+KS!EyOp|C>sGy6z1({0)|p%9Ze6%_75onX+^zxKLNyRnUM;Hpm-o@f#buqr6cge&h8<)f`NnEmZN$!%`CG66POCy&aTzYir$)$x$OP5vw z<(u9@J1zZm>BFVuQs+|dQgx}hv~g+c(%x+&w~gI4aoeNYW^S9i?bU6cZtLB)bKAk~ zBDc%ju5i23?W$nU0ILj*x1Do4?{=-*^=`j#`<2`8+&*{vGL+#E%D_Z(Z*JeYJ-%RY z`_Ua1?hv`d#vL+uDBPiRhkKZM;$C`i?%>@)-ErfNdv`p#W9^Q&P^vqUJ34n{cl7Qk z?%29x=Z=FrMeekBr`(+ice;n%_vztI&YjGi8h2{lsdJ~nohRxeO{x z*gwwKkQu?W_3YeP+*#e(+_`h--d!f{@~68@-6eMK6Zd|0@3_yeT()*u80(JQxm;atE^l1k zyL@oP)D;_7#ID%6B6CF^jGfS%fZ|--0(=7XMC9VJU@4p{*cILt;tF+zxuS7J>x$kL zc%0Fd6IV`Mxpd{qm1|c+^L2Unh5d2wat%G{NOE6d;o1t=QqI`A#ffW-6~ zYogM*l3nRtDXvsknkySucCPGQIk*zf^6ko(D}P)yan;IIYY6OJwSlSKRjI4CuG&M? z4N){C%Fq=D^=MG@f{+J_2GaeQkwb0@Kd6T?6J|>IAmLMlVi3+hS5I6$b@j~ED_2LZ z-ata;>Yc0iu6~1`2@0hkG7a(}@U5W&0+s{T97t|3cZXfZxtbwIft$qD9V8j925_~6ux)cKmqG?w=&3A z16=YW1f2r45Qsof?Es+zIS$0P&fUO1SOV+?W|sR%0FZJY2XLU=M+S@$KtjRY8dyAl z+MuY4h6K!?!EvK09}2w+|e*cwHw83cdy+2>h8AyF9|JQ#H?^e zLGJF*FLif8&lBZLv@6}cb9cnnr|xs^K9}xu?LK4oxkZZ%-7xgE+~?VSzN1@(HWVsM zs3D<5gr*JJGNG%1=vL^Epag=p2D%m=4F~tBC=4LqkEFi)?2w5^c-?)D?h`qTiF^F* z9#bT?-DB<^OBW*1YxjuUV}szYd+glf;2vl9cyo^n0B1nozD3Y2;Oa}8$h$2cQ_Gu&$D~Jx#tDv$~gVSku8o_gH1OaK;p0v=YKfB zyW`L+9Q%Z`B^>$VJaojrY z9pk}A$KQ@$&M%zbIG;MdbAIpq!TFQ(ne(~xrSsQ7<@BE+SBTf>*?I50IIqq(&bQ7F z&W}zePNq&~PUcRQPF7CVP9i6-_O`EfdN`j^wG)0xw`)1}ju z)3wvc>Bi~S>CWlF>DlSK)68k^vC7Y~^h2EONGSmO9%yJ2*Q#dvkVi_Uzwt@24|zQFK2k(AJd*KS?A zbM3*knQL>`maeUW84TV7;F|ERY`ts6wdz`PZR6U`wJ+CATsL*y%yo0uEnT;A-P(1L z>tfd>u1j6FbKTx`C)b@_cX8dj>oV8nt}9$u290)C2d@HfP#_1OriRFBha+E%6WDd) zI(417u5n%Ky54nz>qggox$fI_FV|08zjpo3^_lB)*B7oYU0(&8S^p6@1pQ|?I>uO{ zcdi%LtLx46o$Gto53YZ?Vd92`8zMJs+z`8A>xP{h_HH=1;pB$18!|T(ZYYE98|DWf zX@RXmqIP(OQOAG}t9OIALET_(Xxz}bp?AaJhS3c#HzsaO-MDq*&W&Z@U7_BGG%ilF zNAE^)qq?ziW9P=feQn%V?7j;3_3gfw?tAUN&+ZkwSK?l&du8sGyI0{}rF&KGRl`By zULQ#HV%Fkb>|Wwt>R#r4zqy~k-Ot?pL=GF7pC6vgd9vimnI~^N`R2bXo-TR%#S4=QEzq zdA{WNn&%PE&pdzQ`8&_QdH%zT1uyoz$azr&S^DD6izhEUFN7C8uQt4jd6n=g}N?ujGs(E$g)h&R*R(D=K!h!#a!WD7Fyi#5nuUcO9yq@rS%Il2RIj;*|mqE$C zu6cds^^MmbA?%E#z?#CPbj`dLUMsJS*DbF*UiTbLIQo;L6-NLC4yZh=x3-9w);dWH*g#2hI{#!9&qH%nm0S%?0J*(rr=GiIGJ!V=VZf4!pWAC z6DL_9Z6N-DJ43>p2q(%($4SrWgwqA538#Bbb52W6>oAZ@J*Ud4aoTX&a*D4UI30OA z;q8&PMex{f@4S8TR(adb}`_c`w!@0s_?`=0j$A0j@)d`S6l;KPXz86PS>T={V0!##vJ4xSIf2jxS< z$2A{!e9ZXx$;T%jiI2ud{Qr?p37>X+%K23AsSN3Lq(4rMPo7T=pISckd>Z&P^7&6b z&-fhidBf*3pEEuapN;>ke3|g&Prgj~vf)e2mzLkpoJ}}OIooo!<805_fwK!|8D}|X z1!raOBEtOwA~n!-$jc*Uf*EJVoC#;jnQ_)|)^XNzHgG=Se8KsK^O*C5^AqP8=Q-yE z=N0F5aL9mcoj*cW1%p!D-gD2naITyi=Pl<07ZWa~T+Fywa}jZ|CR6*MaR5qA-;I9;)Vfb1&E`$r^!no+T=()hdj$Hia;)lxxmm4l)E_Yn+ zxjb;0ahY>ja#?YC4b*Mm_keOibr|IUWNI+Y#WJMyTnd-UrE%GD2@m>&tG~FKay8>> z&ef8u6<2GnBCcYt60Wvf9l1Jjb>`}gs|#1}TxDDpT$Nl^T-8CU1IRaMe;~)8sf;cH zB0Lx#W7ShJSDq{3O1Uzw8kpwceTRRYs{tZ&uKwZb8-j4Iez=~%A>R*U>p?wYD z@Zd4MhxT(2e_|lb5KnR~a6Q6|$aM!FA>4s*0rGVMHy-?ReBD5k#@7q{WPHux)`Ipa zAZ>zR3G-~2exTcd1qZg60YVhMe)Da@w<+Ide4F!a!M7!p9?){YtHHMo)E9h9_?Gf* z$F~#T&U|}=TmeP|NDCkyfC+$abs!xEhtGfRzKl4c}XEUid!p=Y&5OK!NaQ%AY6T9za_N8l}%$ z=%ar=`IEx(HZ;;bdf;elqXLaGGdja4_wr-Pk2yaU{8;iM;l~k`JT%0Dsx(xy(2oLe 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¥Eaoenoym{@HCYeIkD#|4RM~ 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∨_t|XH{c}mLH#g?NyqHh=`%f3?al2s; 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

taI|cJqqbQS|bmgAv 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 z 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 z zQo4S%py35HE9U$`LBSHa$-36hHN`AYZD%%_PQWXIHtSHIXD#0n)uD~PTY%@havbd=Hmx9a^3W7s2LQvg;-<^U!CUqN6j+mX}zZ3AXAYx7~nS@KGULT69GvUT_ zszl{LfvwfHe<>7)Blc(ft(s*02X0NSB6~oQ)5rX6~L3oD}SuaJJt0A1UsR-{t zx0tqlhQKG|T-4eU@@p?7@Qf3zJ~OAZJ>n^E4fbk=;&C43>HRVT%`Xf{wQc2 zLDr5GwBHl-z6%^pPMMiHtnLrpvE(jr?o_(K`~YSMmF^z%~$L1OlH}D6b~H_vQ5U7u!J0KbG@hrkLVdQn_Bx zc}$ReCcoN~qVD^rC_g3QGY&C(Xql&?PZZ#LF~!%SI$sIu-wHC=!(tW#evs4V4|8U^ zS}&C|n;zZBKK zK~Y;-&gL3K@$|VGp{wJ!mLU0+pw4XCT1Sv?1mrkdg64)eHx}49vCUeyJk2uU_HIkS zc0}0*sua{l3F0xpXhA*_Y6oCfLD(qR8|NN^=01XGFJL!8wI>w3&NpdncfoUaFuriK z0&I7oJWfbJnM8bigYqWoTTIRWZqfvqLm0C($LIc;dcs{8mtqFf*-E*9jM z0}}n(w=*o3#RAIJHlASk-cmA}I|13<^^Gcnn$s>w745`iCVj6A0dl+%w+H0Kf( zRN3?4XR&8qs5&r*z^_rHh(f+`V;c+c;&L{Thiv7rGZboRfiK$>$VkOC1?y6%+JIUtuDxaDd-Fn6zk*1bXO|`<%WWE6JT>ev8kZPa@dxl ze3H@^aBAq9tw_$d5!Gzt97&WhPCZw2E~CC+3|;Uqbe zvjyoH0-xnf(duRw;XD`WLZ}IX7&Wd<7}|)jFW~r%LqDtIYd5y65KUG*A1v~Lo$#MM3l@0Oe@<8erM>b^K6? zHs8hXJwZ@^ekiJ(E+|lc=4d|S_XU=LeF!!FK~A6Ywt};Xsxw9D`2bo@n@vc+#qU!= zGwKobxhUVb@rl*u?DDHp0_GAFKP%K`6PokOnGY2B&Gvi&QC3nW3*)y0p$OplU;;Ay z8iI65V2B_eCa_jASq?v|As4}Kd4Vk^_;6KgSvhU9(C?zextzsX0>2hy&0@c?ga#6* z%@x{~ln-I0P5Ie&R=y#hp(4yT7E~1h9YMAoerN}aF@pMjg6Q`GYXUPAgT9_)ouF?% zw@#H``wpVqDX=;)8!O5>!Qu$0!-1y+>9tT#Ks_h$L9g^BQC0`mS#U(p3W|>eRtKhk z7u96_G54Nk$LHiW^SVF}tB>bjc z?RZhe1VQ^ufuGa!A*U&K%4yYKae^pc=&>2DCW|iX|E&6}-z#T!k053tHt2CeAHeS^ zf$c}M9ud`fLeP9zkUS)4|3zRmpO3<|p2qJc!GOI5KQFBrqI^?Sln7$5UnIA*A}Gc;j*O!opo@oFG$vfLIvl0Kv7fqt8IjHah2@^ z7NaG4xDG3{Ls7w5`({&aUX12j%g>6p`fj3{I}7T&6K_}GWSy^-q?uyBo_FV^evuSj}#43qCR-y^Cdnck=`S}_)dY3{>?x%NH!3} z*0sRBBY3ATImU1r5B8j{94t{Hn#Mi+o7dP(BH3vPeX!D6i10Q79kbD+0C&ff=J8)n==xa;VL#`up^VPb z{3Bm50Ek7N@t^n7b3#oL>Kk7%&7D&=w`I@|t*0FLi$2mDOJw))hARggK2b1^lKWibl9$Pu{app@qw1{qjXnHW<-4OdKM>_- z2MRBE-CwNV9ZV)!xmuwc4G|R-y6AGFRRuHYa!1ISx{9|Z-hMbe{7w=T^tKm3O(ekm z*`u39m;0ZM)BTsWHlD6fYinzayk@F$SPL7@m+UELdZwUXa~>dW5gE#jvyjDbl8B>+p8ZzinFIS}-@VjjZIC^DXV`pC!!ucGee@oXk-qZYvR1n(y2B>#xdS;U|LyH)0yiOs?`$U;2$gcw4m7fji#w}$x z9|epR^s(*aQ}S_-DBJMs-9}VC4(F}_>$2z)LCnI*H+N%JHny_v#fl$Ov;dw`%JfM7 z95!N$(SD#PLkeS3ZHd-1?5P|eM0X2R#|uigxvdbOtApD zTA93%=Nfq~$a8wUzy|efC@&(rUUWITHgn*|Mhma9SX^Y|1qGtLclCRiygDb5tGUPl zxwnvITZs{ic^eP#IwfVDlETN$e1A_<6qL=kjcrD`eHT$^^CtSg28~?ZK%#T1Fp1}$ zg++xUv{p%t#Ayz)o2ZmtoR1aso-Odr;`*#)!yAX2ifZgFh<+>Rp~-B~-=_H+EN*kw zt0}9`@@qjwm-iVFzgy+T^XZ9jG=gpxQwJ5xksO)dFZh+?MTLz>Wa?ruL4u%JN7i%k zgW??S9nmqp+qb2iK!bXzQA0M)6tvFg$eA&mTXb7jN!vO+I;-znl~jbaWu5V&3KUj; z&SIuIpac8hoh@Rx&As8_!$HM7N}x0Jx* zwC{oE)~EClMtAVVd4h1x{60~>Jk~_B*snm$ts*>ya-1xvoiE6l z4SbX}nkp)ONMNfp)}Y1H<@6g+K?{bSEBjJVUqmIhO;4YJ^eM;CMK>k@?SHg z<&%#VSjXd+CsI@@O;jrBWI}HMP;Gd))Mki^Q8v_K70^nACcAUdT7obFHWO9zFkrQ9 zV`H}b-=vKh44&I|Y@+mg^4p-uAAqG^3GsdK8njR~mHG2;UT zzL*~U7V3Bc`UHLF34#e`M2M?t-va3&dWC?03v6z0C&u(d);Rt4hLcs4jeJdD13}yr zB%9*g94BW3{@XP0&IIfN><;WCNcI)@*m-o2sF^JL9!tP)@H+`OT`-f`-ZSunWn^aw z$}zT; z#GWTVA3}{UgSt=h_?#V@&v4bb0tBtF4XFRs1W4q2-5Wh|4(D7wJjCehkWXjfawmR{O*X4?{#L; z*eb^`{E&kD=y3t}ZZk9a9%QwIx>>^XRGlp7w;Ni|~gJycDdNY9G^;kth3T!Em+~5yFe_f=SZ}_|9_77uoFcOPFzL z%qhN2*<7ELS>AXF8ZD%FzR(k~Hx?fMS`EL|1v!&pGzw}o)Lu}?qCH~)1k!MkW1=YE zmS{hW-_wH3OIlc|jg93DIzRB#vGh^dKL_V|abxP+_q9A~W;dFvqq))FX7f?JESV3UrfPQ4AtY~?$xwb4YT``o~s(wrnHCkh5U zAh5aC))%6zsmxGF-i)B`^?nB~VEuvbGR9vLk8b9E zg6!=}tf#mGBWYEmh`f&=T!B0UzoP}s;{*vaoev0Rg6b)OA1!J=E~@#dz%_1T9nnCQGFh0)`K7?` zvnMMqY$xr{AyeE1G_JA{?zl zx@nycTp-90VQX+bKMhf%&20d*^`b&;`!jou$jG*}Z=n!-zL=es87N2)fI6ut8)V4l z6V<5;ss#vL6eql{H53>u@Y9GsAkbtP)PetXej&)07u1&%v=@B#hA3ms`i{JTz>^wp9LV+z?mKTevUoPlO6!<}dx_JZ&13#f%e?Zi( zw+klU5B0F1GgV+i5Uqzq)#2V1+`D>Fki05rPREHBHv2%(`AA?Rl+`Dq3PwupN8md_ zeTJaJLNQ0&s>As^a|v2-{?>eg6!zb#36h2IgWdEzqt86RDi#;@L4s-tK|U1c5THkp zEeW-}pkhtjV*Y5eAn*KAP#-QhiJ2rrRIAp7Vos?x5peqsL zThJOQ$i@h45whAvRA+BNb04VDf@FU|wy$7bCZI`23p&g~3477a-w5i=M-`kQ8!xcT zZzGR30a-r-zq14_B)87Fz(s;Ol3O(aKypi1AJv(yTFhI1E6>I&>etDcPZkt62(p_5 z9pYbOhzLf{e}B)u0d*PlzgEuO(A&@pnP;j-d0hz&ofupY6w+>jTs$ZIv+FKvbtI|JBe;SWi=fz1GJG zDrW5Lb^vahuyJ_xgM#7-L6fQ6Prauw-vs7cFtgj}Ly5M>OI53U>a1670;4rll!e6t zIk7_L;pMAOfA$;H%XTMV7eQyFpg1E_4jICh$_Lba-`( zc{*5HVb8i`iVpTw=pa4;`@h;vVNR~q_+ml6U?EW(j&ntvYvWu8SXbcLIoU{5u!lmY zu_=^td!iskdb`yYvup|_qQCg+g11piI!HoisA%}0?Pk_3nQ$j0&aO7fDv;ddD~plSW6 zgG=cJn<;NL_0c;`S;gOr+}VapSz5AR;}khP)a>k8P5)a z|80-iCYUYX`_FSawcoFBuA*J#jHZ$b!>{n{?AZkdUt385ArvZxg-3%a{v7%@KbhfY z2K@k4#uwoT&yhr#3!vBe6 zQ8|)Zj?k9Dfx}geMMN!#fL0qUu%gU|3R{R}IgM9en*fBdXft3-fmcs)DXO-UAeiDl zh|mLp{qRHPDv!c>G;jod#{nY*Ugi5ejIheTKz_D{?JbDekc`~4*_}kbT~Ki0*Q{VE zM4VoFtgq4fG+MY6yQKUgR&C8+3Opr@TNUb8f}$y?w!*nR0Q0cUC_5YHor18j$td&F zI5zea%}JN?A`Y=4+gK1WFBHo_Eeot6@I}hCuO_=e+jn? z%&)GLGiI@D7UT;bzC6*KL@yz<2?I@T5;bgT{H_v&enqvH2NPuoesF>OU_p2mkZ;3o zJIOHhv!hP(JbNOLczJqP8CyXKbaX3BoyFia%p66~X4~!wyHLq#~3d@#g~HU-i?v zai1dljok7nQ9hmJ<4)C5{2T1Lbb1_gXyBZ2tRTGUO?vg|IKS7wSpyW>e07Sz`prjB zd~M0~*U9DQxyL)Q4H#5@iJ+oRV{dMt^6|N)^k5=iE$Dk&;9(!m)4<2$8juQV3_9C+ zkI6>TqXgogMP+r8XBha6=E&`VIMZ}<(;eHh34BGVwkYLb7I(||>PNT$@rb^#T_#^i zNLNx`;+x3Y-B5qkAB8*QV~DqxAfH{S1T)G^Cq6KK!chun!;8Im%o$O6i+^h>fr6Us z-xc)4=W`>b22$;we=UeKan5v;2Im0439Rqzey{Yx8_h`io|6wC%2=SmU-~s<2P}1t zBAXiTb|XrAxS}Krhzf?!5Lca-tC4|o*3&U^vCj*n^!Dhlf?(wuXSsyF&7HD7oh2G3 z@MK*-oNwJXK2=CGAK%g_R@>x^ijuyz4B41LXGqZyr1a-#lE9q7kL2`Tpimpyve=kz zt1p}vUq1Gs!knVoc1PqPIgLL*2EQu>!&?0Lq4MkX5OS^}65WF+ABeJ`9+oY{b8nvq8UigP!0L^>;_AGuX=UnD)S7q{M$xfUjNq z6rBH~2ZmQCd0YM(z_(?o|M2C6_$~g8RDLi+If`8R97gOc~gI7a&~3pP*DM2&ar`^RO5e z?kAv~azQqpaW?oiWwwfDS9-I>qAWFAQR_n{en8WI`3bG>=LpS9Y^uO#lk-lxw-32g9(PFWooN2B_yr`vfHE!)E?tA3hg?5*v&|xZ607E zP38tDJ)O9FA5CQH&qa;9750Z2_*wFpAS!n=c1zixHUH5?u3g%^Sei`2L2T^Am&R@P z!`!FlROkoUyn=97)s_8MmC{MwM3gW&xPZryKPImf3Badzb28a9)AvYW@(MPr7%mfXZq;x$`%)TW0`kr#SCUe>& z9GvwZQ8{5n#Yi^aa2NfFIw%hoq%e;#5UKlwik)fH^5?$K?t0Fs*najkt*+1v0oNsW zlli?s@5T7^v3uu-u5lt;_OY?(Abok%G9df_c-E%S?%6bBsGLPf-UHD>oAY-dne>?U z@OzLb{^B-D$q>5sVQR=XBiw0_Ey5$?eCxaVe(cOOY4+-icK*w$WH-DQ!?bAT=0j5@ zHDtE#!<)gF|7HBS+rxReRXIqJmiqbgPiPi{)aP=*@J>KOP{6r7xF# z2NIc1XlpLf-ilZ9zu6mnLB9%vuGtu{BPh46xw+J})TgK7D}4R@oi8uAE6`ht3-95sWAjc?MfRXK0a)KE4h8o^}h@e7jS$S6;7Cy9;{l$DgO& zF=J-rdk!{B>b|iTgTxEjxS`1YqlkXhU`YCYx2@zB{BIDa>F7CK)HO7%Pw{LZ*Imk| zCT(oiv%SYwhjD4)vobIKUf=r9|LMA-Ju=TElsE7pL?K@YaQ6ul?y;moHayO~^D~JA z!r@Iu)G#_+#$+8PS8|#%xyICxmkRD-^O{*MsQ|M+_gMGm_)(IF!^MB(3tIJ#Rpl2% z4Mw-8HXC?#f6hlJp2Z{A{l1pw%;v@^a^aGD7NT#s(C;%4GYahk%I1V&+L^9@OP?e6 z=J%d4Rz#*soN=F1jo#O1*3E_g z@W6)Ohr_;b?-I`M1`S+*KQa@%%Z%|f3TPn)m93}BXb1kowc%2}p)WH2$XA_RvG>vx zxs@igTS5)FJv^eq#4-ovpb|H6b9?yR&u4U2KckVOgb93&$v=8h&ct=k(6wz+*PrbV z-Hp^@$*s;`hC}@{MVJD+jG|8WE&x+#acJFjytc3QprI5+)WO%23Ikx;CL(KAh-c@D^H z`oeo1{^BkVPB-%R6qWM!9LZ-M*kq_~vHLPneGG$Q5P#{hKnpsRPh3~79M>uJ62!rs z^_g?uB=@mbi(B*Aair3fH*Wh@p}w0N7C+>^pWoZcy4&1C_kRA(&uf}f2PVj$Tfhh{ z<9X|7W!Hah`{;%=RO9ki@%HoG|#^tuwD?+ z(v~)DuFxYO^~m!$=ijDzh`Y@_YN==Ipd#x*V0dA@Pp-UN&)r%SH66joBbC=(R5M!h zHAINih4%P$4gH-i<raRGxO;&OcbT?i3B_E{!ut@CT;zX};p*?qde6Ygsvlkv85fg?*wc3-U zXK~eQ;s;5Jig?w$#0^j0CI{mH zCYyeVCw&7ycPSV}>~29d`I4>sMsIiV_=BY->mt2!9Yj)t1*HpUh72o>T_q!wmtgsy z63w76<^oppMN7%gW8V+PJJ0c{__=IOWf%$Y?OVu0Zd&UZymk&t8LFh@e|?_8FKvXL zZTY#6+HmcX%4hDF2pt7Y>t1Zm*K zcimsi;V7kLi=dOS#N+NmBfF(1Kv@C^CC3?71Qgml=SVC3sNIy5gVkM92}N)lb+hI# z)^!mW_O^&?O{Lqn{Tun!P7t^)k93`GET<>Pew}ZFe~Y}RMzr!ldM`^oqE>XVy2%H1 zDqj?yQk@}pTUU-}t1e4>+}zBJ%)+b(wpoG2h3(W!LMu>IYZtMoapsQZ5tgr9u`a%+K<0|Tl}W%0&k`=+ ze$_){UvY3=d>%Nc11*AC_TkSbQU|W_!Thhc8m<1c)!3PG4>Jnu3jS?bW~OK(fWHhY ze;9J)9g`KHEcCkb-%1qoaRzMvmO;Pv!^1u(5x!THAoL>0d4hBig6)Zs3iSx^NO9-y zV>G5n|DG1z58k6Xt#=GnLTyA{dD6YJVF})o110**8e9q!biUoW%)K-0yRi4<(fD7x zMqc(=wc$=3YQqV1xoB9iFob5K3s@Gl>LqAM-RAytMt4w-($X$q{v4ENgZ_DcLA9IL zN7hODX;jP-ufQN6xwAg84IluO3zidv>VhClzTSWu(HsKsIYxO zWOtgW^n=)fja$n?8~wi3)o)lY8boLQ@@Fsqy>j(u3^lW$TAxDm0|7+D+VO()ETF4G zy2K-|M^QWzht)B2iZ^M(3XKjI#G`K0j`!Gd`+5j<*?PpZ7*-SA$!p47bZYXKyCTen zA5pyUAPGgdn=WcCiSNDl!i?MVQ!!MXpfFpUzGV|CCu4i87H=1qwpr7Y>iuU<~u>D98?sF@c$C5RhhqubY zBCI=Wji#`~9flQr!z$n)aa$09d3a8~-;*Z&#WF)Es#Ot`H}xX8JO8@co820J+Lhg% z7L!%^qs;_?A6T&N*GiIT80?he0wVitNen>4cn&o@bfNI%(poLkQbw7 zX+OC2;R1zQpWbu=tRRa7K{TK{I)6bWO1!YoWR_u_5jnMXFciAm`A_d|H~4~3$eOz& z=g5LA+T}SpJ)%K*6PhBZfXxMH!DGl|Xl}DP^HXkPD3t#gTJXt_jstvYZP73!|c+{ZF;F(fOlxt?02V zP#;G&9N9gm+f}~zmY>@k!6EF4c)!fsI;_-Podvn_Sq=9W^XH*%D8O@Qljd>bd2;o- z%oR2_QNjp-^3#J3c-xvq8X&X&-d%vQndg{CmV;o(i>N2CCx9#@b zFru7$W|HufA>6_eC{Gh^nF%yNe|wN!OJw1!bGJ{PWfhIrm-ONV|5M8KYX$Cqy&l~b zIVpk}h5OaNEzVeYa=W=vJRsl}UWv?fW`YXq7vtTQE|Fz#m*ZVNbL)4=vx^@g_Js2) z?pIdX9nABP z_u_*U+CrTgogm0PU=c`zWW=)6Nrn9~)}}u56gV(Sn0_ul2?@%3F%634Y=nu5R`AAp z|31^#!^p0Cj(G`H5*B+f#-P(Om!d2C7+7WjmmwYlO%p@Yw23pBA1{OTP4M*IL5lWo?STSoeDpb%mKzGlvF66lH5$igY&k-=_J!`&xH^ zo#7e6Y?Cf!4NH(psd3BbKJ75mHjKpuQYqJ>p?^?c@? znx5_o!vmt{Qf1fM4bgw*W$7L|h$nUURZzB?k2?nx!92%C=aM58#h20Y5wz-7f?5a4 zdJxJs!|6?;BQY~s(9F5C5nday$mte50>66%VRqr)!kFHJvhA#Ii+uzg{?eTxs2Iq7 zA5H6}LPhh`pVYU_e~D_&OJ1hQnJgr#SOzDTh11~z8|sNx6IEk`CM`j+i6Gh-zb&D5 zgxUsbdtfI)3WJZ15#(b9<2h>|bJwFdQ!waUK{`>;oGJ*fO1>bf_KqO=5I}&eJa==O z!LHwBg5$JF>|R zf?_v;AK+^q3w5F(KULt%uK5|FiphfHT0w29pnaR5yjS2?KEN;=XAztE$~yIZZ{S3)2dV3zC%t(V9@}0WCq^5v1D+!igh>P;-D?>v z3V2!&zbRP1U$#X%)Aac8&{&!%s{$%# z5N!%m!P2VZ1To@5!OgYoB1K6K6|^=1&LniSAUPc8IHEA^ROr!b7BJ2s6t*5;ASf@v zd6l4cxgfhl@%&;#Vja{p`I+G*O!N_EBJu|SWVp&pX~u7Hl|G9n^DW~3l&9ra|BE1< zPUtoA>#&PgXT?{CnV0Vhe4WdCl^K(v$9~2^8y{tu0t3jo16X|x^_3v~K@fi@$Zk-g zYay#-a|$Xpi?am<1xwXrkibvJXRG4(D?xjhpyFh@&n)^#cri*&n+K?N5EUIRuobdC z?l-o^3#tnQes(^C0}s1R5Wxj}8m$H^uu1z8R**0mdRbr05M?_o1rlho0DySpTlOVA z%nTsjMpS#Gz!ut*eMH&(dV&(G7)R)?0$sKt5j&Q1bf5K53ETFgiFV+A%`T{}ZmG68@A zOl476-YUq=3YfQ=4+^SB1oejmokwxPzM{DV3G6F_)3ob?0wJMY6Zq;;XE9OP5(000 zbsD0YD++ApxrUHcz}(_>f%ODFz2i$X6|1`f5o~-Vs)h(wpIgq>Euvcc3G$JGY7aqq z08XTlyp7-40?Q>nx9*!3Co^p~%r=>DZI{j(Vc(;w;9+K8ZJHv=^+y)Q8vDuV89Uw< zzmEmhI``0}>X|}=*=?u12Pr>CQs!oeYE2drIe(d%eX+|EA^-VsbGQKy)0zO6%1#5! zn_xlZWI=SX(#ziyr0^lz(G1Ufnep7OD1OUjBAh0Jq2zA~QnL(mizy1|d?`QM%2{D{ z6(L4?sD74TmQt(%f(S<8C)d4In`5S=wxqzK0C&ay#*7Sfyz z%g(>CD0hp#eMQZInT^f}K{8fQ{Z`P!243-iz;Z3hMBUVg#@uej5NC0EwbA1{f=7-6`n1M^M}j z94;tfDAn777_L(PP+-Fn`KO}FS=8pX+f$5`^DczctWV%~Eh~f*>uCnV0Bn&y`;(}6 z300lnjf~!ub5BNm`$j>9POF)TvSol8@=LOapcx6m!;VXf3eRV)CMsJ?P=f*ZSXpN? z{QAd!Q|Z-M$S%gP?`esu81^>p6Cq&u1w^a(%R}VM5QVIgn#RECd@LBoIPYa5$f(37 z(pT9dzZB+SJy+k23iW4(66w%Ge9&2nYyo_xmGCwCEPhSk+shF`YI>9)^4ghy^K#SN z;@{R~c-00&$qrU}KC~P*OCmXas>HLsSA21)l>IKe6R_^p?=c7cGyK$t_VPtVc?A@9 zTVOXmUJ72QM6HZVZX$Uy6n60Iat7TijMmGW8d8uC&bCU>5$oHghc&@!vV6yMeFKQ|msl+iI``s6U?BP&u;dSXU;3G1zRc2VJ2iq+~@ zD;s?j>s?B2t-V*IVGTyW&uB2h=FnzTge6}Vc2*Pk;H*`8Va>@h%}NQ^)i6X2pNNl0 zC7f*KTZ{2Nl+-hcFD?`KFAFN$yGw)l^Zj8N-d>(b%S0*NZLPW*NEZnEeoPqdQq69$ zmL><0`=qOcVKvbmlVN3B8}9c#ZZZ?j|EC|IrOJd^piPfj@E`&^w(#I7?y~ zlZ;PAE(uY*5+=`H!e^}fJ+Q3@@ww)Vrf}z9ozH?wz_TgxeZLAWc?2i&b66A8fqkvd z`u39ly@Xta+m9|K3kg?_x8iMexBuYXCvX{X(U&@Io zLQq1xRhh<|tAC+;@R$jrnyVO*$va}UzUK|l@TvhVyj&(Tn&OTIIaucV>g zQmD&z%Ut}MwWdCig4i7{d%?&;%5>$x3F)>e1vDdDkA4~+oF*GVoys3IccCVU9L{b{ z6xErCv*VQF7vKLrkbJx{QUV_fjd7%YuM#X&N z+TSQCzc3gIjnc_A8EVLU7mjXA2=1cccoM02F&HPxiI0t9}}9HLi`{}S;Rp@;L$zB zy`(>7vf;H*IMHaq0cL6C)YUX&lkpKQh0!M)OkQDk&J3R6=YEyZrQ8pmrt`=2tC`Mo z(fav;f^dqOKk7dj;;bDHuk&VcisT#B1uoV^iXV17y**Ejdlx=t;~{Z}8%a5+SU&^n z_U$#haf!N}zsa|E5ZOc0!bv#oidw0lb|cg_Go8wzdpm!Yb1YHV+J^_WABT7QhK(24GY!ME@kmqo7ty@F;yNkMp%w9cQX7J|-`32whZ@7KwIe_I&*gqoo;q-QQ#tBjo z&45@sB^cWq1;W#%zzw5W(>P{;lxTLH+sWWY`>Xy`TaKoBS5vJZU0o^dEoxjJ^?cS}3B@ zoUD;llMx>#dW(ZE$3$pjg83XxS(#058s&w;jRQ1ibOwO6PE#MO>Dh%;$6va|eL z*&%=Q`*3oqJI=is7LKDL{nr>I?wvunCCYb!{(LyXRm4QCv3fTLtN+JM6us8{|Lgs%Aq5 zOuas+?z)=jf#XDblvLD})-7O!E2M7y?hJcXHwR%(@!%Y!Z+*Vqtk3OM(0B7Q1U~8$ z9Vekf|RYTY9{~%Q*{DcS*|H6UPoYwJ4fXh94u-8W>y(2MTxDv=m3Vd;DU1mfdJPzWZ`#9_& zNF(M*q`VXZr|BV1)_PoFBw9mV>6Kv+9H_PHovZ$?_l*)r&3MjKsCCyP=!s3|bZ+IP z%@&E3aUBwf+*P1F*lh}`7^`>_@tg9jpg}ea;kwx%g%*f|RtNUpOR-pxr)!Zi84nT< zpG`bRe(qNjarOZd5ZdZH3aVY9kX7nvAu>kAod*zbpde!LosPn}yTBva+gKun3TVN5|h$~P_g#*2qTrJ$ zf}ACQ2X-3<<(JTH46XnD^UnK9v_4Itp4B`HB@^Z6_s@ILcE^*{9-X_OZWdJMDYWx} zpt={oD@0l3jBg^;3-bF#xw+$qL}f6P+I@mou2SUkGQpG&`Ro<>l`jf9ljUq8uXUKM z^67$L4vQ(FkIRyWU8oy0Tx{+D*ZrIg;sLX zseqW?Ui}M-9$Vap^J`JHuLRBC;rv!qYW@8WP}d9mCPUe)+DK;;L^mkjl-Y3(1mM|z z*SwlX&YZo#79*gBWNBr8H7`^ui02nn^Fh^t1q4YZXf*^Wn*xzf5-lVu@j`pBs5aXJ z1%o7CL{NF7fIWh889}zZAm&VhHwyf&dHhQ`{k%g5y`$eX@2nxJK-J_E3vKoi>g*-d z*B98tSe1*aHWK(KL$#r(<|cxCJpu|ry0O4l%Q{<%vH{;}TT%ITf@&KE@&SmsE!tt zM?xKk-&nz<6LBu9VegA))v0o3rwA6BAn2SeXpR?D=L*WR1krhd`uT$VLP2(cpnWma z<@ik$bS@H9mjKrZYS=CF7D;-osQf0JHxPjCI=c(Ms|AhQ1U|*zf%8`n2%_5slO7Ya z?#KBE)Wd@6SwTD%=W~MSDS>xZS`Ue;zaS`H6jZO`d`DoNLhF4|?dbyBYES0n#jgN16cn2XqD=*xZ!Sn$f^17*13`0RL2C;^$ERbq5!LPp zqEe8y1ufJV(MUmOjG(rczz1mByNIgx7POhRJNpRy{(0YM{Mh}f_7%Kxv>-c7;P-&) z2a9SRf!{GuEF(L|K^-gb<65>p?~VF`owHX?5aevxcTN$sPZD@HZNPW}P8HZTeRj4e zn^Mir5!EA84T_vh>vmm)u zU_*YL8*p+Y$d+3BZW2}9BPi~KVzzJJE=aL1kv=47vdYh168L?M>`$WN=LN0T1kKk4 z9hS(+yTE&b`~yLKx}ZX#Ycu!R7ov*y1=%Np5nl^z2R!{oRP~*p{0YC$aQ-N;f$(aE zs8-Y?_*7K=b3(rdV)^B>3%tviq@tp^1nr;sVjieoLI(<3^9zy%aLx<0Fw_zPTUE}7 zLS=%iAt+cz)`tk9UkKu1f_!m7b2&k^lpt9|&{`f?3Fo4M`m%xw8L1jBD1If#bAjz$ zx7QPutSxA-FIcgK^VfoCBY|H+&qs)=dADUlQMR_9vF5bN{iFlMR%o?@pd2Ge_Y=gw z7qkx&)Xx^w#tT~K3aVRxQw8ZAf|7mHt;XWFzo2zH)IEY=mHKd;*8)%B_kD<^H0jgUAIHsiQlbItYJH-1H%gjA>_@R!88iIVNARCU~N`f|<8Pb1BFttTpwy(fse>E*Arzssc%~a*OIeh z|2(cl)wdPYnu6k4ftC2}?L{S93xc+1l&Ew!oVyFkodwCRICl|Lw+Ou1UX8^0H$l0- zz%M&g`-t*En~YVjZ(;X8x?@`rXCA76&L+TUwRwCv)Tx5{>;j*qtEMWTv!I|3qevOa zaj!z#^wWy&=o3s8UC%wNQx{dRwra4V@=m(XkLPd8&u3zyTS;Z2p!WkJPZrq5r>+vJ$$N4cdpp)A+B%l?iA!E8KQBCc zm@0Dw(l(zpiCnu*z?TGiYoU*B4=1XHP}3Ixy^!zAtBfvO){QvK(p2 zN}@@y!;%6vD3McfUaa#CTdSxOy!`h~GjG;~gQOIzmo^V){4Y@|-s<+j9T)3|RDWbE z`rcslvy?uz5Dd`9eCt%Gm!PG4jGQ9T_S`4%y4$ByeQVXql^UP2(76MNyh9x1=(D9qiSaeB#`2W&VmaI(Iwj;GKT==tJ!A{X>i zZwF`aPH$m{a}SJK*IKxih9b&^{vLrZ7^Ym6O!7z0WG~$!eBo;1Kla&*$b8|4@2z@q zmvy`X-l87}%(O=#%_gNhV$B zal{KF3d-6eYv@g#gP*(OE@PCa<9W})-x`8WtDD|dd@*Z}^6Y>WcO7~b`maU0Zif@qQ= zH*XfzJdgi)NK^?EtUWBMdO?uCg5O^SHrExshTppaKi(HztH{mA`1T+2OVGslcy;?e z`DI_@{7R61D~SIsD6bb-|6;96jMgO|DDaueIK?@qAhL#KJ_69IqzgcG6)8Sl880Hg z9L-6-46v*q{RPzWP|E>}3H<(Bydu;Z_^l!+*Azr+1FH#q8!KN|RJFdKwUHp+K+tXp z@}?jw1b!VZMspHxir>b9baMi>05-$96;ubP1imqn?u>I6U^_vy4X~pi9wSJ%7gVEh z?k*@s3X+|mwiZ|sAERN(_7k-C6R$L3{wzL4x8yLBgz-9V!@b7}PO>^jJY{ zoS^uPAU;|U9Vf_75>#UaJtsh&D6p~P_UWREa{v@BzRZ$O5LKNaNSNs&6fW_2{LU4m zX9}!(@tdOYALJ}96!>ks^h%tQflCFoD+H~J1@YyAe4@Y-MRJKKzvP%-D=Pb)ptupZ zMo`@#h;PPu3vds9cL;o}BEA>D2Lu!E6jYDmd_v&&v6K4=cv4V4BB(tqNT&*7v@;2M zn)rFB(*%C0xO_-d_OhV-v!Hk#ctMcA2KAyKMuC&PCm8T9@FsqL6BHi;?+fzjg6tJR z`~mQhApK0x{v7y+AV-1Ymye@=L46E-C1`#vuu`Y^8NVL|>36^kLH;H1jiCHV5J!>z zXjVZKL(MHHW)sv<^u!#JCCKqT)foQi5U$LH-LtIaClWgWnKAwjz`{>q<~d3hJv7fbu6<0cuS_ zxvC&qS>UTovDHAs<%|adYYY5DP4O$7!vs|>DAp51sC?qhaBd<9b+PnpY$|pkQ z6P_AlVy;FofW!$j2&7ZgVe(qjbCv4Z?Jg6u>= zyHAk*PEedINKU}HtDr<76#rgOoG!3xC^{48@q+XuL2?EG=LjaAC5SH;6z2iw0+#_7 z3H%6kayiZkf;#G==mG-%2waMDk|4Q4P+S8{7Ub6f(*)6t_+2k3uZ6l=P+bY!A_yv^ zy9l^L(7H(w-G}oYL42pc&miUx;P)u-IPipEz(a!gF+uY|LFY+9^fd5@pn6VFJO%Xv z)U$%*WkLHDLG&ViuL^3<3$ix^?KkoJi=h5zLG>2S*97tFg8Usp^e*r>LHSQX@e$N} zf^g*UV^QgJfe#<%Ux~7sD*u=rq5eR6R)GB;zk>wPxq=)$SM3hqc0qEF zAUi@}omTXesOSm&9tWNk_#MjV?*yQ_ihqLI8|p`3)>-v$)>_RXDnT!m&xzkaDD+bC z0>B3Np@WJx6f{}F$EccosQMN3O*#6es6)WMg4&Vzv9`~~3R3HlP$A{V3v7bVi;Ln! zIb+mCDXO9Peu33Me)T+kUe4Mhggy-QkRV?I2LGt2;%Py=x1jSTPS!Y8B1mr(#3+B# zc?3}^@cWmoOq4G$wXNA<&7Py#$>$f8O9*1rJ8>lNd+Oy-QT5dX(JF#`Ensy)F^H~>bW;g72XNXtQU8B9 zvXgpuE@tt4ND2i+IK;M>C~Hab$$Wd6U@&`B>EnWCs;(TK>>I-uC`VKJMo6U%b&0^r z5Whd;Q_8K0`mD_tHaQcH4zZ^5v4tsK1ba`&C|x-)S1rX{u22uqt8!k z{Z@inN03bxc#CFp6H#6O(siApr225@_B>GoSKX_kJgZeuiJp*Yo+xUTE9VjZ`lOeoUXn zH`Jc&p~0OriByOrsZrwb_5Y;3F6s;1y=~J zxtRa3FIyAJKHMQHU^hk@FMk2*Bt?|h^76OpmG$Nn2wSK=8Ths!qARCKOqwUIqAw~w z2J9|qqq?+EQzB}LXRv&Gr{{61alIo=s#xr-rl3!oPV*`7c28tvH;KxwA_(^`pAmFn z*WSk1r!DI-3W-N46hdm zP8HZ=UBlcWe64`5*-z~&g5P3?^RC412GHCUgYGe4K&vjY>wwlD`yW+Pj+TaJ7f1IR^+L zE{oz=U;rE{=$;_RW&+0v!j}a(9)|$;E^s!~xEMD4x*)qk;4Spt@io3c!4ok0n>Pxs zyqzG%e1kLG=g}26=p(Aog?*d%7FcX}sgLKS`83`oYVH@}2j- zYS9ZA3M|+9-2z`NSx*zS$$JHHL&2?3Gm1s2$Tk)A!kI5SIYU}d#2 zrowzdak-#`w>Pnwd`*0~T~v+9Q(*11?iFNr3EJ2=IYv!xD`ugn`ei}D2#MGly*~)5 zu`&I}VE36E#qtXJZue|WQJ%u?O%+v`3#=!~te^`k_{F9K*B3Om6IcOnY$>X+?u|}e zTb-UIDueHKPZ3lz0GRLK06`y}y8QzvH0k~mf(%~VK$EV2Dk$N~y%Pl8MFJ1@{?4Ly zKw%Es39J&=sKn(Vg64jL{tR>m6f+JZQu9)4l zNa(LEs)6R)-$>wFL+dq^m5*WdWz`Xlwz3AWgQ)Iaf_xuA+?gP1nb+jE4i?ozOnBmO zup_OCte62@6etj^p)5cAm=#wm!ltbGS_uqG z@vO!BE6Oij;rXoovqoWc+UZV!1IN9U#7ie5j4}VZpu9lPy;2eR6QVo^>AkOm2?d*Q z%OavsQfYg7m*~5UlWU#;k_s!(-*bOB3&w!j%dbsov1N?K01hZ?I*u7 zx}%w3m+g3X&XudY>lSJ$b>?vsN0~{{MW(vak zv<#lqufftHjI47Z6#mY}wSv}sL3Wj(yiO2rCWyK^21}bg^i<|>v*J!cg$J?+UkkV) zbDWQZg@PWA#`60DZ`k*$XK&cAR#P#&I&0fCMTMyX`{A~Sk)`W#;anXUS#p_eE2=X4 zszqfV7339E57<)>b``WfOAx-6?Iy5yt8o;;FA4G)Q08@WMA?tjp5Q-RL)mqL0uNBU zLy*JQa@;nf6++=<1?wf$(iuD~;w8!Omt?p~T1(OeRtI2O@$IC8RYkL^4Mhcf1z{^e zzBPbLpn*4_fI;QA3aUe);6o7>G-k&0692(-d_rutlc)?%lfhqdI7kKuv1J|M7CxfL z_H=fif=z7aNskK}-vBU?Bi3=(Bc5?SSSZN$6y%Ka=yCon{$nuNRJHcC6hZ4W4sM|j zPuAG@**wNL_u%v}O=FdT{x{%`!}d9WpUZ2WWj%F1Jg@lkXIfw$!Z%}|_+ z-#Z`|TQ-guXXu8@`R{p^D2MaMtq8)dvl*iN@&R?=T%1ATAiTUoelD)3R#Q46{GZu~ zd6=J_MT9AzVCDk(URvkp0{OqB@Eu9xJ)|eH*-)nn($1mZsic=!8CyUhpB7lPYOJj~ zZCD?gDk`EJXIl!=eT%z`@=;$oL%e^CAe_v9C?`F}^m0EC6pYXuWx^{deJGC)$fysY zv*Q2j(sv_1t!#TiybAcSAkg(ZJG>J0SI~XD3A07_v2n3efI@VHodx}`2>kg5_k*#| z=-IaIg?$wp4^+^mdG-ZSHMOxM`mVM0w6z;mH|>XoKetn>@*Phpn4zxrZxf7TdaMVd z?Ne(3HMIF>LGijEqG%Rx7xXq1_=po9saCv4!F&rr7yjVui zgZ1^^BWRc8OzYdCdfy@VT|pbp zm6pEX8}7a!nE0z8z^_WYwarzirga7FcLMJabl)v#qF=RORo%@5VRM382p)iQMN}($ zY=Zd}3RQk1|2+phDJWiqT1Cy%-BM7|eX5U(>Qw?SM9Yp5Wu>TzN&6xutzCpU)>9LW zr-c&pFum?yZ=(_$q5>9fp#QaUV0l4v1wmyuAMQI}RG+qEuA^X^3H|0aB!QRsit6xY zDzlFN+2**s70 z@F8ri5A(L;`R`DuBSiJTCMfZ$wa*mg%_seHMMVa2aRG3-pmCwVR%#bNO*L20o)DZe zU(jTn_bw9EWw6)Ri7FZFHNLqL6|BBNlut%!oTXs<4uY_P>TW^XO$Jl&VQsz3l*I14 zx%cV6-Y*6Hg#w=$Qv60#<0(OfNgJLQ><J)&p|nv(=E7uX4CyVkoZ%2o7Vy*jbe02q(?c&tQu7QQ)MRC%l*9xbS0 zH{mOSVwRwXZdP9}@UfaxZh?Z`H0~zi0YQa9*~N^k9~ZQLCupL0_5a0x4LaO%bU0X$ zr9p!ZoUbToz>&Ooy~I%Tx^)|h5hbhql)%=ak8SgWVEqN2K&vW`7uYQ_dk<0BS%LuQ(hmqA$(0m^hoa?1hP}w}(mj7x&xx2vYi^Eq$dFhqy!QvqW z=lw`v-(2sXP@e@(0QMF1UxIoSSWjJGw1~HdzTtCYV@##fELf zBSm=@CBs@QP*Z$;YH_M4ALo>x26ZfOyr2)qT!f+MMYkm!v;L(ZTrU{2bjJ2;z#V%_ z32JM7nW(TDu)3iARw7`VUgO%IEUM8F6jPwq7UY{iA>MnXD!W`)l>LMiOtpfk_Gm>^H3HfrZMdYyJ)w}^;kQw=k$O3opgHSE zvGGQ7Ykdn)Yum4=1h!JGHm*c2Rt)`wrAyL>$jXYL*|n)hN$g=h9|ifJ1U68E z*%z$Jg0FBr@6UTL6!f1GQJQa%H0RN0+jZA^#qXZalig09`sCjLi(@{;41n0z{&uEzP%UJ8N{A1%BPj31Hv(R z;-iY_twvd<3T&7U1P0@S%M+mHLS$l9b4RDLt^;}||G!WoTC0nAmnV|Th z$Vup(#T@10COeD@o3=0S7`9u-bw6F{oWw1-A?cpnP5F(q`uI%+dnYNPjLM)zH>(-W z8TO2i4fMvYfIMpB1L$G6*Rut7AZF_;gL-GdAtx)B46awMDu~YtJl^afb#Kp+=VlrC z7nS|^`2w%Zycv<;Jq<2y+?Nbcl=j+HkfAN*F8BpdA0rnAj_15)4V^!Mag>}tm?If# zMMO!MbgiIxi~h?u5+vb|PrBO^1bi~}96@%Lz-|_IpZONTe6;5rd?5PR2@1BpF7Qzq z1;Q)fz0B|xczWKmeQBXOjsQ=)H$N+Cn%TOIc{E?|3b3K$c1vem>i;Do47oI;y+Ds; zS1VXOE@<*a?cWOu7=@Qkwq6(2gL}IsCnhK^0ynp)L_juR!@aEqrPWpB)_e-I$U>

6(blcH?9i}DH6D|SuGEN8a>HU81C{yPW^|B?xbk%cxwqTjR(u@c2 zA5IQ0VJzOGOj{omG%&Tk`YYaHkKCU{6+PMr%hm7j#jKsFdS(0bf`Vea1(Q(}K4Z1rK`$>SI(ceRGCw$F2kPF0nafqPF z*l*)R_%O_J3kf2f zyJ!mDL0i6sioi-ORui<>hQh_#+fZ=arciL2uN8v+wt{XYDDkOQcpQp-1ijq^{R0Rd zOz>D>4*#7asHpL&cp>`t2m&)d{of1hc9@Er)Ly2F_GnsfUqSWUoh)dgB=lAlEc;IW z!}s91@&;qIv7Nx@Fb5j1d#j)a*DHP?NIUv|Dr()G1?%Br$oCUesMzr|;0%G69eICQ zb*F-MEL`+!Q9bnH{?HLx;{#n6SsQi`Wb_SBX}C|${HaRs8(i9S70b)^7e$TsM|BS+ zc#7aZ_eU*M`SQ=IQ9OilsxCM`_;}hbwWS`bP)+~qo+&tb+Bn4=OU;-u=koa2=5hto zoWqKGhfiboi^g$udtfgz2L{~R{a+eth~9uRX+W&M&BM>jM}r^ZZF6BG-l3I0EvkV8 z8=ob}G0yUJ^c@Y%s^k^2P{NlHhU!A+L^9Z4PxLTuEnMS4)XM{ch@1)7$rS^v_@N-D zduM+V1bW!CUkKvHO6T2iIfBZoK)Nu6{49WxSHl^K0|CZc=C{$61HHIpnzBuw?9&PD zb%_X@Y;!?L)4J+9P_7|!U{mPEiIG)Q$pA-6WyKoh$!m}L(?$6%i287-69w^PLGN7h zI}_>x{zHeW>=ya0s5EasR}uSOBGG3A6=<)yU82l0`AV6vvZy#2m?Fs57F4SWd_;72s;IE8z|-#i4GC@n zd;s{6pn+o8f+vOud<@u9(E5bHH*I+5fiK1NvD^J!NwOEPo1mgI6ey5(thP@O70=|q z(*zA9Z0|CHClQ<{7>6gOlMrqd6>bvP4{{akFnd4{em zw?}Q_X8h;GQ&2-qIq{TVsq|J(tk?OV+FEt9M759_!pGwcdF^ABfjunq%o(0gu!0(2 zo^)>^-I5AM1WW!oWl$6Ad9bjKD0_wc$~hByqWJ`m9is@x+G*lqIEl-gwu|zW4i20j z&w7Q`+>>}E#qgYPg_dFMa1mx(W~B{Jn=gR$ah~ zPPHw>%l!#f?q&?XX!@`cZICaAg3&bGrgwBMyc0R(s=%W}=}uagzu;@%^c;62pX>0&t^rpd4XI=cXNFroa6*ss#Dl zbt|l(|NOmeOS-R8NS=MdHpJUh0(ao-e*HI&>&kWYF6w1E?B5%2eXwV~r-F8~c*~tH z1;QL$B2FhAk}lwl561$CgxnU3Rn9Z{4+-Y|wE=+^E(eeh`8=pAfQto9#Douo`|W%v z1V+3P%Ch2GQQq?yCR9ipap4+bF}cI-0ForoQ2EcH5F%+S9p&}0%$|t!_1h8Kxk9jb zhRy3T0t$He3viNR<7-g=0I+()GUS5kYpuCP;v``+1!_G(+(3}OhaldRh$P7)!7jl9 z$|my8qVnB<9f&}@2Lwhu5;#Us%n*#t6ogawZx(R6Ae#_``2ad~_$Kfz;9kJ80@c}f zAp6pj?B_)MQjk9a^*HbsLH4|$_%p$O0ZXd;gr$Jj2qI3BErd+*deO|jAT(}Yj1<-) zg07c#6Je(WI`z8S5rJTd2$uLUK?eH?7BLmnj{Ns|D0J`e1;8TaXi;fn&1q0)5%E=E zE^rxe6@aTLzXuA5<0V?*eu4-a-<=eHBg&rlv~A=mf-eZN*P#9Z^-rijK-p!64?ZqQ zn=cQnD2TA!unN!u))IL8MnEXVX#~;qvyB7+P2Wo+Ji%zm6t*M+p_G3fiqV*%^DpM< zxR>A$1o8X8?+88#{0l&MRsV!Sf~8aca7Dx==#DURZ+i%n=(fx8-zvbnfQmJ_z8U_vsQRmZG9P z7)aA>FJkuqaM*h{LSXVfE%7)=R1U8jUBvx+c;e}N;KVHgyA9{4?xaB_$l_^iZS~0 zyG$@<;Q;&3=jqwBrQ-z!8-FLsp9S$Vs?)UOfu?BhC$K*vnpwi;T*Yy7DhxJa$A04# zJ=^=NAgxx%d|hm2h5pi^zogE;swkf?(4RuOcME)cMj!L5PaSl(7v%KQY`S3ZdBI5c zF*Ux6-nQ6fdx$$PS{^(Gbp=oSLR5d~l=ZgoboU;nQQ72U-Xy3IF{!UDt1p^u{e{Z* z1#;<>NVh5~-4<>^H{L!9Mtf4}@&!*=%h(3W%7isH&%juvvm&wriSHnZ6^sQ08>QZB zW4=SML#!zeFhA>$Hs!}UV|v2Db$P-g&qj@%qgIMMp*3fip9|!m6*)iQtlXfE9gx_W z`fVwKviLtI_G8xdM(I+~hF|2;J9a7Zn*%s!Kf4yeEp7gI7zx_j{l|tuFl0Y zx6yw$s|8)YG2FuWfePmEoEjH!akQxBmjn|B3(8}OI9}k>AWHNrI}p>Zo?j~1L`|u; zSAl%4pSN#RS1H1q>O61dJvH|Gl<3c6JMrFc2%1Z)DO#}WVl{zBcg=K7Ixh&;oYqFc zkj;kwiP_RZLos;WVRJuan*B|XoKF6%OO^AeWn2*+_O3AZt3>U^v$F+}!Jdv`Kv|6F zi47}!4->qHQr#x7zSdZm2Ec=xp-_3jf%o8N=P8)qE%3hWu$+n!8T;`~qQVLU+W@Ld z<4{3%f}lj54qpe*JmQ@K??J6lAp$Byz=lm1F}_0u3f2JL2epMDyAcXD;d?y zZ4S4)sFF#B?AwB91^4@+ywfa0oSbl?U~EDVaO7EsE7w-ek$H`tRi-(5hc}N+p*{N4 zWO=5bb-iF_Ch%p|h4qagW1KRk2rpT;CA{Q`3g(CF<>{25Sqiom2&^bIV6U!{0W!su z`PyK}@CH<@VJRBGl#`@JCU!L-X=HW4TB7_FK%>X0~11i{i; zj8$*IDG|}$V(24Dk`E6{xI3Ag*AXPQoNcCC34Rx_D-5$GqkY}$7J2Bp{ur>`t{}%v zmCqAo=s9*Al^@j0^PzvpT6hMpvvYJ0THou7ec^OwzmHu$czZJHC0|3}lcnuK?_(@? zsPPUT)1^DQ!WNNLqz`$4p1Z|Mba~f{_YirLa*bt}(J1MT>*H0@h-ze-Wj|zN3Np-L&A25=i2z8AhISXGPm@E5q`NQi}Nn5$ZDP&ry z1nIaRJ~eHlSV~lT13}Wb*H8xOCJVeSHOfh30w9|UWz&3tsC41S2D}Y+6YfzG&+Cq# zPF5EK46BUJ5HUBit0~Ju{TDO+=lxrQ>l7TvXdN7)SUcjIpC(fx2DXlIgcd*56O}n8 z;v{|&xSaPQdNUC^Z&OKf-kY&jC`0?tMwR2wzxj=HK2s-WiBTkRwX-06Mj69#^6QIChJ^Rqd*qE{f@ZUUqeyZifK*EsB*L)B1-2k5hffo?f3lcRZ0AmrJSr%jf}#bz?8ws%fuT`Fnrt_L=L0fk0m3;1F$Jf=i}McU zdk2*5yxl}Kaj*win%5Hs{OCE}^Blj0%{d<@5n*%Lhk5Tu0GthRe*o6vWmY+?-gQ5Q zRCAqXtBOjt_}fLrjR;bSUX^2G#hP0fTFmyt4LnTkIAU;SXR9pP?odzhEZot0aelVG zZKM!5!U~@msDqKj7GsWZ;yKLdL<=BzyY(TTpY3&N&e@3nbN(^up8dK*7m49JBf z?Y;GcrEa)H!GIL9qU3vD?aQ4;ovvp=?`bEp_xxZ)t&JWAKN01YcBaYgb*5hKw*_}D zTwyJj$`!G_Vi&v5;V`|U{}#&fUb3H~U`~@|7{(E0B7R43qMOGm#LmiKY%P*Z)nnPy zJoXI5cnWa3_lWXs^3DPyz zCmrvd6qP|m-3J<~{D6X<=*wt|yf5(dt-DXWjNnOv?0bOKkKc$IxV4s7rrEl@lH$5c zMG9o~Bi-_T5<%*@afu+_DDdUYaZE4wBv+gyDmDdUKT%0@KE@T+cU@8X-beLVZ!Q_^ zt8`uvHjZYQ?ly*5W}A`UV@l$Ib1x0=VdbFVYkL#BDc^CaAl>8Xfzu^ob&7F3S#cG1uo^4&k7dX zBtY}D?pCIY?EpY{rOtYjsMdEC8*df(i^lF!_K9zxcKc8=yI8&BE0%h~#oh2i#ro!= z94*KWN$XcW@xApbrT0hEy<2k>T<{?8!1Ltm>U^w2gIr$QUrBr-q|d1EiJG>ZJ$=@x zCCzOjVsw)oGD|6aBL)~BO(nZU% zZzuzM>HL@-N5?RT(_yK+y!k0TmR2;9fv-q%)pZfG$#A-UmUp61zb7(i$ zy$@gY;+Da%+S3(w6w>#wWm9<3uwHz$Ks`@iWN+S|-3l%wt>xNH!-XpGL8}cH2;Sty z3S-np_V^nW`xhR|Hc^4n^|SjZUAoDP5f$)8<r}l6|_)l62t6Nbzo+f}UtW>J2zP5~8MtYD({mx%!WY zYVsYvFrZ=rs!ew+>4^*IAXP_TudYv^PS?-!9Z#Lh+wM_1PrfwVMW-n%kH#y_xM2$E zjy}FO^+`(L<+3*7ocOnl#_(Px$#|~^u{W&R6`OQSzC6+ZlX&?{G?`ESPY2basHaiE z!0`a{&ak+K3N+@~k%NdZQ*aeii5}DG?kO^T5ifCYXK>FsT>quRYdsp*AxMv~aqF9M zvIXSAv$yc9xudT(EgsT;qtP>No(Vr{ImT+L$r}LVJrN4O}W#uVJ*Nb)U_+#En;&l8lUwJPzZl{EG zm5j=^B=NCD=1sn}G4rzwgUn^7BYCTpeE?=RGl$=CwAq8%98AUxKBsal8xw;!tHMrB z*C|t$YpBlBTwonugeXc^zPi)c=(kgXuk82y_=h z1$G9ft4MEA!2|s&$#Y7-67`ad5RARBuYx(u(iUIA!1kfO#SQ#-o1g_ZGq=q)q31B{ zy|Ujj?j2UKEUHjr2dKU~z!JO_nxW z)8>B1d?bla5=)wg2hOlt6!r=YJHvO}pl*eS^w_wcrGvOE`K@|K_C0|+dW)8spk*rB zqlG$?{W}}+MU1|+?4ABp8rcVRdoIDfIP$$6`d>P|nr6(GCO8^1*QwU>A!qoZ$K|$q zEOiiG?pfN@r97Nbd*Vfk7*OLDCq8!D8kuEJjx_Mm+0C_;u4&0W;+@oAj`Pe{0gWWs zo%H+oBZ2Qxj5tD@v{t(KnU`Dkl)St%tmo0e>91Ieq|C0Iwq?(Ra`7PX4UL(zM@q)w z5V!2Ma%YEM68^{|GovTWi*3KbOT0cJv(9CP%-bweM*N_OSWKlt?MYq5&BJ@mWCo0B zGnB-486-XT?E6HyXS-q-Swp573o62W!8Bc_=+rgBT4!6oMaBqqSUD{`?owrE=G}$Bdt) z%#pgk#ZuC&p3##;uk)LxCoHYPYf5Yd$Wr6W=0jA8eb*hn zEnk7MECQ&Uhk8D?;>2I^

F9BPdxQmZbcr04=;KNFY>{G9=tc`CpfE!Cc*nRj__Nt4Ah^w@ti z)IxJ9OC}0wi8J^p6py(g1~AncYa&e6+x$hh&}3->+4W3fcX?;;0=-U|lf8wz*Pov} z80JXBAwC!m@sTewaRFM(W9Dg(K@=dXbg5LUll@VYir9=;D|cbYfnTt4>>&;xw}zKK z%Z$5~O@!8x7Q#%eaj`>u&4LK>g+Jtk;u-tY$G*@AJ#u zg2Vpo5_Dnu!3}SI$}mX$l#-gEB%wYuT9fdyF<@7TKicBX)r6jH3F``bjaQl>CrM`o z(w*P@fX?q`{Icr>Wn$blALzOxUPJf zq|@C$)W@xnRXg({=G1MPTM6_bnHilSDPzM*T+=RDrtH8P~S+k%O_Z#k0u$Mvxjcy-^ad_jPpen9pk5n${5&oNu|xvjMZwWplyeA zNopAda&;!Phff$;+Z|Wa@nm&`V8p`L_0aWzJS57m*blb(ID$D@rw&s7?Pyo&J7&L3)+g!-B*w_3X{#;N#AK@^%X=nrcP|Ocp zopgrGgN~l#L6WTZE#Kfd7I$MF_Ppp-mVLN361%1%#+TwnB@C5(-;lY%(`JR$Y3t8$KbKL0eKZTJSL{!i|^htJtKe@-gY<)PYSIzueq=CS!U4csP5o zn*j{SFGaW#orM2J3-tV{7XH?+He5lkbo*LQwEVRep4+2o;pIvsm**L8Nkmh{=2yvA zN^El8da%3xXp|(U`F!hP8P>5GW9m8Bx^^U|6*Klf|GPl5vnCF?t=%lCgE&)kE`O2D zB_H0H?4H}+sNIb{z+52e)ZQ)Em4(e_!-y~xUJV-qmR1ugU*|S~GxdqWZn9IH>H8@? z47w2k|VIWW3jaMke% zn^~8l3#1*s<_u2fNmi;USz{!=$^*>f$o*wc#nz}%c5He5?j)E(MO%)+I}=l2oG0(< zmQ(~;yj|M!apPWUa&7!tR0`1+B79V`k}2Jsj8` zrUtJF=nyd-@HjW)_SheoC*DD(UMEONuOX}4YMy(deaKehT~{Re3iT3^zezjf%k5Ke ze`yUnuveTXaX0K{uiBa9j>N}Uc6U50=nyFzhRdOVT*S*QAnl4Z*YjCO z@nj+YdgVBcY@V3?m}l*bbGP{S%6Sz%)(!|u z$&s$Ii1KAt8|e%y!M&3tp^B3Sd_oZ&YXC!2#_jQ{WdLnye&Fdsm%c$Uk{bwq>bco8 z5Z#MM1C|CDaS)rJo}%;pc_TmEy)Z40loC^ajFz^N>L=Pbj#4$bj}JLv8Z&M(vu5{p z#6-S^YB$-TuB#zyv64`_H{trr-Q{6W?k|3OZgA~V`nKOo6?;vL*~6pmthg9_zpi_j{lKOBDUZc-sZQ4^-K@jg)}xS~p9!{v zN$eK|zS7EF&&u6CM0oDb3;tXJn2cLyE0@&P)6TquYARVPnPw??xkuhwJeJ&TXjPtX zw1IFMqawMU-HV4q*TZ?na1c*%#S+{Qm;fdNNvI==TpME)!`lvP#+IwNGZd9ha;&wR zp+HMM^VO8qNUin6LvlFt<=OGds_>Unb?;;_*-hWH^U)QHifGpNynCGorz_T-hKdMO zXL7R~O(Dt8yy-eSF6nDwTuJPnFpEr+Qnshvg8x1^U#ITV&5&fDp=wx&Bu5V=eH;@Y z`FI>lg}KXHeS6IAW9x+U@o{>ry>ufld()L@#b&5UzruUHY&un)U;coewO8D#c)Ci2 zdI>}4#dGF_jARe{w7|?An}4E{r;zAzH0{&Kp!Rms9@9PA+-jg$jaAWN5I z`_W@dwBdly*ShFwb}EQVqc^SBtycSVJI}ynhEN; zb$9@nV`zO6KEnoSbg66=L`<3~D8OrY|A5UcF3=2iIhT`N}zt@#$)yfrNFU}l2 zmZl34Ecs-*qxHncMY)^(lV@#1xYM}tlKfalWibc#Z0m!S{O%reczjC2rKmHmXJt(_k#1Fr{}?!G&G)=a@Nzzc2iN0lxu z$bs)#3fVvn!x8@-f6S0ECfA1B!vmY4=Er=oK-y2j$9P63O#tvQk5LDS)muUws9@@j zTT_ zjYqeUhaYcq4UL%jH9VFkmMCP4zUwjLmbS7O_vW)O=aNt#3WEFmSy+|!38wjJYi?HB zD6V^**F>lGW#G)ExIcCWaU;9_$i-H)y~I|mE50p1SrLiNdF-1FyJD@3A%JqL5bhhJ zj>-3?DIq#$X3^%)cb6aPyRT4;=&WG0ImK{|r#TTyFvF4jEjIQuxIz8BcwN%rmqWgmyi6?g_xxMKT=`oHwr#>wv{$C6r?(A%6ol;v_64n7fzJ!7Goj9aI$f|FCv4Pz6!_}js>9pX6;zQ|^0xewqWaql ziXHfGIX!2JhQWGYQDz18PKxl+ zoo7rZiPfIN`R^PhDRvW;W{1yLuw~ctiK5Dj6|vaGgje$H(>(EAQCEL49}!hOD(G5kVQAD}BImym@j4Oo$=+Im)_Q{O`huK2w?0a%i$5p8kiFNfiS3tt zP>^!~O8sGh&nxvV&V0Ipjok&!-2^@?q1snecOU-aD3mwN5KKCS|7Hs|J_~A=Ae<{G z&KLA11oZ`iF5|a>+<9aI#+G_~MgI ze3)VL08x!21=V4Kc$A<%TF~WOh;ksPjwd)%kke0Fvjy!_1bytI!D)i-83fOPx=_%* zKv1y}x-}v25iIrPqPo`!8dnOkO9j(z74&Zs%T-qCd&5@W^aO84tT4eTtQH+B4~63{T9?3g6`V|zNawXNL0C@ zp!ESFHW&1^5j63s7F!F-tprsqXm2a<iQKxRtn~MoRl#0((BA=OvF((A(U+n$)|EZ)Y=04<_wHR`Q!g&HkmJe~X}EP2dU* zLHip5TWxtR%H~LKWg<{H>vaUJQV`Jq%1;Wsj6Hl)RIvvU&k6!d2`l)0`)o>o768w# zC#z={2LJ~GF79cHec+3N>}$aJf)du^L;LEV5WHN$-aJ9N2sBmR_HZ zRWbH!kNr~A*yjbsL4rQs!NwtiwgoOGN}j1e=KNhtoOdbMr-!wWJ>91Ti|rR$OE0Qu z+I0Aqt8)_-D0`ovd_Tb6CEtf(Wzj3x>o4%4TS?axG?7P^B#Zn?D_-X))0*$CV5Q{~ z0v{CBV7HU`TJ}Xz<6j{N_i6eQo)cwVV6L-b{ALW;i~$xN68Q4#jLx6V5RZCM_ANob zt9Mva0wL4m%C`H@flHVgqOWN(Y^C3{pb1Q9+pybKJWtB-$ukqf}HxBy{=wl8I{$% zvLd*rz+gS{V3 zJIaRMfG^t{0FUqls7<5Z+B{1J);6=FDHTO?=`Wzm+uh+LP5MUTWyR)?>&u;Fk^RNC zCg`!*j)G*1lS{*zIUoIkWxUg&<$9q=nlQ?E;y<4K3|Z}@46;iE>BxA#&1*xGAv;+m z2m^rZJv-;qIFn^VraopUt<-U;$kfc-i}qal4Tj$C(NZK&O$YjrjlG`j0NTh$y?PNx zS_WaQ&$Tg6#Tcy}JdIEFg0SSQL3ky}L>IMWvdLrjiCM0vc~iCfduftL z{W>3w;^l7k8Vo9x{!_e&clgp--w$g`b5u<)xj`}Z+t=p6? z+AW8k=ye{hwHM5|F*p5{eSkp+l^}S^!LbhdOl_Gt`9$JH6VHT z=#G7!T^X_Hb(a3rEB#*g;vezR<{uKM#Zj+a%^=osKr2Aea_Su!;Oep7Pw*y5> z6Gmi}Iw7U<0x8$&OYVtu6WPhN*n|6zNqI{|5v;^ zh$>GPOmPiip*1kh@(F=2->fZrFr~{Y1dW@aZWPSAOOV|w@Rggk(5#{KFw^Q^3#KiE zdRkEaUf}Cl+Ruw>{DUBBW4@H2YzRgdK?TbrY_-6_PNQQh8<=Uc))X|S0&5G-!7j@& z$+C^1HWV~q1vN5$vHMQ8Q*a#RuG~t{!!E09g4kuvN>J=9$gsx3=LF?`f?3#LB{o=& z`4vt9u(Gl_f+hx5j;U2+U_}h9@-qIr3hFvReLWPmRm8RmoGQ?~Utj~vS9sPKSP=tj zw6{KDTV+eAo0ZsB>8Pqdh${aEU}c3RiN&_cu&we{0Q8pce1JHuvO;D)uz9Kl@ z4)uLO^IqUCf@`X|oA-(GO3z8yN9nXO*ocprG{@|&Op>+u4-=rqDhhiE%4Y@f^91iw z2@*eG5SQQ4f4|_rnCTq_3c-AaX-!8DH|f9pGoqR_qxIeSvxucEffr?)3W}dAgR~(Y zj`W*-lsL^0A(?u7^kS>C;A=A;5_l=dXqCl#{g_#N?TfF$77ZsX~*WJ3R+~DPrjP#u_pXJ9L*DO!X~^utzDpyX|dLYR1OTe zIU%ZZpCCL2AkV$hGa|daqsn}De>lG#usI)N1HmhylTFOGrO9^QF+hHJMYsLl_Fa#% zTHjfDiewX|b5?2MdX&pPity?zuLrT7nCg^LSrmC1H7(O{E-2g9U()mdU!K-NP?i!+ z&^7cfOB_mI4ay5FoG!mZ>3o(?+J5zIUSvnNE8+zOT@invijzvbh$mcT-nQ7%657ZH z;DSp?VzpxMMh5GlCVQ24S|woR*nI=>o~FtWSw021{k$?5(1GJ$$?7kH#1qX9-=-%l z0^T#waP zkpaWNI=U_4`DllIy7Fx_UO$j284RW?UHbx289lM|K!gjJ11~ZMK3NeBSY-7!(yb#% z+>wHp6x>^Y8h)0q+=l!bw<$Ipr;;`>0kXdd!k-0gn$?P7_GYDv|0~E(g~B5@pBMS4 zv^dPqTImdw-n1*8(Gw?>E*&4fnId8#$QVL7T9A+IZZeKChLBI(@zvO^U+b}%W)F-b zA2{TO>O4yjxfOR&_DPxDfM+e4)}hRZCm)?15k+P^ue*>RC7t_Kn`i0SW<2Ro0KDQ2 zq;s*WAmD!Tyqedld0|n2rMYjUy*w4!Q^*D^*Xwta-ALcCH24p`dpqy7ZSRfb19!(E zQ@8~`W?DY*Go?!tkytx%I6`gtmu3KbjK3`{u|z?$%=7-i61JWcddsrO$|c#!yfR&7 z&G7S}JMHJZ7fF{Yf+RWf9|OAHALc5ZHx78a&ul6u9ppmiH#d9zAZnb7_3=D$Tk@lW zcokgu6+t?j4aNLddaQ*#?UOS`+v{$HeWmSn=vLrwPlh(Ez--PZj*T`&q*WWk ziE!^3jh>A}wMyII?a-h>(`@}NWJLpvbc=}H?W{a6dCaMllsd3HatVATXtkpr^Cbs1 zX}#JZZRokzOEAIYXI8;9~Oiipq>$=O&hBy z)A9^KI#3=qmrhfohUzyf)1E(ul>z^C)XfxwZ1#(5-J z8aP719*$&dBQ^THFKTYj(|f0UL*!JPO`p>+nb+@P{GUcn6^8`+4TmJUd`(W}+fBjz{0JUrX{n$N9T)&`Td7G%# zUqvN-?IZ=`&^cfi^-OwBe;MWCMhPpBUoOb-6;${NdiV;ml?7qwD+u@s;(A0(1=a=r zpS}WSYC;rLBd-CXt-HCPwEqA>pYJY+y8$~3>_n(`6y-bRr{PH`_7-IO@*nPm);_?Y z{C9+)K2nez3&)6xGX#T~0?TB37g|H_!q?`I1n)xUKfDV}zKmQ9jjIV>D`+8RGdmlQ zGtDcAK+yYoB`>io8G{85h}m}uvMT{(vb_-9J4IDEAUsc8JWK?xhyfaC{c}OKP|)*a z@r$Cy?4J0YsKP!9On~}1LE~|#7X;Rtlgk2CqmSPrE+xqR|9%Tpl41=KuO{%l0Ndic z2-fBCV0farfg59chGf`4ko^~j#@dY9=KtTT;fdz0l&-+5;rrh0)yR4TcLw$p1g4x@ zLnnu?i7F4!e+|sn-hP5*j}+v{x5aMMK1RXJevmH_I}ik0BC|y`ks7U2_;2VNDR7Il z?I8KOs5n=UO#qh(^2?#F0QI~bP~<&~7ZrA5{M#gP(6j+C`Y46`iXF7Ra`cBw>cp&GwR zb3=iz4N1nSlQlWC;ewBpp#HQVx8Dafpx8?g_ZC#oLZL}p!LVDTfi&n{z<&sWv#&bi}2Z*u) z*~Hj80TrT+m)&~j3s%7>pZC4{V4}$Uk#|p}`6DdN9D&i=L&|vjMNi*8+o<*okBD6d3dSAb z)V_r;n<6UvyJF*JqQIHK8^Tgm((8 z=0)=%bEL14)&4|$m2|M13?|c9k7isSpl6$dG`}k<{zPD=(7cnNIm7p$ngU;^7fVrI zv|{BhJ6`#vqwp>z-ES2fDbaso%p^zN0ZGcOH*+ zeXb1&#$bWT6H%CLbk$_l!ZP%+PhlO}61nfqng!2Z$xvHtW^`vg5g1Y46;ODDqQ2#m zDa$-T+MUF+V^~05z@HA9p_;c zo>xl;$3-$&C`cAyGtFr2)O$INKjC5p9S+#m2+JiFcT0wXFuBS;gfF1UsDr^yr% z-Lxx==FX21xW9N6$T+Q^-3h>uCx)J}Ce`UBUpZpTZpadm<@2C?&FVCYTO6(ed1#am zsRRw)8+dP04Tjt{nfmTX!gQ78PFo`_w=whk2d7R@x#jAZ)1PF^L+CIt3X6|Ob1k5S)I1W{hed!Yq0rJuf$ zp0x?@b7#C2$D*z4@=?!ebN=r|H87FWrksVMoYm{_XE#7tS4pxT0N)3w@gCLW)0{K( zp@wT{ZBb3QPjZ34n@%3KuNO4s=01!Ho8iwgR(%~!+Ofo7@~&w+)WWgKz+Gw{qj523 z7dbDvufT@__)v<9Pw>Kb=lu9zm2;DV=dTD_aK|PS51#I-87Y19NwO+WQ*2{zL0TJs zp{R<2SJajF{G`20PbqP-te;oJdec2_#zi&m=%?7XlpniQpX>c4bp*8WiLgt&a#=Fe2l15{4ST;+V;alT@G zlI$1`mliI8#(Yr?mQF^D^n5DRW`f2vL5)h%yH8Lpsqe7ZId(@;eNW`Bqzux{82^GA z4!R!BmAF9vnG=p}L@fWgQ(tkQg7F|h>u@NBOS;whi=x7z00JXiM(o7`UuWTh&%KNP z9w1h~CBhGtc!$4>w2&)Mw?Y)etpo)v7z;sn*mxC<*Vs=GY};Q*lJf+%-t8p!1#P*N zEYz(WO)JpI)$>rV@ZW2K7H#ei9AMlY;nx2I|Mdlteh_v7P7&l+KwSfMDKJus9#+s- z6NhJscuo+O;47^Z(S7pG_`n+l1>MJsOj_IN%d5ix_|U`+qI&lVa#S4ev(COD%0^9( zKIBR2*1L(tSML+}|F%8U{eli-E1yn~hH8Ial)a`CR{ZHrw^W^$%10GpoJ%}K`-up7}!n!HR#V> zw8+*eqMAz!!kI)M=qogo#^r)0>RB;E1zsG;5J^kB66_<<3sLuKsD3nUy*Vg`}V)KP0xkCT-e)gh5B2=Mc0RUL|AD7D{V0l=i^kY|4PJP1U3(S-eKb(B*9YJY#C+MY68mw zXo3aOr7>AhZNz^Vl*Ri6J+q(>ib|GTPt=kqK)vaLE`Gggebrc+*qo(c{S_jv7o;oA z5n0o|EeKBvd@rp}cnQB#u;QS+-m8LQIptEIuQfa=x*`@#%Q6Gm;10AXLh`>sl?`dehreG6e zIr|5(FAAzx1qGs`ySAXQ4iq|wnL-vtwQ3@^KAIQ-g<%>JE}%GSqJUGdPEKPY3~l868HLo?jeHyP6AIS zHBisHFsL?mPwzBA1IyoM5WmJi^tET{%Ga3+dVzd-v#9J2L5)J%x>HbnkKla*uTq}- zSy3fkoEqPal^CDw(Zh*Qpmg*w=KHG)T5Afb$$~HiK-uxx>Lr?%)t=%bqFOj`ic*zb zuc4f0)x>^O(1sm0za^?`F}t^@%CZ*4wTs#3dq?W8i1H}_4TP|#W!vVHD175|{&}bs zUfpIM_HK;e{O5w~7lKH;`7(EFk=cBLD4+8!&++i}mlO1kC;QU{-eut7JVsZxUOYwz zN!P5Jvy!QIW0~)U?x&fPCq$*GH=5g(Si(=eF36T)x&fPN zx@;4&UzcYo=>P_w?u__36g;-11o0<&c{2KW>`0hVIwIPG-6cSSPumk+dK(uLdbR_X zAHd8#5#&!e)fu=qwH1*uLT&8X==W-2uTrrC!k1SiD~7T(KT27g0cBZdf6Bs8`)?1SzTtn8;+vmQKq>o@}Y)KnEBJj|-22L{uk4S5n*AeAs(-97C_>b`) z;$(Cx|F>b5K5`+gm|?uR;V-kRgxIuJ4K_Dggyo#mk&+bGn}ti5bXwNEGbP1bcjcrb zXQ*sX^Ja82zs>%GCQ{d~l9H_U@+(Q)hbbhrmeP-wVIPaw$yOH>NRs5nSW1a~4`4de zm<)W;<`~ZwG=)FwD5~k9Unn-2ZoBXpU25h&itq`=zNgjBB;RzO|5*{Kb0Hf$6!ON~ z^z!rtv*AVAp}V_hOz@LzJN0QqM-OoF@a%i-&PV_}s>{-0opTxFfX=hVqak zacN#l{Y<1(Ya z)Wgy{u}jdb72$ij_C;CDPy#(0UZJHG=v;}>qV`nNNsOLTps?hqDL%R0HDqsD=8s0f z$WbtI6pZX;DC-fm^7B@;%&ZEDm?PTauxRh)6CQBE0e|Hkm-5*83VKm`^=k$FZTr7n zIom*Ry1za~1U78kM~QuTfv3rRQuy@mPT!gYhg;zQwSEg6k>q zaSv>GVnoX=zCn@+#fGzh>lIA*Z#|=+*Un7CFJGH?BCUKmStcSeU-Q%MRZ47iwU4^$ zWd^>~D=tMk`q0d!sbW;qG{KG8659lE4&-R6x$R`s)i_09!IG^_a1}v4Rgj~?Hc??c zC(@%Cquu@(qhVWOVM{H%dBu)`G<&_TsJM^7n~%qj6IIU^OqoN($pUXVF0U5VxmtxTX7 z2aNuRN}OAAHbrHt2pTI3daDY?*An=qt9+`cu(n{Ockmy+IiIT$w-6OS&VOB~j|sfJ z*b_3|R9x<^|2)H+?<%U;P0&Qe&JPe+&u+pUvttBaw-lI+aOa=(6{xd__$n|*5Y7=a zE+9A|s69TeBZ4W|;t{Cd2=eElP`lF{)j#-e5kc&3uf+0F>c;ZwG#0%D(-L;&jJ78> zrt#l;f(-4exvHREP4EJWdbXjUwV5D(LQs~1|Cm+HKFxoh2hiYyCsa|@;!T3i41urE zZvH@2{(ayHLGg?r{!Y+(lK*hRSgS7(xSr&)Rv#v*d-t{$n76OBF~N@u!r_8!h9DmR zC-5Ik-){BnZc)V#1a=FLCQCe*+WdwhYP`hOy(1nfi>$CJR3LV$AfnCLeP_$T2g6ve z%h2nrJt$OJJOwyS5HI6DX68K~pB(4^RIsxOHR%T3oSKA12K*paoqdReeE|7x z#GXn7wtZr0u&;C%>^wzyLv31_`CZc8!GGpqcSGGLhzkW{k3ius@vgjZrE*zpDfQnJ zk&p9j%L%e&pj;)(i;61<%(+@Ht@FejUa3-$YE~v$DuyWf75|I1o5-Lv4Y|# zffwZDGenKS<{~YaeN_<70?s9PvB0gG!SEv7EM7|lTrXTl5L3U6CNqYW?=?2QLohDj zKR9886OP>pb(g@?sM&)Ae$>7Al-7=8r->Ch(?qkJ|V$5l`{oUx{T9 zj}7^F9vD_=1Yv1lSwSy{!l({!1(p-|e5A{dVM^ya3Cz)LYI%CJff}E|+rw!BuUPHe00nQ4cM9_F3Caf4 zn*e+$X+iPI1SbPifGq?A4Dz%dxD@4Uu(Lh+Z-0UZ0{B6EKxDwy$aYb054+GZhYRvo zXda|#^8}?Ut(78T>}x)X#QCR{q+t<_ho#ty3|**Yt%IhhK3DAS~Y z?jow*n-_gXRM?w{Jq6i8P}2o*FW^A_+lT*l6@)_w9!1a+=L=9r178w&F+l4WsDlCP zv9m>Wjum9q<p1Q=R7$fnQ*7gCfG!z=WW4GwHr5 zu;(~w*CX+Ck0P?~0Y4Ok+oA3hc-3jRP1M}^f*i9Yjui0w^k0082&>}1g8DW8jpQ3P zju+4z{kW)UPZ6}Z!|{15|=+cVIVyI|DliT003EI|@eYXybkg zW_t_r&q3`gNY=@oqM8Q_!eRV(h#)%_Y5*K62uDMGNst{bsE!njA0rsd6oeCj;{?gP zIgQ{Pfo+`ZD^OpJpce4oje;q+L;X;Y-y?{31NQ^>3X(<#M=Orn1F|%g%Y!v6*xt~Y(v2mD=eFe^2)Qp zyNLJzFb((+5nBM86D$NtvDr>k(rHlR|I>o3No*D8qddXvYpD1S-KX3UY9|0Gly4&l zs6v?)pgsA|Hs?X2;{HUS4|!>EI@0Qk1osn+?*ny+AX-~GR8%;O{|*MeK=3Fit5IKq z+LHff2*yqo#61N0|MK6lg4PLw%*xZqe6{jqy=e~V&L#;ORO9PVa|QW)f$iGtYW~BD ziI)>`jUZgbf8T_fC#b(g@JfQ;hPqBrTq>CLe;7N@D7%TQU86?AjY$&dkV9h(7z2aJ z86=}a90m!F2tzU^=V)?h8w189lQWnMCg%(`ISx4t$tI^6CNRJN1HSL`>fUbFtZ%LR z{pe@yT~*RiD^%^;RkiCuA-egv9!GsuC~b$mMcV76 zxl{c%>YL=+K$|Mb^TRyjGX7kux8H7NJ-gpMjU&Di#{Eq03|%?`uT}gb_@1d6?IJ^c7K0qNyXa2tZN8C238m1;X?N& zLb5UHhG0{$o?s6_SV#)~D1;c5{gbc5jVQ7Wx!VefjmmvVJCL-qg>W3wx!@F`nR<1< zq@Mjq!|p8a71D=<=rEx^REVDw!kdtu0e=#*r;%P2x~2-ji{K0Jnb5c$UX#@Iq0l%1 ze<9;*q5hBHRl3b8s~Kig#tCHXNyguVtXpaE>_X$7m<4rK)Mb%=QjzZYC51MGHn!2iOI|NJtYh#Rl_X zsK=5!8p*y9hKYjHgzQwLql9og(&<8tG3$v>@mZ2mJI*~sH&$x=x-O&VUW(i=gp6y1 zSmFJX*FBOHKTO8CWIQT3c(*6C$CJr;nvCa!cnXp&_{YiUbI}BEOYQg51kY3Wec|f8 zgx&~sW+9jj2?vgsRF<)%Yyh7X)_*jo;7P4niWCZQB6Q|OwWDVt((LG&Taw2_>O~}F z{hfw@B8!nWMCf)Oq6c+JAy^z~un;dJ)Lp2gIWUVU5%Va|zws3fa~|PyifEO+W^FnMO$M+LeqQft^mfNDB85;(djDCn4Jbb$214 zXOr(o+Sy>F5LZYC3grQUm)tcDE3PHv*l?`wX~vJ+7hdnK_n_Vti~zeUx2Ee+?*`m$ z*$!!YA=?F%JlCZ{eXY_Cx=v_cPLb=u4Z<5A zlY6D4VZ^?=a2Q)o{HcL2sA+7C;rrl3A0l#dFYcT+w~+GD6s2%T$GxO_y? z&o2ql<7B)ncven+t#XSuNP7ibA=OiJ@^_^=T2wJj(nfER`)8qgU&!ARJc+V?N7D3< zg!Tu*FP{i?sDG>e7>RC`dsLpY^X*Oi+ATu;6!?ZBUkUjn)Mth5{voyctI&Rgw0~0M zJMb@|^@C9UTc}PV_ghK%&)`SFo7}f=Q^u{`x`K2jE@OaD%__t*3oZIvH65|!R~^xr zMN*!i#^eqZ?7d9rjd}2;o=1|`8P+{W^9nWnvYLKbX9=M-2z61RJs5QXRJv)kduT%? z6^o%R4VD6Q*fMw17D8P{2!{y?9kvpuXG({yy@Ft;XF;#6v$~M?xj$QLp{^>l>BQCR zfHlDoFkDF27CIT~hN$Z!(Wk3(P=MJ09lMgATxVk;-vo6dp%`h*j8|arU&+t zlo3_dQ(5j}@Lifwa-Wq%lY*30@ss9glh%>ghst4$>(?XS^_df>56! zv`-e&vxR&dX=i~mh3V%C;rT*!o{(N31eXZyi-ht*p}t1Qt`!1$pY_#3bg7U`6sn5_ zhXHoDsrqKpZX)d#A-`3KZx@0aNV`p_?m)Vew7bAPq&+~|^}>}8qCSLrA9zH_?-r7W zgT5#hO(A%hw0Du-0k5FG1wIzKKN1GMFMR)@P<<|Vl(GIyQvHeG&TaiR>NN1R zFy_xlpMo#I--Y}Gq;G`mZ{RPee-)Cigzz6i{!j3wQ2tA(ze9amsD42D75qntenR?I zsAmZD@Bf1IqfmS=w5JPkpp4FpLOr_>L_$eFxt;^HTS#XW+Or4~f93>qo9k5Y5K}$3 zr2O(3^$yJ?shme>)1P*j&YDhjN~gM=2=zijHowrJQ(ZFv(20?Hgf`vldI90sMTO21 zf>&*|my%S`$L=hNG?a|RgnBt7`qQ1|kro$@TLpDlpp#keNqS~gp&lf3))2brkk@MqUS3iTku)k3TEm5kPI|Jg(AhvJe=h_Z3tl{STw7AT zxsb1qv=P`0Y$232(jUNaqtM=s zv>k+UXQ8#LP}8mN?1Z#0(t$#-KR7_h_Y%rIgqmJ{Jre9AOy5sP4-w`(T*!|Qf>ANfBq8V}Z9Sod5m=28ij#$KwD86*LTkL>`J&^- zA)PAZrwH{4sHY3TX{cu+9Vg^x3(*;*og-X%mJnYm1m}@lSq#W)ze6i3E4A3_fvw`50=kL%AW@> zfIkVrb3*+Dcp3F^q!+LIvh58er^G~7rw~&7&Jo=sB z8Nc-}WPC5wGjyrkkCHn75%&3pv>(9NLNOibZ{Q~osBp7rvP)7ulVG<<{i|}znNdTb z7>G1L=*%M2vm+%!_gsR9z=~LsM`ax7+!GzrdC8qyNasUp3FSOOdrqOAA1opi3n2{_ z$|XUH+Jm$h63&%;Db$5ghk)M+o-R=@L&ge%Cr(rgkh>gMQRu891k0kXB$TTmEiXhX z3!Mdp>FWr=s)ARsS8E~-6Uto3*A`aJNLyW~)({*(u)UU~a=7r1wvcQ>#>PVD4??t= zkZ&lI-|9|Qn@VbzLRFDg2=#hkOCi`?7_)`o=TE7lI}0T~p1K6v3!a%??Sp!_P~qe0;PR<) z^pvB8>{!8zuIghXwNE1rA5VQM(s8B>RCd0rcjI(^4E1OKaU~pc%jDS z)57Ib-;IRdry7TPE_hgoA4Pgds2&i`o=n=)q&-L46ruH!P(DH0GvIOX7A-f$3=Z`1N*D=yeLN!1yp?y5{oTRmc0>4k42<>-~=0(Eq zQ!NZW6q1FI77$u^fb9Hn1k5s!S}aQ1Vql0cq(`U*p)L-V6!O7H%YfB|Xce%MkgqBP zYY62qp|z$EEhn^>7ixS#8LlBON%iJ3b)kQuUYoSx!sfphqIHC7UD9wD6&oTgta~+S z3o_;serY4sWNa-I+X(r#pdjr;mo-T6+kdyj0&s z+73czUm@Qeb$_J&z(~{z>@AcB3(?tvW3AN(kZ};$4!j`z;QrR4`Y-b?!Bf`rLowg@ z=%OwaiLaAdJRmihOHyloA+3ZB&lWoFdSFf`OX>v4Fku*mYlsDv9WInK+d1`1hsq;f zQiU_#2w$4=blC0`-jUqhC^td~jzZmAXq_b_7wHIxLGliHUMw7cth98Za<9EdQsbhz zlEPOAo?+@3oV|BS&8}6ECcMIzQipsh1a?{AlnA~81GuzXRnD=B*$(p1M5$fSWv)kd8q#Yx8Zf!IC$Q^P=C!8k9(SAMUbza}`A^OkL)rGLlJ=j7B zFdHYID0H7d8m5qUFleH_{27%-y`r(sX(gMXg(Z+^CSq!DyUQIEC8R#>P@j4&Xi2?R zZKeM**k17VN;UOM*BGhZ+Mwk7^>n*7U)eamtzrow+(NK7G?`117x;~thQy2cn;n?; z(D~9M!B}vK5ML}b6WXsQ?IOXuzB#1i2%d+RN2EM}7Tx-ccPPM!iEUQQp&}XWR#%4v5WF@o(Ae@#>m< zX{ph=LP#^~$vg>-Ych|nAUr|v)9Rsa_asVJ(h;9kn`h+t{Ke&*#cvq@Tlfg)yF${S zX_Df(RX8cQQXB@sI=YMk^E|yq7{@!5J*>jT(o(Z!gtotFio^?YX5N<`+LVGS*K=&< zT%A+-Cn?-*dwfSpIalBbj>)b%EaBbg>?EYy3lU$u9nKLSdwC4FP)9^OkJdp#aRRPzN%4=U zw<%*VuXmK_UL^yCY+fN>LWmYcT|g)nL!!EgsA;n01<(8r)+UWQ$JLEP_5>rO7S!1# z6|#L$B~LZEQ;2W_Mb`_19whB))aQj9SIH1p+&DDsqv(&T8_lC9?S+a-EXl5jU{y(l z>nq-uU=yKPlfD(|9zqk+>zk}B-o04q0pRTyYv_C-kvHtUQh2w}G#UNdiQX-S^-?4?@)O=YnOxzwyt zDcD5JN1+}ec-~xcn55(wAwN~H!58sO#}fnx&8W_i6j6tT*kQpP!oc^1;&vgOO=u#- zhLW0bwRcIwj0zSKl0}4~N5~fkST{`=2C9d&&<*QsO2&plf$1{t50X67F2JJ5u_%K5 z0LDZI6T$;f{?2=L)e#+hePymw#ne}o4SK%wU>9x}-*oPeeRoN1KK95T`#xmsFL(l+ zN0Mgj|IUw7M%w?epGILSQ96#zzpCs0QZQ|<{NxlV<>z`1xuYU>Rl?XLj-EH!#l$Ui~)Snve1>{Cev z6+rxhP<~5BUoGH9F6`$1%_QU)9m%Yy)C?ZOC})vc#DX_zD(6A%5j;wfFNicqXzUW# z5i63`Us0?fHK(G8HxeAGx!i`d5_Kz~+F2+^3egS#(2x2fPusbIPfbBHXh%o>@nbDqY?DnT!uWf5kI{-l2R(A&G?FR6%o* z;d*F(r1>a9!_tePnbFR8N>FPxa)6IW2mmGUX>KRB6!kDQ)zuFwZvl+{{UQHxvJ{c z%iv|#TXpv99) z%bpj!9=k&&=n2J5B{)ELx8<6UE``IH1oKI%1F)zN&|6FgAz`b;!vqJ}OZqE8jMYI^%_yIlW3yv<6lV(M%|iBpkp5K&|A~5wQ1V7NE@Fvwn9i!hq7{X71EgNT zOKgf5H4%#Cgn&+Kx~||ZXi0x7r)qZ4>ySD-ynu4l&)&Z*#?s1M1Jm>JK)o&ak}5Z+ z$_?mrc{O=Sr5c|n6x5yh)si|>Bvn^Q3aCXLM&6N7J*PLM?sPcW=z8Tg({!meJz|_a z%MsL_E$YdDdeWUU*OS2-o0voaAClwdO*?w)K2lhs?`U)E>dHX!7|a<%5M} z5NV4G0XCQWdBISm#mHDzNS6^3s@H_-HCRC?RzqD?@Yrm$rX=sQmSsq7GS(F$>fK~> zA+Lm4w-%b2vQ)n52qD@Tj1=;{kf?kEzchQ3#+&21*fIQEA(ux`2*wHqHFt7awiIoPm|n?bc^7?kFL?H8>EK!2;~E0Fi2QY z%g2uki5vgtC3zBR>pe-?hk~nmPc!ZPLTX4YpZ--y7&*&-1l0HObV;5_+M?2rx&<$A zxqhG|SNdflDRHI$f(jQ4OYPvOs0Wj=q~KuD0oA{EA@u-Mv?4`l2=XZ!I|!c88Sf>@UGwk|Nj*mj1&v5~tdJce zG($6EBspwHMC;;ZEe_z}%Z1`Hp}bjeAlL}wIJ-tzinhn$ z5A6s@`i40?!r`ft2?GzwJ3>5F$ln#b6fwbwj%be}+N1C@q53=OCqnQY5`zL$Xrmkm zHW{FAtB!?aHX)>g8qO``vm(tS1oI2=B7)uY-WxEZE%WB3_D4j^NKLQ~n=nHe(z-&v zmJqdtU<)C`6i+%r3*U9VuizCe2}XGnyyAXIDJ@-as1Uhn`$Cd~a>q1n4g~Afir&!F z-jC4D*m^Un+)yFHWVh?U3kH+zrKY2W@K_J)MuzW8f+dZt%=)6d*pSCp3WB2D79#S+QWsYEtIr4UY?k5DJkAnXzwNzcM8Gh zLbK?F#^HMRiI3L5I((wkXfii~#>R7Y5}JwPJ0ba(P|mDx#`a`@DOplW*&M7hN#5eZ zMqr6K=z1u{{_~uCH(5>3|74{Vx6dEM*!3huCx9!3^g6*4 zdlSqf4~u#2O^Y`%u|0$ntN2Mse-%P3BQJn0mXwt8HWe!((SNIWk%~2h{!U!^M{;ix z;@1SPaf)WwEs1j>?M1@;@QxRrD>--$)B*anyd}vSQ%8ZMl3tM)uqQl<02ga|07ba> z4k6b&rcb?@U!yq=#_PU>R7;IpX-BES)|_f6S9O};4nj$9w#{?%l20$}zn(LDoqq#t z+wSdjgy*H*^1P&AQJpWpTE_;9N%g;9j#s&CX2IU`bS+8w+J*`@Ap`!RBRmJF>kJ*% zy$Tn}>3g|<;RBKez9@|23Z^f{VH*hvCc7sR*mc!~>FkNyF;;1|Am}2E!yLoF7=-G{ zpu_2h7KaG!jRAfdM_p@gCe=%OJY8(?Q&Q`bgbpuPn{Gi9TW)8azQsFK<13ityT)6R z{|I@;6!sHB5x%O;=#~bYu@IEk6kBa0= z363@sVrYh(wBY6PNelXo5f-9qcez_XeuYlnv*!L_4kmkq_KGx6Ihs{X25q)Rr&-Gh8fy4Zhhfu^HiQgRO z`rYvF_KeW~7Vj@)2O}MUbh!{*k8}gTYwz8G13r@M4pe&J0XCsmSvA{o&_#BY)_B=3 z`mvPEL+{uFhb(2@}hjj76JA{l5R)#qp{Dw zCiLVHTor9VNDY!LiZlo;18}6od{JFH3QaFzBpC+_UU2SP_v9q02~Rpi3g#AkU(yju zE4eulH^=eZf&t1c&q3v0Mck{9+vNC@Ik&0tR&bkAPHNM+q76uC1ESkhWX#`@XajO? zUBvg6bJv#W?NbQ zg%(dHq)H1n28RM3O335s_{sD=6i?!f{5-gf9v}z)yka(dL!!e+mIl!R@7=LbSKkl&26JB;=l| zGFnpRc9l=VRYCVRx*&UTy1)8=&m*3ni=^p@ACpva*W!EiPe=Z?T(vAD)zzG9YM-i$ z+NYOVB^n{*d_4gVD&;|?JgBtqWAb$J4$rOsV{&v}e@y@V+<1M4aHTQV(r;B2Ji#G; zf_-09dK{0Z@3X4^rzgm_74aC${)fj07El>^8k5&EWz%@Hv*>rLzV9vnUTVpw7EwW^ zd}?LiqxCF?@^D>Mc$^UN9eHSG5+9S-VWe|NN_duSo@L6j^q9IAU^fr6?~CeCeKpV0 zkCA?SFaLCx-&4P$bLt{PzlnbTc=dYuh`V`dV!B^$T*q)&FE6?;!vm!m&$5S(U9-;* zPq1^I5Dn1Hac~@ua5RIboT|KDs2A4hLtIEP|6tQR`P-r*tItqwdWkYxH%iLy6tee` zJoqw9MY2pt))ksFUrZXtY!@9=M_};gBfhGX&Z8q=*W9M8k zee<$<$1(hwj)Wr=ciH;)N5VgS@9rGCw~lZ;OTS2C?6=?!Mf2%0a{C_eIK;RZ0*p5M z864X`-5pK0A;y9ajuNub!njj}{7hj{90Bn}p}0}7qc(h5Qu3h? zeFm8F>P~w2qom)&IiUycU?=G!lFAiO2O;6f@)*$Iwxoz|b4s^4+E&PS6})7zaL4!* za=D!uUEgN@-%XN|8-?l~p?p{fo)S_#sU9fJKa&)Ff=VydTbL}$)HVB5yrxagHDjYuk(3!gNMjGm~T@DbM|gy0JBvf$YX zP1MO(rF!OLW)JvWIxJp?V{@buj1%0q52@km^*KEaZex4XbogU$s*Gz;{SQ(PMbtwP z_bR6zN@+nOySAY40G}CXCovv<53vzN0`OO&frJVjcrFlE9{07Qhi8@i3nS1KVDEV!YJlmmJ41{y^H)G7# z>MR8|L-#agG$YF&QREY$`dILqnr1wis;~Z0X&z4wsX^L_Zb>tqyaYFAQK1=1UI=Mb z($)~XY$T+g(u^HbgCrw_f*aeh+mN=b89=^XQZsDK9q&+Ol=M1kEEGq&^?34c#*TTF zJ(oS2TMs3khbO~>YEh|ra(HJQNddJ*=24lgP3)hlDl{X;__^GM)_Aw_e+vQc#+J+=@z}AW-#YMZge7QaL%y)?q;08ACMn?^ zs(6QXD#)mXVk4xTg#;rj#Qbf)h)SF6{z5ra|3Zd?DdSbPxm93a^% zF-;jI7IIz*DfOBs>DZR4_t5WpnO1g~q@4e#q+%Sw5&qs{*IdWzr2Y`yr|atLH+qhP zzuyY8!ovt{PMYx@IR>ojmx{Wi{si2u41XHqY4>B^`|^3ERg9{3JVuJI*^ehaTWOwz z>L{<*bKAWl*HK;{-Ac!{#|llfU*Ebrq;^p!Rx=6SV<}!-QnPmm-Eha`^)0Cx;P!n9 z`>e?DVEu+yA$s?^_+R{_4ImqQ*cBmGW5{#! z;?Mptj@h;Pp?FW7G(3j4vh`?|dh(lom$ohZpOVO)DZ zfN7A87J9Dc#=b9{&-dog@;lMQB!2~bDcv9HGV=SC>)DV6-ipKcjqkzCAf!@#(3d+| zlDnW@PUsM04v82&qH@iII%=Bue4)c)CC`0x_|ozF=+}lGC$!HO9B!bQ)&8y2Y-fI` zBQ*1j#z;!12<2X63>G{SVYL5`C#3pib(>dTsUM2o;{RAmlB1>6%OPP$0e=!& zUm<-9ei5RUe!Rj=@k)l)wMf_{-ej$!4XrRgl38_nZ+6z%P?BdZN5|o-Ql|=d z2{XQmmOX9w6Kyk0rvXp7lRMdPSV-r~cN5(8bt~>2*#g?A_*kJhNJtnJENF_NQ*>-h zE9CLFe5%y+R;l65f}KQuDD@*!dug`)m1TTo&AQJIBqeljvcC#BV~g%|CAUa&3z28~ z7s73YWOpGxUdVX)@Ht5_-}xlpXTEb!G7b_+300&G zxnwy>`8qhn-2mW&;ty`M=6-&5gssQZ^om?3=1=Mx;M z)gg7WUzL;5#uu521SRDd8mvA*#ca$l7E_u}JG?uUt&T%^k z0TrkNcXe|obKY3b%8qC{($C4=PKYlR>^>giC(XMX^UZh_yYFNdU3ibXG-jw@i@s*U z$2wy}j_n0*fSl2dYUksXNUql=BaOk|ncpn92KEVT*SQt);|VEJQ^dQaWmj=a`1d_U z)kTJLDnDAg9mb$G*No&3(Ya%&OKgbvFvCC8Lpj3^PD?(b8l_+B->|lqa=okT$4ex; zCtR+VGrN**ZqCvw5>jNQzB4x$$(QW=;!`z07v8z%}(2WJ)|6?o}XYv_j60|{} ze%G5*G)=kR;=Tqvq5=0NFU{iP%XLJug^rCd!90TSn|*^`RpE(P|8^TXM6@?h|A7}X znjm-^tEBHccen;O;Q7Kj^N=>>cv*A*t8UM^-0AlSfrmLzeM|f(UPet$(og2R)UE%2 z52)_z0d;QV*e`YLER!TT{;n5RN9*ZYybwAcfkdaUS(wS4oIXPTd2l*#PYIhf{vWza zoj18d-%-xprJ?$v|EbU9X#2%y%56GML-iZYMhfmdao0SbrdU`~&PVK5%AZ;n53fxF z{wP(NXXJ(3N$TL9@YW>x0aBZ4?kGtPvg{ZTEyg-LIoDC^IwvZ(#hna}6*|WWVXrXg zVt)55NjXhc=TxByL`RdATnH`^%8P~0c|vf$(1k^@(e*+~7wS3cQwLwDs82he=%nfG zlH7|PPfO=03IR21`%$3@A@_)+NBK0Gsk<*ra>EzAA}M|s6+<(=LFa4RN%UvZsD>Tz zApQVJf6YE!Aq`~x4^Pd5Hy>_cw0XIFMkCzXM~JEP)58RB=V;H)5I!(RE9*>>l-wlb zcL?ER;Y*t6FJBab=Y;50q5YcB!3dn`Lm_-a@YZVeKO{A-u?nBa&^C>~Hz*2d_XkZuwU6g5q_+jnSnw`I?JuNu zrU`9#;`ksu_cxnCw=?{n!aoQBhJ&Lvd9s2RAXdwA$Cnn;^@M61M;s`$&PBRkaGWA{ zDRR0z^}Ry-At8ST^(LWu8i~G!r_6<~N$RnWf_ZcG*FyCl!NZSUuht)b$V=5)KPfk! zMK41(D{sX7LfHSAt}oSf-N+Rs#Ty6?QWInDH*3yTpa|w~I7(>kBY3})`dCRpFQ5lm zj~BAjh1h+K6Ht#6+$(DQ!1O;n$*x2HC>STy#|sVy zf`{NUaZqDi%CWQiqc2RLHTuYU-TeLm`=0=+H~;EFidh*jYr9r$JPKB(L8Z zxFk}KkS{~-DnhoBP^~IN!%#8g8W-0RNNWk@+F-bl{T{3%c!W1z7s;)`7LrPui7RO) zYPvF8Y$LR3Fq)NDBP6Z2i{S7)USQSUU249A(86Mj4;CDhCplYEc%aZZNbn+y>3fo^ zpJ?KN7Q5)d2UM@qM+lC+(>Yv{hds07$vqlScY3a0NVOUF3Pa8mJkAtstdn}wyqR-% zgfiOHojH}IL)tsKr-Oak^AzY)n86dCJ#!$iL3*OjQd}mqXbfG8##1GEySnLApsqWM z^OP1~ns%r~gU5vO8mY-kl0vFd2bIa*kQ7r{mh`OxoKpdnWkRzUJO!vH9Z@r)vdkta z%?_)Idb0e1!qk(&k6?hV*#o&jEXfN}GN$S^d*v-4DHGmwlcg0^(1gRa5Hfm zxtNWehlKiWA;f^JpAnkzw`Y+a7aXTDXYimuI%W14xvztF1jp_u-jbAlEOdV)4E&so zPlR}ykbWvS=ymc1Y2OLncrE-=Qu(V8(61LQ2mj7=}7X2r=Wmmqxu7QYHky z2h54FMcb@=smR@i3`RY|KO&6)?pnHA?{;u!(smUh`*?Oj-A~9y3dP|?ESMAk0nP;%fvdm-aG?<6b@ATw!PTVQ z0B!~NJi^-r$71l>Lx*8#-KDhj4vO4Ik%t7w)Q%^U_9S>3JR>-=Lhvl=^WbIhoZtWo z5nYeq4e$!U3~&_g^gT)W`=ntNgl{6fBg9N*3_nEe@1IXY{THyM@J~q&g3xSo|1%js z3N@C3ca>~Smt>ov>QWWdAJ@R)9_yKv77PTl3t=KOfei5WIC4QSFS&CH@j|4fLOn=u zkjG*O8NU;P6-dK^FBd>shqMI+M-b?bD$t?VAFM5;8Paee+e~nbfUH8=R0vCQ#S`1=gC%)4iW<|!-M;BK_M7fMMof4tD!sr2OQt>LHT)rwF!jYqkz0?NoBHczGeBq@F zk@f+X0eY2={})^>DY=i6Udj>IN`3JWidSSCDoIDpplZFV((+M?R6-xfS(xaF5WsTkz~p2LWt9C^fl~D|kRs zO&`{g(mNPq^{3!r(yo^D-4sclpi*O{)lZ>fsyQZL`&mi(W2hKyo_l1+?^{@IA^qRb zebehW_A{Y{`>6>Bcr9tKaP0Ho4Wa!mcpG(^@Wz`+Sba4;=K6i4_k{LaNbi7;0G8lZ zEaa#^K@Ii4wIt}ikoGZYc@>L27jE9u9-A{{NM^-rX) zz#|m?4(VUu2Y`7Qo=$ijD6B2f3dsd{Gh1MKMw{q;S6lRpC zW-PVFDy`=f`eO&yb4zWv$e0IUuGT$5YhI)U!F*r|uqYTLv<4$Bj)Ym;A3LyKOlpOJ z>$Sd)9a#TPYOxIEuy=nme6b?x@?ZskPoY{#XkikED+_Jx;&c_EUKL;*hm89ESM0zT zTiIa)>-8l$6nveLRtR~Hw1MFHto6o{vUN$@1Zg9r^@Iu&JH)znc=#L>JM4hXg&I5i z*sXk@1QFuThULVIUa4Dfm+zzUBrz^gt3yxv9X$9oB_-GzD|A;1)O@c8!L zr0oi@(F08J3ZpzY5F8}r2MgIDLeD6{5d%9%NopS_B)#Am)I$YtOkE$1bT~LtSman? z)Cod3T9`COXq_n7jBjJc2j>VOX8bm%kbx~3!Mvu z@Dd@vh_nmAwWML%x2_iAOG%put^yeOO?1GUCABf~Ta!q;3ET=!BJFx%((OWc8)-Ly zJHVZ!-39Iu+7AfTgMy<2I*@&GH|i82nJjE^zYsnNo&om?4?QYu@svyJ<`*GA4 zh3Yw^81D8lG?8e$!kLEUBT0n>UWUd6Y5vMTi|1%=OggGaPEgf zd#d1=fW;?BZ-Z$<=MAKw3eh`Z6REfv?0Rws|xjsAQQsjNK6l@*A-g1P;G!p&nw&*X%pemO_ADQ zb0ORaX?;NF%;5kt+V}P!P)nh+6;dTsI4O&*g=`xk+zxCjq$7~F7fL#86Z+90@QSOU8OaHU{ZLVbW;fmt9cDgA>3wp>wK`oF)XP zkangJ9*1-`I0Kv`be)BC9yk|V4Cq1DR|(++qzeU)+k2S2zMQnnz?EcNErd4+(L~ZF z3CXocHw)FRLU+S5qS2tAJp^;1G?iV!_3gwKN)gyc_1PYCsMNG}WNSbBvkJS!TUn^w%~mW>USj7e+KV@sY39f5Pl?d{widj3r*<1 zFC?`-CgW4VQUB^`NS}efgHOOeh2q~r_?58ZcclFSz6U>p8M<_1e?AD-0 zZnM`9w&z2_GK}USV@|NB;N^sl`qy4aYI`tPl8iw}so>Cmj`~+GCbhGa;C&UUg~_Gg z9j+jFzs_WDYrVv$X!G5g2sAX(uNCvYm>2w5N|9be-ONtSN*N-X}GD>swAxvfd{EY3LdF()W7;P(vAYBg7Jc*{&~@9h2x_>4om=N2@d_|I8W2Zk~Rh$ z5AGN8dyyF1@r=QmVV&w+)Q7>NLiCW(c|e$stE7IKwC99;3hGOOH+tv~{Z~Ck#@k>K z%#SCLo(FdblO7c8O_{zVxwus7HwAC;ZNG{`hy5lJ;2ac*!AxL)UjE}kq&Yzgq(VDE z>hr(U3!*M8Bp(7iG4%pqZmmqFm7S?^4v?0yCCfW?iBLb^+T%JIpMxtn>>jD!nKYOx$@{H%=)YA<>t9IdtEF_ryv?OqPXiS$y1_ufmUK2$Qfo26;{m}MlEw@pcN1{AF8u1vBzawy*Uq)hC*wZB zmWLhKo|fEF8b>YFtKGBSk=NCx z7khchqBoYeQ#PRb3aGgPDk$$E(~SR4LFE(o+K2jNsja<8`vCC4W_+;0%0kQs(d?SS zn;r1N`88|vO69yXenF=49%N7I(yD7Dd8I(tBqZ+8uwncQU6LZ|(|{M}q z28-1NlJfI~;1C@V9nQacv@q&qA-Gr>p506VN%34)PTVMaw5Me(eHhY@T{gcuIq@3V2q-z2q~E+pJ0H&2s#C52;!Y>d$P zNGPa9AEC1B1VYU-ilzyk`Q20sBgx>#c5z=kEwp_LXCAK$_pBj%onwm3G@H^qVD8Cj z{nOND;-pR+y}OPr9~a^^R5%?eG}Fqs8_lG%Ojp(7MudM5nhoB$yIGf1Z)fXY^XZ%6 zIR7pW-jnP+3DD9NT-AXf1kEfsq%PlBUQEAmy`&j_!(46{FR*ic?ACwLk9+phM5>Hp zUBQ>(b?=^_*Ntc0LZF9MOm*E@XOY@apPlnSb^hth;{V$~aTP|n#RC!-H ztN!t^l=Ht(lIxq}f5vZ9NUQ7fjU(6p;H*gg2mNb3egHm}=GYfB64fVd*1GWM+$cKhkSndcp>E*bO6R^Eb1vzs{w-D z^j^IjT&RrlG9kK7Nccjd%Y^n-Qo~!p?d0Aq1e1kqiqNL=@YGn(-3nQ5fw~4!@FWe{r(}7vFIBBSmOuymL&N=oLuk z75bwvI*?krGHGiH)eynEXhs`L@(cq<&ZtI6Z684zzQghq!8=X1$4Ro2ExlgS5S(2Z zE-uftva6~5Kx+A=5I!yBxR7!hpfu!7j06Wm%V(3+ACEDOrItL^Nvl$hkFLFyQ0*Z^ zhX`X1Lpm6Y6&!rVy8#TGD7AH`P+TwcFQW1KnPz8PI-Vt+OfQ&8=umpqOiFFmq49F? zGWXEJ#dQ-MV$q$XIOE3BMTzKjl(btp{RM|p?0G?wdkIZ^Z`XB0^?x+x`2^*Lp9{BA z|3#Y!Ew>e;Bz3kIG8^02*`5s5I!01?6d7j-o-gV-PqR^3+BlBRp~zkoc@x|&^slL@ zT2k{+sHjitg@kkwpYyu$D7&f){%RGSVDDsLV&)!*2!Wl?sJPfUiLLl+i-o^1k&8txQ6Si^&Cpt!*(7a zD#-9wkj-%QIH@*(npIXylDmY^RML}l8Oe=;hvF3n6+B%rUQs6vRsa|T z5$||LzsD<^Lf$n;qjSSIor@gmD;Ub};zAET{(nE2aSsOe@EiW|WhI5b6JlQm-mL(4 zmbZKedUk9WB1F?vIKnv);}?kO)O~g7h+tK4$m0l^|Kc&i*-~J659+$4=t?2 zfMm3$UUE`Q& zk$8k`yQN(6hf*aS8tuG&8H@LqPt2Vc~`Eft8 zUHsW!t`peO^3xjTe}?bei%POfxi2pPs@$AP!IKp0U38Xs17$S(uhLYet1CBL6JUr0 zhw?+XcANdwd7wR$$>5_4_}((Ux03IzJdQJSJ41R(&9p{d$0^;Y^cM=c3I#VOT$B@V z;e%}hM8@UiG zvUQ2nWM+Pi|0u)@>nTuP9T(lnVU!CoG~K7mPElIOVI7RcW(DJUlI$=D-d8!#({I)p za#c-WXuha)58?lYnBdo30q{n6Crqzd@nl*zm2MzoekkOJA}aWpR?_n~dbu0P16fMuEG zLQL-@<6F&lK>edoZVPr1hHNQhbVh6HKW~ZWg(eOy8jew#_pI{>^aZpy%{J$kBV8s$ zw+iVbA-qW_ZWFQxP_a+D?iI%0i29rmKQH8u32w!!mnC_paXU?Vr%A0o6^f_H_!-O` z=&(d67erb>*k}E^O0Z{o_9A!3@aSU?ZWV77c2_J;?sqmEo>r>?EXnk-Ik- zDHQt&(NU;J3-K5*8kL%>cY@%ljt(;(-bBW2LVkykO%dWJz>7l2z)hPvJD5SwH~dCY z#^{JwVtU44YG=(t%FPxA%TSJ&x>``^EG>Anz#;tY(+}2HTJxQEBt=^b`6;A5B$W2z z;2-bmt3V6<-tj!VYoALRyuGAwAJ8kr_ajm3g^vo^(?al^5I;`Z^Fs2zFc2%Z31yT@ z%CK$QSgJi3PrX|UUKtkB@Ws0c-n$|ETvBi#xI{nRIQRT^9;RcP>fvxn74J*88;AbJ zb(#*Vsa1OT=xl@hgcR^iH!T?7TjdYi-!wIY!+LqU&ZgGeoiyHY59ntfNU~QgqfyHE z$%(^sX&E=W<9dkO)P0A}+)afN(&pK)c6;eKN>!H*Ybq`7ZsESc2Pz!9{^KHDg?CXq z+QMt<``tO!j$m&g#}U;mbUG2~Ordjx;Av&~63^+%m=IP9-N>mMBPPa&Zr>*@0q|7GV_!BumP5&pzS9_I!(iSr!FfZNj(e)*x6{Qqln>Y1<=RBlJu~WpJ|i0^o#c*5l9s zc_1j~E%pkTd=~vjzghHx&FTd%)h3cUSg*fX)ed617X>KZ;9W;2{jot1Czo*np_d%=i zRW3b4n7)f(52W{{2=t8WuR-ms>%avQ~K=4g3d z`0c>U=@g3C@_0g0O5>H$sAo1rXvUIj`5~MulklsA)5x_qg?BRMoeXH{+!>7|G)85! zUCvV~;t6^VVrNfk{)p1blZ5BTE`vn76=9l&n+uK4cMsCApEFG7 z81pTl(yERnZ7euJNX`~Kg(ABQ^-41CB<)7 zoqH+roDjb%jK_-;PZc}_5q&SIwUZjZ_lp>AJ8LkSdo!klI+?3Wd{}B zWh<$U2^bzODLzW@cxZ4O8T9BKPr>oDR=ihgfQ9`Rx~Yjn@QT#v0I6=2BHE+qIHC2bGMXW}zE-zcc>6LLS98Q`NY_d#UDI5~ss5sO zXz10Fx}Q=;@vLAkY(Z-ky(~DUqBjo@rb&%&QelTjX#y+$n<9MYllabS{-blqo za33Mt59vUp0{~-z!6+d=4)g-5jPhuqbApgjWwggg3QrT_(*@7vw8y4(mQ+_LvtB^% zCFEXHXPQ;_hH#ZQ7~1bfQ@DyWhsI(><> zSB3CY@VZdZVrSG`@w?!C@EK`;7xHg}@E@dohx9KY_yOrxr0)d}Y-Tg*U$wQ~NhQT| z3!!~;RC8$$X&3|a$hYQ&#!Rw>!qlix;_hd3o z74lsKFSU+2 z!QrbW&Y%y>Vc=rw`xd>Eu!|3IMj@CPX&{(I@N}%+*(G)6CCyC&-Qf<7sAMV9h6rAw zlnq6q!N`^qs#Sz|CDN7^($xg7U5ZyFEeC50^R7+?ElJnLLbjpctxdykxwK8CmZcDH zE_4+_MPpNLL)x}N%gqiAOGIC&f2vQhk!p|}W6_(`eOF5I8tCLmBrL}AbsaJ2bxFaJ zyxDYlsy9&I6g(NFqLy#woX`VuXwmw26tNZgXQX!k)p|%}ekE39w5^a+nb+?L!3e>- zes}?nt7|*moBH`x{j14Ox|V_q8beLpv%RDci_yEtwNB&&cS!9l%7;kRXAhA3IQ3sp zzXX@7T#SFsgT-Dl<}F~#rFCpGGiiGjN%s*v2$J=3X4=7K@e>`u46C^bJWtCMoQ-;b z(BaZvTT?&O&iFMNVfS&y?kqL9jz{)4{g4Al+jV6xSR2#SjDpLxjT3csu7wIEb~S=+mU4YL{h1JtrYBoAL4JOb zTG*E2W_Pf7d^fy8|3LbeKVqw-*ecmr!CTaL1z9|YR4;@7O@!j5l;)X4jtSkuDkyPI zC71!leyEjTf1Q0~F&3>22j60MM*W6$(O(E?!8~1i3~x!3!2@+4dl-_v>=ViLv0aDj zax-2%_dc`7q&C8&XVqDP6@?fBtqB!` z88s&#SQZP7!9vd~+fGLmrwTQ_ovUwhimGFC>WqrI5**yP~q}C@w zNxS7mz%86fo`K^L&u}xT>3KpkE&0D(FVruduIMgko1SLtbRp-FH8a_`@JTZZ$xK2! z6ta1R&N70(?&Z0O_T`S?#%8*d88Uy<7f4M<=r94H-WmDZ57q?iQ*S zg_u_$dk=gFz81Q^LV8+gQ%^cPZTzF8V!F@_!_1;LqIWJKm=t9{y&WOjS_ti-bWhMmqVOHf02~)5w~a8E0wJ$L_>veX~5^4)1;QiqK*cq3En8f)to=} zA?K1tFDsma^n~Euxx5Ki+uzZZ|EU@X81C3IChO$m^>zf1&$D!ICqo_G*Q7Sq5@~iSIt-l8 z>gzNZ!Zxrk#w}aEi`iJ@p_x~ThQX7>H66as*T~hy+4YVFE z%_rE<*UV4ajoX8?BJi25y09hxP%lUL(!9CHygnAVitO>-poov~uQmT=Uz$~4pHGl; zZ2#TxVOBFTRsy~`&0*NFmL`zV3#?|GelqG1&|C%|iR1QoGULi_AhBcp-!IBLB zq~BOe5ox^~<|3Aw>m$SOLD=^Ix=8c+jNw$~%~gFO$qsSHTI*Uv_s>JCVa~m`X)sBW zqsVwvA*BAZH^4(%?vjn+ax=PLF)c*J=hyQ&>VZNt6KkR*&;0h*E@QAk;xG7(y}9id zaVPQ9I7*8rs5H@1JRM=W?vVRTH9gXpKBu=J>Y@AP?G57{B}F*)%U!_;A?M6NVT+{zGY|O2 zgZO6_7qSINn;&&CAy|sE-wEX~)P+!2Mp_H31Gw#JhO`-2Pxws~qZ*YPR_;VDuCQRF zkYTR{dkVgFDK%ks4rxqG2(idA{8vpdpc^E`524a(OJZ=n=vt$XH6S_b6CgQo4%Z$5{MMk{5plZPL~UyzPx^h`w4m zQfT*idpyFMpG1-4g={?`JVCHOC%9fxfgP5=CIs~E(zk??)-QWWu-B#d5fzIp;LT}u z>5+vq3r)b6L{fJ*X{q1^WsT2cO{tmRFxouNDJpo^I`}s-TpRg%f_JYAvCXmz_zeuS z^nRgtv=F=|gkKBg34(Vh3kT}u_b{(l9nE@_)QFCDNVmQj+{Kk0(`_l<7izw!lx~Xy zmN?*=1)ITRIad9HC#oSU~&g2EpyG) zE2;Yk!P7lsI+>m$=bAcsRBAKY`~ewQH_bj%uAo-pH`eFZHWlnbcce4>%*(ULJyV$R z0&*`G(yIlB2MF$y6g-Ujj1b|Xj$b7W7j=MlI(|iHHsSh4lKb&)qo&Ww{Y!En+8dg0E_KK@Lb$EqQL<*gv03z_Gd_q2zlHaT_Yjyz zy0QnA=5Ie-M3M)>vn3>XS(@9`F}sj~HQc6gEithj0yk!qC*)moj6BEWP3b$^+?wvE zaEShyE_YgI<VwX!97c^9d;|Ut{-AR9UPk+HK71KAlsulCB|1UqMsr_D*{?#?(qZY! zfR1~*11NRo=t;q^KBM7FmO{hgD#A4P>+P7*iNo{tlU|#V;igY=PDNwrsWcI;oS4g)h>ND=wJ3HJ z9P2*2P?GoIXu@jJdn!3|!kN9Wq1;eK{7@>az6e{z)25qc8Lvy7_?U{MlxyLqiFwf- zOEmbD)4wA%;H!vn)`WwFU?}QxsH=cgg{&nEW!IRH~znCQ6B>L3n7-J0}{p`BYj2&?^X5*stwKmNb*j~;rzNe8SO&WBY0or z3{x^(ONdV=?JmI!@q4)UHUcvq=)kvyBoZ3e8h({jJ;*JCB+%GOK-YiXOMIct8v1f!3GQN z)(xw1l3uVHg1b8e3A!01gF6HX41*6E2re@?!QF#Hkl?O!p8KgUYm;2xxz72q?(40p z?poE=CGT5ZLT5AhjF4LWJwg$5X~Ra*hSd~S9|jZsibQ5YJhxDc5Ijf}CLex}^H+++ z>t@qQB$twCGqTTp&t!7C<&TcibpvB`Nor-5?x~+vCG!K4&tt5;QZ-s=>;Bf^k{#VA zXX!dfmV}8hx$f|+u=E=ICJLS|G5!JtjK5r{&|a%W6ko!_f3K9U-K0_3qqZUlGfilCJfFIt-}fr)q}RT< zXG*F272mwv<0Nk2vHZQOo=2?H^%P4=AL_%-!lsP!3Jbr(YV8R`K%N$l@t1$%;z1#v zRY*5Ma^{c`g&eYIrPybixNVAQ6ug_RKP~taG^>Lx%B1H;r3|{q^YcgaRz3%? zCe6`iLRi}Kq5?9Sn_?`WuZ_@dGHQH$zF_Uz8=l(4O9x0A6)~d!D8?u%e`$@dk7nFn z@WHH}G~XJlOZrC=>ES|5>yy#kL^L<;RgrcQoHU=`?aiIrC+oKMRYHwE?i0GhVJjOe z7B4!8GyT#3o>W3nj`r3ao`dUeO5tRi%jM@!YT=;V>*egC+DC3#wj)iuSGR>Dk_dR& z?YLX-rF2Pw6=QYAYHe7yw6Xl0O-E0`y$l=`{BI#)vH~Th%?tI2zpwK)n8nKq@Py8E z2mMh>8S)P8VW~4|8Hvv736nWfGCJ7UF=JI$Kbnf$_7bAwxtD;5#xmKS|GkBKeaW+u z!tUSnGp;EGhGHm$uS;ruArvQ(NSeNwX0C9l+lBv_AY}I-Sy88jOXn0?)bq$GIDAin&-Gw&UTmNl53s> zm@rn5adC?$Duy)kL*z`YJUyk`!uh7(AkhI;=*r&ZA=-lY$WAZRiO$D4Rv18u_Bv}f z@D&-Gc*Kx4C!U9>XmdQhHJ*msW&yJb#m(I7mL^e3>*0bQKeWYu=jZ5>{9K{iYuq}= z$?31sJ_)HsRN>qQ%0X=lmq(4R=g)Zy`)^MQ-s4eG4CC2!T`+#g#Fj&^CDeu@>Z0qyEwG~QXwRugy{$v+j>Rz_rhtJ`m$cs?bROO7w#52rNRZRA zodR6AB6{&q*3k7*lIFP;(dI<31)&TGxetwaAJNf5dJMoCi%tX7lxQ@d@JCoX;gwy6 zI`IvzJiCWAQsr@K*XB zsED565(X*?)ai)EJbo7G1tDcr(i6+0FA1R4^KmNC)t}f^n z#jN!+4{E@jI4FPDDBt zoPqOnFb-S-t^^kg-f1trALqR|QCy=(0cMapo8nDLVS}4@kuZab4}|y!Bn%>dZ7x1W za?^s+TTISN{xz6E@Z@!G1LtA1Xbu8?L%=A(ORaq3o);0uOA$&f^B8=z3eH`HbWbEY zmUus~FV2U+gF^8D_%}{!WAqdF5zy9o6CI!BTv!3ZL>XGl;(1VE0k#b>G^2Q3U6LL{ zIXw~_3Jw>nPo|7P74&MJqaIDfi5=x_cRa9PFhb>RcfuF3U*SvvYDyTvXh}-Z6C-r4 zXnLWT9ccs-J(wq5q$6?CUwTU`ua)r!fCvT66EUI{kXGjse+6hu@>hU#Bm8KBqHVyI zU@L%~7Z!!lAGtg6nQ&GxCSQ%$n5%eu-#mYcx1KY&3m3a9r#+2m0AiXOpLbkbPlfn9 zSV0j)F4TJ>Jx6@>oH38(jnh3u7&hczUJ(?x3t{MVGGfN+@cMw_RiYoMNQ)-{6(^?7 zc#q50vV_vFrfW+o))D+Yz*7#LW;Y7qJm$+3fj^JlhQa0%TjaW<yi+`H6%wXYKaJxR)NThK+%Lt;v#hi5;TBxl6%jz=_Y zTY1K6!gU^Y^>zap$@OQG!;NFnS8Sx>t%sZS$yu5UfKjMG=dcqj8@7+rg*tUxK^Ms;o zHNcBN26&1&&fU~e^>XMM z9;@K3j^(X-cCWMUgBj%)@%H0>qB@CC+gsG5)xiJ-#MWZ4)$kj}SbhGsA`PFXxMbcP z<#dI$jTp+a{irif`K|J7p3EIa)UV@?=ZS?p@b1gb*o$3F$;sk3x}%Rb7<)+mP+jMv zz^zreVn;{ol9I~glumGOdZn)Ob|xW9sHR?!=d*RPS9P(A-cGJ5dy@yQ=k7y4(Y?h< zz&TEJ@pqvx`g?(#0~8-GCQbMv5x*|@JLlJwCNCcIRwyZz$*(6NuL`#+Xfl4vQ=BjE z(0IV0Xp$SL#}moZFZUy9dkLPG;a1P7@>*o?Bj-xu(&-m^qaT5y969ytC>CGhDbg;_ z0~A8o#7VKRZ3-w(}i>v*3mp^hh zIu5wH&_KDj3ZL@E={67cyRJS&!E~{39~vqhPoA!>NVCHQHvm6O#lNjCw9~m}}ADUzo{E<6hw;LV$X*Y9zp<~@ux?LNfWR;0Z7nXzYN0G}oZ#9h3BDq?n zv*~{=xhM8$sB2@;ONey5BXG6ahJSNCcXIv8dT(nn7bNF6f8N*2oXkaPq@pT#TOK({ z4<~&?6@sYTR0XS?|6Pgr!gNJ4+p3?xYWa27ewbbau8nTt-eb(t%9A%R_d5y-GtW`b zdgrb#*GX#Adb^E*VEZy?!#t7ufb=ddeuY>VX7Sc9{d}47y+bWcY=zmG)6^CFr8$NWAq#|&~jMq@4-kLS05Z2Z*=!*I%j&9a#-j+M{uDh{+C?Me}9qGp? za)n>AHCmUU-W}eF$W^>vg*%wT?AzXVHE`cZo)*svwzAyMxbgMWQ_nO1fEKRJ9ciw# z1iQjTp!d#iwJPaIcO$uc_lp^n@FRpxWY6S}n4;?P>^{_W+Wl&uOB1jA0+-426-)h| zE)FIX>WAlu6mEUE&YFUiCl@K_Ul^#M%?T%>5>@CliN3X=;`0s+v-QiF@i5WzipmYB z8x*&2@mK{6*z)Ri(MP%QaF;c=LTz;Uf4goxsEv_TN#1#=>}0mf%Ws`8aWeIt9Y+=yTNm#8oNflObU9{>I(k1ZIy(7Yx@Cvg*v8(@Zdn@MzE(u zkGJi7gzoUF4Kkr)oG*S`ej;9IYE6q=o0|Yn zLLJ7%A5eCK&F+LdbI2FllI}^|_}ZGSXI!P&rX|LR_S^IYf>6hYf9nA$i z??kQ}rAR$i?+hEy>&a}Y@_MqNS4+MWj|oGTf5D^v!i1;84bvcK(VcZ)j8c4|X(3g% zr~R!w7#DsER0z)rbP9f;SM&ZVVK9>#Y8}K~YOu0K6O{`MDF~hGL?lvB{C7?H-hI?j zO2&Y5{8+9-C-l71ewVA$m0U08b3O8CSMOn;XdBoEHBw3K(RaA-s`@GHyws!{HPvVBF)ycf)e;N zPPBrdIkV}ZiqBbmA$d^j!8=-m>!=@APJ*`XJb2|l@wF&_?mxUjA;w5|m+Er0B+ZD2 zNy7*R7kjhRm^RS^3n|0k{$KZgF$K;oja9_xng9He^EsGCE=|0Eh1_hSV0bdO*Ug3@ z^j={N3XrvRm)M>m=3L8c==8=xKIX|w(ri=T>QT$j%K)*LC|NrU`*V?kD=7EbkowET zZcjbH?pD;F?L12C^5VkqGbPLuUBh57ueNqh66w#*H8_`?<_+3{WRSOeps3eBT>r}ef6I3W`1xXu6d>+Y9 z`xTnG+7q9bH5ax{$Y;-Cj(RUSj5qn&T)3>_kb-!CWLU}KtrphSsrEJ>!giy*aofRZ zcp_rC-Zj*Nw;1Vuj`p^?t#NzL!-RLVgc9y!8ol?soBzk1_c{MTwzr9IELFGvS43qA z3;+jM)%D{$bY<=s?YH1@8Z?S9XiQ$YpNXE)|GKSv*JT5vA;L0rr)iBle8wULwo`I) z&30(q)7HPF2!x|aTm;*y`QwVk{KF)8bm|(Teyre z-X?QGkLdR{)Rs68+!fJmW*#(gUF8w1Ern|3=3#F6dAX1KqXFNx;eTGhPS$+=R*62? zDQ=6M8@)>6kr)r0`+56#W&cx2tQxpXx-k5-j~*d>V5HIV#xMoNF?=cHFa2g(x=g$I z34OhmW|C7yAq;c;Q4*XHHaxA24bYts)tU*%m zru5b>Xo_C~46mg6GD^J)84qw@uFMt#xr|n%zqA zfWlsDnLQcQ@{B&&DOLrl)ZSFUn=8?IKDnky|NhPi*CceD+}%R`YgtyGE_> zhZ|=}zg6M``-rCuUs2pZSxK;x zN(An)t>wBnhVM~+RO+B#-t+FBdQE9*JCsr!zRl7~g+VsI9#W9`pZIOTsX?zaxe(Nu=I`)g!5Du3$Ei-8szs zD=sF$)zpa`?E*rALW}v4q~vw|c`!lg@`voa)yH^*^?saHE z??l@SABruTKyuTvYz-4Ig>%9#jj_=DDuyG zG0BJqg|MKU1*(xer|K2?$!9#toRX2D0((BDb(TH`zlI7 z_yGUkO4en5t4@oJbpF@hIm4V(QgDg;ywF+@U+-cYify-!G{d2F}DzKSmdwVeY!37%7e8eMXL(QF-VsZz`v!-Nb*h%wf(yC3mYCVoRBQ0 z(Ax7)ui`rL#f#-yEF1AG<@On*>P%tqQu5$goE}|Zu3xb**q%tQl+?La==+;c*>72% z1J$5#O8+V;4tcLT+`PJfd(X|Vdp|4rg+gtMM`uZ@pHkAohcsgG)}qlilCm#}XKmsdke~{dJnH z@TGJtVQLd4*7{m>FtPl1`xmUDo-H1}LAs2OAZZj}_d+FoSukJST6oNowm7st=j*!t z-HDJ=&!uz4@nA!+e_hqMElgzQj)$%N(^y*b2rYllX7W&?o3!!d)m`qqdNt3BPi$m* zl*z*w!LoL$+(XzL;g9Ba()>qmR6X_JPDL8}6puV{M|_=LnWtR)MSbCR$fFfBH<3GV z9wGGN#Qd{6Akt^E#nT`Pihzej9z#>@c;>(jlEMs}o&h-YA>(F`ZlRonX^6zP3Jp)N zo_Oe>&FzLn4i#Gn4QUBqEm_~_yqds^w>IKl+^O=tE@6w>AaZMa0r!$LPcMv|8y;dk zg{V#@Bb*yN<<(Zo8KiUvUfe6cnm#H_lXL;zL{YU^GcdWMzgtrMxsb7oV79Q(UYbak z6w;N2WKE&97S6qe>>!~y0URUDaXNly3h_-i??+-v)+g}{XtTDxDr${ z$-QPHh}Pm@J)B*^`#sc~;@ncmPZLI;EhN_p(TzfVGtwPG>n$OfB*Za~KxdfFEUB1R zNEQ8NR-YB6CmFQ=gvZV ze<9u*=UIxmIY`oLG)4`be{+=Jod%jia2^dPNEaQ7G$@QYN4F)%OG;11Z!4iX0_iv* zr%*SnfT~dQI;Y`01MDJH^bq6E5yF}u8g83k-c|G(TK?n``PG*S&H3Om@RkDV%Oy>^ z5a)OyKU?rwLJiGf!vJjeHNoG7@+!wYRwS3kT*XwmU?pOBP1DTMPEE+IkB;(S=} z{yEL-NS71vA`(Mf4eg{`knBxK-Is*?Rs7xtSLk9Nr`*te=I`J~%QfzPVxdS`iTU_5 zq>liVz4-v#sY{Ztkmv^+w3cVTm6Uyh^9!NCrWSJA zwfq|Xk^ zNFf^m*l8e{OZbJJGoPIG{6cpQLKh@-Ucv2}SM*h^6K)nGlt~TAqC$(2n1lw;Th&KP zNUCW1a@G}%}XjYZ8ySk8-LRAP&8z<|JlGTKC4X}<7p?x)L3t?U5 zx&(BDv422fu&~-hC^rBMrk7g?osEQMYoWcBkZcAv6{_`xW@91WMi{@7(B2V0_8Wrz7Z`B*e!G_0fX2gzb(&Iz=eyCK7t9k$(}QGlldFp*<&k~CBabAS< zS1?vcE<`#V`H_H@kcLU9|;8^O&& zdWTTnAT$$&Gj9=E4+`$f#!tZSUZMGiklZii4+*VDh3X!mehge8G>;3>!$S8dAv;b; z?-rV;h3FOhp2Yct(0X3z{8QNG4Z%D5`)HE%Z8@7~!Rz1!q5GjQ@*SKX3&p>M&PPJ) zMIn1nNIw&TzV-orUkU9mh4_6T|3>gkqVh*c_4h&tbz#!il3J7LHMYK!lujb_C!zg? zP)@FZBo^9J2vs7K{X#yKFy9Zlq&u~w&NM>9IJ5WZXiX={`%GkX^f@X?I~N)Zj(ldM znS|sKMG*G$7?88=rEjxH>W&a9^aHQuDd&-tpcvM32+cw`7ZAF0;Y5Y#T7_5;=WoFh zLb<3=tsvMgyI~~K(t?19nfctPqa##x|&z7qXR+Rs<^vtx{-K6UsG(bRGOK zm&UFu)Y$R$8bZTj*TyCk>P*%MZA_zj1EGUbel;wKmAB1Fc{7`$6&4liD zLbf%2+kzd17=5VOQ}CVx+0K$$s0PXYf=@Aw5}$4i)kvh2~hHbt--= zF|1D$e3)W!i{#Tg<@A;=$wW!1wa8l}wQdrs2}0*? z!RN$v@0aA&kKKom9u->83hjG@&XYp(ywH70sGh<3ICw=UUJ$b9g#0C>*97lKki9Ia zenUv#6v}@I*?WSu!_GUB>UV|YOQCpQ@XloAr;<8v3-#yVTOs>EIOZ#%nXFIA_(4+s zli+ikn;#|3_zj_73m!?xKfyT(M7qPv);oQY+LH@I`yzUClCXRAlnQ9370OhIrV%_F zGXFJFzfestc%6DO1AfDWW@e$BUGOKwvW4GB!Mov9b4g0(0HcKVZ-jC_Azna8=N77k zgk~0@yCBliLb?dfS%q>b!85D#6(nu4u+YpevpaE+L-t#frP*VF3LU&`q2U~c1?(ziu#(+JA z=2W3|I?}P=??QUBP~C!aH*grZ3G4@M7dlrW?JKk%LV8f>J|?suKzd4;?-8MSP4JdI z$$JF6D^&j`;A!ENH;}#tKMBc)Li(jnyrk+lp*Tip4g^Pn6NTzf z!F!qICrk3_QqAFn-XwINQ8LCb2Jgee+hdRzqVC>-gi+{SzM6?hw+iF$61oox6*hM3 zZlQibXlAGTyiZc{FwUcqFeoQsP|n7nY=c#qGsM;W3QQwZzZNtVu(;4(7^x2| z1Q^9>mKQpVYBVb#%`N0B3+0OVVgGhlLTb~Xtd7K|x63M|223YR+E9r9AY^SJXXZe& zkWS-)DNgnR?na>OTKu?UA4Vp?rbAxa;EMrcHxqpxnvI^+g<4VQAqX? zssq9PU~h01|H~jkH7HztkdPk$_5z0p-J^u+&o~c7VqhUZMwp-Bgz6MY-Q$JM*>Ywl zODeY#d<2I_7s@}$nIB8i{vxS8rKI>YN!1xbGFtHRI)95P&y;i8bMQM?$a!VeUxoI0 zLUysxxk$(_5su~sc(4J*O$#{XEE#OLVVtlEBM$jkVgB(#askex^yl7z%SVeB=aQBy z2)I^g|69=%*GOvqCR8^f-5_|_A-W3Z)k1Qckl#wc_4rLhx(=M7_?kN;Rd*3^KhgxG z`;h)2bneD^FVdaD1&<3p(ye(yQgta2Tp;vcBKVU*^RNOu6p_5lB~*jX>%s*u3i)$5 zFW1FBiaCEp&gyyarr?^g;j5BPyo~tXCLmT`btO!eza^GeC?I)X(wgrGKIF9iKvHKs zk$xsA|467lNBW9@Z*YDo)ZYponMl8oRQ@2ezQgZRA?eqD)YmGOOQ+y38IP!@7Rp~C zU84XGMYMm`#nn{uOH!ee5jtFGh9ONSbf*_Q6j9HBA43tz0Md+tha#GpBz5KnBMBHG zwC5D+S#ZuQG;<-%C**So-T86Oi*rFC`7O=`gwAY83kzKaC91^)ABUMQDk)!DXci}6 z8JtTXEiYtC3Z12d>6aCn6~S_VR;pPUtRUot;Ngkxs**e?(P>MXt|WlriHatzyQa{r zB-Cpmtsx|<2<19LwKn*@(Ec5M>j~X1XmGA8G#%loKM2X@LU&7{y`fOoLT3Z8iBN4J z)LRSXR)WVeJig(x{Mwt!ud}|8Z!GxS>#cT@)ND_{E<&{<(#}W>W0boJ-5rp26FR$t zJ%nseq1p@Q-h$5xoo^ok_7n00h3ZhGL9nmTIap}_NobBhItai0!2!Z4jDDosShf7*ZaMbfU1tse+Fb%*ROTo=(8Y!gXf~%^5=d z7omNw&^a5N1uhnR>R|VLN%=)W^H-s|5a(E-a}G|1MauEQI#&z%m4XK)>T4ubR|%~@ z3*Eng%Z27zr0az8dci{_)s2!mw+i`X!noUnTaQYL`WXM`6zfuXg?-&9>@7G(o;ys3E4A3{xr_# zg!U6SUlzJA;r9x766fx-Ff{5?^~>4)HGWeIovDP;KXC6flFAkV!-N`zpqdWM z0A>_C{!$K?)X4=8!j!W~%4Wuok(lN;AQj31!DmA!vq;)ugiy^5W*0j13f(z{d>)~h zPiW5}R11MVp|c2na|vrKAb5&`&j4r^#JM>5tGI5F`@ickJVmS(&0-9 z%}B7UFlu?Bvw~192Sy2-7eceL&|Oi;SHf8eoz;YDZLp@0tR>96j!;%YXI;Ucx~nxL zb$^fFdP1|l;9;BY?+BpJuetSA5Ei?xT-Gha27V$xn%EJj51b-H~M+@01LOoijju6Vjgkz7vxeYi{bvig(XfD9-9HG7t=Sf26 zOrbmroD0qu^7DkwI3c-6=w2>Vz&|HFa6@J$U$)!kF3fuloXs#AI*9+NYLUpk) z;tKr!j`Ic~zZU0>LUXIoy-x6bncI(G=oO+q~p={})7LFhgpRCf!> zgTlD`h3qaN|A$aL3?9LGFVbT|`yr$!gzh~;{iu*Xjo-6E_7u)11&=M|k4y3aF`a)( z>b@d$UJ%0A(yNl%FA4dJ;5DIqS?Iih^G)y(&VLEjXMzuNuilc>yd#va3(5O9-xcyN zh4!aH`L@vc9O+x3`aqcDE1~&GNPZAnll3X!J4w~Y;78%+Z-nlLf(M=ANjN_dI*~5+ zuu_spYWE4v6h!c|Ld(hV`xSn%&>1Flr^GoG&S`}#6UI#^v{U@10lyZyQwtu5s;9>} zqtKoSDJNhCq~Ss}Lda$on%RZUY(g?8m`CskRcEB6Y5>e3}g=UnH{YL2gR;U)m zZvmwF@S9u6XA!4N}g>n%&y>a1%D{{&FLb4Rnazef^QVCWN z?ps#q6kr*!yilzqG%E|AuO;LaerqEA4rz7pd!hXWd0$H^JNT_5sdVUOT^P3Sxd z-UIIn<-Y}wea-uZr0Q$I2e5bmthJMz`Hw<5`Q*CpNJ*_711ADRF*>LUqp41FfYSi-Bk%#P4K43 z-OUs*&02D1>k6H%3EhCuuF%v%wJ8!KW7RH#&w|bWB&mAp*cbDY3ucggdQp+Ckfdp;A9~Tk3FMQT|HXP>Tn^yiGW*#@&=)Mnox}q z^3#RR9XKa|+wr?qxNo9RK7jKs!H2YWAIHg%nFr6xdn6Ti3)u?<%#JF=;92>wkX$G9 z?IhguPvM|>6zane{%<2_O{z<}QwSbBt7A#YaGW`4febKi7Dmu!mDKr-kk2MmjG$GF zpyjg*%}gM|IYLP05L%;zaRc~`#E)S#kE&I3N~#tR?plI?WrX&ULU(bbWrchxq=kij zmP1-d2!m{lujR|*oLi_?Kx(UQ6)Q{Hac!Z?a9h5TP%-A#SzYjC-|_3=H=S@fV{Smj|%f`D6}^g^0rVj@K$YvbA6%NT-h4mBqa>Ig>ksOk@gTe48fIq3Hc_1N3up@^2Bcn{R4V7&pM6ijvI>E$n7P? zmnzg#Ej;xgY%e%ce#KJUdzdiLvt4{#n7`N^{sTkUaH(q~{XXkI1>t_PV1{QnWRaq}Db<$3uxc zf~VJ1yKu?wf_G}|>>(-n3mLJcr1pt|4;cz8S@-9DaQ!2n?U&R^nYt9sAI}7PNaI->-OC`0>7pfbH<#I{M zg@WfvA2420m?!glE*>Xm_gt=f4O}5-?H6@}B#%m7c9kTLUp2Q%@+LK&?b^J<9T$QL z3TW;I_X^oPLUc9GcL{w$Qu?HjKa1bPLUoA((ibEpFACk~33!QsH-+}AI4|Q~39@yO zt^)56@V+qjl{l{!iu;lNA^h_*1$d`wPlBn&%dh+ZzdO0^8}9v9D83NNKg(~^? zI(d|7(v2eI;5`QnZ%fxw;-2s#oHYb%c0rAzKfr3#buAM>up{ zA^HQ(&4qYNPz%ilU_-Dq*i4AG5~}TxHWl*qh3>{evyJfn&Pdw}#V%k+p}nn;?j}S# z2+f{2_W*kf#eqV3F!+<;DJ`u7ByDhr@cRBjewZ-+NFhC3h>jAv^Q-En$4iP&5PWK$ zC$coh$hp@^LUW>!oho#X#(9cR)1vw>1Ux}W1%~R5G6v>FH}Uo899-*02i01=y2xXt(xhb12DanT) z=D(HXX(=swt7ZiuURv<^N8=Zkbmnq`Pn11)F#?ts+Jz9WjB`c7LmO>+I*)4j$eW5j zZ_Y~StO0&6_-w^;JxQ(gaW+EsJ0agdXu9~-LeaswA<`ybV@Qjq|JW0j*LU$Z~=L*q9LVP(Gi}Na>yaZe$6qgE~o8lu( zO2!_Vi}AZcXfgH>UyC1#NOQB`L+aw&C3&2|^H7?Jau#=R$=%>FA!gJdz6a;MLiQ-m zr-kBK!JBf&&m%o9G|vc~S8%={6t4>LOG5b^PKF7*gLju3>PsQ|RPeY!^0}n=TbzswjQU#W`~W@%3<-386z2Lyh(8p%y@3EvJn8nSzx3>P zAE)Qp+s!cfW#4n}l#-fE7?@V5Q=ynfh<`0KGa^kdlv4}d3ZR(*zu`h>W+9thsBGYm z#IJ?l0Df}_o*W+kMv~3?Xi-T%i@lgnQiL&IV9eJG3FVSPyf}Uf3hB}~7ZJSkb-g0a zrGyMS-X~=@r6ez=>R`gpxRTJIXyz*meZLnXjP&>mJ!-U$q_oDlijc1>jJ7R~kshrr zG^+t@@ebOKk9R0G#Q6sy#scr|DtO{aXHQ85c6W0+et$yEIr-NLLlA609cJ#_se<^6{zO0(aJb zDbh*n$}iqpu^V<)&~l8W|Y)^nSfcq z^f-HltY?Ab^T;n75X!lP8q3uaKr(F8|C#%dVT^iX*=TM_EiBSxMWKx`+HNZuo(1Av z9>QdgN&%kxkz##D7@i$$&KjGuyRBfuGu;kp8*sf)PD>79bLN`~ot+8TO^7fu^HY)b z!VlBZ$LdVN8jB0vmZFwK-B_w!99NYibeU&zH{gCxyhO$Mcff zwmROH)O}sB!O?mLCl*FMWMN=jl%ENn2k&X|(Km7qSs2-Oa^{nS?oUF~voJi}y|IOX zNzq_ZG&U)QNvc{xJe`nEFGMro%!Tf7{IDjHnS~bCMD>Vbwl&cV5IT#H&ngsH6V1H% z&57SULT5g~hD6>c$%aI}q$C>>{&?z7rkzCzT};Rq7LHs_XxXk9CF$U0g}&v5q7Y)t zht_IBv!>8pOW0){p{np(RVdd$`n}+_c=7s@yy`b^kT4ah4FpeP59Y&=<*<t-*`|FEeuF|V6-MJcLI|b;W594`cW;bf#k2{=+{P8AYNh3+Xr zbq3Pu;2a@8TL|_7RzhQY;Y>-k7xHtF&KEl85jsxjUL*ul;VMbRCBl%Eko--~HpW2f z3c-`t|9+jMU>4jisk&2$Z@~{^pgmD2?iM^VJsmO&?v-CSEBR?Ic~-DR;7^FQ2s}MK zdxZd71TRUdUKQf!gyLmk$QbbF!Wa{vi!o5yEWjAZ-xbQ9G2r>=-OuG`W58$s%=ML= z{`lAYAj#hcZ49i2ZO~v5cmjI$389htl&ViCekBaq0nwCl{*MXZPks$Le-}HT+b`tP z3(1T^JOfU&|IX}SHlf`TngPLze>txtEB^H;NznpA+uFYse{}u^oxfO8_z{;&*Kg%JKA~|ZM}7a;Ez() z+r64MLr1^dN;&#?`vsvhJB_|o@ty+i`PpTn&>`JBL-%e_yZv>knv$}M+TH1C-1Urd zTH~%}lax=-#n!lImsCVJ=K$#0)#5_b)3Yl+`UDjl?Ye_@?U~grwCiehA#Uq0ThmGU zhHpDfPp9spQ)lZ7)~Q=)(lz?Cr%0D*%?(;}gVr2A$e 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

9o~C4^*2p}RE6#f5a35U6RQ<%D_# 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

IbJp}ry%Bu;AMLwdV$T=gmgurJx$0r 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%0D9g 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%0DX@j=QGsZdFK^1j!$dmdgP_gP zRXR|S8t-mHkn4e80mH9voqRqyK~H*M>rH*r##~9GJecr=34HG2V=Y?(oa!h0!mD9 zdQ{>}K72`xrE#D6BqSPgYHZbORZl*ms&XZ&PR_(=3j z3>pr1Hf>`93A6gXT=l zGg8iw-mYEScs}r&5<=e(SvF7+(^WjwWF%1+dNO%=rX$FoB^5`*Z4FB9tod+Tq^=y} zl6OQ!HyWzb`%CU#psBWKX6_Zfx7*u7_hyrh>pn-F&JOxC`Csx?(`hk2V?0vHd(V6B z+Wq6FNu}rX`0*y~Ii7$A6_(V&!^FA|I)AJ0OAQ?&@H-~H^Re&;brAr!Sof$YD^j}y zk4YXcJqAqTho%Ue7dL9(sP1Uf$VS)&Uw=1>6)0AqZ`m9(hi>nuon7)4x!=Qc19yWN zVr`$yzCkp6r;?NxUQ-)-jRg4m`3D03Zkw{j9r?A31sQ|7FA8u1pQY`(4Moyh+Kqt; zku#ZIUYtcVCORI4oV){%xU*vubmh3Iq=g`oT8#D=ko>_do8Ijn8r@U|t+VNMPEUu4 z)+bzzAkMw}mXE2X3{919LAam$$LEXn!GNqXZ@?v;K^!Tk*U9=arp4ZvJEzmZn@e zv#brXy*i_dJ1LvrBXy8&py9_qrot>_3MwqUb&m9IQ~b;#oN&{~xZg8Oq8T^$JkR{Y zb7Gxm58#&Vfi7f$?8>>33bRCVUQR>ERNMoozkD9Pzte}e+}&b3;vxmYw*=WS_zuKP z9~tJa>b&HGk>ugN0z3I>Ec1G$I+=ki=E(D{ZXjM&bpv7i=+kRm#VJGg@#D-FobkDg z0sio=;_T>8J&xfw(hYU~T9m`XiCb8oU%SdpYWN%OGvvkJ=p3RId_gxtC!c=9UmEb- zeyPi;A+v{*7pKDKu?E%W8@bT4-MIMOS(MT*I9qk`fE(!3J|yM+YtF&L?qDoNIQc%( zC;OXV*vnF1CDHLt9;=mWBlXp_^h5q}D?8r&nt66d*?bh+FP`O8MEY7g^J|NLT8VQU z*!}IyPs=d@uIwhhGYRZ*weq;A-~n>bXyOFr)B?(z z|6PRai-aRXF2Zk+QqHN*75RBX_o%e3o8K5?iAiCS*rdXowUu2tG|Vb3yFVzetI2ih zkNk*-HuREIHkV^iawqDabYNSe*W_DT!SG&}r2DvbiR&NVk{`GJ?3*6~9m4x8JybfW zmC;bFXhvkBN1?Qgk37i#{^|GF$~uTUnAC6u9@SHX@Ij#UatA)A*gCYZw>2&3U9x4F4K&OV=|^U^;z2(l*i|c|7i+>-x@g zKM!t=B5Abv-s*bc*Q~EO2V<;9tS;X)h@6A3zuW&S;AdIwA(d&aam2$=)-7py>g1_* zHyU5X2sFzOtCyw2#naH(1-j(-{FT` zvAHG9K*%Ibfx^t7Nm*=8u|&dcp}}W#EAG?JonAOdxk__R!euDJo?lLJoiac=+-lUl z&CGsBF;Ez{)1SWLD%JW#4Pj%zbXhA|u~PY;Fx@FiWVA1FP|_jhwlf8>TZf z!@UgMG2RJy7`slt;UZk%PeCtBt)0C1X3&60a{^g~98d=-d2&CM`t!Ujse{yRz9&KW z(rFhzZY6_KQdb9EauF-}bTF65K}HDNV1RTh9zj?-e@#zre(SUeXW9 zRmF*}KwPrx&R&voLE{=~8SgF$%XpN;CUGxbPLNvmRD5w8O*69$^Ct52&H0wY-6wWS z^@2z0gI6m7zj@{3f3C#ogSPt+g2GbScADHp#n<7saZQp`{%teah%DSO1|lmlZ_KdG!5IZhdM*d2!Ma7 zciW_vNbNeBYr~3CI(+w%JRGA*dX}+EdY(6imTmRJ!syqOlFF&v{pq(n0a2Qige~N2 z4b*D9<*9#Y9}1mX=b&OO>id+)C0}&Vk1T@x1s!At8Ja=Lc5|(bxK7+~_Jm+j6?676iTQXL4Pa&!N z34zxyhojYo)J9}}*{8`{o~Ca(5Ik@5jpFUZy1_xj~L_M1uE2ONjC_4iSk^$ zMrFI@+-6P2?Vb!`oTZ-kZgyTe)UOp9wW{CdY#A7N=xr7=vpELlGial&4NpoV{{=;`mYUA(4rZK>k=*~{t@Hd)l+39A1 z+>Nwxdo1S*Rq)L}RA3ji?hbL6+~OltA|ltfqguG7IRwqouc8L_?AuVTsd-b#3~6b!U>#6i%1Ee9>re>{GryQ@ds+x zCAWFo9_tNyMY7j+>8)(TWgYXei1C9CGV3m`Li^eH5p&BHsT6n1tBgXUsvZ0 zKCRWLp^0Jg&lKdHLkV{r&=)j+L?(X>cp>taqN%FIN#&|B4`f4Yx6Zp4T+Jc(pBV-vYY8PQcE<4+PnPf^`4Yk)k?B z;C7TCo(gq}Ae<%0e+qR4)U{A75|&;TW0fra3b$LJej}(p3H224yujyJ`u~9P5-}~J zvZTsZ_Xd?UL=7*1%14XMqQEPK-EYJ8V7CLl2YgqM?)3;dc} zehR+l2x^x>d5QgIQR!BsxwzdV=sboS3(cLU1^F|Aj1|i8h9JFJG7okMeTA$h82PNg zmM6cfm8~MS^+nviEXdXtL@#T9K~#McJPKfA*l~i`hTT?BOn@x~ooxi(+SKZbs^2b1 z7a1(5TC0y2lv@dMEEt_bpr#Ar(E?8Ze`rDbTRi@Vo0X27Aay~F4%=H_Q2h#S8w$#; zVL5`)*$%gf0?%>65AmQ!wJrJ>m_2}(k#A`W0lgxAUTkqKacy7QQItEPh3_dZiEX_m z@YT?xvGzJ`UV>u7F|xZ6kBs?H6Q@Z4D(| zkbx{o>qke+BdNaxwi$ADh9aBfhep)nJ)oiAr;*9(s%-^>-dDe>=xhLu7nOOIB9lOO*WPzyxP8Qt_`*z1iW(FrMx2^76-aT zntqX8OLPn5%sR;NirZ!hwqr^2s)CePLyyngrk8y&VOMuEcL3UISx5-E-oX_%#L_*V^%}Qx|_YPE%eBP;Y&)`Q%N1 zEf1+o*L}-Zml&R^CetY&z++yrMY@Hd@pL>m+(0zedxnbeLkw9tZOwy&XMCPB<@=G; zsdx}KSv6Kxo|Am0hAu;;bJ^Tp)+T>xOvWDOM(r`r?a%D0WXL0I@;Fy1XTK0c%A3u> z_Yi*LP=T*-a9*U#NWbNNS>7$bNwfZ(PsP$XbQ7kbo0+v zkOsQEcU=00wT$&6->_D0E2?&>d@U&ATv6dVL5GFh;!fB(f-2%`I(@;<7}(BQq7+qM z5!l+(dsURLVU5=)@QCZcqGf5awk%cR$ zzFm~^bR&UVn3oLP%xHw^;Xh^$l{;W>7x==6IeeKOLd&=Bxs69YkMHUAP!uP?(#*W! zG>x@Qf>&xDjSWkz9FyoT$Zcl%(|K>uZ`X>$s* z89?u80zL$igv_q;NSE25ftHB5lIgJTI;dITVFRfBRK9hlBk6&Jjg@l#V}W1Zj{C`@ z{-nScT-WHoTh9=*SV<~rwvFoqV~!WJFnQN$r*-T|nS~{}s<3gf&Q3*-mzF*jRm)jN zq9O{y*_@DOHcU(`*Jiq#(h)0`3}$a2lejh9#mSI&Z(B2}GL*LmV~WFhzvFP;WA$SO zzv~@Q_VDMi&D`392>8i#kbE%1aE%Y;+K2@YBF&#RHQQCGCfZf93sAsl;X%*y z)*J_(iO5Y>VuIuh$GL}I3OJv^HD}jf&IlVAVe>7NfaO7w&nN`FQ%RH@BvDEoShl+o zD^Dva2e$3YzdM1(@8zUn9fX|}tvpB&PA35-PNfx~UyG_C9(=jqub8yvyWqBk+{z6| zz7+V8)0}3JBSlL})IXf0D9oA+{u$$-+2)QaYIQj!m8}3Q4-hWnh8$mS?wtC|obIH6 zY?@NBn`g)Ufrm{wtCB$fas_c)v#+Zp)fIuKI+a1RJ)y<|4(F`-NvM=bJlr~+l*iRJ zzu{gs?yD+-Q+AVb0w)q<>bqp}--7&a3R1iSpc!?jgS2~=aLWNMr8|UEamt3d_&Rx~ z>>Su*<*Ve;+gFMDS`l9^?r;$|kF`TKl8Oss$}Pf4J&s4yH4f#J9nHRu(MJoiL~;)1 z4#K&zS6@oM=JCieTsdP0m18%j=ah$~^pMs3rsBqms>CTb>#!uBo?t^Nci5p(Us^#5 zJREK`$v0u0yg$@5*sLG{U*B>jIv07woD6D^$h0sv(c!Z!@O&$XH)dQ;jdh*waQtI_^>Y zxOE0+!*2fYF8R*R8ihFy%2{)Jc4e=MN9m#t!VTXo?GM~cIZ@Zphr}@3B#0@4lQ%dU zu2YX6j^)yX+m`75MHca4uazHdUWe0H#*OeClEM6BO0srJw0{i=#veN6* z>1kSzZ)(rBEukJcsbLW;1tPItDNi7>oAmVzpKh<)55}hi@Qs;6AK9);>j)Z2(THf1<9@fm_def z6~v8t4D-g?F>>?Q@>d9Z5#%?xp#gNMy10jO8qgxc<9Iv){9I7qUT%J*u1W{XcO&ot zgqtYHb_ezsq{TWkqwGh(!2r5I`~j4WsK}WxpE~xZj&y{b67L=VN@WHA7dC~3^xusbVhT3c@?1_TtYGS68qjBd`gIhE6>LyxjnrQi6~}$h7uvQjReAw4 zP`pv#oov}m#cjhy5#|W(q2|5pI^EmAB%C;V7F6^}1s8&LrAJg8UBL?#7o{ zuU8d(-)nB2@Gf}-T4KhMTI(LD-vajue3r4#)Y3Nv7k^Ta+P$!-l51Wf$RCG&LJ)rs z#l$3kUQo^xG?}90ml5udqB?Z7j2Wqq6?pGpU~U?o6O7PJ!;4TXSf(wYm&+}?5|3Aj zc7>?&by2?i#8R*QfZTG7cJUvA?AKyP{t9)3sO+BvrVFKu^6n%s%3X$X=gSPc|Al%F z_?N&>>}BtZ%C8b+Bg#v@5E(*7_=&y#Vxqj#;5kJ08GJp9UQ(3rMNFq}5h(F${bb+< z8o#cWG0_eU!YzXvdQ)f${AfqUGD7}YfN6LbEyz|DM3xrv$lE|mP}y7%w}jnFVC60!FRHtRAZ#Ou+v2gQAZJz37OKX#aO>iR zi6LziLDBSW&i(J=yA!Z8upJ)X5yb6bOW29P?y$QE;v|93J6p5NcfjrYz^;Py$lpGq z{L)`Q_s+0t_%7CbFHvEC*!=|g0lZgKutstG{o+E1H3f!&-eg#}3$SxCv>wsGY>D2jbQGSy!zf)BAW<2f?qz%9~ zK;4bUTtU2FkQTHag1t#lxeMw6LH27wxDV=HsNV=0kHJ1HNUs?F7V39`?umjlNq+>l zdj#Prs6Pm@=LPw5urB~lz&|wO#7GoZ!~-K>WHHgolMh42NA=_3b8^d?f_z{#Xs#|ctc(Z8 zHuE)rHDNKphR*{Gz+n}Dm5Z>BAX{7DOZG-RJ7#^HAlp=s7lN=kur;tHu#F&YC8&H; zkhfvK4YjQxYzAxr`z@dcdBM1y#R*pyRcqnd@1ldo3{a}A2i2DedtmA~k zfP)3T(%H{L`sRXg6dpgs<8VQCq#zyv9FN;Eg78y8)(6JpHdPR(2*PAR|3pFeWI?v8 zAf6=1rwhU~s8et|PB3zUAUhWJXsFYmP8allCdf~P{iPtg05}sk12|WZp96KFz)wqt zvqbsno^U>H7YVG|=gdFiWxy;v<_NkoVXqWqR|A&_!ll5qz*T~HJ#dAfIUBbd1o^LU zyBxR`_D0|u*xLl%iv`V_VXqT}JAvB;*<7gmq3#f*rz&rPx(l}l1@R$4^BzHX0Qj{a zyBq2es7D3e-#|Sshz|qz0gvJKlpwt&bT4jC!af1@G}H@Fe-vcDgL)C_w@}Xr!b`w& zz#jzJ^Md?k*k_?$f%+@d8-nZ~z@G*2RjAhm;oneyf_f8b9@O6j@ipL|u>Xa6OVE55 z_I*L|p&(nJB9D)uJ`(uynf!0C^MUt(s)A%ekS|2w3h<6R(q$M6!Y+dEC?FH~Nq}r& z*hK}MnxMY~9!m+b9BOevIzqZEZVf?gX{gTvp8*yV_|S7Y4!kn#lE89;d?jF2LGAMb zzle~JhN|Py6ogd-*=oQVxQzk6DDZ=v@ymFuDTr$Ws|)gVp}r*Wl@KHALwyCeF9^KC z*4;pqFGSBa!EFUW|Eo}i!22Szv7+KyxNR)xN7%0c8{)Ppun{m$(BDdsZ3(o2ZGmqH z;sinX7ayPlTLRk%vTp<56jZ(iH6CaI-vPcS@XcD4%|wOGVS9p+Ed+iDG;9a^UD%(K z{P#s=y9mO*P$%OtO%M-+Jq`8@LG1)V_!aEUz%7ExWP#rW^^>6a?PAll?>~lm7`TEU z4*|as_!ju=Nl{)l$zH{hYMQX`f{?U@H608fiJ=Ly)*Gt*i!@%Q;CmT6gP?L{En>MA}ZV< z$XJ5Nj)9#f$nOxe*?t!80&WLx75sj#pmgYu?jFo(0p1@ z8!ZT5glYNro zvh4)1CGcM7+Bb0f9_+V)d4k$RL1i~Vwv!<4E(q5P>U#>xU166%v;37PzXg`NDyn(@r|igyYOKC%!#7KN zpMD=vTHlAbQv_WaoDHTnIXabKMoHM7HtNV_5NoetRO?jN$T z!M0bk73^l^`M@mT0zr1Uz*qAZi<1pTrZ(BA(+E?Akq!TNsw*6TUS{Om$LQlZ0@3?@g z#H_=OqGdZ;&Tw2fWr~${l|T&>t-#hXXcQ#sY3n3$YtJc&Z?EyYrLM%L^~4oP ziXi^*O{m4Fu#|hGS&JanL6)UNHA^^tDDCK>M1JqCV4NPVAGsWHbBeCUssU!eWGg53aZQT&A$w63~Zue)h`uP(HN_YwZ3M^Co(25#MBoD zkVqLlKHcYbf#Mdk1g&|Bksl$CVsEkOKIAQxlvnFBD-&-kNRI(L9g-sVM**&JcR#n1 z-dS?X&J@(0=h>nf3zNy5Ut5h|TVCLMd%CoCzdTW2O25{4TTrKBTa0BMqr5@1qg_Xi9W1vWi{osJ9ph-qGlI#k0%u$DH=^Q3)RYK zRZgUL*J>2OdD&gQ|L517o|m>PD4K-xPdeOO*rq3dq&ybL7g2gOW)7YQbm@)mOpa!% zNjO)8H@ui~cD)`tmPDQWn4J{YTPwU=Z!$mWXibK@ z64oEUV2#2F41e6Cfm3mi3C`6Z<1?W?8RXPAG`R=(CnFwC&)43?OK2qsquT4DvUde( zhYM0P?jy*t2=`7Eq*DgiC)3s!n-V|9V=|qw4y^HMnAjO{Iy4f6@!#miN<`qO5t8p#FVTL^wx5tljvGqPM-33{M`} zs~gDIXMXw&JH80k=jnW_Xm+05(uo#oJnb@bo>4h{U3It+YO;Krn1yRL;GhWi_f~aA zLR&IaN@3D{j8BO25?#wJ=dWUmQOZ^JiKy5V<;ANwT2x?YD;b@`DtN3R$Pn;hJ*W)@ z#TeM}g8Z9;_-$Zc*u4bVv4SuIH9P`iE5pK+c^N%yq0Zqu6rB1Fl^b96)GyZ z&zLkmM;%~rX<;vkEkPA?M-AIUf3hIFB=G(1IktlEvYq*S^CfwB;o3V)GxWbY^Q|89sC3tX zb$-HG@voDV7p{E?ujiN1saO`H_W0ylPS(1xCGxaI%8k$K$GxswMSOLLmbMseMzJt( z`dNw2i3;3%M&Nl_wieXxf-X%tr%SpchP&{%N04^syU^$9HzEry`4dVnVB^VmBgU=( z^G0ubtI*5x9{`66>PHE>$HAh)ruBWg&nfcxTewv7#n!EAWzmADk&C5oAByY|q9l?1vLO zb!DTVvHH;%KhWWcPGS4iDCNFbh9V&5`ZT@lHbJnBVnx`m!mcjJHvu+rWj;D^L_`j6zinKq0{R(j??h;$C{_5Nt=aPM5dFsWWS0+`F1h8`8jlHP&l7ko zbIN|U+BF_8l7~fU_=hqcSpoFczYM#cccR9{2(qpq+Z+mem@PKR97AC;3KRDd zzz}+YtgkK;=b&DwcQKZHJF) z)_0_A^wr`t0{=p6_JANiRBkzvFts|wlJCV%mkMUo#`+54MfoyQT(@06m}h%f{tE^1 z^SD*?rm#PW9wcZTE$A_-wa$b(OEBjVfnOV`VY2l>6F<*ftf089&k9P6UA=WkiU$1A z*@Ac^fu{;`B#7@0v}LTdG=UkI>lg=oi)#HsQQjbxZrfsiN$pJ)A-h#n|2jd1wwoa+ z>V>FC#{G6kIf|;=N?;{0yF?z|iWG(#8KZ&UzqEPLFBbNRmN^=Q&ffwSlw15*l%K;q zo@&Z~8j{erx6a&7xhjtbP#nBeQC=b6I+f##L+U7AJ#t!52d?Zc6POOAOnuAcpqjjv zkn~;Jqzxnm1+>}AM$`&{eMD}`>+&clR{n26MxqVAv@as|5{{cii|Kl@MBl9-K6;cP z<*W4W`U}L>zgE}9wqL_-VX+}6slUj_k|sM_lyACC_j0leDPE?)z6r1(mAI!^zu1-5 z0$r2SKC3AHpuqS3oKkQw3h83@6}r zrXXh_(rb`uE6)ZaXncD7>O4+M(el^eSzCf=FX9(iW{4OFbKLj@h8!!Ll zAHnV=Xe~;i8GEwj1c6S{W)$-4wi%<4ua8`m6_acV?B0SK7lCEckTb-1pvr2ZA|rA5 z60niL@67u(`2RB;cUuJB71&WwJqp6K)PSrF1rpC1}oodY8!ldqG5Ff&bF3Ey7Yz_)o^k<5!RD9gJ)i* z;=rS_x8fEj5YElV&HE94=>tT3-A%y81h2n2lZSMu_O)>PL{#{( zV)%nrkK-q=!fhw{rpwtGlXKLlK3TH{)jEv0{E!==U$`vUG2``p&r{M1B>YgbAgOBv z-crzePLy8`tbbnV`SeP@6G<_$S7`hZ56coypuN$xN;9*hna*fh>_)Em$Zbmgy62%3 zzi&x>k$kJ?5oATV6+7^gy9>g_g6wud9GbFi$V0f*?^9AaUC6yBpsmN7#a3wdX$#}m zm8hj&bsweDB)ujA&j*N`d^c}l^p-=PaY_?Z%a>`2n=u#i?xN@+^*AL^aSlEa<>O6h zp_z~3lcFA-XHjUMx(w9m2!h9t1=k4Y_S|2Ik&ns58mNyL2`B#sp?$3I_s=IR43EQxf&>@&VE!Ci5*XF#366?*aEsdyxU7^C2-P zeuELr2dgXe!REQ7%v{6MrIuUR(PHaEg~c(};)nRsGZ{7fs<=y8{zQrPsMClt8y1#t z5Ao`^05HT?2>>%;nxi?w9ZPcuT999@>H4GG*Dt%7&Ib!Y)MWtTFw-{V9r*R^r``d{pe^L zi?RWyZsmk3`MMPr%R~>0=n=Lj<_x5M^)0D0m`XBs!g!&%*5WtLms>su4{zVw8sD?= zI7{Fs=V~pb(m`kNEV>vg%1@u?3JiMOg>a;;T9h@Q?6;koS z`v2s4ke9;W<1PhBC-7iXb_bMm>IG>R!CxUgN#<0X0F-m(z@{pAq#7Dz+;Q#Zq?&^u zX43<%xH*+nR5U?nJgrg;lY(+ikB3S%>AV1Dn|L^7XK2BN#5(1^!#RQfw_+V*2+l!^ zaL%bcoPc!@gA3yt51wO_vZFb$vticJy!7Uz`Xrk20_FS->&mPXFck?hg_Iq{iH`QK z4dSNs26g4QP0H)I|C2na_?mHN!%0PU0=fuJ#Vx{FbH<&3!x?Ovw43uXhG{{DRbvEs z<;94|^edbok2n{%yMTuX_aMNKRm@V5$W%X@PB^HX!J$AFm)Ll!JBl3+^cia%es(#a z&{v1y7z}L-@@D;PFvxiuVnAiD{YSr6Ym4$GZOiO%Cea=c_zv;h)DcQ~0?JAKPC=EK zdJ8dP>!3^NcbozS91GRjS)%*~ig&*U>^a#zf}GmOpN5?$DA7B;>AUU$11n;-ieUI6 zc~XwIzyljkwhO+y3Bt~TI0+V^pI$g(U~YNDxddNpg1;4&9w>T8RE-IGHX>-Tdm?No zNH-iX1*mN%$o-8N+5JFFi;At^ppttuSe4PhLLqO7$}bX>PY~E6qE+3x*z_!n*C8%b zDQyrcJ?~w+Hn+^{5bWo#ZYZ}3T5d%5aj&Q@Ah$FR@KPB) z$}QXSehQ_G$cQ>C`19E!V@q#;b%kq85R~k6Y7i}=Z2Lfk@3iyd9_g+jd^1m%j#l8p zRkx@DclaoNw$+nIcQBuHboUE0)BLk)Z<4}Q%JJ*~KB@@<_U$bKnE z`@;s|{BEw-nH(d1o;6fMX-II&^yFAmPDj|H)mTB$X3}q?n7cuXDdQMSwzdj+DJ9I5 zn=|eY?^T%&n!aP$ZCa@xs=cjnenhWDuKdYdtcldP)xkyaaMp%jX4sG>?yPXx0fKNS zz(P>n%0PZIbXT09-f>kAw~tDPpOGo>g`5sds?kX-^Wfhn2M zhw}v8D*&W-?|MPHx9n!9I|N~_pmq!F{lG(l{3gLDM)ul$0w3q9`#9H=VzU#0dj#cE z`2GR*d4OTDWLPZ!C>YCfa4}C%eI1JJ4dEXGpREe-!G0o$LCwOp_0~e7LX}psn4tJj zzV*5&+k6YA6k$n0-UL<M>ERmC_}XMUa`5B6og6(cNT za_3u6-xj1(LS3j*5Vr#uvFqDIeNT{mSKwno88eImyHB~hz$bz{vey~etBmYb3<25x zzz={!1wQ>#GTK)U#_h*~aD<@zDJV$!J_r-<5t|OPFpbRa6XcIUJtc_07lfw) z52PAe}H-!ctem5r2Jb{_$Tat@pwzn{7}$&Ur@{!)KO=u6?)?$f^3u^ zAcC4p2+Cz~YYKdZqqYX@7=dq?%-4kalAu^0kFN-PEF<3lb{#==6R58W0*X?#5X6lI z%Z?LNwiWn5Mc77EUJ878qQ;cF&n!QnP<1eCmS|O_r`L=m*{=lFOB%O}>SEk$d@N`! zAc0b194J^&@LGAn5ba&}O$;BsGl07ROd!4E1qI`qjUm0dC~rz{Gxn6L2z*&(z|K%@ zsls~b)c@K}5Ox#v4is1dTWm%~h-6Iq5?$y3fe&W7*X9lCp1Hk8un|5$=V4{sy1-~O zfFzZX#bfssc=07E{-oTzoER%90dFAe6V8s#`zp>$ZvTMby`mxP-msIfi7 zz1xa|=aSiB3S325%$8E})f)umfpYU{lX9}C8rq>Zo9Fv0oE55}ZsC*n#imL*J(qZm zDC-gaac5&ma_{UKo_k%a56L&K*g0*NMX| zqHN48DvHsg>Iy5pREhJqf&1Wmg|mIPI24b*phRczR;k8{`k{<)=}ZH0{big<57yQI zJP!6T-_;Q2ZA)+LaQ>nHnZlDmlcBOljTh)czSz?{-m*6p*LTL%5DMvl+B5~u_*%|i zb*f@C_7~fpD5$g8RAWl!HTo9wx88jMkEY>r1$KqaW{THkV%KG)>oS7%m=Cr;hMl5c zt5VAFH$e{zZihKZ7fqpO{d7lB^Qj?g&C{6O74(4W(t?g_7Zt2=kf0<(1$n8z4|O%+ zP#~?E9=E*M^v!>b2Or+;z%`jsIey=?HPGA~*fs8%zuBZH(RA0a3_0AS__Yt&FkLH{! z@a-J&JUnc$zf@F>=|g9>pmmvG6t(NiHM-|1y~ZrD)e8g-G}`=XLHk^^~qr-GM=?V!GO z9uauQQEwj9W%B4fE6S_Q-KU}cAgH|}D4!G5UljCS6Le^&ekiC-KQG@DOkwI#{zK6F zEAUU?E#O_?-@v~FHaV6bifUsH?9t$Qe}|>jH9ip)mZp`UHhL>VkNus2zG?-{bKN>> znWt_&G_t@%HasAxp+nn1$No^T`nfBm78E*amPDECX)%Gw?1R3zHXy%CNei z*ig{kLQvZmx03~RdUy9gLGLty5ANl^f;vGEZWd&>2)wtfHd$2bCP9x;%^OLJAB(C# zEa+T;$3sxR5wsqJdQ!0FO9Jmpt3D>G`e#A?Pl5uO-FsQkeM<1ce*|6%sJ<<#wYQ*# z6lfs;x{RED53;+L*xow=-;Uo}f{(YTpf^fTT}3vC4VAz^y-eHzWyCiJ%;U!VLR*~@X@^LVWQeU!DBKWM*)cN z#*qRa$n*B8-gL3mV}YLu+D8k#*4tq4FA%EM0Q#qk@{Fp7E>JST>Y@;&haR30RYk17 z{YOE)3NY*KEe^2OR=g-Ek&c~Q&|OH7F?p;mDX>wZR}2-Yr&-AEs@^DW+i6+cjZ=V3H4PsRXYSInA?Z(0$;tGPr?Irrn;9P zP89^t%BR2{BWN)pUucHF`}x}!O%ly=FZ=s5UR0Q!eg7%8ApA+O?7nGh%wM5k?3krsg z{vm>NcR5nNhHP&m+dGK$_IyExEN&oZ-?7L&Tx@}`Y#bx#JSfN?f@NOe#n?7|rj1lFp8KT0?Tbzi|3 z`O-dW@4?yz&bYbq68X|OBd4EpteynL=dMi^6byGIBVC&EP**;(J=}T~8Mo?u^T4;_SEp3Po|Sh zn=6kri>872>o=ix9W;B#guZ%@>$m!-hQH5 z*lxP_2r~L$XS`~yID^`yiVHf4ceA`tDU03Z)}pDjXbcvDy|JQv2SnF87ZvMyX#097 za%IWy+&iazPkDA#wAxF5y}H;OjUuCL>2(2?qPmna^-w5xx-HSJJFv|?lr;}5!NbXC<&j>FS(9>LAn|%s z_Ek}_EeI2#CP7)~vqQWx88|_ZZuFWdD%=Z;2v4VZ|0*i0>esvvG{el2e-2m=w=V-< zhus_s>7Di$w{gS#9xTVdgYS;Gq4>``T#)sFsRG~SlkEz70`N0|@8j|9I`J2{T_W%W zH{ll8CkXO9@G9^p!SE)S{3Efx$R%4`UnVXl$d-eu15JS?e_TgYzNsMF27nCYDVKS8)zy{ zWrCv(6s2YHa4Jd9!PntzO>wW7iZ0M1hTD);q2UiXZb>w|c@@Q!M~$R5l7JI+VEei- zKKhp2oIHlr21&Wk%!PU%D1hc9QXyQE9y)VpQME|`zD{rY-ULC9=*$!N0C5xZoqK?{ z3_B_J^OXnDCO{nr3^VB*xayjCjLg+fHgc+SVWl^Y5v(=|c3V;5dQsj0+=}|$I!3nM z9)fH)C~Q3GA)|FEpf!}qqI%N>5xM5GL4M5S;N!{0wSv|g0_W7ZH&vi*woo9gfR94v z_&uBI@03bFJk*g4*P|NL2A_5dYR&a*Q(~VId58`S(f&sN^L7%Jrv@YT{}lgcV&7xV znX^3V&pk}4$*jZ4yZ(l@xtTM`h7~?n;s9Kj=U_dEG|69*QpB+7%J-FKTj6oApm7Kk zW0Wna{$$p|eSw1S?#;F*e@L?`<4o`8f`E?hec|~;Q9gdsI!%sFW6M*H4a(Q+hntDPY@&6k+@i{t3{hdWSTB0FFC*H8z#Kt9 zDT=>P3}63Rr@f>F_?P6?W7d(jyT3+|tHt^?+Kf>xZLXgs4?m6L3toLM@yIOwu8&J4 zt!l0UdmBl_bd@obH|~bIP*nXosJjI5eyDo{_4@?A!Zlv1AnEqjOGH&4A>0#$Lra_U zd%`_~+dM(IOm4PC<}cv!2Rxn@WUoLyC)ml|;6>Qi1l7w)^i@$F(7cZ}ULiN{-ETiY zde-%rGj)EA$3GOW%Y0pR?y1`{Vm*JWHVMZh&PVv_ z4A#}v1=(nUZ)FWDL#-yrnb<|PigrAduOh1Wf*@N%5Y`3|&E;6!))l1DejTVU3#uCk zd{8#5FDjw|)R_v_zAh-n;WkFlL-F_dlq`yBpd{2c$8AeN+(Hn>3t9+9zibn~DJtv0 zepe7Jhe}cH?+D6?f@~K-J_!n&dD?}IPuamUj!|g#q^&{Lq5Cr{cRD+!l`>`PY3s_Jd zA;Z^7;D{)1nG0BTD<3L|wg0q<} zv{!}tyddVlDgs~5SziryeL?vZs4oCt6oi2WnxlcHYxBp7DmN7L(Zj-51sMalSI8R? zYMdZ$0#yjCxDIdLwD#(w-HmVJ%SyU0-RxqNh$ypFl-bY)Fi-f|LLUM5#hGC*xy9Xp zo$=jU;IrXgE4SUdKM6NxO1>X+iNjzIhGo?}I|%j=s2@V1E4Pml#3Nx@Q_uQ>fa)Bk z2qJpP7tsa3Ic2I;aovH1B$7e_t3|)MAgm~ zWar~{o}e>J;C=eu9n-oJUo`XLQbB$_>0`Kq(H{x-zpnsjf8hmk+s4i-JyhBjG zOOW3Kd#@mSQc$&i|2x><3Vdl~_7d##0`J($UJ+GA`;V^+@_A6q16pqivcC($Yl56L z`tTO;F6@T_-vgPW!}$9m>AI;XD&J5LzJ?n!o9aeT;{=Pf1-@}HOc0f~@EDKVx1hGh zZFAVofGq??52`DuZYQXHS5WREsP8NA{fS|ksNz6@Cr&=s<~;{10w1yVUe5YMV#9BM2Z1LAo^r>RL=CS_^s#zd5`4mF{LAw7^IkUF6dx1! zBiu06`C^1@fd!Sod_2&GeQRQS1UFV-S|1Q@QBm1qxQ!BoFF;{Uu8kMOHG#E&LXd3$ zwV5ES3$={E2l9Mjq7MtlirgAo32GPyZ8+NZn}pj%P{mf@1({glwu7KVVb1me4h66> z<*d)tP@-!`;Win!K5(QU+Wd4PtW7G@p|D1Ir6xO?ATtC$X=@8r{GEzA=O($;ZV~u~ zMDL#U!c9I!Zry2kU~q|d2+G?90b9ngb73EZy&HH~P{Y0v9}*Pz3NofL;Td2h3Ha=O zs7C~KtRHLcEm-yQ^6X38B=B^-Tv?QFKJ=cGd^GH8K$9S!7v!r7G8TfWtO4biVtqg| z-Hfs^zN-t$aZsBGA{LuujB6=>=}IuHwf#0hnDR7wg8aLJ@R(ps3kp+RI=F`s!PjPW zcN10YB*=Cb_^?gH7UZ)O=^DZv@z_HUSQiR!2z>cqx{I(QwlzsmKTS{^B=Dn}J_Y7! z-`CGo)_kBWY^3Za>lX5_hdA^UG%`o*GXF?6fC}Lr73*1>-8@_DzsPUgESUO$AV(Fy z>P|u0md9w{Vyv)TG}6{e8d8;p)TJSfp&?aiLpF^Uw4t1q6Ym#fv=ogJgODM3(8 zTj-c2G3vyK^8^LTU4b^|JBZUFE9G@w#y~ayqhhtlpI=w@&AFX5D1IHco%uC>(#r!r zWR^27Crg0L4W4_EuCX1;62@;!okKn>=h5=;P^%iR(!ZDO#gFc$`Hh_kleC zc7K7FAj09IO6&r@RmGQZ#IqIHPs+q2B zC{BeviE!t@o+8R-f_NfsQ(-A!;{^G}g$3E^V!c77HH9FUnzD1CY#caCRO=T4pCWFY zC#twu5H12P5p*sURL>WbvjvUIfD3V(1Z_Tc0JffhR3Y{U$r_H>N-IKgMp7i#Jh33ke_@2 z>MlY3eyCpq_rTr<4~!G(0P+jn%-Ggz!hG z7l5Y)wjXp}5mkK=z>-kDhDWBd#aBfYZ^FJVXd$KQe-l;5IMACTwub4zw?sDnDysTV z0E0p8Jwg1ppro_c={6O zi^|RSHU>-w0johA1uO+LfMo#IdP7s-o3IKNeB);Y!)ILL%DAlxEHB8GgIZINuL8A} zAgm#%V=xF`6x7xh`1ngP7V1mDx&Q_PKjTthFz_y)Vm(m>Rs+A=;-k*x*YO=A2;&64 zDKkV-ezzrVhKEfDEm5^XP;4&nvnzhB-Y>X>tq8XTFdo<%_y&MYA!1V~5sbEN#!{4R z3SoOu#Y92e1(+o8Q!L?oqS`wM3aktH_XWQCCGHKihrn;khJ8d8dkMO`LG3As2MKI! z2nRzQ0vwLV(NKNBW(N!q*-r%CyzaM`{n$!lV1Vc!Bj0igL5>qt*HWj;PZs43?a3Z7 zLu~jNZpRDq(*(6sakJzpdJu}Ujz5z zcAvmkm-yURd{}JzH+cM3U<*cgQdIRs*n9B!9n@2T;&DOw0_+ol_%!fGLG@**mjuP1 z1mQKgMH*vR3lo5H{GeNa&Q1nMI}>jS8N z2^#MU;sW|wwschIi!J^ms0Q4ydDItzstO`Dk91YbqN3LPP~qCFc!p7e#!^tr0Lua> zK;F+^G(_3(;nz#TXT{bYRa_fBe2-kwB=8D?*7Ab5GO!YEs|suk@r_E6QMa}lzH8&V zK43ct77-uAv-KmcCpP~wu&yAYJlO;iQGfzwkrDJizggn@OS}=I7$>)46FfE*R0~0S zb3xn^x2**0Z3ER7)Hf59TL>Z+k?<`+)`P`1(kg-P2y7s!VIYa$g`EI=AJ{?Q0|qvl zgk8iYd&yq-?hLyx)B(WWuzN!N0BRDj53J26KN2b1 zz;a?cNazz}yud4u>8_H=xJ}3HI6>d$6HF@EiFh0foCKU8D1Ro%v7wBdD)1dW^)p1( zF`w9);!Cw`L-9KyUc_vlFJHeC5@w02&LQwjL2)J2C4wA7O1w%?y#lxEf!V;txLpqQ zE8qs;8bQRu;#(QQZBRE0($yANSbQOkH^#)f#QHo$diCROv9(7Dav#*ag5ohj_Iung z!uVZ}{Ap2Dj4-}7!5cM;Kj8bEpm-MQd4Zqr$o~rahM@XqLGh}<)|ogDw>JghPlEjK zc)SMnmZ17B?8k!ep}(_Y%&4GKiO&C6Xo+(wfXpBm}!NIs1Kkp!h{83GlB1b zh>Jok0bs0&i$i?|iaCTYvWi%2Vgq&=fsHkBWvJ!wSP736fmMOe1EU4ix}en*#8qHd z6WDg+*EhVpT&|7pn!xIU_VNVz60k1t1wrd8P#Xa20a$i?pLumH*sluW*P+G&8v`2( zS`q4NP#Xzs=*h>4D%-GI3Bs1Z1lVn$#se)uu{Ca62z;$g+zb{&PyC)BbOo*LV6pbZ z@8h-$urF{jZdiNbG(qDu+|Ceq=WX=_*qdQ*ftn2LCn#5xbc2OPdKE6LJe^}K2 zpWSEVQF-)U68OsL;?Gcj68N-4d6m_hq`d)&@d_nP!pj<#6 zRqQ^#UNvI;35yEqqXf0Zps@RR7h!cg6y}}!7Enw#t7{698E6CC3W3c#zC=6D&~NO# z8R0g^w<2imD7W5LqB-`3NajBj61I}!@J zPq4}7M5yV4>dAsM<^Gwd;%MA#{5e%rx@&DJ)bEs`Yzje+5j2>e+ZN;}GYWRD__d61 zhA2SH~T}f2+v#>#s_Ft_csx?M1swoJgfz<@*5~5W_6>Gz;FUU6(gs;G2 zGpc_Tw=W5*>j=7Qz-|P)x}Y}?c4OFZ^}H6EJ^!ZyGJLF;p>h-u#vRW2p? zOj}Uv3Bq@Q?*lD??`-vLOk=Pp`Qlb@OYzp?Fi~!u-30mW1m0EPcP@OlW^ZS))g6I- z1z`_Cu|L!sz<$6afwuzZSd{z}L4JU!;y^(Q15>d*9*+v<10yJMzk;&cOemWt{5(r! zBHOzjzydTK-?bg&d{F@#K-__bxxK(!2|aQ5Rzly78jr^JCxZ5wg7p6C&5Apklzk!G zD;J9DT`us2aFr|Z;3qu~tvn;j%h26t3BtTFdq4?zDS7X|;>Ik{=YMN=%ENbCrz;2l zg~wHba5dQ-qoR6AvN%^%7j>b+DDL$IzXnxD)VEg@3vLf8)vhQSm$Lv*2}7uHkxCfQNt$> z+={ab$^S*r$9HHa^e&pA#n79pZ2ueXqVX;%$FRlF`(*r+KGK$>$eDG@PAXA!2vc+U z$*;gxm=J~K6vG;KL=pD=yXgwAYZat)?g>1y7AZr`0sI@otPOv1EHV7MsaU@xFjIiu zp`y~EPTE!PEVX(A`#Se!3{X(VVW|JXfr* zj`cm|ev0|Gm&&bozMzW8s9z>%&JozO=JQ~_QN1@yZnmmbktMyW1=VW>-e}{-;JYT> zfJbh{10mDCLy+GsD6p0lcfsB-uszHo=&ehY)A|#*T_UP`fnekjv7LDWUp8A_Cbu>M zs(eAvep=A873>vJ-RA`9-mTa0cvXeD+Qw8b# zTOPi2r2Zk{-WPNbZrL^RosMWUG*1E4HgPb^Opl_CFnw+Orp*h3Qfj*sFHQ6);C@AfK?iGDXNNB>J(?;jK8lUFU| zq+d(xJtb=HfABzJ`n;9TTDBKZ5prawH*V+F^#*EQTui>cORx6@C^S63g66YT1tKHg zOpx9_dqb&AM}2!~2f3B>3a`nv5X0G#g4#&}>tS`IvehlWOXgFsA0T*oC{zuEbPsha zN2|)7fqg{KIbPr^8$U!A*FPi3QFgoz78k-76~}8{KKzs~E4Gbx<0GUsbQ<4o+(1%i zD+58`o#a+xvL0h-74-Os>2wN9IV90I?kAXPe;&BB#M$T;eP_kwxz zS2h~A4FRhVg(zPLoMX)V{}?+LxXq@r|J#qXc?`0*_U)9zZDuf$3@IvQ@3C)(MElmg zOXbuc$4cZ7;+b)18Wj>E@fgR(A(TiCW2lG@q$saULPhoJ#9Qk1|9yY!?Y<`;@8|u0 zp3n39T|O+Qp&-Td7cltM z*AaIMK^yll-_64|=Y8DOVp6fWH9r#AyUD~7g4oh(%vlNhbL@K}dyS~^^#sW@U<1J# zGX!N1*q%6yKTRtLy9(@6B4DRUnVG_I07B8k83OwlOc9R)1`Rs^^?~ye14M@HAv$DW z$47~sp;|^Q8PNPo^!>1`g5|ov>qyuN3PskcYKoRx-708M53L!Fy(B82@!7*^|j;K|1;6bbTG{+CALAYGdTSrf;4;J+|9$Aqv#?LHjWJ{E4cRv9Gju&lz zzPFy{oxy#?h3LHd5K+}JR0DCrLPGykf=CMK;Q}8nY7i29HHkg3^_cvV3j_gG!JBit zmqRh--+-3ToT~CX+xMB{bH@3CYoNYH>g|Hby9DWv1fG~vrsFvEGQ(C(uA^0>xXtvx z6j!_eFq>9Pqzw$9-BRysZ?MZ%vQ&jr_f`l9E{bzQ9IatyscirpC=5U8iC#2+LUN-lH-gw-_n~s0)>^%C$7CPT-lbk zqUu~SSzAx>S?S_x1$)?9d^DFl1U7fr0aSgYg2|zR>}WxKoFJSmXnqLA zD6s(^#>spkmZ+{yss2vTW@*+Z&3B%9?P&%rsym=gdr2R%-gLXC`l(nMyD2?!oKR zk*=lFOua$S!BUx9K42F2`Q&07Q593F5Aj?jmyVkN=q{D;` zT%hn)bk+uTQ?UrQHht2wOMAU2uf;U1n0WJMv5{W2&yZ*c19jVz!(4$+Vqi%sYrl?8X4>(JZAd;9PU4>N8{5vzU z+G0Lb@hQTP1(kdh-}_(|6j%Dqeawf>Rce=yd>!1UypU%M8IL#X+oyz`@l9f=@UnIW zr}2l1TicP~Bc~ZMnPkXhvQO$8MZRHU`e+a{e$(OjHAf#XehbF0ua)rl%{)x84o-bU z32}rnm-!;b&c6@I&Tuq(uhnQY+MwnW^&W#S^D4i&hu1%;@8WAzHT^V4BIIz;{CDSTXHR5zKN7N}J6Bmm#<*F*L-augI8vVaR zouT5b_e`BDYJlG3U4L`k8Ym$ZibQx7Pvce1PsgwYg;_jzTYD$PPssd$pn~faXv{s{+$O!8A>`vAJw&zYIwd@}yq;UH zBD2Js)FLxfso49iY#W{ldd_g!*(0p0YxkNCS6!g9# z=%ZJ(Hwrq71pD12xcm;Ny99%)1YZ5`Ef&?ePtc-a*bjK>mHvkntbZjKUqS*stU&7+ z{6^5&n#a0*`;4Iat-xNia+c>iF9`oH{_2 zN!Juq_p5*crqJ&Sd=FN~oMF0x9n_l+BhLp6IyNe9s$lzi;EjU*7J|VW1f7|JQ{F1D zyFI(ZZ?{%3!DLqKAZXtq80;)KbQeJnb*V*Ns!*5OT?L)KptqNx*jJG3FK9m~7@$4X zXitOLg7hPT;!welS>Rr9tYCmzm9maqA1~-k2wJAzVn0DP59%~QdZM5?MbJ52F!;Qn zcMjCqz?TFa?41LYv-Vs;dLD5X2)sV+J^q6WiMvKnUQWVwg282i8Av>XTZ#Loptwy? zFNXSwz{QPg6i*3ytOR$S7F5p(nkNN=X9VRx1UsPic@usQ zskBNoR(nCvW`h38P%8-rmx&p7r)*Fk;HW%~} zQ+hL@wh;`rCHM|OwWA=|n!Fux?-aB<2s+yXtza+^G`kCm&k1@T6ZnjKa~i>$1^G>a z!2H{KUbsh8^IhOK0{am1#B3iz?LQS4x0Fs-!f{K2L)76z^<8<&K9= z(O3dfOP5(Z-k`<=9)2OPJ=;D$!ZQlmo*kuO6qt;;J3(!BADZ~9iZ9(bZ{fFR3+&z9 zR%h=&u)#TfS_$d%q@sj)>CMMM>~d=)A@|Tk$`fb^23?eM7;42y#93hG1K4D1`EPVW zA)vI{MjO@>BuU1b&G113MD^W6Y`fj|C z9VIiHD@d8f;#Fu&Pt6s?F(1{>lkg%zTMVbEF1~QfTWMOpz7HXVqeV6F;^cc!j|;+& zq4@d@9JqoN3}6N2ih4J13aQaZ>o*9RtpynxX}o`HFXh{DOu=B?^f~!_bDo^`Gz@zSwV5BTHL*95^I#b4>)xu+KF|Su2})yr=_d3s0#I7 zf{`1{K8@Y~yTAj&mqsU_Q~@=mOi;i+fFCpuYUIw-C;pqmRB|{(P#*(DFYcTQH6a+k zS-%LEiz;F3b`W&s0@a{*j)LV~Z}65H(Dl#8kygRybDx-WQw3&O%TunQuKgobwN`I@~)sjj~XzcHK+x}hJyb3 zf_y4~mXM+#_(1n)r*^Z6;sRPi_F6$cjUf8MNL6UwpkN9IPB#Y_M+KTgbjA2aQN1?_ zI$H_s@xL3FRbn z<|6{%P+_kd=@ANsqXqSm0`JQ9IqpP;&*@Nx-Q9dQWni zpgEo383OOX?wuuS@OeRbwje!IF!hT9Z^%y173Bls)%l_tRHO1DQW-NPN>Vu~NH2l9 zM$lo}378^$y^;@zCtoG?YC-cALH}!l^4DpqaZ92 zoOKV>O@c16%31dc((e#=x1hXB(0osjeV@1=5WGqdH)KC3D!)%K_>3T1EU*nZ`418v z5R^X>6c3Z|n4tcpAbXnN<4{iu+9gmw5qKN+)JLFD;sW|x`8z@X_k!YQg8Vmv?2iI( z%}$;n?k|Gyf*@XI@?BBYKLpL+1^s0b{q}F7vX_W^9_pWh`p<%jc_9sgayfxL5ml&y z9aO>oih}VM`Ps^%+CpGIMTM2Z)fLQZEwi-!Sulfiu1wr!Iq+Y?QMqg=xx~5+xW#)07cPGlA0|(jx^KI_%i7P)7^;M+uU{1?6!9@6XOo5EamCo8txE znq8bM%F1mvN7O$132O9!`c%Qx`GWkjg6vE|aw5Ug1a@ZKoJHK}g60c?vCj(vf_x3iY@k{7jHPDrkNw@Sg4J*Tnrs zko-!}M?Y^+&C|aKN;Gw!t+%G$e^SB0pGf#GL5|Ko|F44ZqM)hUV5j8xSB^uLwbLFrFd z6ZpJ+iZ!6OI&s)1TMPjeh5+y0uBM8z`>$SCR1fQAikz6v5Y+1ms*MHVbpmf>NjDQ^ zDRQtWaa#je4ZOHfZ6zwaRnVD9!X|>EB=|N#iPllPS&(5?WAHouGNQz=!i|%np4l4!$HiX+^a=5gZ8e_X+CV1%nR=I-i5ONnmB!60IFE zl}9hDIIITQB7rwxj^8P&K|U?k6aNd3iCO_eK#C!t{e_^jiXdNJm9*o2pR?|4skpjU zTyI_d>`G+OG1k?>K7#UNP>6Xu0%us1gz{-#Cs^HFG^PS96GpX^EKa=_%3`SH#Iq^D zzT}f(mNAS7$;b6@FArG8H0ARA+tv7)OSb>ck>e@H`GD@qWa(0<7vcO{7qx>EfVrfO z!{I6eL95b!hJQPUI6ENQhhI3=rFeIsvpBdK`TXWxhFZx`D~a<7+i#uVzB`W4mXa_XqlsH+!a~fjiAPWKFPz13U4G`GDl$7RoJ%Q>3tChe z?=ET|R)sP&mX^k8KBAz{FT_hpdDY!kQ);?DzaVp%Ll*Rz@ux&}7^^umV!W>D8O4=X zDy~nKF$U*2Uv=CH?-vzJc(|7z?Eo*J{<~J`jZk+AqN^`7su@35&_`?2HB?Hrt-ykR z{{~S$PFNzi+I>*SR1F_DTbDU6z}o}7J;14(mlX8Lg9+><6>VyV-rk*W))F_(zh4Q_ z113tVHzZED!Dv7GCa5R*?bGDrRjXg~pe3SwU$mbw&g;)ThU)51t55=OcrIx$Z#J*6 z7-sVYW4}{scd;lRD)zk(ao6ND6;QrTkj>;Rx28Olu6QW+9mJuIl&Bd~Q6w@nhZI45 zs>O2z>jW`5N6L+RHCENr$}I)nrja3Y*-MbmjRi{zNCkFk8JHylQ((ee7Pmk#DFx=E zJ`+n|PMP?Pz+1=du*6#mcHE6uwQ=ffQ5gorE?nN1=Z?YZlS~j@YCH-xlhj=Rra*VI zDQL$&&fh}C^D}%3H+F44PH&%J4EiS4YH$74C*>1NP2p03ePuTb)CSde6s+$Rcw3Zh zef1Irv)7ZlouHk7x7S>rl>q0MD?*Rd(HM5eFrXJA0%@z38Wh-U#!}R zqKfCK!K%t)E3Ef@MX&AClsQ=>n79MDOqshhjt@V@4}XAu7B|=)rUY+EYncaq*<%5d z@%?J;CMuwzyuf5=ciPqVqKZmTzf;icA*kLj=p7^oM-u#`poN1BP8ImDLua9=`dYzK zRYS{fzb7aj69lwlA5HeY%^HSc-=yo$64h)gDE0>U`h8TC0>z}|1qWyo#oYkk z{gmJ`dM#gB)#HOEQ+Z$H;u3b#!fsl`+CAtmbC6jFHF1_Z?-5mg7g$D3Qtd2gjs|WL z6t@aG$dmr&-pb|uSB=>^hKe|=%@H+j z=0;H|ib+W|?3T)>_q=f;Fr3Y3y^pbci!z%PtbVV45qFa!5WED(T%Gm2fD~@KO8o6~ z{la!1&(nR23r{MG

Lq7Aq`KSeT8n#ZbyP1Ih``d@@1HqLyTA)h*2#43_K2Vv#9I zUly&d)q8l)v5U7HW~z(OVQR)TWLZhC6{WddMS0UyVOfttEr{fn;YKpyuzscG$ybsh zM`GhY)f!TBa!n7l@}PbQCM^{0TXl<3hx zW0l0Y>oqPO%bnx8dy$zqKVwvlk&+a9ECq~8>B2JnGpC+J0e-lTs<}ermLf^;&nBSe zT>P)+`e%+Cb8jcr!3j?ZJgrMy{DK5y@lF6HhCeIGH~wLPDc5ScrNd=C0O+;pb8el9RtN^ym3yY>QT^zwyGx@4~K zPTp7-er75PCse~v+wpEueufKmlavF!jJ0Dw(qGFp81t9mw=OF1pv)W&+k;hobOCu9 zRWSYxiMGu33#X1cgC7|`fEg{)@aR<+QC%0{#_`i8h#U1-2c6I*;bLIaVE(P2=J#-d zVGj8`aGW{xJTnNdq{;_Cw6v@w3KsJRU6;(1yF#jg6hin80l*ntmHmXZ%YcrY)>U*YYXbl$--(zIzzwk zOBdA2EAxFC@zM_pd|D#=leky1l(a-AN3X(VLw;8R`uuj~%4fcZKrFR5I{n^xx zRL%W#-bYnbiSU^rPgW#&7i-DS{C%CT>t;u4?jgVQJx|ZjFG_wf@ohcaJ})v@pBK2> zQ&HcA*!m(L^3B`p8AC|Avu zT!Y_s=~C{>2G@ClpPAkGxu%@p&RUb|F10p-tEriO#*i!f8LpapPLBuqkuJc6`WX&7 zpMT-ZF5a14vMHxpUW-4YyitYb5_F+ms^&s{@1_fgN6^UPpbIcmWL|2vht2unqe{+n zmN)4wGsNjp#aE)d$av_J{)IEUWLG!NWfTzG87e05+Y!|z=!(Y*kWWGY+rn3*1tW`~SnkOi?Cjnbkm?O%ycgb@pIeU*195iI_{a4UMjb7Ew z9&Kc09io1`Gn%Jh!NzcT*^hjKYZ^;MnOHYvMujPa|@eNaB zgOSB0J4^Cq1%Om@N>S3& zB|Hezy$`ba0H^PhtEh`@v;{Kt%VrIKylWBj0?Q2*FF4MknO&7S)y*_Pf_t6gY^$%= z*3-QCA)h8H*-lWyPXm=4u!!XKnLu^zfhJ>JBcmt!Y4*}me?cY3r3$7`TMSDS#SAOw zsGZ$G{O~o*1l_rsds`(e&5p-)fvtP?CZrG8ZInJ4V z8D-4E&rHp7d5HEd)DYkDV!97=K>3uwmm3X^Ra|-w?abzaYPx!aA0DqII*1?!uoBas zSHJ8KIP6FP)TRGBQf=6G#ffv(;yTlIDzvaX;%U-pQ$m6#AJ!QZrCI-3qR`)>pUuSOMc^Yw7Z3?=6vq9&N4B4?io-Hx=BicCj<8Y zGk`^ahngSmIKRhK5=xsyO#v>d%hGv8aLk>{x`AJsR&&!u*BcI!FShe===wpfnyXur zuRF|V%2`U{{Gd^s-(!toQ4SjXjJd;7q7Br+52?DzDk{oPGjDgv?w$`xOmN4gU_=--~< z>JHy%H-dhUQ~jXP!$(t*6a0*kO~$Wf=u+M&i;Mcquo_-|blk-7Y3^a87K-)_N^zE0 z)R0@a8WS6dk=a|6v)EzN=vbQD-i5|zP?Y0lKy{Hy8y-GtPFJW)+{|I^yMBiA4dHGm zH>~Hpxdh!pe)GbHBjQ}=a%evBjOe-;)?ioh%VyJ;HCXKJ!!|hCukf;$Ce9tn8=jj5 z>bv$U8GfMR1M7$x;!(Dtz^BTBWiz;ZiWN3qzk^!kJ72s#&OW-srYfq~N{}87yhcS` zxt)IDZL6NLdS6qVuhq`2#oWTvR-mW@1a`!kScyY0tUa-KUE?^FlH39KXO~dufjont zi_doA(^BWs#-w3_{nf_{IVsea+?SV#%D<}2`CdHSqT~q_@PY~r@Q9M4?Cm3?LU!k5 zd%L%oTi#8-pi*2^J^Y28s zxb2c8n*DE3$zGH5CMPQ}afz6olYB>+Gg>@hZ$-ABz*OqgHI?Ai48L^Z^)i;&vqrxS z1mlt3SRY?u-so?4+QlCgOm8Ri3!*CbV!Bi_mA6Dsu?K1^E6HZO$5w*Ca)`ZJ_@tw^76;nO zJ+b_NC_6wIr@xd30s9NG0|mt=1-|}imOJZd3N|ded&NB<|7DW`J4GINk!F#CzISPi z)? zlp8?71?-78yj7H)@Y><-l$i>4cM#OO2%;O6ouIY{-YdxH&)$z2*l`*57uXMOFcjk=L*6pP;7cEErFgRDmfdlnsyBdOxEE>D0IYeOmJSM4Yv`; zVs`UGfiKu;mJocJ;Bx>A$YX5e>oRncmxyB{U;8XnP(R377Ry!^Ww)tGSCst$RN!2PZ;z<9hr)QV8_RLYF@lQY8_9`+=1jqW6|w$}#66^Z z^UyrAD1=F>H01aoPh2vJt3d z(kyvUyASXo;4tE_Z2Nwa_DHDXh&x2kKL+Xu03&{Ryug!Jdn&;b1f3HF#o;7;TF_$R z|KfyT-j`IX?DL|+X9e~h*qjVy0f=Ex(qMKAG?*)@Jy-C>Lj}ILGh9gA1%mQC;4%^} z75G|?*;ha@ZMRnfNQXW}=X*RSCKdPC0>P1|lCV%zdA=ZHQg1I*Ty+(3SR7tr_}Q~y z?|Q{mlM4DWj&KcGkPdzOMzTm$IEV6XBjHYhOw8dsg6s}K|JzXa5=TD>cM00Np?)N= zN0IrAx8x@Z4jv%&K0)#*sY?Xoj|jql5PVFK{0v~q@BLH|elGaQ6U6;O@RuhAea2RM zwFk#!)~tXcj7AKrglxtVB|%7%p+Y=zo#rQ)EGUDE}tty(mbo73AaUQr`P9 ze>qXUkh7$VrYq6ckcY}uNI>3br-*9*TXD^bqN0%XYEoAt*dcXwr~>E$bo3U3WU{8f zw`ycliDTzQSRX)sX*U4Y0yY+u)1cTdkiQmcQ{vdL*0MX$r?!$eKq2h-rj2%UQNCIu z*_ya51AjzH{8SE0>2Tn0-XxV_)q@ zp*{vM?bL@0!V!Z0#|7g@3w#PJI}vIEKpf0ZhB``M!Egfv!|hHHw4V^fYeMG|oFf=N z2?{Qsd{$KQIYILUsQH3loFQmW6GV@*pN3-7im!lf&lL5Ovjx!$?YW|SOGmhXxbp?R zI<$A0sPb}BFA}tu3eqnN@<~Bl{zeNy1fP@P8zJ}a1bO3?e6p!toUeoo+x<>h~h zDt{pu{Emd*3*woxKZ)|0v+!3@)n5eRyMp`$g8wZ@ek;iS0rhv_&w~7)g3j}T`fq}A z8FiI_%v3BZ$X_M!!u4Pks8rxPLAO0FznfFfSU344F$=1f|~W7!D|I2*6w;^fgLrr?0hUY zBe*%Rf#7JC6@4tN-IBQ13+&jW{4c#_HC4gvZ6vTD({2T@T-~6+#QQ|HfI@+pHzo*g z5sYmk@bw~DDXO!rpm@6=nFXNel<$Ok2h`4jm3o49H-hLr?Yn^O1)X;bto-y_QF%ig z3Xyk57kyFv-38hE1U|Ip3q*?d6Wj;blhhAE?I;L)5k!UR>@Tou6?=ioKBi#uQQ$D( z!vf#Q+8!**4wd_}MYYEe{DdGmQV{*HpnmxvTNm}K#>SH!D@cxpIzrGnPS8Jr;3ol; zv;IlIrv$!eBut13CkuR(-8Z&Q?5AM!OP52!2D*xkV6fCAnEt_!hz2fm?w^z_)>K z3cMEB-a+uYz&(QT?+DVx0y_#V?mxlpvmt z`wPLRf#(G6lO+5}(El&uo)K*LSEv^SJ}1}wQ&jmkLGuTJ&&k;`);_PGb?o*(Ma2X5 z>6qdYK^POX%Mn~wP(7=`0SidWMpd)ToYJL;Hzts zl|=d0+OWDPpQ6h<#H}UB))RzvNZ5$rbU|4N>|Muqp!8o$!Ulq5hM-uN)YlW-SP*YR zK}~DlAc)SQHxt!)lOWlWxJ?Dk)`EI-;?@?t^meE>3bL&Pwixy+;;by-!dK1aZ0gi+sEfC^*#IY4<_pJxU#XkIYvK${z@PQSRVzQQ`Z7_Gv-qcY@}}g1vtU^}N8| zP3&PP|A&H|g9Ub&UA+Xg%(7~d|0LhIC_BDrrif}+5~Q0F_jjds(PopKfGq^QjiKHk zu*Jb<+-!B?wkOWpopvC2hJHJ?v#4e-QG5QHqIOfT+LwHoUV29g@Vzc|G~Apj{-$z9%TzvmJg&@NPl>ETcZ zJ6Q1N#{@6^LeQpyas@$sJwePxWhUqaV0lLJs-k?YNmx#l-4EM=r42oHEt;@7En7$6 z%S?Q&Nw%JXy)}tjA4q^{g3b&4M~S#BE7%D}plxc0=PUOxkS}9J~$K zP*BbijA0D%#U=T+qWU$XXBSc4P_l4GQSH0Qg8li(R?xhU;0FZ0vt+Qls9@{<`$e_y z5qQa^*hkboA0lplLD(DEPtZS5P<~L*eqGSnOHdymh?nAiRFwUkv>$;wOOW-U4imH= z0}dB-_JCrZ$(Ria-l+d;L55IicNfJZUG#FrC07fqf{vqPX0OvPn%np-lS3Jl&o&S5 zo9m(uXQ;y|ndAAWJ&2nx7(=bk7mM=EBFXFYw3nYHn?()Y0qjgFdQWn^phQJ^+0iol zfQU!Skc;D~GKAFZMFqpE)NeiDO@e^H7v4>9Ajo!y+7tMoz}LTzAsWOpXE%%TO<}Ki z@C>%@d#eIW+9xP%ynV&fXAEp#9+c7V|9_5~A@0|E(o9zfe3#2g3q>_o397FN(kBG< zipuA+EzSK3dIzHY!rsFuvkPHgT+(!@0UtTT$dP>o3e!eOZ}JL}Z=$h%&GUZmZAzUE zXU%^j@WRpxj8GeDy-4G}5ne?B+X0^iJ_C?1e1_j*n284vpAywMgVc*CZvhDx3tZH= zyV-9QoWd;W6J+hR%ACU;cSHe9u)4&XKYI$=MTc(`D=lLlq13QB31~JQ#L$4)IJO}_ zTZQNH`sINH&x5)UxLv{aVo~$w=x5z|f*RE_&Gp+d6WG(97v@GAdrNpz%h>l?pq-HC zd@Ud0^NLQkGNmx@d#cQrBlA?n*}Uy5IO4I=CCXCrM&Te*d3czj=f<79@LlicN)AxI za3+~A7i3ood`)e7DOv6$c$uj1G{GyOXz}D;QSCFL%1?>1H_k9k&#+C#=W*o`oClvBayzmXl!xBZjZsTADTP9|^49JdD`+36k-fnvgtQch( z)7aqcq%sG13!Vpw8GLlC&8W4_JUfhMoG8dX4V(j<3ot6oaubF|#n7-OHK~1oWA>Mev`>>=n<9`7QIj#oXgd)jd~~v#A=K-w$edM$I$wNx@t?t3{G!85JJ2 z4JHA%v-cg^t7A1r0d!^C>Px1q+C!WX>J4V`cBCiCNBi{{bT;6Wo}!OcTymkn7sO;! z=q0Za*d9^Q1;!2$_##1jk}%_0=@Tj?ObAMtOahbf^&MflsHR84&u9&L`&1Z!?|?VM zvtwRc&+QRBg?HxH3MxiLTtGoyGpG41jKV(2-5TQ_IM*p|{2+=ySyZN9X+a;zc+fh6 zu$ofq%LEgCUzm)iJ2Sy#F2U;sC2f^5H%33!$MW09DGGjHV$=y3aI)zw{a6*W1NezsL@o3%@Z`YiO+0$OzVg{FZ&|>u&C;zD zSEtmuCx{ocA$0hn0^iP1G7P)`pL&L%JNig|bGH(FWsnaOl*cQf;mgc@P6^(>VS8)| z1I=jDK$|wSY3??KnU9*&Hia=aC)#2HkMQ*vz6+;*NQKU2QK|?6Z)K<~MNU<)WHzlC zU?pN%=3#|ERhjXis>X8@NNE`(&&MZIWLoA!xPRPYo?SF!y$ zx+nm#~OF20j}*no@+PJZ!`3~1nnt9NeT_s zpsURLrN9fmfe#;7b6vmX$?^^29*3IL&&HV5ye^qAMK44ks68a9RW#VUF8=0BG12@) zHGEp9IS7j0p7QYS4T7=F1(tU^OGIU_QcS6LRG5ap|jM>=>zU6lmSKLm*rvzTn$zhBQ zZ<&<>J3z6Y3E%VGyoc2N1%nfy<_P8@x>T60Q#yZchVm1FjDVIA;QbpVrrl;ZCl`#0 zY^GqfodsRkTymhG{J3E3aDhEi)fTAEA(d$-Ss(~DkI~l(#!>wc3GV!`rOLBzLTfO< z%!V7jjJG@t-Xf~g6GVP>l&F%gWg%<8tUJMX3wzQervr?DiMgVD9No?kyQpNYo4v~yn2AvO=8`3ewS^VuVRc03`m@pP54D^zC z*m^`U5M8KGxs<0-0H(Syk4K7-J}qc?Zt*sP!(VtepGUHNZ~N?j=?86~%;kP6pgLU8 z-YD=9v=n2AIi_#j3LoL&*nK<+`@$`sQp+$;6eN^%kTEF#Y~sC?{Gfv4lwR492-lrzsDp--*K`vktfwz7~eiix~6`QVUze71vM>rP~o}O(<~h`Gj}wXQX$bZUNYj|=FcPMYrbo4%Wu80 z&AdJ1w_cSV?}+lLLGLI_EQ6du+$|Ju;b~1i_pX9+UqO1Dz>dV@x%YKdRyu{MnYUZ_ zJDDIObPQ{c`&x$B<4u|FNKx^$&gm(}optKJ>XO_is(KesGvD|zMQx#?d?T;-59MPD zCLa<+r4^0OT-h^NHc9FSR7%`3hZa-tZnI7!ZoVKxcd^eu`m90!C}vXU?FFO#T;X%XokkoCZ#TrKK4Pf-0OfG5 z(o-+fcIv5!S;%vDoGNdifTtA~r%L9T;wpZIR_Xa8+Z~D-!tNuz99Lq+i4wPkF>BG^ zP+Y!*1b+n#wRY8#yo%yS3jT=-R($Tb#d3X8rviMVsAwY@h5ZTcB`9GOzV$b5w%ki~ z@fk5Y!1HksUmh8@Rf0$3IKQw2Z-|`h52{+YN6(EK+DoF!35tK0Ao44;j`WX$0K3k& z*DvDb^`5s7PVyDW%p4G9Gdf5)30x_dxKZGx#<*Q^7Ybl3#65&uxav>zUIWLh7-C<`V+%lc_~Sfxvb4CXQr%#d*2kn>R~1ZTNzq>(^gZ zKPh(=_)xod?)mPY=+24BCiyTg_)%a@6=j2Ng0V39mB3rQ%@o2V#QmJ|kU_Fzl-VoQ z2@kT*q+}!Fknbxxraeo0Y1()C3@oiLpa8@kpV{+OpEhj-WE$Vblk7@0_~vnYwdFM? zv+~0NUt=G4Tf5hFDDRDw2Y-n>d4r1bHf-;m@x?xYg?g_xr>m-z5f}#x~V& zz5bER64j;0HlE+8b3vU`i)zeU>7;`5Ec8-myDqW+NgGGQ*OlsC7hSq+s4Sj|y(!7A zRpvIlAPQS)(ZHPnC8f<=+vXDeHeXG@wUs30b9*^+Vp3G{Rp3U! zQdSKeC~u-?Z2R4iF|LrLUEJvxdgu? zi2H_rB&v4P{YF&W01V5B+jN;B!h|5Z9O^Q`_^nWggW02kk`=(P1nM7xZqOs+hS+s@ z_%wlqKp)f3S^06#?%fZ?(u|$I4F=Si&uGPS@=j4UMZ|rjo~MU$UBm1b&jLJ7K6pvZ zv=hCbSyQ6Cl-IWbEbhQwq!&!?0N4u=H!E24N6KxeslBI1!HY$tKApjvhkX-+4eSZx zZ~m|fSW259pLblwgAJ%2mXV@-#bg*Ai}m%had)IsDCHc17f<8XVwx^rnQG8<2~x8+ zh-T~QXPzb7k#&og_R|X3O+4)2dEu)h(7G0=Y^`+{?a)?zry{x}%P1In0uStgB~VhM zO&>-(0DOkSmeg02ZRs@DI$lx0WfGak=uRx@Dg5ZhI4~L3v#aQ*J->?bovX#J+ zeqxChog@yDUnpM&GhcW#?_u_ZRU>RbT`YMpE}JLxi_AqaP1yIWjq?>En9m0J%+E{T zSLTiH7nt%PpS1}3xRg&5RRl}&O@-Qb7<2*SB>3Ep3y2h19Q27QQ!^X~JT@$9^ou`P zjK4^!uUBm~_5~KjZD8M=5l{lQt9U&x8mBBD@U!lPYK;t8)Xsp4gv?%HgDOY-`2-vW7hVC6u-F&U5m$qyPv}b*nY`1qcC41G)$D1ZD(=+VdJ^WO^ZQ(8!wlB{guo|(yVgng zMVy|PU5fW9)hFC;AE$U8+2@g-4b0K&I~A;!SH5gjGTY3zny9)fuv_}-5K)cAvh$#9 z4AFp*2YKEI-FeBeJPmEEm@i1)twO^_yz1_PW`99k|DaaBpkw~Yit}l#sb`6@HQw8% zWBV~U?Y+=9;KbHAUWIyBV&a$i_vY-vppvsxzjEV$mF&Z=V~k{<;qA>P3ndqPlpeBA zW3vq_cKP0dsIVcmSZnKjT2wk;uq?ePy_5vn*&gb86xCr6Tf4Jw!`{8h;v2u~+eOuv zE7fXWW0h=);%w6Ez@M9-8Vr5~MF)A)p9E1ud%Y4WmJ6Gif_iI$ZxUp)1YRyocNUfN zZtZq}C)Wv46|0BU=L9u+!0fXH4U=4YfnX`0ihlh&6<6IPm~CqcTl%V}$%kFVPE2}F ziR%AMP(CN9{w_!vi8+goc0cFcZ51nz)tdzAmH;b{^+1rb^60Bbs~tu8Sj*rr;xN4w zSY4v?#xIDPa=suv7g$Kbb%OF6P^?g<--2Q>HfIk|WsByoMAdAisb2z^HKM!B>7ts~ z3i8baDKb*ErNB#<#Vk>ab`rF(e`~HYej_S>7NA?Ce4m2JhGcfvV8T644Ur>TbPf~e*N-vLrk zeW}2be#Zlwao#k_GVnf7B-IqHZ2$+}kSHGRtrTEho^cnY(L1OE)S^c^wYawr*d|Xuh4uJ0)j)FQ(kfBeTeI=MryxP}q z6z3f{>CvM4pAp!b!GQLw;Z4*3AaI;zshsL&rvkT73SZF6sNTPuY_2#PE~6h!-q+`V ze88m)eA>DE7V}9$Th0A4luc_#sVFn<4C#8t#Y&jZYjxqzHJ>N@0*~~=VZPxC{lbeS z$>jvGH3v*m-lFeinDAa@$>sM;v027O*_HttVEXp)F&|zR_9f0T`kkU0_qE?C zVd4hm^Ib00rK)6lp&(mF3DH~ao)r2afvwmL4HkYah#tlfUF^NqZx*C+Z))X17S zxpxr1pij1pJR1gQ+)8=t>St4T71bOj7|=T_dS}bSQx9GD2u5f;NOYJ=@rj@#n4)d! zjJJVau3$qyNGFxKhgmZ$P_Tk&S^M-PTrmlUt0|8TVr}*r-pEU8(T^*SOtu#kl^}X= zg#mQ-5LE6+`-;lmFX$af+$RMovu;M;^;t5XBS=53VD#up3$>{5>GuTDk1L$3`aQwt zf#vkIMjl<=H@qu*{kJG#?zV!FTi4E9GM^<#uO;D1L3HqXm8f``#GNFtcp6>3J|rr6 zgw&rBw~Sso`g^4-SFo1O41xW<7M?2KreOVMft>`OzKf`W`Lb>Wy$=XFX9+6nu*{+H zqQeJ8O`vauWoYL!L}fdRYLGi`g?GM(`7*$18m7v?RGDKS9%EXx5#KxGydSQGPnPQe z7M+(>QnT&!+c=$A4fpiPWZlB_`;*Etcafklulu&Bz|5Y)ZWh60 z+V2W_mOH1Y?OprRJ`Q!0pr)gHLqz=?)H3>+?NWVMb3AiP*IUSZ+5ed!S^^(Yp#y(- zIM*2cbkSk_*1QCU=k-f_6kf{LGn^r-1hx4AT%a@L0zP^|w^?~2?bFSs@)^Csv0X>6kRL7Z*_)!$ zD-?W+eHb4F-=p1-qCO_*oCXDZu!wE14DIg}9Q=|vtSRlXD!$@9+U*7T>VkNvcn(2C zzxGT)<2is?BTWUq_@I3asiRS`5y3YJs<#NzcS14swmm^WU}=va&hsy0!3R+rhM&E9 z7t9~NV{Rb>G4TY%T;Zk0XRrmu8DdN2vp+`95cxY5w14krI3+a0DWRFG)O6S*@|zW` zh7&>hpo0021=(W)_mZ56phs8nQ6amY+@JoE4g|iRsW?(pPWSO8NbWNmQ<~}eK%N7Y;r8!Noln8+&Q=F|V37yavN?Led_H+d&7$2!?;KenoEvWhd z(K$hMPL2YwCpI^W3RjA<2y53MDWk&YSA992jr}Db-X8c%K61R18Uv>tH+cJ=PlEWW zN^c*q{WKahR#kaE0O3o9ylF3G{Ll> zzvp1joUc~G79S*aHgLEK@REkN$2EK&yB{gc1tyg`X=#ZmrsGK+7HO?_|Mx0$*qlsviZpTCqXzp6 zdRQ-O%Ih-`*opCAE8?vD>`WXQX}YVRPao=CAqYI&dlv=+l^0KGxcgkMr=_q5-!ngx zR~R6CHj{$hrGgHV(tuixu3517+oN5Ux^Mw|$p8_eZxI4Jux*yUzAa_u^mZ&?fM#K$ zZ}DvbReMH|z9_Jxg*wwCeV5fMUeQ47_W2Zt9iv+L&Is?ps8KDWx3b$rHH!fBOJC)X zuSY8VpaaKDkt5O#1=ZdHtFLB}nN4B-D2#<=QG(+|9;_q{Xp$q{8jBUQkQLh{@cMsJ zoL#@zY#2>fOc=ho@)hk@M<~_X-77wA_DWVOB$Q~JvR%s7D9ZwgezBAdYCQ%25A)Lp zX^k%kqLs;ZhL;(b5bpZ$mx0YnFNs>pqV!t5;Qww+`VFbi0{80cUuxu+czhCDT646(ZkcoX zP+%su=fk)q?PL`dy9#4J?nt4$`Sfu+1xOk3-cM+ULw#&>b~x0*ZX4)zUZLC#x!q=K zZ|Cso3w!&h;iqB9N|O=WWQY&Grqt$PO0kS-270>^vQG(`zbPTI(h(O$?##?enGwrX zsRk3DS!uaMRK@5S@lzjPOID>QX$>^stP ztOA-f$V&lC8O*`7*pb$gWT z6ICr7IDt2Lp?;|wFZQG9=%-$%vu})KQo*^GE3?gzwx~x<&dNNhLV7Sw_pG32jr2kN zqKlB=zUy608!&l!LsN-7Y3|s1F5?4uLi4s&cj}Vi=QrnoNvTVrWv1PLj zqjrJ~aOE^rD0o14fL*3IA31K$QT^i1LWaE!h?Z2nO(XWEdzH{I#iYjw8uojq{}eQq zhtTt)jza;14Fvh5sx}3|wT3@;o)cyDaA4~UeZxzp1*taB*^uYcc74hVd^cY|+v627 zTiQHADayyBeR9`6-CHbt@pd27xs=zBS}$`-y0@VHqQJc*r@wfceapwQf@-6zC-s)j zI$%_E_-=hTmnUoAlhole#+owm6^vCoY${PU)8f;%S-#%TyHh9 zyoQ9)gf^)Hp5UWc&$IE??iw;CW;=T8(+Mpo^%%~X%}Q=!zXt+tv?#g%4Le-4eo((J z+U7xr^VZH_bB8S*d@>8T(Sl*Sg$>TM{aioSiU}j2=L8QmSW5>fcd2`lE>K*JCYQT@ zeBb6}^|LB-r4sBJzT@ihReOk5cEVPm(|J#feOW~L>dk71Y-d`->fFm-kndrWUe2p} zY~4D1)jnTlfJovm6aDzpSuOvyuk`xQtCU3l|Fa%&rZRh>phLy8Pbk4x=QVyAEN#8M za#yNdGlmueCJC`+7~Jd>^lRs-VU|S6nNwcpk6HvU$f6naA6> zewIxYSQP)?@5@?`>M}2MJeVFAHMmOPGfAIvJHu$xDKw|s6!S#9l#1%w_eu0(xd}n~ zLHBM!GzKGQhxZ67{c9_ivUr1q)hatFZ0{g$v7m8-*$lp-GFONT#XeBHw67^^cd8rw>VK$aUMbT^|>{?Q7(_4Of~8qCunXF6Q zlFzC_ap9G>>|HPLSM~mT9}LN1GWHnbo!ahj6PC@a=TUN>o>RU?(Cn|wDU(+VgX-K) z@M2L5*c)o^I`yzq=WM--=gTrxJh<6W5ULLe%)%RZPK}^sLq*NJZ^g-8uNt144(-(O zwq{sWONaBU_WGcp{WBEv6qoRpX;(iRc+~Pe>~kf4TBexFqucYZNB5T$=c6<270Mjv z!G-+nR3&&bN_5KT(LJezafWz$g`oWRab7$@0q%8t{myrkrNd0}Rgd^B)Ef2>W(Pdp zF&O43u8UILd|BX2ywh>LksW<(j3AQD;ss&SB~91cOVGjOGuM0)lTY@XAfYAgn9@$K zeIKq@0rDZ=n0LQw73efpBX2j~pe5(SH){B}H|d0VqP&7?Num6%g68PueWFq`(3M4n zvR;B$G zUI*9$w3?bJ-%wC*LaV*Z7Q~F*+8_jzsW1`RD%3edRBhlE)7;QT#s{5#*`HF)1W1=dXkEhX0 zmY_CKq1J55C5rRGGdt_8j!;5vzJ`udyR(|FS;s*z3ltH=WLr&J zdbZ6SeIx~&5^Gx#J?Lyh@p>6w-~Ou7)1Vl1_Q7PcaNN~-8Z~7C@-3g<)#-EA8Cs?9 z)XPrNGrW_nWwP_}hxhHQMe2@%atDCzcGC|Qq)eZl4QkJROauc)aywPe zNSW>HqoDXa730I!nfM^{9EL%(gKRCz{>}1ARN*d9M=wqibUqJto}j@XUR*7xSpu`s zGyew^ojRpIdtcCP^x_;-XN@dx*QXO^x!03GFHXM(b(J9e2I^I+UqSCo`FOtk+P7^+ zlQO-oro&nFhz@}tQ_wa`Gx&;$CEZ=n>_a}fRQZ&ky++_gLJP+}^3=On&lq5eu$WxF zi$@~l50KY-3j}?#w3qQ)_ryY(t*_enSdnkQGDi-$O>>ycJg;{@sJJPxLvup!{Rq$M zExl(kF(c!9ME#PQRtr>ogPnS*Rf<&gRlA8w`EGp- z*mmHS9V99o2<$J&`JjFJZoIGZBvC2Cggtm?^F{fp#m>28p;Kpk?v~C~-3%-eObn%r z37DI&wCr3ZDm*C27Yni<1DsXx>FV&9sIUZhL{L8kg?%mmnZWM4I?JeWym&gYnRi~J zxG+tSZ6HWC1z5^6pWJ_@sFGQ&Z`Fei*Qp3{*dba|Y-;CZcDA>mU-E?f94rGsFLLY3OA_N(ZK@(WQLsWvzu{)C`#erN6Bn*Ta1~%x;-&y*JRRaz z7nHERsw)U<3z{_r#dLvZrgCHAHWg&A6WEVt`UX*U8s2zf*-F8R8O(>cQl>HALq33M z`NZ%f^J>1YpqMR4_Ywp?ayS?`0Dy-LU}@FSg7P@xjuP1P96lkcJw{L;E0}Tu33H%M z5}3o~OxDdA0<$@9GqnrI^nArxV=m!(5{sPwl2@6#{;MuNFss(#R0QLu1|pvZxB1 z1iTU0LeSeIVouBq)Cl^(gR!pbsmxXY=$)sJ{yA zdTquFqOyeE{;a5Kc~Py|>&nEfA_%JiD+$uo1?^gbYCS=(Ag&9*hJ8}1dY!0jGeNv^ zcymz&ytofn9^aPWHU#0yVMl@eHD}wAPy?)1C7%=66y_Dr0Dn%uDd^520V&N+zp~#! zA(g&_jjVmuvdZ^&sI5iWAy?c>GKb)21=iVp+SvOy?8dvYP|i|?&1gQ?8y+FZ_LV9X z*jYF5MJ;emXY*X%EuAB3oHx&S z5BtQ=;CdzOYhpbLu%2x8Pjhx2Qa*d6^46v(4~--MCh&$V4ApqTGUZjvg#zzO^Ad4F z8)ROyK_{MzPF(X_dolMJa$9z4tClYG02S)1{p=+?97@p7KvS}PqhV4iv1$x{Cdv+d zeBVU!6q%_({(`7{d8(EPGJk-nqRI_`*9gKiU>)EsKo8hfVE@G#{lz|r!%3pb^8k2u z27k_Axxw9Mit3iYN|WgVn{A@kQ}8jKHc?R*6Uc2utLz+XdWaE-6iZJNEmtE5*|-de?f6}50G5~bpCrp0yF3W*_$YjsduR>WjcCD^cxDNj%OZGExj=?S%;q?=J`O6Pp^!Yf1(<`t5Rc4 zsjhdTdXq^?g8j$^kH*U=iq|h0e#z*~>3?4E@QO~n%EsLm&R}a#3S~D8J}EWvB#(q` z+736mTc`6QUV-X%cG82K8t*zEBcVqPF!;r_@|Ac?e@31*Mm18ns5kNjMq@^&_Ganm zjDY7xkq!%$S3!M|OwLr~HBB?xDDasxC_XxrXU6)U4}Y{s->Dbe1{gDwdw^dGykWzf zH9Sl{GTS{~JW%#UWhpNeG#*0O3c8ITKSNKlaj)_e$c*FSGfMWUh06VpHt=qL`_A`+ zDsxPl*t-P$Efe}xTov4$U(lw$>>@IF%WE)m`$Y8&;oFBws%y_s*Lcpjik{3Sh(H>d(V3zKaHNVl+mE#m4%i@W zx6!5LwGrd7r1d;+^anxhe!nj5LNnFoDon1H3VgD-@nCniV0!PnThK8F(*-_{7|bJh z^I#F;gHW>p8Ye;X^7-2AL{Z65>+pJadJb{tIzdpNe>7JJN|cbnR|Em0wu=h1vroW} z57iO-j#)|*`H8Y5PY6nzHkb&aI`Ry^eSsijD=Hzdpkk~wT7`3 z2}5ndZu6~86hm!d0yfg@D+sd%_COQ033p6BSzM_(8tQoRA=A`D^DP!NmPdB z;N9ROr6D<=xJv}dB;Z;68mN)J;1MuX6|5i>CRU3_B5$a3ZhfIe~7YIWsCOqj9eqoTa1qf#VivRic7k{P=YUCr{K#Z_;hW> zS%A!jVtm*}ak<6#UHAnOeEv?Tfxr@c&BWK9P4Mdii}3*oU?!7wa}x=0)&eoWV*LHD zQm3{A-`iSLl;HOjRSpOaCHV481xIpweJ80*Hmzlb6+~HDPu751U(lH*NTx!~gxUsp z8(^UvK0bK0Alscdg!gi9LB~SJ0(C+UN#C2+IfcfyVQU#>>3i0=L|H0N6HoD53y@|q z2z;YCzA|U^3}KtX$eds!!bsdlhAXW(%n>zaQH^dpW^LADnPvX@)a7r2Y5i6dOE_1Ygb`P3SkS~Kq+$ij zrcu*<0miS@*Ao4*qDNS9ikp#X*i!M)ZkwSw*e`^AA(eZPN=Nr`^wRS4d=+4^%)T&v z_g)l^;e`2$JkmlhB3L=p1A=ASe=06`>R`CUty1W^ahH_4-qFLg zb?*RZm(-?Rsr71BJxc}d zj+1%?dsZm;g3U*HBR*NebnMzEbed{2fqmsz@(6B{x9Z`U`yVzGdl^aHB)nF-iXcaL z_x+OI;NyND5c7)ll;Eu(3mE&^6vf5e4rb;sysp)jKT?hT^zdT7z!&vZS3xZngomM) z08ar}@_ol<`FhIRiC`btUtkxh_CMsi2khnFzVj0-;K>exusv{^pjlD1O17YC$hO`= z91fa{A$x9i#U z%eW0kjItDN*3GEeOo82GW6fG7Ie}lCDJZW2ej&(yPu!mfUMpz6N8C!(?+t=%2PldP zxuD!kki1=xZ3|Ts=iLtH>1Q?umzVG$%co{7bpFKbbtF{Y%_~?cwc^RJO7~F#_I@#% zCTwwtW@dk~eN=LoBN(T@SZ80jsfvmQjV(k)bsdIRVV?{i0X&#q6crh*hveqGB^@L# zf(+-1Y&2IeO;l$NYwvDh&D9pKTIChY5Z-^4TtMxats2`8JTsl4)CLY$@X0KG447Tw z#b)jnA6M|@=M8KdLGMo8RUQ_Vc+4=HMiNp?fK~Jv^tfF~kh?ZUvV*=Rlu~-J4Gl?@@%m zxVJZ+IS){RZ=17y!}sBOG$x-_@!of12UYc<1mTW-n%#OzxqvpfL&1`-5H45AHcr+4 z6fY<){}fN-Q!Id=+ND*+aE=#@A;bjqj}k^}*F%Zt>7jATi}GE6p4tDeu5*vpbgJX{ z*{}U_To(J~J;o*V8bc$wj3H$W_A{M>VKT4GArW)Ypp+q(4C$SjM$EWP%d`{08xs(hKDF@Pz)uAz1ma3eTl3 zxPjna$>cZf5rhwuyCb=LQGqHU*94ECZqB!r_aK9&LW$TKAk8HL(--$a<@3v!S5K#Q z+aPzOx{oX_K%zyE>Fjq^={eutnY8~_rA7Cfxet`8$WDH#-k&8GC*Nz}gnvmY3x>JC z1-%(Nfo1uiwRm|he{|TFb^ThTZH7v-IeZjsEMyyn4@j!ELfuU$Gn(3UZQKE`I6l8?iKSJ)G4di1#j1$)|KP{ zR(s~|`r811JRC*_1->zjYhi*BHxLy7s`|{$F&e*mX5%xZC=azIysM$|xDmadVXJx4KjC z&`jb4m4{|V=${#+Nj5N>6WHGy9hmG`pS@l~ny)wwn7 zOO=qYFJ(jQ4Nyk{zvL~+*i1;{z^+0bk2DDhBjai7cDzP^NoqWrG|Ww&BX|+~k$4^n zZ?km;(j~&+H<7Lv@>0S6+Q=1>syj)0Sg_6UmTvXmNlinfJtH(;L48c9KOr<<7wl+O zYwJ1Zb-*TqSEB4?%q8u7p>+Y$w}HDgFP2nagnEro`>{~{MCkt|>U~070hS5ral!6o)l*a2Dni;& z$eSQxM!Z2$&ZO-F_6OLFaDWgeqE0}%h*PQO2g^}E#G|w0<-+e)>iWv4=m;pYzz&tvoWa32 z3ZBMOQEc7E?M3FV=Cco*3SN>VUL~o+N8+_6TX#tc|It0?UQR%@osX9kI$%}OKFBZl zX3Cn-&qxZ?oOun-vbWHS@hyHVE^J)EZ@Fi;5$!?cAymGj2;BJYJ(YtO3jg1kbxlXv z@W`^;q0ukJUasx)O0F)};tYI?|L^Y}qTFGw0VcPiy^w607jreYEv*0!W|keH1jyAyDaRQVl5iOOtUVOY|?DyALij;+)9t!EmA#R zQO8{89||_oiL3RxU&X$%FSM0T<^4mw5_EDsgM*vxir19u;IuMJ$j-43vGL`_mzJTu zL%xqP*4w?VFJw2$mCeT7^!?&&5;4sR_s7Kbmt@9R}GM>2yV_Q>4e4aZ3>OP-%7$-6F8 zUF+z=iuV<$lRekSyTe61C{HXbQQp&~)^UZrc4dX-@*0g^F)Q10?XJhsbh47;8w6&BpSF`s> ziuVcON^*ZM$y2sVy^71;>*wq$b)+6xsYADtE~2pbEoG{feSMq`z$34*tj$%jgcdkSGDXD|INd9rw^mx*5$qz=K80lKO-6&6&y`T> zGS^_YleSWoH`Z;S3MPtLc63#ap2s^g|>VoG+VD7zGQZ2Bn0 zWnpN_uGb(gO-5Yt{&jeb6cvZEmVgbL$isCZd#}xzI=$_XO;DUFwg0PJ*WTt_a!(OP zW0v|)BjZ>hcZ8Ajza)AR;$GkcfNk=;eD7=CccoODs-!EbAuBaf(L1g=O_Ef{Xw~VV z3O5Pfs{HgDBzbL??B{oz)X~d@_O!G)5oxsY z>sKIMDTK?BE*07s6wl;xw6*t;E#y8?N8v3LW$J=tEA3TLJP~4o)qG9NY8?&g)k&|q3O~Xcp3FE zVc<0(yG8I1q`!kVh4^p5>+=u(6X`ubUu=v*aLWOk80o=CZbM)lQxkQ4A+INd5ki?- z;T8sF)0JVQrz5w3t>_k#5>1cr5x@r$wiWUi!9nEid(FF`x;ZkET(?Ouxy^B?SqQrc zX(B33l=dW~{e-wbpq-K?lhzi(fv5)~9Yoq^kv@Yo1$+(_6CP%uP6tzkc#M#a7QF6T zHH{4Sa-Kx)@!$j@x!vRp?R^+>}N4;z3D1;^(!>0qjlL}e(sv87OklDCnR zwin_@z()ng>1Uce;bUM2!Rr;ok0b3WWcr}mI|&}hNR=dS5|*iJ-N^L124QE^@j`7c zA-Lf=iL^KLzr}r#sF*`ri2I{{TIhU|G%D+KfDk7L0|%mB#B(`FQk^=laVxk+=zCId zPgYt*=GrkL^&X@nl`%*I&udjgYtCcGE{~UtS{#E3<+K$ z#xt|ChqnHuU(~;@v(&kv(tkB1X#jZKuWvm`j`OHns_88LII}-aifGt^L!J@J0OJx} zGGJpJ;}CA)<{-n8*-oE$>g3Rln~_SB<1nSE!)PerVCB>apTFr zv{Y7owG%k$^WX>_=K;JjDma_dpDTD*aZgPd*24V@2iv#ZSHEqYAT|1YbESH4x5Q&| zHP1Y7v`Dy!JGc-m5&CIByCqjzxI7Z~^!gC5Q0L!z8f_US=dO~^;@jPvt8tcw8|hzA zuA6C_YV4L+g%Q9|nH4!C3qpmtY;oBBKHxO|jw$1nKLKLmctF9wAA zkM)c4DyAbHE|h)-``H^wEnUjzNeX*$8&3g`Dd|jQ%|eGuWcJ*6Od^6_3+XPD-p5P2?tT-&-^|fVK1&(-`%ujhKuk zUz8UG7+kFDmem^hFU!c;8{96x@DwV?h!l|KiQjEr{2(Q#^x8`+t=azhu9o**vwM2@QXZ^K?Tcg3~4(bKM>#gd2ns=6pD3Ia9wF zHoZwn@gXL-mj8-DjBm;=L*dQLOxfB7XVwrC6dA-)TP2obAyJB;=QC? z_nvoS{o>oC_2~a^Vw%I6f~NqLQ9KXejZ#{*HM!deaYrP~W_KvBO#B(Gv>UOQp7XQv zcpmR^<)OS;N^`(p*{SnuQp=#;95NPwb4a^X=nm?2XX`}DhNtHY8_(nWt)3O)^FsS+ z!I4v*nbUexs>Am@sMnp8liVe`mR@%pK{?n+2o$r33l>{oG@$b_j1kgqV4UF9YusBg zECk?eWi*Zv25%PJNcV;_Ub`}4q#c_#_WjtrIzCNpw#r|L$fGEinKZa5D^H@Sa~#FH z1P5&@sXJlDb#nVN*`wDLXaxw;+oPSnSQ^c2z)LWw_k3H5a$zA2R9@3&E} z72KsVpT>Nd`M0qyStet+s+>--6i1+ljo@NC2i|FB6{3x~{wL=Md`ivIWeVy8FO* zKpu;<2NK?^CvT6LjB2Oj4y0v*UCy$T3a_@0h|8QnL-3B|aT6rh$s3Zft&qkEcDLd# zNV|gF$mr+panN$V5Dx?AkzvFAj_$OqlQ4nDiRp{~P+AF#cTKmZGAf?E!o%k$CCJyt~fqNH(wT3wy|7966B`L8bGDe}j^&)=3b7WKDvN2k!=^RuV}dwTv0N}HTY literal 0 HcmV?d00001 diff --git a/.vs/dimension-adapters/FileContentIndex/5a5c2c4f-76d9-4a47-b232-307df235a6f4.vsidx b/.vs/dimension-adapters/FileContentIndex/5a5c2c4f-76d9-4a47-b232-307df235a6f4.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..80eb9ab0031fe1b152f0bc5e7183cb585ece1b35 GIT binary patch literal 427046 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ξ*V5GR5w!!jy=dK&1^r(i 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 W-SdC0-u>FO>IeV-@AtlXWBotKEf*pH literal 0 HcmV?d00001 diff --git a/.vs/dimension-adapters/FileContentIndex/ecbb4cbf-4142-42ac-92a5-7ccded29d053.vsidx b/.vs/dimension-adapters/FileContentIndex/ecbb4cbf-4142-42ac-92a5-7ccded29d053.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..422e5348e3ca26739538eee16de39f07eee6f317 GIT binary patch literal 5883 zcma*r2fQ3b9S86iNazX(*s$PP@}9oCz1Q>hMa0@VtV zR#3N8uhmhlShcKcxwPd|lvOvXws)CLRq9o|*pr?aG2U!_Zb>Id;?Sg*Uo|tI2 z>EFpV#q2`6qo$~Qams3C2g)hsBIUGlsj4$oJGEV@ zfumD9%66iuj-Kym)9IN`mUgU-0vc;Zb2E|3qGU2k!YENuQbvi1k~%7j$kkD8VwJ|K zij|AiAlBVj8{G(XV@Z!Y-Lg7RI_T^6tfnWQU!*6~c#K#_PRF5+mF_B?7J94JS)~i7 z&4f0S+JxFHY17rlYTMA(X%uESiPnd=za zYn!Jwug3FgGOxnC%JQl#8e!4u6v`Ek4|c zT}U5KQRii(%2<`%7!RD)WllHSD2uQxY+1R|=+dO6aiw*oQ`LA;=~ksprEQh;D|+%w zSEZ>+TUBLc%F1r6Y^$gUXlt}HU1ie3q&rO3FxjLj zb7P#bfw7^nsd1rkbS+J-O-)a*WH&C^iO{x`ZCM*cHt5=*X9H)$z^b0r4SG4O4z1p7 z^*J`pZCYCTw%xdOp`~{gPhf1_v2|t#^a0dv{1O)~IMs40q}Sc494~j2xTtn`+d_JK zTvEC;b7@Xrp(|sD&xmfyxvFv%?Uy=JQ{w8v)yDOwUB7e#dg5N)$!a}WXRgjWb*^iC zD`{=A+7z{+HA(H#{`6#j`pmvI^lfif=~-1dD56272QD4-%N@$?(DB((a_Pk6r4vir z@RLQ6Q;WjodUa+0>hifOdv>0`Z1-Nc|GbrDv$AjR>hiAL7p&}A-Mx2DbLXy|`wpOL z*UCk!%RBe2tRC3Ae`R_19?Dw>RxiK$>QgQ|c-1<00`EI^%n<%r#7`sI5h8vb5u;-M znx9gLd;>KEM1GWbw1_h>eyn($c)W;P!Tb%VAt3S_BB2-+<0n#sCy6JEHxf?~PbCo$ z^{0vW8v*%Es39Qon_08eh_m9HI4>@Uo5V#i z6qiT@#J-!wJBw$EcM-RUibO!H>mZ?k$Ri{aqhdU!2DR8F5fI}&F%eU7t9Vy2BM}hm z@P`u?VkuVQHGha9>WpYbC)Q%0L_pMUM?wLSpCt~&9VB8@)SbdplNvlNK2W?^yo5wR?Drrf6cG8P;)BJ@#D|CvB@x$0?DsIP9*X?o z)Zimz93p?D_$cwwBm!doG2&yz$BB;@pCCSwL_n;2lK5m20Wtm*@u?&NV*F`HC?N8u zBcZr1QTGh4`hPM0Oc{sBpCvw9e2(~B@p&WyqW<~f3&azMe#kiuyNDgKwmU7!~7h;?beV z-%Jg@MSQFHHu3G^JH&U2?-JiFzDIm7iGbMmeMl%E^7kX5fXF|9gaRV}p!gy2!{SFs z#HgtMD31pBk{*1VpP=qgc|&*c(wR5@#o?%NW`dE_e*NVGf(LHwimC-KkXUq}SRy1yc!fXM$Q{+&cXjQ;}(1w{T&Boq+&zr=rw{~-~h zqVB)c;P5gO`8vA5Bg7-c_2LHcDDi0V81Y!~I1&NTJzhLP#@7;4dIMJZ|1MBSPC9g1 zj~-umA3x!Hyn-)VP|S6F;hlMmH{cTP`7yt~Di7{HA__$71Zq7p~*4 zg71nCKkT$EDE3=%&+q4ZJi*1h0Z%Bb<%4*8p5-y$<5|Cgm+>t3`2M)ZC4Mb0;|cC< zpmRn()Aff^K9`sI3x8I8MvXcy=B@lP-qgyI0-vQ6^ zg~$Ab$9Su?#(0AFJFG;}VZ#rCkL26%CH%a+ACGY{r+$JT#@{KI@aN~3`Te-Z2W`N) zyevj<3obm%`|(=d#n<^We6g?No_|0t;Wx)G!x7l-M06-lA2N0YpG*H^fzKKnyO`IF Gjr|X$97S>f literal 0 HcmV?d00001 diff --git a/.vs/dimension-adapters/FileContentIndex/read.lock b/.vs/dimension-adapters/FileContentIndex/read.lock new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.vs/dimension-adapters/v17/.wsuo b/.vs/dimension-adapters/v17/.wsuo new file mode 100644 index 0000000000000000000000000000000000000000..df7c69cc02110cc1ecb2bdc5467526d576f8384d GIT binary patch literal 11264 zcmeHNOK)366h2NV5ZCUNN zzxn>mZ{mWBazgGNjLO4Cf5fQEGa^r+&Az(_2M2t`I;ulBMjW^*ReTyUE|;Z(XH7n# zC<1t3cx?-aRQ}2Q?|7WWkFZO34}L^_Y;6h$(Kbac2M1Xxw%>mSi7T%CZgm zSvC#Km(Wu)Cw8e5|3l~>K?zF#8I09-&At3%5`g+CXDxPXI6fS>pZ0(2yO#Zbd4%@=GIVul|6l?@YbyN#{Q&LvH0rc%+BDm=e?GPS zKZZ7%9YB$GbPhWnXbw=WUPa5@d{6(c+q5B`74-kQkIyl*UvTxA?^z$hgTa9;BA&8} zLAFt=$b$O5hR951wE^qE=eBIUk2D}4sOO=j700Q zCRWE>cgL&1&v;V%B=`GnZTdIHON0ebp93yp+Xm*F9lNl{d3_`PYV&zsb;a?5Y@t=xgM6OjA@K9wMi~(1A@8c}$S&~K@C+LF+OtK@f&aYs>G)6g z`#oR6%k$2F6~+A>xdQIjA@wXMXAItug3`*vc)RoBnqF&wvlRz{-25$%}5Zb6@a3 zJ=-63WyK-NP5(SFm!JtdxD8enFX)NPoj4PnM*{rkS*N{u``hj<##&nc-1u!wv;_Mm z`Zo5l2meUf9k%LzaRcJMR^0hA_q^XPbkhPf-_r63&H;g%((^~1leqJWAlLE|Y6^1%($A?Ro9qwl{T-eKev9ws^>h&pnKYl!b+G6g&0w;#|K z3pu7L6mJ304Hi=tC9XsuL!m5MiUHW zMY{S1DDozL4dto*M#naJkD?Enm`ct}#|lmOiK3;)ePL#$sNDF{=CBpz?oQcL+z%fnomV|DFHI;51v6@s9iMxRD9-b24G_ zKm7fT4s1|hTG61^>}8$fjNhGq>Yo4d=Eiy4fB7E*o)zSS_sG^8%D(J0-T0Z0Wt7F} z$vf-WS_}Hu^ZzgSdx6fsbi;4|0>MmBQRRpI_QU)efB!m-5|n=4xV`YV@~_Oc*%2p( zdjjoG$ACfcGgq(k4{rKf_ygyE75|x23W}d+zb43yf0+Me&g=f=f8G2)hW6jgy#>|3 e|Cs$p`mz6E{;$9MAI~zLfAnZ!@{dQIKfDLP!01B& literal 0 HcmV?d00001 diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..edfa7ee577889c7e0b2ab873997b991e85bfb6da GIT binary patch literal 868352 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

H9*O1_8(@st|E1qp0!L;G}`g^NcTOb$Aj0 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 IM;-Kk0JIs!hX4Qo literal 0 HcmV?d00001 diff --git a/dexs/apestore/index.ts b/dexs/apestore/index.ts index 4bfd8d30c4..2d8f84098f 100644 --- a/dexs/apestore/index.ts +++ b/dexs/apestore/index.ts @@ -1,7 +1,5 @@ import { httpPost } from "../../utils/fetchURL" -import { SimpleAdapter, FetchResultVolume, FetchOptions, FetchResultV2, Adapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { FetchOptions, FetchResultV2, Adapter } from "../../adapters/types"; const URL = 'https://ape.store/api/public/base/volume' @@ -11,20 +9,6 @@ interface VolumeInfo { timeStamp: number; } -const fetch = async (options: FetchOptions): Promise => { - const volumeData: VolumeInfo = await httpPost(URL, { date: options.startOfDay }, { - headers: { - "Authorization": "8690be69-3c53-4bc1-8e99-e4fe0472b757" - }, - }); - - return { - totalVolume: volumeData.totalVolume, - dailyVolume: volumeData.dailyVolume, - timestamp: volumeData.timeStamp, - }; -}; - const adapter: Adapter = { version: 2, adapter: { diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..33f95408f0 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2378 @@ +# 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@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-s3@^3.400.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.572.0.tgz#2ef0882029a5f621e11e2d3ce685381f0781bf1b" + integrity sha512-YLtJRVZN+ktOaseWeTtthmimRQoWxygdzRPFlb1HpDPX+akBrGkL7Mz69onpXKfqm9Loz3diUXHqKfpxRX9Pog== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sso-oidc" "3.572.0" + "@aws-sdk/client-sts" "3.572.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/credential-provider-node" "3.572.0" + "@aws-sdk/middleware-bucket-endpoint" "3.568.0" + "@aws-sdk/middleware-expect-continue" "3.572.0" + "@aws-sdk/middleware-flexible-checksums" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-location-constraint" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-sdk-s3" "3.572.0" + "@aws-sdk/middleware-signing" "3.572.0" + "@aws-sdk/middleware-ssec" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/signature-v4-multi-region" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@aws-sdk/xml-builder" "3.567.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/eventstream-serde-browser" "^2.2.0" + "@smithy/eventstream-serde-config-resolver" "^2.2.0" + "@smithy/eventstream-serde-node" "^2.2.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-blob-browser" "^2.2.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/hash-stream-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/md5-js" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-stream" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + "@smithy/util-waiter" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.572.0.tgz#0abe3282c0900f0641770a928d31221a06df494d" + integrity sha512-S6C/S6xYesDakEuzYvlY1DMMKLtKQxdbbygq3hfeG2R0jUt9KpRLsQXK8qrBuVCKa3WcnjN/30hp4g/iUWFU/w== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.572.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/credential-provider-node" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.572.0.tgz#d686db985b4c430dbfa6854c8fa1c17de2c3d7ac" + integrity sha512-S+xhScao5MD79AkrcHmFpEDk+CgoiuB/31WFcTcnrTio5TOUONAaT0QyscOIwRp7BZ7Aez7TBM+loTteJ+TQvg== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.572.0.tgz#75437254cb314a0a0cdb7b28887d502442167408" + integrity sha512-jCQuH2qkbWoSY4wckLSfzf3OPh7zc7ZckEbIGGVUQar/JVff6EIbpQ+uNG29DDEOpdPPd8rrJsVuUlA/nvJdXA== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sso-oidc" "3.572.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/credential-provider-node" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.572.0.tgz#875cbd9e2ca6b78a3c2663cf67aed24e6b143667" + integrity sha512-DBmf94qfN0dfaLl5EnNcq6TakWfOtVXYifHoTbX+VBwESj3rlY4W+W4mAnvBgAqDjlLFy7bBljmx+vnjnV73lg== + dependencies: + "@smithy/core" "^1.4.2" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.568.0.tgz#fc7fda0bc48bbc75065a9084e41d429037e0e1c5" + integrity sha512-MVTQoZwPnP1Ev5A7LG+KzeU6sCB8BcGkZeDT1z1V5Wt7GPq0MgFQTSSjhImnB9jqRSZkl1079Bt3PbO6lfIS8g== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.568.0.tgz#7f7239bed7c23db7356ebeae5f3b3bda9f751b08" + integrity sha512-gL0NlyI2eW17hnCrh45hZV+qjtBquB+Bckiip9R6DIVRKqYcoILyiFhuOgf2bXeF23gVh6j18pvUvIoTaFWs5w== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.572.0.tgz#b6a447e85a10938a1f038bd7e1096c73229e6699" + integrity sha512-05KzbAp77fEiQXqMeodXeMbT83FOqSyBrfSEMz6U8uBXeJCy8zPUjN3acqcbG55/HNJHUvg1cftqzy+fUz71gA== + dependencies: + "@aws-sdk/credential-provider-env" "3.568.0" + "@aws-sdk/credential-provider-process" "3.572.0" + "@aws-sdk/credential-provider-sso" "3.572.0" + "@aws-sdk/credential-provider-web-identity" "3.568.0" + "@aws-sdk/types" "3.567.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.572.0.tgz#dbb1d26a8a2c18c52f8067f6c6371ee850c1fb05" + integrity sha512-anlYZnpmVkfp9Gan+LcEkQvmRf/m0KcbR11th8sBEyI5lxMaHKXhnAtC/hEGT7e3L6rgNOrFYTPuSvllITD/Pg== + dependencies: + "@aws-sdk/credential-provider-env" "3.568.0" + "@aws-sdk/credential-provider-http" "3.568.0" + "@aws-sdk/credential-provider-ini" "3.572.0" + "@aws-sdk/credential-provider-process" "3.572.0" + "@aws-sdk/credential-provider-sso" "3.572.0" + "@aws-sdk/credential-provider-web-identity" "3.568.0" + "@aws-sdk/types" "3.567.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.572.0.tgz#6054c37721d44b3e855b41f4ad8e3dd73f84e6cf" + integrity sha512-hXcOytf0BadSm/MMy7MV8mmY0+Jv3mkavsHNBx0R82hw5ollD0I3JyOAaCtdUpztF0I72F8K+q8SpJQZ+EwArw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.572.0.tgz#d0fe8122538fc498e9d4f797dfe99eed5bfc7443" + integrity sha512-iIlnpJiDXFp3XC4hJNSiNurnU24mr3iLB3HoNa9efr944bo6XBl9FQdk3NssIkqzSmgyoB2CEUx/daBHz4XSow== + dependencies: + "@aws-sdk/client-sso" "3.572.0" + "@aws-sdk/token-providers" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.568.0.tgz#b4e7958dc92a6cbbf5e9fd065cecd76573d4b70f" + integrity sha512-ZJSmTmoIdg6WqAULjYzaJ3XcbgBzVy36lir6Y0UBMRGaxDgos1AARuX6EcYzXOl+ksLvxt/xMQ+3aYh1LWfKSw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.568.0.tgz#790c0943cc097d3a83665131bc9e0743598cc6ca" + integrity sha512-uc/nbSpXv64ct/wV3Ksz0/bXAsEtXuoZu5J9FTcFnM7c2MSofa0YQrtrJ8cG65uGbdeiFoJwPA048BTG/ilhCA== + dependencies: + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.572.0.tgz#91df3b88a0a109450db84577609ed19520dfff38" + integrity sha512-+NKWVK295rOEANU/ohqEfNjkcEdZao7z6HxkMXX4gu4mDpSsVU8WhYr5hp5k3PUhtaiPU8M1rdfQBrZQc4uttw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.572.0.tgz#639ee54f838a5382a69f07351cd783488b6ad89b" + integrity sha512-ysblGDRn1yy8TlKUrwhnFbl3RuMfbVW1rbtePClEYpC/1u9MsqPmm/fmWJJGKat7NclnsgpQyfSQ64DCuaEedg== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.567.0" + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.567.0.tgz#52f278234458ec3035e9534fee582c95a8fec4f7" + integrity sha512-zQHHj2N3in9duKghH7AuRNrOMLnKhW6lnmb7dznou068DJtDr76w475sHp2TF0XELsOGENbbBsOlN/S5QBFBVQ== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.567.0.tgz#c469e745a3fa146dd29d0024a9f4d2a498985822" + integrity sha512-XiGTH4VxrJ5fj6zeF6UL5U5EuJwLqj9bHW5pB+EKfw0pmbnyqfRdYNt46v4GsQql2iVOq1Z/Fiv754nIItBI/A== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.568.0.tgz#aeb85cc8f7da431442d0f5914f3a3e262eb55a09" + integrity sha512-BinH72RG7K3DHHC1/tCulocFv+ZlQ9SrPF9zYT0T1OT95JXuHhB7fH8gEABrc6DAtOdJJh2fgxQjPy5tzPtsrA== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.567.0.tgz#95d91f071b57fb5245d522db70df1652275f06ac" + integrity sha512-rFk3QhdT4IL6O/UWHmNdjJiURutBCy+ogGqaNHf/RELxgXH3KmYorLwCe0eFb5hq8f6vr3zl4/iH7YtsUOuo1w== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.572.0.tgz#62534ecbfc55d91fcb768b97bb14f73577c3b00e" + integrity sha512-ygQL1G2hWoJXkUGL/Xr5q9ojXCH8hgt/oKsxJtc5U8ZXw3SRlL6pCVE7+aiD0l8mgIGbW0vrL08Oc/jYWlakdw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.572.0.tgz#d3c648e3a280774115003d7ea07860f80f79a19d" + integrity sha512-/pEVgHnf8LsTG0hu9yqqvmLMknlKO5c19NM3J9qTWGLPfySi8tWrFuREAFKAxqJFgDw1IdFWd+dXIkodpbGwew== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.567.0.tgz#0a425182d940f963b34146b22dc2872cb21c41e4" + integrity sha512-lhpBwFi3Tcw+jlOdaCsg3lCAg4oOSJB00bW/aLTFeZWutwi9VexMmsddZllx99lN+LDeCjryNyVd2TCRCKwYhQ== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.572.0.tgz#e629083356e3ea1303544240be82e2784d768984" + integrity sha512-R4bBbLp1ywtF1kJoOX1juDMztKPWeQHNj6XuTvtruFDn1RdfnBlbM3+9rguRfH5s4V+xfl8SSWchnyo2cI00xg== + dependencies: + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.572.0.tgz#51a4485bf1b1c3a154fe96e8b9fc0a1e80240fef" + integrity sha512-xkZMIxek44F4YW5r9otD1O5Y/kDkgAb6JNJePkP1qPVojrkCmin3OFYAOZgGm+T4DZAQ5rWhpaqTAWmnRumYfw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.572.0.tgz#0d50b39bbe715ae65dd3954a14df09d9c22fb04d" + integrity sha512-FD6FIi8py1ZAR53NjD2VXKDvvQUhhZu7CDUfC9gjAa7JDtv+rJvM9ZuoiQjaDnzzqYxTr4pKqqjLsd6+8BCSWA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.572.0.tgz#b63ef02f1700057e9f4532365cd098699b0f8328" + integrity sha512-IkSu8p32tQZhKqwmfLZLGfYwNhsS/HUQBLnDMHJlr9VifmDqlTurcr+DwMCaMimuFhcLeb45vqTymKf/ro/OBw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.567.0", "@aws-sdk/types@^3.222.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.567.0.tgz#b2dc88e154140b1ff87e94f63c97447bdb1c1738" + integrity sha512-JBznu45cdgQb8+T/Zab7WpBmfEAh77gsk99xuF4biIb2Sw1mdseONdoGDjEJX57a25TzIv/WUJ2oABWumckz1A== + dependencies: + "@smithy/types" "^2.12.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.572.0": + version "3.572.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.572.0.tgz#41a42cbeb6744f5cf0b983c1b9dd958cb0bd66e0" + integrity sha512-AIEC7ItIWBqkJLtqcSd0HG8tvdh3zVwqnKPHNrcfFay0Xonqx3p/qTCDwGosh5CM5hDGzyOSRA5PkacEDBTz9w== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + "@smithy/util-endpoints" "^1.2.0" + 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.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.567.0.tgz#1ef37a87b28155274d62e31c1ac5c1c043dcd0b3" + integrity sha512-cqP0uXtZ7m7hRysf3fRyJwcY1jCgQTpJy7BHB5VpsE7DXlXHD5+Ur5L42CY7UrRPrB6lc6YGFqaAOs5ghMcLyA== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.568.0.tgz#8bfb81b23d4947462f1e49c70187b85e7cd3837a" + integrity sha512-NVoZoLnKF+eXPBvXg+KqixgJkPSrerR6Gqmbjwqbv14Ini+0KNKB0/MXas1mDGvvEgtNkHI/Cb9zlJ3KXpti2A== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.567.0": + version "3.567.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.567.0.tgz#8dad7461955a8f8458593973b31b3457ea5ad887" + integrity sha512-Db25jK9sZdGa7PEQTdm60YauUVbeYGsSEMQOHGP6ifbXfCknqgkPgWV16DqAKJUsbII0xgkJ9LpppkmYal3K/g== + dependencies: + "@smithy/types" "^2.12.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.55" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.55.tgz#fa3537a9255c2c60d3b4c36b0b2fa25a07f78a5f" + integrity sha512-IYY14D7wSR/lHP3adExvBahynnpcbYubHQKKzmirNq1LVSGaLMtYdPKaf9cwlvZk0hejNwTjP1HF0yF0CehIDA== + dependencies: + "@aws-sdk/client-s3" "^3.400.0" + "@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" + +"@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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" + integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" + integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== + dependencies: + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" + integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" + integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/core@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" + integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" + integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" + integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" + integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" + integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" + integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== + dependencies: + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" + integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== + dependencies: + "@smithy/eventstream-codec" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" + integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" + integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== + dependencies: + "@smithy/chunked-blob-reader" "^2.2.0" + "@smithy/chunked-blob-reader-native" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/hash-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" + integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" + integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" + integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== + dependencies: + "@smithy/types" "^2.12.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/md5-js@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" + integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" + integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== + dependencies: + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" + integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== + dependencies: + "@smithy/middleware-serde" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/middleware-retry@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" + integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/service-error-classification" "^2.1.5" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" + integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" + integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" + integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" + integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/property-provider@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" + integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" + integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" + integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-uri-escape" "^2.2.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" + integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" + integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== + dependencies: + "@smithy/types" "^2.12.0" + +"@smithy/shared-ini-file-loader@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" + integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz#c30dd4028ae50c607db99459981cce8cdab7a3fd" + integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-uri-escape" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" + integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@smithy/types@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" + integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== + dependencies: + "@smithy/querystring-parser" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-base64@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" + integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" + integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" + integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== + 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-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" + integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" + integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" + integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== + dependencies: + "@smithy/config-resolver" "^2.2.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" + integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" + integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" + integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-retry@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" + integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== + dependencies: + "@smithy/service-error-classification" "^2.1.5" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-stream@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" + integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== + dependencies: + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" + integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" + integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/types" "^2.12.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.12.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.11.tgz#c4ef00d3507000d17690643278a60dc55a9dc9be" + integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw== + 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.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.33.tgz#98cd286a1b8a5e11aa06623210240bcc28e95c48" + integrity sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A== + 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.11.9" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +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.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + 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.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + 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.12.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.1.tgz#517ff6d66d4fd5433e38e903051da3e57c87ff37" + integrity sha512-j6wcVoZf06nqEcBbDWkKg8Fp895SS96dSnTCjiXT+8vt2o02raTn4Lo9ERUuIVU5bAjoPYeA+7ytQFexFmLuVw== + 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.5.0" + +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.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + 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.3.14" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.14.tgz#36501f871d373fe197fc5794588d0aa71e69ff68" + integrity sha512-4fkAqu93xe9Mk7le9v0y3VrPDqLKHarNi2s4Pv7f2yOvfhWfhc7hRPHC/JyqMqb8B/Dt/eGS4n7ykwf3fOsl8g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.11.0" + +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.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +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== + +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@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + 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.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + +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.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.1.1" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.1.tgz#f7f85aff59aa22f110b20e27692465cf3bf89481" + integrity sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA== + +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== + +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" + +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.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.0.tgz#332d64e9726bf667fb348e5a1c71005c09ad741a" + integrity sha512-LNHTaVkzaYaLGlO+0u3rQTz7QrHTFOuKyba9JMTQutkmtNew8dw8wOD7mTU/5fCPZzCWpfW0XnQKzY61P0aTaw== + 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.11.5" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" + integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== + 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== + +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.11.1, 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.3.1, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +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.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + +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== + +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.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +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 129f3081493d6ab86e219990b166a632abf27413 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 9 May 2024 16:16:31 +0000 Subject: [PATCH 0509/1590] set missing volume --- aggregators/rubic/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aggregators/rubic/index.ts b/aggregators/rubic/index.ts index 37f3689eb5..cb058eeb90 100644 --- a/aggregators/rubic/index.ts +++ b/aggregators/rubic/index.ts @@ -49,8 +49,8 @@ const fetch = (chain: string) => async (options: FetchOptions): Promise Date: Fri, 10 May 2024 18:12:24 +0200 Subject: [PATCH 0510/1590] Keller Sprinkler info updated (CL) --- dexs/keller/index.ts | 27 ++++++++++++++----- fees/keller/index.ts | 63 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 80 insertions(+), 10 deletions(-) diff --git a/dexs/keller/index.ts b/dexs/keller/index.ts index a24743f812..bfa70eed7b 100644 --- a/dexs/keller/index.ts +++ b/dexs/keller/index.ts @@ -1,14 +1,27 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { getDexVolumeExports, getDexVolumeExportsV3 } from "../../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367'; +const FACTORY_V3_ADDRESS = '0x952aC46B2586737df679e836d9B980E43E12B2d8'; -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.SCROLL]: { - fetch: getDexVolumeExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS }), - start: 1710806400, +const adapter: BreakdownAdapter = { + breakdown:{ + v2: { + [CHAIN.SCROLL]: { + fetch: getDexVolumeExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS }), + start: 1710806400, + }, + }, + sprinkler: { + [CHAIN.SCROLL]: { + fetch: getDexVolumeExportsV3({ + factory: FACTORY_V3_ADDRESS, + factoryFromBlock: 4627488, + chain: CHAIN.SCROLL + }) as Fetch, + start: 1712174400, + }, }, } }; diff --git a/fees/keller/index.ts b/fees/keller/index.ts index 21a2a38d1e..d646c3ca12 100644 --- a/fees/keller/index.ts +++ b/fees/keller/index.ts @@ -1,9 +1,56 @@ -import { Adapter, FetchOptions, FetchResultV2 } from '../../adapters/types'; +import { BreakdownAdapter, FetchOptions, FetchResultFees, FetchResultV2 } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains'; import { getBribes } from './bribes'; import { exportDexVolumeAndFees } from '../../helpers/dexVolumeLogs'; +import { Chain } from "@defillama/sdk/build/general"; +import BigNumber from "bignumber.js"; +import request, { gql } from "graphql-request"; +import { getUniqStartOfTodayTimestamp } from '../../helpers/getUniSubgraphVolume'; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const FACTORY_ADDRESS = '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367'; +const FACTORY_V3_ADDRESS = '0x952aC46B2586737df679e836d9B980E43E12B2d8'; +interface IPoolData { + id: number; + feesUSD: string; +} + +type IURL = { + [l: string | Chain]: string; +} + +const endpoints: IURL = { + [CHAIN.SCROLL]: "https://api.thegraph.com/subgraphs/name/bitdeep/keller-cl", +} +const fetch = (chain: Chain) => { + return async (timestamp: any): Promise => { + const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp.fromTimestamp * 1000)); + const dateId = Math.floor(getTimestampAtStartOfDayUTC(todayTimestamp) / 86400) + const graphQuery = gql + ` + { + uniswapDayData(id: ${dateId}) { + id + feesUSD + } + } + `; + + const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).uniswapDayData; + const dailyFeeUSD = graphRes; + const dailyFee = dailyFeeUSD?.feesUSD ? new BigNumber(dailyFeeUSD.feesUSD) : undefined + if (dailyFee === undefined) return { timestamp } + + return { + timestamp, + dailyFees: dailyFee.toString(), + dailyUserFees: dailyFee.toString(), + dailyRevenue: dailyFee.times(0.2).toString(), + dailyHoldersRevenue: dailyFee.times(0.2).toString(), + }; + }; +} + const getFees = async (options: FetchOptions): Promise => { const v1Results = await exportDexVolumeAndFees({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options) const bribesResult = await getBribes(options); @@ -16,13 +63,23 @@ const getFees = async (options: FetchOptions): Promise => { } } -const adapter: Adapter = { +const adapter: BreakdownAdapter = { version: 2, - adapter: { + breakdown: { + v2: { [CHAIN.SCROLL]: { fetch: getFees, start: 1710806400 }, }, + v3:{ + [CHAIN.SCROLL]: { + fetch: fetch(CHAIN.SCROLL), + start: 1712174400, + }, + } +}, }; export default adapter; + + From e08e04c1cef4218e43b3afc5a84dc3fa6b02369c Mon Sep 17 00:00:00 2001 From: Justin Deible Date: Fri, 10 May 2024 10:36:18 -0700 Subject: [PATCH 0511/1590] add new chains for Odos --- aggregators/{odos.ts => odos/index.ts} | 10 ++++++---- fees/odos.ts | 16 ++++++++++------ 2 files changed, 16 insertions(+), 10 deletions(-) rename aggregators/{odos.ts => odos/index.ts} (83%) diff --git a/aggregators/odos.ts b/aggregators/odos/index.ts similarity index 83% rename from aggregators/odos.ts rename to aggregators/odos/index.ts index 65f7bb98bd..b98161a6b5 100644 --- a/aggregators/odos.ts +++ b/aggregators/odos/index.ts @@ -1,6 +1,6 @@ -import { FetchOptions, SimpleAdapter } from "../adapters/types"; -import { CHAIN } from "../helpers/chains"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; const event_swap = 'event Swap (address sender, uint256 inputAmount, address inputToken, uint256 amountOut, address outputToken, int256 slippage, uint32 referralCode)'; const event_multiswap = 'event SwapMulti(address sender, uint256[] amountsIn, address[] tokensIn, uint256[] amountsOut, address[] tokensOut, uint32 referralCode)'; @@ -18,7 +18,9 @@ const FEE_COLLECTORS: TPool = { [CHAIN.BSC]: ['0x89b8AA89FDd0507a99d334CBe3C808fAFC7d850E',], [CHAIN.FANTOM]: ['0xd0c22a5435f4e8e5770c1fafb5374015fc12f7cd',], [CHAIN.ERA]: ['0x4bBa932E9792A2b917D47830C93a9BC79320E4f7',], - [CHAIN.POLYGON_ZKEVM]: ['0x2b8B3f0949dfB616602109D2AAbBA11311ec7aEC',], + [CHAIN.MODE]: ['0x7E15EB462cdc67Cf92Af1f7102465a8F8c784874',], + [CHAIN.LINEA]: ['0x2d8879046f1559E53eb052E949e9544bCB72f414',], + [CHAIN.MANTLE]: ['0xD9F4e85489aDCD0bAF0Cd63b4231c6af58c26745',], } async function fetch({ getLogs, createBalances, chain }: FetchOptions) { @@ -36,4 +38,4 @@ const start = 1689292800 const adapter: SimpleAdapter = { adapter: {}, version: 2, }; Object.keys(FEE_COLLECTORS).forEach((chain) => adapter.adapter[chain] = { fetch, start, }); -export default adapter; \ No newline at end of file +export default adapter; diff --git a/fees/odos.ts b/fees/odos.ts index 3b64c650c8..5120d022dd 100644 --- a/fees/odos.ts +++ b/fees/odos.ts @@ -49,8 +49,10 @@ const FEE_COLLECTORS: TPool = { [CHAIN.AVAX]: ['0x88de50B233052e4Fb783d4F6db78Cc34fEa3e9FC',], [CHAIN.BSC]: ['0x89b8AA89FDd0507a99d334CBe3C808fAFC7d850E',], [CHAIN.FANTOM]: ['0xd0c22a5435f4e8e5770c1fafb5374015fc12f7cd',], - [CHAIN.ERA]: [ '0x4bBa932E9792A2b917D47830C93a9BC79320E4f7', ], - [CHAIN.POLYGON_ZKEVM]: ['0x2b8B3f0949dfB616602109D2AAbBA11311ec7aEC',], + [CHAIN.ERA]: [ '0x4bBa932E9792A2b917D47830C93a9BC79320E4f7', ], + [CHAIN.MODE]: ['0x7E15EB462cdc67Cf92Af1f7102465a8F8c784874',], + [CHAIN.LINEA]: ['0x2d8879046f1559E53eb052E949e9544bCB72f414',], + [CHAIN.MANTLE]: ['0xD9F4e85489aDCD0bAF0Cd63b4231c6af58c26745',], } const graph = (chain: Chain): any => { @@ -82,11 +84,13 @@ const adapter: SimpleAdapter = { [CHAIN.BASE]: { fetch: graph(CHAIN.BASE), start: 1689292800 }, [CHAIN.POLYGON]: { fetch: graph(CHAIN.POLYGON), start: 1689292800 }, [CHAIN.AVAX]: { fetch: graph(CHAIN.AVAX), start: 1689292800 }, - [CHAIN.BSC]: { fetch: graph(CHAIN.BSC), start: 1689292800 }, + [CHAIN.BSC]: { fetch: graph(CHAIN.BSC), start: 1689292800 }, [CHAIN.FANTOM]: { fetch: graph(CHAIN.FANTOM), start: 1689292800 }, - [CHAIN.ERA]: { fetch: graph(CHAIN.ERA), start: 1689292800 }, - [CHAIN.POLYGON_ZKEVM]: { fetch: graph(CHAIN.POLYGON_ZKEVM), start: 1689292800 } + [CHAIN.ERA]: { fetch: graph(CHAIN.ERA), start: 1689292800 }, + [CHAIN.MODE]: { fetch: graph(CHAIN.MODE), start: 1689292800 }, + [CHAIN.LINEA]: { fetch: graph(CHAIN.LINEA), start: 1689292800 }, + [CHAIN.MANTLE]: { fetch: graph(CHAIN.MANTLE), start: 1689292800 }, } }; -export default adapter; \ No newline at end of file +export default adapter; From 0a57f58afe64e0992461ea60716a693a7dd7d84d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 11 May 2024 04:40:06 +0000 Subject: [PATCH 0512/1590] modify dodo --- dexs/dodo/dodo-agg/index.ts | 42 ------------------------------------- dexs/dodo/index.ts | 42 +++++++++++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 44 deletions(-) delete mode 100644 dexs/dodo/dodo-agg/index.ts diff --git a/dexs/dodo/dodo-agg/index.ts b/dexs/dodo/dodo-agg/index.ts deleted file mode 100644 index 5a44b86a11..0000000000 --- a/dexs/dodo/dodo-agg/index.ts +++ /dev/null @@ -1,42 +0,0 @@ - -// https://api.dodoex.io/dodo-contract/list -const config: any = { - ethereum: { DODOFeeRouteProxys: ['0x21b9F852534Fb9DdC3A0A7B24f067B50d8AC9a99', '0x50f9bDe1c76bba997a5d6e7FEFff695ec8536194']}, - optimism: { DODOFeeRouteProxys: ['0x716fcc67dcA500A91B4a28c9255262c398D8f971', '0xc7d7CC1e9f5E823887980c9C51F9c418ee3A3e28']}, - bsc: { DODOFeeRouteProxys: ['0xa8b034301Bb5DD3610db585Def3e7C0d52f2319F', '0x0656fD85364d03b103CEEda192FB2D3906A6ac15']}, - polygon: { DODOFeeRouteProxys: ['0x39E3e49C99834C9573c9FC7Ff5A4B226cD7B0E63', '0xA103206E7f19d1C1c0e31eFC4DFc7b299630F100']}, - boba: { DODOFeeRouteProxys: ['0x64842A3EbC09bB69429c1a34ae181375fea5f17F', '0xfcA520C94078b65F8237d4F566c438a9468917A1']}, - conflux: { DODOFeeRouteProxys: ['0x3037e79FCe8817A6F21196d8D93C80F53ABB9267', '0x5a71a8524477Acd1807CFefD114Bf8904CD8dF96']}, - moonriver: { DODOFeeRouteProxys: ['0x003B18357460e789e711849749A793c430d14f97', '0x2144BF2003bFd9Aa0950716333fBb5B7A1Caeda4']}, - mantle: { DODOFeeRouteProxys: ['0xB4E598688eC724DD00a8944E7c7b259BbB992c61', '0x70B9C57E1fF24761C1C3ced57Ddae9A3F3570698']}, - base: { DODOFeeRouteProxys: ['0x987bFBE33c9cF18cAA665B792Db66339a9c16D32', '0xA376762070F7fCE8f3646AAe90e6e375e6daF128']}, - avax: { DODOFeeRouteProxys: ['0xbce44767af0a53A108b3B7ba4F740E03D228Ec0A', '0x1F076a800005c758a505E759720eb6737136e893']}, - arbitrum: { DODOFeeRouteProxys: ['0xe05dd51e4eB5636f4f0E8e7Fbe82eA31a2ecef16', '0xc4A1a152812dE96b2B1861E433f42290CDD7f113']}, - linea: { DODOFeeRouteProxys: ['0x70B9C57E1fF24761C1C3ced57Ddae9A3F3570698', '0x03e89fC55A5ad0531576E5a502c4CA52c8bf391B']}, - scroll: { DODOFeeRouteProxys: ['0xf0512872fEc0173d1d99c2dd8CDCb770054b675b', '0x4e998615aD430C1cA46A69d813edE6EB3EC55eDb']}, -} - -import { ChainBlocks, FetchOptions } from "../../../adapters/types"; - -const abis = { - "OrderHistory": "event OrderHistory (address fromToken, address toToken, address sender, uint256 fromAmount, uint256 returnAmount)", -} - -const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain }: FetchOptions) => { - const dailyVolume = createBalances() - - const logs = await getLogs({ targets: config[chain].DODOFeeRouteProxys, eventAbi: abis.OrderHistory, }) - logs.forEach((log: any) => { - dailyVolume.add(log.toToken, log.returnAmount) - }) - return { timestamp, dailyVolume } -}; - -const adapter_agg: any = { - adapter: {}, -}; - -Object.keys(config).forEach((chain) => adapter_agg.adapter[chain] = { fetch, start: 1690848000, }); -export { - adapter_agg -} diff --git a/dexs/dodo/index.ts b/dexs/dodo/index.ts index 1d4a0ddc45..6093ee52e8 100644 --- a/dexs/dodo/index.ts +++ b/dexs/dodo/index.ts @@ -1,9 +1,8 @@ -import { BreakdownAdapter, Fetch, IStartTimestamp } from "../../adapters/types"; +import { BreakdownAdapter, ChainBlocks, Fetch, FetchOptions, IStartTimestamp } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { postURL } from "../../utils/fetchURL"; import dailyVolumePayload from "./dailyVolumePayload"; -import { adapter_agg } from "./dodo-agg/index"; /* const endpoints = { [CHAIN.ARBITRUM]: "https://api.dodoex.io/graphql?opname=FetchDashboardDailyData", @@ -95,6 +94,45 @@ const volume = chains.reduce( {} ); + +// https://api.dodoex.io/dodo-contract/list +const config: any = { + ethereum: { DODOFeeRouteProxys: ['0x21b9F852534Fb9DdC3A0A7B24f067B50d8AC9a99', '0x50f9bDe1c76bba997a5d6e7FEFff695ec8536194']}, + optimism: { DODOFeeRouteProxys: ['0x716fcc67dcA500A91B4a28c9255262c398D8f971', '0xc7d7CC1e9f5E823887980c9C51F9c418ee3A3e28']}, + bsc: { DODOFeeRouteProxys: ['0xa8b034301Bb5DD3610db585Def3e7C0d52f2319F', '0x0656fD85364d03b103CEEda192FB2D3906A6ac15']}, + polygon: { DODOFeeRouteProxys: ['0x39E3e49C99834C9573c9FC7Ff5A4B226cD7B0E63', '0xA103206E7f19d1C1c0e31eFC4DFc7b299630F100']}, + boba: { DODOFeeRouteProxys: ['0x64842A3EbC09bB69429c1a34ae181375fea5f17F', '0xfcA520C94078b65F8237d4F566c438a9468917A1']}, + conflux: { DODOFeeRouteProxys: ['0x3037e79FCe8817A6F21196d8D93C80F53ABB9267', '0x5a71a8524477Acd1807CFefD114Bf8904CD8dF96']}, + moonriver: { DODOFeeRouteProxys: ['0x003B18357460e789e711849749A793c430d14f97', '0x2144BF2003bFd9Aa0950716333fBb5B7A1Caeda4']}, + mantle: { DODOFeeRouteProxys: ['0xB4E598688eC724DD00a8944E7c7b259BbB992c61', '0x70B9C57E1fF24761C1C3ced57Ddae9A3F3570698']}, + base: { DODOFeeRouteProxys: ['0x987bFBE33c9cF18cAA665B792Db66339a9c16D32', '0xA376762070F7fCE8f3646AAe90e6e375e6daF128']}, + avax: { DODOFeeRouteProxys: ['0xbce44767af0a53A108b3B7ba4F740E03D228Ec0A', '0x1F076a800005c758a505E759720eb6737136e893']}, + arbitrum: { DODOFeeRouteProxys: ['0xe05dd51e4eB5636f4f0E8e7Fbe82eA31a2ecef16', '0xc4A1a152812dE96b2B1861E433f42290CDD7f113']}, + linea: { DODOFeeRouteProxys: ['0x70B9C57E1fF24761C1C3ced57Ddae9A3F3570698', '0x03e89fC55A5ad0531576E5a502c4CA52c8bf391B']}, + scroll: { DODOFeeRouteProxys: ['0xf0512872fEc0173d1d99c2dd8CDCb770054b675b', '0x4e998615aD430C1cA46A69d813edE6EB3EC55eDb']}, +} + +const abis = { + "OrderHistory": "event OrderHistory (address fromToken, address toToken, address sender, uint256 fromAmount, uint256 returnAmount)", +} + +const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain }: FetchOptions) => { + const dailyVolume = createBalances() + + const logs = await getLogs({ targets: config[chain].DODOFeeRouteProxys, eventAbi: abis.OrderHistory, }) + logs.forEach((log: any) => { + dailyVolume.add(log.toToken, log.returnAmount) + }) + return { timestamp, dailyVolume } +}; + +const adapter_agg: any = { + adapter: {}, +}; + +Object.keys(config).forEach((chain) => adapter_agg.adapter[chain] = { fetch, start: 1690848000, }); + + const adapter: any = { adapter: volume }; From 0b6d6f54bb6c9d0174af8eaeae10ac314102ca41 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 11 May 2024 06:03:00 +0000 Subject: [PATCH 0513/1590] fix adapter name --- fees/{dodo.ts => dodo-fees.ts} | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) rename fees/{dodo.ts => dodo-fees.ts} (83%) diff --git a/fees/dodo.ts b/fees/dodo-fees.ts similarity index 83% rename from fees/dodo.ts rename to fees/dodo-fees.ts index 8a6e6e2d81..4b77063623 100644 --- a/fees/dodo.ts +++ b/fees/dodo-fees.ts @@ -1,4 +1,4 @@ -import { Adapter } from "../adapters/types"; +import { Adapter, BreakdownAdapter } from "../adapters/types"; import { request, gql } from "graphql-request"; const feesReq = gql` @@ -34,5 +34,12 @@ const adapter: Adapter = { }), {} as any) }; +const breakdownAdapter: BreakdownAdapter = { + version: 2, + breakdown: { + "dodo": adapter.adapter + } +} + -export default adapter; +export default breakdownAdapter; From 95d5dd173c94a20b9725ae09ba9f62e1cff8cc34 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 11 May 2024 15:28:25 +0000 Subject: [PATCH 0514/1590] remove unuse --- .vs/VSWorkspaceState.json | 7 - ...4d28a37f-a503-4793-adeb-3456da107c3d.vsidx | Bin 2788102 -> 0 bytes ...5a5c2c4f-76d9-4a47-b232-307df235a6f4.vsidx | Bin 427046 -> 0 bytes ...b8f60702-a8a9-4db1-801f-c491efa037e9.vsidx | Bin 389247 -> 0 bytes ...ecbb4cbf-4142-42ac-92a5-7ccded29d053.vsidx | Bin 5883 -> 0 bytes .../FileContentIndex/read.lock | 0 .vs/dimension-adapters/v17/.wsuo | Bin 11264 -> 0 bytes .vs/slnx.sqlite | Bin 868352 -> 0 bytes yarn.lock | 2378 ----------------- 9 files changed, 2385 deletions(-) delete mode 100644 .vs/VSWorkspaceState.json delete mode 100644 .vs/dimension-adapters/FileContentIndex/4d28a37f-a503-4793-adeb-3456da107c3d.vsidx delete mode 100644 .vs/dimension-adapters/FileContentIndex/5a5c2c4f-76d9-4a47-b232-307df235a6f4.vsidx delete mode 100644 .vs/dimension-adapters/FileContentIndex/b8f60702-a8a9-4db1-801f-c491efa037e9.vsidx delete mode 100644 .vs/dimension-adapters/FileContentIndex/ecbb4cbf-4142-42ac-92a5-7ccded29d053.vsidx delete mode 100644 .vs/dimension-adapters/FileContentIndex/read.lock delete mode 100644 .vs/dimension-adapters/v17/.wsuo delete mode 100644 .vs/slnx.sqlite delete mode 100644 yarn.lock diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json deleted file mode 100644 index 21e2fe20f6..0000000000 --- a/.vs/VSWorkspaceState.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "ExpandedNodes": [ - "" - ], - "SelectedNode": "\\C:\\Users\\benag\\Source\\Repos\\dimension-adapters", - "PreviewInSolutionExplorer": false -} \ No newline at end of file diff --git a/.vs/dimension-adapters/FileContentIndex/4d28a37f-a503-4793-adeb-3456da107c3d.vsidx b/.vs/dimension-adapters/FileContentIndex/4d28a37f-a503-4793-adeb-3456da107c3d.vsidx deleted file mode 100644 index cebd6700dc5529ce8ad657a08b8ff06ae602cc68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2788102 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%0Dsx(xy(2oLe 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¥Eaoenoym{@HCYeIkD#|4RM~ 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∨_t|XH{c}mLH#g?NyqHh=`%f3?al2s; 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

taI|cJqqbQS|bmgAv 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 z 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 z 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%0D*%?(;}gVr2A$e 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

9o~C4^*2p}RE6#f5a35U6RQ<%D_# zA)!@k_P<0uP7x~fsNT})Z@#uQ;Z&@(|>n*Ab z2lk9nOW_-#{Dp$=gkoB~8adu}cRHcM9Kng33xevh@B;O)4oVY2ocB9yCvm4vXeP^~KT z&}<)$Ut6z59^F*chF~LM&?Z8&ZP#Y9;thn(xee5H@CTt=3rQuEI0GJ}_HcEv zm6GwcU>l*C7`?r$&MxHbNZ!t12O*>HtJqVhM+zQj_SRqz9!V36juuld{Hx`Tizyk5A*izvK#`VeW$GSUZKMIN$(T#2}1m+kUa>VAo&z{ zUdYiKtyhHVHSnC!d0og~6DlLED-#!;+ z`<8>J>CySVlU4s$$bJ?c{9foz7MkFVkq)V*6*{qy4-&kYj{Db&SxCCGuvbIGem%g=U{KOM_8LCi@891g6dEFA|$Ec;kbH`9#L;-;6bW*8pT*6JlZjYdk>f#h1!*tsU4lfwjvOFH;b(#?^c6BnoFrbc&ie|9v39v_EuifEY}y2+DxNhg?z=A*bSQ)i2(h-ZoVzM0nG+s(pPL&%`<^FHPBI;cSD~hROV`|nwrJ8L`au>mss^bB; z?(`G@ha-yiQ>nudxu4ZNnw{-=KTgo2(hLCng|pD567XS@O@+?8Kq`edB4bKB`e7$s%lHOygEq4aBS(aP1lAf^@c!dhTJ-ihj3k)ckq$|X9 zz&i4<`_eoX*#DsN0?%na9Tx5W)D>=VsY{F3CyxiI{u_tT2&bP2escV%cxcc;B!-=? z&z*dj5Sa4drqZpX*BQ=xnF*|m-7)wTt|FVjCWrI2`Z*PvrVm}>;|Bkg zJlc~AsT~qiI83{bkHg(S|zzf zsF5k|CCOf*0IlL3O}yo6La#=K^61QB(DFqla-yTQg=Q3)yVNMJT6&JsU5uocF9ZPe)$e>N;pY~n1A5$8IM-w zhmbs3Xb%#+ZM8SItk2WI@kNyKT6uM0&`&u{ak26e+>sVlZigz@sp2N`OG}f&f z`L~+^@8D&($@0#DV=vQLlDn03c)Zp}e8w$G*0ks05m{|s$weL(BHmDkDQUTl=M8Q1 zuG(2isOqOK4ot66Y3FU_6|aH63m#|B5Cs3TX>|RWO2_hIXHTeffzM@mhq9CxyZWcl z`hPnxd8P|5XBC?0-wVp>xH*}Jyv2ojAt4@y#l*IHS;3vl1(ibdd!bxWXd^nj(7g__ zs&$2;6ehT~C}g#*j8G%qQraV}6;(!pIBDh-?JdiT)}ozdWxENjLxkvXk|zl9lDhXX z`X!}S>7zmkbmPVs2syP%-yt#CW&S?U;y(lZ42&i}*#jRO> zPZdY!WR6+eF7QKz-KZHOvoKg+D zkFoO^$$tut-dYrc5$YHckcCej@zTqr7?}p&G7ayrZo4b{vO3^#<0}C|O>Z z-aSTE=S;ypXf-WFNel5gdab6J=-fdmvZsBYP|j?M#%_y+!C< zOi!^p${c_;epPvuTNm1y&U9dqZfr?AQ{lDMEy1pvWwLjoPG?tMD-y~D!CV|N1glT* z4%3b<8?B_Irw2Ree@S~(&95sMKSf=8rdUFwWM8elxvXMmp+*yWs(08;RyDK!tsYJR zEt9vn^+cPTmdW8{o4uS5p!8{B^7gu6^{#;CX&;)W?zSX%5@On|ct2t4?xNYgN_u0_ z4o#ak7OnP_<;JT%P*#P)a|_lvLdot?l+u>fG-LGvfVM0>1`Fv|A1Aa=0am57Wu3E> zj4l+q7YMC$g!)`z{KZ0crw+M?_N}0O8-5j~mk0@cZjKE4(|B2}6Ld(6=B~D=r1h&e z1+;$NFCn>>QkuJj=B|mj}rY-Y0XB+vOA1Zh{n`40#v{vJ3t(uX?>t$uMRy7Tk8>n(?D%zSl zwo85L(VP5R@}|*OZBs?ogJk712%SZRXh$L5TdQJ6T#*ypB*&f!0fcLP(YuET`*rWw|HIRjH>?j2*7CypF3M9W1n{RJ{_( zI@>!Om6h_^hYEGSko-yT*5}13vb+eXKAuvl+<2VeJ&Y>qUC+jye3q=%7?RY$<*`B& zn20*I`w#`MgL{Nmua4^NO@=J(Jp@sEFamvF z&jaS;IO^Sc0YH^oQ~4$l)e;!buFTxWN7kk#H>2)ha% z$f)-vIa2UWFKw#udOtwz-PGeU6cfPp^KEvsD~2j zl3az&JPI$$PRCJtvk(|T^-9*(kvcBBMHrw(thm{YSHwj&)1fbs)yvQAu;9~E|K-DV zu-#mHsrJTPG3N7ex%j_R3;b_h0#x6wvouQIFT^K0)pXS8B{g+nKV?AH;7tYZ7UZso z(f00ex|)fk7s+xY^3I2{YVJWnJvr+WN{**utXvb`uFGilM*Ub;`%7W!Oyj_3g!cqb zy~_B4)gFQu9TfafF+Y!|Q+D`$9Y-!2kHw4aQGkA0*nS>h&!=wYq(05(QZO30KWBZe zZ!Ma!l=j!7P!4}nUdaEx3kC!)ekyO0)$bt}B(eMcE2@lUc?9o~7uxwb_2>G77WUKR z3!0=WsHg;e8U4I;Zq&Op^cDBd{!G1&j?3+sETMy2{L;rhiiL3PEUAObRfXsc75IaW z;t;!nl|Kk%JeUqC-q}q5){HMu8RdMC<1&Tw^g%xTz(G31bL5(Nk(VmzXCwAg%wt;( z*1@rr+msvYN#ve;?pr)7KS09i?PdgeDx-IRuZoNGalU4ETRRw}PcX`&<8+;1+zvu{ zsSdvEej(?!kGWBBkaVvOsjtzsbdJ}VJ3c-2eMyb(%^Eymw}*$u(bGHpGR^e)XJqvu z)x2$26C$5a^F8oGGiFLhK*1Z(H17-QKZ+oDNG+_z322G!_T^8?N_%xJo}HSUAghO~ zY9gJvopB?woIX6E3U`pWR*$S^Xq9)`_hs^wM`cFtRsY{~mgri}OmacrM17bdmg~|2 z7hWGBctf!E#j?CBJ5FFToh{}4br8w~RTU2ieTb*{VG5`+&Zb)O-bn?bDAu2rqf?3> zU*$>`L-|P5i02cgJIacvOFSjqBYW>}ETM9ZB+`U^UY44;(qv?gW)6ovbw1fFm zLP7;PnpVwY>Jd(Z+pVTcigqTViHT@QymMQ007>q1AMkUU?M|t0Hc#hZDvH)gg1dp@ zlR0h>hiodOsOCc7s_95+-=I7P`1hntuYRm~>9T(a?o`ZH)zLlNtEQ)S5uLz;3{6Bi zSICGHkBuGU$7h^Q+NEOb@{D`O3qQNfP7L@Ej&3}dx5pdCdq4GvU(j)TQZ!*jZ^if< zh1lH=h(JGP19R(I(oKOM%<>Zm)T&fJK$dAXolg#-_B#4&u(6g6_-9ZJUc2`O%0 zn1J=L(48nGj|d%CeRIl+X~10_4$%c@S6!ViLRls}_a6Q7tI^B7=dsejy8gq<1tPaI zS8;+@Rcf8>rKZuY9QV4=#dnTJ@xR=}`Xn7((4^Y!OQ`;b9Hz5Y{M=#6>*rs;p80_libPise&$yd2BLkA#l=P^jZ=x%=WvM6q-KJJ}%@4)@`fFXyXSn_wf;EH> znigw3O4T1ZwL$ZLEQsgt*|-G<`%0Vjrc?gc=kw?Gb1Hwh|JRmFJ?%W>QAtM#`M!cf zxjBm4u}3S}I);L=!i+eI)j>Md|ID}To}vPKi#a}Gey%Vl?qM6JFz44Qa0>l6j>8pf zYNYY9vUhcyqp3NNnxmw7F+oPB=g=s9wO>=77YOC=$f{_(>gxp0o=rYiUI)35{)vBnCW(*;Mas>aAl=!;A)27agMZFIocbb_qs>5H8H0j!6G ze4@~yYchLIa1Uhm8p*dwQVSH5gqq2q(dR<5tvh{;tzU$M$r%;ROJ_#G<0S2w$eW$y ztU^SWV?hm)A-B>#^5!8)_hPY#;H8(z@5mb_%#M~S=taz^bFy0SPGQ-OBzG2?ts(Zr znlf@59l~*p+!kXfpmj-3CV7sKo(;|yGSqc)o=}`Clj+s%a$~_k zM~Zc^_7=SMzr>&Rep#J6Wx4Or{Xy-u)GT|X|Xg+JXaMtg>WF9mOv)vS;I zS;>T!DVatuM1{JkW)#Y~1#gB`6|#ysNG^x9o{+CActz<}JIeC#cXvBkox_9*m&f6o zbE?8)_RJf}UMlI}Ll7oZ>#?6l?!%krEKPov9L=eR{VWDTq}!CFFw)b$<@`{9C? zrC@P4u#+qg&o{2+o)nA}?0)@1o$a<_0EZ)@LbkYbEP=@faNDVYy&F$7n$nB-U({Sm z)#qrdP4vg7NTT5!i^02ImegxjbMd^oC6Vi^rLd^4rfw~nu1(%hu%X~d_^pkwsHNfq zv8a*4X@GhtIvboTcujh77Z%k`^e7gNoo8|sU&!ilg~E768gZL`qVy7dkJ(&hEI{6h zUE9^C|P7t%Yic!}c=u-qHZo0rZlIQ~$~ ztLA;|uI7F7rsZDopYm>{yjvbdox1(Dm;Kwdbj%tre)7W1W}*@@H1J@i$6}q0b+3>u z!1uL4<4KGY!H=V-9W@&@~v76gY#oerF{R6iN-5DRty|UKB;Yi;l`A@80u&B+_ zr}+%tcyIQd4kvlEKCKCL!;5IK-N&2fnNzvns9ia3SDm1RYR+~7Jmd8U3J@J7!n$>k z5Fbh2o`U2>CaA&k~RJWq1pNPL|M@hg2Ty{{j&Nl&~fpZ6pR$ozX2-b`!A4XjUJHfDcv^VVh%yIyo$#+b$_ez2$uR{6?isPahZ}$X9)cz`Az)WwctY~ zyS$Qt-@~&>dk2&pe2-v>=nm}8M=EXKr@Z_Yq5GT=KLj2YJf-yP=SiYyE0j#eJMDdz z2frdK@ODRU2wpGL=7;aZy5sqWvf}IYAL&Q3N@VQ-u7@XZdBy+zD4rHiNx&^|$8`LY zk`B!fqjS8BY&>pX>sO&d=lGGTXO~saMRH-mQ%`g1lEifhvZu40kgp=ds|%i!>J4kF zHOX6*ytTm^f}@^xkVjK%ny`tIF`jk3Db^oB7t})73~PI^1K3Ka(Ne7uLf8@PBE%zw z0)5p+T6t1ZFLhXZZz0}QNcR*Rs1mL z@jF8M-&iQivMD{J#`@BLo_Z@QbW!T3N}=f+KqrvtUu1wP;Qf zoQ)VQ>ZL~x$>}X~Qv|6aZ${J0@`6wYMkr9F^`b(&IH0F3UQF<+qmarXY7Yg=3uzGIH3ct1DmEs$iI8k0EYTJm zB-8Vii$5wEHWwTpGuc8`MLX!In9YKtj*{`#UUoM$iwdS{^aco_7D<$-Pj`f zaIAfV7HvRvFv&xN=m;UD+a{*lrhBAN{E0loc1l|jp9oGO*^hOc(8Oxm3F|cS#tPXP zSZ-KQ=5DcjPM4LRDR|Si_)-ozhtjhF?RmJIym3N>Zci`4x`I5!yQ5RaDERzF@~#xB zo3XAEy4MQn-6U@U2!iw$!BHpUdu0{qgD^pe?-G(nupR@C3w=*uJq4ZxPlD%#^d+o^ zg#1Mzc>(M1LiD!KOfH~vAbv~ezK8WM@R5-G2kT>@m_+hJA^*1!eh|E3spmUc)h~jB z6(zV7%|!4oWVP@sn#l!Gk4}&XaSxade67-YdaNI1RfDlIp>H;L+cm|^mr z;I&K1&$1d1=y+N2?m|AZTGQl5S)FyTaCz#L1xv)2KT*Ns?zkK-Ycs@R+7+Vhz^OtT zzo*9AN$_^cugKHlz2K;xRmm`&P{cw#zu?L6?lrZOmBCrMvj!7i3vQ4n;+#2*}iZWC+N)-w_-_Da87;>RO$}A&>IUDEOBU{~I76 zGqhv;y^_u1r(XSsBl<@-so?5CBxeMu$Swjh;FHw9Dw)qpK`O+v3r)<17Rfn4E+l=z z)Hwd}5G9L+g=i59<`%phJzZK>JjIcXm#1_Y@{pnNvO=^nSWyTok+-VgiPo*P$y=Yi zwvexfh1ct0oo3E)p=7#&5LtJ2NN&j?TM5Y)Sd|d(C{!b{keuFNHbr-ON7M#xbq}~rNGAx< z9l~XFD%#cerc}{GB(DX}f+vN5vP>olF)A{BO^Dtj`7Zd7SWKG^+0%(>4HLgVXP?<(W8CwQp$7Wudt%5Y6Za(G5k(eghX^` zpLA7OqgNxjG6e|33Sk&6FF3aPY(ZAMwh-3DT2F{J1RDW#VvIzLHxoSV(qYx(O_dB? z!P73i({41JydBBg9cyQ>14%?+=OCdU5tyR?!d^n}5hT%n@u65p3(d^TDbg?QS6*}+ z1*5?zp&yy&4p^_4i;t(^&q5Qt@hn+=X9^JtFSl~#mKyHvCz3p zh|qe?LOXO_daV$UbWKOkUuAir&eUL#%`&_@ICvrlzbIIxIY6WZTJ)y!EYQ;TWknwe z=_Dbb&En4h+RQWYr~MWSSym&e z36{`VDETiJC^0F-{*js2qUhXfeiF=8HN>ET8E2ukV z1!UA_qXaJtpBjAH3!UO8IpjLQ0idGCWJT|iL|R3bR$t2U0`cNKSpku?;1_}eO?wfc zw?T9_b4oX}2k;`~mX{NHsd!AUb2?aXQ0bKZ=M)_l3i8ll?y&MY!>}Huh%xUX?4Ibo z5ompzk+-7|qs;=^tg{!%Q9_DJ^CYZzEXm`ACj1wo&7q%DL|Zcp1mzZP6C4k;S)Pb; zi|H7Q5N#29EqV+*2p$)ThXil%6rStJw-30}sSErzwQU|E(dLlQ-nAjaag0ou&l z8aslrSD($-R$h%5i%NhPYc{3YS(X)9vWu*0Cz79lKMUUKINhJ*0fN_jw|C*!N0wy> zG>^D@d#cv%9JiD5n)Twlamc|!awNy0*E;Se?3dO1Cm}sTaFn?W`4&zTl4FGUBq16r z%yxlJnw%-ifrR1>m5fgzc?i~VvK(%zbFz}&b}AVp%QDaVp*dz@@mC$^WgcEs7p~&p zE)hD`dMG?=y_3;(ZM0sqlN2J*or;N7--jy5Zsgx?7UJ8$00-a0aY#RRAhssR%5DMl zBE}C2$s=H*P$KxU`vnK`D=yUu#$GApFDTE$qw!N%Z*d4+iNz$6$ieJYaE%UjJT0&P zDBf3I`k_!G49gF&KH@lpVL#oA(W65Am6AC_|4nwBAMj{TD6_A6`oM1trn1?(BU$anbm@Lb@%rfuyN?PkVcx|&fWHsg0 zYj9j4xG&sm$;u7M+d@duaLEXgI|^ZI!7JsX?XZw<*)|mH1ok9vS0P8f1%zC5h>#-H ztlVn!TIq3;QL=iL)XQn9HWH~;q0$;zhEz+>6=Gyrb%EdjL1DZs?-ArBv({!gVytzG z;3bvWJtVIdhE5QA?hr;I#(EwVyzTN-_0@h}c@^r*V=;}~dR@u(7lKD+I!LPsxz#~# zRmiRIIeCv^eTMa;(4IzLCi+HJjI>IpBbf+c24Vb9Dk$lUi|B%j2V>2Fg|za(a6n&` zb5oFFp`~iHl!F9ki^ytp6ACIu9z`n&CB16ZD&!R;Hxi-^gkah82l6T*?vS^I;AJQt zD=JVtU3#}XY;2wLpcT&n9B0LID2E&=lqeqec)2^v!y$uFH`(z*bd1nK#Kh>A_^BxwOA^Sy0e-^x6*VDQk zRK{x_J!93gyd7i4)4IJcMTA@^kP8V)q4vAfdp=KWw9-2lv^SFFvAgJxveGWe z?Xk8JJW1ATw9~znto9Y6eT1+-I7sNF4GqVF(*zHig_E$(5c>Zj#8(R83ZYrmO_xPD zk%F5AFYWf$dC{#(Hk}vzQ1v4m@;G^K3E@qw4}{+Lh0$M={7Ue;%J^Th;(wF;R>*1i zD*73^zY0;LU%DA_T7chtaj=XKuPAtI#~Y`!?Eziqhp2ci9)&)$uqzSLO=fWWwb)}qCHNMUP1C2A-WOVEaZ2Scc+lt zMRJ0WJ|;wu3;j#%)ny8=ve>Le)u$j=i z1$j85(VaqisNm2v_B7p0#54|$Zk!)4D@+z#--jMO)b4cmY~h$1*z=6+wR!4B_MGw@ z<<*sH%DdX4W{qza3f!+S3x~Wz-XLxhRjFq?bmyc12P>Kj;9Eshpn)nfxQe9TJK#}y zeL%pia&_25jDAMRF;s%xnR)7VpmZeI7CbGyaIR3E#W%W%Z;7f8y*!<$+$3P_C&XuA z@f>(vRy|o(OvT;I8=*=IG}|R7b?{$LGwnT{|8*XRq}%I|YC9p>3E-C%yJGDtcv*e1 zpR8l}TV9Iq{TkmN1kQK5W9D4rns0Mgtgg(eI%94L5>Dgm; z?5b~-%>F~(H$w5fko+WgEu&}cCOnDNbb{Aw3>hS=oKYyI7m|PK;Aj@|XkF?VDEO7L z%t~oSG8MeWB%u-ZUcX6;yg7s<7veswIfa~-DVa+s78R-?Bp1e7PzZ~VoJT0;21}4! zQYaZWNEQ;BFt)!ViC0++BX4=I40-bj?PUcIDC8^4%2yCdJWX%9Q>;WD?VyJilA*E! zFJfzb!OM8kAS-VRMJZ%Bp4ECnQV8(|SnCMIT0*t4;7~HH%_#VT;IK-gx0DspntBI= zbXy84p*@1U9fe|~kPIh@4;ybMcpM_#NtVYUqCI5gdkJAzO7|4X-GyQ|A=()nAXJA6 z@xelRq);3~vR}w)ryV)h9&UEHlF1Rm=%a<9qlAIcf@3EX$I9{^GR0U~u3Ef#hG#B& zydoc?g8ED$KbwQk5Qdy9ROf&T1rJ{o=aIZbh%XoN0in1+@T}+Z2J*%W(T(I?C!|*k zV{Q`cJ6E^JD()tEJJy{-c0b8`1W((~A0#ZZ{Tc7lD@C?Fe-1_P#9p~va-VLgnO?hDs!An@$bIQtR6|xq2nc$(6 zYA%vb>wlB^WmSEG1O0kR_|OF@MNnn*26$uJWFf3nC@z^+-(x9RC7lBi{Q?g4<*DP% zCbmN;Wl$yYpvrPs!-Sq5p;}4ER~34f7mC#d2L|k2lY+IuT0&U}>3Tx4Az+}T*hm<> znGm%}t}7&)3e^UJqX;?-a771%!vMP%B6O4t+X&@$Lbg3vUr2`w#g1Tiq1;($X0`7p zE8klPdkF14g>t0ep_%9)3ebc@cN4q^ZG42R{1Cw*{JkSbK@UcLpwJB5FlJL61=bO& zesCPg(Lypx7<`J5pDJW@awKB_8gt+n!Gk%~@v@3P3+d@tX9C1$i!PAX1wwT`7$>9` z3hi?R2N({Q$Vx62s>`s(3;BQ$UoUvpy*o&f8=gTGrkiRR0w}j#iA$ng({z2X+Lis89K&U<^!oYWe7sgdzVNDjiq98;%*b7IaY5BL9d0>vq_#TcnGY(^(gKV2Ja(uMhWdZgk~AVp;(82CxzlVtjEE# zLirfhi^AY{h3aYW4ER)NW*mJfD|t!idk^b7A^t_kzYvO_h4!?n7(ENAdprfxC}~G0 z?9L%ylh>=fY-WxdEF?348A&dU^`j0MP2X3t4%k4*>8;2Mp;#U)NpfYZIk4!^Xx4Cy z)Bg_rgcHyo=EWWPa3y=`6bn0Y+!lftci7*m=ou^bqVzB!r^_s&XRJ6}C=V5~qlGX^ zaKy3bPqM00h5QsOe6?sS)@edizg9dTH2W#tO~C~69>aQ4s2&u&f-!$cR(M<}CX)BMkT0P2%_~s6 zXGyY{k`6cO$^ZTI$a%qUf(Kd6BqX?zo^|E@SF1t1=k(1bEe@GZ$Z;(laoI@(USQYs= zVMAir@^Z|}1fQFh9Uv84E5z3b;T4z!w+miR*_A?eqtJJ?(3v0%xJqyg8xy`}_X?hG z%x=LPFZBG5vIjBmLQO&uzLtcq*<+O5DRc;5vu6bF#B_4(a5A+|Q1*z>KT+_wWAKtx z`I?ZwC1g{DJ|b7IMswsE{Dq3wDSJZ*{w!?vF6tejcRK1lA$wnN(Ax7iOoG-i|Bwnl z1OF7_M^x7R1ogGx=|^vI@T#@2S2t!nhu~FfeS@URIWZle{-9S>9hu?0f)}iL5nDY_ zW_eM34WFgrCLtz3^#L*2nW&cq zZ}`Y2O9ih8-X4|{n|gs>JdLs`-~+*{^g2_eoWM8yRI2AsR1lGdM5LZOPCk>$-ozv# zjXx25d`!DukBBthP_g0Bm{$~B^d3WTW~Py z%<#p0)Gi=6qi{|f8qSNEf|+q>mpHV1UT@zn>FbjjFCutxUmtO3xHy+AE#w5Fo}>QebCLT88&uPb;VUz>cohq8>a4TX9c!7*pN0TqOs%_c&-xNj>d zhnt%eQrXN%Ga}NAw*v&3NrTz})Swi+;LqWvrxr3|&WuR298T>hOu|iXqV{%>@DQ2a z3F1R&99kYRlCpz@n9wphOvv^T+AY?{NreQIq<4J; z*Hd=0(02pM(c(Q)F~MVYFN(M^yH@DCUkH9DgmhhD4CTSiwhBCq$6ZyOez>c$;eX zebh&Smm$u|KN-#p9=imOeP0Rz!DBliL&!Kc!DHZPF;J`Lbd=p0T=I7z{uDJp6z(%-INgz#-j!2s_QvO%F7$#hfqfe*^$)VEOeix>}etVgWxlB zW^FVMr%?6+_(*X2=JEq6r^5rz6buOfXDyw~2mqbk&S`fZn;G_b{iMUbV3aP&2>TrI z)kk0w>^Zw#=n#)!&mmsc&vk@&URW6u-G#(?86jRqh!>n9G{kwqiGnkYI=Y*c@opF) zUc332I4>Z?3r|9g6=Gt#hUhMQh%zF%coK@}uAi7Ld=U`I`TU-C-j8suJ$3a-DTj06 z@3`bN%>9Jf-xhi!At0QK3FoqRgw7p;S7yeuOL;p@LQIzv(}kfBbcA>@Od`4VNaRJO zGU7KM-|OWUC6Qd__-(LMFjVLg#Pt!iHA5)t6MX1IXGs)6Tt7ivMiA$HHlBH0sYhnK zGFXvXf;jK4i8quQMEusyMy^iv!IPby< ziQl{x$E!BxC2H#swar?(;pE*u9w^z3ii5#Op*dV=_vl<86<3&t3ONB=MCj&&Xv6bR zd+XlyRAX|cRCBw^`fn5BfpqUU)^@Sm4Ig&jZdO^=t7fiCTikA{b0bJglknIFJgZ)A zT)!$ch9B9pzCL`(iDk>n`5PPX_WMdXseZ6KujK=IVQRIv-aa2LGu(xWbA(Svpd3~1 zg}Owq%}+#~Cj2jsG|I2%;w!oM2GotXHwGNZdtlLTikOdiFY42a|$I90@NP9GjPO#8FU>|M%;(54chm7(71 ze>(ceiPU@sK=6qE?*Dl75wTkK4e!UVI_vzSfS)!dF7vFQ*M^1*@`rvZWJ3hc_H`DL zazxc0j6`S@t|9#Bbfk4W_j?J_+7NO%uE?Ca~N6n#>M zG0S7ey1`-o(XmOP?!R`^%Xd@^l$ocL%_;cM#s9|vN~`F)Y)v6r2H@6uyGpbr<`$R* zz)AH2%>O=5=}P@>Jv*z`D_oobu5*~o;Bau9P~l2uIFQj8As#I>xQO|wf_DdJ=S%(Q z+@;H82Ka=YOZe{-nDFqNyvIIV^MK6IP8+UT_&BxrYwcM~Qz&~&_#Y2s`nM_~JT2$^ zZocC>{Hy=X(M)sb?yT)l;Y-arnyFa`b5SA0WeRYV{_A|EJy%s(g74!Mm)F_%*+8b3 zX*j=6fa{X%B-HpN|9w&uUWQk~1h^XieMl1?#sB@JCcK9RccH*5_+K2-RPUzi+T16# ze(rEr!MSW3I`DuF{71(%ohx(J_J{}RqRTOYGnjcO)}3|rsLBF5>zXb)pm%PMaC%oN zdJdERcM46jhfbXq+?{X`t1OrY(9Ql&hdDXPPd-hxUZj&P&c$@D?r>+F=+qfP*%E@g z)OsZ;kAeQzVNO0oFX-ytaPC=eg-90DL)ZU;UeQap=zQVnRH^tEf;-5JZZX&slfE(i ziC)p{P8t26kBRTn1v>4W$1J^TwcbT##q)qp#N&zCr82#&vAkc(okK>y(6-}m@LN8m z3THL*;yxe!8?2~58E!9RCkVmOd;*#@pK1`_DAn%hb6YZqCxEsjn_J5H6xzso1(_Wh z3ZKOu9Vz7yuX`@nT@EG)*&SfA5WgvS^Sh7Vb`%qQMa9>GH#POHpwArO-v@a0-dE(U zLiTM-?z;21*K$0|>;$26BL6^o?ESf=?4V_MWbM7d9nry2^00N{Ukgtr;TsS6#zVeX zCp?YzzR*IV-4dzp~;@ct+#%wP2n zoWOu-_=u1^&MW>X1pG!G<@AOM=WB6V79Wk{RWv>HdGTO=6vp}jcWCrr&eh~@%wu@& z#tOQzbZfzDM1FMa#R0tHJfUwa%H7jtQtiSCyGL|N@pD4SAW?fl1$|VP?y3BWGVX(f zo+Mv{pKJrcSzbfNBieHx7=Q>4q=FXR=_AKqMVW7gTPY(JkBO%pF}KGtaBuwR{Ds;0 zh8(_rtBP=bnPEy9t*95T=c`M__X)W@H@9%aMPq+6%d1|3^y2`R+1fOf(n!Ch}f?XWv zrzyBgVn!C7f~BTWXxoE%rD8h?Jo~eDg*p$PbM9sS&He08)g=l2YDSmp$KHD=8=ie1 zh1+gfLZT7(o(J%FZg3ZB^;AGY2 zggm+Lhy!>T6G1+w!3)9TD`a{#cptZlGsQ(TP%$w?K@5>{`}l~48Sm+mn8=|VFMLM4 z;3LU=I>QMB63wZ+3(-U~1@k7W^{*CMIe#V!hLX$%z8YpxJ9b-px|4yxmab{ z!!olcDZ5stCx^z<5~j3-;dLsjo|7tG5;D&aF*%gpsEVB1JAYg7J>Dhs2#GrCKMUzQ zf-~NEUMS+`kN&2z{2zi(9*h1d<+Pvf4852!_?ODO+}(LTclbhP`L&RICsf}E>8(Qk zx!@pkuG#fZt>zHCU(KuJn;3JT;H045!xpD9orJA%h_Z;xa4=;<1TRhWZnlJAB^@d_ zm6kKK*Q>~^XzF8{`fPonbbG%JibuCvPY5&Mu%#CnROg@_O;qh0fygO|Pe z6pXGt9=f}fwk~8YAzld3`*jxmOpHW7e=vjbxZK-&D!6zp9V0rJ=Zx4$r zRgqUhI9w>{IlW;&WWe6XCV9iYN9f~`D)WLc@6h+T@Xp5Mf%xcjUQ6`Udy3%3w{wY9 zGPBnWZ;+WXDxMH7c|g4PPN{H`;8jxI5RgAB)7t<_0w*6*=M_-_*%EUTA>0^TBzS{b z`G8daXdypHaCTJhO>1|y6IMAzsGo-wW-Fw%wVQRT%9V(K3sM;ADt1MnX2sRPy1J9sW%W-Tz#j)wGBE;KL zwu9h&sT^n^cGPF5Vh-IF zHziWu#h!Oi3sUhGSVX88D=q2cGx~TZA!-6CA35SoL=9u5WBUYeTC0apyM&M}FC?ph zHHDJs&O6uA6)9Uvs58O4&zz2^#IJL(SFX<`_z~R=q`cN8+D@vom|Bp22233Ve#tOt z!r*AxrEF`#Cy)dqq`aCX8!pw3i{cY{uSc}E%GwOEIEHD(#Uq90P{DiHeE3Llh|Fql z{ZJV$$+!3*DQ=3_u(U_1;~I4K61QCAb1}}ajH~~H{x{P`RUXW zT86&_xF6wpTymxm;fRFCNHudvH5W^D?1PMx8hp8sT_OZHA^|>#Ply_d=i#)PJ`JiK zk9n$U<86d$f=r)L;QeaeRgvRS48xD8C+HjM-X+z&Q)p8jJu2mm5)tli_K09-BC<2_ zlFaZmp@R$I?d>6+Lj8_VyeCBOgO7#yW_^P2DZ$G~yn>{_U8p}1DxB!#OQ~7zf_>@$ zPoeXT;BnC!7rTEDJ;^*myR#jSJNQADWb;aSbh?8Bp5Y&43kXhm)GicR0&^G@Lxp&G z!D~Of>?2-TW(U`x&DiT@A8T;Qnv~%hv|HZo8f+@FJ(PJ9R96_C3kCi`gwIfID})s& z1$znsoH5k$ph4lVo}j)k!kFNj|zrmw3^|m~p(~Vj;X#@S=-0hW#xS;{~6~ zXjdb}!ANfwI=2ISi{wEexJL*l2}ABfJtdTQ8ABe&d{*e(BzVn4gqIOc7BajHFOsmA zk-fnsZwn))2+?#QXP`E~)u^Xpek%08Da2kM@eb;*Lc7oKGt?)7M{vV$P&2^yLX2M$ z5774#M}k*CILD=ft{Rsl8%XT}f=6{j#&^BY!9%-VaGxzkEpAGLo8sI>&TJVjfjLyj zdW3vQ!RzV+#&g;uv{$EW6(L(k=vkMFmB3m;u%-~NDx~;1&QoOXrpz%n5uDF5W~ewW zDBBizym&Lpwh_E&{zrTDafQ5;!MpaIyU1%7W*yk=v_;|mywxv-Ui_i#AaH;X9wtP` z3O;BgK1!;4oRE2}`FK>n5S|PeaIVG(Ua^qjJcS;uI7iAu&rU~KUL>=;jIv9)WE?nG z@JO`Rw|i8>3*UdV9KnMeH|aVrS@%g6eRuNOhrk28!NY>L=Cyf>7z}C0sb8kzCGdve zv_lhe3#k}QSS+D79-p;FCXxRLH z;H5c7KzI)3d4kVbsd3PJV0?y`)*UM}xMlUjg2&M_#?hCUg!veFQScgO537gxYa#xc z*D!Z+)w<7N{!R!^6QZ|;^CHYUFzva`F4e(H>z`LD#8t~f!E@WrDv;u@IYFfJMS8qF zU0h{eo16}&HV~X%Kf*VQmKFjWv=RrcGt)tfaL~Fd3mFbtwV~jY`xP!&>Pc!mvKpVu z!#hvzh{F4d@V;uiuaM#Qa(fgm*lBoQB_ne29zwpm(BOwfyGd0aQZdu<%5k^scy)g( zm0l;bM~(ebujqYP@Gf+);A?K&)-~)SOuyYtV!T(vy@CG*s zV|k7oj(Ak^@;+W>r;>50{&9jGKKn?)6wL8Lfh*)QP`n{DlcjY~stEoeS>V5THDr97 zRDw6+w2O&HCKl4g32sG@2|k-B86lO^$2)cQ@V%u1y7F{S)N=X<2B%9cPM@4zCOC^= zMX&3eHO>zBHXUg+Sx5-Yeaf-B$~G#eTTJN@8~VJEHGE#a*M`>%%k(a=gzjl8dZyxM zf>SGd$kE~TcWbK5L3K@^(yojno^JLOocg7qo2cj}8v1}_Bf;a7>4{PSjkz}~H7qd8 zZV}q!scx5QUIecT9oor=cCubr-`|K81s}`N(3%aQHFHB2ZztuZs;1FO&JY|%*8kxW z+LCxK{R+hbLP}FmpDaW?$^U&=l5Z8Bx0)xj(RA0KF%;Qg2R0(=Y{pk{NyqaU5kct1Lk z)cpq?MrQ_Pd^rifv{U)IDfI%Mz>oM+RID$|N~z{-YV9{VmW03So$U>chyO;GSi^s)rtxs1eJ|nm(UIeqd)lk{LHccR9gXpPiODAES413WtU} zBBRUllB$f(rn92pTyM@Zco&{&hp*YKQa;ei?S1lVnNG8IE8%940JrzcqSh6Xbp-EN_lEOu zb1F6yyy3iO2dVr7AwE^`Ia5A`AiGs&@(dOHWWjgTF2onhPxhOC%gkwuz0Nm!LMr(l zGvtGFhXq4~a#g{JJ{mv2_;B{zyiC#unfLf6e<_t8Aymf! zMq(-^nv25)pWhvvB<1AOMZeTUZm!}m!6$hazmlqdEmS8`@iKq%G%1hWKZ;8VNnOHqvWRE+jKdAX4C zq%>Cu#kHtwgz6Rk(EUPuoy<*mAVMApPe4^SNbyK($cOvoMwtx{$*j4jW;_@3%oH@u z)m2>L?r93w@f>w{j+)yAj}(oXPQ`7QcL?>pLgyZ#8n24r7OCP^q4^zU4+_Bq{c#T~ zxdE;2r1oMiepsq}OvrgI)2E~=oUHUo%AUcTEHqDGz9inmY+)qh>z#)nB;e4Waxq>Rq9DM`&mYs_9ZStw8g! z@YVY$T7m3uQalFcR zMafv2536zJ$cC}BW^Ex~9sC@uLD`ysb~0ZdMYHMow`N03yn-~NY*V4$SZE5+6=vip z{FjDqvEBgC##UQUMnhX|1hx{2Eh*bZ$m!&(?J#T5P`0g5GgMdZC`7}BW_KaqNvKMp zaC6PbT{A)`M}c1m=}4j2P005Gy9%?W{OsS?I5y?p)E-Ff{zB&f)V_j!{`?>*XDqJ| zMjavqhYICkn1>6^FNI-82rH6C>tz;&r_5xkSDzEvu}nX;RN<~E`HHDz~T-Ux0N z>N_dBODOIJ_hLRM1bAdUzr(y=s2)N+g1SejAI5wPbCNLZ0n8_b;%T9|4?HRidy2AW zFrNUA3-x61yx?3Q)w5F73qt+}DqciACp0e$)tTT`@Cs$G3;A29KY~9C#a{%U7FoX` zRlg?;dsmqFws6lh%03kGDMIssP)!%gKT$SSs9yu03IpF1iuZ-)Bcb{nyhGXFP=5!1 z74pw0`$S0pf%#AHF=hV}sxO7+Yw&~MJSX+HRD2;6-w5?=fhxYIYzFuW1S)F=2+2>V zogFh0>Uji*8Ra0|^ooWN*CG*|_N18~lX$fu1n_pVYEIO=l%;@q;(Ae`!ZXT$ zN*Uv^X^hzi7NLwVw;l|Z5{ktsTNW%Kq)Q9sFd@egu2&R_9-&&9G6Lgzc_COsXb6$( z)r5*Txn5f+7_BW=7t&P(XQ-?Ht$$Iz61Bw6_ypbLN!V#_oQrJ%63N`C{%|E#le_|VD2Y48?3j! z)eH{Q2T;KXLCv`Gb4Lr!F@iI#G>2gxg?X${9VrxtgX4teS3+J)GmI9tfi5SsIZf{?qqK#0zv>_TDU`9l3$ z!5LYKi=>LHFfT=2Ce&98&ADKlP+daV<={#oy+Vj42*ovm4^=8AN>$^9@;afpg^Jt2 z^_1N~*{wo#Gs>aS4XA5{w{H@HyM^i=A-`Q{?!|l%^G zIZ4Q$1dj^M?@^P5;%Q;vQ33Hj$jIUVz#nEwW!2rqp}*>{3trs6Bi*?NR;q?`_>`VVDagHOQ>@OSX7 zkOsQAj)c62m(4B|Kd2%ffH@}!g=!#b4#8<-8b)!7jxcdPA&;q;Tc`-wN=E#fUd;K0 zdO^WQM>Q!G3kd1FLN!<@7ou!&%tgTxU}+&wgnEb&^`V9e#gan4tk5hYREwd0CKRg( z!SX^qOz?5z)xuKwib6y1n6H3Z1GO4zEumT+tc^A=wl!)Su&Gdg!PmYO6(wbrP;P|T6{_ti+g3PzJHf~D z)|*KcJ5aHSP;U$xq5K79HRevjt~;WB!|%4UR5eQQLB9FfR2(WaW2v|RTqJbv7QAZG zscF&&WaguV<{)q%IEu1|g!)LKWOTZDR`A3~`Uk1%_n0pW1E0s7BIGZCkA&g_)L(_> z6);Vxze0Tqz88}H1m~xz1`N=rI)#dT!QX{+hLFvsigp&I7xfb%A1E}8i>8CX3Y0A* z6dQq6Dcek_7Qh@P)XRaj1m|mRa;b#j)bw2b+Qw4VCV=sSW;c}`u?1>d%0>ak6snrC z66^|?hG`BEilc?<7|df)N1;ZeekC|RO~de*6FKKh(lloZ`RSCMEtHH=ROf&bDLYpP z&KL6YC}SkBdR3olMMkLdlZ56zq4NN^M<|&xsKyEfGdkYJ*m)H5A))i2kWE7UUdSI4 zs%KFzqMi`Sr@`Yw@vhLFEF^ytIm>r=VJ6sTR5zNJeYMS76Jo&ZJ}60@N`nKrc|?z zkgtSVS149Qtt`~bqTUpOp9{rOU@B!9W$R&f^$+v}RJoCteF1 zY{X~b4+XpOrnnU~O;FCeoX)>e|JUCbss9E11D#ICV_NA|s>rU;B|etJGi)B0iY8F; zm@aM;*SyZl7?a6A5t`41;s?PyPooXEcn2XKA+&2^j*?1`7OGQ)?sEE6ota;g$5bPN z!Zx!9L02&ilW4~QOgu=haPGx=ekm`%@QAAyKX@^y*E9H>%nqJgiC2~2P&I!Ovbpv7 zszE|`ejytoM0ATWom`g=!}B;@TKVpOsGunHo{;XIEam-M&MM#V;CKUZ z%+J%FuE+QM;GTM|hrFGirrmGAn-=~({8JpDf1o#z^mDg62l1Fabcqj$F2|{?*-NJL z4Ob&jhYRWP!iC3T9wyYkqU=P}>B5|s^0Ljrc{1}~O4a<*>5-^oq>2lLf7iqr7&qkX$R%3*XyAo?la0_fJCS4Iy|}$lejk8+h6KQt8c7`BRvT z=DqO`l_j4E9@lfWBMPMm|!Hq1!3tPQits+c=17sp6>lUX@h zYM=*jPLoO*tm&Rd?O35*Fn$H*L`()v+MMo_q+Whni0>25dK8o4j)I|=bh6;pS)OQ4 z8I%YZfM}))T?QLcMiM+YkTN9D8K7S)2?fXd5utuDH|BgoG_O#lLa-3(r(j_r94a^y zOhY5%gX%psovx&c;p+*(&$(n7q1h61GoiDMP;D%vrQnlFI-^i~3dQb1=TIToU&s#v zBL#<>>G4waSfSlfb+J_EB5vA<=w_4G$_tV>9fyL;*UDieHG3jI8>Pwfjr^H-suS!!Kan!e6#`f2TzR(Pe! zAg~Z+AF6iCT&l*=>@Fact}2w9P==4`W5p_(&7F3jVw6zS)Y6LDMU3zm!xM$-BygdS zjuDE-P)`UA{#x}UW%y>p@XfB6Q%LU+?0uDZUr7vbyng6Nc}H4-la((jl=BPm;+XcO zhDy~-3JKm)-9rVgP_i8_Fzjc1rx55HHASA|kw-BXDeToS144 z)PX|0yU^G#!6iv?Nqkg?(>l~6sm1+pdq0uqsGr^-+gtCP;CWnrrQpo#UKAYOAv60x zmxL3!j`pfb^uRjJS}+*3CeQSSs4WB^>lD%s`3U!Xv{cX8LUtv!H(*W?e5ixhSqAj0 zP5|XY9K#i4#%ofR2|k?B``(l7WM*4au_J09)L~!`;YUX_@C=5xQFcG@Q}zU9f&MZ1 zr<5%#aB%{(6X#4qdSggpmxE+}>CDkSYqC+J5eFCmreTqOuO%drr6QRR06clxpxX13FxHuE}(% z_QbP0RU178=r6nUmtKIB;)3O&K15_Xar-zyT0rmO0qlr@X`f&p z+3BTE>C%&Aiwk*=VApilHKd}|0JoWwS$9{JD!IA3wb0?_%6A2H4)uOQz-^WvE_5#x z2Gaa{g{jkAd1x)-Hf#6tyeU;M5Y_!$$i5fK+4K!%j2St5u+uqtL#-1wb@&Arl2lK!su5d^qkJWJY>E@VT&D1b8&UoChc zTE^soPc4i265GSN=+z>+v4Aed8HRkuQv8tqMo6sT3_fut6%Y}GBXnKsiw@@%+{*2K z@qMIxPN6qmc;|S)J?_*mGjL(s44sFltaGs7+5hMWE;&wc8qxS@Df_nGYaX0H#qnIy zFD!$r8}Q5oxVqV?LiB5)bD}WoJj38JKJHm6^N|_Zc~XvXnv+q-2D`Zy)PB$7{gSt-W@cjDR!-$5vdjl0W3f}7x zP2iI80RK5URTl?Wq4;8FC8;THS6P=<>Ju6O=O%63^54sA?-7FWycQQb!jFx9M}?j3 zyD%pS0Zm5!u;73#pz#PE6+C$#JcCJFl0JcYL>T;{kkK$E*ZZRhy)=>8ODgO9k=o~k z_VmQJQ26MRjfZ$9aK!Nvau-%;_65PdF$y}UF2{gU?Y2Vu?$=ro&oP(Sc8 z9RCoXKj;8ILIbIt52RoLKsOuo3C?SpErR-~5HBSJLof$}CBVW$xDaZX&~_)wNx4-H zSCGnohPk|u5oTmG(%Fh&Rj{()PcBZQ}6ULZIzYC2Y`dy(LF*MmRasFVGM>n<09OR2pCbsc3_ z3e|5ZyPC4`LiaLE!oGYW>Sn>y=^0&ba64spqV5vnyTQGf4+1)7Pof9+OGS@Rc8`!f zEX0ptP7-<^zmGP6NkJeSZzob1$6aUvDZhq(Z-6TKj6PQizMc8Q|nj^N!%0im>qe71X@ zKe?F9HqmOIln(}}3AD4p0KX|%7PW*BFD;ZqF^6H|P_?IqE-&SY@EnIKTMhGPsI|cA zLc9uC6_ZHayO^>esC9&1V)lGpAzM#y^qyv@4Jlh+aI%vqmnt@)Y;(%C5aO*+1&RPa zBi=8G_q_t!Ia@v7?er+Eb60WQ4uajhU{fyM3G4!P7V=*R@d#iia5!bV3Bg`~Q3I!S z4R%KzNEzb?@xkB_OglS7CmvJCMoM|GFgOVHOQ9EkGB`r;dG9_9H8@gc7a!A^y1aYJ z+swUtD%eOB*% zTZQOm%5DJH3h7O#yM_E76r&_|tesfQSz{f^c@tOmfNG;h1dlKW_i^zgA$Sxu8TAx+ zOz1q1BKGV2L5Lq0vS(2*2;nP2@EUkoXiuwu1NEYiy-LMj1aAP#UzhTPbnuRpGb(vP z+6VOo?^5=e;KZ`gM_l}#ki8G43em?x@PQEj3ph5Ij`}C~x8Q-EtG<*f2pVQ3oAt(i zr%nw1!^K~NPq}1<;A}lz9CB~$4|}BIAE+Hb*_@c65DY{yQslk=!B3>pj?f=dHV+si zI00=oKjwl$oKm&`YF^3)qZUFfE;zYburw+Wsy-@)3el335opKDpcX?dFJ!}nd==DE zg2QkJvYk~iR}i{u2=Qu|YYEZnsFf*O1hqbjm_1li$ks)z1lALLa7mV9W?*e0`#IP^ zaBhMP3(PHqU~{l3<~Bn3g}$|LE2(@VDoP>l3fZ{g@A+4g&WH*-=90A)z@^@Z53ytW@%}kpCXM zEc6l{22;Qb;3FaW0QFZPdqo&LP3V3qEnBSgo*cmB%4vju-uQ1?_CQs7n~0&TSY24SMS$u*V}|zhQgf7 z)+hXSh-ULqlre@EFnpJlfCx7@0vv$JkX~?%5Fd*=O6ZJ6^`lNeF<6tGE_h-%KLwMq zn>OY=7j?dno`*UaysD2DjzOIyB=?~n0QU$!4%qo^oq-{Kn2JZKAaac!6uOfr`#pF} z$esmHfTzLZ;9Vh@EO_Uir-QR6sd!HCE;aA`^LfH;^nQmb(m91_ZZ091Pi7aqtHPNY zf_Y`eso*m)qmERUP`_e8GFpU+#e~i@uqfujg7ff2Kb0y1As$S{P+``&!@&^BmK3~m zqn+zrUS__!5Uowc8bW6s%2pGCm4t9z!Mg^Fm8HBHDE_%rv=o>sl8?YnT8FYngC!za-a5_`Ep3Q9!GaimPLg?%%v^gO5 zkn(J9@DsU0p3Mz+Q<)Dq3HFxC4i-F-8;q3lDaRfW@d3x4$aS8;{4lQDg;y|=I^#ps z-nx;T#~~Yu(tooBAB*|yQf;x+ZYAT1$PO-+E$7(k?jtkWU2tZt=5VRb@!$j@KUQcC6Fe-Eoi3I13w@XI&c76r%>iGDlWIAI zaCI`TU~D9q16)Y$C4%#5Mc1RQ6!IH{E+dtl_k?!G+ys@iBPUmJ-E>u?w@HQfV%{Ol z8oY?c%j|iO+Pj2ml90WxSIio+@TLQwq!L`K3Xf6b*Ylm>R-Z3}vIlVUhlMqkk zT^N8!{vs8M4j42fPQ5+s|)44s{6^j~7DR-;ifIvzL1(CeEzAQhT6nx`98dEO-;( zK-y1?zeC{@hTi~OzY^Ea=L{s@O3g~*)LoSOWl15xzsi>rQhX%uo3&FE;>ncwFV4mk zPS9G4`z8IvZ+yT$tOJi0g?(E#pFTBHhRqM1!*fHM*A zi)oL7rpg{gmP_Tsga)6XpwaTK{qRFwd}a@|v|(OCHf5AlJkue_Y1h1PtZO%*l$qiN z6u1FiAJ(Cn^Gr=}u9T-k=47_dt0y}2*x6%3MDOe=zxqkke!?ei80l-H=oYsg&pbLTzsJ5aru&-DWkb|*7mHDst*@J2JGWQ1oubIQ{)5fyCd|S`c(V2 z&AvpJB(&Kc=pIAU+~yjZ*)%)NP)1uE(<(c!PusPEzQt@y@&2 zW(m4e*OgBS`6EI*PJ%nhu5bP>+4!}HEh;azK6EitN zs^T81d^h0+ILqcN55NgjSL#>AKs#=#DyjadQttOdy8N6j-{*XXboric=)5Bpa-(~? zq4SDiq`qD^W^&mImI zJZkS`mEKw0<|Xc`qK6K=q3;ex2yM#gqond*VbVosJTB>FLNl{t?t4mR;2}{uTyJ1% z2QC-TR~ODHbm&sMYhtb>^z0x6bd}*RQAeTZAUh{x(j)d>OxZ<%ey|KWV&crjjr=BS)OX!}e z4}{l7 zV+O5Rxr@;3DP+GBnYo6itS&|h^T5>s;%%Mx#-jsIDdE=9NRhHf;bK-8?R zTeuIT8d|u77H;5FsgTH~poJ^ml=7@*Hk(;;{o)q9}bpEvvf1ub0XA42qu z%!#yh-HB43Wc3QkkXElv={K|03kYgTnm*@F7)aCSg)yEj^~PmyFD{8);x&Yju*DmG z$LEw0tmHcgo)GNrBIU_HXWb16Tl%)Ami8|r?ygT0eDJ*;2cHsHGyBzXbiy=NLvt80 z0ToRXJay!$o|;G`8=$W}A`;1nIvjtLw2A$z3MIisxPcIFj!Em-f0*D=_K4;%8V9bR zj1l$tUZEr`@HyJemr@~)e}KC`t4;K-Bah&Emr&fR?X%sA)?9kz+ih?2CZ#&3Kc{N zcBsbF(0Z&dK1r$?BQ!L*;bTHgYuh|61dj{(WWmFC@pF_huF^+aT+kM;eTOh>(?)wx zRZQ9JU=IDNNh;+$UT&!y+UI6LA)%2@-@;rJbAG{VcAQ4V5r$LPvpOVbS2 z8|2(M?KU3%9XX%0`W3Y&3K3-mW!{!CgB~KCqzVrbwUN!+m<+i1^Er=K>ri>L0&gkw zxB%WwHm@%3E-7T(aP9fnW2EX(aLCxE9h*5SnefMbYCud`&8P46KjBK0ie~HVqxbW{ zS3X#|v#ZQ-Z~e7)snj7dorN|ZfuhfIjuaoK+y;e5tE@Pj3VOfrcwt9+Kc}ZH_%^)8 zzoPf+?H2}~B_x;fna`6d=m*;fk}fbjQ)THfLNiA2ke=5vmGpz<#X>z!xWRG7C0ufa zkP%<*b)A$`*1B(WhLV9e`Oc12UdnYdd&Kf4ndx-BthioZgx4)q_o^(UN1S+zR5f1c zdr*k)!hBfB-7Q|Dm-P{)*7S{Ds8rBFdU?{UthNOmWJrG*{86c#P zBgJ%@?V_YNxa7}5PDT6cT&kg~?9x^Gq>?tf z>~37LtKbY$IsIipe;In5dT%Ljrz!S95lCc5f@6flT`Ik4hmfK;UvR%V=1QqHP2DY0 zPTb(+unnDSPUo7k#G~`Fki0_KOM(-;PJ4|CB9ZW8A#sQM6}9xbK8<$bcQWhwWIBJH z7cis@^YzjR52WjLV$`HYl|rc{lS0~p-%B)apEh6F1yy>oo7;4y&WR?KUK zzT1V2F52_Xo@0*QkXinTvJZviBO#~nF22V6yU+>rlVx)V`CNi?x8-w7d0SA?E9IS6 z-F2jzm4tw9JJ?R}iJ2Z)DCxlC1BK4nLUO3^KOKyj-%Tw&yLY2zqouO@xcDK#yHUF| zmhR&V`uOBo!9#i>y?x@C>3Jz{O!6L7ABS1H-=C(6`W4~lUkTNxf*0^tbpFWz-G2_N z>;V+B$@CzHJ%AX8py*XuNR;IRM;a#TTrozkng5HbRw=nHcD{D&tg}p_z1xnKOLdP$54xZ&~7jtEft(a*>QrM zgzniWI|(OB<>w1N4%2gn4Z+!|52!4|aVWwNGoKwi(5sG<)44=WPV!hvBiFv8Taqw(kLD%6azgZhS+rSRTA;fX; z&d&0uQuSb=9i$v8l`Ku|5XzPWeP9X7mIrGHZLqhRRJx{6tR#4^LWP$R;$>ub8QF$H zL;&cqO*O|Puo)nh6|p% z3-+J__oMYZc9ZfMmhQWg3#d3$m^CpM?XBO)%ZS~-Ik%U)cOL-RdzNYwda!JBFp`Vu z#xlAwM{*fmmY3xAY@>>pUc(McOdsGz-$Op}beZADLjN$eO+M|*!HV0?4r475OB$^q*cUZ;9(GxG7Z$NoyVi(_t9Z~pY|0iVX>ZL0CX`jZ|G^a|_{ z$00seNbnwd4#UKQicb>)90$LtNBv^H*z646{s0u;ZafZL4m|#MrIZ(&w`-zjcKIG= z_V!ax?|ED=9IuOe>DfbmneYiArl0l(ztB!4y>m8I@JO`B=G+~7Y%Y7Bi@%_jAvlk| z#dN9edpzFMp80nHm++(b$l>@XDd)}eFB8*jwg(8)PI~1{Yh65N@t{gQ=wDmLH=*ilFrpNvNcUNjm{qwE_Y^HdpMXU2{06PKN7z#&=9 z{oHqlP!S*bq`!85GA)CLe8zJh1aAo)hB3<5rF^bimyu5|xk+fazjJeanl6d_rfvlJ z$M{q_dl|j%ll`OEb>>#~sbJ*|C|uKa!^~ZnZwT#iNKf%D41xI6qik9JS)O>^j8A}T z<)Mg>Mj<{E(<2F<)5NiH8{v({{fs31=wvU(3cTjdi`{$}OyXez{0*;?3i!-Epe>+f zaIn0`(fTYgy;@8+mhkV*_!0xU7$>xK4(ATx(!kvXCrWNZHv*0sJgd&idOF_WoM*^P zX=F;?#Zjt9`25xN4(IQV5Ryw&8xSgVXk!DK*Y-%QF;daBLiZY>yh61p&1;)q`6-np z&j_8XR5py?GUjJ2`9b5iQTne<#A!FV;raDbTdbmrfG;+mE_g4uCyT?m^bHN1TWCC# zy^vIlv*^=Q;{&9ovo12Y5#X<-O9>uL@!+xtlDnJf6O;=G*@vp#7*}J)D4896iG-!x;bnofzOpWgfFaT zSG|=}3(P%6s!LPVbvuNA5W2VLU+Hk&nG3vksoFzt8vD+s3+&oK;~^fhv@UjTf|W+d z^p26H&|9?~8vp2j6O4MBOn0JG#8VsIB-HN;?fB&Fx~|{j3|r{^+ARs&Nwpgh8p?)a z?hf_>2MIsg8gRJGz)ShhqV{ae3sJuT*MV!mUEpr;Fn9oXZT!iu%;j%)zDtisodQ{M4#2MHQY%gRx3GFiHUr@Fq<_OeYs6$Z)gQJCZ zk@0CLzV_g3DtI)0v>x~xOrDh3t9$Q|3hxJxP&P>j{($m&+gC8XnD!mYreXdI^-u6` z%pUy|@tj~F=m`A_qLu}#2-zB_)r58lXpY)OXxDAhAjI1WJ+yjWb>Lhy9d0-;{d4z} zPf~4gHDxyddZGGgA@;D+s(hd;RWZh^Ea>B%F=ht0nb!e?bUPl2nSp2NwNV~iDGrg@ zo?D6+bkeDUy~y-3sRr++xnHj>uA_qfqnR$#SyU&Cmue>HZ$$JY%w5I723tbwMup$eV0isd^{D zBlM{U=SNZd3&ERmqMfA@I+nrv3pv9M-hdM^*pM72bVm!rmebGUO``R=GMm$c>H@)I z56wkV#d$*CILa;&s+pq@@f9*th9bHX1s@9TT`tXoTz4-O_Xx!#;jsIJL64#y7itD7 zd>UTNXhl3(@aZ%G8%;{aEy_2jcpF8xQ%)6T9e9h z6Sh@ZcQY>8M)25(w@3Ww2$)e+>?@>u3Za)q>@QU?Xi_p>lG9b5bc7HcFL+;qGw5X( z$aHpuoZ%B^N65xWwb>CSNafcFDIQ)lb6h2+>&WSV!iQ0lh2$|IqunT97MhoY{0$*| zRp`7ZB!3cuDMG~1OU%%V7fpp9OLZB9aTd3XPAOu&RD0q|s0YHQg?Hvb^$PjCU{RsF zypSx6xiV@Ip3cE;W{ORP&UQkw5o$}JyNTdcAYR}d-Ax%jQboKF-6wb*cXl&n zPYdzy0bXu9u0nuN?JG3j3Ly?g!+?gDO?yD2A1}ir)(yUePbz6fOL@U_O^@gt-OYI@ zJdd0Jp-V5>M_-%cgLw5*Jqh)g(7Y%FPYBi1f=>;|pTs;(@M7eUrmuDL-cgxnE?!Ng zJOGi=943oWLBP=jU!TQr8~6Umh1F4Ug6^0+ie!^%k{E02hMcf;5Ods z9w8quOqe7%)y)leN;UY;#gjty3>8lZ5w;S$iLH+T3PN7{fvo@c_k=zzir)??(hY0zBRO}<9M+wzolpQWao;5lX z^Ay3YXf!MK8?Um?L~3a^iv%#2)S zv6j&35u$T-iQBboTbUlH^=z(NIM3XA0gc_al&~u87s_*mnkMZ&nzZIZ!Q-qoty%Rh zWp@e_Xufj7+$l6)&D&CQzb?eIVQn^-*`=H}&kaDZpiH-B(KId@EYy8MH3YRJWwa5_ zTIb|jKBdxY>Ac7;T~D=M|KeHIbTR$iWp-9sPEg&;kV?)tX0;D+t9LhLdkbwcxeukH zidsfkN}5AwVDMmOJ9$b2HDxcp-CYE)&ad@%W(#(gS?tX(y$2PzrYVh9=!T5w-RB^9 z5lrHC?Fef37s|th=6K=n{lfSYgpOOYUr|Am<^j`&cFpVh*1Jp}!%O-c+j|<&%VDC; zRpFy5qmy-UN#xa>2`&T|gK@%%m!K{ee1>Iyzh1V(^)gepgtYwijlys5RYgU>)=U&U zpZD!mm^7eX^_QNiOX3NXO_6ejFsB3?F|(cQT(56v)`($p3m4xi_>6*l0&no3%yI(X zBo4UGBWT{|{T`MXUW39P?-DsQZet(iy2*fs*2iI{w6UAgyav|`_R%Netv7!ZJYL+; z?k0rI+%lOtGm{kqNU77AQBNEEn3tzBfm0#wBy3wiL>3g_KU|gdGK+?b+-g z<)xU-2&s4!=5Ao5Q0yu=BY}?s_qhOnCjzSX<&yn`WN*|yU{7$kkRK(KM+oV0-~_>0 z{wo}%=6E4LR(R!C!Vv_w)o5YNNkU5B=uI2d=~8c>Avlg|&XLLptBSFd5mq^(s?L|{ zo`*S3s4qrcD)=Kdu&w?cX~730BW;0iEN2ya3Wd4;zL>8(O^vk>1XI8(pZOq6uT z&Ji`9Xe|1j(4jj{CkbEPC;a_sAto;S@(H1N9MDe}&j|5k%s+q^gzj^wKZ2LQ8{lmr zn1-T1Z>EE(;5G0kA%7qB5%{Z6e-LoQYX!?hAs#=BGmbyxt&P z43qHisKKbkg>nhh(n2*96$@F9;A!$5mZyx74(HNq){t4Q#w9n zYay*LcMv+I5Y~b>=R5OPFkEJ`n@|&~R(nxPsOl8-74d4bpHT0Q8VT^PA|lu30O5DP z6h1i;^H`zA@k(&K(&GdtnRkBq`~+%=aGh1Y8G|}m$VUqoj>W_`YxWT0(}nsB%u|J7 zC!)>)7YN0L!ua!17gKf-xD;Fl&IOl%aR4{3xdL1%R1;7*e93i~w+O}clo3E@9(cPM zbr%&kP;ooBM~H3`vb%-wTH&O7h0dKq^N=tr0eo|x%=l3-S*V{9+JuBpNaZg8oXRd? zc=IwK0&iXggyGriLh@&!c#E|Ss1ty5oc9UEP@%$2cFwMFF{yfaDi#(RT<2&-AzuNLp@V7> z)JkAEur_7u2?H{rTt^6hE;Ji}4TXaXA=+GsHx<&YgN?l@Q}s0(U=Dbo%>Kn zfrkXIv`cTsd=@+neh*$2dY%``DVQ&Sj|4Bhul|bp3YZ4I655%)?=klS{{g3f+0-mK zd$703IFRs?k#a6oG=soEA^(<(SCA?fqHH77swiTO++!#N9Q7)c4Wn#1urcN)U^l(N zjB|xKKm0$ey?3@CV>tee6fL;UIT0k)GSJOgI2!tNM5IQ7;B!mC~fA8~Z{kU0K-}?UgmY1KkXGTX?=SZ5_d(WOd!V`U} z>*6NpVUu{f*k%h!jv(=xGrJC)u{_2mah~$(P)Wr&p*}{)j~1%a0X`Y0D6dYDRG&%l z1aK_Cl&NsmG{=KK>IyzP4(V>8bFUEFyupi8kEdY*I3GMn-2+0!oYD_Z3cV@RJt8!Z zgQviw;5DH)oN?v}iq8U!r0ez+rePXIKT)d_j>oZzt+!_;Nu61RW_F>QAk6?~)XOw& z4oN*cCs7cJl!kc#4xxr=op?c^GZ)4Ag>*R5kdp`l%NfQUg5sdo6niUQgod98o}_M; zrMSG{{Ft4^D6T1V7Drk~Xd_#vN@`Ofb=xYj#Rx2xd2J-tA@^-%p%b3*W0Cd}9D>qd#CcxaNxtpQ`T@Hv z#dIrnLE25|?kL3DfxQLKB_#Vv$}iLjywobeLhBqYR7VNZA3+h5EIn4RN#+2H6q77I zow|!9m8VI{vBA;{1h1_c$}M-^rK%SohA+xC=CH=l1d>mmOOX8nSa|Ic-*jHXNf37wEtd z+Hm!mFbbtNM(K^whEr7CNdKmDs;V@W)F!AxkBw$kF`kpwxsm2WLP_nRhUR@jgx+Zl z)VtbyPo&-|sw+_{s}+&Z9aHqlY(pVIJFM2F4(-sHoWgcAptPlj3h{wRsBa~@*-R*7 z6`EGN(gID(>#-|zDQ71t(V%*$N6tDFqZBzE(Gn;?t+Ioj)20PN&xz4<64V)I^{GCl zh&JL>Jl0U!neW+n>iPxGDpU(1p-edUdo(~R+C!@|pgj}|2+?REE(LE_QZj6(KMvL& znA3ZyV_^P&8<(1UlPSPS0QBRg19?+77fZ0sH_6sH45#O`TA z$~agu1ZE6@>G6U$j&1khcu>Wdv8tYj=Jo)w&`dHl(e9M|Fj&C4xn z#xif??0Acz!K)M0;Jhgn<5tdSW&dBv;N{4vb|Ql@%1Ke`5lBA{N{*aL8F3sw<*@yd zai$GDU|<=Fq3ST4#AB#qOsVYp+fma01X5)OaLBfTCqW#r;c#~+W6rPPvzH4?ET^Y# zIgF%|ai$Hq8Kb+3q%t)mc-L!!IIhrF*DopX%xSU=9_vBh=U8Wwh5!RKq;{&dt6$m{)qb^dU(X zal5TEco)}*aWLAQLk<+Y3@<-Ohy2fqg7k2;+KZTvm*j+}*_G6JwDK7BJ|CN;x(N(L z-P;7m4-I2D$r(vJLmtuJSM<+bSDwr&DW~&|b{6{Sfum!D#GUFyia0dd&=B?7r{Y_ z)qavP2kMgGQ}oBs?X3C=eYPDE_Sez=qdUT0_Zaj)kY&*}rtf+|^Zw-SHz z4^>RjC-c_@-Y+>CRp(#BaV=pk)j5%FH9x<>>Ov<+T3c|c`V{Y~6QEmUX8rq6O8fwm85W+FvwXlKHI~T zX&01nL!C=LTt+K*D|(hX#w|x%=L_r1)lc~wbh#P+?1VqrhF;wz$>~s?X`q7+mz*f{ zPZI1yamclU3gc-ybH!z(Xc>X8Ki(HKMv@-7F43k8ymQ^ti5|dX!7^{dEWRrixxz zA2E6ci5}CxWSetj!`!P#4mDG5&XZpKygIYcAJM%;Kx&FBGJ$Oy4 zXR4inKYy6>Ju38`;1l$E4*FSwp|ZI2vx0l>0%y4{3_vY~u05NY8+`g#LGtaAV}m;)RbX z(qrZ`>sK52PEtI#qzcc3V=CkMCHXZNjqkw$lU@+uHKR3Fmgkw;Y|aeyIqyd`Nl0%H z0&^Y3`$%ZgZJu7{CZd`3!kuO#T-jWj_hj}yG+EIMCOxK9|zIOyc2 zy*(w_V(CYXZ+9hmTatsSi;Uw^p*s%}V~=+#vHQ3ju42G*-1~`;EG4vS-Ik@emSD$k z(WL=Rbzn>CrV5TR9N0lpwX@)t-Ko;@{Z)*4#l2|g-@Kvq7@;~-=))N89HiFd=im@< zIET!L#JCWnnU~iKHqtXj14pEUNjk)uM;jD^0@NDrpXiY82SPGgb?pX*w{SjQCdb1S zjG;BXcTC4^$6NNjq~1i1J3!A>hSlbI#BjbOZzfib=8y9)+Fc$O# zccleCtcT-(9nkEiE48xN*;U0ZMt|e((4#Yhb;sT2wvr-x%xG_pP=NwUd(Y=mAwmvgDyovXRt>-9WTk*f10Z$g{uTB zd~?#(&vdPj@(gu(hC1}}0kvYmNrIj3eUl~CKR#0Rr8>kzLjH~Uy6@8pC_kFdxwStx%ysbr`5@02b)f z8!?R43}^|%Sn`nSvacmM1S^ve1b!u(ve6@3XX${mzI<*C8P_|unbsH=q)Fd1Vd%$j=dEqt}3L=QaJsq zL!i1V)4H1AIH)dTce9R=uZfg{E?5_=FIew%`lW*5J;R>v{#?il!CSj@MoS7C2@Z>L ztnT)kP`9Pf+e+{xNW6ul23;T-BXoD7I2LR#bhZ|<%>`$s=xrw{#!I*7o+IB2RFl;m6%oueehM+mbXCiIRGUKl4# zK2B)H3(<)}aVo`Agq_YpB66xYS*XvYI6(np2zNum3^(EFVbqhv+D7qVxmJ54BF6ub+I zSHpxCRCKIW{U=G~s~qyK;C(>{-$DA21{AdJYZRvn-g~9@nWXC&^Ezm5y^jTtex1Kb zavI>yUugZ5hJOmZPlWPo!9iHvZzUDq2yOh;G)bL*3EpR=HF>6w)Eb1Gc`Juwm6$>C zEP}UKnd})X^u#ufdrmcU(HI?n)tN_9K8N7lRZ{Hk=Eq5{<~ja&Lft}OK(Knb!2*(! zg{i~)RxBcTMywersf+pLm5$3TDru{wgl1`>S{bY)I3}xDRZ{P#LcM~}L0xrV)`6=? z>W&by)r3iF2%Xi11`l783t=6hU`nkigx=cJttX^E7djgXD|Q911$A^*JK=`)-edl) zX@n9FZe0o9NVU6#q+TsJI;-9iX$PUh>|EGhuzRe#J`KAF)gD5M*U?Me*uhA`}+` ztmEE=LQND`cOudiLgzA}cc~Ch5}L_Ejwdi<`mwo2=-vo!2R8}c7p1vc(t|e$j^gUv zA*sGaDDDzEw;|mxeMCr}6P$0ed7iq*1@C;4y(r0R ztGuGB_@j!QSB2y?@CvPO2sK83=N+L9?|P5oM?(H*>OK&fj|H#1YQwvxs_5+1&HIu% zp9&{`B{aAW((i=sH$wFv;iKvL^x3~kYU94XmXv)abfyUf#*|~c(r>BzL5QcsOP3QhtPBc?_*M9oOOqTp9ooow1|+55Xu1| zU6i_!LcX{VMhVSAU@0M8LZ}xL+E}nt%L&SMQjui9cb9Vv_=L+%pLUad*oGPUE2;RQ@;Bk_A z`v|sSha$zghp5hJhLWcwrOycV0D0q*^hFhycupwZ5qi%H>Brzhik}NkGc@3BuwNmTBw!~x^oMi zC6Ta?x_E%Hk94Z_&l1LMpkltR5Mx01`h*7a+NN~6f+R0y8Sx9GorH1=p@Vr{VO~3W ztPLF7Tg8CAl^r2?ZHx25rsGs}2w8Vfl9%;)*1UJ5ik>y^oFXZ*1%860=1g#`kenr? zSmi_0>5eE{WITu5E%fdcy4ZAHH4`5vDPXwgnCp%xD<78Ru(B@J`|?wS@=3vK1$)m( zs_?nBv1N}*3Xf8JP3R71^m_v7S)p^Au*6%!`+Ew5nEFHW@!mHLDzB-&R{&a2|k41PLN#d?%5VL&KG z2GRS|CJI9>3bqSZYde3y#J z75W~@2P&r6gI+}Fne@rFdoWCL%#3(B!4^ifvZQFVkfG#z)q=N6OpjHu8U!f4>6J+6 zqSYe+&9eF4bN!MbFGtr%-NjIb4B zqf@Cy41Coegm`AYM~Cm`zWt|?GJ55V?$y0$LI3AouW?^@uZr`~xs}uFhwu(Z6`ex2 zPbezE>BKx?p5Z7fdACYlrf3Es<+1fvJK4&T;?;y|BP5=tl;@y2km7|xeX&qn#9#Zh zBu_lptrTJTrFlLWkSXq;GJx19F( zt1X)%c!%Uk4+z2sJiSG*$4H1&*%^m>D)CX2M>G7Zv7NTBw#0qE!U1>F?pJ z?(QVSy9gC}cCi=5u|fx(+6(pr_b5eE^)A-lXD|P~ip7uWmS?4tS@Z?1oYa0v&?DOL z6_g3@6H=iIc-OK4G=Rzj{qH2TV?4vV)025mkg}hjj^VgiPw@1uhfgocj<=)k2q8O^ zLwKVcMeWpA9Y#85Z5qFzByXr;cW*M4qPs}CLwg{*dq~Rn(;s&Vo55=&#h>d7KJ_Y> zwm82oJy)C1VkJp!p0-j_S;)jCae5 zx;wW5Z9PRFPtn2?l~l!I;XSo_37&p)W&pufa(_>5S%qJ<`?&3|N3o7J>Iv9 z?#qt&-WXc*Ig@g zCkmbG!1cnWe^zTUSyDAg_~;7ZXxy&Ni9&RxiUobFSC97IQC+xM#qO;_k0)o{J0)e4 zX!wn!_&%YXf5Vg7nL?4?qMZbOg1U#PdsL`?FO&}n`#dIeuGMipIu!3IJ~O z>`~Wa$^t5eg{d1M4xuI~W!e>JTkW?`SqLcyt8GCUK>b%MPR z*%V3chw^7R>+5ktol0*UkTo~D#FySG4O577ufMxtVhaepW2N|QP4bF z+L=$1!=`P4R~Y1um<~%ws%=@%FUhN{3T)@j0>TZL(xDQP(L%F<5Hmc5dxb$1xnduo zzFR2i`m#fXHqHGrlAMvH!Yn<7ajSVp2ppwC|44a)sa>a93kY;Y};@3Vydfi z!NDHQT9TaVFkf3zZ(|{BM%_Ys=?3SNv?U5;i2_+|C4}b%CvM2LmgET2lEH9^U4;ZEJp^kQV!K2m|SMjEJR&&x<+ka21=2goLrop&&hU zQBV1GZ;;fXgYVLXCusFKTD{{ktkqvf=bO^`Mk7HkIMOa3Eh$@)*YB^AiZ8(5z_&s~ zC)0+IP1N65g097(5n+BwVJV@ZYsoef+Qf0YN{aRsit&QiTr~70(XB%GHxh2X9Oqu- z_k0*vil;4KNT_&!TOS#(?k&8;(HcUVz-=Q*jvp#uu^htULYHU5_JT7hIt1WzZc4&0?py*DdQQBH zP@(5k+^yP1!_ks5v=-;LO~*=dx{LHweb$r3>1C>O6st4%#3&O1WulxSBv*3W6CCmo zb=Rm^JWIpnk{l!!p#eBZ%oC;M`?NB~JH?K-eM}jDy(TGLOj5Zp#pMOBKZ+SXotvPz zO;U$(YtsFK$DS^8J0*8No=NwpmvFZ*B)p6}<~i`TPOZQFL^U`HGp3g>UkBXZhnYAh28PzJh zrgntdG`fPmxS2^v=MgeLK0R?V}MiaP`ecfAr>>G7l_FEysPH969|1QZXlWQI>yRMw6CgVMtg8dOOzE$%gEs5mkk6tgv ziIrd=RE1D>g>)l|+`Mdz5bY!s*alu^S#2XJ-9yNT4M>j?yuxzf<0N@;r7eOsGs>x| zbDopxN=adoP+$iHrsuuPvc5%9g+<`(VooeJc&CcZ-9kSz>D?EE{4K%z>=l>*1v-D5 z8e}$ZBkI0G;ERP+tcC;nXIlwQA{MQnVzwe+U`{p`;;xXcD^yzu(I(XGAY_cwoxOz_ z4izf2|6))`QT%&n3h_CDQ;bD8Q61aZy9Vi6!84ROCV;a>75FoWJqXs5+YP= ztJC30>K>s;&uZtRcZGGhagTw@F^k?m&vOnLI&1&3LczEd^VU}Ao#onq-Yl}piMBb1 z2Q;+J#G~3&No@k;J0z8;l2K1+gA^HYGJ5K1yzIpoN%h`>bMeQ#`@MsO6yIijgpl#t zhhwSpYma&v^Tww$3dwmKasjOu0`yM5`_=W5oFh4745;Y-vq{1*hS`!quA&#H=>Q5w zU5AU657Y1{b&m_qgca;l_=Ae+%Ye~2ra$m5at`mx>5F^65h6O|F8x9CB?tcn&>ys^ z1W!_fT@feq?mJObF&}Tr5<)^xoh>UwxD&$4fKI;evc27U*fe}Li6`&7rX>kdW?{w42uG$6zyg&{j2SwKbSF9~OG z$oWDS?IvKZmyDOyAwu*F(sP2-raBzD`q3({zE^{nHP`4C-I?{gcxs{iRz;iP<%+6v z@T)_gll4>#+pBebZ0vw}UGeVQymp51>NFM0Q^1)*I00a0%!=8ZVQaJ-a-zBn&{0%R z3DIjpj_DDerS4?GOOsRUX0xhT&n`HnMmdKh2SJA)JCq9b&1;c+SjWk5it`H5NWoK= z&W%yg(>Qy2u?7um0=k=w?#2#4XQZm5`8Q^T~dCrq(Il_ z^*voQ9>?^yYcA*sJ@Zr333^Miqv#l8cdD0gf=h*nj?w0vr$@KCM#X@KxtJ*M_Dxq_ zC&@Wm_oIt+n6A?mb|$Ie6cp0l#gd{;C3WdkJ-bxXi#Bwx_BuNc_~`dl*ST4B>0QE5 z&cbAp8mx0=SMXfjr`DlNg}o^p?7kR{%#pmEM-5=f(1k~;(gF=JqvtPC2P3+FCo?QRP_h0*@SdU-qk+BHF+)O)w%$A~cw^D*A&N%{ z1;d16f1L)T{I`nvS3>en!5b?(7y9}Cpva&UeM#9{T=M>7h1pC5=QXMt}s`DZ)r#eg-yn2fW^#~d;+>?dD z{6dANyk=C38P&Q=3d!O~OAF~p!EwIc+^t?t#SUX$XGI~P0~d^b-BkrAXHR}6DOv+C zB6{g%gqqx}CFGc;#p*(|j$nU#&3KuvFU0E#34^BNe8YN@x;e!{$UUUuh;M!_BpV80 z1EIIEkZ%gmy_3z5YS0MLFN7Y0@EluG+(F291X~H+Ed-~B_gr*ujEYv-v#ll7V`<%0 z@LK(BJ6ajLJ?HA6;4>J&n_qIs-a@jc5bY+Edm-&Z-R=~35t@A|?k7b13;BUUc976_ zu;9ci5xPKnG&o+!F%SY;!NG?J@!=Ft5OOTT6rG_SCtPuy&>Js!tJxUGTjz9&X9&r8 zNT&#goGNtB6rz)b<}ATE2b`-oJ)h#aLVC6^(}hCk0-^qukY6m67YV(qh3FdUCJNqV zBLB6d_)4KWNpL>K`Z7tjSgPMhDsL3JCkdX{sBWh9R*KgP=`BKeJH^|O?m)Uvh_4eS zJV5ataF>wY5AGD22dSGP?02saJwfp)fCaSJ!@_<~Q+!-V9}}FsF~31l`HT?#j=JZC z`+J}Pvc6?!jGd_~CL1TRqc2GSpd>`y{?RjB_g^t}h(qV6Lhe^-b;M0!W4 z-={bg>184NOc;DkC_fO|6p(+FlzajHLc^y*`neEZ7rJi?^_N1MP2&?uy?+Y%SKw=* z`ay`E6rB0r>o1dURP0Ry{}Phv^nlo%U{kOgsTigg(m(@7VLk)JSm?}7u^(v`q5MuK z=-@r-pOv~yaF|ASE~GhyYHp-C1Z$g~Kk6>1qV>*vUP(Qa&-^)^szL+p3jNOC8#4wLH?I!dy!U^~zvrp|g^ZEF+XZ z6Y`%@hnCyLu5JFUYjJXo6Go^Q))104g&b|TGfLQgHQ|a?1xG-HTvEA~5U)+$IzlMG zdP2F8kpEohp*63I{#-D4JJvZ`7ij~b#+4JHPUo8=p-y)i!I>zNo+RfVinpTGdiIu* z;%$X|8?ZGEW01BJ!VX|p>b4gg#?;+KQfEh@+(XFs2m69Oh0b1rgP;R8`)d0L^+Cct zhY9)N;9#L=C)**CiX#N44|f(zheHo#u}qFuYxgJ)IZnt2h3X`vlZ6P|pu$z>d>K#f zEUB0v)Mp5`4T{r|&IULPA}j~*_TWU9181t(oF|MrR|w|_^{)k66TR~#^)9D)iI80k zuB3RDP+ur?E)v?5mlKh$5W3hO^;JTCJ(wiKzY(fygzn9P4U^(lN%>7ea-&dOCxqL< z)xvpq2>C67qo|`BXtDWUJT z6dw_?r-kTQ@VHR^PRO4DFM#KT=q03=kscGARjPSaQu-qJy->d;u(vGb7S$LP&+aIVmPWJuCP@2Rru2S+u%ysjf2*hhR%~=0%!YXs{}K z^HDckNEf6o6S5IPJV0@z&|RG3qJjgr>xCrM%Lw@jLbQ}nE+Kdod%?_9zN`>dMp{~^ zR-(8n#pQ+WT1YlpnYVHXcd{f6g%GVNBtH{UPlDuXc8wp_xAzDx9tP2{!(`W4*_*N=g_y`FNGwN~d%^<0Z z3#857kV*0kVCr}Q=0BWOv|2!tqrAIwN$M;ptgc*Y#eKvIB+IU%U?u=L+fmLhC-pcjIXA=s8KzB#PM1PRQ>l;9@mhbGD|? ztSzLd`#m)7Zoj@@7e%v5C3#I(#%K`J@8&NFqxTdtp7!`?!4KxAezghkX$Y}_#wQnL!vuX3?E1;uI97XfM-=#yha0F zgMm+l{5!#BxL4YC7uJPGBZbfty!U9bg(N3{vi;_?PboH2a*5zD-N@z*_DqDjU!eFq zlSH$CzC!j>!P{&#UA|EzSP8Ux6r=2T^Y9Le$S5?51g#)qD32Io0wakBk%(@+p&!rb zS-sPw_gP8kHV5f31ASsckCc2QJmBu;NPYeKcp>nL`xhU$O;R6kS;gy@&m(vWG5F!< zY4>slM?kduzVfg-L9P?uI-g*|M%^rgZ8+b~LWR*Eb^%N3eBMCLYi=uy*52Jh zj0qYZ6%x$I{8frm0rp^xu@_?$1|9~7^LjJ3Fp`U0REU-a%Lq<>ly5)-ztzAdk{p_y z>_qD>f_I^h#!AZf0Y?c=9afW?jf z|FoD zQy2H>X&k1TzbUB=(|ui%J)f=9^F0+Em+LsKn9iu8Gb+9j;u-YYw-L2}Q_)VvDp6e< zOgl4D%I)cZO!)sjn3irmj21j2R?rDnW5MQv{bp@^?06N!al-!w#9l=MU1U4Aji;y$ ze!Z6l#)>xD^E{wszQi{O95M^{nZP^hSN+y4m=&FOr{)A`mYu0wI4 zC8}x6a5oeJ+D3X7`o3*^C)%N7Ih`+edi2DCKD*jm$PS}8C^)fabB3fCy)N7h{;1Cm zqS84Yv(3K37@9pw-EjSq>7J527u^P1(#t!r%?slaYevIW*Iig>MhR^YC1XH^X4EVt zWXlUq6#8EglBhT(>WsCU{|Sz)P+i(UNOYBaH^5jiq+kriHb&!grTq*~j`kWrv@boBbr^ zV>sV|)E$d7DD+<-I6=$!Ya}`Mr)O%uyGtj?tX6!k)AzlsR_DZWl!|Adn}6~N4=0Q3 zs^VpZW+fq7Ur5(QDulpm)og&Yu~2L)IImT-9TEdjo6CD2N#3<5IZjeGUI^#VdbTkA zuY_VEMc%Sge%s{NrZAzP7(IP#p+C0dp#q`u2XMRYX7N|d`GxR zyKf2E`$B_T)2ZQ_FC|4^Q^XhPowB_rjR)Z-(~nbhgp8XqnfKTGkvh3SKov^3J)M<> zcuiVI3EQn9I3C@}yS=qb(WuUQx#Va|$+kkarBIF$qV0ryd!fc#mhCSThY8ND`RKut z($guPO#^jPRTprxWPcK>*95y% zG8`!pK9mT5Nr|hZpr&J37yl0Hk^{4 zW_r{Qrv$5*n`rf`4Rwguy0t6ZPE#@cy6 z9(gsE!&@B#X)MAU+Ujs~=o86kj=M;g(Ysnwz+7tntfDuAJ_SX%!(cNoo(42{ubuN( zSeQ;aZ53u6QhlIewun$ZFIdAHu=<8d=lv@j2heb*zu!&p?u1?s7Ivk0p*~jp*hvQz zLwDTC!IG-IC>{np=T8@29ZeCPus#auM1XeaiT`#dLV9_x3~R!UDQkG=bDVs>NH%*4a({Objq!rW1>EgVRVE17a+d!&^ zBz^I?5TS;)o3&o6%gB5$U!d+;@CTv$rchxCH&cb7y<5G4%ro;&H`;rZL*4^#2=UuU z?*pEV<^#cY)a1WXe3~!)rKJ2X6#ouB1z!OMNG~I6{voOQTF6e~`o59WyNTBCg#2$v zGwBJ7exTuI9pXG$rl5Qm{srsuxSMi6=1AwcwL(9 zz&1j6Zz0=H2!{&EApqm2V3?iE2-{&?_4XLejYv#!hUi9im{%VvR0jy{ zB5D+2=cgGq35l_+ixc4#da25j5e#FVJn+_A^*bsCrUFU^uY$oVn<{wul^yogbo$xt zp>H?M!ol9msJd)s?gt8UcTu5QOz<-JfN$7t;pSXP!9D9ZNzJ`Nf}^5g?D3XRPWfS< zuM>SZ zlJBi+y$5%VlJ7(s4I`&lR84zD($HQ^9-X}xQed+Do&WqIkw3-MotlE*vWQ^>Zrq=Vm?T__kx z13yHC3plqy1O{*C%t$rLPWK4Gi^AexA^lnn&7TFYZg6^E?Cn-m*s0gsghUrS}@;P;3Nu70s=pgEj6=FJ`b8nzX$J5a9w?p;dhyNx8l&&I^%p1VcEZk!7{DEy95HNX zn+iR~H{U1+IW;Tj%+62PFdEdkkoSa*wi4X^JJhE_Yw?~)t@ZS@ijFGjVE1@Sqb2CL zJ2q;tXB>H(Z7M0-hVO=#uGved(fWq=YAkM6F}g$WG-`t}F!+t&SoVAtU2fDbc+%1H zh~5IQUXr@epcWjXUR#Z)k99BFyHQekHa`wNfHsNFj5_ld5k;PeaXcG#v09Vv|3t+p zSLqPJ>$twV^h4NBQ;pTB9B`0hQ91Kh z!aLpJb#4Ph>BIUMI_#quHddbv0~9@E`2nFPw9fA<@JvJBMAZ!d7cKcK3~;`F_hHQH zCv&OjcfmpKgS)91@mMryb1{!aeIAGKY&3k!gqO2Gq4HEf{H&xD1t_J|EMla;@FmC-CO#1PA4A8gxM|5iR^!@+47N2E`e>Hz!8Y=YhoOwwn zcYc_z)O~xx`MlmQN5xLBQ!(I*_1;OH0?Df6^^zP47jSi!ocWn6^t(jv6W>OnKL`u) zhvpXs-_;@Q)+t=eG}|s11Ab0>e8Jetv43oI%y#{yH9=0`mFSaDSQ-?TueZ=yVzh^p zQMX`(Eg1cZW7OIj-?vE$4^iZMcuRorAXkOT0Z{^mh-?L^uH zNs;wpxzZ>2Z92@GjRTU?QPSgqdCUKU33Bf%G50Wp) z3)DuP&1bLWv%J%`?Mv=Qvz$)QZi-QGDqiPkXCXn;k9QZsffP?fLbdlSUf^yu+^FUW z!6|mUWk&J6ib=+`(EUflh1|ZX9VyZYmX{+v0e&xJT(fWJVgKRMxNvX7l&rR6ksi`zF3eJ_nb71UbC~=d)g_(E$77|?IwD@ z+;w$9VH2TuG!nmV|0#m=Ed?IJd_MijFr2@;1lPPg(y2(pbdip1nBt!Lc@+ooS+>6^ zS5Oc682!gTq4nS3Wd7QhLKJbnxdm@l6J?T|p{{&Q=Sw`_%_Dz|zaUcI^W-T}JB%iBF8;CgYWe;5-Nk zZ%WRY{X(<@(A6pi9`t&WP;SNvZd2VT)b1QVNb9D0KvHy`TCEsg4+;YZ z=@Zc*U~d(zpv5>5yi-$hq8h^GDpu}f?xF!-^Ry|FA}s&n$3DktR2nq5un2$GgV#t& z8Rl^QGwOJJnjFc`knh{36gLAk*a7SatdQ<6sqk=ew4~lqLO4dq&q2Z*jxH3ElaR24 zlUtE)5h_0iJQ4XF)bTRqzZ2pYkzN9C3ej7FV`kehSif8Jj(v0Jt7g`(7MGMPAw(mQ zMhK49jBpj#n^SCrXe+Qaz%88YAcXxX?h6j4c!<#TlQ>RNyYu$hwBiv?uSc?$c8?@` zf1@eXp`7#>(BhYnUKO0-G`uS*!fbZjob@_8exuoRdmNnBKQDI+6FK2Q4Xm}0+k3g7NKhp$mZGNSsz?kRp+#Bq8rBAf8zCz0IJ`G2nx7x`W z`0A4dYjfd8ZO(hgrMx87&1%gV8>=ZC$1v8rl0S}$Q_vrHyQYjz;goBH6kV^w7@AHM zl0OOFLe?uwT2B^AV1AMg&KPFfZFN$_rfClLWc@%cAayP7zb19G#&?euF6HZQg@7W z(oRy7y(r0>X{YEu6VSFDC#UF+~lzd$^M& zm9KD|pAx#rd||=iA=wBddQ5Mf9M-2eRmgV`B05HIb)4{6B&dGw$LHNamr-2>t`M@P zg_IjLnMWn?sCX~Lgy+R^hv^1ta8A@Vf8sV2SJCOiocs;!M!M&A4m^KMl9kHj1)U&T zQKxq}Oc#apGrm?|pWrQ)kK#`b0z1SlxifEF<1_rnN?g@eGs z;7B3g3&{h^agy3J34GP|3FPwvP zy3p>?$7t1Vs)@SQzKslC-ae~3p1NQ03Et3FMI5hU{A=pY6LJQ*=mKzw;LQ}H3nlg8 zFY#{D`PGtY9)_AhJ$i|YyhrFm<1QE*`%&|(e6~3*uTwFA~ z9$lZKPZIo6(R<(xp&x}ldK-ziDZEd^4XO*jq2bRe<~K^R_o&_V@+K9%06Y0BtzQb^ zY1Q@r1?ebB!Ct1ntC-NedP5CoA`1UhF`~Dv|BduD_=k{xCxmZ=xrE3OGjmgyQ5+E3ebZ2= zl6k?xLP4h=jS#G4CG$z@SkuBs<`^{Rl!%t*xMhUy;zBY~2uo4NFyV|RVMQ7kI=tZA z`)eetQn!*|ea%^T@-?Vi8PLP^twrnV6jwuHh$+`WT2rXj7s9$ilnY*b=Y$r0v#Qvv zC*(h;VM8GlNTY>%10g~k^twBTBP1J9w~5f%ObE4*FoNa3K8a#~R2>?~MZ=BFS zUI-@&$#Fu?+-Gq*b!Sj_9yk@8BJ`ap44fr+RbGBB5(;y4KKPZ8pDhepb-qASa;eap zfOIjqNXV}iyeh9a&-wNSrA$lC? zF{IxKo#!b&BY3%4UK9dnYu!YAIO^$j8a6Ziwg7li0lq(2LN z?+F8MA$=r-cZK{zq<4hqeK1u>UKYYmhe-r8tgy;()|ErLE4*o*%bs_qg;+GWv zE_hdBXJrjvQTI>kzDD{4{2(|}L--HHZ-p?O9u+UwOQuoxFYrBx)Zk4;yizZqO(e5X zH-nJPF66Ng^;3uHJUEMB-$VFLCx~WM(JS@xxgagUJRfVtu#nr)b!eF0}tR@VsLfwi&>t@L*V)pf~ zC1mReVQs-1L`UmMiZ%j22OA6dhC<&j1gD(#syxROdCgwCyXa=LVnHTb0DL1(sheO> zCY2Cv3wnar=LP)y&SaO2paiU$e#-a@-k_z{w9%_dm02?j!R05}F5NF5&aaJ1maV6W6mj-&M? z8V12=Avs>i#|vJ)H+Y&PFWd_|({Q@b2K!DxI-9x^h5l28a010+k%kS&O&01&6n`TGjP!7g;B|aX z8yMY0>+Rr1VcqThn2h42W{vq;Yg_3w~g5ZV=ek0U)#-AjTuQSpkt{6&g?p!HRx zKOwy(ILa)48|nAdy(UEOfH%M^LU>acTG5xhN5fyJ`-s*r!N)@WXQU4V`zXSPNS{zQ z73pt6{yz9S#eXAxDhzx@@f)G|P6*TWso{I1{|Np65|Y1CoCdxIu?`85kj%irec%g@ z`;6A#OpcCZtP}dRCxsdR%gxSF?g6Gf@ zyB8OxI0u+dNQQ$&g!Csuz97XBNEy^KS~bz6X~1uq2bTUU}70_KgR z{tbkrrfw^WTT=WLr{6}Bx8;p~iF5`H6NG$!p*)x3`9gZC;5}cGd#Jlt=o=@L`_OPV zbq^pND&&VCJp*nO!c*XPg7fNz7bV%D;Uu2+b0r_s`k|12E~M`Y;U%H}UqbJDil2f1 z2zH8jIz3D`y^1H$FinW|0AEn-SA&D`?C8#CrZ|g`e5=;Jr76xQM7Y*+ybyIEBuh}Y zB3M=M^qE%(CQDMcp5O$&0~=CYfkQsh`3AQa`hP*)PSoLqade=)8oljQO!lS$$4sce z5#Vs@juE0m!8nS8NJk6F>EJZ#?4h^A?+jYc1SimXEYev*eh$U6k&YK?d>M`^N&l!z z8+Ese-t)yv0^3zW6IADXo89vzMGu1qzPRkmW+OhR{Z$t|O^`aUpCZc&4yei`KQNdqYS!rns4qm;4axBQ2!gxvwiJYQUVr z;5I_Nr4Y6f@={3tB&3^Aw>8Dh!BpzT2z|QtN{Y@Ek{)&Y1N?;10bpCf{$fw$4(z2zG`|bzzbtF9 zqz9hIz3B9Ob~?brAAHZb0Yg7~;$O{w{5duBpQ+DQV>ru2;BuX`xLi_lg{1NW9nw6m zVtTD4yI$g{w7xFH*Qw5V^0T98oll<#D}XhDty%1fHvbx`X);N$>Jl@g#@`AVy=|Zu z&D>c&FUjf2O8PLzwB__y?t;9=*ip*s(@|u+u#Wx6#;aKKLS#Jc9UkvCdo_38i#jWQ zPP;2NAEB$Vb2M-plO1%HnHcJeZ8tBjAq!+p3yJ zU#pr)NY@9y6x!`~P&BJ61?zR~emiJO6+c8hv;O%1Znd+M>Y{#KkY|w#I^Tpo(Vb<= z1MF|)ITr6S(MA&-qmN~G@v&`mLDB9i<`=2xNxdEocFTEd_U>)`jfaHhF(khJDcss* zoIX2%eeQiS<9j7Jeap}kq8BGPsbv!JH~1dKLY9Pf)|dNH2BGmA&#UVM(tfhjE4aR^ zRTsU+$51(Il*Q&q)%7kEoR7@u#M&w1D^=I!`pU(*AP)AzZ@bmU{m&;jvy;~*OX|1; zl|7(?-tZ7sPk2qs@Rz%qd*n-;n&aB|q)Hm7MgCjJY>fgg>#IP7K z`XyHh&Y@;EnsYd}cb{>(;9d?*A`MXVV=;*2ZfOcqyYPZnC`TpsQ`ew|`e3_?%iZ*~ zavlqZH3pu8cB^37(v}?V3c4tb6H4Awg+1a6%W#=&4qjq;QnB|B)`cM&Y})~ z=fFgy%Y=Bc;1y}*E!5pd@jAgzonz>eXH_g7r4@%?^@7lb3QVQQQ&-}GbI`o^9qdm0ojgVzT66lAFzi;LO*L$_hhD1Nr4`k0U`|Pcy9fzG zzH>lCXj*!6tu8k?g=^-)Y`KKH>d7hc2iMTBdc7?=iy>I-k{} zijFLOM}OP{P&k0kVjv8BA}QfddU=>v9TltSIH#!eJWf7|k3A+tc=DZ9*%_2umohy_ zz6EF51RN=ZL8LQKP+N2jc^Fn!*r20l6E*jQgl3cTqvFr?0^VQP>1R3$USF~Zc~zA8)T>Q zCohxaumI1bd)C}}MEr|Kd-8|qa@%cI(cJoMa9ppt1Un$0h=lcoXkpd0drmGU$@>Ah zb1QJ#d7$@JG3AjuI6oR3#m9K4GdkL{&;UDard8THhF2Kv(&#T}Q1U7orW2Mhl+$9oUK@gTMDkYgec5 zMJxJbO?RCf49*cc6NCs2z`?57ZAh3<3Eg${qEIl}J0`GtRZ{tu;6y3q*EBpSr1awf zMYCFv-zpW7g{fnVk5>`84D?|g!Na?4PEVjXtzmMY8nV$GGENv|D39pY!~ICV1j~kJ)V;7CCziVqzpB{ZoW3b7rH=lpD-Q|n%DIfc)UWY zq6dsPLRw1j)>biYpa?af4>iEM1~{R&lR~u~7CIU4$u&q1(xGQv0#mik*lRz7i#C?s zEAuBy{!n!|H;TIc`*h9aj4C?(!aYO515y<_xW^%V2T2;k+nsSgvQva;Gkwf{vo42N ziT1PRFeV2o#bb3ybb(rP#ylJDRyDl;QS=Ib7ge`@Uy?7VypzAXw@&|vZC#uz;awr- zt+i7urBm%kacv!le4~tS#i4XH9bURNV2B^WI~X|DuSit1lWoK%I;7f} zA}{fB2MFC0`51~)_f8eVH58wf)TW@~>K*Ws{7q8ITju4b4kXB4S1~?Bm)1E~i2HSj z^90r?7_;F$vRggeD9OS9ZSJSDIPN3i0Uo5yx6q#q)(Xx;njm-)VTUmwzD?-k>(|32 z<@^SnMFmGfw;7-IQPF|c-i6A#UV`@J9JOAfUG1ws)MfnW&_UJoO_R}80$G3Jww|g^nOX^hBN__Kmh5v`R_kfn8xYoAmLpK}*m>!rRhl3CxgvrJx80dx> zGIlqf29t!y(U_dWkq{t664@jn1O_3IF&QL+$R>%LF*(?Pv5jq#{`Yz7V@77-d;Q(} zt@STSk9Jjc*Hl+m*tNStJr}A?@!M7?X>%%?mhvbh3Wr z#XosoC|?k~?#X*Vgo9LP(qs7y)oNx*`C!4{iYm0juyMm$lD6Xw9=Dm$rYo=bywdnR zl6#k#lrQ-vLi-S4oshCyZ78&c;kPe1Om}#b`OsT=NX8%}qR7{75p3@5n^Sp^P%GT$ zh1E_=$k}>d2q!R6UHnbBMOlkd?sd~biSUA%Hsi+P0^Q-(%-fDR`d<0Z6rD_3_>Gi; z*;pFCPPGb0Z=tVEe_eoy<>T(m&yUw_hEF`B-R{Cz$@RRdc z1>LdhN6{_!lN1oSPevJw$)P&6CwT)W{adgkU@GxM0>1?>yAGQW(cXJ^#RA>TRnk*C z3pb4XxX&V~A5Nqv5$WoR%5w-tkXQMky3HS2qC`^BRWzxqP1-eY*HB%}byQBzk*gL| zRIZn`TvDCd=*^xIYGeI)p?R#(pv$kHCluER9_rVxlH_K%O_g+Qtf5%fsErA;SsGNo z8r844C!llachS3^fNO+glHl*y-XkS!(t0OpUSEl)8cmvq|5iEM6hhnK zY)P=$Fm7=PeSF0r$@^CL#2TAaJku^4Pcn7_$Lj%m#|qviHr-TrxIe0WpwKXqn*(V& z7r(8TJ!LrFO?MO*@I$hRyoi#<$O&B@$`8t((LMl^_i z0m0iUB|{_?KNRB5AU*quoZjg%-cV9RDNfMz({+UA=18S5ZcC({gm_0G!CVy6B6*u8 zpOlmDB4_;&!Dr^ghe^umgne+%fTJZv!-WCI3U!KdF-C~b5t8$TFj4LzN!g`BK2AtH z?d>{A5$a|AKB0J2Xg`VbBcYG!UG7bND1G#yoC(Fz!x3+$UQd*#UO44bb{c4#^+g5G ze#%!Rl+kRC&9}aW(6jwzlXS?Xf zIRYm`k2(X&;tU}^U-0ahoMBLXyx?sOQ~IO9HwXn|&SaXS35s+S z1u6R#DcxW2n8Z_B%2l}z1uZWWeesOo0lBwGC||;f-rkQ=8SgK64~;N!o9dk2r}+GB z%v%(Bix}@N8_8cij_$Bt>?0q-!BRYjjSVrEgcWXdpP_~OLXrAYnXM_d?D!JHnr}wM ziODsONUak_G)rEb;6)|={GA?3ROFw{HaSu-+aTF&(}!f^k8MjfE7`B;TpSL6C8g;V zx;P)DNc{n26m=_TEmq3c)+Nmz`Gs#Mm*~3qYMe_-@^q(SxFYbPI#2a+()^R%R9Wh! z@A2--zGRG(OF_EiC?TQ~u^Gb?xFTjIMGV}1W=^~wDcv7XnqqGI=sCgPYOrGQeg!$darJD9D!WRT6s~2I zCNJlzQ_y`5YDN+DO52D*k|(;_KK|jHx;Lh$3+ChJC55eC8LW6r5ioQDsP^?;!e*cPA~*4f|e?b;|3SLI4!mJ^*po}rQ z?MNO)S3G%mq1<*FZ(&-WBtN+;qH9m&+CwREBCRW5vxuCIKE)`JJ|)D&7nW*lr6=-> zx4rlpp2(*xdi9wnFhrC|pE;hPPKTK~l%Y@&9iJOo+VN0MKUVavLU%Ms%TU1;qT4+9 zUf0_24WrYv^t)+sR6OcnoY5;JmlxpOB_^l(p@LS~XF7&yR?f9p7bg^k_+ftXWx&0O zD~?M9vGm>}L@wwqdi>BuL>kdghwhGtc1cW#G+jw3h}kExhV4+f?E**OroiR?B>kFS zW0Q-ci{9BR;>pk0>CSqxW|v*St z?esG?PvjJau(=-zN+_}3O4_U5BKPOycx!Poo0$9G|MsyyJA{lNH^TM+({x?$7-Du& zao#&$h`IcQ;6C~FY#X8{ zeJ)&|Qm#B7By(#SY%78q9p+~r~z)4M(UCrJDeXnBOn>9_?)VftaS9t&-#mZ zsdq=;qz?Ke|Jpyqi%J$2(hRslP_5i`cs4;!cGf#F51|$CtF;l@O`j(r_>8%fyvmMI zGNQ?V!tgaY*GKMGHpay$NoOOA7`+W??>*z`QwKiMewi$l75#73F>y`Uy!?Qq_?8@ctT|8+b6&q!61OCpldbnED1#-n~hXo_W`kL+}p zACspkEmzDP9+>oTM;$#UtcKo^A0pS9R2+X;>c0I6?tsX4Zx)z7&Lz~Du-N}$IlXk% zw!Y$?Z|mFZE|}cr`P4aY%empV)ubl7nR8zC;T**ySQ>=Xk6+LaI?jiYKIm1XH9z!9 zdQ=~@>BiS7@KEr2Kfaq5I>>JRxts86grIX#^V|_+m}mVigI>&w%G`?jZFO4F+q;Ut z%OAfHX6-sb`{E>#FY_u~Ib$~kF5bKV4@Rxl`qkE5XgVcg4{l4yx^_cJb6xNWDONvX zQf2#)_k#0dwYb+kV$TzlE4oFe;6x8v9g9=ItFUt7V&RG4>EZY}hv)+PN%%M1;W_jf z1=EMsgc(-U8NWR5x##xTtIji;mKbHH_*VtPHQw*{RQCaH>v*Llzf1aj|P2 zFU2*~Q5=5yN&I`=_>9wJ>Ff6^((hmVR5e?ZgK-4~%@xPZgUvf`d@tt(SQ89`8uC79;cj^NKI1kqo=OC~!H_w3 z=qH`})p+uBFpuDD-<~@zk+YwR>&t&za^C8^WN)+4;^N31B-!pt>=HJS7aC0=Ros!e z>RL4*H^Pf@yXzm?nO`H3E^vN88<=AMZl@Kv(X9aSg?^PEFSZxL&K~rane|ww#mzq| zlXGZVr`Fo+6*)nJbVqX!!MWyU$*q}lH)iZoxWIMPbHAQRF6|xlyy22~xRMc!dsgH; zn0E~zk>R)(jAw43vU_;co4?J|FWl}f&T|X|+)=s-=Q-R5{Dby6G;{9#{N!#ZX!Sye zfqmSMdPBD`xEx@vOuKsQ`?}6Wbakt+#OK20@w8t+L~G&FY30ZbkGeydiJUy;h%j&dSYJYg3VGJ!ur|}4DM`#_L(rBD6 z@yA5>6&~-e2|Iw0iQY&kjCIk{{A*UIQa5DiYu<4ujBs5Nc@;Ls75k7XzZ9o{?!?X4F>bWn zy;GiDD{6j9nvwJv9*}OaJ5qN|@z)GbmT^(JnWAE=Mr^ea9j>2PY=Ch0R72OxcHyyj zw(@B?J&yNgN}=KD4(3-?`nrb3o86S|%LBUP*yQNJtrhx>h>CKMyR~)s>vpcM5bAg7 zJn(SIt&i&wSrP{1y!g?sN9aglV6v)0J=eubmYY}CkJ|jCk2``!wvVo}R*-cv(NFHh zR4!cJ;l)KDt?6FRa4Cr37Jei3Ti_A;t(Lhf;yJ=k(lWH@l-!B9uBI<=n>%K{>$>Jm zp+eMnmzg8*Lw7X_kMdmzyBft8y4S_g`mUE*x(L`J;#^C}$sSikN<=RiR-+8L{9Q+e z#eNm8J(M~(^##|3(W2`s9k%|G+y=if&Ud&i=C-lqkoO1;vxc}N zWJISFkEZ*~tXPwYF*VO;;5q-S89BK&5qe-866q%b&ObL4UA?`J*4DQLQ|Aq&;I=wnwQLA*^W`C9*Wwy_KYGsO({Eqx7rZFjCqwu2 zudRS}xbr-OAERXCu6_sUH^Nx0Q+8`^kljza_4z;-yVypZANsHp!JI=0r6Bp`WltiZ z2)ojyHVE;k6Y0RSj9>FRB6`1y*@lJrgZLG^A^YGjj z`y*k{H{23hrQ3{Oqlm^M`89GQ*dj^Lnmm4;hqiX;*tmEeej>tVnLSi$04>x{I2^24wuuD8?GL(>U*4cH{H)yI~yKZRPn2?|sH*DB12b z-R2P0Lbg`8xpBu#A0M)q2aGNxUpnTtFZtc@nav$@N8fdq70srLU2^X7dvmAcku@gt z$eJ5@T6cwASdwo`?^dWa0C$?xQG5IeCzLB^yETeW32@`q`JVToo7X-?<%@HFUgohr z^Y2n|+>9g?Z&zm-M8s&$cG*KF>uy1W;l7rV63C=8l1s1EP?u|mI37W=LC^UiC7 zl@>pnKRySetOry4+GS)|;Z~)iH9IPgfBSbP&FJVcnpX6N(6t`D&b@WYv$xdnWE7VY z_k+0~6(f;n%y=nw_{i01xId<24)2JJ4GMUV?g*bv221Lv(D)NXHj-p?il}pUvO8-A zI=v_kk$Y3BbL!rdd+W45`ER+mQ+40-ZN83P$O|um38brEk#((3t9P|agnN6`p3sy! zrB)_3Bo=-xd<^3!!xtU0_$22pp-pO;D@mxoR5j~xBbE67vka7X=}w*l~1 z#y(>Hh-S$;QZP>8XVYX*)G2V`V-7#=Pe*RUvaVW7(%g8&yeKPt?%JGEAG}-Z^nRDR z-Eb>F=Nd+1eMpX;hc0dJ^vCCpR`ns7?b%A{*OI=ooqNzIw)1m*+kza;4}~!->1*&- zt*y_Xk-22^Ly^Ecgr!`$4E z2g&1#CG1|qXgga_5rjH51ywwH*72Fl;_{Dm!; z_&X6?L+Wk4Yz$S>Y?2y`Ny@5y7;{ohgL-7O!d({6krm2B9}De@%~0Wf+4wBdmo}n!@gd zl!J9#B3ys1sgnA1H3hgh2F=5o0>!6k)t*;tV{n*`V8wx`Zgkt}=9*Y+^6AH(<1LQe z6Z_eYLBDdSze@WvN6d@&8}z3h*BO5@@P?Qk<$vRHN~v>}xYvl>3z4AqC5oWWZ<@4B zcSA9ll=`u((sf%4TB*=vbVp;`NY#` z_=qQ;=t|=H;iq&fK+;@T-7&k#wY|MNUBbEH>gT7lq32rC;sWQcBkRHWdme@arF8GM zkOm!-Ckp!`kw|wF!#Y;5mS-4rbf05U!Mv=#m-6C~T+N*(2`~D2O6!x46X|a9%RKnu zb*H=Oj*JmsvNz6M!M=h|fow9v)YEUnddcH)lEsZ_x+5Ab$(yId2NLtffVR$yRFZ>n z@&M%WQx54yQ`FU&V;$kkDAT%x&n&X5^vG92t zYR{DL#M$;G3b0{+`SE()O*)L~E+M{57xyx3X+A7OlaZzh*?mItq>xkOCtCY@O3wIM zA?RT*;(SR+-w~1zkgn3j^#=sk+ITX~zbT;jt5E-kke?twZ?|0gi=5Fv1$T0_>l84N z^#<9slB&5Vn6ra#bcqinNe9STW9e_!0P_hkt17~l$%AkXAz)b{T7rP(g`5=y(TX@% z0CYCx%7XWV@%fG6z=|KsFXDTO*RE$MuHJycTO7AHlrv`eL6!^6rr?DL-ZH>PTqNts zui8xT%$jmjNj~hN-o~%Oxw#ORV0-*_0PZ!mk`!$z)V3A!VS=~2XzYZvqmT_1l3j6b zCq&yI@qs7V8RuR?wl~-fCyO1TJ#g+Lc*Ej&Kb-plmdr+nfP;km2*Dc`=lwWY>*lqL z>5-D!EbZ|*9MNz|1CA5CC2?y60jCJ*sX}xX(rEln60$KkPZJs^;v6L;X9(@Hah@*B zajp=ZBgDTELNm-t3oqyiyAfY3XF-?c<5Z$?lClf%8;jpWp?Q^1T_@CT5TYA}^h%-r zJEYt3yH$uM3tsUR-$lSZIPVq)-iGsj@Q~oWh2sY#6;p(P4-3(KLOd0}M}+z$A$?p( zn6Z#e6XKJ>GeUVUeyjoXj>757lDvg*`V@Z8<9rp+OD6B)_qLFugGA2??Kg0KBzQJ+ z`i>;qN^=^w^kc!xm9zJe{v>37Cg4Mye*=FNq7RV%4!*%j!#(+PN%eo?HywN}q)ge* zW){*}geVc>UNDD{eW^>@b0XCR@4b`GCn=g&h%s&W2nla@QE$lUwbI`Aw^#t@qC(Us zc*~S*A*98Hu-mV-f@S2)Y_=Xm=n$|3e)I`v@UB3LFVe z5Ym1jJ`pDaLN8k{M@Wix7V?w9XaY_Z(o>L5M>+|xawt0kzjK7*Y;Xa7=i_&YkX{PT z#W_asE;rf5NaG1$IZb>S(v^U(3i;(iI3MQhElTLhf;X@AHnyI)(^`n@ zRuIY`bIFec?_N`1jewQ#TUaR8Mp{;gegak$;x&+Ru$D0Y>iDfAq(4PkSLkU8^^JvW zL!t3=A^r=Q!+K{QRG+RVDcM};X$s{=1TYDqxq*eYJK7c6LK3LXIF+#ANa7#6}jRmy?C%J|f+urSzz!aiO6-I#4M zv-ba~Zu3;k>>fpLb>WUwsq!c~^~;MDf$d1P9;J)wx&eG;EEv+-VyOT12&XBk@z@U< z7YW|{(woUOUYFB@bPql5zEsZm5@GNJp)pAaXS6UF7{NH8St`CBD_-a-b+-akSRc)l zQp+-GPyKpbT=0IwenyxCJO;CUqmKkl-(4uiDj+N;WV92#%N?X(2&0(z1W7aV<2|$L z*L-e^SEAcO-b-BXvOBfyzLd?^wdX!-}i2SP;XVP0kLO(QdB=Ropwu+X=O z(0_;!)BAZF`RH~@>4Sj&$VX7t|4t}PeVumP%Rt?fddu$gck;_=ujcv5x+fzh*3xEw=h{!j%we$SMWBm`ICfF zXL|aS=7hIUwghj?R-ln3=v-}du8Jz@Gd3&qp%f)1njn-`5}uUQKuL%m6Kc;2Z94jj zZri)cC-dk5%S8lthTgEfzKWdng@x7W-xB(=lD_PRg;1kEDtMRWZ9@MeLgRHIrq^gq zM_P~U94cv(y(J~53I(llaUagb^nmF?lIm*<)f+;&4o+ILY#t$e&ZG^iTy<%~l3j%; z)4g4@;Rx4NUS5n!682lC2g~VkY~qiHOLFt&wJjw>sK(>?QJQR`&UTjMsiHQYl-tUg zQq021W5c+Pvi5&>=-2_e*|+ zenRgBuDVkRoh*dIzi1-8%UATI{J!tBFIVjDX-g{@? z_-z8-5`4T@MKjzz-Ya^5>pmv*&w_V~3&(qX#&sV83{2rXuYX9gZ7KQ^KiihBL83+f zuvgjHJ<2PZL(XuDm+eiTavese8IJOrofq(p04 ziq()-2dfJI%>iEPa>-z@7I&;KG&U6CT&OZ(hEu#YkaLCuyf%_E9NV?2r1IxNIJ;|3 zNyU0X_6z*l!VG73{Y=h?Ui`ZUcwy(Nw&LO~g=T>?3~Vh_*tz1JgltD4oZ__|&TYWX z!oNSjYd3}dH)nV4LM+z44nR6k=s8Fz4-vWtc*RG_ne^i~5?~LrWy~jQrpL+YJwn6T zU5Crr{};;3a7n!*g!p(NJyystl+AE}7nZSAF_eW6fX>F-*Cgaf=DkyPC$M33RuF|zrvu7)jb7}?UN1#hzA^St7F zx#KzRc$v_bg#X~|u36sWjz4hmyGXAK|Ml5j@jG1d33p(E`)|(f`cRkr$H#VImaArp z6zM;SdAjf)9NX1ObVoFoko5{ar>mM>(hO&J%}MA0Ft6ZayQ2AU&Mma&7vcuaMTGy~ zj_q2NAO8m#hDP?QwMfu%!VJfDt;{8Bf)$1S9zxd;zW2l~ta*)fg&5=B|NgM9wqmJQ zM71UO8Nj$_Ghei=qj~igPEhhcLroUHjqJG4uKCu53^F{rkhZ z4pwOGKyKSx`0j~a3@&Cktm_Cl{|D!EVe2bT<=&IQ&O$a?h)zd3Uig1`MAx}QdLGf+ zI(V6+bS&^73F~0@h^}}X&Z~tPj_A5Z&dL_U>m^xbuWsbJtAxJa3J2aKq`$)t+hKOI zQ1{5|I-HmdeOOm~gQWk#5nb358~1Xr2XPNeiXR12g^J-r{5W6?5zgs)4Cm9r3`cZ5 zFK0Oozo!JB#8rC*=~W?StWkdkCx*tbOa1GTqL;uZA;skQZ_nv!{8^#i->kq4`9D3U zYbJGf?JtSoYw(rO`%l3mSMQTweN4b~@OO~tjyMu#IIQa<0vO!>`*XT#3JpheVYAHU z5x)1FE?X)WAapJ;hcLqtT@9RzgSo+iLO7>uX-VD+B^roSC!kOGz9YJdsA(K zIHGF>IonGK;hZi^oxRHmIi^l;)SY4FoZ)mXhJxOEC$p84q2T>Fertjih0He43<-PZ z_Z`u7+$LO%(bHQJ$3I8<85eITL>=>Iy~M8oTL}NJkLU_!(q9qtsY1FR(wRu3gzRi2 zTTL-pbT_5-5nb^<^80^%L|6I;McO^0EBzYhN8l^rJ4bZ+$eaK55nXXUv!2a{+Epa| z`y;wA)K+7ZjJ}m6d6Go`P&xnY5nUN}+mu273`cZf!L1G#W;mydQTca|=sH4v$;kwa z23QRu%)S5h5nW!c+VFI4vU@j~U(I_EI1H%{`VGNF^Al(Tb6wQ-1bhaIG5BgY-6oJ4Rt-|1{v z^^{G|wTdwug`KOOljPB&=PiA(ukP@Cn&H z#2!0(79q^-K3tdBTvYrP31dk7F?jLYqsGcO|_ZGIC*`L(k zBy=apU(tEMFsuC;E+JpK6Xlw=Y&&&k{B}9Hp|=i-Pk`lI}!Mm9mYe`e0jcE z<|kSl=RiQdc-C6~Slv-SpO_~oKEL?s@8P5g_hw^GP?I+uN)v^~Q@NU$nj+gC$o6ZU z?W^K9hD-c@{X;xLc7_7Hxuo-IG77j;8qci&ue$UxgZ_6`BBc4y7k&4P#aeg!U4j=(d-J=e4= z{gSHdZ!v~vR}SFu`v~Yqnj6WtxhQW;7JKcIzc|&q<;pb~qheTM!@ZBp$-Cr*dXlUa zD!&R(iHy(EB|hq;;DvgsvNOzU$y^v-p?M9hW2f-jd>qzhkbhnW9!l|6$`a3<|A0c{ zl?OJ6hZ)X1N7%9GFeTFOJf#34V!$j2jY2as&lXmU@I9(Y zg1qmCt7+Km#BY`N`}(hVBDbg9>*@GmfxVkj%0@5kl?zv&3kY>TEVKNSv=Gaqep^J) z>pbYRqRu)S*t2{Z zz1!&$f86z_P`3wRf~|Y7PI5n?zJ-ljUF|!MKh5uQOQNT}iaXWbt9r6yNdbi+`#GWa zNbn<7dEiG8Oi+&{fFC^u+tfxNZ1S0dBx)wXn5hPuOI(uIm3rsjQzfM(qP@@ z=}D1I0_2~&qI4rJCaUClNilEBSrYTg;#UZz0EfIMeO~xDj#qXt9dop|B)@JS3F!Y^eqK2~ z$kzdfu1l$Nq|O7kAj78->bBjczuEX*ime-&u&>4gdP>iy_FP1l$=fL}OtWi=J53p|dHb2-#|KdL=_b zvGDGSLBF#4afy=QhS8PIn!@a4jt@P~JmDoH0;}izWNlmBQ6DB0dkgJf3&{aOllbaK z3;vv0yFeE=PbYwWCOJo_oeRzr8h)2o5O5{9RH#oBJR3ZnB&oPs$lp;c72g7jdvQ(` z>emR_6$)rQE2;LT(0C1r85%h|_1FK5^H1P2A?Hh6d7T0hn!`HZdzKz1w1*1G7T{>1 z`KXY;jWo0JAfHcgC4OT;N$Jw$3#Q%p=Qy_%%8^0~lVkfhAwLG`93ed$j1`LUf={=# zy{>tioGt5hZxQ;bkW-UW%v3qns2UcknypcDDdEKuLWZ%%GtYb~Q+*UqbT$FE3Gr~D zeuz*UEVLd$dR_1lI_;+=ZT=B{m>BXsh30XB&-AX%p?qmB2rvm0E-wuF(+z~6IBbs8 zCiDovAia51zgG&p6gz13uEexb-igC=PJG=R zbSI(ncltvaDy+!?Vc(US~!7;YUMIu$?PJBsVvQupCEVzAJUCTPEAOU}C0 z8S9hoMBY%SmE+KpJfl2t3+(7eSrP6uZo#%hljc?`-Ca^x*+eVq9?a?ctMz*xI;hTW z&8#DxfuH*Y#-`4pDYUWPt+u&HfaQXXtdWO27TNK zqR`YBa$6zD7T2@+CqH(Vz)SYFay>3wFMpe$_h|(@gbxcTxz5e-;!gM_ayobSA#=Pa z(c>+T2)cb)ZJgrsC^hF*EYHQ>TdBM5F16xHH{tB`ktji(cIkAgY!V=XFE-*i9v8wW zfl@cWha*lOLp%@8!t4(2IG-NYyR>-B-YwbgG{bnGw_vTH|ATKcXV=bSd2&!NJD?qg z6^!(paU{$zjzk**kdR-sQX66wy^~hNlRw7Z4T!pOc zghPQCL!`v)xf)?!hIQqR>18QrF{M3}Q&Jj^nIVV5`daeEn^#yXO~(+xbyi5j_A)yw zf@)W=3)l^84|pk!(}XX1-f9nSqlfjvE-&Y*h7qtYK)0<9B=jJmJVHqK!tYRU6rd-r z&QmNE!|UnPOYdgYI9^igXq?A@6NJWzLOELax?h+`kKH&$QbmoboiAsN4!k;0Qg@+P z>ty^!f`bWQQj!k@t7rhKS>@-MNnSTrjgVh*zRgk`T3hM+TeGv;a{0mtjMHbaVNtk6J(sIC*5*CM?w zzl_&i-7GY2LZaqPM9Zk|!0&dUek0Bsz}-T57t%dKLc3O6GC&c zFy%g+C@0nB;3=F>3Jt3G#Ak6n3TPR;MOO6&&KHFitx9<%x4kN6pn3+_e_Ow2b`^|R0gz{@3S<~-&iczt+q?}nk6?1#yHIW7jt+jAAg->$)u+4cYO~s^|7CKk7HGbOx zs&l>#(#}G>x8P|m`N5L1!-O`vSsmrLcBYVy5~?$V@^oSR#X|c6{3ZhG??mQ^R5u7d zQ>tVz)$sg{$0hlI#bO$lFju2`Rrt$mLL19dNu$-KPCx#+q&hPeCVnZYV$4*dJ%|?; zs&zmvwD|yE6<|A|bVtQU?;Q>i!cmJSOY*?82kkIMJM^^L);I$ACS2#!@7mW1Ui#7E zD{YG}vhnjmn?)PtdqVX-_#0rzQ_Q57Qqbxpp9m%WRx&HEj7G5f0k3RMFo)3U#cyt* zxs;HvDENzAwGjb335{PN?FUX3+9;aUnL^`iB)*NcPeQsC+$NO6k@gW9w;&xNwC+Sg z7p<-WkAR23<3j5}q-nyC-y^*a9s}=#cflXQAHdVX^v{vL1|Na1z@A`c3g&T0dw`j6 zPDi5oFMH)|e}VG{1k4TwfH}Z&LLJSwwI0s-z(#^~;A#lYWx*IlFlBv7jT|Rxa)okS z^?>&jdh#YnD}$kOPTyQoZ6}=AK`K<|R)KU7*beNCADwk|C^!VrBPK_K;X;jGyzCbm zrwA3gcXcvO6!6xmIMKper-5T|o*~pv7fO1e#z_3IKfi^dUL6bQ-rJ*)Fq-&Kx#S5+ zjj7;1p@jzT6A>UvO%9! zIM)C_5*jNa{X}T3DKuBWxe{QQkuQU^6j)bit%cvFIM)W7fpx%!0Ih!fFC?W5LZ&ku zsZfNg3j9(iw*gxTttNgy1LzF-)<|0j<@QL!gco?`-A-e>YMFD)_8In#&Mki%y^1zyU-<8NE4D4)brotcd=mY-}@C< z)A#bzph|K{KbLr@(2M@^94bz}n-ESo+Fw%rcwOSdlDwuNzDa%=ondyR0{r!+q^Gkz zr}35~FVw#K1VXO^*9zW<&gW8i_gk+|&gdMXhlP~kdc^oVV^p5eCVF3pipDM4m|vsi z%4m$dim9SKsI5=TvVC8h8e6n-DcZPS(Ws=?bIOgV^o`w_3U z#e4Gy#;`v>Z^3&{yuOkW6s@7(h-qJJVjV(WRl6ymL>+AGDzwPDpy633+>U_l@!M92 zexrLm%e(b!IqT=j=_%{!Fgde>gyaYzsDnpID$dg-Hq4|)%DLX*LfF^z7)kA;h3rJ3 zHCkBd0$toX1?L%pRln$TN!}Ttd9tKpq|i7?*A=r0^|R!xpCef3^0pYw3*;=%6%M=* z2@S6tE7Yt69wwOGf}WrC?BieZKL&N z7fPyL7iyE_^bqClYbAM$o%R)aJx$75GESGY#tZ4yaz?jvi8Z{t3B3WF!zFh~sxFh% zM%VNCwb28T;`_PeVIi7=bE;57;j2#;-n&9~oVE@UqWN1^N0CMYz0P14}Eg-|~x$*=rC&SCEe)ipRj zCiFugnn-*P3)!FKv=W$pCdr2yTI;K!^%Yk5Q1gm^3XN;Hp;kTer4Z&{-q-BI;Ss`0asQ*x?VbZIX2dfC>ib8V*!TZyAD~0B2a@NpP zV>H$3CqnDTLb(RcHE|9`T37Jg^D4vH0vig+`a;usENX4OflyyZXl*QHx!^;=8|z7m zH^pyrp~BEO)Sm)=DXH8_$O|FaQm{6h4wKZ{3FnSrsL((;u5TfPQp1_*l7&Xi9(xc;?bEnM+wE*LhBqMK{Fq8u8^N0cp`Y?LP^ni zLWRm6UxYMHXkRLL+k|o~eiLzCO~5rmdacl!B;;2L-b$goN>cL%p>ea&z8y>u2Hqjm zZW78{1s~3n-6JWxTbTJ4;ms*X4+!ObLhWH8y;o>X75w49^_ZlRp+fSA5Iu_X3BkK4 z_>gwb?e;DT@skRuo)X%x2+ik({0~CoRiXcNq<01HqR@H)=Nm%ttWbU=On6afFnhav zUr1iV`Kgfo5$R9hLm~OA;B6C{f0vYgCA7W}@_!1RpIuIu)c9P8z82!Y2;MuPiX%x( z$gXA)yn#Y8hos2En>i)<H~=y3A|kbbYgKsA$zF1{b`+|8koFelVBB~a-=eF7gytbaa=6guYg&1*5FLT@XrXzO&^QvQ zU#Lb1<$6LgQfLhqE?_2fiDhim&O(E6Xm*lNogzfX;5SMrj>GRXaHh~YOXxd8XfR%F zoeeG!^7FwMp*&Y;pC_~~Mj9_P#tP+yLNZRMCJLVaT)zV6_{pjpv2*CBb8C?}^ZOPR`V< z!FwW9Z%b-?D2)0W0Vt%kFNGGLb&9Wq_h#zRy`M{}{w~x%5*i;1t?5GkiO`O8i4R8d z!EnjUa%Qs%RV?JQ3*`@lG!<%d3XQphs#nP86 zws5(uBrD}U>fL6CGLv6zEn$vzgw{{FWOX53SLkgC$tFT$WBh(5L>nTlCsdmu{X%GN zDilp2+DK?^fZzH;yArl+3yrOX`c^{zOQGCGsO=70B8YPrx3dz|*^gE$C zNvL7&Xx=6qG+Ze65j-E*=8o!4Ia>z{Hg|Yah1w%>#*Yj6gFG;hwvz(tG^-8LJA!*YeNGb;iHg}|R zNQ#ydQY;-_pj!-))WWpUVocIl4JjAu?@9c#a2<0;<50n8lh=kzY9B4M`URUi@>3+0jK*3g z3$}Dbr%JM=qdE=g7{ONd+8L5;?x>9<;29-o5JR`>7NNWeiQ!ywn-F9Dh(`(8*+O-f z;M37tQ}DZ8Sm|#39u&MyME;1RbgEE21h9>G!-(nyNv*}``0ht~RA}5F48ThA_MSrj zYeG8#*9*3nG-i_&%_VrIPMJ!|W>saky`(lb*EIy2N<4|u_L4UCl4O1%#z0bANT_2a zX)Xp95UL0)F4VA+vboKR8oVcz`ylNo)Jvg_;iI*$;E%gLq|Vk4f95^r z1g^tc;m<^UbZs7i2fM|^3Yh!`pnT;;$!_nZ zq~IGNd@|(?`b(FeEuB?PPkr%6!Y`=P{_58K;#u&fJqgP{)SVaPhxwG4{h_p=bcV@& zWRrK)42M3EVV>z!pmuu>-|fBnp&GvyW|Zwf>c&(W^@E8RX0pea*23K&Kb7fL~r+=Ccf=jp3)yN-L8c>uDn6N0DlVgNrcW$9~u~T z_I2uGUFZ1+&YUor(XX4~f0zYF(mvmtq;ZGMR6R6We!%XeJzJjqlYP?^>UHWhp3*k5 zfuz}nyyYk_F^ZDSV=*0-Ct{3nT4+3M{`3dS*8Xxj(qV_{y6j@XDGeV_-&UySOq8!E zz*A|0F^)8!>N2?^chG$Xn;VU}xBT#%jwn)tX|z&)w@$0#*+s#YMiF?uQ-EDCGruj0 znTyXSevU5`i)%pP8s#!x5S0s3pQMmYKa=E#*_oJK!e%~AN$b6g2vBjFqY0q-AHXHP zxH~<#55GA;&-sFjRCFHC_6`?cDtHgwbSeDS03^e)WTn#VX~fR)oLF`OZjlBdIr@jl zI!m^=x@j?5T;f>*{Yb85mO^WWpC#YseZYN*5mL~JAVYFtaGCV4b+7aD9>*oV&XM|u zx*1{TY>ox2%j0KP3lW1%Kbv3Ax;%_8b_&j-;dZ3{abM?vA)V{|sIFFh`2Ef;%^Zp} zn@floZl<#;W8EJ`H=NE8nxH@MWE=3~tLc)IR}rJ+r;94o z@54Ks<~Qq-a-vZCMgi&E{N%y_Lr=O97%C*#WTHL67@@i!iE+0F)!t9gUj;*27|kZj z3-t|zj6r6!h2SA$IuySVg14#57<9!K3DH;r7{$blQ)&!CQU)Or1BnRbI74kLW><2p z*JVSHP~=k7s0gi~p#P2CrM@T0dEduVc26&ve?Ah9CC0tvNLPr9xb0CzZ!2Q9xI*(K z1m{8Rd@i0{$?!YsckLmisjCp>zUWZ|?SHLI<0&fr`x4qOOgLF+TrRkEocJUG`uBe} z*SJm>e|W86^P=}jEil@7BZw-ORO6*Yn+nCYfS1zRPViS`TftH+UhSiVNPdCy=b*yb7UBZuHbUJd25QB` z?Qw1=6uS!1K|<|dp}{ylXFOd)FY)GsX=hN~U=&?vWSuf>_AY`cLu9Y@Z9FC^c~;06 z1eY%eDW$Ido={_i+uhf1@JxDBVT~*U)E47ax4_Mr6_5`Q(jN#OP*#H_WkUcX!)hU< z<%H71!-aAF1Sey^%^2}TjQEb*OlWT|^tci;V2c^6m3IpDnJ62KKkA17)cuKc+Xc$D z_t^5s#GJ2v#fF0WlmWvC-48#CUjy_O9RwyS29zTFkF^8LcTa zQ4CvHT=T;O&oCH)`L6yT&f}F4BgP3{O6>2>-k0tGD_M{6lYEKu^04Woz_V<#b9Jv% zP~VMv(U$!AC)$mq?EklqER2+_S@st`}c z@3*=)dltVJh1N?#`6kX-5i}&sRPhGm4}{_G2(4>$hrg5LH1*}fLhH{8h$c&lK12E& z_$xR;e%Y5u{{){3DQ#127RB7%lqZ>8&XiuGaIfL=vVi~iUl2;Z5d=l)y532*4nozAwZd0$Sk42SWCh&_o-leJ!|mj%HT5jcA&^ad1TY9L*tT zeSpxKQ)tgC6qN7U0zyv19iwzaiwZVxy9tjLld~KocrW05Wl8y}IBC%f+V%z(>+C0B zO(E?OnyVn?LWC|5ZH#jhVb_*m`*XaxqO7%61Kg=lA_lLT9Ot#6d)5O6j)m(cM-4ZE#(wa6}))Ve|_ zt|EZ`qr5>#Z^jQRY(#ew--R?qu-4L;ir;`AA+9yIrr|DBy+o+Av03n|PX+fd33Q{g)D-J-0W|^`JhtXXLX*xG0*m2XTqqc{M%dS)KEbP) zyr-wv(Z?$iumV^K*n)-z5T=-~g@j6y%p)|LLXK)MgaK;0wUBHfWZQ#X1>3_S)cE=j z^hAvv@cSLGR=*?CUf@iCc9ZNY*gE6o#U5q7jxynG4L#k&Cq=Y>qw8X{hw5l>jNrK+ zjni=+CM0JG@i{_qt}yOAAw?lbQ3z}jh*1Nsxm0MP2G}@|FwF2&p9WoieVovykFUn- z5#n>?jOf%029G&o=NcV-avzsmA!pc#^I0x=QLvq%cwSP2K0bL(s3z#Tx&-YBBgR*8 z8~wSr;A>AL^iK+C(5Z(Bti8I}(}^a|D#;srdds}n-L?lD1Gr=!A#9n~hm)?{o8m=7 z2v`Q^5<)^RUSCD<26)j5I2RE-SP92A(6h(%?Ah8vjqW{OS4im8-MuH7q}uoN?D5aJ zWOG6pw7#)D&aD95d!yUE?<8luD}Fl?N=NVQ=R8%QXA7LW3GF?Q=;Q0V3;6*;N^jpp znN1HBJO!YKEaq5;@s zF+U1H-KxRwbw`X=kS>JZQbM%2;Ijg?8^oSkS6|%KKM{&qDk#q6Qgc!vk=8nR9+4g?)Vs>W2sypImiO3?MiV+p zXdWX(ClPv<(0`hco*^U`3DNoB0>S&~m*+|H)aQ6Sepd@M^bIeO^R8DOuhy=UUx~ia z?C2ZyTjcat-}=3h+V=?A!$R~VmmSAlpLlKES z5WE&Idz%1jBVS3HC+V?r3{;`lEkPa(Taqkk`(I@@KYh(MDT|4IeLkA zRPyK1`UV8754IN4wouy&$r{RUcp_^kr^>Iz7tdg_JxNl0D;O?#3v18bF0R7)m=K|o zB<~6_dP#;}lAxEgelW8xLCf%_@YXWwUnro4sxgCFfznZ|FLb{xwoouepo6r~H#XZ_ zlD`jHnTU^*Gde@?*FGOkR-rR^N^^FXr0fa7XIR!y5;By8>;<7=CEg$B@%2GIR1R_r2YL?0gyC4iniaUYNAAlQM)dm9XLMp-!uWY?TJa#uos zEqKmnbgOR5C&=l+cg3JOeTSHzlH?sbJpI;ZBDEjjVn)L82|}9=EzX4KC?tNZxDwD( zdk`1XY^IE(d;m)}r!x%Dc4o9;$-zQ;oX{MDlPZ~^_$OBPKbPcnt|_X$mn3*YGaHG# zu~@XaQtCq!QXVyIA5I?Bt>scm7C1)9O~wfR8f1+zU0R8ZtPb*4{kgTalq9bi&B%Mt zVRmNM$>RFXimF7*$p0dEypxU#~rPKSfQRcsG6&bbk_Zg8E2-ZR_sFg3;+>`T65>cuFp@<=uB!W3)8b_x@JN z@c6u-b{F`CXCoGy_jR}?aA!jdDQcCN&PTM`K&~MmRq-V z>yP^JepJ{D#nslR;g{%=0cfTER_Ph+y`L&HU0m-YUP5=uC@L?b&GykH^^x*RRuVi*AR$5ixaQK-OA&Al=-rm+8R&!~?9M@=*xJD9p-fCQ z^;(7YBuO5{Bs80Cn$6--Neu=j-YPsMEzu+)d;;^R<3nzvc8Aw(wR>6K0?KUkk9^ZG+r1jk)_~p59c{JhM zMv$kj29Chx%GbFP_fv-K^u>k)y3%F*Mh|cGJNGs_<;6wxUYvtEaHPJYztaRo{F>9( zKTOZoJP%w#Mi6~{s-)VBLb4#wMtdKx1!&+sB{KO^QgWOw3Hx-=t8GXFU&mVEi8fx& z?~FZzw0IvXr_aUPdC*5d_bL6T4zS|T?>zM-esZMwtp@y3Y4Ol4Z0SsU?;U3&)NXJ8 z8d{KfNgtnKQc6i^BW#q|Pfk>UnX*d>pjPug8z(!RN1L9_!A@#pt3jYN$VF z#+??Vk4xgt05wDXNL__ImZW~zD4Q*%-;5XwMeCDNw2XuShhvV2*_vvO-swd-`4RkX z!X<80FP2ohSBU#a1~w??TDQsYTlMSi<;VRS8E-3fRclI${A?a7G;~R|f&9FWx{JzS zGP^)!_p9hfgL3LyRLO$35Pou)oZhxA6kq~e%N)x*IQ_c&cH_G3i0?F^hmNW|KuGDW ziX$c6a=74CJw9BfelkwVWJxy`KI4Wzm8H{4(=;4?x@)7*Mc$i5IF{Ru5~V}K-^1gxON3(8qv7{5V6L>HZU zSiia?AMH166G=TDn*V~(0_+axwmnn3NwM|U!%;Nm8QNw=SDwq}zo0 zG@J@Ocio> zULN+{FQ?7ICF6kYXouXMHs_L*y(Wa6TNvkkv#^{#lcx1D0gUPLNbmyFaAGxDP`;Vq zF+|!TbWs(M!Hgzi%(&hMqo8Z^%!`!Pu{;y!zJd=j%Bjg8)0*XOhkhujT7qn%IdtCV zqjgD*R;9e07s~L#dP%5dAIRA=4+XOhT)gS+Q(jLvBaO@ny*N*v-U#^J9&DEGMBKt9 z`1K8tUqOPt)2=!7Zn%BYsarxTRBneXg%K$&oa5`IEh$hd+-P~eR7}U`<)_ol0mtxRU~;x_d<6Y#PBO-9EqsOI7 z!mVDyxgJk`m{2kB%zW?xc8Ck_{x@2Pl-?Srp)MWo$^tSM3Id zS<+92ZB!oTI_w}}YZY{UZ?{s?Y37XbD|*hpb9G(yBo{vgegpOqbgU$AWO`7)q=~!*FS4zUmy|Q8>29}DPUDA8l%MxpsVaIja(cU!@?e}J<;)M`l9S|Y{RSsJdvz9m3~IcgN;M{OB)?2e+xf!q@2e5 zn0IhqC8sB-R1ZjsKE@9n$+Hr@eM|ml{Qd+c6W?b@e*=F7e+T~%aullaFOteH@%tzE z6!hxHy{>orS&(K0a|qpay^Xo>`-XdGCm_X%G8Qp;vij!wO$aDmjCx zYBlg9pz8%sQU>mSA*i$I?K-vxIS35MNJ08Ciz$xHV z{LVr;328JKBa|m1ohBq_;ygoWjl%D2aJumPIY{S%-w64ILU}&U^T2QMyBu6Bl$Rl0 zBvhAzao_?l7EAIR%Qg5QCgh3a;pHbEG02Y$B-K5;6a zjC7Mw-9^AXIPVrF-iGsj@DR8~sHO-LA3%CoD5oOb2kr%r;P-nWe-P(mI3GuP0>4L* zrr~!ocm_NTo)dhQWc4!AOW-M?dIjluq_>0tZ-Q5G{sFuv=U1axVNZsQIv|(O+^eA1JCi0gU9Td4*ygB#f=) z{9taJvk5uhFe>bD)gnT{V6R#LED9Lx<$Ztwpw~NBiz8u_$QMIe28oejwKN!la|xss zkWdz@m5`Q1VjPhF7->21BcWU#X?3By2D(}qzg56L^hEiJNIwAs!5YHop9&LWnA%{25Nh zwN(k)U`wIgO2~hSb3>fl;@k%3)=0y^b~v{OyW$**gsHRK1!)hY9gu#7w4adw8tjX6 zPr;|3mU|)X2=)g1fCGhzhYI;&;2`|=2Z!K19O+?Iid7==l zC$vZ494VB;!Dz5Ee#Z+VMj@Sy-*Mn1oTm!;DL79@ItITpkxoN8OPF{D(na{4gLF2y z1m^`v=YuieQvA+EIuBe3Fk)3>!FX_)kY5QV3gtMVxLl~N#(AxfUxD)~a6Qgzgz`qD z3HbdMOcH9p6Uv)}{5t$@#(6u=8*ttV?!fO(q{%{l8`53i7NNWwzx%-y{2oNQ7wI8k zzynD4fQNF`;@I=d*%m7FN^ndmcOio)OAdh5QwvcmcoX zz-#!ug!JP7$J%>`+f7`3+vp&{!I&U{HoY7h1IC2ji?L+1O$Tk*g3yiWCG=j8jSZ#* zOb-yim=Z7@Lg-)&gcd>)LN7MGg`PmD=l$J3Jvp0j<$15~`o8a<`&v^p8nu}2>F7bA++WvZXPg*;6g}?gGIp*;+6&}!NEe_gR}%#lHf8( zL&0KTdE$PKw6YKk6Ix3Vw=i)l5L^W;M{so^UlnOh;#LDI5yVVYttaHm61N6ehv14r zl_RZ9+;Abtkk%5a5nx>~QrNaBv^F8QG1BHjz6IEjxG%V;CBc?ZZYFqEXH`gQZB4?K z!nm!FHWg||c^e>YL)<8&N@#5d+61=+zW~3c`0Yv9mEbSI8Q>r=5u78~k+WUvd98Wt zPQ^9uB6TdO`y<@}jsW+9!@>373Gf*BlhAq;>94|oKO)TlPl5NqJK*o&8R4+kk-ijK zA0mAZ_5t64S!Y$k1f;z|pV0aQi4nhl99G>(O#A38IPbXDv-!PRpDe3@VdPsDYy_|g zR=H5S+gq97yDGkK66Y92a06hA;ZDSDLU2p4E7(S8VMVM;up`04koFUrMs6iFQ~7C@?L+WY;jm|g;5mTl#k)||b6w^jI2XWz=9TER=f2tX#`c9I%mW&N z=f~Eb`>>E!{2H_mzt&=sTCWpa6lq~FAHl@|mekI|^p5+!Q+voanAGQmU`eE9@5vznR2k#0^I(_#{V4YHbSE zBW?uP3~UHq671c0z*dr4^9o-zkt*;Duq`NrYI~&3!7D&7{uKOR$$t*vkb%I^1v`KwmqAR9ClaJzav0t>H$h zP&}O5`Fo|d7~=V|GE6V_u@0EA#y9 zfTv{(_=!~9m*CpFLcJ}e4xoMZQ}y$3)qGxO@e(gvD&wb>FMLP{*4AO!-a^1YF=RMr zbMO6VJpPxT(bI*ziMBe&dn%!Itm2{*gyMW~0k~6HlJmi{1YZ{7-3#C;{ndyaoP zyUtMzU*g*pi=Uc3p!NNi~NT`Mg(Gs9bsAn24Cn;TCC{`1am628vq7{V+>j<7& z+}?nMjfHX(q|Jo9DYQl*ZA9GWf_Drqc9LY5R`zC}E;ny+ZRYA!Z~}OegLyNDL4Ph5*saLi-KDN`6Yy5~12BsP;MSOYxo1 zL_Lqu%kLSq-sNwhp5?PRas4g7oBH}+)-Wa1i`tJ;?dzqw zH0I@VToDa?gYul&hq>`}^BSOMTXM;6n$yRXc^F5OA1Jlrlw)TK&e!8gy3s<)W)pm@ zQ{7+I#hQu4N>7R_t;n$X19-@JiTP8r=S1n!DP>BeSP2!WdnzWs2l z;4i>G%`#qw0G+>Qk`Aj^FE=Im627Bq#oh#WQ5OHk>f2LNJ$ID~MSD@eg-90*cHHWp zIbOFD>SVKcwvzw+v@TVabPFM$A^1;C{FbB^SCn5Vqz|gR_*NmiO2O=Yq~DVIj*wgp zE*GZGB;i^~F_+K4b(ZW#NyQ(8>|=!!?nX$5TOKQTrg8j*5=!pS)K4Wf>3~9>Lb(zJ ztSm(Ih>f9w`}1fnNw$iIbk_N@x+E_|4e8@Ooicn*Qs)ip8mcV8dV*J2dgeuZJcpem zbWI@j98xb8lG~8}DWr_qJ)fE_u-sVeQ$u2eQ!KWL=#@a)$1W$$sn$m5@cM0~u zUtqDedUPs%o)^zXb8y)5+!spDmm^Ci#B|$!GS#=rT(4j7R|~xIFMdjrtLCNlex+Qz zzoQz|zVq!*=2(B?o-|PFz{I(I=|SoRqd~wcS~!kUtW(d{e>Z%@s{IL_b68(``i&*5nmBPrR)d^Rx35`|jj^xO&`;R04B!II&U=Or#f8}V#)YwNwlokCGvS1KWT zojbX!5cr!Rp>B)2bYordNzd~DILv2Tg2Muoo%&*20CCRjTKVMO{AQw0SlZt zp2j(5Cypl9H^P(fU2;KD9!I6*i^x}!&j~KsZg=V$I5YQZ0nkgZ`)JNVO?}GF{c~_U zSu7borJvSnBuoSz&v+lZ0OhV;B+t0QJ$8&z9-@H9DB%8&7@}u;NnkilQZKr4gs$9+ znjB6SVtTra_a&SOtQRk=;zJZy>#PAfYk==^^9V z`VCv1OZdNEzOVfMpNszga=riUQvcfpPSQPC??_!>#>eEZC+3G+wiB1n%l`vSc!qx9 z&tTBn+`pM*MjP?F>%~BB8T#f?s#ni<)9&{0HuYUjd9O+Gq~Ks#N%oT!aLO3n!V`s~ z0m>Ki+LnCD3Hm`mAKzr`;?8R@omYE7C4}@Y!486F^kfG}YK<1seTh4SAfG|TYukG~ zaVG#&q3kRqR7ua1@v>&miJ3|>l3oU`6{cQ67V46s+(nm@FoU4mtI3jr$%-3#gJ3uE zP1K|C0fN(o#$SY#A-7jA*Sq$h7<$G>`L?9^GoksBP_Iw^N|I-7WH(Bx(1*IvhddD@ zM=7#1^>8rvY9a0wqiwqo$=o*aids>!+w!2LV8|P5r)kMpN!=()@hOt*tRuculAUNr zzn2s+;0^c#ojoN)Glb5p*pMH&`A4KOr1jE;)Wg^B6-@o+%&Ow^ZXs$2=|W&_p&RWh z&4rvXr}s=u`LH7firohbS+5X`18BoNXk;N{#E=1C$apYkJZOKz6{EmfRl8b}8vy(L z4f*qv%^>w{FjMf3iY4lso$Fd@^GeKm>E#l-#SuRvyrW`0AsZbo!x|r+C)gUFjV0~~ zf`<#iRE7jd^`<9!+OuQ~TLRwfdS9b&2yzp6Q;Y%csv<>UK3R# zrNQ$a9@&+WdbmUJAW7k1u(J>|EVVTtkT8pPVX1clcI_El*g|0M18M)ginv$tf4M{D z^CZj^0xH?g#3RO3RMl~6F++|H7syq?(pEbHGKwB9`w z)#+SAM#A1Vqo6O#<`hz1#}#iUAH8JEo7gp+)X6$gZ6(3n5nn3Q8wfK9&aM%<7`gU3 zAB~&cR(fGb{A)7Pq4_a}S1FjKI>McU2hg?G(|$#+Yfq)dywuj_>IGKUDp*VtYS#>? zbhX2#>5}Yi!75!aQ^AafS1*d-31&ROkSA!p&My1|9-d8!LH|pgq0)u@DqX-63@4Ef zy)NX<4p8a5%D&z)lV|A_3VyRgo@(d^N;4eL3(3+e1ayf<}5Lvao4&B|lH!PY$J z7d)$dXcw2ju|7wigOq#(`kDtEZGVl#O}tF-b&NSm#m9_NYoA!0(kiFNBz^pX$mUeZ zUDxP{48vB8F)5gX!!QzgscGu3Vh-hN9wC%33dvH+7cHqHf<*a3;)*9Zmf?*ZFAuhv zzyqi8ocB^8CX0Q>)jO;X(y`tiqh~K27Ca>Qbqtmy^E!e%mVtb~gZV;}y-09Pc^*UG zSFra{CB(6gjnAY2o>A;hX&m*#mfPSKCw%M?DwAia*rTwms}(i%^PR$Y)lT*@&er0h z12+X|;T}-Ne7^zLn^O%h({c?Gk9DcIQ|p=zA~W}|dq)yz54`<}odm}|f`oc~neQK0 z)Z+($q8|C!ZzzQa)yr*)TuDxp)6C6!wW^V{gls8_M*;FnGmdxM@6~vqMQ+w%e*ZS(i1xP>H6Lfo z|9v*U_x}Bp^(b?_%Ql%`17pE_C+G;j_rv+k;Y!|(mf?Az4n9uHU+-1M?=GKwD#yCc z*Zp0GbuGxr`6TT@G~|Z$P@#M+3cX4wo)v;+RC2x30eYwZ@cI(Irx~&I2_+BX7lco= z6hWWOcg==w*UAlrk1%@4=Od=^{W^>5=QwA!4a#O97v%(JacW0$YNx#33IDFzIL^_@ zJc*CphdHy&JHC?+W@Pp-(ozpWCpe!^ZmDDaa299wIsALn(toqu`Jy+Z2BBM|{<`!a z`BLjs67+dpm%6&dxdwy!C7;)+KFn3~5zaT1+B?g%{`SwA<2`t)Xw44R#<>2>{w40i z2JNH=>YL+|JIj2>li3NrB44Uc>Fe;ZM%kawsol106BnUnIExc{`%gakK;EHI|9%;q z;ByS|9U`COeDcnfJFbURm*)i6DkIJX7;elBXYn2PvEk+ac}mXa$LK5fBdhN&<#nOw zxV*j@3fc(m^{X*Ixbq!|qi6SPJBTBC`X7KR2{D6I<-a47KX~g?^VIf=wSiPi| z^a71wcS+^pLU5$e;MO&`b*U{ZYv@Kq)(Ib$2-;4FTXeV8*l&RHC1X<(N!JD*SK zZ^1?RCs)TW#EBHzIkpEAlE2znNwB)=QtDG$XLU7z3*8mX*Nd~fbAs17R4?+3{Hc-8 zHSo#1)=`2d^LYQQlGMWatakI&c6rosj}m;uB(nGqhil+l;;VG9mv`6sjA<0*yWv!$ z2NgTErZBfMdr5S~i{8L&P7{3~U8< z1_ue*U%|@+IpxjE=-7Ce5M*F$A>0<}7eagh5;|sbm=K-gy2qs_ajXMcL<&} z9z8?wc_DrsDN)tB7o>jHno~)ke>JX*G)#zTg6xhw+d@*l83{B-_OV(!8BJAP4=ug< zO|Y$k8H#!j|4nNjF1zT6f;Y??x@6NR;7SFDz9WP*wDIG>R)dptn0+c{H&Va=)zl9E zy1u01gLQ07Bj^^+el>Fb*LpHQ!2>9N@=g0u@J;7_6h1lMbi~M^`M%(hL%`P^E~a1) z~g#wI$U%{LVuuTy(wK-S6|E3I>OR{gf}fn!5Ow+$Sl= zo)f#NUqUDHp7+5BNu_JBFLAut`JqC$@72kYf?EI+%u39G0j3iB`ww=ek_QoY7PuDh zDhIr_rSH&kRJSPv+@Y55(E6%Ixe0YS0{C7%jfC;GD;Ba<0q7??Jq?FhcCgUAUGP>D`L~knNurldJ)A`FU13c+_0HQK(rw4|U;%x1wm;HK9O3tm$$0)| z0@uKO8P`$&OYps-(8H*ZuWj4~3eNFQA={rzcua^t7Q7HE9j@z$7?Pd$3Rm=rkbWU} zD!;uVH4aiyd8ZHMd$U{IdWH04&NfvDU6+o!HG>+^M0Ve*)bzIs+T!3XM?#Nbc|kl! zDH|=Reo$7PsL=F&4Ju}|82(krtVX>rDgKEXHB#r;Wpg3o&9N?J#UW%0if7o{!*f7a z6pmG0JQu9AX>ul4#8tWz325|tv2S>aQH+9XAN!SCm47LiU8EW$GlgI*!M(|X(pxt& zC#Wd9?I_(r?o4n8p~-7jpM%fO|H^B<#J6sy;$prnzrgk&PZ?cvC?;PqtR?nb0NwCF^|EorHJ{*iI<6CT?$} zqli0N=X9M37bjREvxS&vP`?DC*BE(^54Tcb;?+N%jVqchU zma-~J_QC1d^qHHCw@CPaBfdrY8p%q>cLY87{z{Ua3uUx~*{r-9wDNWi zX4kg%F=(fA9t{oi&l3df#x_7d4cFk<5kgiV(V^8-xv++IX3*ISt*5uPk5EF0 zRuK3<>=Tk2j|sJ({J)d%I-p(4zDN2F(E7xm5cdt3lQ(;SkPSrQ$7{ep*MR@4!6?Da zp}ir7TPhguDCBM!>0!MOWjX=Lt=Wl^vWY^BE!Ry;_5i7j0|Ix)DC%A~;JweR&LoV+ zyeVXYejm_T2cZz6jRdq@X@ax>K=%pe6SBpT1|cmdxEBg~B-syrHiWpJ3+al&fAvE@ zoP-U@hv6eE1bcN%wj;QQ5bOqa0b>A$ihw>Kps}=T`P%+M%UWT<7?J6#utoh4x3=yF zrzycBswmL=VyjEV;H;V~v`}npT=s0&@F|`Q9Z)aRQd(TECm-6IeMt}DL07f6q>QFH zrz?7#&Y|pYB712LJ^wUC!Oi|8M11zPN!yjQx0Ud(c<)8$-*MIjdR+3(DxgJgV9zq% zlE-fIJ;64`4Bi|~>IGDYe{B)kp&jnpV@$ETf+amkb(oM?l{|zX8dPUk|FA{BpgJ;NoX zE2`*33OTMWMLutDDRV0 z`;NItL62-YzFtZcn~&(NqTiExi%|4;SssbRQ}j?gtJscQ8q>)4HmAH&NFG$Mbp^pc zNJ<|N%EyIdx{yCY@L{2%r>m|~zU(1M*`EO&pC>3M%krANLwQ#Vt;>aWhsswJS3NJ}&k5dIXy-R1d4hL>9?^J9!T35!)eYcH1zUUzTf8ll*DJ2g zD8b%b%Be^nE1~hYq#NmGlaGM)rq3mLI&|X$Np|Vd{)Z(05(=$VVP$HbtYfoJ$wL3z zH@j|Py>5q|IJt>)@MqahTk-*tqD1hvMD<#p`3N?IdO=Sr$*%PpEbS@j!0oT4%}BjD zh~UCPi-AtDkPy0m)uk5<2>*f6Y&OMFndwEzI6-u0)XEA@v?^9!9RFV6?6f zpdVD|2lmZkB_Ul$!Ny3T9$XBURAhoTO^8NGYM?^23Zb2Y4TPqRY>dGgn+Wx4qV*-E zSRArVg_4nLwmEUAk{LsujDInmZ5HO*nYdlRwn9`2cFPj&ASvAypr#~fEzuaThmh?k z{KO;64|^)E_FJ|e5;{%wOTn8kl>1BaZ+AOmi4Rn;HijH5DLF(44;8u&6B@?|trLW@ z7aS)vP>-tdLUydsL{Zv`k>>6bh#M=6J5fl+3HG^?ogpbcSMcorrTRvz0o&X-jDTF8DQcpt!e3Ds3(xtfH_g!oFNON8hOp_&XX7Q#!BZV(C- zv^KVa=wu~7s}g(#(hHeAi-(E zE_VsRBSQ8VxI?(%0b!TN2|g?|9umBqtBH!3|4FbzmBy2jnx_-@S0R~B!rz4Q86kd7 zu&pZlGYKyddW(w_Rg%Az2`JpiJMZpt> z8t)-}DwMAY?T>}{6YzH-`G~j=1bbBpK9}Sb4~>6FD*q{DUx6P;cvPsq6OwO)=xe0! z1v^=3_DO1gNgVxjh^m|aOvq*vT9MG0n_#!l94HjuDzkm5L>LjgWkz#8qT&=?`KHV~Sd61TD71$4V@MjWcWU8WSHkTw$RG9}(hlI@swnbO{z1l0Yq zg|rQ53mq$GxPyY(_CmRx5R4|cqflTeYV1MWPC~q)knAc{yMtYX<}ZcxAR#*d94M6g z2wtw&+)Gk>j9_mm^Y4#zs4)3RAv+2jCL|0(+J_6((L%~_#B(d`Ev0$9g5`07*Y-6| zl;mlg)yYVw2%gZ{K;b)dJaM}T?TO%Yp*(}QUkN!jsOThN;#tIkoprFi9Vm6g&z3D3lKi_JWcfUf6lpP`y*$#&#Qj_-h6&}uf_HyztRSh0wbnjOvQ;I8 zYYO>lLb{UBUPQ1@llp(&8VcG)bbB4L zc3onJz|k2>Z5|}pb%{5#%YUa}b{cVa3dvoPe}4C z>einmH6ImPe-zRgf(M1o_axPeSf7!!)$62wDO4W{t?vc@_O!2()~vHCb%NrWdkg6& zLhYucPg1K}smV9Q{Y+AB8vxdTWT4;5w5qcZDLbs94EAUh3r@07@>8#U>_s} zc82s!fUzN;B(%-~3qpHwb(-lTk~~A)u12oeN5LImB^85)eT#UGa5aa5 z$y_ANO+qXbvmwo{SIXP!Bn<^qEFF0WFn5%U{Owz$SWHs92w0dntRHqT5@YyiUj zA?;%oXLEV?yLyYK^UQ5H|9~ugJWFTxW*kdXialM};^3(QKPr9(sf>SZ&<#;s?Y^M? z`9eDx-mO&M2pgB}cEbNT$Du%$1E|_2;1=a;@wDnc?p=!e$)v6>UM~M3uV)DTU0MA1 zdJ)Fm9yUjFC@w*d=%Rf|u_zTZ0Nw?ty{HOk@U$xKvyDlEulx6jdTAbfBL;9Idcb6m zysa!haymksf1($(K0d;k>j?skVtff*^e**+DEfub3}C!liw8QL>4h2P)qm!lWlfze zq$~12dY{NnTYQedMbUK(=CIy9l{x3~BUCz1?eyAL8w*{4ud@4AW$sjRrOODuE%@Y} zxfQ;ccu!7_@h6y~I_J|A{Lx&OuN6!NE8%~i;c__l;7H-8^IAUTPSUxyG76=es3)!P zprU<*dgcl(jqB38j7ssJ>V)y7U(A3wOZ8MKE~dBtCi+f#+K0V%25WFi?wa3cU+V0B zf{X}Cq-nmBz*E;ccO%R=5eA$FU&>IwD*c(gp>Ai+i4XIvjY(vgxT22mCG>nQsbEM} zPd?Jl^bZSvt{Jt`qug-hV_c<1Uq@Xlg7rN`iVsmGvrCXR<-D9DV|X1HWbySbg46?61TMf2 zz*j!{E?yX%ohK=GQEO2$(tryne6wrDSY^ z@oPf+V7P z*9q}-A;YF%4-q-$1TVvjW=cxl1`OuCZ;*dG1W$dwW`Z ziB26ZB}AyY_E;3~L9~|@DzsOx$H^ulp*Dsni}i0E)WPCqM=o>M*g_VhL zX@Yb`UYpifkAx9`e&4HuTlC!xIuXCZ{|+eAB0jq6}c(PLbXTIc!;3=KgbGz-=pcgxm--DRvTd%&L zhp@AW@UN1(kI@nJR3ttjH!XD~{W%loueMWh*WS~>GCnXLF>C*^&ODI>*ZvwLXLh5| znU);xrIWig^T&Bge*usA*#1-><^o&;pUCGmoazEBxxA?q;LN>9&R5sDKfy;hv-7<~ z!r1=IvtFvZ=GuEYn@e%NoGdQtbgFA7FfM)oK|f!2@6PPvT`L#W{hvLAv$*XXdZuo~ z-R^K7S1Hk=Jk?ovM)Y|e#nkJR?op~Y6^X4o?m`g#&&9h|#^p3*;f^XL-ChV@7VM5~ ztXo?y!3+B*(l)ueEFa2=ia) zk=a5jr8rec(532$v%HQy{R-9Aw259N=^Hzg^ZE{1tMWs!zXI1Pd{s609a;QJ^+uB7 zF2M^!oOuYh-FNaOKM(Yh&W#vnJ#iJCGCe~H(c=G3?Yz%Ewu=v^!HF{9mtj20ae(Qi z+>r#g=&lQw(3qjre5T-en_YZSK5tzzHtxvp(4yQmsuu4ksh;D1m82g{aii;v84Ja8 z3!cf*iyg$@bjm4RvLABX$xMQ^miuWuJngM^#zMmPU_9srLw8sG?7^qKnlgL4lD69% z)O~louJ~-LD(Jto{)GI}_`Lo!LVCpPO_f*95bBvBv+Ia@_0%F9OQEf;g>WK4u6zKt zxnB1bTvm+s8XrMXw92#cPWl0O|8t+M%g>F9$2#DDUhf^0&)aP@_eDYnX&x)weS%O> zHE(Q@T_9=NwSxB?x5pyyFCILrIPWA?+@zAdJwdgtiuZqw3T-5xpwp%23$=H#ZVFvn zXq<;cw__Kn#XFLk7!lgMjuj242ikW}m*mkzA0rn3xA)dFN&mRE_KHb&5;02kuCN}P zdd%tl^YW#XPz@KnuxnmEpZ+nE*FJ42J6`msm zJdb*@`eaqSn_z%}JMR#<&n+H%a)b|XC27PzNAU*m( zN0e)-(3pQG1?oqEImRtRx37&jH{8BCAzEa1wa|SXnfZj`oLcPwE+fbfEpJ=siOin& zT5saGh^{vqAw;(Bmjr1jyw0l|i)-+n;BBToQ7%J+&(PpKq0`@LuP^I05=IMM2a($U zZup+|{%4D1x9W9cgdx8DlNPDd`gEEbw@ut3Kh==0vEe7kcrd4ZNp}$<9;jz0wD=^O zmkM_FR9+^jagC7Dg2a<0y){KR@**L=T&Vp)xoP1&$owAoN#9MD+XQdQ;!U68mlV9- zWBd0dJ@mHVhga|gM7$*#ZBzJzq%uYt02&|_nhOZ_Ih7BR@j@^`h{q8;Q7BFoW}8GDpI`GTA>+ve zydWj&e$3C#&ov;rqKO{FyIBjTh?d%)blKw!M2|(7 zZ;ceZ4WgAm|6Q{G96Q<%_9OLlA-@EPzZuPIgch&G1CJ1QhY<3+A?1fc^J~HSed8OX z*>sBo8|UYi)TDv;2IXG+T4K8n&=1nFg7=B*rTK5&E5tK|kZ(2NTWzB8*p+m%j|6o2 z2HnIbR^Dl7?c}U+q9pr6wg)qB-R=EIn|ub%hTwf^qlG1v~d%VMtb7s?XSP9|=K`E+|RVCP7K(GI8iQ}Y*flHxqiJfpeE z-V(fzqIdU6{;5I}jCODW&Sm1dD{qpC&B9{V!)45bjp!aYE-D0|^UJt&1qlBFDs(m=3|Ja0v;zvvA zo>MT+D8OGCEraiiyC-)*mU{bjhOPrtp1Z(a3iVY!==uR?wgTDF{ z$_IoT`$36vQgS=<*O0DPp}`*nZ}60UrnurG66goh`;}0fOzPJPCO1pk=O&>+d(~PI z;8h@5UGU~X^<)&|5d2<9XVr5nLLS~gA^lcy!CaE!d5CL(g#ipg2ROrlSMvJsL<<@^T0&_g*3WA zNG}xf-w2JXh1ShNbSrW95u7e09`ZbmG*c+~lNo%BL|0j2 zqvaF~Fn6>T5t=Is=~~2%6rv4idLUMxO z-#;n3K!k#uVKj;OYJYQ!V0($jE;gFj5$ryR5|Raka#4V~Rr+7d5=cV?`}c`gK;rj` zH_%LnBhhG;BZQPjI;n)H5c1ssim)y8{`JvOSFM4r+TV;!pyzaZ<%I)@TW=bGx=}!~ z`Zn=yJvX;LUZ{8=O+iId(AhLF+nFHE=0UU!`GG|nzUEJ2PDv5)!Wd~UbShjJZG`>4}xC_ zR^wZ4!@gB8`&#gv#g9?ivVnqqjeELcg8G*Ipe&7fB*pWRiX!JpiXn=e*TvZNxHpgs zQRM2Cw!@H?6+9uaxtyeUdBNMpS-GP zF`8)XDtHw{HAYgplknd*d~49aueP7yZQi`=Td+St8vW=1q=STHeFT&O}aW+ z$Wf;|8?=SD5&RvXd8qD0x?QmCHJ>JFGRk)Kh~SOa=6Xz0Nyj(&aioWZ>LDSXj`W1k z{F4wpEj0crc$2mK8A>9A6ixGJa9R|i-g9-f<1LLt{@I2t9hZ|nRboK zBn4B1#+5?75gCe?=htO7k$MXWHwvxmNnkMQO~+nEH*5Y*Xk$#z?*_jYQuHLh+(xYIy;Q4hw*=4MrU-vMX|3tngkp7Is)H?4i)_PV_<1a$% zdGIvBSCC#6@)rm`Cv~l%2e+iyO_sKtzz9sHUp*c&J4*ObCy=T~Wk}_0NPorymf)prA7zue7nP)?qRq!;r zAMF(OGg1?wvp-lomxA8GARmadfRN88gbO0gFL;rBdm*I71si#@R8rL=SP`z4k(3M- zT8jzI<%N7@AsQxl&jU}0h*nUrfx_I`@+)0a!5sa$Gcztjea8hmH7F0WE+9zoo_05!h#1kz*RQScOaPe}eQc)ePP zYTwy#E1Fd;lAXfWQ`b=P{TH+vAj!XB>W#E=1#>k02AY0rln@USLUjIWS)`p*avw&; z#+E|P5TMBnwQ4^h!SY!hAvDGcF~fp-p+7A$X6g((2o))}O zRq~Le#AApTB;|{%k&YQnF-A%fS=c_{Nd z1DI}Xs@|9(I*ruX1#iO8`aQuZbZyg=z&Jv>3X5$K*xQpjbMTv5p-+zo8v4;ccK=rr~NX%D+urnq2&vSg0|7r+tz zXWes|B>$oGm~J+kix~WPsdG71Qpotj>xt7LD%n3My4|kv4pn;!1?3eK)yo&)A)fy- zwutNev~Yq8uxZGSQrzWt|IlADMfL2hQ+mUAPZ_!EN(JM`!8Me}kRn`Ph&KlZgA+h6 z_zk!pJP7^}a$k(kn|D^~Rv}St=Ek>^G3zg6~PEvTZ5T63Z2*G&3t5@>sC6_8_rv=%i3f2qL zw~!QGu7vU?A-shw(}a2_kVgnUEClx>UCm)nl6twMaWhG{R#NtgB>RmD-y-!*A$wow z{+Qq#x;eq8l9EJHwgC5PDWpMy_y34jljPr-Ufq@7s$g)9(0dOFGlcjBA$n0LUK8xN zu=qw&IEU_O9t+uC;9zis;Dy!UNs_uJ3tl0ey(p>pp44xI><6KoM^%fKq^3)ObwHos zX(?V$9DSo;vL^S6rqt7u>~Coz&8BzFvp+_!>#Y~<4(7frNoJa=qKn`%Lb@Swi>cyn zRid303|hn;EX3HUy$aUTDoQ_qxs*BhL^Y^=_Vd;HTlK`Jke4CmWw77IkoUl^K)@>y z@(RSf0`@NJ=NsOtI4`Npc#J(W73@65_&EhT=IGk}CeJON5Ag5;9$q*|C{`klhvz9! z-aEbI;l(_>9v+^bTfl<~cu;nY>0LiUo>s_%>O7AzB!kz3q z1@Dm3L&Fo(iFk!{#@+3u&Gw4skb4^PyVdPb?~W?ZyXVBdSN>)W<{bUsOy(QLH`DI_ zX6%E`ZnF};lz=bAf4{Do#7k?tAYA=iW?lC=a0I z^$vNxvvZJm$BV0V32v@!!^>!u-DX?rA?U`<{bk($0P04|?bT#e!wyx7PTRB$h59D? zbK%w{|Jiut{q2TdN8hzhYvH@rX(PPjPvRHOUmmw4a09@NNVpMG&Xr`xtqs3=TwA@5 z6E*Oy8%Abd*124k|DAXmr+YQu17CSBsU4%|w$6N}&hZXXHy@65hU9j|)msP5)Hzxn z5zwkM_NVxtb6$)l$q#}z#I}FE93{1$Z9}J7-+TIil4jkXZotLFOH+V*ajwV?1l>r7 ze28v++|sz)u^%eiK#Pr)xi}o~;dttJYl@DjohZ@=BsBk3N!4h=8+`lr-5Y%N+^}jKcv*;OJKJ1fn-|Hyr$%${duavyOK5>xBn6kNP~T_YV&BuQ1C%eqplfes z{=pM&O+M^lF&3bBE}b`+N3bO!I$V-{W5kTc0!Cf|0~qfb;4w)&Qo)S+g%1nqbWV=u zn^BF%+=3Sl%(Dw|V*pREGjA^5gYu50R;LQ#p-K(7f3*v$J0*qJa1IQ*{&nQP;Wn(= zPkC?(moSN{F>VaH$;ab~8CKchhG$y`j844vCT1j3?j(%5RmJzruEX{TBzdxtwY08Z zbKZ*udrFV^%33psdrQcvOZ!2}yHddwuMn&dgtTzp5G;8~sov(p{eI7lN@)E-h)xy; zex=m>W=VF78?U2F2%B6-OX%jcu-|?AlJD6|LHm-=ZXkoIKh1cJCOFQ*r=_W=-w~5T~hrf`h$3oATMFc_nYzcgew8Qo{%w4XwBm` zQh7V$cZGmg)Q&#fC>$|@+esVY7HOQ@A%cF3{i;kPZVp}*&)yDE=*!=jyZ`doty!V-1-=EE}puxy6 zW|)?7G5+E+H~+ljQ>foq;NIQ?1YcWrflBW9opu}1-Nh-nKu?sjvfZ-`aVaJH@_`2u zE+zKM$`K(gSIFb>6op_>U1fH$klvxVy#H9=&U&g83PwgBtrZ)^*AL2v`3V{x3;B9o%EJ`p$LM@36YRSD z-^bchLu)q$)3HJi!<&k)r+OPU!V`0MW^&%RoB^vdFp9Te`ZTg@UcG8NK!kKB%I*$&b9{E zv8Ld)BN_R8tcRACJZ00;7?;uy$GK{*v+unx;U=<-^D{ykxQMPY^BYD35S%5%R}0-& z5PVIToGVMPoe=LxW`2ES(}eH=z;B6wA-89lB@3y#A%^aHZ=HQ5c`VtWX_@*ACG&UK z6Xk+UBn7k->&bdQ7aC5kSCHK#rNX|FtI~h!q)VY(Mhurl#ao>_<5uMkQ z_To}f?Atj5>0=TYq&H}v13u^Q2_b%m;Fn+man=s!)b-lGR5%Q274FNjNVZn+6vCAS zH{5;{!G2`nd4$I!^&+_mN3F=72H4l)SnxjX*#ZRT6TFBaTbzVdiCaUkcc*R)Rv}NO zdp8nzJRbbiZgKnDm(#iT$@aQ@Tj}g6*iXyjsJc-==gNJRewMt?eyXz(^o#CqD@P5; zh^yb-yCvOtk5F>*bXA=w=JBK?_z15x3Jz7AXCe7Ja`WI%GMblsmk9PV;a1shCf$7o zXK~nhO7&}2Z}!N^eXP;r>H^Q=&)TYiKjN`mf?EL}TXz`bdxQiBo#2actz5tG0Hr#v zet|h+ByfA`iq|hXah~SqwxnK%_PkCWtfM;DRt?)SFhzJTmxMR0&4|>F%Hl_r&$A}& zMJpy>7o!fJ*V}%lbR9P3cvRH7R6$S0EGA3(8Twi=MN)<-r-jm%FhI@j69UGj&8roc zTVJDU9Xn0QVDvHcHP5*8kN@m`1?_(*@rY^-)h|Icuu&}A6KSl_d$VB0E5SOG(^uH} zdBsr6dtrMIlzN5`qnI=n;wBO{GQ0Qn7_7~pwZIzCI914|kcu^+V7zMoVK$k$(`;Zj zv(M26gVvnES?S@!PLjM!R&bOqAs8=s&^nB7D}I1Dbl@%&r2s|Are|+%b{3C19yna8|HG3t3fR!AoZ9xm1M!}x3I&BMLI%^ni%2r>Rz z3D(;^7tEdy!};|9ytQP4dhV%Q1+7Zr-$bWL^0ck^QAr+U#otM)I|p9JnC9PeveF$T z1&0aQet_oRzhR=gB;|fPPb7{Ou6|GH12Xho|2rw%JI_rp6oMguW<6g|@Z8W0CEuo( z9-7j)Aa!#gpkIh@5=%H)CsKd=*D5tt@^C%cCS!yht{Q zmRQviQ23qXmquo3Foo`+pr=m89G2{$yAfj0_|=|*SG-23Lba!5{|=c!0rdO9Oz?(K ztjo#Qro53tIEvse2_6qzmphT}5{0zf-ms8&&D#Hne<`&d*zK#h++&S-ImZe@ zz3ssIlIks{22u@r@xaf><0$&yU~wV#o&1@~^IsmXpU!D~{SkXNOE0$R^I8x3g}wt- zvbV3yP=GQNpzJEZ<%j4#Kk{k!s^Vgloq#Xi8jtU3xT;QRwZ|Gyh{oeyH#l38*XX!| z3@#%93s9{){*@qeSn5q^zC;SSFSdF3L;N{4@VC__VMlP75Z?%{0uO?Rh3t8x7X<(L zj^88r0SU8Eaja4C&m@H#6Xb`gS9^NBhBeFDNi|xFS7~^igZB!}P^i2~b}%os=dG)^ z^0Icwo9KTIgZ+jLS8BN*SvhfS9zHV`3UmaAF?OedE@q> zsp2Y{_2d$v!0eDFx|nbz*EWfhpGX$EBJUAdVnePQeSW@_rzn`sF3Cnpn@@t9xFR}X zPug=Q9K1tObizYv<(u@nUSsUp<%wH)F0ePz*=%a>{3i+B6LaNWoRyv;$^S`gARg>d z!lR^qBLp5QxUb!U>!6+VcIZDc3w!YWq7s6RSr|K<9p+?9s(#T@Lb9-6vr=Ze#o7wi zOM3a~o$Mp{XJSZ$Hw0BTK2ivKk!aU!C<~@b@`Tg)Nl6L)Z-gPLwpIiR+KY#+754dE zd#U%g^){(5sQBPTA-+MufZOC7(YS)^od)QwJY2HU5poX#n*SKlp}0%v zd5rShdT&5^V+A`R@!q!?MzQPjVgNG^J%Hqz7tM=sNRyFwf7wjvfe*aF86rL}{7YIG5 zgWafu8E;~KzDlvtZpyO?#-Yw(pAun5)%cdovnjzVZsJ%{Jw21}qvg@;U`fG}WZ_3? zH5AF3M?pdk#t0sgc|SR;AKfS&-b5g~P*RHq$__GO^o@`?cj0v6&?xFo=|$qKOkjJk zTjqLLu%IsAe&jsGyc<0tUP1_(g552Geq1!FJaF3x^q5V zJMXa$;#bsqaiBy0=f|O6DF&I|JUl_~9DJz|p;Y!@!L`=|YmvcB1xs|tWJ#T90gSTN z1ihDJxjR90y&MhC23YR_>fIQln-%9x!Sg;zwbF)(H66tjZ6JhHw@v>MpeFlgu^sx< zzo#aXu#gh`Dtn7PH6!cSB{fUalH_1>+|TX?1ebVSC`BcZQ|x75kwbIRH(tm@3 zU#NI5>+}ELVqYDRok#&IbJ&7P^*3Gmy?UNn@e#*OA8Rm~&%BUjg9PW5WBl9GEtfW8+01E6mN_X^=Op_gu_m+8DY>SgVr{TeQswj}<7 zIQp58ekP<9a03w2`*}iBXvOdgQnykm!B;{(C3i4cjuc|b^JVS%hElr&f@cWvq z#2cVk*Sh0X6cFi%U|z5wm{Y~a1G(N993=R>ukOiVHUquG+0aVsElV#`mM&M99y@Sf z%T4qYqmaJVx6b=2#K&{kZ4~f3Fq|WXf`fqdcA8Re*i$ccUQr44?VSJLb@}*J9b3nx z95$bj9S+vidF>8AyPE_LZy2K3dv!EYhea*H3$SB`xgM|fpi6lgN!0%{$BX1^S9sWC zgGs=;C@O@P;1;7LRW#D=Lj>FDmhlKYcfl?>3=$0BO2l+p8Cg)L#mngN@b6`;xlRhl0-}#h(kd z%(ng|sk~9}_GrPJJP&k+U|Atv3&|t7^(0j}!Og%HU{fJ(BXK*sc0r;W3w98~orH+d zPQC|mJ0fi@RP-)(KoRdx+%JXJ0Z7<9!h?_wL^=%ky+0O-cf2)DsLnt-SFl+mJX2DL zPVEs@F;P-=7Wg%BR|(nGNS6u8#Yj_y@MNT00Opf6jY4%7cueqK*wN!i^m*awLN=Y? zOM<(=;(1Bwn?m;+f|n44?~?kKV3SJtPf7VdgzyIv(1+~1H~5*}HSblC^hk>Q-)b0f zD}dF7nBLTr>r)Sc`2r%hDr=F-=TfbUw5iaU5pRQdh}9+DmW1tva66>Yz)c4FRY33T zHG5vE=bg(7w^v7z>L%z|Nihvd>lC4Gv?h>x2{<2I4$#eli@=3KOka^*N$^^5i{P2$ z8U3o8G|wcrf7bLm#f5G%rjhyxcoaM)bpHYAaquMgGk8L%o)YTq!k#7WFW`B>yRE0M zNXlO&jsb7@9MbDxCSXQ)@VQV==KfNWwMb9gZhxgOr;?gW2n8BwygUgj3*N9STaO^RXnPI8bEiGe!@fk*k&4S<4wl z7CLJ^6B#fnJllCTuga3qXp;RvB9REqnG zcBNpvEvbdz-(B%;l7d}?a3{gudO|w1#P$~&ijL_eW-t&x#FgKvgxaN=8-*Pd=f=F= zGKl8d`v!&Ak}y@Mo94GwvX>Iu3T8DW@ThkxC;veC;%-ifqMogSv^OVOR+nI3=)uDZ z#!m>|-o{SE!ceK{z#aD-YcKw+T^{{SMfDs&p%}`%Ic<)KCg*$0 zUXv8K;(IArtF?1Ws^{#yOUbmmc81n)YqkTa9|%JdrM56N`IHsSL&y;UA2$TRl@np*R96L}M;-8Tnuz6Uuc_vJJGwcg(IzN%qUPG+^j8Xl@{?Cuk(GhWEnQs(k- zjv%4WS_V?rswz3NI&E!ab!Dk{pX4ethSvc)wNE*gBYLkF>}funMN)9D;KgXc9y+3) ztTi_YZihG`aO3N<0oTB4e3!KXX8|66jCasij$}>RnSGeYLeA%)Q3tQob$BS#nXKSr z>w85}E@iX}{Uy~G4m5{?a4r97m1ba$DgPS6))IMw)RDn~dWL+YWZ+Cv1=G~!%<{Vn+(WQ(fy zmV8)UeE)e}yi4)Ck@^x`zy6|ptS`&QW~BNabn4gJUl%7hi&Omo9OrYaNInOhU^uf+ z?kxVB(Zg3!&rRvChRgG@z0|<@>N*p2T&I%04%f>0oSKm@I7iRdSM;NQ5fQ3Kbd4;8WVKu6uLV>`1K{R6cAdB7V{aF~bO z6(6ye_PEe4%>Ko3Lc|!S?cwY12-1y(`zUk1G6mcr$**2F&3f(eq)%CDHwQhcizlFa z@2Lt~ZpTYOwF|*Lz|H`jq2j#W@jKg3l5IiWh02c9(nA$j97eul1aF#ZM+P}HEom6@ zUSaCdLhaJvVB(G^$k4JnS!kVtbgJ;`#a#5+lA>P;F=Ni^bRi!vv>0wyzZRm|xyo}1 zqRCX35H}8K3nio%NwRB|uP>HV{03YockeUajC5My}1vgxW;{ zn$fdwk~&4wag&91 z(Y&9y&n4O4L-h|y-lM8ys9*bg_(D?lt&o2$RG$h>6w;eeP1D(^#_U3Cpx`AyjhiTR zZUvJcl)23(lqUrF)6l@CTFpyvJ|SxmoL?wYq#mRNkQM<83hkwY#$bYjgys+-U6|mK zU?DI}D3(B47Aymn6YAd=eC+lgVb>AK3JR8})9Fe=lP@`0Q?M^Mdy>dkQ?OcHXsj#b zYY5G?iCYh>1BQZ;LONV%X9PDSI0~r=a!>$tDf^iyM@ULH7IHe=aw8Jf7uuT%9aBlQ zIdNMNXYB?xv}_4`Zz&Y0Wudi}T_o9%lA`anwgEeU(L#GCp&BEU+ac{C*tpW!+R9Tv z@7_lV^@dh^O3HpIwDuMJFSWh9qyqa(wwK`jt+In8l?MyWLxt``gw_#4ewg6>t=cCL z>;=aO)!{;Plu(Wrf@6i`XyKPf3iK#edTSECP(hFcF z_)r-4BGTL7J@BdEe;C!rlCn?0-%0pLNInq4&xHJQ@V-#~L#Q2OJSwU66$w9p?}X?Z zq%VYO7QH3K_eft0#g{^}Pl!=w+p`Ll&1jLNayEhJME<@`c(0pjKms(FO8L0m#`QNiw;+Y1t0OlZeQ=mO0}keIJ>{2-ydl;FK( zo6AVbhY+{4&>BX<5`w*HcyeU15^+lkCon{5FGuRCLcTl_!<*Kcg8ga~D@!U?A^0y{ zQI0wAu{DHhu+Uyx=vtTHa3NSnC>c~AmI;lKLTf!CVZ_|tKqzfC+*pz~uRozFsoGM= zMj-lcU{i=SZPmGj*7x>R`ag zusT90j~4Pn2p$8D7n0+I_OS#{6j~<>L9bA(FEmhQTjL0h6{hV*+^Ir&k}z>15~KX` zbipn)i@Zy%Oqe;%GCYFlo{sYm!1r8fV{5zhm5djsiRq|b!lO`-K3ac>L%hqv<#x1+e$G=1oXgAmXydXvLJB8X%}6q#<( zn;d$>-sB)e&R}vr5=rEolK_)M27>@2TV#xl0o!B)!sK9MOfnc-^Sxiq)z;|2b3J!v z?w|KrRn=Xcs;kyomD0(A7y2mPm(=`H@bvr6yOP>}73?4`KbG{1uY~OHf_KUCk{{&^ zJv#1N#kIc|_WLub-+)hqY6{Y4;5$Gcd!7hUkI;1~dq=E#77}8i8h|vjkk2Y~a5J|v zp?6LpnoX$Y5IO?|`!aI7p6609pI3+)LOr+893*t`|Fsqtss#xyD%4AWoM0c)5TwO~ za!G;<5yW@hvF~~*q-980TxiWta5=D|&|XFGM7!2XlIm4SSYAk07Q9l(l(i*A!%0|L zXsv;S|D`U4axG!8g1FU$);fZB)2c^E`n)Nm8w=G&LVGhI*<7%{ss2JQwzVn2T4=R| zx)M6;65L9Nwh+c_DP)@nJ8USl))%~lh=+xCIto_X3GKEJZ;P}IahEE4yVX0pD%jZ{ zoGs)B3yrZt`vSq6YjqbG@kpY_M=PN`K&U2g+z~=pZ{%=EUT>sv8>vr|@Ef6g3hCEK zZwb}21V0p-?<0K*-WFQF6L$Vu@R+;KKS{^__wT z&o0TkY_|qT3QLzPOB|g7O?!pt8E7mew3Y@N3SP;iqBo|F|dSCE{e1aSWQS)0V@gRa3NY zXGy^w1)ar-n@n6qt+y7^2w~7BLbA5dT8Fqzg=zz&h4h-nZ%M+O!atfw9TK(?s%?dG zdr%R#8Q2bNCFDB`?UBOMy9?DGLT5K{uh7^_@PMn%Pl?+}XzwqSdlEbl=>RZ_U<>Rk z)Q1Sk1wwi-aR-4PgB`%H1-sxV%T7H*Zjg3N-%!Brh9?i<6VEFHzf6AbwoKYECcA{=~75TkoZPDJ(A*KLNOSr z5Ihd0y``jS`joaMVLPx52|Ek%!2}NksGRX>0A;bWn~czXgw>qZ`(_odCYcP*Jp~WWt)-)B+7^fpiz*_?^9Gh?kvpZCm2P3}eRLlhis=Wy8}bTmx=J?Q(jKq{y27UnG^(Tw#Z(g}76SN_$Nt zl&3aokC&0}po8RS9_^C_ueejKr>AtgztN6Jw6zVIPmdapX;WgFj+hG1pD}(`Qa|4^ zb&c-N=z5KsbqbZ+oj>LpGb`xXSlKlM#|igr&S_L+`E?3<)r0o6k~;oc?<%2nyMmsu zl}?frJuc)oa2nq&eMLcUaS?qaX$arQ?$q>83i=z3zmvG-dE-NcjBnKG2+>x8Cox20 zkZ>W{eNx~)@l-nZA~*4pr1(7Cp&t$4WiKqa&T&^y7=CsnaeE2PA0r(i*nACh3Nhy* zEVMA+9-}LLlDNl^z7|@T9v=3V&d6g?3sj2%^!60(I{mHC&)4z@ST7c1MXp|7PZ^`g z6{vJmdI)X}juFyxh59}u{@=l4B>AhJ&#&vglQ@&)Rb*(CUHa+6z^(29(8KPoo-GLTheQMczp&B(`|B- z1IBU<%Aa?*>_-I)lX0m$BJ>D%ZH;<~t5Mbl-YcnmOlY5~U|w?F9fWj$!1wjI4DYON zM@mF9QScQ~>*Hv69^8^GEU7iG5cVpg(z14wp;5HCnlI`8t!__T!LvDdE{BAEE8;w^ zptFcBRNl(fu*JP4ZHeOL9>s7lr;PwFY@+9ITzrXwZZH}rNNVsf(Vog6zDbf-p!TjV z!D~NQam8>U9xe3UBG~hpx)d*@(~1>1cYUNy1&`g2UDLQ4xtzFrK*Sv^2wZt!yLg_p zr&xP`SZ}1&Kxy;a@TZMt(79peGtbe3y5I-wBj}gY?U42t^e^NL9CTl*YeK)oLA3Es zbuJaT^aJM?UWA{QYPg`lm1r5^d2xz)t4|N=_w70t=eKJ2hA?Kk%g-{rcvCFjyZos)C%aL8vmIH5WW)5p2SBQyklO5bzJzu=P7PpYNSNW*~RoPFq2 z<|9`RDbs9DNsX4U0nJJ00-=2c@JB{v8n%R1Gidq^s%k?No7T<;CtJX}(WIb!A5 z*YyqUHlNPT@%eg(fMIx)O76uAGV~p!)2w$Uw46_)J9;`?RZ6P;gVEe&I|{A+kj@tp zYl7EE3V$9-V1h5a#O0l#>vbo_Wq((&HAvZeVdHci?w}St%EuGqDzvl=S6GGvEPF)A zsXQ9?GQC3F2LS!b6XQ0TK{uX%MjT33vXPMC9Pq@rWMf_g+D(G$;;jNb!Jvf_Q=_nW zA(s{nnzsXP@k(5FU4{-K=&pEwt{@AknRay#cGY6jxj?G_1eeEGhe? zP|eQ`Eh%`>f@m#C?mdjDJc?6DSeh?$nWSi(kkQE%@mqO0^7;!&#iBg9YfLo8o(l+` z&uJ3@&5j#fdriF%aXg>yFCQ$#wjB6LQdC4wtMZ)c8l5oWKvns=4Sv z!OiT@)p)i-@RH*3W;`Hn@bo*u14_KSZ-Ex%6*hYC=XlMyFzSy=x#=uC8lwe zBo~l^YCWvVfI1VQMYiVR;(VEoyTz!--HBv9!qXl7isM(g7prt=ZefR2Yh?b45;o-!n@gJzw4Y%Y;aKMMcVNe6RL!uo`y>lRr~!T*;t4|X6w z`%AW$^qxBG5)nGY7%y>Ll*q3GftnTKMmqen7{P$87(9oP)5Geyd^? zA&k~s8)*UI2PY!XmGXZx2cdL_$8E}`c!mo-E7bo$+DGW16}0D5Rq+3E`oTlW&l}SH z|Cxg@oSF;g_rEg{0k`$PGY5gD!>XTKHP3l;ecERg%xyfLi9Y0qwj_- zH_>wKNcI{`!E(Ss67&t+BAx+i_fx0TX<jrEC=Jm0zMm*ioM)hVRn zO6AnvzZ<1|Ud=>*RgvaW|@GHSHRqVa2afQ{BNq80M zC8Rfy{(wX)?)^T?KN5Tsyes7I2wsOOe@{~OXCa}S7M}|d+I8_)q5iq9n|~!K{t|p6 zKCGLP znw8Kl!TKc3CZu$^c<^D3Qqf#}s>^L-ST?kRZiVYx5C{e*gN zA=#aT0|@RV(m%oXLjE0bUkJqvk?<{X{~+#bFa<$Md0_Fnl=Nl8I) zgpjTcaLcvU7xGO6Z}e4fEUDQ9c$14QglIjXv7wM}P8?qL)>cB)5mGF5Z}e5SC3ys5 zzO|%cTcO0@Xk&VKx3AWANF%|HBmY*r z2>D)uSFOuO5yazFW43r0;+P{Pc^G1ex3TqOp*oznBM2TX)Q1p9Ph8`8Av#WI9xLQ0 z3gxMwU#L$LqIHFIjF6v%G+HQj6Ux&GjurBgi91uM&lbX1#Ip#}v*$g->I)=A=LpRU z1rI~auOjtg;w}Q$61+n2FvRBd1kV*3mk8NqLVhKCA%BqIM8U%l z!~CNsNd1M-cnaxJp?X^Ij$-XcB(;A@!mq%uh59#0IDT8tAUzKr6YTYC{f^*^LiAgq zctL2sEO>*l{P)DYA(Vd*>Q{u$OM-_Xmaj>wUKKnHF?wB6^KHSy5R(ri)t?jm5a}JE z@t)xAY>SVGdtdM{#PTna(sv2|RVe=kJ{Ib)1h0GKF2CX*3Klc;=nlRm;m;iMz0mwd z@GwO0jO*>kyis@->0l2-^d4m8ObV9&)WOA!B+NoE7Fq+4W){3mag7JO%7p2*B&+A( zkby$oD`fKs-j~c{5z7V%a|>RXEW=sYS(vy5!J=RZp~!{24-6r=7+6wh4i!8gvAb89 zSGmcSQ9`~r$ITCx6FeZ%7H+vL!IgyeszSXoSYBvi@Oln@xir#nAzcG$n9v=N*eHlw zO=zqs+tUYpOO63c%O+(#(B7wQ>laZZ*LoSC0VN~VxHgA$tGNy>U9RkI6Ta;rJ3q-Y>m zmNwS^A$X3H7= zU5`r4YT|HFd#&esKS|M%1dkFtDzT=&r^104U(X?H5X_>Bp`v5*iapco^U*_gKW@5lPuI zLiC*A9p2KXNqvmCM}_zmg1;xYFnYuj1nCX0_7TcA1b1FVFG`AD0*ozdBtmNzp_omm z=Rit@Y$hC4htw)F9a483f$JwTm%;;NDp})3CSWtHAEfJ8-GsQcNnHnQDzrBcveyJJ@YS;=!8u823PlHO1GW`BX0fg$ zHJ%l`E^+%0lA`T|Vk;ruS;$5T)$U*qA*@!hm!x_Zp}CV#>`#zRkj8;X2Y{B)90d*$ zq6-9f`FX9T{KpEGI|!c1+P{a2S^FblFb!X{Bfr75Dh$ynI;4I}h_6$y;*bI3Irn2p z(bkHK_w;eVhKcP8)cy1TWmV3?aRUIAc{~`2Iwz&du$#|+e9SNIEf1@6mA!|NTz8M8 zUJ7AYMTTc{A4a&py>v#V>jbA$drt++-39mTwRocPKq1*hXdWYEIHEd-2zD@KM@zC> zsdF0A=|XzGkX^0|dGniTHg7pf37wghP+lde+FVk-A7@-G6b~rqVPMHk3VMob<7P=- zp=tAXl$wrL(4CW=agzRYy^vfd9CxkYzDf^I>fEYe^G?BTpyX~zt()|ejZgJDtNRqp z$8oiXBz5i;n)e9FM4@;>NS_m`$As)A9oM=M;L2&fAQZ2ISA_gkp?q1WaOHTnzV>U9 z8aL|J(`J zm=*BN(gw(d<~)M?ZL7_cNC{_@nm66sK>NNtzK#%YD`b?|dMBY6g|wB>U2ZDhpE#Tn(O%#ZtcH?xVwaClF)~F9ZwL-Ul4p;@ZwPs7IXEe5I;{G=5YG5 z5Qa8QM#8R*uxkq}*91e>!$`(rf+jXgV-=8iCL#H|;_88tyeW$(ttEp<&4`;1%rAJL zYrL4GVp;Gb;)V*1VM4kZ*ii6Nk!cGF`^W~7ch9jcCJ8s%kXz#&ZNG z3qdbNCH6Wo-f+gNb7ZK$?XQIx9k@jOji!LlguJIm(u{(4Q1h&rY> zQ7~CZ@LEmn6(!}UlHL88vf-qnEJmx5FhcP7*mPY#iM+=@4 z(wTsCgkZ(1ep*sk%NBL(bl07zTi!yaM$^jBud1&F>sQG>l3J)%$=-sedBo^f-fpP0 z^0ch})dDSO%TiK?W;A7PNzqb*7igKXG*XY?DIMt+NLveSbf5ev!3t2TABiq|?>w8L z*d!+iC6#$R0iel@L5XQyC^W|i)>@K>B}ESj+2cY3y~JB@wa`YgClvI`P*yrRvng2L zEp+A(tZGE48n@1)VEc8jfRLh0ScT}IICLT~RdFZ>6GUfdqb?L^3OPzbg)ZQ|0vfdY z?Lu(Zx#ur5(EzGV6_;!&WDDv3`sbANyjymfat~JR-AqzWE8d|2ceCwT1_@1ci`Ll# zq)M7-uauO~5_<|kd5|PGayu(`jqB4}8+r$+RKC&S#PM?$qlFk_wEj*BVNmt2b==}t z3MuV^M;PRs=6cP88hZHsA`HN2B$!1guhAL(eEqRx(B}-0Ui-1)I_C*qWz$^{2`x#B z_9OYb;JM-6d&MK!`gb8yssiuq(4nx7Zt$Am-O@(BC&?Xi zISpifr?PKUdYJME!S=aLvSdcCJA)9fCnRSJ9{Q4&1r z6Oo_GOW)Kt)O)MW4JC)?^}*eT@yNX%7bGgE@K_w@{5-fh6t1b~F5+tt%#lLQNWS|? zzAmkXgC2W13w2WoeB&vSU)|tZ$9WW?bLqaT!q?!qXgD8Ww9tQsP>cf$@kD0;oPY&> zDbIL~sVMs9^DEv=aehM&aDN_-EbSH-W$5NP%v{XI*jZ34e=HFcO(N#mr6pZ3Jaupc8I<rDkHTDB}}sz?xQ+5{F09- z)8a2+2Hm*V#rAa3aL-g##rrzf%6ki2&HHM_BY2Lnf=Bq(C{z(Yc84b4OBZ{u`0(oZ z&pk8IWyocG>^VAk2ej+(|DtNt+^HAG&i7P)onsaEIyG<@@`X*(x3uZ2(BWuD6C$1C2u03#&=r6s_62at%Y=?knAdCqlAiP!o7!0 zH2946((8@PHd@jEioE;oRzPoWT}<#2!7H7)>#a3TK`;5yL~n23ER4mZ^#+wI-73jF zU14#JM@c|sZ=kZbUMBTzA)YLRb9N8bXBzFgNPChhjF@m(-!?UB9W&Y7$%zpuE>x3+>I2(BO-m zglcyo-$iKdBeZC-!}9Cs?KLWU`#8ZJ4^=;LClMSYq`L|E=|V=8(RRPV`AC-uO*#M? z`~mfqLVlyrxk+fE#wYytUM-+a4IJiXydbGWgKyy-nV{kj=YQI*hT#UyscyIW{?`U=G-tR?iFqQ|yE9UO zcJp(UF^{h{lM;N%K7!r=(r37S_Jy3_>xKqxYF&H=XRLLNo-HA+t2p?$ZqqxOROjM2 z-&&X=GBqn_@8f*QuuvY^hnl}frOAgB#QDZUi%qcmSP_+A-_HdvFgJLzq_Du;4a#8b zh6;L9CFjz;7YF0ZlvO;JK1!G)Hcn^cQ^;T^!JFRs3}Xb>^;UPjtB`;y8KXOThb?!R zx&WsWb#TQQ)9EjMHV->@E-8K*udP%p!{5Ulq)X^DI{{NScQhSMJU~rawaA4UvnsrC zUZ(uN+ zNhH|kueGzJlHe@9tEtC@M_;e&cf2o?q}5 zFt_p(d*X#vQ_tmbXIO{2xPC^kC&pfvh&Es>s!-<>fQQA);->uAo<2DeUrRAii02bh zoGS%dZnPpnJS+t&n18iwV@b&hpe@vg3FUr*_Y_TzN9q?m>#}jWq+lrGX35VN-0X}U zE6JO_S2RFji{*nOrOF0M@{~tCKY@?zf1kR;7z@HCQFKNe8jhKS8ovH@2TGv(szU=ztDC5 zh4_1N>Wv1@i}qK7M>J+%N{VQ#D}JG-eJFP-zs^c}eAn$GOG)AH;l~Ny>HSE(M(_x* z{5DBm_pQ6GLHxDi3jT$Xs&AgW~0 z`!21AYs1P(!__*4+B1;7xlx;vT`eHwlYWhD?3BMdS)TNP{DX}Nfp0PahXtFEqIyxY`mnL z->QulXVRStX8c?3vP#A&q4|h{iCZRqu&_?*wMrO&BdNb4jvuU?EJQCMy)0CJ6f*uY zk0p-$gYjEM{5{rb^1GD5qWnimrniv|5DGe$%Eg6b5rXpz)exj5iCYk9c_E_{$_VMhsOm0brVSJM+qr)M0NzAjwsI*yu?#-t|SkfaCbvOi&#)S zcsum^9!Ue<5GpE)oL+^5ilU~Xh#CZ62h%#>k{7@WuA$jdcjLIC$~!K@b3?{F3Mlq#9fro-P+s=V4!x6 z7oJ#{o3t8#sHDCNg?=0c34W;tWzzd-=id-qnw*d1Hf90T-ua?JV@;u43viPo&(d)z z?x*}c!D}uLxLK0-*T_yK;R_C-wus$ zg%Is8l$2dN#M2X$RWX75CJHG&%VHAJ)5PsAL{#-{?l0v<*zSq^!H! z`4e&InCZ_I=TDJ-MFKizL1~Y^C6&@%&^E@i>S`&iU)RstTt&fZ1EHjVl&Io4-qnc0 z8s@!kkF*=u3mhke4cbm8c$!d*MWTW9#^Vug(y%DG{qKJivCN=##XUrz4o{NM*Bs2tDf!;dQBO9W{NWh62 z;Y4-6X}YGQu-PNdQE!XoJw>Bk3GNQ?i$*lP?#c9|Qx9eED2C`%62=ORlflJ8*jwjv zq;rMn62W^|MpS9pbtK#D*F z(g!4EwB6AW;5HJT0Z$XeAsIa@r2impAEfVvgx@)uL1itSl~Okl%tsJg*ZvYO5Sd}& zTKl)}E8SJW7=t&amiJ~gImWH4*Vc)WvPVdLTQHDz z)IMRdA(hM|+F$G5DeZ4b)l$*^meeIBbxBTLVkO$M@@guNoXVr3@~EgXT2vWrYKxL; zsX>+Db*(&!%WaRB;Hz=HRQ!!O|De}f@?(YV<@gt}ivX>-$JltpjGZe9#nC0KrbuO! zCQtayDK8$8l2cxC%1cRk@wnWaqEhapgSVw@loX2uD=_Ap=X~y*FJ1Db%LN4w`zZOo z-W4q8(`Np({;G?Uz^4rc8y~df(;m!ME%~73E`qVFDxOaH4%{0Eghbv}#N@`-OCD>}sy_H`<0r8@Y9>Un7 zlq9y=Xt%Osg%gh!g6T%dY0!*$9HWi6%g$1;q%?UPV<=6iZ-s5TspYCexoT6SJngl( zLX!6{Tj)wjZr_55cOwbc2qlf22QDV#BrQoH9DgkdlthnS^gbNZ+kO;G4_9p6BPqF9 zPgzZrRQ*I!PGR+~8W|(>k|loxRh6Tj%;}1smgq;!dH&kCfhpG(i~nq!6JP zx&cogmE_*dns(Y7I;U?*N~i_OR|Ie8T~C(emH&snDk*u7gg23F4%3u3Z4;|yn4zTd z$fmQ7=OkfnA)ys7@#U8D3fcTZx`a>+Ar7rMT1IHlvbSj2V_NofRiPY4+;G80wRPKU zV^VPj*R=N8W~9;!n$p^P2xC08wQr76oabr(s^HqJ{9V>g#s-j`(Ci+)!187LaX8Bs_j4U#E^1; z;xaUk1}#a)EeXE$Y$+iusk^Eqk4B5ulN8a;bm-)&)<>e9*&c1ALK`V+AwOF1mX^tJ zl01>4qycK4NrKy>lO5j;r?HG&y0B27@pvF)M6=i! zEJRBP)_s!YC1q1v$rcTyjp`Pyq}O3C(Ska5ZO~L6N2BT0m!k^Fo{sG#B|C$WLbQia z?90YH^UePjTLv@^6Np}p}bX#Oi&ZULzqamGpIp=bbN^p@xE2XO*+n7ZbnxsuJM)-{X`gfz0kQq@amrK4D)dJ&aK4V0mcgzZAC-{ zAGSJPLsHxldZ?AlQ-rYH_#Gsm3e{)@9e&;TBO#rgJHTrY4HmrMl_yvg`~lu$(`%u} z6u5Xa*F9eFFr2W_<~<5}?t}L&jqc?T-og67t6I2=#7}-9@2^AS717vO5$Ung@r8me zIgWD%?!@$hYqp8KFozA};ymsJg`nH%*h}-?L(5)_K--Xw~8eNcg3YVsmC_X*-s@mA## z=4Q-WD`w(b@@Z4-%Xk4H#p@CcCWzlQ>@M0NNW&7Gx7!m$|MO7!^l(WL?MHkT(j5S| zjdySF{1oYaaD&i`*6h_n%SR-I(XP*u`XWJkWzv_x2SVtYnM@FCaqJ9wyWOGf-kR7m zHVf+eVyF-;gtQ#evO>Bl(s1I|5(chD+(uwiP=W0Q*X{P@#^~*xX9N#Bk3J-oTG<23 zy?=l=4Di125tVOD^%`#sDCmQ?kmMenm}=AOl)EIxZxGx^=%?1RYtq$WmMiFv8~53G z=wC%$S1b(r05zBAYDMVx5!F|BU|>#Fl~PMZR7*Y7NMW1bgGr#kd2g)LW$1Z6Hzgvb zM5MFucKPN7-@M=>d%JAUX(;%N(UU^{XTgndJR@&|_iU3p+U7rUDJd^Y()fGULUbax z!6mJ&r)wka41CG2b)1I?MmvzzNWq%{7JEo)+c$iqqyl5$2e*?yT?y0gDUZ(Y^$w@s zPX0y?rpBCRPkH`$&sd62(P=-pr#%1uzuZnfxT&x&?U!m{WZEy4{*BY96zrUuW)(Lo zg|KA2D}7!`XM~VYQIwUCmO`{K(xyn811gVnOQbgF5cHeeg`hoIeB}SLh2Hifmji|A zcbq?jghPeisWp;U6bUQ9Q7siG3!O3GY@v0Q5M2n+$HRhfV|ugbcwsy0Ns{^>B<=|zLbXqRLEO~p(90CZcSRPl@Rujt_ik* zt%+?VMLPgj|JxyLL+VH*T7$49z#arKJ?v;qYvF+BZc%R;tmsHOpo+L zA?!kR8gaW3ceW6AojwogWN@L-e-+Zj;977Iz)p#-2iJk0fLp+w;BLXoFob&TW(B=;$c4m8mcgcY7){D;3@F5&`aZ0{F30Wz;D3w;2EJogBCU~pjC@r051#a zb3*w|SJiVPJc8qBiHpsIu+733y8G#u+gn$u)m9vWaaL@NgoPG1*uGR}cyFS5 z0ts%rZG+K(+vtj)k`!i;VPJV;O+2+dZ(~QfDYpmLO?k8ejR;M7$4$9iw)-j0_K{om zX|{5}0t#DvKP73JHTND@(DTo;M>&LczikcRO^!nYn9i5$oo!OAofeJ1b%6py$D=mv z@Qbl=JV88NiG<-oG*vb5H0~Jvpuni{fP1@kE9{w$l?29W6le-Hn!+?YMW89zb7zCY z9ZPoTdJL(DG1)rlLqm>f@{3vY?(Kz$KG3`BL%BN%y*)i%!5Src>>E1nB>rws5FbJ6 zK@4(G5!Ty(o@-vX@j0$DZJ$Aht=!}A9`S_3eg!t{3w{BGs4|-NDuGIqxlM-F;0hgnFIHHN0`!4AE$9$PagBR{UpTa z=-e^0aa|6HC}Aa*oFB`0le^!b&>`uHI>ddXX^&2`edPDj%jZcjgThLCZ%VSKJhmo- z)>2cylxHCEAK7D_pylTH4-zc(gmPNB=uy`4bp-ECRC5RJzf7)@6wzXLN4)jDMchq7 zupq}O`(izU{BOZVB!k$6YeU5){R+B^q`|LNk=nzH=%1{cbVqZ~UJB;A&J4w#zIdf#=om*UZGs-vvfvuxg@)u<3lBd9#jm}ysLp;O3oJw zUVCwxzSOHo*biI@a7TM(_@JNa=KrUXdM(oZ%H9*~Jt}q@b(J@1Pjq@0x$wVDxm{93 zPpjufRu^+?6BR5U0rm@E(neNm@enkgQ!su^=sYiY*+qYzVrk{qd|!uTFDRkHMV-DX zWG@R5=CCKzdvsvN_=61ZLirvEPfBum_AVlw&lP8jIr*2m@;5pp`&Ni-;LpU9ckZTh5d0_k4UptL%%efXrGghdEas9_Hw5p!Tu?6RJ|QfLJulKCU{Nqw@Sv$= zF{Jr~dMP2sgin_xZb>kNxMheNMsPW>q7W@8c$7u4s-$!!5>_L@`u!@T4hPos*O1g% zo#0TR93doY35^1{LUF~@R4@#IUtdyD3eh@(*EUQyl=Pq223v4iOK?p+y{S+up|Lf& z*k~9jDcTk6BqXDRcsrrogSZ`$wi3E42zW8W);^>jKq@tGdw;?E7NmPiiuVQohH-I( zj!Tabio=EKD4}y4ajsO4l@wFAw~iLPgkdl}Ml0BNiqIY-bWRkCAF@QwP(pkzhn$0S znh;$8&KIUxsrn*PFA=hfh2l~nx*X{;VY>a3gV}PG64G&`ULlk=U~ZSxyhCvBLwvKO z-a7@aW0-XNNy0SN&eIB}6NF&$JSi#uC2@~~ z$AscpA$mp#7SL}9K1c9ZLj7A|8iVNf3QlhoJjdNC`h^Y9&f2dchn*7+^80q;WRCW+NddVE~wm;M`!45I2ZhP$)AbI&R{5 zh1RdR?n08n8sa$5f|<66r0yQb#gYnoGE2M!hb$#{=tjC6Qjd@?kF=ODz3H~H;<8mq zT|tQ5sQ*pZbw^M#n7Fk_T|+2_gP}rab)jc9A!q<=N=geM8X*)6#q<<{7?r77pWr4! zw2_c*jASLIDJkAUsMbT;P_Utxbq&SM6xZqqVes|VlG<&KYk_URw!-vw<4EFmB-Pg9 zPLisfh1hoE-blL((;JWbD9-B+mitLs{{Vucgz8XX@R7na2Ib+T9xd24**ad5=lcaq zv!B%I%*~UC8zXp)!Tc0Sy_le$2w2(#E)eQ-NVrhwKVK-W z5`NH1y@CXrs^=nI!oimb-sL#En&5RLTuEHlkiA{O>_#EJlhm7p>TV&}wf7?3M#9a4 zjoagHmDKvFU<C#Boo6r@+%f@1sKeq>wx!{7WO) z9R>Nb9QQk+^`hYQ1hW^AUKY~dBRwZfZxg?yxYnDbz9yt^A-yidZzKH?=>wtooZyE@ z?+EF81V0kO9+B@$ioYc8FGBe)!M_UL(b$Wp?DiF@Uke@s8O_im>01Rm-;?lXq5X~E zj!1829L(#8gx53P#xWW!JXffJ45}oAh#k(_8slD0M*B)ZbFU_9mRMwJ?pn z-yzr*@@<858=>s_0QOhVlUR#`CB+yQVYJszC3S~%hgn;a|qqH?Q@V$ zAmLmgJx}n2_@><$IP9|rNtghzIn#@TVj}p3;0e0kO3nj-i>W@3`WX&>4%qR*$l&TR z&an666-oKRYPY=bUe_6t*%^{>8Xl2s4k3(gn~5`KR(YugNs4o!>l+EH>Mf`^uccSd zB`G*a=nnSSx8NmNLcwfNAzxVtJ1=%UCu_Gp`C3RL1h0J;uOq3dbT47= zGdvipLi!p*#{gqN{BBIJY}r0 z196zSo-Lal_#eTTFKustXFw%)E7-V3u*vO?QlHkH^_!FG1p8WUo}^%bMH=Z@X7H}H zo)vX7#&^90aefY8+**cJ2!eC^Z$ui5GFBo5&&1Na7lM6U&2jVC!*Z2^@tiuigR15` zjj7z?$s}-wcjC(SR0bu6d$Jd)816BKdxp*K%@q<%_;e5A4iemvYn$C`azt3=1y*^9 zRqk$Mcka3msKUIiF|@sjlm{}`H!A4S%*p*aBc}g%^mvZDUP#{JY78{2Fshfrs4ngm zqKlQ_@m%FkB(*WBTh~i+KXHXoT|LHen9{+D#(>UwLt(j)S4qHjPW}imn?35ejqU6~ zUH0b`za)s+T>pvVY&QQ~aoINtHvT3=rz+^djGkkc_44s%0+`L?XO@&_KY#&R~8IPBzTelQi9_}#^B+cer!aTx|`xgUpMzNSZj!w4QDc$8UXmm^_XHm?!l ztAui#;Fa(*%t+4|PB9+K@j`qXad!zV?8X=yv3^MKjM4%dv4s_wJ|<*SO+k-ytDjL^ zVYAN$;BN_@34SMdfI#C91m6&%w}CCW7m+>@`Z3+&PlX(VE&Gz-_d@wCm_fxm#SjZN z7(aUw6PF0dOh~;#G^=nk_EwFR<)Lu(AW2@UDVtYP_G_h93rTAC3DE*Vyok_QSg;9| zEkRt55MdR0&5&vZNy&;rXSh&e{EWjO3ii>Ol57>#BP2y@3-vn0l}PIg8Fo*;u`pv( zC^3FoTL{H^f(O(UwsE#rFpPj`OA7s9wqkZt&|@LI(Qt~L5@Di*Er$=2WJ|=$pvT83 zSRYT^aYEEDw8seLNkTGONKY49yCIz+6gD`pFk+00=mO%-7c$!rm=DP{f|nz&F%Z(5 zh`U4ZLWAz^DzFIB8-)FD6>=d4i&D$8U^g-kK~_Xy(bgg7xt+=;H~x_aig(DDD$U zG0L`QN_qT&M|`9x)}7gf0(Cl@P4G}8H!)#M;M|IfP@Pj$=L*%?OS2Zaq(+|*p*4G9 z?PRE=6b(6B3JDF_BS?x>B^Btv>2QF)n-%~a*h+7S`kSB)7pT8|Q`O&MQ{qr&i%N*l zUNf}U2HI<6?UfFNdVe84TgcE^i;Dm{YmTOxPY~R-l{`!WnyMG6&QVP>w9*uam0MKuHP1SE6+VPuNe;KogWt_k-m?uqzWvWi(c((I?vzIqqTb3&HCm4nsMqo)Zdm zN3Yi$qcN7hB4Hn4${Rw0vgr8`?nA3kAU(0)QyaZ8YgbwHD4Kj89TLqiczQ&+u%rq- z(Q7F;(GHvFgwb#znW_oaYbjVSE|h43p7d<3&#N2P+bYhB7?*^R)FEBH&K+OwvT|xahgjWm zKb?a;h0drbz{TuJP0s>zfXjqr9GIlk!2g*m7l zNf~d_GYRv9NZW!26$6DBO)H*N zQdkvukRd&j z6fA~=wZRCmfe@omrKncL`UEL@@x}nH%H0UX=8}p{2yThg1|1ZdF_*Ql!EadLg7-fJ;B|;{>1GqxTCt^{nQ3KvO(B@7~HC zYF<1C!GTD#ft(;}UNIM#Q%D;~RCpfWl%ntzD16@2C+btsvl^}Nd8AXZFo)nh_l~^L zQbdZ=TJVwkSQAt;L;?HZ#y z_7}vV7{;3*Z6w$$?ycU7CUGc+9yt|niL@2i40MFBiu5*;;%$lBK`6Ed+Yuazw6hTJ zK@i>1Q#Fd+iQ5GnEEETVeF*Lg_5!280RZ(fJyba9NTE0i942@cXLPir^caHZn8mR| zd?Hf6ke-Tkn&7>45|mG`co&@7XOn7`^9&9-kKhR$axCPt@&|bZ9jy>DnIH#+ zfjH~bXxH(ILXLJFuObx7f|Uqb&z|ak?(Rub4^wJd3K1H2x*Ad;WT@ToI)c@1k0UEK zC%6F#U+}IrmE_e?qZSG43T><6TM@+T+_Q-gZ!Or(99AsfPQe^)-CNJt&759JerW3{ zih6vo5S;-Y027G2O~{@W!Ybw;lJF@&ACJ+!i@61_eeCJL)}*Z~rzpoU+OVCdVUrRx z-xz(@%PE$xOY(dd4+CorQLsRJjc{QWa|&U|SA~Q^8t*~^?nUcOeO9Qf0HG*Z3$h>1 znvq8^S$Qfr#CoTdCm#}OTN0d$RnEav^YdxvlIa-Y&g;>;>Yf`GJRo5M;QS_yk(6+T zvpNXLX1(ufMvil)KG$cA;Sk4#8{!b(ix07bbGk?HddSYNn3|t680*_0KPNZ?--dJc zA$}!8ryk<97`g}li43}n8TyQ_+to`lIRj_ff0YhS#tWI9CVy80)FJ2Yvw1|>2r?Z8 zQYxMn(xewuazaZyg?8&7LKwYBYM+a(C4PH%CHr}OLt!~+F4VOg?4$K{quV*-4q%nZ zxqzB8`jGrKMk4ve_VK3_1k*mthCcOTEdqLd~<_(I{M@U^*@Mi1Y0s%Qi$&dT>LuMi8n~fUeY0+?F~8O7$uZgnhAE4-Rk|nRzgZH^}B+X zRP*99jn9&aw=o$P`%&z}Er+7vn?TtMDBggfAd;@OnyM#TFs#J}J)XaAiJiBK=I zC3Hv_Gd2ejo+2+&7-7eI(;{zP;I5DUImr2B5^y^NAN(Vnalg*>W?eBwz|$Sazayyw zngu!AnmA2CZ@cU&a|P4g z6qlYQ6n-0Db1t_LbFkN5?3_y~eMR-=g4gIC$Qw^7b@5Ds|5aB(ezDcmKd)OSx+<7N zf{$~8(R&=ZkgzE5asCvG5gZ53wUtV1>N!(kJ7rYU;OtsohZI+mN)JqN1h;mi(8A&8 zTRUuHNnz~%=SZIlJt&&-)q?jEX?>z|ZQxJgLcy!S#a~}cSrtbRmnfKC!qwdUbD84& zV@KC3&a1puOX}eG0&;#F@T>VIedFHpCMuK=Z7q0GSa<~d5&jX~W#G7!OZs(Ad5hHh zxdT3T^fos%KiRJ?^l-b?Kn~eVa0UMlSGnIPA^TtJ-J5yx!8dc<2IR7}kfQ&kQ~LsU z^y9y+g!n5i`K1s%1l=K3^x}n~=r|EPQ?#NCMdO9|YGoha&1u(48jqvG`xQmYBCP;c z719cCWD{1trVk|(v^3E*jD6;1fQc8Q9cVFKsM8^u=QM=}q(wsCk~+?MZ*0HSIy< zvwzh;9~o?-Ifg!Bcb_ zz4(=j2e||E$$|>1oJ)rkLxt)gBoq9>8? zJw&(|;sLs3glQi851pW3htFNS1$e+jQUCLMPPfg;Qq!I2S1U^{w3HAp4N#(O8^p1sRz%zqf|qHxf>EN=xZgC4Cf!dt+Xvu5Ce~k~ z-IR0GryGh~0r0%;nTl=n^Dh*%*eQRqckn9)bI5XFS0SvX(cqp}7TlYbp2TTm1ovf? zV5UxXk2gd)dz^GMgW|lc}k$6R*5 zr1)W>cogYL!4t{~d=IH>B-{xx%0&DZQtcu5I}#p(&|lWl1A2$m0kj&eb%lc8D%w^^ zZzG5u8b%jwEGcEmlP%KX2}xdQ%9~rd1I6Xa%M1nklFGc;O|Y*%zM*YH;e6M6U0 zHQN3cthwP^_gIbMcuDaI!oNLp_a@H0SqQTr+?Jif9o$MT)IMR_14?T3s1WAszAVYh z%1u8@m#_bWb8}bIXAHyk*Ot^N32q8D2b&0K8)+A?E!aW$Kbv!Vpw0->Z4ctylgQ;* zq?3i#7@>0^aW=`$A%WVWb188*2;IrEVIjIxNw^!_BD5bCI+V`N1R=Rqh|d)4NKRjq z=xQ5f(6aqkH+r8rDt{U>oVQkrH5GYMIrkSr;LNvAkqBh-L&SrUFEc$R52 zSd!hY=}<`>3V*sKXn}2oX=aa(B)GE>?~1g$5JvotlJu|Vhn~h6=W)i#01xC34zT?R z3Acc|g)lz$W=S3uo8U#v?;&*(cmm)j3}ak>iS#S*Jisy7ozxlGC-?#hFAG07sq-aL z?eLq7gkLXA;QU(BbkjETDT)i@O7Yxv@Z5!s`es2I0A?5BOz7<;I1iYcI6QLGOx7Gq z@JFPgOLfO`wudVi26UFB;!Ddn72;ZGQBicLD8gLJttCZxyr!94`3!N-3SQ7GjB>;r zY151RU!6Jml+K-I(&S?b{@{GcnR#n7aiLuBg6;ouf@HC#4w-&3BB85p|*ZHQqpuYBGZ`_m$^N{S5S->%8PZbmq05P*5eoN3h_HabCeRo{EBZmWT5WZ zo@kHXjh5ly<-zZSdUYYig;`*^dMIYJrKA|YV;CD?H6`OKSP|KTgWu#fXx~cApoyUW zMP04=w&FZ=?LV1bhw2E+KNHSiZH@*`XBe?6_+pXCs?Bzvd zJL!z%G9kT%dv?`KLuLCYy+{eM-xc1EFaXIq*9tl$WIsVt=N+>5iwk8=aOG3a0xb**IH8!O+j?2eg`OTg?^*ug+tX?BjN? ze%RS?KJL$!+^ig8BaZhHmf>>ij0)ym4ZQYZF_(hH!a_WUE?JBe+{@!3EulEB#UWhM zINdteG0L>%ImUaEJtfTZX8ZriBP^p_(iO>SxDa<0>$^z!5V)9Gu^yoe+%x56S%Qj9 z*HQR*t|F~*Kd89eD#Qn*eh9u2qHh4Ml6XPE?umRlwHxD~h3Er1S4cq&e%!_PP;=T^_?XYbUOvV07{Xk z$A(z}5Av?81X2V-dFDAhtS4TAobTpNaVGWRCaCsPYHZ^S55e?y+5Fs)?Xo6PK?dsx z^>#?d2*puCdI7=52!0~;^m3CnoEG5ztO#!`DH=`i3Z&bG)QTLMTN&v#-1!o%!;LpV zTkt0LZTZE>471rNBZ?$rB#1nZa^O1n0(uQv4>UU3+}+r#`9=>7HiES@{mS z=;q>nlJ1RrPt0jn7xQiKcAZNx^{$2?O#)7^yCcTD4r_1sNy-)%?6Zt)<{nC6xD?z4 z++eJ%L;M_L$g0Aj>k$<$j*HRKgcRHUv zd<6UP!Ta$SaaPt;-FHW-=h64!EcEsc?!(A$(lt_y^xl$k#m`=xp-Tpj;Q~s?(UH8q znY~-rou~}_B0MV~&2_LhRjRqhK_~?EE6OE#Rq%jQ_cVANdf(doE0BPWnXPrtL~WF2IqENdC zY~n&gf>(EUkK!lX!6(Ey=P-xE?GbT3lgODvMgUjby@yI_Zv=3YHV;QSLujDAcBrJi zP(XXKQiC(IS8**Y|4uD54?{WvoGG*$f=fijHT-XRiNKO_kbWe1E=qomQthA%2XlX} zTD*=(dYO)MXJXIPztK-raJw>&kcIFZG z5{i9==t#k<0=G{gc%INkIgW1>dhifL_yxRkkr(MoF#qEnxY~}~-}XXSEA|;lUX3YU zM;D4m>$rrbH{D0@^s5dptj)V>@UGfc#pjolE<$iHSV@TK74&vF?R6wIF*8z(i++1a zctHPKe?gju`->kFiZ8g@L~i3j!0Vji>I+l4aB13!gCA6a7fd|GpT`y15S`)K4W1vL zo}!?q5X67dx#?h?=I)h#W{32?q167vNVsNdg5!K4GEK(`K4Y+JpF4@Wf=uy(6+aVV z&Nz{e;&tB&F63blHc`BTvu|>YuQ5&+Dy|dKYmso<{14XN1Ilh9YuiPQWEum54(O0W zV-rlyV}>ZfkxfQ|BTO&ilEW~y5 zY|sb1Hnicjv1;8Uor3RoKhNE|*y}r;8>8;XQoYP;{k+Vtj#Jy5eoz&uZEBm-Yx2i) z;dkcrf3=@&I@@Zt>%ni7I3oN9``M=R_NuLp6P&~|Tq4Ac`x?Zq5PkxjdW-+G=pAr1)c@n>X1UuDf{eh+Al#1h9vj`ib~Nk`Fz0 z3ZOH0;l1#1wRoDGwJDh_HO2$-p@Hdn{0*9T9Y^Q!4lY2YVF$XbUUlG;C+bi!Hwf>h z_FlnXVt9qhQpWQ-=>Dpt;x)k&fWN2`y+)G z9l(D-k@p1EcHl1mOm6Sa#{C_=+_b0tJoJCL5?@r_;4p+=0cxSfP z!__D9E}*iU;7>*H=YM?|?|Qn}lRg#EiZ-zkCnNpiiM$wh7h{W-qlNetp>10)l2jkY z8&W$rYKP!7P3h*8(Hip)1+O}=Sux%%kN&xvZn&h&_3+;9p@_ku8`JcA`h$AwCH+B8 zM^<44RrK;zk8n2uA$K>`391O)Oy84K(gAo3=)`%fCJMnrfChWc)v7J766!MvUs73{ z$?=drXQuZB59JkO*#x?vWL`A`XVM8$Np)MrV6F1sS8wrGRl^+LoVc!#- z>0*p>SgG0{iDzv*Mp0`YN&aGYqpWi~m3cZT#^9^h1^o@_Ss{E2;BNZxATM!?e^Xf< z8oH3*lCh`GPeVYmi=WYU_88`MLpmO}x9oYn%!5}vMEA>w3ikav`Q-7m&l|icwW}dG zcW>i$q&0c-YqPJ$Z&dheAIod`8~yomJRDEhjWRsz{%`6! zpH&;A`Wy{{Q!y@bWP6A(u4mjco>*Ivqii#*$j4eo@D@W)f>eG$mg9c>`u=^pmeSvd zTDs1$n*y7)$=6<=HT{h$ys0kuT9PeuqnlnJ!=ra{@pwkw)m*%T1CU-6k|p#C?*sRQ zOn#?S=Mnb$*hW9Swtyr`nU9_`qXP-JxQan+({C@C;5WFjN((xp8JOv$3 z>193iKJIv&PB!Y~8~<5lbz-6}sh))Mj)!^@ZVk$CcmtcTLnPH32lkZoz%*MgJA{fI zg_v%slQGoG_JbbEt`fqVgzQEtuzUy6Rk?#|(N#I6sSj`nUO@HK^s8JlMaZ%Gy!O0a z#Xx`M!y1A_Qn`fSl{F!cUO)#`rwiec%7#)q1l$D<7QC|Br!uu4mD>JAh^A7pn_$DW zwTgbcaGccXkCBu!A~x?3d~SH^s3|S#TLwsHp{SmafD z{(AS-g(~v{+_+6@K}X@UVG176il=iTcbVk7Fd8)Z(8-6wa6X_9Y)tl+l-wkEWKZdH zreav945Zamo}robS})J+@U0HyZ5%JOKBj_!B^<>o#tH8J>rCWRP!|QX)%Z`kl{=`@ z{6+9|)|v2e8H+D;IlR8e`{e?n5khmL3AQxdvr@X1^JTFFqs zS+AVyD)8^Iq~1ZrL+BN?o|MY?9Q9Yim+iv~Qa(&Rzu--xMJ1`Zv)}`8t7#vwb%Dwn zL_g|$kq0C3>xVu18=d}?_ely~7t%Kbp8^!qErp**txiPZlQ-yD8w&~9YC{Nd$HS`aFg_8HvO+yA(|DpQ%+fWsbIM_(-vZcir5h7)lXk~U}J)6-+^~v=0af$ot z2EjhSj^_cAyg;QqT2gDQ;6oB)0#>!X!SCh-BR(wH2bMX-r!$Ip*hwdFziYTv4>#bG z*Qq-hg+d;0&rmjrP{lmsmF*YCqm<{sXGNuxxEPxzeo+Ws2JZ;zTY~d#hBOEV;(wRI zl}E+vft?>Dyk2VIHZzmHmz>9^Nt=lV2u|e@GmM3+3NcSpg~OYqLdK|@ttWVyOR%-1 zWOE_iQP^e|D%`+!m6Y={rntWK#>}yjnzX#^0>N&sZSN3UC738&d518Raq!A(1)nh- zO_G%0=C<*0qxXbhiqL#t@QKjT*OJ0t1)rIi(WV=;=|+FSYruHGtm|>oA;G@M(vU zyCp`>XdS`hWx{w_A5ea>BzIaq$}oORYCUL9mgJ=e*{_l^kD)gFY3Esg9;BJUJYYp3 zo>Q>V8?GS9bHYwM<$W005tPw0_ypqc0ZBdpD4NzscyRT4^pof!%Nd1mRw0g&8bUf3 zlKakqlCtH5zKqrZ-AJ_tWs3?amB8*2iA7x02)qgxQW=fx3avd*N22n3 z_#misK7D-mYaP3*BA~yDXk}gw9nZ_dMK6`o4E(Ss^u2#L!-)8NOQp=qIU5f|$CJs#V6d^iW@O)I=dC(s;?x&Vsph=5wu?#xGooR*hP5_|+g zM5AkAt!Gn^XmmacvFSmCc9bqAv}sHM?I@uMrK<`9Xh&`?8I2^PeZ;hng!WNjVDzVv zL^P6!M&bor3GE}NedIKaXuQy%eI$fv3fh7Xc}^IVoSQzF))u@uu-HW3K|ouGXa?Su zSK!>*c66$Y7R{jEmG`!!IOH#>W+vKrrVo=#| zD0ys~7@BslZkYG~NL`FzbDggD*Kx6=48zdL2wMM;+C%MB{nyeuDs~Y{E{?VlyeKoZ zxwVJXj0qHPYHA-T>E9;^0Z(UyEt(%A6g;94zE#F3?rE{$VoBk-g40@eU4?WRz`-is z6;ejOpT-M8kFXSDUV4R4oS<6Af~rd;l?;K^dy<@OYrLQPTe$A8DhuwD)bpSaJtKHQ zd;eEZZO76oe4tg?tBcdmrDn7bXUvMel@xpwxw|03eOeoEGgIum1wt9A*Xvvicg~K458;T)Qg0wS4giDlE;PYIU#sn@QV26 zo03L-EJWW4K77gB17q6Dk^08>6!0X-VOO zLPCoQ>6LGJQ&^8t!;6s}$82N&HD}N#N)kzNC}gxZFT$!Y49ocdEv3Mn^TBW-kx#E- zu2zzi45pTGCR`qsCYh{G*&2YxS!c7y^0t6sI{th_@30+G?~5*j7kNK!a`X zCp7j2G~L!Vf~TyeVp!LaRGMV-XZ`xl0vh9LrR(Urg6}0gR`3aVj)VBMpU|cq_NwPT zaU|-ayX`}`HPVjkO>~XdoxNwz>lwN(*To&Q09%6TZ(Qf6{ZL)!xM+BVq=LAp&9ZI= zhwgt;#>3kEsF3=J<>_?R11G_%a~NDh8PDXHdj#)Y5B>bb{7LK=$9Td;C8a!Y^-3om zkeJ6JJOpXlW8sZ0uN@uD|#-I)P)UVx4^YV7hk74{UhkY-2?mBft&g6Bfh^3^Ea{i zi)-nVyc<{rE!tK&pAar7R8I*uyk@77-0vZQUcRD}DQHpll%}4cI~QYw@Cp8guj7Yr z&`5qmN|)Cw?D18H=npwVaeuzpY&Ic1N0-!3n4cFqV(hhlQpATB{|7dJdV3y>oxrS zVZN2V^B$5sB#dFS8iW1fT;B1aQax?#fvVoo#{d*C&iK6E+QG70)vL0Q-^hMcy}`;h zoIRy?R8dFsrujmFKe1EW497|ea7T)XLKl`%#>3x*Q4~xPoMgrRM}1~Hu1B3E z90SNZ)*XFIv4R3S4eL?CciO-T^3rxEvre&i!aipJ-yp`~aa!gSV<(`Gupba&_5^M& z7&gDlO>hqC$wJX*(@d6HFBaqp8%1MsApRs<+&tdlK*5Ou{&0$%16CP7PYC>=JKpKQ zYWyLe_fNbR9;qdEM&eiXXyvlCsp$VD?}{5ZQsh9l&6Exvq*76xil4T^ zqG<8^R_6)5{Gg%!PnUAPh_1@#J~)6=;R>d6=pAHuclD7~wBKF~LpM5`_D`-OMqj2&)+JNdciZ#XjMxSsdXpTD!-OKV@Dz%pue3lp&0 zn^y^m-#DS1-e;s1*XgF7p8DhlBtA#Aq~3jDQ)7svDia!*8s1rAE5j>Ha~l}=*p&^8 zgCw<&5~3rK@UbV1MrC(M^GqSZ{Fol|Bk2_ywmj~XlszOw{}7x4GJ0B4j5X3YMW{^@ z%>9I3ex(nD_!}X`E@|}BhshbEs@agbgude;+l0(^8X&~03ke2Gv>9rJG|hC0x2ARr z!P`8N;gSkJLkCG}94s_X6}&g2LBKh@PKYN6o}g&nDk-6-Ngko%0l_Qs>dhE0N_8@p z@)c@d5)!PS#z&|>2ws6bXgd7>-d*TT7WwB?Os}%6zu;p`owuwSBsE*Jf1zw`;rNY&_NGEdOQ^OK!mS0L1e|;%$tS;i>5vVegigA`x+&fg9HX`A zl3|<_JeWBTX8#e?-Xc_36b0t_Y#5}ClLY4rZ(yK#o7RkhE@?5K-H&PC+Eu8-sehG} zj@K(9n*py&ZCu0sm_(|GC}oTDBQFP*1%DBOKMVP4f;X5tvgn;i-Xz+@J#2jTaL&h)AE1HRQ(FbgOKLAC1nUYmIg4K;HRsej zO~y&;Jw{S#^9ZvsBKF#U4x#B$(x%$3QXP(V&bh^%gr<&%^^c_DNFd`mFca!cdg!>`w3l0zhx}cOUD5eYY z0y7^E6rM`iX@bvwjOmd)$yHA4mZI~yp`9O=VS`Y?|v;q$033HGgGIx=TE3;&Jutq^`J1m7e5hJ^j%Q*gsTzg9{&=T(2L zL{d!8AJXCZD-4PHWh zTL|cPL;79ku!_G#{YvQThP$TIBVQjO+krGAa1Y#&)cq$R=@hEDs7Qpy;z)x8pE~HS zIiPFy;RW$ZRM1H~c~rP26&YpBq=##u(n)u0g8DUYi0;~nC1Us48%izcvwa9~c!#9? z9-&FkYP;QM+YPa^g40ktD;Vl2oss(?&xDlj(J?hDy7d$<^*+4R;B}$I{BT-&yP$Sk zyw_;V6jg+D_0IingUYLbyXknc_k{8o-7314ZxYAYCQ0{hl02#R3+_lbQg7FrF|x^0 zy$mOOKxNs@f>*(L<-mX`s7LCO3`Zh$kmF{W#_gzk>Tjg@6;2#iUM9&0jTCoCs^;Le z^9T_RhxZeQJ4kYN&#>Ta*omV*U5!pU!1}VK<(O85C+sQH4qQtwLP!c->~+`mGUo>G z0GrTj^8I1lvxfAd)djrMj{rWCgAKM>9VPZxXOq)DUAnw(RhQ8qBCJh&ZO#zp8?+b= zZ06Og91rKFdkT&5LcL59_aPu=nS3?|!g8psnk!gH=%t<7IrYZN5{d&Z!d^Va&#h z0L%s7Z(e^Qy-E{!+;lE(HBj)GVGY~QHl0_{R}yX_)Ej?nTG@zRKri!5Lv2ZWZ1f-U z*vRe21Fu&1Y+B5N6!6d#JQg;hTdzuT+`<#Xo&2D!D+K3diur(Ef8~g}hv)$e(RQ!v z)t?ti^+TPUEXgZno#m!|0e88WTAqkN+H~Gv5cu8Wa|Sd{e;fAWySdm=Cg)P|deM3! z%^{EpxqpCnWa)EQ&FT7aWD~Y+pu~HmB2n(PO5LmW@Q(Mkx3ae_fL|iRAtuv+IEx z@+D?`b))!7Qaqai&nEse?~i65@*QMb3kjC*Lc0nPv7k2JOL3{tBo;I?VW4=D;MBW~ zXC)PQ%<&YVdS3`|gYudAfU^MHpp03vnD|h(h)^yq)O&{s4f!~MsFYOa1>1?*?S)_u zAs;CedkfhSLhDE&y-zh+&)l-mM~`C5L}OT~}zVgS4U08Y-kiz{x_%m{&WVJPgep^c6?P^F2QX_@y6O zP*N)pyb2`Xx9r!V)?Mj~`og?vsB100KbnjC$~+Sq}8oM5+%qx1W7*}}dR z7zLc|as-ku@!PP~()VFHndWF=$JT3N7{&sIG3W6r7{F83oMd>50bPBH3lPu)dx=p@ zFWO?CJ(cf_L#_%A$ETRq88G9KzoJZ+*rx%~CTeTh%ye2xIA}KykH}GOw zr@Hp@;;+eHY!7eOAEt%m3aj1s=w)rn{AK%V@8#>XrJr6&1z)09tacJQ2uh&?voYOW zu$5cK(Ye?rQ_B6O&cMrvNB9&L=df~xAMZN3Jr;$3sDKgMDU>2dD}Iz3EUZ724irMH zxq2f$J&0F36i4$~MhMSb3?f*QFeC)K2odkVPm|AW_U591M zj^I!33w8#Kh`~uhj9KB8SOKlJo+ucNbRM`GU`E9gkQg+5h_dZ_PeHufOBv5(${6bD zGp{?0Z$f4K2>*t}jInnT`lu(LpX{mWdSMn_LHZ7t@P6Glh3}(&P6gj{@o&_x00x@F zK%ScRIZo-%RQQX7d9Y&lcAWq|BWt}O`+rGSI z!bb)<=X~&rE{R{|y0^eLg0o|J4Rf7WsGpjUqb{CGNf|VQxdq#G^@^?eC|eLLOvPeI zxGj#q1cM|k&TNY}={Xy_S7(J4*KG_6K>XRs)Pwy|4*-m-byoC~kxmz!z`X7c7*_*^ z)PP8IaI+9Ug7lE!_0IvZ5wCv^UYC@<1Ex^+0n&Tm6CwN==|`krkZjd|FUf17>($W= z$4=vu&W1D(NWj8EI1q^;+T)S^vJey2hckwQk=CM?(6iUS1baz}_d~^e3+YOoZnRF% z_&DlgLi#AcU-i=afR!-8r-H+--nbl3rHt`1osK8*C#0E>@N3hVk>&v_0!(82`*lya zsnocevataBAUFoRz+D(L(=kGQxZwR%&__4}Yk(0QJVEX5LW)tDGZ1*wxV@ObeMwAN zD1@^i*>Gqe5o>YO#hWqG1yL6gyrSE)k?{c3g$1AfSFbl)p6f6}J&hHtfwV4{V85Ku z5}e61-iorFg3uiB|~jxSP6G+qk8A!HZWydmCd+hvMa)5uL|q`i<5)y4c$fI@kf# zz>=wxlQ6QcO~dKjk0P~} zup_@#bd$l zGyVpcrUer%KF2fXx$5F6SvwTchTvT|Elf%8FbeEL@W-2s_Vyh5^R;`(UwB8|)PX4P z7|yoW{iKmvo)Ftf$g_PesJs9BF z1t&}L#+5$~W1CRnv5d#UyI`wnqgwKxqnc;>8$I05quQlljfh`T%ah&c$5T9QY>Z}-S|_raHb7TTqhQuf1fCG#KY+d@8BXfUN4;cxYg$=*Zm6a1RLsG>zQr5>1nM4Fzq^`E12 zHiycJX+yN<-aSOOpVTWnC+u;${LgVZ8^FsLr@bAiKASv4U0?8VDm&(q@=XOVmuM5p z=^MZ!58%VNm{B~Z=khuV59JMp@&-eBew2_glsCr+P85~(+4s23^*P!M>Jfu_<65Eg z$bP$|0*~3}-8KK)7@v8Je^=MV(+2vSI9&VKCbfDFS19c~2BH zzTjokEQ;1Niz1t5Q8a8(Wb^_yD^}r$UjhsPOM(utt!@?C)F2As(~yILio;Mx3AGJ^ zCz6g8{$Pl_dmI(EMu=I4(@c`=elEU;GTS8&pgs;B0*`@709(a})WuIoYVR(jj6#33 zRc29H8B@_u2pOZ2KUgg|w_Xe%5F_)k#(kzsF;HbemtfPSSXffH7+8*qWx?{G&wgR7 zP1m3dBPPO#30p!&RBZ|7wrfjfJ4xxzLT%14N_rh~a4TgDmCk4#OtWsHeN|@b#%mkx zHb07q(>((fm+D8!dW35jydp-D{A1z#<#p!<-BJ?=p~OLG;viHQ{w3yli#F|rZO&>@ zE~=L`d2-VJx>fn1q@{Sf9;fXm+qWORi(ck&I%LES8K<2<->GO*%q^cHoM3%w_99(Zrx0eGb}E_h6fW@)P3$$k2rwMS7YkmjA6+KNnfrW-um|CokKecF zC&j-^_%>|U`DEdgQ8(qwN$(YG>p81;jKOCo)4P9ChTeMA#Rc`y>$!Jtbxs(B<5z`< zkvM!y2pELDWh~=s_aK~Jr!xDYeJ2b16bENd_hRYvdoJ$O?@^y3JTua);5SwDofz!2 zZQcOecVe);)VPa_=L5K^!2ls7Oi&*dya>`fLd57C3 zz#2j;MPkHuMm~?zKBUgRZnT9ed?s+hI314Qx*Y(6bvP1(=scFP6Hpnzed@2%0or$VI``mQD$WBJf(ry6^BeR?@-e>w z<9XjPzfS()EWVzMjqg^icXc~2V*H>~5A^X9k_tw9=T`S#onR)Rvp>?Df|FL+D-W1$i5czdd|wN338Q_0SMJmY(JH7b z3+W0-D}v>Oa4^!ULicJ&YlAg~7Pde<6cvM@&NPof;7wOCR)O7m=g*Gu=+j|BysZ%K zhP1ozyF+#lrvif@JsMyY1l^R4Mmi3R5}b}a*bxbvA!T;`52xxnnQ(lODjX7snFvqu zl!_jq&enakr05nZ{wf4m6!DFySQL&LIE}XxJVbX;_MDKsAk=BRCre6Srvlp|z_tk9 z7edSmACDV+N!fc~nsXNajEXT)2e7}F6n+W<+V2biW5Nr|Lo5oP=jB6j9cS?V8BgQ; zP+TYb>^l@U=;F1Q8a}|wDQmsiCZ11a@seOwkOEANV0D1K;pDX`R)(`!I)km_5kA<~ z(`5V!mW`)xeMc5Y7;arCu5gv_t6w)+f!iUC$ zr*jETu-Co%#M>6eM8Je#dN06^a59H@A`-?#j0q9GgZhflT9C$x^^o8|2NAV+(cb$I zV?B7=T#5;iVnXGGCO^6ulA=+Q4 zH{R}|C$@=??MeQ6FYN_<_l%~F(Iyv4@>w4qKD|e_eYL)vu!q0VquTy=bMY-g$r$Q! zFlQVriNYp$pDl*KZd}k37t~{!Gd|TL6GKtV)S%tNkP)Yjq%y=bhEmHMRf8BxI6_EA z3LZ{8lGKq@hK`Z};}0%g2ZMtT8*N`ADed8s8-><`g8T7=emwsd>PJF|J>(fhuUgA+ z&KmBYnP5zqU~JPrw`LS_T(Y{8UO` z2TVhHR(GoIMI9@R-GS0~ru3ceHtVdIL`}WaEO75Q9u)^GrDH7I9o{3!{a<)L6--IS zba=75xeutNbBpQCJX@dAk;U%P=*^s9sooqjk5nHsn0E0qE+EwTBXEP9Q`;SskLhmG zEroPTDcw?w9;vSj^7%c{M=A^GTB6;B0vpo_P~vftCSquI(-mw=2M~-CJkvjRj3iI_ z)tPUw`70W%k045Erf!#RlAh&uNYv|d(yde*Y%ZiUlH@}qLNwmeHfRU^wfdl&ZK%MU z_7vUBJF24E1#AO`3r$*&*QB;~lGg1z@>TqxZwfiF-4Nek@vBH(dpmqymFpi^BC3y#YHBwT39JN@;O)TWG3ONRIFQ#+zV!=yzl1n93ck1FBu98$-jY`|ECV*>%saGHo$!cCGwE3>;)KXZ| zJ^-k?oLT}~6+J`i21)r%l-(wjpXqDrrMIxL?Tl1|#_PKLZq+9A8%{h`p35clAjJbh zZja@DY9AIF1i+k;uXUfKPahP*t9b{{NbFV8W>Vn&8d7)q7N2tBajWzQSa0(uXBc1nqMoXw|>KSAYmwb)PD{ z=dt<*^+c&J{vgTg*Q&22wSE?I9Es{jfVuCW@wJ53e41N~;ol_4*1Ul~`6buk2Q(W( zYc|2jl(Ly5C9&X*HPsx{&Mrhv!8uzCrX(9(LNb@o#y4>1n=C4+Tu5jP0C)+}BEs+X zUeh%fOA76Q)Z!}mxU0relEUSLoQ}I%QHbUTD+oURDOyERx{?sAEaZO{n)L12G;g9> zTdG$MRQMIu5TU)U(8z>56{;3013@%Y@CrH~mu=Uh+E8WndK#jGJ|(Ni{>PS5^KFD| z7%0F9q1;NSb`V-4g$SP{8ZP9U3*J%M+)+|5-boAZ#QQ&jy(Bqr4&s67(kz~uNYZHA}(aG^h5%o(GQMho$=09VF28?w_SHOC4igI6(5 z@QUv0EJ^J%h3p(5Izt$6zTm)Rg`?w^T9=n5plnibAZ^HQW< zA-_RrUoSY+SrX-}Zb7|S$ZrImdAysl3Bs7aBi#<}6r46SyG>FxQ8@20A-qHAy&v@< zq56jqJt8z87m}xh{6V4kC%9Iqo)&^9g!XfSx5>nlsCb@=Hz<1+^%)^~S#ZR4$G0WL z9|*x@r1ymCMKA??Dhzl<@Mikzb4lrELisNtc~xk9B*gy~>M7GtDD%AO$C8@g3tniL z{UWLONhrS)lIa5BM@deeQv52(0o@G8E((QKKOx72$Z+wRGYL!ltn1oX6s4CevGCoK zL&@xt;yH!JY=XCRRG1pA1}a{lgEi5U{7H-s9|YQ(Pf{?i(8e>&7ZiM0T(+2`C>Dx= zLba68UIgjSNGk~mYon@V0M28E)sn9vc!u}30Z6!(wrPsxB>g;Ch;S$e*s#IGDOML6 zYa^`*))Er@%W9~Q;a|oZQMQ55v#C&E`xNU5KBA_=3i1Y~MkT3*yIBkq%C?XeLQo3T zHiE;^*%p$b?I;_Lgz?ngS!nDa_$2RYH%VUERe7!rf3>lPknAc%hf+IIsP+a23hy5z z#0LxIor^97m78FtRimlJR2#9Q&>|q-IzbpPR%o0m z#AgV>F+%frp*mSe&Y}#Ht~guhI8zAE6{2&%MS|C$IoEi8u~g^Vtj?1Zju)!SgzQqJ zYXm0|tNw;`mC(9gNH7eWHz7?Bs#}EeI>CE~54lZJ<5nTN7T`svHwvwrh4?-pxJQU4 zqTVaio5Jppl;1BDlLVjX-F`%pXY1RKBRwS~FAA*(h4NXUdRb^cC*&`nJ`LUw(pQAW zOG5KCq{)KwBQ-Ewi?@aN9U=Qr@Fp`m?&bT`ejr5O2hJP{Axkdp;o>EQG5G%{7E=mJ=#s3Q0=Ys;GYv z99T$JmsG4RoRkZ#b%pY4eS~x)NmU_u$wRrRqyd`=KDe{mP*OQmsD=Qnf1h30XiI8r zDYUi_+FJ|F9fWW%Av=w-F@Wii>MX(ObgGk4Zx!M@h5Rnmy}>AO2e?Nl4?(&P94sV{ zBRwXx|0%Q{MS4zH;z^;JEO_I9JrVC2$UmdvdEt$>k-h`J3el%R>ld)QP#!N-(@if- zmDI*}@v_EtCuM&UqM49p21G=npSWacNeK~=);dCiU`SsIhl&76HK$M#8)*y?oYujo z%%1w8ZgAQLD)V-RXj`dMhe@q=5F9EA4wBTsT`CS0nuiN{0S=*z37L>UN^rCgbqmd- zgz8iwKSl8TOhs^|Ivx;L$&V52el>}(c>7;=q2>heoV+85|T+mLHwm!Py<@XWKQ%1>Pbk1W2U|-%>Nc;#AKSpWU3hf&R#yN z;Ax$zA7wM>>HNM)1#>%5A~;7yMVzKy|4gu^IUnl$U|yjy2hxH8qCBZnZ9D3+Urd$dM{A zyD)W2A>2Z6ewro|MioA6i4WTzA=JSi;yzAxml5}=_7Ym#BkcmV1^ZC8x6mdGcI>SM%qLO zZkAf$wb_MQ*e(=aQG1L&Z;r8O>&qF{;}y9*H%%G9>#>oMv-csPcvZ;hl{2PvGkRtB zwiSI?NcRxYYBO4BkZ~8QI(JCu=>Z(aX?uRQxYA~MM8O}E*?fSVCdCUTt>wNp?$k5N%lDC5AH7G}4XSMrEAaZxkT8MwO_bwR8~;se zK3=uu-I9u1gz8*g_CB~*YV-hQS4ef3pt@gb`(Y|3QSp$_d{A(#VBKdVwXYY-tM!W3 zH=c;f%sHy*!)cluF_42Z>B;}u=-iP{wq}KPSUjy1l^|K@=7Hi%p_2*7~ zB}G4>IfIbTjPxZJ-@wJQN^Q&}RI!i|CMaeTlHYWR6Af0gOKr~~+tkMy8WJt8>gMfnd& z-Y@R#b~&zog_oZ{f%Kfvm?Six7vg6qdlvN#A$?iM-xQ*^1s}oT%p=tl)E5EHeDO}ux9_{*tMtM91z6=`}^ep- zK3K>P5qt_u^9a-fgz9J^!z*teDKxt&8x4*VvQfgA9fdYtd3!84S@5|4OB^GqIv(JL zS7!^4!8(hD742Rod+%e7lTW|WkNX~sYgg~!}F_9uLjo(eVJC$Tcoz^ zkpETES+@z^YwpC~)vZ#)+l9u>LUoUj--Uz+-o69rej%QO`hbu;L>Vr3_Mp(h+qR=^ zm%Ff|{Q_k;+T}|^@|sXh7NXaY-Vw?Vg*u1JyOP@PQ-M=meE_C_F9mznZJcVSd3pU? zN%42o{tTw;(Cx9;O5AJj2eW(q;rG-|1$frwr$~V=u0qgXh<{R9Gz03Ngk~(1v!MQ_ ziezR<-bz<>QZ|RsoD*p_Fpp3!h%~>@URdy=e!J3HmsGpbUfy3WF4YOr+DlO}uh3pp zh;XH|rG;vF!Rf?oZQ5h5)==5>so-;D^S^M(>Oy-hp;}wmWPPE5@9Z6Y$;Og`jf7+! zp=yCmg^tYxZ}l5KR8n&Yz-@l9EtFdd(RxCA3n9U6j&}fi3DIdnzMoKz5t?TS)j0r@ zxb~gzM7m2jZxqtrLh}xA2@3=aMis3@Kr;r^g@*=eUa-gP)Ag!xTz3X#I1=8a`^B-6oDRRbOHzIt z6=w^{XrwXV9B?ndZEoK!{AS71eiWglr1#j-iLrG5e*v5;tKi$Taj^-C) zTlO`PgJ ze>z{2OV$D#2|i{kvG3f{yKm=IR8-(fx3&<<7G+z3jfHG;BwXo-cS70@>?|ZZ3hnJt zw-w601m~K}_CflPioKCWBH>iqpAPY-?Mj#1Nb)ktU!RoJ1;(B)q&w@u%y$)v?S%+; z&i-3GQc^HlXk8%G`w}jt_7c6!$CNcENNv9>)mdKKJyPGhLI}qTK2@WI=hb>o@Nrz> zExh6isqF_PwcZyZypty0M1?mI$3mTWxru~ZP~Z{7cm(l6LO1|vUZF7%X>q|vmNo`S z@?k&TSzN6nH7NuiOdX7rRE!q9%sw0^DIOzuzp1U)i5R2_=4BUlXLy$oVE=iEY6~0A zQ#0O7+J$9QbO_E8UhO2w=0buk5HsXgjMEw8v}57nO_ExV3o(OXlOfBCwLFN#3=Z*P zV36RmdP=(gYChr6!9u#K5YSU+n7b&!zHF-0U>$wg zjzVlqcM}d5N_rYcy z3z-vItrH$NI8{uM>LW7}VoRO0g<>-yrG0o2QQZP)3r(K;HqX8H=s0?m^JKU76*3-W zZ<+m&C((&v?C{om6)sa*Cw5Z{^CRUePN&nmPk-g(^W29jsv|pIQ8C*jRrq|hAW%(G z2?5<)VBT>7B-ough7s?Za>}b?uz=@PS z$17;gpLzOqGw$7A9c&EIHi*H9Fyi@k@ioa2IJ@`9icMI8g9$-2suL5zV zBu9I)dnvn8FDoCARMLHAk5G0$cv#5(K?M(zLq64glAe8<3c9)M8E`c(`#=bm)SJw% z;(nJ4ozJSajsOw-DPIS#fGNTQuL^bW=Netyc$12kDSJb3K&W~L^({a^$m>R$p*~FZ zE@juMEPEg6V`2DpQuFJ%?h(NovAkNu3A4SHB>OiP{|ns5bzdQU3%&v0gCB(KL~6g5 zl>bcGkKjwtsXt!csM=w4>m}WKIkQmB2yWnI1c}Puba6QoWpw&wLkMO=?GI)La|k5^ zfrCU9qe0aL7!pc`glcZEs1OW5T1ZF<7gdZ94ic5~AT0p~3gwbWj2eyLBa|Bn*@mc_AZ<+9W=L&NflY;~6ozdfG`6E`d$6TY$D4*p z@`{vdgrsr@FjAOM&O z3c-Fz`wQg(LUo|f{}9xJgy0CujzR4PN1+}pv=2i%PRNcF%EN_Whaw#<9CW;pjS_lC zQ+BN2s8x0%6{mvJC_5YJWF#V472|$+64L2HbQbEFsAIr6;0$5dxk%@M^M&kUp}Y|F z0`OPLt^$_{<&{X62-Ov!2V4X$1-;;JLUtX}^+I_A(zW0wA-e|YMsPFgE#OvgJ7sqZ zjR``>-zmFODDOeK59v0cx)=2U)QQ3;ccDHE9s_p>!|xY9c|`Eim+~Q`2f-xps8Bu* zo)jD-EB{Hw)2L4%Jtvf>fEU2?l)WTm&mg^y^cr{;^$j6^8R=c2|2yDK)VINhLN*!c z1MnVrMJT5ry$C)PdS69)AAAJ96w0@dJ{O8Fz-N^Gi?UC^zlH28@GX){n9X5P~ab6@1`~LvUk%=C#D(s)UOE zNOK73>_~HhxrA~yBw}+}6N#`~HNW6OiDrk+4sz<&hRaB50TY8EI*-l28(~tNtQngyqVWQC9#ff*`d7XNV|cZ!1iD-q1;c%_5u5% z?k?D>FC7jXiAoUgAcq4FlyvQ(LUtH9Nbvc|-n5n-jCwdY02~317910->>wPA+D*lY zNXHm3FRnZ%dx0Cf)j-9F-WHfC1FDc3(HecPZP2;z**pQp*maWJrn5? z%FabP2V4j)0+$P3(NkT4bRK0FfQ!Lp;8HLiTq$JNfF7aIE0k9WUgcBXK*iOl*MXZ* zuNTT&kS0*}S8y$5w+Z>Js5gS!!QDc3Gt!;l??QPG(tSd97t+1p4xyY#*~8#|${t0U zg!Guu{}H4Iz(0iS3Gk#)K1A6+Q6C4-fCq*0DWQ5E^+loaEb4RMW$-k3K`7r8vNwd{ z70O-$Z&CId(yKx~8TED4w~^jK`WN_6DF02_yQm+5_rVnKG57#{BlN8rs=h+~0enL3 zw?g?d(yv1P9qM!)Qh$`x{zZ84bD{bkdOppc$ zc^A?^u!!IYsWWp|3sAOj6B3N3e{w!oGA+18$%3yia`M{b& zwj^bPQCCA+4k;6|RZ-Uvq7>;bLbVoH9jqv>Qmq&@B#P? zJP+Om-wEZXNWX&J!7pI?=~Zz&(r#d?P=0|lohlrjtwXVY;=2Bn%>-r!OAFaNNb7(V z!IFXxrYYw{T@N(_tDvp`KIHb}z!21-paX16*#=0Pf*rsxp==`+z>$-KkoFYvLxu7% z)WeYuK^g^)7P4+6;wmL^mGTJGQve~`>NIdXaIEDRq;W!UCK7SmdZp6~dRK=Ke<_cp z;tp^Z>TO78BmHOGwj@qduX(x~iKs^TDAEJqanz^5Ltt72H-ATJUl_M~L29rd_RzzU z`eM0bcSn5_yvQXlfwxd2FfE|#wNVb}{$XuY6>{BdpebaDP&QDf1$3+VC|dx$O~w2| z))(4ckg~Z!02TrR!60F5mrxEseOU+=L0U}67DifzvZat#M*548{aGkiLK+NKMO{v) zRzqDDX?Z~4w|Z6Z27Bi;c5cHerECpqTeQZtCGEGNP_9YYT3{ovE_h7{7SI()Qq1A=^tRw?*9r z?1TEDknN2$lClz<1rDHWU$7tQ{($J4*JOFW{o14S?j23G+HYq)qG_hGbSuCUyDZO@ z^BKkOOLb;$hwlQuM5oSqd>4IJ@g>~(GA`*69M>zyOY(ldV6tkR`Z*<7;~h6XSK2Xv z5Vy*ErPFsLbztNNU-J$w)61qZ#DsLn-gFw#r3Lg&A??Wd862sMc@DxULhC7^o3A+J zyYfn`2YCneW-ngm_;WB&f1@!%hP@@!Dh{?f_e6Rd>i+t>ZC#AF}Ha~5; z9UpZUp}CFVd`9I?NF#(ggWmR%;$tW~NeIUx9VQfK3(jzmo=e%)f-~ra6R3Dsw{KoU z#TB4e@Q>F^z^{F+)WDzZ25N5-;vQAxpXuHA{0)`gGQLF!&s9ZVF1GeYMN2D87Hg*Qx z#b=W{zh3kk6*1p^lZr$r=R%!NXblj8g-{m}Qhu%0K-6Wx{6f5{&`gnXkO_@hgs2qK zVM4&~8;%s>Z2>K%y}3~AC=A*S=_tV&`GTX74i>V}f@6m%VT|5!REz;<2wemv9Eu1p zl@t+iaJJ;uHIf`Z2q#GDxI-9&m*2pn&n5}ZWow_kz(4Q7A$JZxAJU#qky_XT#}|*^ z0z91&o^_onh^FT7d)QAut&gzt(W~Az5;jy;%qMt#N#}x+oGqZv;WrR<5n--Dg7;yR z8%XLJB9!Y-x-RFOd!gQqjdF4DZh27c*klo7$I`6t0fS znCw%^J>xW-@i$&TZ>X!qC5)>f{k?a<2aKU9W2m$F#SDu+j=?ARIeW14zPSS}cGcIE zT)@Tj?fHp9a3-JwO&HY@Mm5itdSfu2V(&FG)_{(*8tJa3UA?qYcuf4VqC>!yQ?JZ~O+8IU`FzN9JTK>7tUtg#_mf zb-I;cd20VG#Dl3FBvh$TXAq?itJV=h`m1`k`;vOv8>6IlpDfh>Qc$9PJ~GIIoM%6fxaUf6@tBoFm1%qH4>C2J6KNUgX|Oi}Ln%?`*HtNB%gbOEm&u zZF&Z^*hf-=5mOx~ga--n5kk5LWrrdiAY?}&9VrBd3trHk9xbWF_DN{Jo-(b*N*dQK zj6GFo(44)XJvmNN%y;08?&OyoDLYTN@e;~r&?jo_Dakpa!b_>WSf~$l{woz% z3fWb{NV*3vZLhANtVj6P-!A6wQ77nD(S?#?`VG&tCO1k7F{7qpmA2_TywTlLoZ&=j z?-iUuD!iH6M+9eZY(9+i48l!qflFx?e#qcVg6{;tM;B_jd2%WD8?uXJh zsdyF8H>EF8fo(SRE#b5GgyLPH`LXce`$B|S7GahZm}U95lG1O4_y@|qNBvQVu+p+l zJumLkGJ3OcX2FLLrn5>4W)iagf=|+G&raDKLW+4m1(%ZKZRWv>NXt@7kLhjZ!78XL3GKfK!ODVX1>K(} z^rz99l&uO@19Y#!+JX~Vr9&uN7qulcu^rv{R+*%HeIXbs_+&3{Jr6gcY#kxl1ZgcH z+)(g@V9=(l65>sTbYsEkUk7bR#r9xJA>2kNhY9vN;t`Z>D@642+0H^RQt&CqO^j5} z1(sN<U4{v>(_>Xzed}pL%(qq|Sqc@DRb%fblVs zvTlG4TplL`n7`rS!qP_z#~v?uD|>pVq--?mC}GU8NT&+HX+m)}(paG%wsOT7Rh%wF zCkgSHl#Kyr2vg4y!t;eXN!Pik7Yosaf;X^x$}hc&OD+@IS5kY4(C87ojNK=hWxc3> z1J?;&#vYs~DYyw-Bh*{jZ$-TkFjO{g7aI2n)ty3qpOD=v1b-LO+mIfhY@%@dT|)J+ z5IiQNcL+D!FC705p?F9r9}%3HJGxd<^`MYGMcF@v_-P?|La0s=^5+CQ1H}tS&kOCB zgy41X8ek}|m&Lz~^sdnPj^IhX@Iy(#+d|)@UOq*tXZGw!l&_$EDs;auM0gX)M?(8c zA^TiNzW{Gh_LTg2uu~4Tr`w8`H!Si{^cariS zg;Yknmj4LJ^g{M0!O2bYS&Jc1JzS6z}KOqXPuLp0Z-Qk^k1T}V=UalzZ=+e=V^f7Dn^D3(QC z9xNhw)qS!w(n^#qgS4`c{-BSV4Up7cg9_ZLgRqf2$5*T-DP0Au0G1QRbO_<9LdWVt zvZ4^DLUS$DHHA7)+fYgMD84?@211C<P@X7w zo-XQ^6dotUqXnl%>fTXO<1`^SRme{fvav#X24!QAP7u0|5uB|yIbKqHw$O8y;2d@q*85ORuE%QX#xp@DYGPucYh-Dy|Zu zn^3P8@~egPIw6=Kc#3Z7t&)5oad10jcT;;axKjxKE@bzi-UB9rhrwM!c!%H(0l}k` zJtlNMLfIt2oAc9uQ1JwKQpo;^^tezxgY*#6gW!3gd|4=-6MlD|%^OnFH-+E@!N(D{ z-$H#!s9r;wEX2&e*?9NfO(*GZf2gwT-&A}gwBJQ~U+`XiPrW&XfApows`se)N+^F2 z90<7nTcn?be7X+3jb9}>8sPai=lC7;y~?WZxNa)a7vLwMi1dme5W)_j>W4bL;H+1D zoA`r}OJ)Fn650)+b0(phU8wW={igdlU2r}ZWpjf$1aIf}={`;&>^=R>rYd{{R^(JzqBs zww7A$K*e6*G-~$~qO*i}4C*;TelqHv;4YziZy_8dWOoR~A%dsWng^pkCbX{;(tirU zqo|VwuiEt-n&Z?>B0GI^XvKG2{3&I>3fV70vODTjA=(Y;3(z^eJ|*FuqQBs&GVlH0 zZ)vG1Gh*2aLcWUNsj@m7;+#?gV%JVUmJLN6r~7p~;c=7^YAWtPeL?S_ z`)o-u5%uI)!TbE3UC}Y9=pL12#GpLq6%&YZp2g&8N%2EeJP7cZ+mnRy6`}DkWxESs z6P!BeE!0SG+Qobpq*%y8DrV4Q;iD#!rqr;X;C%@hF?i2g#q&#Y=H_HUNx7$|=B6wF z1BDWYylWAm-i@#r6-%N1MF>|y9V`S)K!x^`mz5L|*z(5yoWNGTw$Q{t|inH zP#Z}K7mz{FyDnv$2@ZhuZA3_!SgNO(w%}p{0ri%I%_YSngvW@7c{f6PCrKfZvF0sE zy9!S2m=iE)?LygJLa+}QN!i{=X9;nMw6EX;tp6~bH12Hus`XgL;N=9W4wa-&>J>j+ zCU}ae>uO1!UU8#y{J`@w@pigFYZoEhgAT)cBF+LpWQD6c<(-mA$~}beRdyDRZo_@NZG4` z&zB6};bL6#_FG8r3Z60X@sLi4*>SzzOY0HA>w){`PKvK|ao>3&A+EV6P{JRP`swY4 zGYFna8S|yeS~ut}eX}Ue3EfI`i8pkoi%5#+0ZR(OK*6&p!7`GZw#`m;xT@4J73x`( z7HS680UHXz#z@12bfi#Er3^>f8f-2!b`&~x6I#0p;r>E^yJ;sg?Us}tiF&x;iI%mG zl@yLfT~g1Gw>tYAz*+Dcec-v*fjWJ23ooz^b>h?IcMD#v8Q{954}gh6fO9qh=gg-w zlsH}4Bq7Ju^5l!%ssgvFIa!FO2>FXbil@}XKXR-z#b;{c9~C%14wKr^X-u!TYq!O* z(s(Z3eM5-wKhk-HeHRq!d6$8bTC}LCi%4qVLlny(4Hm-X1e^P5E~y+MG;P{%EXnDx z!jg*ZgmhiOJ7|NQB(=8}qJ62r3J-Th!T=9OBJB!d?`DH+YG7NWm=(d} z0E@zQL_II`fz%A^;eRtFg!SNUk?AxOqS>jZ#A%e%zG{|1h!S+&f`Iwe@t;>yjGtaxtOtctI){qGJZ;bO4ekmKH{0 z=>6|=N{qVcT7rY=-!Rt3Ej>f=)>O2F7UOC?#k3t|44)ALsn1pL9;bK@sRe_kPgC$b zlQSR2d?j81;pz1FdVNja4p)q%XP}4keCWglR1xx<$F>eJo;>s8*k-t^D$?zR7GtBM z=j{=c?Jtxk3Jr$EiqX%Td_o2}r(pJ32G{pU^;v_?yIQZycu#+$-cIv()ixNO8k4|- zLiMar4@ECYDqjA7*gEfcE2`^nJJ&sW#WtgJ?B!C$7E4s@%;+5KaZWtP5*q@FE%t8I z3xXmhiW)JNAWCf5jm8oSg54N3c8!7x_NZwZEARLD&ihJ!zt8)}eLidLJ!j6jQ}$kK z?Y-9)+!Y17qB^lyq+W{ zh4*a842P|tA#*0Sgmx{#-%9LT{TvDJDW?tdf^I*>9wm#H(i4`@`m~o28Z)d<_o9mTzOD*Av1Rd@iuj>ug)J5gpnCPti)T znmwhe-qv%ter|D~kn);V2MHx_ZR>a;#&E4p5gO+R(L^D=Tqkfwr4)13d)1bgN%A;T z!TakCNs1e&y&83@u-J6L3v>&t&2lO~<6&wa6zZjF*Q%_XBQ@gHEwCcvxq^pvY$s+P zQ9GT_Vh(1vNebA1omAH^?ZfjtNQnC)tt^zQB5fsvC6Ov2+CxZ(3*|*ZF+uRyvDdrw z`=iv9m(I&P(pZmPzJw4hDa6ZzAwtRP5@D<4KSA9C)$a$kMaf&?oq(NiBVa<5zZc@W zz`fKyBviA6lBeAZM+@RPDVBogc{stBV<^RHT!>sqOQeqAe!8NcPI3B+KY?dZ#|r_6 zyjn{aC+D%v{fN>_7W;ye1rP3~r=gxN#5||YMi=3D#*3f^AzB5jDx`E-C4E$}0V+L? z7umYAiAGb=60&`S(k=gJ{R|JN=I2WqH%iEPxT4E+NPe!6T#Cxml>b($eVpiBD$e4N zX{zvkxL$;52gd6(-7~d$kYYR*uabwJ$H#XFI1! zswWV-0T>}QaLeLF1*cStca@Y*@h1e&sZ3}EBK^BshsGzkgXI*?cNG=0B{go9l;0&( zGbo#^vS^-={f=53PbWF67rSypJKS2&!Yt`SJ6B0{%JcMT)i&M`@>c~fVznQd{Z(pA zTT;&#cwLhBCh~&S&bv}O^MvrBF!&~&&s$o0N$Ng47Ty9d#@(zI<8so-ghYtl<}52I zS%Hcbsi5HreT8BGWorpe6yT9tPu26vP7l?FO*nXn;N2ctTS#gQ7BZSDyPy&6RjVU- zYoXyZTJ@7STv9#)bw4B=Pg`W3wAaD4>^hyYF+#sHk+3)FEud-ZI#Y${Rw2iYbko)X zMItm;6OuKAXk)>f@`WuZ+Yr^($aYA(2n*)eBs8?%BqE`q&G!>LG*cWWsn^~ee%^B@ zQcDXQ&JnU+B--M9EYev**C?bjgy>wP^M&L>)XRk&tHtlC+icq}9<=bxy~JY<59kml z{|z%Gh3AEYp#X2Id^hSlERl%M0(&nn=gD%85U1- zNtH!Q3-uN{%W%j_g6H))p-cDltRR2O5kC2l+WOKPkmWa|sjdQ{k& z+Z6SGHlSg9%5cOyX~lcylslr*inezU(w~BsFm*4%O{pzGx1#CKC>tq+5lH(ADJ^TY zx8NLzU58RJT4-YnWH`Z|Zc>~m$@vb;lO(lhd>?l+JVsKz2hT)F-p0Ul7BhT5?^fWw z*^*18=D!8gz*HfcB6Mh^tKXy2Qn&6zx=kpq7d*4N_ZdmeSweE7;HehzOiAH+!Mpo} zS5R>t<2gcep5SfS+>R$7N%a=#p4rg)R;p9@hp(vkp;?bt(gU0k;R~yPl~Gq0qQ0mD z1ZUg#O5o(mg&AbvkaY!T>8soOt)$iy1U8f8z1d>7{O$vO%qO-41;_pWIs)8MM+fUJ zVRxwko6DQErkLUh!NTZ=9>SUMbK-=>(Nr9TbSTncLVJWz9wEf^Bva``ob}$Dv^&GS z2jGKyl8LI#CI}_{NBTeekKq2}GF5o`cUaJqT&*&Xa>v(6N^az{cLWO5 z5SUjvBto(z(h@?k98$O7t=gPN&W?7}Ls@?zqqDKgov$Uy>mVI>^j@%@dKzKddXTmF zp#$=OYSL6izP;eMW4x^-4}f|+G;Aj|w1spp4%t(Pel9pQdO1N-^J1YoR|t%FdYrR$ zucTfAl8vW?jK0iE2OW~C4wdRDuby^Z;nBCgR#}2u9}`NC(fil8!9z^m^qTVL7#72*C#47rLb{~DBY6#9jlF>-#dkRSfjs>Sub{f*! zI=_=^co3w{-b!;A-6e!ak!+C8mz2A``i3&QWR8bnayAEXP1g~;BZtjPd+&~8Mi`6v zc#gvov=NwIE6H0!KCLK zECJuoOX=dHQMrR&K-V6vuk@bstwU6nJ1Dz9W%z?0#B@UMiaS03K%vBbXQ-4wL%7QbxtUP}xJLa2z&G2kXYOo;}SunJ6{8T&F5={~H%jdz_?XM}U9X zI05OGlHzkEIWEw_-K-Npja7x0huw#b6b=WM3hgO^_w(vpD`^GHqmHh~|DEQ{)7g1f zXiZhc88-;if3TapMxstAHHG7@0N7F`7F3oZwbT-Ura*ruirOl5V09(aox8 zU9GS5!{4zFJDF2qX%+K0L(O0>K2vXEf8)ybK#-0bkC5*7+K>ICg~DVqmyefPli?c4$$ z6B?hY%t5v$#+{RQH~*%x#xJC{G42-Z_T@B9^`z=AsUVP&{YPk>t%LW#^oub*ou-MRP3B zY?QD+7O1l#RfkY^7#L02!Qeo_yKdS2k4~1_!1!!phE`*Q>uEq+XGzM>6au#BzLNxx zL$uG4R8LF31ZlF+x>P8y5yF+In5ONiLf!aYF3FROlj)S*COC&sb_3FVLh}!TH^Yi% zNSb!H@X$j@j|p`WA`I8~DZ#s6b!JlW7a@8LeD&; z*MvIXHNAneVYfd*`b4NR^E}QWUkP4B*dT7<+&k66xd@hU^O>)6ujeS`YMtt4 zn525nEVgor>74B$w6U6<<;H6stKm{TA=a^$d?d980xW4Ku1OE&kb?z}xW^-?z=)oX zIqk`>9(HdXi+UnBRcM_igkPZc3ei}~#vzRnj-QB1Ph6fQ^uySW&lMV2+&RITk}lf$ zWSSRCYF;k1F}v%@s*@!BS61q)rN&c)^a`OK%fDHYgE}qj@wU77+a!7ZX*Xk39@?+& zl~mnL#Y`|uXg?=-#b)Cfq?d&77s0!WX4vR;sum3O{AGZ(?k${JZ=k+|`o7?eo4gfi z{DD-*hq5`63S031mgFqbbv|i_i)>|lO2xNA&&Nn#3dMY+uZ6aad_qVW_PzIGZY?e; zSr%aKJFN6yDO0doIt`&%UI@#et|U0hd|LLY?dRTS*Pv45xWskW3{1Ol4^wH4n|Nsa+fi|07!$;D2~0r2krm zSEww1Uk9JIsiX>bq|JDv6O2?{NZSc5ypujVNvigfG#>}1Ig(n23_KCid7Z0DYH_$w zo+LQsYIGvf=|bEqcz%Slf|S^u9bB1WlF%YRw;+A<^t(~-6`Z-*K|ALru*>7sfawDq z@{kbSC;Vdu>cc|&DItAU2#-)UODKuvc_$igeN<0`d|G9VJA~4d zm)f{Xb)pXfe(_sEwKTwSat>Helbju-)|s1ABwVOE$H%IY8n{rNgW)B;1%bgjpGSYB zHNXI{kq`|5cvQ~B;S|i}dZ=3p)gZxBBCBmA#amM`6xbdoV(86{dWbAK;l}(XW%yv7 zJ%zkP!fy8%TKqHA-Gyklu+08~H#hS1M~~sQ4&abG1^a59_a#+_2`LVn6KRB_BzXaG z>ln&@Z~^Aq4BbW#jU$zh9U!U1+#i6YUpsNnOR6voyUx~U7yVvR(nmKS>n9X_!AgQx zvxO}sMO&a^4>bzGsgQFFphhJ)-9U~-;e9QgRj(dApi3?6rmaYO)g`#&b5zJP5f-Mm zat|BmSh|SLc%pwoliU7WC}|EWT0%!5oL0%ng-YJ!oELVt@j{0eF~iI9bl!evO7c2z z$A%LgfrL9#aRZtM2?f{Lvtuf*pD)<#-%7G^9Q+Sr^@X+hEm#@ND^)uYCo}z%q{Lp9 zKXIjgLHlZOmC%?fOy{!&u5WhF|NHEn#Mkn9f|mgVI)dOC3!EV11Q{oYIYAHKR!>o# zEvZf&d!wZEZJn>hHI2D`)q6VF6SCvq@T-PPO->T>>jiIL?q!?BHPl`!}|oq&Zzuz(|O01^)o_h!Oo;l!Kw*JRzqy$d3>L zO{q7P%W2KxhlG0i#T$|WZ+ylZpY!S_gi7-LgybT@>xA3a@^iWDUG&bLNgna`%;!C- zRHVgdeC#Tr8;>f-St$k!74CxJ6dNc{3h=&sh*6Cm+u+L`N5Jr1YuXdxi1y``U#_u zaHYL^*iv1pYg1c{I{r+!B`>Lm5R%d7#PVfq2da`?te0cvTFpda?bD3 z!OLDt*>!-oC*f(&Zvc)4Ohe+0%BKpCO-DM5E6EF%38Zy>!2=784#PQO=3=YK`w{dEkW^$zM=U@m1rPfp`q)DKbT37%OKc*ULIq49Uh z@b~k7fCsrG|CSW~1-=x#emeRmwch}|{QPqv>elI#MZj(PSoflmoQK)@ZW6qFZ{3~a zi?oXn?Fx1l0`Y^~4Q-pU4l3b< z&_dc1X@4O)0PH0=ewyzgDc=VSr;M0FJ_7tq2nPus-}20Xu(#BNI74zM7%k*K7b4;e z$>FGn2+aeLjsOP>$&pA$BOQZuEI3Z+J`w47!KA27!8&UPLy|i<Rm_=Q1&qD459m8q(=p>v-VW}#4HWQ*vkv0~>hJb)j@*n+25f+qZ)_9(8J*j3( z$~^kI1;=4u*|7GqYp=dYwpN*UF3-2)ke!8SN5Q7}kfx;OPbtHwOm+af3OOO9yo34^ zfEkpx0TCrn*QxeI-3#m^c-eLGGt}Xz`y%ZR4g&ju?Eyij0EY|PV=*T798QuHoeYi_oSCOO5$P0g0w7G~dClJ3JUUIP!&J$clA^Og zuaIvmc-FJmUI(I9`6y~9QZWIHr|g&DJi+sfl3!7A0jeWe7a^T5gkKBZ@O;6tYp=MD zuHq1)Ti*ISpN2X~NG<`Ff-At4f;U0Wry%`Kh;9JWg*xJOEfu$-UMD2C3(+m8Hwj+W zQfJ7yliJ(BAE>=g@Y?JA9?Jem*@Kkbk9sfa4Ai?(A4Pfy>2ai)LjHu{1=z{Ms852Y z!JojN1+TbHoy*6)W~06# zgtt-OL3$tQ?}8U#FPNg`k@Px2(0d&BFAn)!Namvc1NA>b{t;#W7CcQi`+~CXz(QTZ zSJZxr`mNxx_wX_5d@4Q@qOXx69h}5M)CCp+-*eo;R4j%XguD;ZqLeL;x)ex-?qvlp z#m<+Olq^9-H_~!o1)*M)-JoK5!EwE0C2CivY*nE(0BH@72}uv=k2(;n2?kTPn$Y}_ z;8obsI+P6(Jj*O!59!BX6CqkxNH#*<6lr6m4Ft~(D7Kd52?F^LYPXKjg|K#fKLPZ5ylx>StBJD1CJ$CPINIMJF4nn>M z*iKlmNFZ-Z4SP|xC(>^?^WKv3k>KaxJi$w&yec%gh_Z`?=v<_Ggm5p?7;pr*TW~_X z{C=bpD7#4rPYGT}75+@wY+mQt&oqW z>=41*FnM`)SZHBYbOYSYWGN)VBAyx%5t@t$P3D9q^KFHa`4Q0$sQAwLT0*im*cA1B z&O-3ftF`lClx+vPgk(R}<~yPORES1W))vwVXCKb#?W>-hs|}2lGQ!R_A+ti$h{mLYN-a zF9~6KeRs5oq-0S&W_9|sWvFO?Oo#|!M#L!c6~HQBHSo5Ou8Op>5HE+cI&e5Ek`(%) z_7|eTLU#{pKQNH8H2{H+VjUsb40R(g1gsCX0K_|UA`|(VU`sGaC`(?Atx&fSlC6=3 zf?dG&l&z*q(zTnUh>%Lrq@n}%1bYe5-bkg8{6ugFF5g{J*q^fDf@i7Z2ceD&Y8;LUU6y_UP{d_Ao54^c%mn#Xn@p?Q$t zyl>3|B()C|qS5+)%Tbb&eZk@2NTGR@&^TD|s+sgyNyVi)U*j}Mj*|5Gg`_bKm7FeV z!EWYWShLS%I@s&LJt3m8BcC0i;}&dW-Z+_$oy&2H3SKeSo~$x&Hs88jQsWX~hbuVl zQX!fG?$N={`xaeC1;LQ$dZeo`7H^QW{JT2DD=nJSrB+ip5J; z&Dm13xk7oXYMpD>b0O}yS*q95HLlj_%ip8U5F&yho(thU%p*b|^$duaNDm6dBSO8T z{92tkJTKK#hrC-=^9^d}2;QyAfse)wIxc!sWyQ-v^;f~$mwVBlH>&a?^wZ{2@h+Gr z#2*UDP5Nx}F`@G*>XUrs-#O%Ofapi(7b+`0l2kn?sX-j1MI5C4CADYs*?&s%>hyX? z@-|gS$RW5Zz7fKtg`k`sc3;cg=#OM zs00Tp(tRYA!-d93!5b$wekQ3iLMZn|+8yi-MhS-;Ce%TR(UPJA0YQo8(MTr>jpK#t zR3V%u6ekOgxO!Ws>U62QoI>qMLTik$)>x#qBYl>@!kgy`%}JDRGy)0F*EDEyolx?y#ziMdgmd%Ce&G)Kao^^AOsxz=HG?* zAE+Mz+a| zCXLX^`S18vIJg+(F zFR6uVUJMlW!WYjr5}X39y|JXmhC=hlLT7#9xPC&p1=w8Z+Ei!_5$t!LytSmxP@yUW zd)w_DQFjuS-9>0Mh4QBWN4ql&>pv=UVG?WirQ_J6?+L`AF#KO;a*q! z3$24F+fQ%;1!pyD96-gPLh~@8GeW42pzJuI`*7jWlZ9}+P#q)0rwGZ3Li+^NV^L2< zJzdCfo14E7DxBr^IH4RPcpvg~6lG@#T@xw8CoayV>>{B$U+@IX_GHQ~2A2!=f5Rn` z!X%;IBj`#=jVmadA~;`tW2&U|R?4mwqU(ev9&Qs~_rG=lx>IU-qY&Rl?H>eB$Zp!r zy-5+1H6e%49E9+R3r4De>d)8IKF!*lf#=Eh5soHZ}JISyykyYaNYmlQ9ogIoBftstqrsNjvq^ChWB1W#}E zypd+NRL>PJm#1PGp^0nRuxp7g>5N|O{zwCb1-@jp8po|AwAK;4)42B>cisx`nN#35 z7PyR_MpAD#K7@nU7h)X6u(=RzCA_$qkZ&oJLxmQO;=rcR-cfLpu4ETUX(g06h2GBA z+u$^RDz$qzA=_DK?jd*X!Sm7EM@z~t5+dBb)}2C$@7KZi zOY!{zzF%~=P@E_@4Oevn6;GkwB($ColE=X_lzkxN_<7|gLU=)FXBUM|T}^soo3%&wNV0&l<1A$U~Yx22wBvX9ipF+#mz@}DHl z$1Cz+ag5v2nkF=6tHNv3Jb3B_zs2<`>)b2^ENLf{x6$h@RXtW-JfoixdvN1Q9rv8O zlRI<+qA!H7xIX5DG+wzepJy`SX&TJq6LD+3M^NAnrgo9Jh+f#>?U|eB>)@+#Z?aEx zz5zks7BKgnUtr?eQmes2fzjK*qOCAUD{Rad^D_R05RC;Giv_k`u)T&^mOmoYCYY@+ z45|`Ss9Hqd=Fx(%IubU67eA$gB{_#_NeAw}J3c{D>i&`r&3##UjiijetfEsYpP_=j z$2lnzx|pV8kzY!3@G+&8cgDqXuq3bGsn(MeuPfB;E)A_ia4{`wM0+}k2Gle1VmE>` zX@Qn2&~k+?U8^?lWyYHl`zf9y$)5Gld6GPPV%*R5Pq*$6(nLQf<6dSwDl1S{Qs#Z# zd{d%BRN?SRoBPq|FBDvtY-N3AV-=w}L5DcZ;v6{DXw}A}sn|zIjuJcr!V_M+60=_3 zjx*mlj6?9nJy{_;LsE7Qm?(5#&Y3Te*ooqDap&CT&}?c92c8fU%6YA87?X8M;V@BYi}VMB~0fP(2K8@;HITh1aFy}-h_ICP~mwc*9&9s74jKEh0`?wr>mMJ zT_iTC6w>*)uQ!s9~0=w`jg z4bD$W8<8w7^x*B-(aD#SS}r4GiwV(+g2x-nl_d?LEwS5@^F{@Hm*xh7M-)%kgtB$P zj|7h+dZf_FE4)kUQn((TI2POW_=(h_!@-r1wva{&b|1n4k~{}IIgB#g2M@jV&|a0t zpq?st4tR=NP>+b6C8>9^kX;O>2_D)iFO}r|KI>gRY3mZ2xovKv!i_$*cRmX|BDmFa z!nKa=XKdx-8zEUp4{*IMi$>539}^5*=M_pZe=C|pkD_?>qsK`ijM;QmDl#GNFXXma zF;_j{k<$9aTL{jp<|eZ5Pbk|~a64IIPj0`RU{lgV2DTG(OvIKALu|tIe!;VklmBT6 z78rpIOg~Ry?DHK5V+1DO3elm0_bzmF-$r18nYSQmTEO75t>>hw-eGVD+iO^94Ggs8 zWFhnl?NfycE6r;ei*b^i|J3nuFT{5PA3d&$_$eWuB{ZTz(nR7FlSIschZ(jR3939V6-9e{MF(AWo%SBQacD`Td0!> z--(K^QTZlgNqeSt#l5U%0F2r8B9hvx3pw^_W02rjy)T$&AZAl_7Vor{%;u0ArFz#q zr{d{waiUvP(V8x_v7i#V6Pt8n=^Uz+guK6yxg($ta1byWfkZnV&P1YpE-yu*X?8;X zoVKn`v9k@*;lhkBka)YxrTHzqrh(VWLuCmrRDuWO|J)-)o~T|t!LQ;GZTnf{F{@38 z-%Cm^6P(S;v;Gpg1mB(=R^s%$uy&GiqWi^ZLT#(~mu{@zlJ28J@*Szb@-6AM-6z*+ zPKW4xfqpAJhcjO&l>EOPx+1Trs%Og5iR5!Bqf2m-%y>(kzMhw{t0ZT*4@XGKX*NAA zz{B_{=Ae_B=L82Lyxsy|w@)dwXr=PKgoMY!BYX9%SiC!r=OuV|`J(_2$P1FoHzXB2 z8>L@Pzi+%u9)YnR5MlG@7+zlJnfyvp^cx}k7VyxN*fhzFe2k|gwe`SbQLV@SyFC~t z6eERbH0oJG;9;ofj=Q-Z30-uDt~byLhnIzVLepQ7-WKwYg|5G&5`m1q6ub?4z7W^y z3#pza6lGkY<%PU~L~q(!L#QX!Y(WKfr{i_rNgz2=YCS!KZmb)3B%DVX=D8d7ixwSVf6d{0RQT}Q(6S0`Jf zOK=L7)-YX3FXSk3pi^G)92eQiqPECro)9*g+oX0h?4f*VFp}=x$V7cvnFw#VT zRrM&hF`g-S(O>HoR383(j?lnRYOJISkznG)*fiNdp}>+Uenc5JDp_ARnx8fU(9S}b<=PCBu`kr6tRGz`P;1c`J^m27Q z%e#9N-)67qKuPJrsJJq1ounR(wDXhU&CWka@Vf1ox3N4<@E%njoNS#$8O@gyd^y8k z=NOfFp>}yX626efC0m#4xR^Gvz#;0mT^k{(IZjB=RfQ9Qwf&wi%1M8%im)rvWs<5( zIe3cDaVs!ZQgV$D?$IGH(XW=*N?jCZD!o!@>sl`qUoWYisg3vKzURJak~}2YK8w@i zvpX|ri>AeclO4RL4{p7$%>%)PkNh_fm?}JRyU8Qpm|(*}6f8IC)v;O_g~vw-fNBZ*ef8lEz#~nf?|k-W9z{qd&c_7jJtc zv+)rXPpa%8-p1r_LWkD29?tv+DsQM4Z#VxXwe=sN{8C7HYb(0#&Nq_m3TC*14u;&a zh`u*kjEi`y4rwecDMJTbjQo)YEzANGkDC+w`1+ zaZo$7yX9L#^AjQcmymxgM0B6t>&QC>hrnfu!6Jeu*cRV#$dXd)oSB$!-mj>UNGetl zsvg0UWOF;Mw28~mwmVOU{nd=N-43c(L+?QY9}_5xFq0GPp+Ex(zYVo-uW1O zN(B+fh(6SAxO1Gx-=i+9Peh9e@ls%E!P(B6eUWJA+WmykgE~-%2Mf)$PzMQ}^#o5j z^qwzHc^=`KcZN{0x!@#3b?(%yD8o}Kw-FZGQD|%{bO>;U1s3vdQuB^b4ih3gDvtp* z_eLElbS4NbMt-6@QLzPD_XzpDLKhBxI70Ah;|QazX=D2-N#zsN{+Zgxk^Uk~{}bwL z!4v+{7bNY5`yYQHEcvbA$$bmf7)SF}R(>WpXL{pnNnT#;OzH7jdYRg5gZEW2f08h| zkQz1>Dr}YJkEz{G=n%p6*iHxg#WVMg--9v&2BAXQS1680I$VfP657NM97$-LNCm!7 zr&nnGk_y~SkN0@wr#M4uJ?Jw|k|Xq6jO7q))(n%W^J_p<*Bh(UONp^#JD5@PF{3(9 z3CY8P*Aq7$p$vDfMLZ&&iS()v;k&e-7CLtbUQb+{gZd^|Lv51>eZ2o~y`Fe6RiwGHWJDqz~(vOjs**iJAaE#_OB%nw;8ny6wo|D`c@CiBPNDoc(rBNxu;mtiqRvvjKBUOsUpXX)q@by6~(h!)R5y_EBO9k=AMf)guxvYYoiwsGg& zRL+_c->6Td7)2iH3789kGpA#9=9o6Dt-^6#e-!G(qdy!xf5iX$8FsY{dj!sy<@@FcOSYeWU${|7 zo)>Z&U+?_nDX$TaPo1WnyOkfwzwnaI-00#s8vSfdDtM6m9WU~OJUnXG!=_*NAM}aH z4lhAe&w!12%bfhO^8e=lV_i8+WV18L~b9 z+2d9vO-mQCpmYVnsQ@bC8-DYG-#o6%xBP>?*o~ufmT-pP4Cqcv74wyg;juW`v8OA> z`|;(wgVTWxpuxIy1yOAGh#lJY>SDgFzYz1iCExZ7Urx@~8OvvV#d+Di9M~7um$S>S z5Y9?CP_^Ea#hIl&y`lI{74`G?2c5KfSMXxjb!JO)Hmee6rA~@`pHAQ|HQHSti|D+v zajK08k7cw6aSO>8g2%SH5?l?g62e^7I@xyaAmFMxpGR~&C(w3wM3<0E5&{oMM0>Rs z=eybu+_kzc^)o)6lTy*k?ddsDYRp6JVczNSU!9H; z)i0uJz1+eTfsTHAe;Yre_aPzWozCV6KEVR~-r1Pl?1?Wt%YZHGjg?UV-2SC#HX*&bk| zkc~j%QTAR(@hC~-4x#K|p*&Uas9QQl(%3UmiR_f;f^&rUV!;`xv&ocQCe$Il-%>k` zvZ+Wn2q~^nd6y7o2*d9d2H*w_pCx!&V~O)q&J;X*vBI+nuTVBeaN`#6UBU-~b5@rh zNs2xc(r>|6V7^e{wltOyN;@lkBo)gFUg}rUQ`K7<{YeKWt4WQBL503TX8^T$EU_QG zfs&l?)NV_;vD9=!!7=?9-(@^us*F~ky&V-h3ZC^>?josZ3f}*yz=0`$B1AYVB@Mhs z-J$~}WwuRCAS;%>R^V@{%exZqDk}!j=oJkoyQ;Dxp zzAnUX2<>--0uLjbN7;u$`W|I-h4NdWiRX~arwsR@i1f~sLC6xJS`ujqA?X(4<-qb_ zB_UlMtSXc^5?K$@YC^RR(guQ;9(kEjHdLyoiv>Ia58!z&Sd0r0(?&Rhqq7cW=W)o< zf`hU#hJSju5N;A;?0aVusy>k9?T}(@`K-^v`pV^nY?x4u6rwSxG_>AyCt&`@tMja3 zy~eRn(LH&PCR$Na776Y!N?Iuol@;_FSt*1Ak!T$~s^xCNeL&Ct`UT0sf=4cr(WMS;Ou}+f=S^P zq4T{E4c0%C?=2Lx8wpKDbrO;zEHo6A!y+>z_42aUF%MpGzwC7^gI7HED^BpDcaGrk z^YU>?UOOD~I(wKXU0J``L*iaq`(Kd+-a&U5-s7g=-6|>$-k%EIt;Fs>uT?cdu;(B1 z_C&lS*`<`-fa(YR8c7p)+C9Is;;{|?7MzeP=ZVeSAMvn;et_q%HgVRM)M^TmolHE) z%I+aHrnjC+apIh{B>yqD0$;6xJJ-9Dq~vgF@x1ETKhIF{qH4bxE2+dGs?*7)k`}BI zs+Oa6fhU6N;eDn&pPlhs)!pb_N>soVLiq&ieAw9VxKY z7xAkiO!hq2?eUXXekUo|rCozt_MkqN-$5Do(vu&YFU3Q;y*D3uRxS*{F7lU>iI%3Nk}IMCAL7lTH>48YMck`iq1bR}xti}z5wsZb1|g6`Ol zMYXFWuV)V(N#3E`(LC=SQP2Q*tjLqi^O+p-lHf(ktrw|%S*Yd+8R4;I_VJKJ%twL{#b$%o|2KzkrdIEgu{el1ky!F zyo2*!)NS+z(Vn;2JVa&g%X+Epx=L7!+wEPMTD+l=Z^faKnm!-L*;?=R!Kdrsj3%SP zxu^%y@I?IndX{L+4{}>F?o3H3PiMw8Eso?O^1>!W66*DIyr%WM2j0t$`^I_tm>06e zd}Y5ms%Y_EdP6HOH*51=7QB*ySF(+v?ld$Zm*mY0+Pp#m3pwW(crlQtq_ue~!b^e| z(KLAE>s%HK9(kVjs3GKC{HuPlu>_+N1g9k^CrOHFmWmq%n`LeZ{n*AlwgFemTUB}~ zduJK_3tk(ZV>jhE_<^?AkyNkDPPj~+6RCJc@ErAuXKh71zBW&oLpcF=E}?0Th{O4^ z`x$EZ87lR?jzT0n78y^3-OYT0Dw54PeV58w3vMlqU`g9l(kyusy=o~*O%CbizWJUz znTR`yO?r{hr1o|ku$e!F1=Bcbs^oG;rm0=0ZmwUR8*U=A(uq-Pc6=!$% zEF^Cc;&&$LuY)67uUv>?wvMaE?Qf9eeJP@$I!pL5U%oQm#>?Kr!TrwTr2GrfwmM7r zobTO@Yd~L7=j~aW&%UFIZfIznFt}c7?`M>KDmbgkRDO`Na}*~cIcCH& z6b}--ggy{6&nv!{=ttfoq`M>GA}2h5Ijv95?Y6t_jyduVf0qh=c*4(39u)j@om4v7 zfZxK!De3KVZj?uAobaIH7dU<&d{g)Z`6+_u1v%?lPDLLsPO^`r23_>Re5D_Y`i-Bd zGEYmky_^19YW^>wPHx3J-NNrKak&dz?qnMw-ce}mB&5dzddcEEp~MCrNw?U#M2NA0 zN74_*?+FEttn=p-TxV~&)QI$NrM&i@2U@Hy)s0}-L{eiTu$kbUF}x@&-IGHY?rLG+ zc782P#If@VDDTVIx(5}9t$|C{oG;kbN^z#Vf~P^x)Sv-qZX|djq%-YhbV|?R?X*4y zE9rtYxsqP{@8uf_P4g^X`!)@L*TP4M)NC1{dP8Wek4iHf?;@l`{oLrk@dl^zi}R+W z;;*PQ=H)QEb1(`7n~^VN68QF|`xqTo`gbyhv1lAbl5T!D1CP_N9s z5{aH9oTX1xmq~I;I=`1*ah+U68Af1E3leUXl-w?ayTDYHl~W}Ren2QO3^U$}a+;+4 z5lMbOY?_8^RTdM7N?sMbk~*S$N?u0Ab}Z*g3Yfpehr$dR!I)^C`>p&*NuED$qcZwZ zwGN5y^G`|9H>h8MZrxv}f%DYA35!atmZ0o&)y7LB-O8yjL-Ry%oXa6DuY8VrR8}v4 zrtwYs33-38D)=#FyywY=U}M3V*wW1CfmZ8dNj;ySz9x9Ey>^2Z(&JsvP>Yd%Fm?jLseF0Cd8iVbwJS=E)}SIm z!X9$+s5Vw^w7yVb5JW=+CyEL*(#6(7UQn@Z}}l0Q>1TkuM~ujgIn}o+=u9Al)0POAL$?=`90DBfbmP`0trVV9U(*`sAvf#9)^>DcmbF@ zhxu2jY$|Ppb2T|fPvFMe@)(327V!NttdV;8A7!b1l7n=dZAWL%3^(g6?N@={K_1(< zM~669&hcE5n13N5RFeAyr*ne6`SJ@@kzp-$VZz$}s}JEjn)FQ0-Wt;Z6=Q{R3KE8E zK~LgENNw9Hm~`!_Dw}(?;Ei`n_aAdr;UGeLmMTg&@Q4n^?d2AJe{CoJ(L9q1;HcfIt|rVvl(Z8)ROOp&d^zrefS)uS?7K@C58SU36Q9ETC(M7kMI ziJzSA8zogdAPF6P(NDk1ciR4Hy>BUfZN0b27=ANmx3{%RZj;)e3-q3%4vIM?gmV#g zZ^xZEPU!9xyaR;u+y!DNUQ-=ti*vt&w6PIwY%+`=Nt4zdCq!Ib4^j`tvb<$UAs!?o zTo=DROB|q&m7fYJ9gy3hk@AE4@j^mv1xH?u+dxU_6t!_*QdjtB2k=B&g z%A=c&Qng)-WkuHr-hsVEmzr(Ezd&z#4oyb$5yAd+$8S7sb{H!Zv?XrRy4<93%W|Em z-iFB=CMToxGaM}RbY2gb*9n?WQibyh6_}=P(1Ntj5~2%`P8QrEW!FmTx=JVYJX$+2 z9ZX5*G#)@x;Ejx&u(*W*>3lrR2RQ+4q9Yi|Yf`J%sl_@>unyhU#e^}u6;R9r;yI*Y zIlgU0p*28olA3%iNzML3vOdy!RA9L|rEY78q|O$CH^B9R8Se^ak3L|&b!eJ5#eB2n zmh2TY49hmd9o9>_?a zlH?s4+fPgC%oOtHgvRrN=e(zLBvp8P>E8sWR%yK@srX1}e<%bD!*(n*iE>uoP}WCM zCly*)f{oP#r!z_WO7dPa#Xw1`tSfkMGTm5`vzB<~e2Iy;JSJk3r?|7VP{$N_SG_K9 z+Aflum&AEP2MnWvVakfIL%?Ee?ICz0nH+aB*-t1B6g*(r#GdqY%Jc|H@$pm;oT{)a zJyzK{U6MClbPAD@=AjxVG{*{wBMGAF2Hi3#19ZCeNE3L4b~JD;>4m)a(1SAHO5 zF9@ENlF;3Cwp~~UW0iU+s!sh!%hh>bwJTtxw)c~?H&$umB*AM6ORUm%FY0)~+4ttt zW;^>{2MaX8?#zEMG~16#^|ZX?O-Wv`-;O0UZl_{VUEK%YrebBmVP?&Us7U7QJqBxX^o`ki0JxM+>$N9cY|Cnmc`z{>zef z*Q)^ot*w*WJG0y1$*7lrdpHa2Zuo>J;t!IN$(#>!D}N5)f!A>^8rA$J)p|ZiMk^W^ zJk4)YnZsE*ZnGzac;oSW8L3`V6BgKfa}f-`@4gYuj%Fceg5heS&qb^<#H$u2^^E7%!z zH>5V`2+>a|+aL7+K-*q##!K5CMhf0GBpHEvkl_8$qTQ+3o3c^h=Tsa{8BKk31QP9i zI1=e7%8nMCoje>Tsq1(uP6ek4(Kx}QRe>HN8jm_g=o*W3rjYy!i6~w2Yov)nI2Y-B zA)@Q>5`Ec|9TJ^Qn1(b}a5$mvVs4`1 zY$|RCHwZSZ!tYV<1owk`z+FP17jg&GbFZZ6QPd{@{ZXJl>Uk3N5h0o-BsU6980Ma- z9&7t0hx~=wnbf|3^fF~{0J^OFbwI!6c{kx*NnP)NHz|8x@Y;fW4(dx_9{4~=J_VnF zzX>^ATl9DE5AY%Qm*8aJP63{OPuaIZ@)ej*?H5RxY0mUruRNez3`+}+mxOP0NT8Pt z8D;d6`Ep=cAz4NU4ODv0uqtJApYTo3D#bJMN z5M}h|o`vK+mA&>q9IdkaNN}j&`AA^|5`DZUB{>0i?@1hTGN9j2PY@zHe@B!&N6CvP z!kHY>OU2np=LmKX68e1)1bMAx{wvgTsl5Q{3?VrmiO6;j20{2O>SS;+xC&e@gv-D* z)JaH0t)fejt^ik}UXAoSA-@4!3vLFt3eoLIw+P8iNY@MD8o|j}JOwJ;N5wthL2$ni z?iD;E%2~7XN2z!mJRx+=6vAVu4-46oLi99vgfa}4{3-Apct(g`Kza%3d8Ai_^jRUi ziTYQ;$;Lb?UA{%x>(su1^tKSa1Kt;szf<-B(z}8~aM6dT?@{qDFck z6T*r}%M0~t+0`X22m*SYNLZ6vTzw~Q$bW>iA!Ta`2}V{}4{RcMI5Xb}byHLfuY7AT zL`X2fl0tB@F^|GW7-IorEZ+v~C?r2Y+7)1+)r)p_krY*+MFoL{P@?XR`ct6`L$01x zf;AV00SvjM4Y20Ch(GxaS9fp9&ZF#TAvzb_1Ma5mesB}&6GEL+43o}5N;}YD;e}PP zkl-++C!z(M>I6eBj1(d)w=jk>>@|;MdP-V&R%*IBO|HX%SZQ875n-j(8)+@7AL%4m zULIj9%@fu_q(h?qd}097CIBlf-y9491OfA%1rMVJW*p_E5U|ZWr_I5=dQRK19EX(_ z@XCunqdK7R9MbdPEdA&CUy#m_lui_$=oNY=3-Jq7V4%&%7>hp=l79)F>HaQb6JDs8 z9-#lX9x~WhQj7^vFC9EhQiW-dVHy;4SyCcF3wBfW$+eP11r4g=;eHnQTRHOA*R6-kp$cZIS$#5>7TR2U8kPgtMrgz`9H0@upDX&5glacB6Vq>3(~@>4<+Uhh#rGndd9 z1=^hGA|ajt#s~{ybH#Y6O_~u8H#j!eI+OpLuw1c*epN(l&im|DD^lSA9g#}^m!6Ol zy{NNH@@VQ8V@SC@aVm`+8e)8{;*)gD4LT*yukn&X9F7bWF~^9l{dZ1m)Uy6ask?Te~9htGw*L{h$sWca_xXb0qm{ zI2l@V9%tb{!sOY)VB4ne{*+-8i>#ZB=dhBhx< zYpPJsgyEmAW(mpDLWY0T;BCzCY`m_m6LTSGZtQR*Tp_0#DOQu@fLhnal5Fn#{dHF0 zVi!KKlhD%?l3{{vd9P^B=@JsInuFy@Z5dxu^BKbJtCXXJlHVwcE#m;QoT8fZNdcmFGRZ7_3#-1uxbgRTuG?M zW_u)gY_`I_s;6>cK{>EhHL2Y}@S0m&JkGJ|HmC7~DpDTX^aGB2L9qQ&6uPwq4Nr6d zz+h?9@Kmn~DGg7KapJ8Kij^gKATsKaRCrjiDXE_Ix4Wc_2$089>P3z;P#zzgeZIc3 zi=hBV#Rv0bCnHtnq1wa^8INcl=|ZH`=2+$lZG@9c4j!(98@%!1BuV+N1?L9Jby%H3 z$rC`zX{xYI<5c>N(8rVYv3g?1wVdERPWrNrb9d6bMQZk>FxU?|mQ1{;PFiQ~OL+da z5Ztx7we<${(MZ1cWWcNI`BL`dv)#Ct*8#gDxEaMus4olk%oTl8`3|hxJ9t(=S=-c zUwvCa^Y5JV=?qD|4}n*O@-^YVHnHV)_Z+6HQ5_5p7rc>q>k3IJ?^fq~p~=PhUoEir zaxS?fSNoFOr&E3UN1^UC={}uK)+x{m;+W-7z;*E`a=yPL_e}LdHXgW~7Bl8?jA*1A z++QajENMa9fqQJM_n)dL_=GJUPZ^15cioM7Ayzg+hYaUGA3j@XVUR}rgWf*N{eA=c z>J0kd^kKddTfU(0?&X%1oPLnN^OiYA z8_!ln!2U~qFF5r}b0*R(4t`J=>xbrbNlk{ps&|EY9|;VMm%nwLyQ%FcFh=g?gNQGfC0LsDx+h zx4V$k%!O)OAtUVSY$?$Q%611tO(z{8XKJasmb8vRJ<-~w#Cso;>=1R`h&k9Xuq7B6DTD_QtqJxfwA z@gYZhVxm0_+$C?1R@^Qry;I2UpzI-`^Q2HbLfKP7m?bobt2hyR=W|Kka@f0lwP+5j zF5UQOaiLgRXffd+tPV2N{(=p|CI-;ULxg&j?oN_QLIQQ>NTLBHUVg_8{>74-c=^>B zaIesNgwQ@waJN{G-q_K>pt7s)J?hItr8+@mbG{@egY-zv&z9HI9^vojBLydTC>gy; z4;P%#p*jVXK!AsEJgK2^s#GV4Y>t=Y4Bj1D^y*%4rqGxmv>p;7n)QO#to67MW(b~G z)P6*gw}1Cyg7)gV@y^uHA*Rr#!TS<-vl)ac6iyKcop*9D6$c1SIuXyA@JfM-o+LX)sIwW+XmyR^`t8f5kYdDCc%+gL^sSHnNImo9bw{(|Qo)gH^Gs!fjLxL>LwJ^|?p zN%rzvH%h8~Y$7Z@G^)1I`(mSa-N?cJ;b3~*{ClBZA?R+R((m)!%j6`avxIO9zxfWN z8A9C?|5;KsQ%K$wyisW{O^eeFczHw}=eGw$GZI!29B&VmqnHrLg?rw@E^1Qylu)O(;I&G4kN&@_@@7%NGyWBicfKm%$+kOJZ$Q5W zDt)MPopyMX|7!)FpCO)I-x()55A?bTE^-}$a|g~N5b+3vYb4d3KTU3mN1uNoH1}0S zYZbvxzvtT9Kljt*rF6DldwCZY#t*gXN%*dHg=c5E;tgA0m+0W;J;I595IS_Yo=)UB zC;42;_(92INZ70&KZwK&*5pom15&sAT{r40Tl=ZvGcIRzH^)5yc%z)O)Hz|M^Y53B zP{Gyp#KkaEQue6OqE%`BQSjXJ8~JDabH^c#0nt(V4u=Ty$&%_ZTw;RGi|v%yb^w!w zc`OESAtnoT)?%XP$?`fl`A!HQ3srxe)WJ+IVM#|wO^51#%P@eh$L&k^7HopmmzWAm zJxGp``KP7J>0=%GfX*|5=Zt-3KY5UjYv4$fL^;d9NKJbs4SoR$tEJ97$6Hq3rn0G+ z3-Ojhin&m3BUC#f?E-cMyMZ?72*v(L2Y`dX&%qHwis6tR1&$VqV}R#bbxtixJxXj)wh)+UGD0c?WW0*V(DYBg&^1BSJAZ$V;{qa+0+?`|4wL8XzT zpm508C=x^z2~AKDj2OTGGzci7*DMMm@BjPPb??4C{Kj|R8*jYvjq%1A=Ran}RlCBh zS+lBU!Ihf;^>%>eQuSUzf#i|xiXUQfy&KLsPzORC4Rs{&A>ahySV3|+)Q5qO2>d>d zEo9f{;&;Aa>Sv%X2d)IJ0$^J87X;Z&P`3jpew(|X76V@cz5zTSn2JU?{iYy$2>6b` zXC>?JiE4g;ll`OQF{qylipQaz6l8yZ`ZMrHfwzCM<J!H|-Dc%hAI)OJ|>TPgVg6y48?*jhBCmT^!7kDpzY@1BlMUZ`x(C^aa ze+ZzlE|4C~35(a`+(Hm-EBzGb`*8jo>N~*qfbRqUsr=F#_-#xC&5z}0rM53lc}NDP zKtEmK%X}1SIh)sSF?aWo*2~umazht&^ zKdPUZ$;qa~)ucpmNhr6BRF?SUF$IX_>2EiOP2rw7P<~?;%Kb6ZG~JSbq@v zfx7^$-*-RQL_eYDesHe*W-QYgJ}1A1rB=93;3wfzcaZPM*;L)$d*j6KP{X)TqYL@4q-kz$#C1;g{Tk=VJmC7yfOyGZ74h8X1| z03F1rdqy1&mR1aVU7udpAN9HkIrCcuz7FDJc^wvAW>ty10XRpDnSY=S5_D3Y(n4IOwc+( zPz-RM1bkdj%@_1hQF}`x-k@OFk|SW)nB41b64k6EC`u@#s(cMW?`HzP_>*iZs@htR zzCjRQ@?invOAI#KHa=PMQUs1X9=<}PE}_V8|4Q7OvR0E(T z?bU^%%8LcXrv#%Tx!oJ(>@y5XcmC%^odvV>7Fd<3KpC2ZvJm*qzj94c%@jdx84igy zsuSKMDr3K_v$eoiqpBT5m1y3(I}2uZ1b%?8>(2j9Im0f34(j*pP(gj7ph5lKoFb^^ z3!>)zEK#kq2{?xU)bHgbP?rg^YXv@&Y9pS-&j_$k`3pjy6*SKY>fZ~}rv=qt1b))( zdx=`rcI15Ev@=;wo4=_MNPT0oME6j)1?75z)~14NTS4YU_(`3MGl`@^=$19iQLju3|6C^O?VjF=^^0qAQ!=T0w5k%9NcPgzHKfbHAXfaOsPy*lZ zC);pzFLTqipww5nK8~Wl%mN=&Z;$m{O|^1lDhq8;R<{LA(!9BHgr}7nG>XthMTUNy~4u zfz5_N?Amqt+(x0TP#=1%>B_#rUAy5~Rb~{op;Rd)b*~%MfxDDT>itzWvYm7J<^H`> zkOg|T$mxZ)f8`uPj{>FxF2+=-ShR0aNSp(p%}O}POZo_9HTGAEd#BvN@d|}{o5(qj z9YSQ(ELR;V2yk>;ZO>7&RHw*U93!ab3v2)&xl)ujvn?6r58-@NP`IyMr)0_X03V-0 zmCTz#3APth@ZynmiSkxCvquFrGDG$gLH`?q${iE+Y-2Q3rMt>z=Ocxz={_ZM@cYYvZ#V%tF>YjWHGZK4R}?QD-rS*03O-2D0Ih z_TD(ZD6sm@E%TUb+`owCZo821Y&V75(%?p(_X0nQ6mGl)P(H})%M;1EN>&ZiI?5!X z%=n{zLc=^0o)Nec#upJ*k~5x^V4C$cnFNhtf>df-#lG)s-C_221r#3$J*?KB~@RdPN(t>Bv4;^_Q~qeO=W8)rYxjX3k04oQ&!R8PC@b&L5{?j zBmaeQeaIRNuW*z7J4#TlAc#ET z0#UVR2xq!jk;|`oXLud4R}nEvN8E87Zu;Qs}W)3alxz!F$_{PhlD5 zCKQ*oOFTq*zbL<4RFPleelY3+jJMuwemRmyKs=w0TD?9_U~@lXWR=jzJ&3m>mkqxl z@VE@LzQLWr4L{qR2C&l%z@dX-fV*DsZyUjMrLalK6w1%7^`YDy{k}^;ujjM|m%!cD zA2N)-;ZGV|K1X(FWNugMXN{6g85XS#WjKHM6MRg=X`RbFN1-AHK)^X>CzPF6&;Y{r`6^2nxdn;m0N0g^=IjR+gb8&W#7{c%XVs-Fzc?!= za|SN`0&;fk+HWu{My#e^sv>+4*FPrK22tjb%*Azk_$L^gX&YJDDGZ}lb*WswQ5`tb z(NAzOoO8;UcBpe6m9M4*&e^#PaJm?dJc>6U13O1w^G|hJCu+@~{)QJsre->_LuYAp$Ab>9R+V^~@FxRN#$AbLC`!DZjo;~jf6Um*s{09? zPBF_V918dwF0=I;&d+`pO_SFst+`69KT?c-`COb8;G7dL@$6(J=d4^|mI`7NLd}+( zpQ9N34O3HzV#-n6eFpfATBeQD#c(ybimi!uyy=8GnLqBVVmxxiCyqR;gA*S@UEu-bVmzWTk(pB6qG=w}`f%o|e-O$qXh$6}KxOMXasv6y;+J zp5v=$<(L0Vel|^$Jx1uyaXunQQhnDZ`08Kdhn_GX66dS~#wo4~hVz1=_Ky+k<#I6zPy46tnR!a>e(i43`COQZPTwVb-S`{xbuzHVH*R~`8^=wfKY&EXbDfUiKE4%{sW-w^nz?c5XTeFUIA z@^QQDF;SCHh2`)yo4oXE3ceK((1&%F2>R?XSL>;f+w5ZxzAcz{fWTMx11qocU_n6K zPk$-!X@3v)RVJ%);z4=_yV*^g0?h^Rv(v)U@)RR~wNm&AgdEQAr``kcW{~1xz^v5V z!rvH8pR);F2$(^cG6OY7a^w-e^6cUQIiT&bQ2J^WT6I|5wr5G4ZE|*GgTLWo7~1Zg zuOZ5Cn(#Lq?+MaIM*9pu@L9frk|_ES>atuhjAy4qe`-HUF#7leey%!y+{HCDnoc|) z%_N=|1FmAv5b;M3^K&jP&oSlnX#sP-8M5%x_;FfW`QR$Z{i=+5FrqeomXKKpDm`zqwfCa0n z%wZ_aS)dw49(YkmJU35!*!lhOQRyA(PY(F04sBdqz^iw6QJ2)ka3Nh5N4B3soz*z( zAq*=q1`G@7@5bu1;BS6EETp@@0Owr5#c-znkYU2>6hfEh8xA%2LoQnUBvC#>6qj$* zx!eE?2~GZuQY`)$=jk3{u>SD#DRR zoz;EKk>?V{C!+j|oS$1^6xq(%#B&udQ-U_F<&XOtZXQ$fhF!%=H-Bx^RXl3_d)xk5 zfV+ji=3KmxaL%J|RH&3k1$XGLN$Yi#ZA$p#4sdbT7^Y|w&jvC5d`xl}E&T!VJ6T}6 zh`s@pUMOcgMe|vrps9>X$_ZtV_+-t8Mfv%_99_6yz4U9yzWD9B_jYx>w9DpIx|P7M zXD6S7La7)pka)nNMfA%ezWtNmi}O%{&jBPzBY`%qw$ zzX$0D)-XY9e-j2twlBZ@Vt|ufKH*&H2mRLr%vTU_IdG{WcRwxgla{`H78u0IX9dwf z_|uA)>VG*~dd!D=1s?Vt=J$}MMLHAri z#g43R^aXYc658BnylhsuX2P(AIzQl*tRkmhANSpY?%HyOjfjF6>PDW2py@r=0)Ex+ z5MDfQ*op8j58baekRqU?&YYAm`WOJ1< z0-TF~uYZgS>Eh1t?HG%6+6Y7G%Tbaem4WME1uA=#f$PA|wMc78=0eKsfZ6zY7IHvref<0(SCiAu#m|&$ z!)Z+|A|U<*SH!SX3x)yi785wv1^g>#4IAENo=Jd@ulO6O#|M53$kZwPwKjhKxQjLg zr#q69Ids%>>~xo(OD_J<=m$EPbMfUOhq@*Q!*968$A|J&Jq&Q#fq$v%e% z5|!}zY8yHC?7@f(8XQm)-6 z<|wTV76;~EAHxnik?c6&1adxGRI(!QE`U$Q=aiX~qk&|L3uy%o)M%s zknEel@8xWm7i_UNIYlMS(F&zs0-g|*>>2ttNBOd-{1}zF`~a{WrRU^XdI7+^VA;`@ z5CU^Rv7f-N6?kc$FcD--1h%v2O~P_5K3)mJTLjsDP@WAMoG0MqSiDV|+KhL0hx~jn zIzdO_$-%b_tf;Wj0t*Cg+B8)ZpTG`NM3qy4O$9z&5SSr~y#*CwKzwiP1ERt)0>6A` z-H44M7fiyYEXml4R{xWVmm~Y+&+*$DY7On1l_9Zdhpp9|uPEhTfIkzNYM-}2k*g!{ zL%R0q9or5}cUEXPR*>u|D38baQ9*SMPO489xudXT`cxmjddgk+v? zrxdQl8Cuk<9&|gi9sv0tMb3-RU#!giP4=B2K}GW-_3jw-p2oWCN< z4=cMrn*&=~Z}^oq)9$kx<8A5wwGkvqtMcKaq^%HXqpDXRO5b8|(9QgNIu zK^ZdR07dpJK5?*e_GMBV$jA?nGxrY69t7+yNasKu1#oc3S1^)~h|13b=qkzi01L`w z9&izGE#PhjQ;6@mUI|6N^1PaG>S}au*k)dmFUZek^Zod1`gx+<0NeuH4crUdCCFK& z`ap4b3W|LkAN7uJg3x1KO$|qjlRpA?>6a&rY2O&}b*}Id&c6fj@nj`(fh{F#K&>eV zQ=vF38D1~Q-;9$}lQyoK2b>&g2o)3u7?QmN`MvZx~ zaud`_Kn@^jrK>=dg1mrQ17J!G>qD85O@nF+Y$M(#qtco9y#aV5@K#_$;B5d>T8hRd ztp#3l=DXoMP>}2o>;vozoCh2Y93`+Rcx!gj&(PaFTeU>_DTU&8T-Gz8} z3gY5|Ufk#7{Y?dFN8nYFGe~wN@{o)6r;yAUFhX0O#cBTR?S@Y)D_f>b9;cf<1JEbq zw$7Hy*(KPX{H$+!;%ZU(8)+W@UIKEuls`U!v$L+gVXo|@+lZOFRB;VPyZ|_RFEe($ zOwN&j;Q;FdM@u~aeCOh{27jYH%xbAj$*&m(SkLM;r}LXd=zvfc$eB8q5#>dkoujp% zOEp?2JJfzIxHkYselD6ry%cnS%V)}dPUa{s)u=!&izAN~iqVQHWp)NW!Z=Fnx^l8? z*Z}d9!;1C!Q~UWtuFgQHOX{-tYh(5se#ns>V9K@O;*NgcxVh9`>IbgpQI!00b%x-2 z21Z%6an2bA#FDD#{a4=|HqZ3)=#IqmCzD}*qx$pLY}eFBRs0QS9|K71Y6?(RXDt{m z$Q^ke0RzPN>SaL&YtGs{RS~LF=0Sw&)Fl7ihaaZFoW9scOq!!pms&*Dc9d81}I;sx{-M2Th?pxUKM6&v(jiqgSv zz61V9`N$4e!4O3H&XIM<+ zHsG$Z0aODl7}n`XA>^E6er`}F^LL5t45rxcIF%(BaQZ`|Zv-OS>3~2Km#QAtZi3-gvr4l_pOu$VZs-a z@>`X{Kg%#dfm{bODXBTbeEinBKpCXh>EpI9HR-?qz{x~0YjJ@FI9)3L7{7d1U8)Sc zb}?6urwI9}aXrIn7MH;F;>w;m)Rwsz4oEG_BSc$U)}JKG22e8g7rGouFDgOJwAkVT zT?g5=v!|eVFR;6yx4+=tg9NPu1l7U7v4Y}5_?;!#=`(^3Wo{5~yKGf-eYujF>@F7g zw9*52Lwy@R#NYZMfi3WN9uxHumS3$Ug3dDltDP1CZoR60uMa9!42{+Xf{Fu3-I;>Z zw}e6#_$1phJQ5N6o{OiDS`r#v&%iXmEV9Lhl8@20PAz#;!JiYfGw9UQe=V@X;WGo zF->f2(eH3|0h?(`IrP)L59hst@=(F$$aP)hx*p1xguj9(%Mbfn%N z1Sz_gybWvw@Y~8DDt#}`_X%t~Ih}*w{x}y1n#*y10Vj8~lShC@aTY3H`_+PG3xUlB z7PCZ+-G-Ca>Y<}377AYakiOPENl+n=kI@RY+0d~NjWq09`|@Q9?Xx!ZQ&fGV|A3^Q zQ9~&ek?aic^YeWGetzJW+jhB+`6c|+;Gb%)!tV|I)SRCh_^HWmIQglz&7ANnbADyQ zuT1?b`GEs|TjHO^FY+p;r2m!t1gpJlX4li=n7aj^v;;MFph{(KJAMei1I0ogbwag| zpvQHKE?wZ2{RItMrhU{2^|6A2P3q)R_?;-KdkoG~1t}_q!6kg-T$~>i)!7Mf_c;y< zMU?fiR^q43p(VP9#87mc0tC*-%@#RA(W%-!{_kh6nm(7RO0vfn87;n&L9Jp!AX@@)w})OXjleEb?g|8l{ihlt`6rb|Tixa5<5mMEMx_2Yd$aB72a#Z&UD z8BG1hMdh&E@)x4|=-0MFZ(*JOqTfQDta#l&it-@oe^}1P{)UqwnGcm0KCHS3n_R9}$n4WRt)&Joyzzb(&o&Xco2J(1lk z=wBxoM`_ppy1@Gj-DgFa4d=fW)#K1;|2aYSqM%w?wLAFlX9B;Q%P*=N;mWqD7+}q< zT?8dPHaQjwhMXQR=$jYM7gd}oxPqZu(w}WOvwMpu-&xMt)~>%INWX_4nuP9;aH3eS zhA;d=RPd_p_oDK@2nsX_>B|6m$Nr0g)~eJqEWEdYpxRW>-w@bFU|V|KN>skJAPZ3M z5>yS;jsoA^4DS;a_7fxv1nCh3d`A$kI&+wTGaOCc(mc&7>4BgVT}5n74ZTd~-9;R<9hSDCR>pQrP>boVJkD zhch?>kKdYMS};Ou&yqLb^w9+wl${R!#%uFS%(4!Un3QIJHW#xt04b!Y;Oi!dXVV!vj{H{`1)aWtEr6`Cy9~1Z# zfAwYgJpzyIe_GHwQ&6)CY{6~II|UW(QT|xaf@4;2!l_>;1r_UOOnVj*=1@)h2`Xev zAC*r}7uDN@3PZAN5G4bL;d>l`Z*CRzks>>&N&Qk&#zDFMIMvBABSF=fZb}B53wrwr zS}>WKR%mF2NoNTx|Me$C71s*-?6%}^3!m~1?@>w9w+s3`V0gg0^*l~AeEmwls6+Gg zX_@pyfiHCD=ZZ?cK>!Wq`#pVBaK4A;w-v3ribhb~m65M*1AN-6gYa%^lI1V(dxEsj z;I~LrwuXN1$W%r#73bQ5W||;w@SH9xAdma{eQTC}R-EV&bwb_tRv-)!PW@CJOs2E0vVxu1G9=6SmFVFFNI z#0w-}5EV5YG(|d9kZc4sO;BwrXx0_S46?|S%o@M1mukYuv833vn4>jagT z0PEn#)<@V@;3vZu!`Hgr1lfUr?E%=_=pIX$iyte8hL!8+VTJE&V z>O=DDBhIXfII~+O@cxG%P4L!-cRd1+#%KR74ZK1XxLA234=3WZu}!))ZB3j1$I_zXj^ef?`WS))7=NnPf-& z-VKGer`QDwCX?(b$YCcwg8_6dGwhz~b75HuKlwn^yDaaW1*`IO# zLy-PmkTArP7O*D3mZa61DWkjD48N&R71Yjx>5Sxz@mn%hv)u(1Bh)*O^(jzi3rg1Z z;T%DAjUZ#cvAAB)WxO?a3X-o2%I`z{Oi(>5$ezZD;N@+_DU2--E5DhOF|5*D;2r#$ z5tY4Bko*S}11IYUJVJm=ylGJ zCO?byWxg^+n=A+$3o@1f+2H~!p)0dKg!2CT@MHDlvKYpZ#~Wmo7P5+0^nN`oov#mh z@)~EeGiA8sjF0eFLBkZ|hcYsluMgj3UxT_?Fs~*udm`n&0OD%n`g02ot26u$8)|dr zsA##KTw>o?SKn}do{8Ul!2Q{w4zNbkeq$>r)GdAP?(TRaN`QN`a%e zi#nHiBy*=3XEJmy?&z^533V>9XX9L^kGJt#hdLN3&zxc^0sdOq*3WXO{K-ia+^-4x zYYuQOcKYK^W^gx~MOJM@=Mq`j_ot)n@~L#GwScVz*<8T_M7kCQIvsA?htY;9fH@{p zdFynAmR|2K5fx`OzA0rj2Hi^3CwNX>l`I# zF%_<+EHr!pS4mkuSlrK;NKrvGz!wE6 zN}Z^sL+zU2=Qek>dtK(bGUsw3r&2z5v*lkc%6>T`xyPtYo>DGj>yrzjq^JDp`zzG1 z>bjBrVrGwA++@zc?K=g(fzroJXCZ>sjt96@@hPAQWxoJFr*QMcGP5qr^M6Hl&TZmV zz?l0B)IwkuE$ApNq>E;levYztGPktt$9jLip%qG6A)^EnI#d^jdKfkAE?oHJw9ACe|IxN7ZcCF%_H6c0|ElGcy>PkyQz*7l)n~uZI!vp&r%_$ zJ2K!MHW$NEpWm(WYfGb_;2-Vm+g?UmgrGK7r5G;hXbgIAx@Zds^>16uhfK}#cb`;& zoXqx6(k*ck*&p&xt%$c&rZ`=oxwMw8bHs^-v0$Bt=al$PD_M;(YU9I`tSVD}bU2O3 zKZHVM+cj5)QMlF`YRylin^Rj2RFO+Y{Wav$P=5_sRb-XTA*&Mv@$5PMV07%fGa=_V z+50|3#o8rj{SnxfNKo^6fuEiv$|mD|!q0a78kVI2CArs<;Q%>{eFV*c0&iJmtgRY$ zt6Hc!6O>bhH>&1Coi9k)Yzm(eRM!eJlvD9Q@q{QJel6&>$xVX#9zk}Opn_FZ*9ht* zgrX9yo+9*VfnPN7S?m%4(#KZ)Ada7&?iBiM#Uy^^hJtJg)Y^i2U8uJS{Dw?uM2+6i zs$nt}dpiw#I|X|?Q@;xJ8z7^um@qtdXRC|K=rr{<__6#7yFjr?lg$@YX9^a;U(yLd zeTyKw75Ivvx?9lPC#X?lgx}-$vLJ50{9TmA%WM^Xc@WrqhF_ej_rv)u0=^A(h9KQo zbrleL!x**J2r5<%724I}6sVH~ISYyG0;op?zSEE~S2QWkb%1pR#rlG}EvOJWidqG# z*@CDMoqboj>WZ>hTTh5eX)T{L_O^~MLpF3Dcl3@s;op>tF9}$ykx~}-FrQ41qn3f= zaXv=piapyMiEs4yh8x+(FJf0_N?oP{2c{06FkPx%sEC}32o&6pEtiad$YdyK{Xr$m z=)mbGMb$R~6uf+sz#P;3z^ux}9fQ}^jM^Gr=XZjA?8v6VJ-vH}dEA{6=0m$Fo?mSBW39F~(j2W6E|9HNxE1DnMt-$5)=168G(obRz^3IrJ+*IB zrad?9y2{jV##)%Qg_n5Wp6R$|ug!{c-{_0CnCMqI(wtkt_lZ+#yhp{RRID4yGfCuE zOecQX#`QdA&N`e^+NUY4d!3K+H(OF%Bz>POoPplf73RkCIiu0+*DjPc8V01YU7)xs z!WlN!Z;KoH@EkuM9Un<#3^r7@v-${Be)+#XlplnX3_SOwUmgY!&n>;h2Kq%UKJImL zzEJtiA=I~E+e`kHwmtlYKV(gLydLJrfIs9esytN4nZSw4-lh*q*lWd#-g1cxq2U6JU9JKJSZ=HX zhmwIyF#4pwVQ{=z#9Q9yRiJE3K4C04SsOoh*2+4H3;70qhAp6cEqqkPjs5uU=o_X+ z-D2@D1Ly3l{43`Y;F7v%GloC^jsHDAZ{S(Tw-NloRVr1y=4QRco+^DbX?3-z^q2gY zUjZ)&lD*Vg<^6nUCEzuJ@_H%(uxda2UT9Z!(D7S*ufesk6TugwS@?8N|`@D{7H2p@0d5!2Civ^YcV`^rXxS^?V|m30fAg$oX1+ z^!|#M9V2MnD)3#Xc@`lalCybK;5$hB6MvB1^3ZI#< zVTAq>IJ*LGy!zHc$BjIp45m`59$Vs>B>>7|-X17W2Z7#?wf3JD)u((Z$;K(4?H5;+ zujJTK{yaTmSjYt~Bnq6nTv7_@iO+^+#%>~K#(tk|<9q{vf_p2aq0GLR>DL~{&>Ex& zW2vhSX~|b>qv0ByzWbVeKwtB9E zGhaJike?v%%go7P{5G^;={3NLN>QNQ_p9+?7DYP%*b87a_SS=lg3QoZ9Yal8C*vnU zeU^Qk>A2oqkg+%0oG9?wc<-eKwnwwI^)=7fM{O!9V}i^)uxE<8dLKcvFMdZr{Z3G& z`ffUnqRkXk?-#^d*sH4q*;#_{amsRmAo(iPn!u(2Gi+tGuusu20*ZZ=K|JY6r}-UH zea*QW&xo%atk8_LP{OLncLl4xMWuV-M{i0$smSrd;6`AWQ$=NP^kf47G1RvZt7%ZL6Qr*f(+}K2YriwXdMq6Y9N!6u1H@T7tQJqWhTLk#@4&tgc zm3}eZ2MN4|n0qtvA%%JcR6QmtJW1py1ilfO{Rrw&LH@j8@DrTB68PS`??(D?LA!x;)({16BZ57K~34_@+hE!jEm8iVd0cTS^honb({@NYJ$T=43HlR5Z53s7>Ai zya~U}1Qjed*%Fv4@T2boChKGtzRT>-!Z zlg|tC&k2fK1c4I^HWQKGA<8dNCwGeSEzazIQOn-qe3;N50w|aLShb(g2+t7tIbeyv zSLv#!MO7$&;`Ppd;QUX4w+y_L_VI?%9nTCV?Ten-WKrpAIFWouS3XPNWTR~L|;)T%nhzjuC@@V|5Vg911{42n1_#H3s z{m|?|oKFz&D}bXB`ET%h68Hhm=LPA@IGM)cby2INmV>ptD8Im#UouHhO@>+v*iMjd z4z(Guy}%~{v%Sb~PeSM7$CThZqZt!vej3hmp)9aiu(?f6t0$5L1Tb}kJAu0eel;}Q zE~;3J-vfdSl}frkgXtkr%U&?e2t@)|>Xs?8K%Nr7qQPdL;#E`22Wu0`M77ja)2VWX z*8YY%#39|PJnggNs7x=vBG8asJRxLY9p-Wvbg@dF_e10d> zM_x1P#fGeMIALmTdp6VrIj<_JFe^P(PA6-o5xT!%(piG?Ho-jDS9UMXN1&EKaeKv@ zPg~AyII>i|UXbl5@JnGCW4bz7P_jK$eplebpxF*;+H!l~Y=I9XmIxw#lsQ3NnOvd* zS(y~C>3w(V$w*WT)*Ank~;Ey=}4ls$Nvjx#K|CvxX2=bQ%$z&BH8hCxTsBkK9 z9)J!novIANI^@ErNG|}sEXW@a#LLm|*4JX^Vt+bWA86zE2B^0J8v<_wSkG7=Ydu^* z)JR|%ws4wTu4AIFj;DN_{tRCN%)`uXU^2E$)*!k0{As+AEC1yh&yvfLAH3b$A?4L_ zwx1x`iv;wPeYq>&U~N!tOo7llrnGsq3&G&bVV3cdF#TnY$i$QLaOE~!IY$=tQL}U{)xlDG zd@xHJ0kpDf96>4G@kIO>W1_E)BL!8Lz-dYZuL8l#7eX!Aq;8&F`B}RF#|gqhfvc{% z9ltRO$sFomxnA4zssVVIf`fEp|`0+8RLv?&s3oUC0)8qZ7Q)br{h zMak)`7TVf}Dwh;Sn|zG?_JukeU=@=*tH}Lp$n@tpSw1AIC~Z7$x2~w-EzSzR9iiSW z@XIIThv9b;PGoAEplardYF~i!>w^3~fUTMIAA<0AV0C`mYX!c8nj%FuC*nudh3f?+ zf>%7wma9O14>##hG{h7OCy6DGF%`VHmC}1+X2Q*O6@>Hf^ODD7a6d|bycT%#lvvNCrwalLlLTc*v$9GsfwZ1)DF{13 z!5s_cfN=!Z;wk*rSNQ^kv_R#3oazo0Bi)k#I%W!QuiPUp73C)~qmd-moGtb>7M)DM z8~OMGz!i~`{qcf$WY~jlL#6N?qGmr)*(-v8tT!^Sv}m53o=PF>?&icIk z#+T`_<0?VoZtFfY?7Q(C%75>>x%<$l1A7p=7q_V)_hL7Sd!2hRLa(i)#a;|EZ`_L! z3~jl7bhW2O6lxw96u%Wz2tatju|(HXa@PCR zs`7IQULcq4=`Yc+F`{n3??|%B>9z%hbom_c3KLq6XrIpk_5h9)*vzEOJiBMxQkRW% zrRNgmgUTw|2{;Zo0l)Ks3xSJ(FB5Pr)OCWCr9yrsV1B@&A*UbY^vV2oLAZh{hGpb; z5HKj z5^#|qWkH#I8n{B>wTm@7HpmtAIrkFav%f4nlO;HR4F$VNSnMTU0=yu~@1ppCe445) z6F7A`4z&stL(SIrlGot}+l*^Obl34r;4A`W1Mt)Q?NB=a+XF`n0&B@|wjgIgncM~( z4}4A#9t0l1`3>OPf*gU=2S07Y)PpHmPTkCBr^94Xo>#3t2^IZsbwW2IUtK@a9e9X!e~D)Cv-(Bj48&?5a$TYmTq!Z!g)fJ zX;9OFnE+E!{#JlFK8IW6+W^c=(V!!&B}eRz*9uVG5B3*?eF)eK*cX7w{QMez7W0gi zp2g9$<+%VWf}9!FyOH^vf2G(ACg=@?3c)bhRABDt!x^tQbZJlmd;J@en00;t((@)^81h zl3SrgE0nZCeX$_!FMO0tpO!N}Kq*SJ8Y$9`RIg zPu2Z_VlZLkcTj@YkP8j(H?9Lezqd%vYAe1=6?;|Wi^i?h<@7Sr6J$KELRRI61&Iqu zehELTCaV@p9t#r%S^bxOS5d}1SrerTkIfrFWg&rh%`Ji`p#6cIpT}VcQM;;36lY*?G@w`Jt)oxlwR7J)1skQn80K7Qm zN2hC146>@sG0p#`DvF;c@OFAb6-Pnym!e!le_}?gD04;cOf#aOV2busFO$>T?mnpL zU1^Iw2_Fw{r(R$|eWuhfgI|P1(fc9J`*04(ijJOoaRD`*k=OkcX@4OY=l2FaG%-(+ zy{OLLE2opWkmIY7%bN*h&13d>t#TG&eYBk z*e{+$7)BXfsmT775nS2x<>%iKpRpqHSodF<4z3YZ^sshPk-(E>Qfv zWa?r#X9u{s{mID|=*f8iv@fSr*Xz5Z3Ue+_=A0eifo&>|a~BP8lzBs^qxiIlE62rf zRxY^xY?pYMO7tg3#qc)_6*;@42Im*=M-gCWd-!qZGAf@_80HXHk;Aae3x=Qc?;RYhe&8s}eB8MVNahmEeL_?UpKQ?E zTG!$&oD`8bd>y}w1m?iOYvMU_TH$9+O#T&>r5tfM_lWgL#&Aw(?u5_)|4W{QLe944 zsgHo+r&z*I@cRs9;dg9=o+0rrH$5>s2pALi_l`ql2+ZLzvPT4~&mt7rESV+he{x4+ z*s8W|?YfF5dWJPQ?nQ{l*15{r=EOP|QBtok&g7F{le7AsAfCba6VA0%G^^iR48#h# zy?+GM`vu)2p$-Ic>j3R*uF1gq{5O?wER`DOyY z%okwr&8hryWViw*Jp+w!iGY@DBS^Ou)Ye`iLAhUzv*!@sn>a>Phm+r(O9eiFj-bDs zZzI@Te@0g+eg?6?pqLMG|bD$7%WgMN!GtDpm46L0BNjz9=Y<5Tp+Ph}}N7H24-28=JPv9)2n6 zj)gdBfNB@jPwr+>PycBy}ge_7T!VVlL{^9{1u8apZ)dfBn}OFyR9NM|K#`1meYf2&%cx3z5x9> zeU~7at152uD=YfY7)7heU;(;o^Ns!K4BjH{v25w?Bgo)6|7)|`%2NsmlDXH-Au?kt zZt9%|HSC1Z6gLa}WgeJFhN_okZFIZf3{IQMNQNta->E6DBfvX_2uj^6ab6*?3C(D? z8=m8i-ds;89o>g-nwxM=D75@Ml=W900axf3#r?*c6<~!yJd1NR1!q8{42Wpedzn%3 zQw1z*xu(#`8Iht-@`|0P_usVg+h^B?^hK z2Jn2K|{Al|H-MwHhJmbDFzB$x!i`+2iPg$n1Z1l=wa+KPN% zU^l^1royeiLSvY+6|j`i@Og4Zd*N1KFCg?>;!O~MF2jagqUG?<%9(vh;CEkrie@Q8 z;!hG8zEM0&6qv`zns@>8D11=UI}Lv#loiXrH7Sm08qdkBB&t|b5Dk=mODWRzaIPa* z*1|aRN4^=Mi0nQw6Sl-@F?naG4)AV)H!T0H>G53@>XR_GKVE!5PMh=mU)vwQh)k~# z#KSG#;$;5q-z@l_SR(flc?lUjD+o^mzZS&vDyT*NH|EHhoVcc<3{$Wv(aX*3IZwQ6CC4UuI zk>YKlK8x0PHsuf~)@8--1YtQw&x@k!m7yjHtYPsfm11-JD*RBcBySP;rb@YqsM4|u zlf&q=>mBb_fK@NS69)R1q#@Y}f-u0zEFO?)ma&EYJIhzdP2np7U#U#b7nLp$c-y49 zTa=Hqcu&|0ocJ8g0|eX)pg-{8mi!@6%}|9NO{l+C-8*B-3O5mXB>?qK6qJ~}%2jZd zg3$?=um*ms3BuaI`hskVph4x6v;{V+-b@#jZh#XF(8zMyQs*O&s<=#$|3dM~2~pQD z)AgC@N~Sg&kFtSM3v#~Zn|?u|Df636MGlzNe2T`J7@LapS<^mJu1}cyGN1Q8M^++R zk18}@BB(yA5A}X7s`Uu)V?o1Amp&yZ9v65cDB6a6M$UNiZ;_Ivzs1Q+w}?qD+JJ>k9`8+q+DMSDD=6M5DBmQg z-VC+1pu3g8+lsa!nK7X?Rt?P&)j3emvMj&5s00;57YV*ORWMj62xsGD2J0|`^*@jE zWa~jRZLoa^nTQ6;Ym)n2NleKAMGm-LZ@OoEXGkgdjt)P&4g>>wsGYeI}svOHeEnZJH)Ul^DKFz@jzMfv7r!A4rjv{U{=FyjS5&f>=!IUnMvR#A`WtSd-15M=8K!iM-E(EEU6`5&Uv zZ3PKRqP#E2m|c2IC(U{I%@u^N2nNXf)prCnvxcuJ)ZZ3WGFJrjo%x{x>)ZRDA($)r zOcO2UfbPbEKAgY5gTVGIQ&tIn=fa!W+0F`R?FYdAtDc~9tf052Abd!WorvG@g4QX5 z?m74^1X$Qzf4-=OIiP#1z}t#er`Gq#xr{zGz8l20tT}qg`lH(t_(n_IVlU+M6~5lO zqDmNdv!=i{E_*QU`n5RUAV^rO6dMV=DW7g5%1cY%*RaCg%H;x1?WK%gTVK#88SJ_R zZ?}!h4qUnOenEARpg9r>hU~i@{qscSaAiMs<~vxQy-d!*u^I;PSS^*EQ`zy%CsUTs zuv8yaHJLG5eoh(K4XW`RQL@}xeaLF6u{-EZ-vAyEjQ>o~+eB%-15+KK{H(w^%M-!g z3J9N+Umpfv!rSwQ`Q*o-%*^?21JADD%9)ujY}m`@+ZQXq=Bw(vL=E77+1C|Xoh&F& z9mGR52<7Pp0w0wxriltLs5A)rI}4(H+igX4wiA@>+xy^qe?L+Ao&q0e?|lU4Cj?!@ z>B(0Kvabk|2L#o(p&k@g%QyvYQ5*}*6(na1a>jXfwP51sg33ym z--;@b9a~6@<1Yz1&kOo2H?v&7t$K|hY#}JAVjGq%7@S>3WB+r4z{rb7h8b^N23Vf~ z*4<0+3S*%>L*SeDEkq$-zi%@PYNQ))K<)W6QT+r!`bstw_^93sdx`3~U$L6~tA44r z(?x|nlzn}qpkgX-Jd1xoRB^K4R+={3NnqQbecHGFl%QM@zb^}}(vMuO^I7>VVy+$8 z1I<}W_I{(_0UIshN`?CAt@Lg=t9t=DL-G)Cxk4u~b9NsW_^L+soT!ai`}J9P`k^^5 z;(~Q3Q}o@Gxy*Or8+t^=yyasRZ-1YtJ~NoFJrs<9{^^2@Zc)%JYPv<=-NF;qjdJGn zjr=h7mDg%09-7HCTvjP)bzTIm`O?|k>o)^VE!oB)k^*<=+f(K zF)$gY)|eqYC4{x9zc&hOd8s!Oik{f-2;v4nEvmbnz;>wmtUtV@sOX(F>x!ItVcaVR zn0~ghnykaxAe}7Ao2=OmqQd5a99Hi=*A`qpgSW@6M*40aX8t?)cs@_iyFgGNncJk_ zD=Xo=N#KVqEPHoW)NlLGRDQO3Tdg6g=Z?OqC^O`~S#zy;K5F59ZyToZ;HL%a{fW$2 z@Qr3m!?q}#b2=uxM`;u0(8M+5iO+MM2b0+xY}i`%9HF;wk=Oxny~=(3YEiy$)G;@k zN~b{%Th><7bMiAUzLNFyvId*JKv{kSFj@O$s@55zDrzknabiL%I|4tOIWp%|AZMH3 zcUdELtuN*$*j}^MS;?a~VFk-*@)zJ|CAqcnIs87JVETo!>Z47ul;#oOwN=~zrM0Yh zbEb>Q#g^x+22WX_+CpbuQZzz+OS}!E_1(jY9K`7aRF|FobrA?RF#^G<-B!tN3P5z$v0d$U!7{&4~y zlE_X|3A(EZ3Oc_f3a|6#@ngnZ&mSg~4~?y(Wa&eq!bb$0o>Ko>N@ia5MZiZPJ6Xa5i zXRjc%7 z_`OZgnI$;m9fFeiBi&t4ET<~z!2bO_t{=s1-!G?MQ;k~ztI9b(hba0%OEr{by$+EB znwSnPlOvb>fBUYb9~BELv!fauw&bIA$&c_u5wNVv8yR?{ z=>9+RUCU~&T48LS;D7U^yKN$O?}s=MQl?x zuJX5+-@jEe@2-IKXi~7$Pd)&g1e_x9)tUc8pShf_p5y(k|D|5J#|ZT-W;~obcagoKDTyss#CP+VKXI?a}t%tAPID zgfa`+JgsM;67}76^8}uX5>`betD@yEgJNdNKL^G1lzdZQ%Wj^dlJ64AM3sCL7|vGH zQR(G>76j%kpGEY%)neYN+JbZ)f$y;Ora~bER&N!QOlS#Gc-|Mpsg0GAcZ14Z3EflB zFx^F)E63t@oSq#2IJk7ZTY zOGX5iE&|IKe%{>Z(AUz_1jVU>K05f;g@WuN!AhSObeYw9%wQS9o!__W{Z>@#k2rq~ zAU1xF^?ARg=B|)v1KXor*5ZD1$gjv9e6XCYO;mNoS)z`)RM1&02)7Bgxf|+wLF-;Y z^L;`05y0#2C8GMz;6!fsWk}2DagDvU{461_Filjofnd+q34D~l#kzZSdRS+cAgKiT z&Vo&M6m&UMSneWdbp^cxp!N~;4-@zpcIyaHos$K6ltut*!ZSn4eeWS;;}46sAX?E#TJnw@~_)pW<}U~?66d(sH}Bt?oIErD}| zs|5qNR6b-&Bdb#BUlfonN9ob_H)dbl7tQQ&7A{1jF8F`Op}sxt(|d??>Duf-BRq&VrK4eZO04Atw1D%TctSl|bis=f80(8i}z1W6+3)2RcKwRcq$ zSYNiKprnucNPTZZQSRss9o<)dJ9PB>`-0?sf|6<5$Ij;;EGn=juHl&VQ3M<#C{PG_ zssCG;$42i^MfAwUtKMpcS~WjY0b{ocnnS6{uPM~aNUIat7va24P;RTp-k!>dlKxYX zy<_JSOx3S&vf8O``Bw%%og=?+9DdfHz945ovf?WF{f}*rxy-cSQU=IqivDZ(5Y^-b zmdiXiQ1NO?>Q|J!FpeDr;iQe25>I(k$j(P83v)`%oH7ZKq+zzooIS(7o)A3sq@dxq z1tQxl{S`!Rd1`Z4aSHg$E1wqld5k#3y*~0J!p9#RqqlpuXDat2D(N$#5@t>tYK)39 zn!?w7!&jBeoX|hD)sZtkFgA?>S#e48*otb-$~8XRz7Kx;0#*bZsQ@44w=gzt_Fyi6 zES0hq+8>R0^bzesX{}F;ywe(`eaRlK7v81NU_S|SSUienLsY_ zfsJ^jgC=uZ`mDh?!^OSi6{^G+y1fS!&ZihF;>T~xmD6(FtK^(>r65qd{ZxL;g?e)c zzeNI{;_`hkcZPbBLi17(P>Ln%3i=Ch7Ru1}bMn(fMau;!FY?#$wLgifZdQI%DQ=IB z)Z_P-Fp6wCAKFNeTD40r9(+xq2~Pi*yWA*lj}hfUIxA9GpJ*;HPBYq2S^fhu{iYzh zPTw8t5a9NhC%=LM`A()cWKznKyk3xgP-V73*7QawDx!E30anE_xmE`V64V`WhUJs_ z{&HrA6L6HkmjjDaMAgi-#fgIKV}feFz!tayQ)+byz=$d@6%t#1`ni-~e4&aVryZ{l~CVD3Xumn-tb5}c0+>K_aI^riKzvl+VeU5a9R z3iXFYmA{u?I!>#?GFDzeRCltVT1im9hJcj?X)f@gy=oN#=o|H_f(G$2td5helC`1M z5Hx7n>oo<%RH*3!8%oYly8CIIavFZDnX1$;$#&1i3HTm`1@C$-ww!lJfv4bdc(Xf*!???HbO}3q!$=mUJC)B$Ibyu(| z8&y6EoXmmRPf+bE$o7KTAHPEd4Lm11MBsbJ*)gJQ9;G-5>NEld0JDazaM$pr8f~Lr zYqnXhRao&&pDP%gE~w@SnllAf?^rUoC62gDhJG?TPvHHsf+5*lAn?mTt6U_if1x12 zud0iIPXV97?@B>2f%6hUeFIM9d%xvZ-zdt*Lz3G?b-lj4izv4ea1YdC!K~W^v+sub zx}ahSTHG(F?*s0|?^}X+Mg;A7#j@1;)9Rz5k{=4JNzJ||s{A>jEH1($z>|Xd34t|K z)zhM?M{zC@gdYi-=LIub9D-m33~R5A{y`kasgySw3=8F|}2@9U!RRkKa*(f^C@kV4SSW0yE+!9~7))%^gxfeZ0W7(QLgs8*1|!w0Q;V zw`u@vC-C)+dOps%f|bq^)C+)*3W_rXt&a)3=O37RI_D7Z2|>lSY;}pCSttn1$rX#j z@M%HkGC_GMepd*xMS@}ixJHnFUeLK#;Il#%;(l_Spt>GlI?iqdZWM$sLES7!zA7m0 z5Hu|2t2^<#O%U$J?_NQMY9nFMkbFx}FiR%)34GY7{1JW+11wd`M*!BV;fI0>#Ye#g zK=Bhn_A{ub1l|v*eudvJ1h(u}JtwMqR*?T5>S=*@pqrOPWiJWJ<;E27cTx2}1Ph-R zRIdm^q5$ttr~i~QL48sq8&oS2z*43{ky7M1UxjnBAREWI8qmVIx}afYU9SbKFQ}#q zveycdsZeb}y@8;Zf!}&io8q^zpxO}U+Ja#t%7=6s9AzJ9YM8|pqMSF5xWc4`!*|Azg^T~wy{c9{?+z^x{u#(0$a4U^jhso zfaQq&2>7@loCozq;5I>hoS^kNLHU3n`v&kVfY4jKBB&6ovq^$-M?qmF!p5SSO@Io& z?FD{Lr9pP|AuJo(&rXojFPLTn;(eUZbAkCdZ-Y8r;4S+S;k~$1klZb(@4$IG)MEU; zA;|6#_<6K&zo-T|r&wQ{FdQms20~W3qWXbt_Ghc$L{hB~naU}GjCGy`xnffSkmhX8 zY0f)DCF?1x1-lZkyP&8A!IJ9U_{|Y4e;^b~yzGmD-~(6th{}&7;0Qs1r0=s0yHELjqslXq_smcP37BX}uE!{c8k15oN2V z-3d7-&Q$izm7+RNh>F&E5xfF|m#s2b@!^fq^j`Uu2ws!!Bg!>O5fH($?+fxr@%t&% zuSLmvEx#@F|-9KSkwR=%>~*1bHPW5LlA!1mzx3dqSb}Xk8|# z7YT|71@Q#u!}y`(sL^i}>oASbfpphql&cccSUFU&>j-Q0l)3`mhY2WzXo( z75%w-Sl}b;eq^$ZK5TU2JYA^JV>XvxzJs9qOF4H#QPJB>knIAn7D|s5vG|o?FC1cPAHCXM`&WW>?6q&vRw#Y*iw($qUcT9 zR;ckVw8l%Cj$-D8KP^gAbcHbaa=|618|yi`bi`WM2#(W{VVS4L2{y&Y+#so3T<3ML zfq$@JEoGx#OK{lPlmgP)P{=S`d-g**TqsT!%JIT>Sce@9!vxE1JB&7O4_VlGi&4~y z^v%5uthbsd7ErRYqR?6%EGu{#PS<5FLg!O3mgL-eL+wq3 z4&Cb#)#ud%@$r&!wAoAexw?rEq1P%3jaLfT#nrMCYaw!%Cd2xLVv(&U{LcwF{19D~ zX64X6y7B1m0H0BC2kZAbCFa*!J8_J{;0ZLI_!KBy&E{I1lA%hYnYkVv*%22CUF>X^ zrkinOo^>1_?DiN z(E3_Z?MI+BP1gly3GEY*z6LaWo$ZA73rgBU5DmPNt(DQGMmfNBe1VdIHNdr-MyE?(HG zLd+0J69B5>t)XahI(vP*=j0H6u;QK~sVsH7F_kmkL8xyLnwTpeN{VbV?2AO5Ifyns9ijhdt-}3rtnnREnR;)~ z2e3P}cdSlvxaDS290jwFy4qM7*l>-rgJnkJP?<@oBoV^WLXcr%dX+3MW{H!Ri+QHc?e{qk}TEK=&$1_Q#IU zHJdrx(Q5q1jbywl^u{{7oI&VNn&O`UI+R_yX)~Na@NNeNC+%H!v?Qg$^QF&T8P27d3{Q=LoJ=3fj!6DyKpl4 z-f^B{v_OH0cxjKM+BV_VO3r~&@IGQK8t^a{oFe2$3C-lvF_Ii1JEl|P>7MaqB=ko9 zxZox~!8#m6jhaev^s2#;H2Lu?LPUSYJ7W~DDcPMz2$9ekF7#pn1RDQ*Q^C8D{nyd^|e3IF-_nphOpS5r|B_95q#=X_S~YACrY367QB zgej)@#BP|emdYIkE1pMqn5kUPoupCkD;dwDWIl|m&^xKt7Si3p0RVe4qU%x6^{6PZ zHZYQvc%t=qqHB@95Zw8$u;GH^5Qyb0DEZ5@>yn#cY&Uh4WM34S0 zeOnoY^|PHV|~wmc;B=cF+URYRk0V? zUvP)gOKd7s)g4C)ouh=hUl?+d5T7Vy=OVd(d8VZHc|v)ouDtw2NyXK|aQc@u=1g>> zr1*AlzwiM4#%7@+MrHPr;2>DVo03}Zfp>+39%S+lp$YMXC1X#%=YZF<^MG*Gy^dh}xXv<~NX5LrIb*Q;|X8okyKurV{ z8rKZX(B4C6Vii-a>RSbeBlmcBeV3B`ijm-fMH_GD+EhwTbreVma3+54a8H-<<42 z8W@E0v8Dq<#!SHGmM3!$Oz`$GkGT6-;V(0-`uQrptKM^TFEdca!=5URUKy7DSyHj0 z9xGp6NNCH>dR_38uiUC-3;jntOh4Y*NAQA$^k-aP+KnIM8^1`o-Z!Yi4DbrKu(Hmp z{v`wyV=_ip4ymqJ@*?WZ1mB-y7Y#g7Oy%@Fd!rlcCjXj4v-&*0m);$9UcrygIPG41 za=(ix$Gj_IGa;KhaG=#L>gHS&cfGmbwR0Y-NZPu;F70%e+T-!$`&~A;R6p>KkK9eU zwtZ~Lc-xDV(&UGEX0Wc}*k1mY{;EU$zudusPjM;hPFr~H1e1FN!zLbq_7A1brLAp7 zr8(tP;P=wQC-X4Alkura`VCFpNm6`{&WjG!O*VTd@M{rjGrm}8UqXgXYZ|n0sgn8a zobs07`AGfPgx(~q_ij$UoFoly`UuJUg|lcmtBFGXJ0bg=t1#Z!w20VnQ4msk*6m}3 z*i8pkT1r1JyV?yO`*udR&@*XkD>C(wqREw`9KhWufn{*YY!b-`Mhes?vW9xDtL;)Rju zx^=CP(QBUVKige;{M2UDBS`*k=po1JbN4H@3bK{9j54|yKsJSH3Paz%fb0@uiR8lkAe62FdRrMljTA?;C){9;1*Ce$lTzxd)@$ZD_N$`YFFQyCBdvX;N ze9nze#T}TVHXXmyOMeTDladnlz+Rk88L!l^lx>} z1%4|0V5N^0#fm!Ctdze%Quhx+>l4nyD3AEG^>;$E`o}iNIBuMNRO?El`v8MEKUnxP zlYTc|Mrc<5{9KavKyKY3sZC24XvPu@=9qV1^5lI-N$MOU1e%l9-GWzXWOI^%TC)GD z!gW<+y*kizjlbzzt9sthcc17|(f2}_lSkm)hh=ns(XxVDXRiaFO6%ep+J|;*cC=eg zr`QYOnJZRb)*FMVevLuO_5O3Kl#k~RHPgA0!p__VRonr%UC+I(SV`55sk&XtON}KR zC^TLvnw=oYP7_Dl%3N{|(ye)cTD=Gtod>KUILJzj9T87!z`a<#G4p7wnO z-aO%;JI!?;9jT0m=@F#2NQ$l&!mUUXg`PWw_E&;u&)%Boyns#Z-5CO{U*yg_*0mQL zWvfZbe@@1Rg1dsrrsP&a6LEHLNyTnLb-d8ML#XL%MDGIz4x7!PK9}UtLxZ&3TllvJgw{jgexdJD{YTH6k~~Sf%kWS8pMoPAdeA4L+&hxCX!rK@g5*#o)c}Y_FhR{C+2_Iwmm|&kmG8Ksmdxcvjyp2t?sA(?8 z97m(Q3-S7r3Y@_OWhiVT*wL8cXv|%ZMoCKCZcTF#I}o-vP)e>=u7?7=#m~5Vl??bD zD~6^$UA7r~{)>`1z6TF4drPBueqN3%_R^9%Z6QK!mg^wZ!g?nNo~d0@);u*k!>YHl z!AqUH>nhp$P`UjSy>xeS4?;RjDEayxXZi-EP(CcgsgPx0KEXkQ+zofI35STTS5k)O zvpQ;o_sFQ$(6Mq&Kzr#p6Q0lNt+G1X>zHHyw5*j!kwi7yc@p7X4d<$l%phh>&y6;lF~zk7)|3zL{=@mXqsk% z&%>NT)0SbnbZFn=8TAz={6w(QZx5GLqei;6RSuApA1TDRm3p@q($j_NM(_ururB#V zQU|-lo52)l<(TfFhttE!+&wy?q<_$8{@fjjuatJApLi%43klv!(n0kr+=guoj2MGHtO77T zLtBU#yNelf$VLibl;Eg!j#cMqmz5f3~zqu$UNx<{KqAng308lZ~@KWoeg8`ChuKXy(X!mG==#ScrP)s!rUMSeS+tgc>6K$rxdTIV-?E7yT%uk#OMqmp&3hP z#=NaW^br}K3HBtk*U^`5Mz2qk)J1PJ#>CN*vIm9qX|StMP)^rcl<$Gf8tCBLrVjH; z>dY@VM1qZuE;d($otD&4NPp?n32EHB|7F7$KB>WPFb2`R(*c9W-$vH3;M=^dl){& z-BO#J>3q6V57%7DDR0^KMtbmJ?({C@diDIf9J3nnm3%NL{4VbPi` z?D(oNS|y%K&ta7jp(r90g@al~%>5WxI@s(Pdx(yeqlI2nL3A28M@T0KvCSUr1F!l` z-sac`Bws}OI})GbYFn0mIdgH7D1~?d!SN!ap-3nNM~*B|1u?21S_g@CA>M-I4&X47 zM`v&$A#jtl5Z>c3@f;wUi60b(oj7H*&`;58R)kX+`o;;- z1fki$5a&gTr`MBi)3+rxOTcksRIdmn#o`B>8fLnlH^*y+40sdS;zC8S2-LxdKH@+N z5mPLFu-hRmgoEgK=gO1<(s(tFmDEouX|_SUn2ZTROnGU7O?b$F^3rVkLwWh}hKQeX z3jOynAC;^SsY$kD)B=_l>Rj|~V`X@r0X3^6w)5ZD8wFO7! z?xAH$sVSac=V+4Aw61wfxz8|6&9oHdY1-#j~UB*lO$ptAao4 zu9^z#y4uSH_+5vSXqFdWpi?4z>&4<=HF8%6uD@2B)VIjDL4C8)YYU~vdI+uJ-bCF| zZnG7}ev+E)BE~2;C8O9xXm(TBn)A@qpMZ34C7bODP=}K^)=Ue)t>mGjE-%71q5GE+ zw_%q`Jgc6(86tN5WwKVfGRM%~O(n)WPhEdEAY*+Y+XU%Xz}5NJNLvZ%VL})!G#ikf z#WC0931slbV>|@?Pa!=c{Gbx^6}-MX{g&K+3DJyt{NV!%9^Ky5WY^z9NjnT|-2J%f zx~}5g3Io;DmDBa|8ZLD^x&N+){zDlK%=_bgOR<n~~dbdO0`Tw(E z;2G_26S|HOg#Sh`a5Pu1ojTZXO+;`id-%Ps=dcbxjtGwT_s7A&SLN6Sf*0ajnTJi3 zv}X9Xp;~^$$y;#BzQTVuBKXZ*#l1juN%RQUW0)g)3fNeDT~ZU(@ij@^cZBe+kWLYz z4@iDY5>xU&4-oz(r+g(0Y-k_NLg}QHjOP&kpNGm9(C``~u*RJEZv+je+Y)ULX#M`rBZt!+@dD?1n!0gE z`v(#9xLpSg52)*BP@C!Y!boN|be|OJU4%gM=_xYq(mp`*nb3QRX<_Tbgbd@!OE8L~ zNggRQOE6BC^y76H$LgZ)V6`q+ZX5SRGo2DM`Tu&&Mg6Q!u`k1uW&UrLTU@V`f3VWR z6Zw|c1C}eGCuu)wTWN))%(fY3*?)Ptg?rKSqF>e&vM#`T-YmD+UD6D{5&rF(3v`p` z#(QQ>`nc}2S$Ofhq&_Nkn2~osli+@e*IbNRPRVA?1wQU(xdme^KUisTsFE3e?`FBh z5t2OJ?gwiwUeM*6{>;P5ZS$qQRg7(^H*shE+cg)%bzX0uP}oXaT+$ELTm&VXnXPL` zYSvuLuS;FFDH-bt?xg?Qg%`Ui*E^5pXK)@}sFW_e2NPetOt+h1+xDCwsU9ulPYLDP zIwf078O`ho+$VLSWHVg?)4tcfG)yqNUViLQ^Z(j&;^7tA)!3eG8W!)xz8>$Y4+oun zJS%chH#;#N0uNkAe64tdl3_70Snv)wjVB8)T|yVM%T?%{3`+hib|`-#2;M_F#`bnR zg>+U<-a|+a6nuHlQF088ayDJhHF>rZmD|D-*ufv+fr8Gux?Z`1;LQq)?{v{>F`efS z$Ln$I~d0uc+HvPoU|B@^M|j|DxUvbV*VC4khJ@gH(6%- zA#WF!d&C$&X10n>adh&E?q>FDF2&2Xi?H7YxJ}rTbyp6`*k%mF4`@fcJNWjbPUfNS zMVonAa)g5N^LAcAx{fO|#O}$%-Uz_Gj`VUKpE(3MM^Si*NM>IPU72bIJ#Rcj2n+M%^9cDcj?p#uzh-t8oJC2su1)+(UiT7|U=ULulHkA~u$|FM!eODDJgqo(QS0)s*Cce+4= zt=#@r|Ld@`Z8Ge|ZkkV$V@}t3uKRY_&&k{HAj7=mhWV6qC9#8K49C1E+xBy?Nyo7h zchq^&ERvchLW_EqnJ+b-Q~Vnvk@|c14fH{Em(WZ>@hMimNPXlsgFYmCT?mmTb4q_l z@W1)4ytc}2`T_U5AI3GR(ZDuh?$p2Kj|$%5W6k>|buQN9x5i2ecL>RSLUpfD^SQ@N zCi$QcJuWzCP@t*wBxAp9e@5R+FAggYK}_d1Wvl=7CVTki&7dPH$lF~xzKVla_z@Oc zK)2y(q3JM5p5x`XB+YKuTj)~pclzIO5%0xq*=IV|g99;|lMG%?`Wwze>gTaiS{JwC zc6WGEgQqHc*fW1i=fw;(cTwT}*C^Sz`F7>s@H}-s6?(oQiCfr%2mRJ-IB)HOi(+nQ zW-zbdeWf!jne;I*6%@L1MQ>v20!Tj_NDB0JcxQbvlS$1$Dk?TL?8GI$mP z$|&q6G}|BFC#g$Ev2dqwn6A>=RESH#`{&tY^1gE(+K(|xklFNySw{f~TlG5nL^J2Sm?3I$@HM&6xG289P^eSP8HXV(D3djAp!)CNUqX%>$eS*Doz4Bz>#L?WaGpOm z?RjQ(ol1%p5t0Q3$BrrImQ>G2a&^H?eiNkycWO3LD31~xX{A0;Qgnt;V2yNWjsta} zzFEj73PbNfxLW=yp>JsKuPs}fOfT{NiERwct)=8&N}*a?C@}8oS}4)k*%=($Q|Myic*?&Ql281- zk~JoKhxVu$Xda8Si_rZG682C%U_`I10@7JWsCpJ@qz{_#;Z%)%s;2Vhp_JCXyJH3GJJg z6gj?Q5-SV!T~r7 zJ42Lodl}P@ud(l2v{5BWu%a`NqxE8IJ#=E%3h!W!F;MDl#d1_%Zq;|Br0iI7k4HL9 zNYQ^K`mY?Nq&E{QkCD_t^>wD_Dro)`omivwI#-aSX$x0Mnuz}61!=B}q-%~l{Nnmahu`cvF}%Q5lH@nWmz{U=|-s zy8C)%bWoP9KMCEx3IUB79nOFJP051JMf^`8`a*E*^6&`xG+w6NKTd2)0TC@q< zHai(}f_a627A+SP>Lms5H`ZB3QVYjNf@$Cl#zHBnw;*F}p_vi?3nZK&c_n0wR(UFG zv4y01Um->1ru_hw8=oc&xsaq)?j%W_YlR%WTcdX;qIX;O3+aPkvM~4o@PyEQL2!)y zp0_2%DCB1C+D-bMTr?pS zx|i^>SC$m5B(!ncv^EBnkgf;z0DA-MjSR(I?<OkAz9nk7jRtOgFR5U9T%CT8?9j31JSBsOza83g26MZ>VDllY%|3szPx) znrUZuB-FL{C`gVZiMsYoKnGE5jaM=`S*TAJf(PYa(3K~luJdt%eF|QZ<#@Tt)0~H6 z%PU0#dfb5rx^GBY>rKHy3PUQ%o7#9cvJ{P;18ZZjb1Ah6RNZ zwO(Rbmgsh?`g(Cm_3}cxk`ONiZ1k=nDO*$MpyiYKRbnU6pCYv(f5uz^5?2;-5OY#glH?A4YUBsh$T7~z1*p<^vyIhP%z^&vScpNJk&m^Su zT$`Toc9H_!(iBrI#Z>c_WZ_>(v+!$k3myaV;>Fmt4D-Wl3ggGQgBbwD%xl;jk|eCg zvDE=(!#lmCTO*AU+|!)Ai=^PjVL{zwGn0I8NzI0I2lA9h=@h@KK0bU*qh6j%1`TPK zu7dlQ(Q!)FxY1&CPM0!NGDwqAt+FS{JzlWu;EmmMN`0hI(#Dt5I-@Z!yLe0R?$i}; z+;b*8zpi>yCucNw1?`(x;APiK%7=0HYX}*peGvo)e0Ec0AAGixj-@vW`DCI0E+L`S za4DXI3eT{(o9XFjYVQo$V}*Q`lJU#nDpaTV#jJvDT(Qx`j28SFhMA<)KAvD*cM7_C?`L3 zg5c7WG9{y=AO(#4CLYBT>IB zo{n{ICih9fo1uF9lT4{W-qOu6QalSOzELMTGRlBY+5s)*~2>yWdI(SAXKN8Y} z8>g);+-TwebFAJ$utB_AROM6ZSNR; zkfT6TDulFROjmgjwNM>(8^d^-n_Jl z2=3Oo(kU_4a5Ht6Q>r((JQhVp^BxAyqhxzldr8&xCQT0a<2r5KZppqw>+#ap8@Lq4 zY@i?C3<{w2ni;k0>L*KVxafR-oSty(i3E6d9Qnc9XxKaBcRGAy{jYVqlXhoCf6y^c zmT~)0?ZB_0mCKPrMbE+8vc>qb+w?Fz(WZKae|r|}&M_2<=iPYU!*YKmivxtpBZ@~z za?FroKaL$OM28Dyzc7jZM|rGJ&~8wHPA3xq(klS^Hx zWJ${uE)hETbKEj@XsE*F;4;B6x=XiP=w~l`wP&ZehEq`2jz4a%vm54cla8gggWCkh zNbyv{a1Y5_gl6kx6hL`4H*}w*6z5NPRHz;hqTiDI9ZAYd_J~kC4el4h!${8nw}@Br zM9-3eLUEH?yoQ89P)#A@6{J5Ry@5p6D7+*zaSh%fNox?^6Y_V3>SHA8TZToE&>V-q z3K0#4v!{iDCxZd;;$s-{}c+EKu<9$@iMuSRP?Gmr-Q-tLN$|+(`T~3DVYW7 zdrr3JDdm(|IfnZwWsY!8KPt44<^Va#KEb;>r}VATxrFvmq=kfh9-(5S!J9mL%%(kz z+{J`0YNWFSxl0NT@79`6QnIwrT}sH86H@ALSQcqzp~WC|^)sQM!xmOUT2ZK1656W> zZaIrpC0W;nwIp?DNYen;6Y_P0sx5e9nr(&ld7?NnR*a=;Hi5q~CDtN^l9uE08V{@(Duga>1cI z@{37cCq$Ek?)7B2%YB2S^f;lo30y6BF0uRK;TDeF3T_v|J>XuFcM8@0;5H$@k7Ey# zoGc8#i{x*??tAqfn!e##gjt(oKT$z9uo2w zke&yB6pGitGeY}Sq-TZvCGf5=Iy!=3tx2W;1uwe?hFM>~no>v5~ zjck1+srnqe$+15p{RMm`gg*(zCqnX9q`!fW!QX|>Kad_1s;`i~2j2?$*Btvo2!kTw zUmW|6V_$-)AW}vb6C$2jCEeR!e9zNR!VeRQNo?TpatoF6H_BExaG0PbhGPRPzY=f?yGjEg*D%inNfB zEGmQ%B!>z4Qb;{QwG7h299vQ7E`hYXP%Vk{Goiq_lCB^m%L;9q=l|4g6iX{vV%VfZ zh3+as&uT)ox=^etXgcc(UhiCNAgS6=Xt%*eg6AyS-`-kZ$$Vpu zZ7OtrDMYp46$R{qT&M#zsr!YKE`fnq$#ab%3;7*4F}WT7}g zaGdSxG?GV=afaY+_u6Mly6kizzep&~7TRZlOG#cJl;@MYoFtw8);U6Uo{(P%E)kN; zgz{p+8|)NUODZM_75$_3bwap-V^<03O-R=Z)wM!*BKQrsO$fINUW3}Y9qDeNnPqXO zq|QAYyPsqC3i(|m?-SaSId+GT{ub#0q4gNjLqhquFyv98`ylw8P&^5KFEoo?>CbeY z;MgVLCEqAQ=mtAxP5;-VUjn zSyGt^LuMl*CF3VTg@YuW38`1e=u8!}3;A3~Euor2NM;qh6s%r=WAlN9z@mcJedc|V z@?j(w20sWd#8Q&#5`J*g&X$Aru>f^@Jvr(MFOw z6~{V)2iM9{Qua%ZZ6b`>RPd_!e0`4n3al&S>wsSip%&6E$<4uL;9PyEVhc%L2371K z$&0e{eI&KU3F#T+o+UWMXK|;b+YbCnsPGhJbn7#_Fc09^?m~peAsixf59QcFLdig6g zY~9DPd%CZW~2B)kEHWIq)3E8WHP=;g>?ZjgXBL${oOtLb|;W?JQI?>!WzE zxV^QK4zyqGB&oF*xqE_+&>jW$6QVN&$KCflvB$Sn;rHNaNq0R#d3eAm zp;mb9T<^yEkK`@Et_{1rGIUeqs_}bec(HXCsak~$zDGr}cPqU=yOrz|>&$_wI#RHP z^Yj6SjqbZ!Cr{u%hF_x#v~LlTxs~*~G2cexPUVzxH-6)Ap*&IuM+uJB*g8Z~dZ$kD z%$oFSCC6VbMArc>TD*z$D5v~RxcpB_rk`-^ekJScB~>>_O6h{O4iUUhjidcm(<|3g z{~R1AI!H-}I?PaR-deIon|aDZgbGR)1M3Q2$To?ZT#OOQaY9Yi&0Tf<_|)J0K_NUY zI2^gFWP4X7C%FnydmQb}mBaxy9XoKqrPsTS?jSlC91D0Q$+7ykm>1#LHu3U$th5w* z3L$I>=(tx~fzyOO`lcT1P3V2P=pZC($ET6r5N3E&um{rtNUA4-dG+IM z)S*xA;}pMQdxV==dj28cDVsjUxwHCuz84B>Nzwya&F#8u>_o9& z2Wha&F+8iJhZ@sYkX{n%SB01w>bTBrDrfaKKn?BuLrDKFc=kkgobDk1f@9R$CRpmU zl0CZ6C-Z_2Pj6^Zvc0irv^!tb6`O)SoPr)-Aap6{*|maQD*0qdj>|NXa&NCjQ|@t3 z41Q1W5MqQ6z!S$Dn4^DgJ+xymxnG-YOmbSS@CKwQ{ho;4P7ghih>k==r{M>?A!E=x zg15u)XI4Bj>M1=-AfkZOdk8TWUW{EAW5{)=R_%L*0^MYz&Cw+5$CT{8C8Sts83tPX zyf7VBnwK~@ijwCu!;0Y#*m-#;dvP6_FRO7 z7VxlLgp)U3R|xq39DmXyHT~=9B?f=}10_YL=|5b>eU*VxqXP%j62I0z?Kb-7iy*D51?&#_H7Z;TLA?)&G}?M6!r)+*zz>L>6B*9cxY-pm`O&lzJ2 zq!c7aqI4`#tEviBkn2wiDZ#Nixmij=$&S|-yq!Q3&ytT^pkyN2&GL;?^}Al2+H{-gEPKFm>P`FyFQ;#3UAY>? zZ*0u5Yxp59b=i%=n9s@JHF-y4>w_34LcE=hxnHpjHj*d2IQaQc+I^RH&olQPBYrvg zO3Ls$k!XEgAjOh)^X?+*d+~fdzlg%WTj@pEO!0iFgfAUoS~bfzc&EL$2oAp#p-{Y! zap0|a7|^4UUKi6#L2sr_@5Fhu5dO7zOP*tUk|Tw1E;qTmBu^mp_N2{@t%q{nk(@_^ zkzSzl!by^%^ZAd{$eF z+U~g@;X01p4DJ)6EBM_9C8d}1yAP1@5O{=RG!x+}PFYM(=>{l&kqjE3WLn$fK!fQu zI?q%3yfof(_yQKA2d~mU=|8+6K757LODP@lzTAs#72+kve~jzan+(ymCmfSrVNH^J-B(#B9C<3KWKT)k{5I+)~< zLKrRd9! zlGiGD(MGf0s#h6~$>W>B z^xCEVRmoiotRa+zkgiK|1HmzR94{lnNuF*ZgmuWp=&(aP{0eDnA>IXPSE1SEcz;QK zhmvua;8;H42uVpl$HoZRF+wz2NXH{>k930IZ5o?UQ23Aop5q9oakD(^ETl`wxLBxg z{H9k43ChSl0#AZTZzPF-H@aDf@#Q*ZTyh7}bAlbK>8p}bT&LkRA$dpeN;8K!Z6ciF zA&ou5n>EJhckAsJZwU;D}=3tbTr8$Nz!L(oLyr%c8ZW< zp`_S<@f|{Wn-F33h5G=VU{4XW6U+W9JFMb&$iN&daZ@?uzGFu>ovEKF!`p$_2Nmd? zrLzi2CV1}}$CwUpD;dp0u6vLRlEkf)4njwOmJi}8-@SlXM&AvuklQBy0=5q;lqK!5iRJO=QVrsbS z=D2jW=4=6Y22Qk8NznmhxB)tXT5tz2 zoJjI{l32rzwdTEuV@8qVFUh5uhzDEyNUCO))93*ITVwG`57 zLK8G?5t3+{#*s`HG#UxE7h-ft_)zeyaZjL*F=nHWg+8}sPf7Bqf;W>5{90P-lU1&; zXqs*hAM|y>T~+VI(8YT7e%s|OI>i}1bO!9`xgJ}&+2?yE{*BfzaX;Rjbe=Nj5t{z= zvhCyh7-~zE9CU(N#zv z2+@^7!DEd;54jiJigms6eI;Xz_lc8)5@i&lht{SO*E79NamY8XQLHh=L5v8a2{PQsdbsqxlnL*j_#I}J_cNqUm*jF$8%Q$H8h`&ho*8mAX2%A zlFgv#ypkM0F~zp<2w>tWw2P8nsprs%@zzRSPs<*U6}+g<-D_`>)BCuNl{X7Rj~DD` z{b*4=rK>@Rb<9x{TR)ZL72Mrhk+uYsNf#+cTlF0j{J1?B3sKCvR|^~PBJB5RQKU+W zR7IOy(KYvC@IV1^toDAF;`Q}!VOODkN%xX-0XM03gLf`hhJBGWJ)1V4u}$x!jRl%~ zCA7HmdSB?g)EXUYDW?Ft{dIAyX%_n_Ywbsc1lN5N>0%d2!MDK!`X&drba~gAp?(+? zp2GzvG`-F8*p+okI$8Mm0YFhHrV0Ubzqm&5`pd?fXGb1)RiK+%zZE)93dN!%x%&y+ zhIi2L5QzizIO1K?`KI6PeXII-8>uVU4f>CWPFxeB@+bO92WhRZ)hQ)rqqkQoun8St zeG(e3(Pmgx9*jsMNp+9V!DK3S1A7Y&HBud-tJMAgGwO%BOABthJq53qI+IaTTuB1; zBc@h(i%f6f?t<>w7zxF@&DZiqmM&6u;`gBs94yAmOWGt$N}?A-y1evLxYChAj0NRl zQDPLuSCORD^>dTW8WXIb#>HR*2;0Z*gc$u2y(v`KIrav`_^AV`#U@VoUnDVcGL+1C zUa=<&wy_VQl)I-XPuxyVk>u^#!!Z7BZNZ&^Xj=Q$Y#}?XY3tCmg&74~@LshQ(W=?$ zv_8$4mx#FWYTBq7I7S;)(=z!D#Ws`ODA6883kYr@yv4Fxp>z?B*$~Fm4cmjQ!I8RW zM~iO)tzvh2e}fWFW%4s}@8z+E>R}Q}tXrXEGo2UX$ZPsXGzs@!#IcE70R8OQ@4bw3 zdV!z!jI|mL!*$G4l^uR0!Zff~Z6Xb%YiK{W(K=5VO*2L{jo(!=`AP`AxV12>C2U8jXyE_6th4gEZG=>qi$BqE|08%>mUODci z;=#S`^Eu@lG9E&jU$@q*BjAYwI?R(Kq9MA!lu=N3$(qnZ+mY;o7j)i;2a#SDJdE!_ z`KY6$_n!{$>#iD8vZEiWC?FB7uGK?wlBAq>Rk=0g19Yzu0_|n_J4r2Glc!R9mz|0i zk@61GqlJ7iUDWF@Jq#GnqonsE^-re!WXv$f5Gt$#H{@sN%I?D^pGgY6{Mxiq>^T_W z03AyYBI8uS-*>_zl5%XWYFFV?x_#bOwzl@6O|c2l{4Pq+Er|!s`boNjWvP$kVBmNe z3I53@e9K#sx-W5mJidpBo7w8hd;U98T z$LtsU8V(n`Cz@@3H{?Hfr}2G4G+78V9o7sfnT6j%wS4S8&5J8}~N{w`(7n9bhYwsm7)_J;iLANC=<>;> zJjZ2VDCpr1z7wj2m0K+-*pX86Iz7_W<(+!j*N9(8@|qf#x}j9g2^1+$!uPRr=U38N z>ZcPV)o1I%;!q-JM~rI1z>;*|uit#Y*FY+WV&HnPn*rQ(#4LKsC7i_C6j zdzc+`sYCIxBl!n`TTjrj^mrkhEp#tJnjl1s;d&)u`7qLxLXK)~+n0+~6~8G&pCHi) zXNlgub#~5F27jYoif9)by=)1oeYx{<-l9TS0jx^KvPcvV2Ly5C>wH}$?TWQ$c4%A4 z);b(>$=+I0v%dyyK(rspejz?a2>4m;Vhty7>=Yrz+;_CCa2d%f1y}3}Pio^trG;&F z+IWE6X9dUNO5c~{j(hO|r@TkTH%Q--L07?hxj1&Jy`k|>__V!36Z;9zXA{>sm-K_( zH|R*jcsa{uIECJXXHB-&Bx5xpw1u)JIn9}w-l3#5zh}&NznJPHjy*3VnC#Uqf`g`| zr%Iaqq0qmz@XM_zy9a}#gkoB|@W~h@9bdHN-Y2Gb@3gj}(Vb7~SiLCUH<1)<0MUMU zgzbEsh4vFBb4iM(nXq1pxZbZh_DfEo3y{;%c5kA8d)-w=H7#~PqUyG{6_VXKMh`bV zLh#VfUnt3o%p6(TgMZ0oI+jcj zX1G-F3bOJBN!d+8d7F^ns!OQdE^3c&j<#s}%0dW^-s|3;BnMQ+C_`v`?w`@2Yv1_yBr-*rj9B7KWv zPk|2vZ_i@ib@+~B-wMT8!CSuCfb=}jVh%k_wz5!AN}_cn*>h4>k_Pr-_uR|kL{1(n zl&2vbBY6Imrz<)%VMGzA<`tS{|1JUxk{l-FLy_oPrArI(GD5bIP^>4|58T>JQiS^V z9KO~zl9G`mcND5^1;=o)&o}NU=_z>bwlq#&RCAjSLXHlra7cQBRF__s0~y$U>HUq8 zHjeurQT_GAW4qcNsnzQ=BNsg^ynzjl3rbymi134b6wf1hv99O+tQ`fQ34lUFP+m37G|R|r^^Mc5)!bxZU#ZpW$4X}OXPR3(R#G#TzqBspDFDsRaukaiEs*fd!`njV zYayndAJC&;Yx9k4)(*W*Qbp}{AW3g+klmzY77Lv@g@OwEgPjuR*KLd|c`vgm<6FK* zhx+S)lWuiAKhYlbep=`8hYLMN3XW70Q-!>EG0AkPW^uF|DmOMW=*n$($j3^`teUMX zf3AOXkfhXwnul3uS^chynL`haM6+SzBoH+CBNYw%x?zPvu^! z;{iXk$T>oR!P0t9=wK~*t1R!m*G7Xhlhd#Yy4Zvf##6c=w?VfcUQeiK<130vjzOA_ z=U%XLBJ3P{jy-KZSxR@1ekQmJ;OI`?l-Z`x4H&7(WWf%mG1&a$sS7cc$2{0h1Y09vZjv@NC<4*qLThQE<1qrtpJ$l`{DdjPyxw3oJ4jN3MUi1g%)o08y!Ix< z7}i5HK`5^hDm+TXZ9;6`OeMWjNp=qzSCMh4 z(CZh=J1EZ(;&IB2_Y{iXa~{@1Mr)8@GlWz4HwtQeyLX!$(;Nrtg5xRlx(RfNph|itbPqhVc~sA=8L_wiqq$zOr}k5cI-x+vW3v%%Xs&8cbwd3vSRF; z*1kC;j^o`_N9&$FFWk<|zP~Byift|B;HJ$CSgT09Ow}Y^K7L(jTKP!*heI>C%hJ32BND;VttL;e2*J4^6(C6Su3=;oY)o zZVw}OVUkM-(UL+;&#+oW7>c^ympOc)BY20^Xj@5M8d~ltDPf{bdN}A8+URV@2Cq(# z)S~Z~Um#TH3GM}Y4W%pR@Vht#bsawqUKKnOCi_y7H|gw5B_q;ncMZ+IR+(I-%OsH$S!X}O*<8i^-JI7jY z&nL7N=GZcVW5;;Rp^ar8w}lidJhu<|R*vmKaxbu_;FwcZDE0|1hygSMAFqc7V=77a z^Lo&FmfR$y+bGvAntC@$HM+gK7ZNis^8Ju7D&IPmBxZN$7beoNb3~DFg(R;}`N~ZK z)z3B0V@fw%rSccwu2Ty42rg5yzD3CrW2~SKMh}AD3F*UvXI|8_jg#ouIXZ_UanJ!D z6uHGgU%56;y&vf-<x8g!Ym`vbf+_u@0_LFGX@WGL{iq%aUAKaJ!oQOj3lI*Io^2MZv)}>Q#`|5WH(y zy_TeMILFXFHFj*h4rqe_3a~CHg&f_~Y%8&$qacD5U`I)w1mlrRuWsm~B5&J; z^LFLDJ%nmEp}V`_Xj}E397Aok_7a*I#CuC}a1GC*$@Wt+-e2fBNN8h-)acmOQG&g? zHFinePx2TcV4>93zy~88D$If|-fFB6Mhlb12=&q6SfNW}U7aK;oGhegBB8kJ6Tm6p zcyOvvo`H0h&>APSPZzr9aO`Ywny~7*f@5uD=X2~lq4OIdx>5*N2<0V0c9BqDE))}x zXd&v0!F6B~xIyR~CwQ7^`zEAoh3<_)eKoj6Xu@pVEUA6B(3vQVyA$bNA>591j}YB2 zIO;}ypQQ3Zl9PpR?h>Nk3gK~~eTT5u1Hw0t3Qhdt-;wdK(0xj%pAcHtApHS6P4YQ# zqR@GWV^4w?1V`P-{wOKD2A(0~RitN;UKg^Lklqz~-T`k2-4BKEwvfLiv_25(_rS|S z`$eQF;8S7JD?;miq5Y9C5PGBjGs(XQ>1RUyC-4dQs}TJS{9WjNEVTY1gs+6^dm(yE zXn!koz6OI-RO)|8s;83tQfPfg@(U0t*Hd!qSW-2!5HNoo*SXz`Gz-TVovUXQ#(%@V z;pwe&!SOe0H~F(E>8Q`GIVE}SmP2oNAhMp1T&#j}ZlPxQqW--umCujVC$#4kGAxC9 zL9mG6!R+#)WH3mk#BEZV1mj{>{HKs<5QTtsoU@_?{5uNvbCC!tu8p~Mos7OJKDF)7;ULm652rsYY82C>b3g@1=70U=Yls5 zb0m&0HsV+tY$8$|870)1TlMb3 zbNdTd94xdC5yAmNYhR&02plLl5=R&F+;O|>BPH2Xt1;E;qlM5fbdN(?TS$% zk#Q+W48!*M;Bu0u3iUbQJaD1Vy$tCRa51<-2v-Zm1d@}4#-6-RQs)LCx{8dO!1Y4w zTA?$MzHeAv_^CI!Aa|QvDQoo{SfT_H!hk1uuaY zz|-J$p?X6IFALcpIrb*WSCQTl;@6N~5wf?1);lCWMEa}XiICa59D5&pEOb9W`nyn0 zLHZoL2mU5FI!EghNt6B|B>y5~P>=rY8>H`q{9EC>Ka>0ldme?}!cnb0#cxw8o&6|$cQHC`O|1L~QO<`ly0LL0ZC zr*Wopkb$G8o*Upwtm!Wl3khjXa;VVhLt0p94MX~=5aALi=O?+O5SHcG2%)<;#}*Ni zd64iLI66nZqNK0{$>oK3WudczkS`;2@h#PB2%a=ruS$|0OKUNtLWouuw)&Znts*#1 zN4=V)dQE^o;tg!#`WHgj7_3L~3%#&vBcw`jU=B~dsY{OiQV5#}BQ_QCp9=^4N{Hwr z)$4%uh1RcyoIX?CCAqoK-Hhb9x_rO|Qg0_jCnGU1;vgK+osyC}ICihltkZm4k|S(* zY^?Q}lF{3OC$%QiO{d&JLVUwteUp&9=VB+RFmTw`XC6ayrBPDfr5bQZFapaZz3DrJG^z*!t%=J|Jd?meS zyWeA!Tfr0MJ(Aq_^R7K!`8Rw`+S;I#3%;uNl}agP+uo>UllwKQT$1gL&oRVOUl0|Nx#ekGM&wJ8x_{I&EyJe z&T|&+t@t|AjoWGL)-OiyrYOdoy6+$jtrH}54ip^brT##YyYT6!k_Ms~*d^r&NY!Hc zamP(54wKY5S%_ZH$wMeUfr3=ytDnl}cDN7^vU)LwCp~%zhPQQ!{oxnqyrqO{5g}g# zX-y&F)8>rhI8;WywWNZ#>&0HpIMZ@G5kKB{i894^z@>&VtJU?YU>!dd_=>j_^309dyTy;m5g3 zak=1K!0pHEaFbIP)ulY>=%F4z%v5f?kBd64izkoRDd9cGn}Hxs@%j(r)tz**-3}h! zbL`agSY6&eg|n{YhK|*Lcn$Bw%Xk=j4Ibu{X9ULw_O#U&V|@2da|v|+soa>+CA+96 z4d%&b5*$&poKccTDC;4T>e&U)mMi9v@s?oxbF+zH@5FZOp5Zdm;j+YdjB6#{rhc4|vZ#F%f^G*}8bA@n@5T7qN zN@R8g$%}-}1i{_cX2Oemu9I{ux?X4kMAA$3*5diyNOub9eL{R2(qv(S$A#z)q3;2b zbTZ>dgzzwULP+UuM($)@!!dfA89hzUtf@~V`MeN41n63}=v789fj5NeZ6T)f7)=pU z`i&JG#h9L6B3d+l5&pu9fP%_;X>?4F-1$Uvs!IFwmLbNB?U+CXm7;}KoI#j6WGew69-6I5tD~$Td zI7V;}s5M?v>ja^T22M{C!dRiCqtiZJ=$+c&xHl2ehbZV$3d%TT3-oYO4T~BCXfTtMX5eB%8?OxhdhsTSt zxHAmv7RI*C?g)!Jo@QdVu&!G+tg)mcENQQY%`sx44b`AI5Q+C>sBG^Jn7a2Ww=r;S z>SE=#FmRiAX%F$g7=fkDT4qYr*tP{`ZOdk@t=#GL2sLJHJYd$^dc}xoW0g8ch=XsH zJv=W)g7-}Hz@{xw4{UY^T6-j)m)bZX>63jdnsyccug5UFwyN)Jo#*vY`Shs66x~T5 z!pi{KGn3@U?*m?D*Z;ZK z0{<}tj04TBA=#R<*_iI4q+`UV5Aa?d5(d_)HfuPr3L={Pio0@zVh0NFbY$?jf0iOi1S=1A}>BL9*8cIzC+3jSQZ*e}dqtj@6_3A@BIzgZWX>`TE?+_jv}z7SQgtNR@fHr36r-9w@|d7_TqR>FXH0J*$I6XvG zDGV>SWqovr+&gg@@2A1=f}{8oU7*-r=k;E|kMq3sWFf|oi!s5x7TI?Y_$UECgLjSc z3bOcrQ1&L!mP}{=zq)pDHIjX(gOG5wsWlQqf{3B2)j@=$ic^TOwJCORtf-7tT&JXYt-69wj`q+fQqjxvco9>Df`ab( z)#1zZxL&L<^;zBC3vIeCgexc^GS@|qvK>g>g;W%@bWb7BwAizBN^SH4feHnvd6-mm6<5ye6G`HGl8f|5+apWw4y06>U6k9iWzooTbb*AzHFT6NYY)z$VrM-PkJhn!qflQhc!9vsR7qoQ6XNy6 z%@DkYqq{)5B!)!TkO4&&7a9fRa+?WgavKKe$xnoE3esdDyFjp=rn!nZ+C;BR zZwIIkkUFnQ-RMsw#XjYa0g(qagSDH@pNzlpkZtqead+LBf(4HOO#Zbd#!kRF?{y0;_9nNcu=VRODG>edO{fc zq7Z%~c-eINCrR1sLh+8!U>olLPWa$y{sogVX0AAiZz9H*(It=eUh#{;SJ$< zlo&6?{MMF|nwO^w&BwxRp|FNYJ2^7pGM2>Wvo!8^mK1OFW8GrW;K2u1&jHG9typE8rSGt z{keodFO;(EC<#J?9@Z=(biOQf(fKnvQg21H=ecGH1${njvm^-#SPF~=%Lw%l(sF{` zKQt>7r2Vr8nr0P(YYWBlLXR%ByAHu|U|pfvROqjVY>7W=F%Z;r_@i2Fosx3)E{Xph#hI!~8XG>qNLh3pjt?d|Oyn!}%*EkxQxuhEPz zDmA=A)ulOfYf;}u7Fxpk9>M?R}}2NDcnPgYr{|%&dg<>tC8Y2X(lF9mlRi-$B1hkBF zcOgGYNRAfbB!Wi@CHlr(ClN<$*1JUTdX;3lr0QD1CtDAoh!nRA@mAtcKfKtZgY_-E zA`HGPjCw{$|0Lue3SKZi8hzX*E^k$<#}V9A@FH@Xki1{F*_s3lJ<0JxVRZ{zOAjr> zGr@P=M=C95xL3&T5qhW^&0ho`C*WzyWMDu~@I|5b6~TV8lEo$2vwpP(aSZjdi9$g; zIed^%yTPMLvsdLFZCHJ@(4+bCMt3`V_X5Iq-N^iOPThbu!aIGu6|80AR{YJz>-Cl_@-)YnP|l~628 zKDx2Ur|>?Oh91X${6{>A<$MKq9oFD;+IzdpjI`rEgF8I|iI%$EYIVA#>KP%@vL>{r zIrfs9Xi7)C59BnZ8Q;T4ZRZO~YTZfDfF`t^Ic;Y`v+2!V1ubUlu8Zc--q^kHGok(S z$(r}_-RvQ!u%O5-Xq?j zN7Jm^_sPrXyY>m4(}WLD#shDtxl!C9j$YmbqS&xL==LY)@;EYh0l2? zrY?A1BVH@1+D(68u`_=qAGz8EX*}3f=rF*FKM)d{IlBsXGiL`1ox>DYA0qTA5f!ao zLaXO}u92p%HMbolsXSgtDJp%2P<8|x&XhFB=*hcl;`x#~RER0)2X@QST%b5R%*n2h zG&Ei4&K^RA^OeuX#3!f=DeY;)5GrK|6>bzFrEZW?X9Z&r#lhvTcL#BI3&nNdE`s+7 z38N>sz;9iq+h>fK>|d&Xp@M^tC|J)D0%f)rjEFybvQp|n>N^!#VKb4@#LR}YyR^M5Eu=@ZohrC$G`C8MKN1>x1G^M2=$P9>#;=l8 zP+ff7c%++Xd+bLgd2~`zg=|5a@sgxI0~0S_@o>b>#d~w;nIqN8-ATkClzaiqE7&Az z!&|eGf?<6jQvF*0L#q+oKuG9-e75YA?RBdcw^Pt(!3O%Hk{W8C&>cFZ1SKJ(!low) zc1KwqCCOH+F^n9#lL;P4DwVjQQ#CADiI=;RVQxiAEl7P4goTQBXb+$$x#1KBPrtL2qi zuOoQ%#OEx+n<_3xlc{L{0zG1&71*Q{yi?hJDr*JQoTJvh5-2l z!CNMJbford?%m7H4tnkGA!^!Cp-#=L&(I#NMHYXbRFx2~zj(q}o@+0V9*18Fco_{fa83Q6U*!pM;sUV5KnnTRI~ zQ?WOOD8iTZ$COJ7UY8rNQ`gun?BK>{ z*5xSWHWd%vEh%SS(#{)mCLP=3Ht6^YH1iHq5Y4>&fv1C;1zRC9s&kKOYBkRWzlN&T zdigIT`ScQ7Ys&)^O!gAu!GitClvJxgJ@Rgy(bS&qW5nGfxRbNh{^sWu{5G9UPQ|ew ze-E#_%$&s_6dj~RNPSMIsWUazrE+yyLXwvb)rll`fjy?#>^R-~z&$bYIlqJSgV}mQ zLE&G8nYap_(Eby>K`5cfrxf(;R1zrY{e6WF1-(NrS#B#dy9+sGJUJ9l66c}lWj6_S z3g4gITtA6k;!QMO{}Ql2H?=T??rrZT;aH?Uf>(q=7DN^zqNy;OC#~{drdaMvP77Au$ zi}fXSHY9EXaG($kUz1+#&y9Z8zUc8;z zyOYdM36Xx|vup+3Dx)6t=&ka@g|@oT*<@4~+ofDd+D?SJ;Mu;M_ZO%EJ{v1g z1FQtLLnB^iSQ&hc1WJ3PwEM`aiXwk+DY$LVDdXO`R_&uFb^Bb>K3kFN&@_i(Vel5N zptZH4e)%+&#NHW-^HI@(rZl}!!LfIekH*rjL3)GA*KQ-5OHwhnV3$$dc_euUS-YXE zqo6mB#d#%V*k9}&-z&=OS}N@-&dbW|T&OcdK5R05Y%HZ3agM{(`!3*2$(98?lyq(M5`}+qfwKzl=b-2)(h%`xvM}lL(6d^fI@D}xWk|eiq zy;CLiG1KR#3n_i$=wAr7+NWnq^0K#rb#8X0kkfM}7Yq4$V5*Q_gmksgJx2%(@#1vB zE8gsU!JTV$h2rY#Nw`kvU4wK3U=>_)xiI971TTuqZ@j|xQP!* zO7AD`ULn6ns2&zPH68wo;FTmiCL~V?okxWJ@j{$Q-0uLbeCM}7P_>yw+*3mNwlMk`q}K#5nakgiRR3AXo)tQO65`*4SAClr{#G!P=e+%XNg1u0rA<>i0B?PAJd~k7hK1nqbD1)DH+5D2caVp2C zm@O!H&s2xr%I*fdNhy__f6)MLIMuyi1r5&CzpuOCT*R)XND;6ucZE ztSHF~@AB1=zAku)!pOqA!kyu0CAdelf39j(1&fu1=hhI?wS>{D2{wP8J|L;WuHq$l z`FbQUNUG4Zk`0AoW8$!oW~^eEx|vY*fS2I0*uyLGQq~%D8ln6ysapzG)$&SGvaMjl zsu$z=7~+(O!S!g%zEaxyqZ7(GR>hX}9S zOO7CToZvMMBL@gqrzvjW6d{};v`$CPk(8e;cwJv{uB851g8g2GX_CA}sW=~r6@H%8 zZ>~l{iLs}%&b5*+Q-8yglKOuX^2fk4f>kT;D@tBe zFgz=Co)fBYqv|gQR?J zA^QT7wZr)(rJr&ujQHt7f{(|r6PVt@#4R9rgHW-Aqy#&EFGwmaT;THiB0h z`m|ghlv};6IQx=s7aATmr!r$_@R|v4ov{TxTSDz$d#GWm)ReK1he6#hN=oL|LwXgV z4?65JvMEc&^%mD&I70igy!tFL+w;LENq5nmP1Gdl5{}rIV6qpEb=&k{SxqwiKF) zl#)IrqVbo;GSpdoY;0<>qgt;k&F;|qs~H-3<5c~Eq{<(80ZCTlYd)TJ zhTzs4&BGsWJ`aO{S9^KU;}F4ixhIkrJ$i9pn{cM$^4XVpZKFM~wpLwVal!w8neW$T zURH7a-Sl#DK3-0T=JjE%gZe`h7nUZD_R4zzeLzAoQ3*qok^!#GPSlI=xU9Ndk`ETO z7tnlZ<@2c5TROalqa4pocM|O4vzj0&-$JN(0&kx1s;deG(#Jn}pMzDu4mw zW^{qxz?snIcpA{hCV58Nt~>3aGxe);8^!}wSQ7dtNGkmP=p2%Hb<={U${6SMW(Xeq z3{B!$X!=SFI3?HmGp0Oqn5l$(DP@j+NXATU!^8K@*Hq98yvN+EySVA|DYF%QPc}`d z6>q~{pxo{BRv?c16{`yE`NZ@+)$G2fGrRAp=zF?!I~CoI*KJnxIDsC=#@5a+C3)Y| zh?lg~BQ%C&k#SFlZl|Ez>Co+@)QTQGPC;jr7J^rbSy9idnIEV)Yr_TYMs*Td=!LAL zS}W~QsO>(@OCtikP=R*X_Cjxv`A-Dj6skG&HhjEmH%dxI3qCW)JyW@og7&7Cj+1oM zrlis{wK~Xm^!~Dg05gxCbaaXBQ*x|Uv`d?oQ!uC7@oM!!S47(JF}vzkZn(XGCTC8` z)2MNEUL8YyZ=A9!o=`PfFKOEv3-6g^N>7Azu z%9x8(c$j=l^@RC^xSHVA1U_oa24YXDcmmY(8twdk$z$vc=HjOFar-ZV1%=>_bD$7j7veZ>@Vby*EL5YE zFD@$NdkBGsEUcj$_^g0xP{CwjQin)bjUdnBGYM^HsODAX0S3kiWylNp0$sU1vE@@G z1sXDYn(r>j4YuS4PbssTQrqwn=4%taVB}MH+iQJ+q(0qo?-kv}^PJtAB-O_V`7{zP z6uK|+8?MC6g8J*1Zkz5=uy|Uq$9J!ds=E5|oMlk~>s!MEWzt}k@nJ`+QG!ydw@Us9)f7$^&XP!T-PSne3pV&0i5t)*RAlzv+|SOFYPTiRM)BsQ4dSSlxST7az0{M33=o z%lO2fcQaj)pDcvygdx|IFY}X&@k6JPx{Tn%P?I+mmow_M1M`Gd z-UndBOObxWW!8|ni;Hr_E6FI?KF>AZR#HAy`GzQZKA~)Y%K|?XxnEuj&g>hsl3y&- z~XwRypet0%Ap_1gsf+I*hLuls~eo)%}Zt?W!v`sx(#kr;78I zXxERr+|U(JsYP^aYcj3tsmeX-6U74^a3M z`sp&~^K7rbV=7IM&$;!OeWTwH1jDopj>~DEEqUzMHbG?Z0C3U-Qja6^+=5+qy1R>X zcOLA`L*}kaJGTF1Z=qO{FG#|i4-1wC7}b~Ki~Q=ti6 zQNEWhOXz^wj{ZJL9g39w%(@lLPgTCeZ6Zyn&vHqAth)>|P;3*>!oAbN^IKNc!UX-K zN73VGH$0zGO(o7+#^Sm`hjDVw5V_b?@Hs0P1LOEpA!Rt6Gye5qPVIRUcPW^-y?=!S z#=0XXKvWE5eb9r4ugMz|vr(Ah+H&R-xi*M>cX6w6Z>uPp5$AWtgGpeJOg z>~R91&nt(OFoZ(Yd{dbdDpUDGAyNkumy%yd3TJ|g0qT+cwAq_l?rJrjU!w@*bl|pD z*pHXBrR+8mW(e^?VfZ0}j{r1^fCiO3FZf_buf(P*}RlV zI}@&U<63J4yc~DE^(SQhnw~UWL&$rA_0#sqmWc`u@E64^06KNJ2k8+ZOLaec+Vi4@ z_F$DS5%&$jz7A}=iCYrfLkPnFJ56~U(z!xxy#Z}g@iF-r zCFHKPeM#931m6K45v146{0EM782(dH2)sN!w;}#C5&o9!vvw3E)_ zeLMNa3bqF#-o=lDv6- zCV~&8xA#XIzw@(5ptO6TQtNtyM$6M(Nv+>4HWNl+^Qf&rexGN#O2`-1lX_iR{vAo} z0p(ORn+|;JKuMcjBtp5e5K4Y+XGsbAfltd-jIMw_#?SR*24e^h9~y=a{e$_n{lTF^ z;?H=vBri|0Epp7s1b@t(4+Llh-XEIJ9%jVLxb||vi{WiF308m@T)1w1b~Rb97s{DJ z<*ws#Nx28)3^V*a+VSOkB)lcme;2A>lKKxYFMrGmLUgyYHbMHHra;;hd=D_{h?^tz z!H(ejU|S(Dm`^GE#jeCLtS``Ryvi}`EXjIKL5Eh;p%p(6!am>taFpPax5Lqr>PbR# zq+mzC^=YI|5p1sulSw^;RC>hZ5~NF!C}Cd8pZtvAwSbPLf4k7Qzr0ye`j8N>6aqt| zd?vv^2nl5}JS}9e2!k&Rquvng=RJHVsrWz$pAwg-AY^k2$rr#}Lg$M}3kmIFJaj3K ztx}Ze+|_R^S-u8V0jmohbhR70|IVF9D=vIX$iGP{N^e84bA^bT6ITOw`P)beTa!8- z>_BiQB=l471Gj!!x{CjV1lRaOC3%!zA1f)GOv2IN6d^wk=?rioV4Rnn4K4!Hz{TJS z@GEew;8P(y9`p=bdV}J!>qxyt2s4oG1J-xZK?WZphz??_MnZM&GB!wmN8D53x4@d) z(~|5&C;OwM;&~FD5q$c1@)E&W-~;fUP=6#?@%K)%K8?O7xNSuB+;%e;)nHB`p9g6a z_<|5R!XOGzyXbKdqy+@Kvb3w4aty(*lCY`}#tIcWQbJqY$LM6QlL;!59ZqKBB-xu} zfq6DmLhac@+N*L4A=wiAfRW(`g@>>sh6Nb6fzsbVjHZWA^FRErFU=p<(5clkj zhq-+c_7XY=3!ZI`Q;^)DO+vbh)CYtHr6WED=;S&x1t0dzqyFut zufr?(1h~mS&u&M(w7~iCf;ZELa|kY^dSu@nUb>bYq@X7r>e>BKbv9YtDgBa4cZcpA z{{ZIW2BQUAE9w;_dHI0%9{Qw%L1*z5pYue-Pqqn2 zzNu43^7+^Ne8b$z&*JxDwCW7k`f;7l*E)0iC(Qn{M(*sNEd03t@dN~Y17GVG;S*r} znv6DqYyG&@>_5;6Lj!#M*{LHBl+TW9ub3Tdzs&5%@So*dja=c!9XaUBAJ19*HvFef z=6)j|*-tw1<9;CL^Q|V5dGzc*b%>x7{F5#|zSh6tci{UCA41h2bIP@jYafj`-(?(< zf6c-68(BvuVHo%_ujzFo2@5TeIrCJt_ zqF`Poc&Hz5RYE*fS-crCxrWqRg$ya2s?_WdU6vllwT$>WSm?d+JFY=yznpu?OrzlQ zqkMjzxA5gOk)BxcxvE~w?bFEoM+c9n{;bPVYg&8q8y?4b};oD5?o$R(hs%j zzDFW^@!)p}9gjNPAiJemOmS@+i)yNi6y)X9uknzKL^_{J@=3d1WgD!Lj8#Hh0bDO6 zZwUDhlrPy4@Dd}oa8DSurg4nq)@_r0$by2KU=U9*jmIefJ=WuZ{6Hj>+2lBGkBu?$ z&2tE1-o{%1 zWI0Ump}5J3NY-Pm!k$Uc+Uup{y9!(<#QTw4&+kF9b=rF8a|(KCQ~nD1W|8_jaj$~6 z1h1~Njv4+%9Mg{hMKk#)K{U&R`Hy5_!IK~f1}1N!8S!x7>5z6DzY3`+ke;sQ4skDmkA!Gd@@+}YzlcMh z^fpVoe(AicU_J*0_@9!>d67m@+UG+;@9bFbEQni`xHSdud=9iUo&>QmB%qK+54q7w z?Q1;zL{dIXa0)mY908uxuN6m1vTrY+*Bfc-3!1}(Syk^QO3+zt$@iR1;s*IXQkPJ{ zw9Uh2w0yP-YZrI+?T|#Sor}yt@G((|b=wXJC~}_VNfts{g19AxYAK{4A&w@9o!Wb9 zyw}pFOL=2;g63=A(K+gG!lX~SAem8ha~pctTIPL~VF%)N723rL=)lPhU;@|^(2XUi z#CD?+nI`g1Gk3ik(isj|ExQ1T;L5G46Q^8{8atO3~n zsC(@V;%EHuAf5SwWi}pXP_$ztKn!Jfygkc6V;~bX{E*Gr>D#DjO=S zJ@86;lSsg75YHBJ>*H5Ta{Jfr=6I0QmxTeEKCf-GQ@rM5f}a9gsCc`B9*NM9`TP_w z1j=#+?U=W1rQA0Ch%6p*A1*0)czu?n=n?akT=5>D-S8T(B8{V0?FX&IO{kcMC@Wg{P(Bwq@#(RvODmqP{ z*jkKH=7ulW*q&qi%X_>7{`}}a^)o$lSb!@I5(0x!pTT|kUdrNy6Ja?rQw=f-y1khD zCs*@`<;RNaZ46uz(H?p{M%OCDMcmZt0;RLzn=gI8vNU}2KHsuOU*>Hs-9JfczXFDj z?q0$?ylkJEGW}UeJq!Wf*jms&dj)%QgKnDMEEKea4Sz!8hHQIDpHX5*Ptvbd_wu{E z?A{*2XMx}nf_F&QCHJGQ_TCVz^uB|ll%uP7ADTB34gOOP>AC3UajyLxxKvpVLFKGa zaazseeZ>`{lsQ?3KM*5%wv^x#%KA3Y6{Py}tS2d7pDcTUb4l=fvDxc#1$}^FLLcwt zY{l;+wWrn7J9qh@2Q4EhT|+3w3HEfBZA2Vz(#5tnRZ_c`;u1;6*wzyDq{&)Bcwcb^ zeN;73u(hI~>u7c-l@6mjR`4!+yVtUN6mOF6%%g-JhJ`I@cfEbLmq==u<{kQ~;DXe3 z$zEQ;K1Dg*2Z?ENFNfaOP0Mb&%ZUHKWM`fQjn;~*Ro!Ao;?Cl-!z9H+z_7om5!5GD!(M-oT-?7e;63lz++5h8t0 zL^aKRE!a0-aSw4X3e{7@p_O*gO1pm((iemd4OH;}!IYaWEc9rpYYKWAg_6>KJY8V1 zn$YVB-je0Rp}bJ3dywKH`eb2!@+g86g?7qiilpioVf6VVOe2A+;g#Q>HntX7p+!a- zo=C$JKPJoDLNDRVpcrQ8gg!XOI$>lgs#uZKWrY+aFnmMs?v;K|Qq>m{RKKomf=@^q z#2o1LYt?6xB2~=?-*?|o@JF;}*2t=p6r4f3wwY%rDe&~~ z?4wj>xAL1V81gt&7tSYd$fu9l0rHfEF)M^vil`#Mk)2Tq)VtaBDE*< zw-WN%s!%yg!R`*k(Wv?q79X+P`;mg~w+eJ0JC;ak0KByBo!uqn;V&3V!yu1r2^RR23j)UwtS^i~RXYoT(- zyo)5SnDI$#1?o|8sE||3N@|(w)+lOOeKf!#;$zARj5^IVLVBOzTIO@QvNsis{}yso zlK8IREoipJXDjR7dxdVZxumd(;A5C_DpRwSP#h<887Y;h0k-1U<&68SdOrOz9XhWb zftv&bX()q2QjWvD!n8$`28;i9-CT(3~u^iz6Q(h$+Wg_xn*&XD;IC`0Vwd zTv}51YhYcWTn|uF?4B_#CDqiAu(QyeUHH*-|36#H4E`9~8J1R@=kn8+koM3OtvwM# zPqwWPQ2hpu5ParypWZLo7@&+LXDOjNlhiW+#+pD+XFE-pDk+~1=;YkLc}1BGQTdCy zL3DSA^|$r0@S5V9i-hzZE_+I_w5$$`xZAHUoB{dAgy{x-+j7kaf*1=|W6Yj(7?O4oX;?@ZfU%#41 z@PM~nz336{mlRicNV~EmdkIR`As>yj7b(^ZT6>IF2X_>_^46+uF@Ye8*K;7QufH-~ zQBqn;a)QTs$(f1^7#i&qxp`f|&gDY$sp7l|DKGd6TLYRt+nTctbeA6QFI$0pzY*;9 zd58{ZU^((#D=DK2)dS!Uf``KcDA9>;&l|Fny>=Ph8T`i5x@p)QoGRoqlqE;~b=|M5 zHtwez^ia^kG+p5}cV5usOyA? zA?*pp#>9P_xXqBZMcNXHm+gsquhp1H|u6Ug+uL}0aY>V8IjQFgA`CNr`PF`Z<8!ak$ zd$HB6jBg)?{F*WCL-O0&0f}#COyn2yO$3zQ^=MRY}D}>JM2r4Pd1T$aG)I^ z5Vs0X^}M8l7TDg&8_HUDJHYq#F3DT>R?sJQd1ZR*KhXn9s!(@FaDZTsEY1FsdWQ

%Yv8p*DnyHnd>nIORtoaz9K21r;D#ivQ=Z&RSMdHWrHm(Jfz@fe?y`l zv>WvH00;C*`$F%0pw#kb1g&1u*0qfhil(O^yss$EMU|xc^hxdB{N&MHL*vnWQK|X7 zLhn;u*6B!!qlAX`B}O4EL~uc*E?8JdF|zfBgmyOL%Sg0C>9Rr?E%-FIVo6Ef7*Z`G z$vYV;nyPFi!9H~ojEY{)=6z2-b)mnC;ySAeeOj~P8-km(nkKDFzuz4vSg~nxNj`kt zZJkeBFKO`d^++g$NYiIiNuT!5r@l2-624CsTEZH2p&2ivI|J&(589?p$6V!hMrzQQ;K?bo28`}BF+_BP{= zbkj{0m(rVNn*qAi^4mg>Ni#d@PPdd~A2Xgg^Xjo4gR|D347zOxeaQW9y`!XN525~n z(BD&Nw-rnvj!~OW2z}}hN!bBHI8gA>*yTaQ{ZuG1pY*YNyDN{3^SZ-AaTJ&+JT*zM zU8O&J#AlQ3D0lgE{$4(xp``_;^0L!}p;H7ePHWG&K1V^jjq$qX>P!XWSwi;$p~6nn zOe1)%;Pb2_dPKv3vVXl0ZUk2n^!O6BB3>d4UnexT3&pKScL?>(Lc9yi6v}&q>Rl(wRi{P`X5S)pMZ~q<{v`E z2)8}W?O&48k4a#_Ym1WAWV>(ifzC}B&=1WmG+z)>l$~ULq5hOBusqd+LNlMxTS!P3 zCb$3+N>Q_f5HLx39eg$dqVaiLsM7&)W4w~~UrRfP1*LVM!!T4Z6! zQ+!MC32zZ~tG2qeHqtoZYds z@N)(0eMvY~=u8%R46tnRZ#>GnML{21v-w04engg=k!}~fOQ<=J;8oyZ;vN)|2LPJ> z=-&vv7lrCkq5mhr=i&C=A?|m=`Y#DyNq)fFl8S!|>A!?_rr~Hw{m+Dajyd&dcPHUp zq4xy^d;gT==~i1II`ffbCBU3(T%RnMBJ6oH$1;(xDU=%s36_bR0a1gYqS;XJ)QtV# zANGdsyvuipTUE$6L)u9Q3|7*=s@Klghwg1RlW;3>HzJ)T^d})5DR>NPm%7az#4+pZd4pdt zU~3)_JpbE86)zqX>U)F|rM&ly&@7>bJKTr#2ywp_?2gyQkk3%XLn`#I6&gmz&HO_4 z0@4?SZWOAy2+mD?TR>7B2xdaw0gDj)vfvrxW+6%4uYkpfV|ZOJAykRr!#(Py2#zLU zIpUTPY$k12^sG$WDx`i*u=7iw=FzO9V2^QQH4X{;P`;^PBax?~cED29>j^&L!(M#5 zTPf%xJ&H#q4P$4mw-(YZ1n*<^S%YyGg1ZXU4y5i(knw(VgW!c(&GrP}5Gn?(#RP(T z3VAJLrwSD&DW8;`>?f(qFzDn9gviUbNx;*=!>Gh|ZDD1ic$OY^F~zl;7`W_JaMF*3 zjL}KPm?S$+@aDye;fSqKfkA`KPbsQ>dar}ZH|L>Ff zz+plMO{;UhP^0H`P*_Tys*4WNc|hp@n>bX6Y5^67l0L88PiPmO(8_x~$i#W|8#Rq! zhZe4+U7L^grJ~6QGyo-azof?J)c7uyy}zcO%C**>p$ckVx}DJar>08!RQ7@j)}>ly zPwKMEDZ4cVE-onq%9R~H7ktLfZUp%}Dc{4^g{eF1vSb4I9&y)8s(&V_%=Ncr>j@1C zt{2XFH@@{D+bHZ0uRBJ6YE1{;&~3L%Usljv8k)m=523%kZ~)IYbgb@dd*^hXw50gB z96WiGB;V9QkC;bORN5uiv&+lmqZH@Vl}YVUEWEtIMxA!uoG&B6Mw20eUS{As`*cSa z!X?SF8L5jP70U`42_{*spxW0!Jt~asxlO|Blu<6W1=wO>-nKbgTr3tWM@Nz`9@@*hmN)2zKzA zZ%D8ZY_<;HA^2@lHx=^lflUZ*j?@Q@kT86WI}qFve4n^2!A?SFYayE;gk1%@qVNWs z&Njp`hF$uHBg&ZMdGe8^G=07I32w?m(I$4BaXu_Yr&$+${Jw%%O)Q z74!kgJwoexjbUzhjJV^4d?vvs!0!n@2N?C{e*nJ~yoV^fB5B}d@H}yE2>I(mHH+X= zf~VfXpCrYHF7<@{Q;c)d2!TwqEMAapHLCEJ4VoLCf z1R4JZhQ1*q$oMy32rvk?-yS<(^={AjB@%waO|jr6Ltrt%dm6&Bq%I+p%OlYeCS#G7 z62jMzT zLE2boSBWz8&3k~B%ae{i>pa9l^-A}K|e?sB74t#yC(He1;dd-K1{;T zkd76+J3a0!sbc6Geon#(fI)C^G7{ZHWDuM)9L{Htgu{6R&j6=`3jt%|a5lJzAY zEQ05P3kXg_VsxBe46Xo|f~&!=1n=p}uae{gL+#!p+(3|Va=1;%Zvl6L+lBI0!ERH% z%{;%4ga^Qb!oW-++%Hsj3)w?LyZ7tAB((>qKaTV$3BN;n3W<@mPb)|slhhui{ycHd z2=70UOJ{w^eM2~+17Q09LT z_ZPvNg}raAok2)QO@(|w=*@-XS%rC!Mu8wC9bsTWf{ehuuP6?Zun2LCyTg}|78X42 zPL`15r63-6+Z|w7UUA77p<=Y1e-*4s+*l#5DEN5wusR9oo%z>^TN8<4c)l)JL+~lC zv5@4=XdZzlYb)3~8XQNyjlp-p_rOMimv?>69coR&`XrP>vIW7-gn>g^%V z4AMJ&!Lumw7rfJL6s&(v76$2d>0&2)$;}Fuw+r61>y^u`a~Fo!_Uq!6%iic-j+#@q zVuTwQ^?D4OOhiIsv^SS<7t&)wy#%cps*wGu+Do4gGHQK%%&n(t*Zw}IEbS4?iKK+F zn#X0y*O3^U&TKBl7{K+)4P!9?Q?qja3!Fl zk972rjy{=*M1St?J$+hIpaT!H03CRE4bXw7blZ`BI?lyYjS}p)qSGO`xX>9Q&K)UV z(EVjxQBs#)GFb_HRS5KhUR2Zi3|UpdVr^0xc@-NXZ7P)C5r*jfif;>X10kooYyGus zDXFSS*aqw%Bs&RV7o;5leVNamw{P&AzHESgt9A2oC=wl2w!UB|sQDyGVWKc}0&(uG zj*yfeEtK?DHq^E*Cg^cm1MInyyjm_^Ey*qd3p$qMa>3jAGdh+?$6`Mn-jNaRAxQJz zw*0?GqLt5Sy;IufA=+mfLcOK8cw50pTkICtEA1jxBYaUv<`XL}dCCX_=$x{Tm0 z7`A9uw5<7RLff*^s3x?h3GJzU1EsX5ITp>p(6`JYCoB3-;C1jldh02DtJKTAx~UY z!E6nozm{OHu|CtHT2Da_OzJI>#tU&LqzPbqA-GASvU?)UJ96#HH%?UCBnAjIRku4? zNKpLa`9gzM@2ZWjoursHE?L^RglH&Y=HzwJY zO#LkdGwPPB+SUV-nso*H?Dw+J;=2lZn^B*7>wlVFRA>gV3p3^@hcQL zPic5@PtEN!Kd$Y)ghT?5Tfms0SCH59I zvezi0lGw!GI_eozuwIJKP06#D|oG zM-)u|NWx2kCvuZlCFRcu1$EG7()K(NDq`{g3I7z@5$Rm|+<7XL)WL*0=yj!GK}kLY z#KX<@tdHf0i$c4?lt1)j8-;89@nJrd{wb9%pYd*D8A zcS&JCf(Hqm9~1lmp#COwXuYF^Y>MD1$&?PQnkFPu1uyV+CH7js21PvHwrIHYWpY}g$9G}pjA^EfR6Q3 zRBU_4ilyRwZo%*@#g*6Vhe{jwK9-cYVy{Nw`U&NVl5H!A&uAH-FqC}mIJYvpnG45r z=jDVBa~(EeK1Gk%-CtQcD8lXj-`5oMlAAGaN%E!$FRCeQSf%lZ9l=Vud&Hc^BhXrS zQ-uA<#bp)DM-#WCkkDVom4)_%s5J@FWQ5g;quuDxWHe)hns%d)nw-xs^k_0Fnv8tB z5NQRh{`RQ*)kI;CdR|e_E4oT+x#`)Ge0*T${_;8ni`#_ya$yj)w(pw!xTLoJQg!3o zg1b*wSnuX-_oUNv7S!5gP)J9*&xIAVxyWlKLPtUG@NJLjSyI73{q-6LJKB%*t0gtr zwbs?N>uSm;Yu#j18;4yR50T{KXew%BXGGiFnaq=gaEvf;hESXi&KDvzw7FEMt|v&n zv?}S%{$VBw_Yg;wY==wFO6pJ>Js%(FW_^f?r`_9b_8+8D8$Ipr(@?x`%tNijqj!|b z6s6KtvZ6|6^t#q3eR8=M`?|h)Z=apXMHIuxV7a2IdEU8rM^futmwJ?;;k8>==}5h7 zaFJATUh?Y6$%J~;Wr8uAU33;*f4Y9YOx)|2*P zlEMl?q}%pkZ231OC2NCqg=UMM`#aO`yRnf2yTwl2Mxg;kah%APA{ST ze{*=X7kAlPXuV$Ti?ojr_9x-T!r%b}8SBQQgw_+5JNly)Y$k!93-t-4o(84}pL2(G z3c-^}_yxE`_)ni$S1B(3jMQtv6+&}8(hcBtg0~3y9Rz0xcEH`-NAPB0WW*d9F~^66 zcG&!cr2Kd=lZ4+P{a#3(1AhR&75>w+*7L-@LF((^HG+Q;ig&@^h&-vo|gex*7e9kM^qU0MA(k~+|29_1KiCapD zUqf02EF*MR7qXQEZ-2@D&TouXFsvhZkluV#Qk4@NC)he2JVz2UR#kco;b$w9*HEoNNOE??MuSmU{9f#ApEDluLBjAA1bs?zkVjk z=Xu%w9B5wS&xt!h$WKN(8Zfr^s;lAi2%Z5h1T?;_OR#g0E&|iQ#o!9?D{!q){8F$X z+2egX2kYISxa=CT+y-tDQtMK85}X0<1GftC0i*|o_UPJ&2tES-3p@@U7Dil$)lU)k zTky2--+B#ufz;m%^-D;91GB)JLi_;fJ)wR}So$L&pJPCvU-)m`iKR-l+tmLzpJJGR z|I@J;Hs3e~e3jHyh1R3V*QT_gB zS7aMPZS<@)^zxQwEiT`_7)3c-?N5%26sAH@^ep^jTe=DK& zozFngM$dS6)Te}H*)m&qt&&0#`zwGbJx6gLUhY5M3dDK>y?bFdX} zoOyd6EH!X}B=0*J;`Tl=O;_rQ-Sl67J7xCqEZ)_V9Lx>SEdoRM$;S{pgy0E+9kclq zAbV%?*2|kwA-qwni@MNZfZtrk551$?Up`Gz?>1$LXDFe%LsD`#SKK3H=nUzFN*H^k zUyyo49tW{_-*@i;5C!~eobp`#638LM2_fLOQ zN%bZ|*j$Kx&tUOa_ej(U2>7iDA7IBvf@dCjPi~HwEs-_Cvi-h`op*cs$t|o4};NxeD zUrDO261-`*xL#7b9RCI+kJ@gMl-wfNC3bd)r2Y)y?pukw4?HOJZWe~H*xdb)5bg)} z2wudNKP<_noGz8Pxl$N8dDb%=_Osoesf70A+23;oN?ZIRnNiy85IuWZQt~`;FA4qE z3BD>6FA6?>wl@puZDH(df)zP0>hJzpLGRV~$+PVlv@a;m$ItdYB=ZO0W1;`1(EU`f z9Vz@vl9xARb0m6`|0eY#!M3IPeMvp^zkE)ihpB1g3|g=IpJJmEN??r=SkE>;Websc zL7~HtHd#RMxHg+dlGj4?(G#mL3EkiDlZ#7ghDb$i^n!@OZR`@nEf1Cx3UtQ?-O+oc zy%(TZow%<9)JC7L;S~_QRf$7wv^ly#i?k;!TfE#Q^am8@HFqDbENSbtgrT*`mkV*6 zP_HXw>k%vj?+>UqmQ-y@uqX641K$y*ZXkFB-kwXlxq|f;f~Su1?@H=3H1GF`Lp4pl z4^T+Gm)i>`lC2etXr;aJNZSejaYAi(C&ksf3n`kaPZ7!XB@Rv1-WHlYCG~$STzat3 zn;>{wxIK?dIzYjAh)^9UB>M^ZPlf*ef)A%n>ECM9+T>@%4GYb&g13~X6D1uyNw7)2 zJ4I6e1i`AVkMZlwG{>0a6DJYt`O>JLhCTX)(UILS1T^LOsK9Ey6DRBD&npe^2-IUy!eSb z@EaAhUtOCV>)RBJ*9jH+b3k>jZx@-x4N$C}eXC=y(4u$@3rY{6$jpkzl93)!ULf z?+PR5*ER#X!lqLnU0aV*u+O@Tk)07$N5SDJ6!Qzsr@Db>3cWL;yNKcBDCwH0c7M1!|3KXQm|_GQKS ztOc8FZ9OWPWvmJ^uPk_~(Q27z9&_vWYb&8yPw1oR`#9SaB|l(q>b%dp+EkLyw5>Oj zG?ppJKKfs0eIc_+3Qd3HOxu(D3iiG&q~8~E^h8fsWFY*lM)n4U@S86h%n)$SCqoq9Pn^Lsnd^t|mJvOPnCsUgxv-+6lLV6qlnr7HE;y z|8i8i1l=sT2B1rM%exQF3Me~v7~y@3$vX<#E2a<93Ulzspo1hS(xQN`;AyOkZo3)~ zk^;~P$L|UGL4qfxJc}IZp1hE+HLlQCc<#v#ZEe){E;aj^NbcdaLp3u6^U;7(XEz&ROG%yG1D0sFBwQop?s4b{Jn?1YidVe($78M6d^8ArE<9b8e8STSDM3_tKn<@4IqO zXwaoR5!u^bQo4uWr2;-w*!v)Dcq{qv-Qxsn9>pn=GPH~WWg@*yXs#qk&+hZ+JA8QW zE-d)m>FYxOuR@^vEdC`tp6JyDDt1HH)|*dA>B~xbFz@Kg=$^VOl0eVoLz*f&5id*e z44{{#WOM2RRD(ibS4xK_camF28bLRG-K8aUR~M?a$U;L=Z$fZ?fMH?A-MY+vE6PQA z#mfuDPC|K;kW-`TdG+9v*ay_5i1yYJvbp(-Xjy%iA;wX`0|dV?{x;9Rq%TP-Zd1O& z^MpXNWM^p22TF)PQ!rz+?O8XUQr@SP${rOwkKKP4Dd^X#L7|5UWNBKdW^W4 z^ylJPsF#D3cCWchzbeURthX!e)=@B@UF3`P70kX1#tZ3Af(w61)lEIn-jBE=glZTZ zC#2Nm@?4=qpHiGBv}0JRL4GH}yTOy-ufR<>&0I;XC>9YaT7eEDrEGDbq>^}e{2L_dR_8e(rEb~3R5iPT z^jqd_#HjV5XEQeRYH%FGq8fbmYeWw6Qu3H z7D6}x&^y~1!5~E-pG!9gjFTgy*)T?EZS{-@JQ!#fCeWbNTL?bk*9Q}Rh>ny{{qUcDaEIUa?;TL>G&UGDktHGO&Yg@1r^68Aum{hXB}rMSK3t-dsjCh*X0(3@H4Of*$V%6!b_z zkCbemz2cG>DT$Gi7%6K$`7TnLB4sF2a@_S+l!NFG@6XLgw!h}Y4d}P^%&`JAr9LSv zY=g9(ezG-5-6qL3%5T>yr`tdK%e`+O-Op!~mIq5JF}9YNQ>l@26zA$z-Vs?*EPU|k zgI+l`Rl$0y@{O9Nd^K%xjXAZ%oLXM4)ZX8b-WRIB3T|mUjoO|HhM}=6c(nP2u&rQE zXYy^YY{Ss2_)=>7mq5h6Wo_Y@(;pq5-f+(kl7J07nVI#&tl&BDOLLUE-Ko)9{} z6XHyOA*y~F>3Jc{53RVLJ-ugl4fRqA=F156N@}wvrF`Cl+PO~epkn-6(!<){mshKgMknmj)=g%FQPXX^6CTA= zb-gD47D=uKW6117#>b*X78~h`l7^?CCG1fWD+-r=Aa*HD)w$e{Z&}a?7PEvJvxD1v z|KMV z9u}q^CUg!V?r^Z*|03+YqwJ=xxNS5@Fc=7uxfck{;|8V$10fKqWb1;dk;oMtY+S(f zP#yYsu!%7cOb;bsx-rc_2%!XwZ90S=N&+^$CLtjSp#*=w=co6bVP(B*eSgfe_C7~f zS63tLv-c_c2#wQ_&J>dA!lsvVLFY(v*3Rl!sda9ul=EKYouJQLmz6me9r~mN!XSgZU~>LG{&aNyXKuXQ;MunWQ>xFQ&A>i>$7s z;%1JcnH_^Yt!|f^+^BzJUq-6NOjTsp2=T3|^$3UIs0##d8a?VZN#*cL)5gz!oLMX~jj~q+XQawr zmo)lqA%2qzOnoXr{r95NQkA!=to4pmXP|aks?qonjYkEirOKa>RQy9y z>tnzp?|E|-?T2%8S6@piz7+h1e%-0BEO2X^OAGmONVGG3$*5}AAXY_|2t|Jm`BsN` zV6MHQ)b>h3tBJHS5-(V*OK_g;Xmv?#9Oh~*%7_tLgD4v)6srjpac$-JV_hVCBoEP5 z8%Syn7V`Clat)yxE_kr6wTYx+W6CxXlFfy3Q^C2Zs?Dg_0&FQXM+nZ0+``Cs4NOJz zS!9B3PAiqB)Gs;a6$8Y3j*koE^-h1T9eNK4$@ zoidtZXRi9?p_1B!0M#Kv;~=DoU;;Qs$R-H|K4Ef_&^$#bk4LqOc(SDIMB&9#h2!Wn zDJKg(rwh$9gkn9t6&_N1<1DGwxk5TaXq}0A0k}vgrwLAEWwI=($X&vsvLE z1iu!V*9z^Kg2&K`E0JakHlQK>G|_DU@1er{dyznOr=;ROA)Y17{H+k(FC=#h&AGya zdxXC|g!HJ;nlDrfgz^a?!ToSjiu@0fT2G&tMJJ*|&5*Q8=KVG{9MMI2BJL0Vg| z2UW$A(hk8ZmiAbmS{$mrTvzE2P&XCIjfFPdB2ApE#ajro@wwW#Th-=5b2HRb2x$VV z5vcfK9>!`ALsYbg)lR};y9lio>TZJ5TvfPgp7h=Rsib&URQ$DS4QO5}xE?q@4+n4pq39qV&DvRvq9l;@o3HKcq16+T#Ux__YaIn`a2?o+eaN0pV+PfzY~8n0Y?Z#gttHE(ezh z?HNdy0Q}Ahho!m_TqSt0shTOt6F^!wNUGB)-ytcyMM&=w@>xQ4w-DV-*&Nj02>EXX zyRbcXQuct*B2M;jQu`iBeVMS@3#5AdD4Q=Se_m+6AUI2N^%5$cZ~8}}@w(9ZlTa-b zyi~V*M^gJe%J6fV?;|Y&p9$r=Li<007wEqBFG+QFtgj_GMOKN|?3we`HPR^G75;9uwXozCLYxZ4 zkA-q8p}nn8jSzm)5?Z5##;$^wn>9vCs&*4P@D9C7x7=CM8rxGr>H|XScvSpTXVI!2 zM|uprAapz}6bn(G5u8PX3s`{{|dr zlSQjoR%kNBlr1MXd2+P@6-+v-Mj|ou%z3h!n@ei1D`Z4U857Z}?ZEazbB4~m%>KgS z4}`hIQ7z)AY&Q-en5y;=oR+yHz^@4Kox#Tmw7hRit9L*v!$)tQDx{|%og)+{2~MC@ zOs8xr>bXLA8qy5G8+KO&Y+ilw$?1}sIQdONx7LM1<8GnOqBTuYUjnT*AwWS7>9>yw zT#s`LN*VH!56QZt{y>s3fw8oIz(8!wi*nNlAZjf)QEnmf}qP;w3^E! ztpH-M6j)ks+2a0^%BB#6Le>zXMDWDB_UfpFk<}VPyqb`#gi4Q>cU*Blh_h%_gDD#X zh6+iSkghGnLns>#2x^>4E7=NZYd~0p6_rrz zDP%e7A|c%yiBwwI?no1a_GqL7g~oW)15o!D%EN`|AR#*v=>wr6fmSpY=>kv+;n705 zFBr{Jyq{1UB;>!MmgqP>Qfgx&wTBAj&xP<*p?L<ARxmE`^9g{pn**u|qP&i_~5WcV4mLm}&j4$34 z-kznh>SiH%Pipj$(DPTJLHH0ka`?N{jL0D)a%lWZ=$qajd@j{<{5@aKi}_})pl2=p zRuv8v%6?Kk4=)&uw1!Y@CWONTckGuq+ru)U8YwjJnmuj5y|<+HenOqw6)(3jg<9O& z!pUf*}7v418t!wHP> z^$I*ZPhR&N&Dr>C6|P!*mG02}t4eCFF0@t?Jf@UxE6G!M!rdst&uRaJvH}Tbr)}@X zKFyI*vqOcFHoirh+@K}SXn#F9qo7G`xgn(uEodd1^lD_Zl3Aqt?A?&P5puk&)Fw@v z`>q3;wt~j1qTOn4B6zaG{cfY&;?SH#v<4XsL4!7+?bZOxUp^@mnEw)^?~O|$to$qt zd}RZVS&uO5-aN?Lns`T(Ma$|Ac{>L0cWlF5+FWn1ifBC{TN$ZCaH_*Yc0$@1v;`+K zY#k=aQwo|G-=bUal!7KExA{w0y%G%kEe*o-DQVbfM8B zgy&PsyS3!6gzPHR>x6u!P+l%HdDTK*we&8bUX}7Yq~8nqT;b5i1;2TR^5)f<8eWhT zoDE(CglVle1iy{dUnLcPr-CS}__q*t@}Ms#RJ?x9ic~cyYYHCb&3F+#*DvI4jE4vw z!S~XSXltq2Fk!!~sO1gyfPTfxnN>pA7V19aeI+$`L%sV@CmqS@{(^%L&xgx?E;S&+ zn0K6zoP&CvkX;7w@7q@iUX5xeKfj5J+l26XA$kyXuF#k#l=K*ePg3>_67RluOn29F z{1)m5LhvE@r;y`fXa4|L24|t|TtW|s*Pzz+U>T_y4s(v{oP1A+?eBI`v993B1=Z$~ zoF~E4464nj-ByT33C+)S`l6t$*GV0gOD*;iJh8}0U`p&p%KPg1g|JfXgP=Yd|2-;Zg%#v5EA2fAELS^=GUD5X&uu29-sY@ z)b_?4f@9-TmB;APA{tW9aB+J%=nJW>@9W^$?ORJyy1h_L7CP3`3FXIF;ZsOJjK2NgabDI`{N){T(h zEdEC5T3*-Z(M>1PsFM|~$xm2c2>72nwLrlC*Ncj69RvPR3BNqRjq)U-##x;7AR*G9 zx+YZ-<1-B6m*+H}DK(x?QCXe#b7`F*zFle+ zbNZEpXg#4AEVR}aG7Mg_H4+A|kqOn#LV=kpc~snk79A?7O>bFs3ZQ$eO-EUT3laAq zoh~%#1@pj{*WhQDN-cQS>`dg?wTvz)C!eW!{+bvvk9j3FU*Di&ubNBgm$&RG^q1tR zz!R`J%}j7s?|if*XQs%HmDFuBay+#sQZZfd!mjKBB*rjOCn>?5A0^h?T?&^>9; zspvNe@tT(B{n?LB;l97s_^`tR)l}ln7f=(7t)X zMs$*-#xX*C3T54>^oM!!bps<)oG&<6o##$_L3eru$6X`TbKkC)H0(~H&YSXrBzG{? z^N?Ss0s~dNE%a>xQ~XP6_*WsvUJb+5b)uBU(t0);m@jwlIQ3dKKx#yT7IlGPf_rQ- zo?<6U@B}GO*eF`m(t>#zcifibxv&|IVK`SvX`^DEQzwS@R(H;m>fEz-_uVMD%xP0Q z&ed7ExW#S~e8|9)Rd)AY`fpWd3QnF}uRmW-6<&2--6APpS|9s3(6?1IMMG$8#(<7L zs877-a~vrKIuHJ%AfU>`X_WR zrLuy9`%XF>)%VJub?V)9zo+|bui4k)AK3Sa9-pB1UitLSa1av<#e@$b)}r1zk5?lg zN=RK{X#j_C7Q2XEu#nPa>rSGCK*Hm&-g(D?dw7Y?=gfV9ZQ^k{q-n#5ixY9G_uUfn zL^!v4+NCnz@x|1p!?>Vz^d0`kcMyp&|!WY>^Pl5*zJW@S= zyei5^gy0d*%;|f$8(kG;cDyM2f=7AUft;Su!&8Rs;smEkZJq~C5Xx(j=#OxIpKzu= z8{A68T|)ex)a)S+q3@yjlu+?J7j!nX-Pv%f4)N|e9+z~-LYs~S_awOgpk7qRJ;*Y_ zX*N8N=H7sGAC*ND1+S>=3~l3nVLZxtj>y&#-Ju3icD4 zCm|6DI|yFa0qjE7&sZ{Ei0LQ`e?`RvR35mPN3VqkP#qxj z?e*K>J35XQoOjyWVrA1&&k?*0VmubY^z~w@4 zrI7K?WLHV@##ilk_$<9|?U^e3^fJNQT_x9W2t9Ji)sk|*1`DNzw@bCd65b)n+gYE79oM)M=~_wY0zUB|m`~aBLU@BJA|?pLuL|{URj;7(3VDuA{;s6(9U-Hu zZtig;iLwwI&qGu3*zt$pu$ z+CC0=-jCW9K~qRq7My0X?4oQHAz2-1pb!ocJb0fBMp{R3YV>jwN%2NtW3Z{k9jI z$5VkzSFa=Jk>m;T*$hebvVsdZWEzLi1ya%lG8Ydoz`1jtj_`6x1%9133h$aDsdXd`$4RN#9wkKtD*Gm1{*w z>B@qqSPn`g#Td7g2-1#W5hJZH^le&HFKobTsWubbXX(-0l<1^h?68}pdc_0YVMu3) z^DBFkp>(3udK;lh)E-T(Jw|*-uOsm0LEdbjxL9R%;-AYTIkB z$nO@uvt(kP)RZn!_l?B!B{gv+|DP);KI6E53l-Kj`a*C9uJ*T*>dl*NoBHb+cgEgg zZ6q8>H>u4vk=7EL?l4_l(kYu!ww_SrLbki$+>j1~f^kygqbR!o{6=WrE6kufwYo=W zOcK)Lg*q$OA0!0}slcLp{~2e=jo*@*{+C*;eCr$3sY1AzvV%dV-s$*zf@iRMAyzOF zl|I$JEoIW}qz1GQ-gb0X_paiI1mgq`cclfjG#H-L8XhL8I6+8Gqzqpr=mw_kt*eve9DP&ZAHmkP!73VFNJx+~WG zLj&}*=TE7k-hN_j9{xM{1U<8j<*8T-3D-I5FUj4r!RnIivgb5jAsrRzK+5p0TZ4so z5b6-2SQ~Y?5N<@-BB8aj;Jgsto~0gBT2o)%*-}M;)7JbchwLc?xllbLcxRT39uaST z-9AuKa+lyd!ruHk7%Md|DZ4<3e|kF>ZbKK-4tl41XHu-&GB;UQs=|vR^80uW zuH_R~3&VcFCoq=P@?cvbErjGOp-$QJs-*li$~ttfLS9q93*PjpUQ)yWK>Ywe&gmZm zJQnpfLgz~IO1&=rjp2oSCI24pf|2rHh;bLZjG|r%$1k#bx%gnD-wBh>5b7yuv`nAS zD0#kFi>r#a5xnon-+2B4o}9iV7{y#v9vXKb<_l2g3w~(Ad6F7L{F7xIilYKsaqPN1w`4hhS#av(Q)o;dUQSIN`@xPFd z)mPPff^MI04PCgqt$h}M!r$wU)j@-g`&hrtF_XX7pY*O}?YQ~ig;~CGf z*}hyycQO8HxDD7=@Ck-+@L=HIF$HNU5a35R(?xNiq~O>5gpY-pbYd0v>X7d^hW}KV z9gOq{9h@BruHs{VL$a4kzeR{ekNIr;BTlfnYGd4mkb~njbV#iQ1(d?8+`w`g_Zl|Y}b$7aJX_)3SWe(lGr;$(ap=j1Ku74jawrDNFXsMCaS zs^HA)CGSkO4wuV)DSPjg^Ir|Y%z5uye`Ut?)v23kSJNf9DwcJk?Vu-*cq8BPE2%jLuXD2w zsd%J33;hhr7L3!4h`v@u{ST$gIf?uX4ab+Sv)e6{f6U2%>Z{^f{IQ79Dt~VmXBh!}h&uwN z`OL3yBl^(SInXC@T)du6Raxe%NIXjuGlA5;nkMnJR z7P2>lgr+0iL*JJDN|N)ud)8I_V_jdkg%EFvw3X1>8t?-%{6D{geo8ve(+NTxxs@k! zEw*}NINt$atdJARl#U2^H&XntCeLmM-dE7u`sH-T*b;gftrtKv=|rg4(&GDsytVCT zbzFnrJ9~A$gP<_MaL0v^b_+Srb8B^B9vxB1?mF0(%ddgguvK>M=qy}JFHSsO$R+^X zE&H+2rTSQPiq!UrLg9bou_{Y;1Y=c}ACGjFQ11=+6G`!vs%Ts#wCH9j>0xQ}rg-H> zdWR%$iZSzI9h}mU;;Bsm9VuRLJ{!-Y{gl+`PlCHoyvQQGNfj;Lt>zmX{AZzME5)mp z(2+9iQ61uS6A7MCLO)2gjBc2B*>?8e-@(?JQXQ$+`vfyc6EQTCO%!s%>l_ch;BBnV7o23EA{=gD z=E{Ew=_i6WlXVMgPrtRLen-~k7vYRK81*#HPNL6}S2rfe^u(Q*NVD-b%9hjJ2r!lo zEvxmoIhzRa=0fy=Dq0;JGDC2ba1~Fdz4cBz>bM&1`-LnPJa;g4yf9E|J_vMCJ5-1W z#0uiAVWT94y9%ZI7$-_fevz0mH9!RcARcW z^h=f1z3ls|BH>^+Pj2Y_Hrkm@7pmg_$9v`NS+`r~>&Bwn4yDgYazX}gK9}0t%=BZz zodw(H2E9?~aYB4D(y7A0bCIqULTq;Ugb*`|>`bU`$~y+|U*!!AFwNc*#0i_6YshJa z;@_wuWau|#)Ymh$V+>R$u3EaGE-k=Zd-EXAG>-S-a+lEWNDr1|zwZHyTS?n@>dtV1oqp0~US zHk9Ofhu-}!{gG79(C~aI4;Ba8a|r*uGy^+;Z3X`u~lDi4gMUtEguHF^rFI0Re z)SKCTMC~_1@FiG`iXV|My&<3*(kpj89V>ABL5F0WYn;AFyYb)Im2Neag#(4s4-!+f z!oeIjREReKKMWFz0sSZ~1?Ky5ofU$I+W!RFGFlLk5cG7Vfm8heI zkd{3jCj=9aXlDC%hx0g2cmx%=Jza+h9VZImNrHER3mMy~^Y8XZil>3ID4QxIrwJ*8 z;|=U{dbtqO^I7lkM$e}+j(N#(c&StmoqK+mht9phPQ8)aEY((X_{0N3>-R!950&@a z339z(xi?R9GF(sfX}_)7^gRxKhlAheV8Za=UCO=`oMj|hEGZ52(&c|c3MIv{;Grm| z(kfPx8Zap3z0bmxC3*XucmNe^pf;%O5}du?dz#tYcssLjBPwtqob_tSZ6(zkmyD7W z?gB;%>CQ;o3m)?dD#~cB>ZDaR+()6FC4@{jiSI$W1w1a)o9=vw^eJU@qT0B{IHc}- zNLQBBx7AoURcbPYGQ84onh?;-bn)XtK7eQZDasbs2#0Xo zaDc^JX@U^r=6TE4*pAY^T-8DPtOvQA=iPZ%3p^tyU+p{<2`lOqv~}`TT9@cB!J}0H zmNmFkXk%H^t0bj23E{N>Zz;uFa{o)};No2!7v8F}V5ZRXp48Su95RnGT&C!GBn)zZ zL5^NQ!YXHP3h~YQM1fnKUc{ihARjJ-d#f$kuoWKMV z>A9;;M&%`Zefy0$fq9(?VN)H~x7Ap>h19MN!Gk$Yf#IYrF?P~(2g98>q$R|d$jrmq z*hz1>*}zWLCUOF0z1FcYmI@4Gh)wLo9M-uLx+&`c7{L(x7hwOKX2V&>y_Hfu8h({3 zJZGZ3LQ-@q2j3ugaa;3FNjbJIu&sMRQv5u4R;SW>zG*f8SI2Xu=hk04&`)h0B!mR5Hpn5S*;cth_!<(v7GuCfp>Z5#hoT-MM40OWf7gq5 z(xZ{i6yoUs>m8mW*o1rMHjgDVE~M7h`w~eVm~an_ER6||W(jTVcqeu|#f~?w)aAw) z^9(!gIX1~1l5EVwyQr``{d>wD<`5!b+xGAgNdX4llM9@Tpz~^-&)Emk8#uG={UQ!w zhJpK=LM(rZ<#)P)@LfqE=0AQ%Qt*+m18qQv`7g2jp6455^i#~gmj!t{Z%^UL+z|Xi z73r58Ol#o%fYPO84n4bfSg)rae5Trn7NT51wVrU0eXFw2-hZO9ln@~8$7fd(LV^Lu z0d7;$F3MH`bpA95(gRNr9YmRr9ZDJPn`bsSJwSYn)H>EUK~i!&D$`cGY5mg4 zNT*Xq>*rj0(V3E*?x!H&2#7V(i@{}r1CIFDlHzN@Od-2c@Vp0y9(9M>ohoy$TK8`y zh4%~IxHF!MN*mfuI1X;~ zc$!nuI;XVGfdd#~7blC3V=C4c+C!=Rkx=}QvJJowD5J4BZp z@L>*bMxbsZcs7O`aPONI?xHdWI-RuQb+#EA@RX+9`-eL3kr&B(L+tQiRe07$N_+0~ z&FP^?H0lA3dg)GHx9k%sJ5flF7CZsCq_yu0enOi3z73wb&yYH3x{x{+!UM1`;DE?` zibfZzteb$y4ncSkhg^<&nb5c6Xm|-_I0;U~49u@N)7RIydt~~=Wu}14Zx~` zr@pvD(o4Vt`X__+0RE7-CWaoMI8yF!PO;TjW!a5U0^NaF#0z7c+1d?eCAf_LbS zOG#dUo$V{hvo_qdmVV0(dzxBWcJFpw2VL0gV20oY3!ZNq;j+hm9AA<&5_iU(o*|9D z6F@mY_0$7bc!)C{&&LiDBKwneC5iIG2~->j#t11+rN=~)10)5#PNf%h2B&Zwo~7rw zu5>i&so*qlrV!v>4!@iqWA~C#lyFCI9<|3KP2u3Ph4ciWeW4H@hKk?$zq4I?J<#Mv z)jH9Z_k{DBF83+K*Q%m9QggTYh!zv5!1P=-6BS`qHjRivTAZ0h|;J&n3`3+J-9M|v6ihYewydngDKPdZH2p-hOT3<+N`~vB7D!vwK zKlV$cPCXl*JzKAK?{#K9Y7{QZQ+K;QTj9ONII}U%toN?5AM2c0k^R`FD)N;DJF~4W zNuEsWv0gi~9&xfCn+;NJIuPK@HgIOMRfTe0)C~kb@~y#=`kdLEM>(U1CB&`mn||v_ zE6JuRvq$SC`Hd}5M+o&q+)@vYAt&(3OT}#DGa5=#9b@I#a zB(lQujpqo-O+x!V)LBB;Zv{KTo(de#l^We6T!SMVF)27(AO!PKpAqstzxXN2<_R93 z&hU_vS15Z+XyYM=c*x}D2!Q&riWwkJJUWewcvzFk=UU+#3Vu?~s16ms0@V7O4=M0a!U#fyV;$`zjIv|Bo1_MPWC`ANj(6SORq*J;?2;+=TmPN*DBm6YR;JGFA_TuI&$ux8e7&TeJB1egdfB}I z_q=hB(3gTL$43ue5Im#1@e=B@g1z-jsb1Th+j;+t+IKk)zuhZt z?6(*A?Jb5rivJ2;1HCjJd<*A2u^S(B=o7f{9uCRAk`#n0OP3Zh+<5mLCf};Uqa!5_ zy%U(*p-*}p`qrwdaB8XC4*eiL+YpK_q@jXSO9ks7tx3iDLWFA{t|sIg2*E}|vbxa3 z$#2s6n5IJfVBB0NlqTsVDP25SLi=k2nhzf?B7!gvg4&To)pqsgoKD7dknlFIAv5ySP(xW zGzbe4!UFH0>z>c-EvfGL%m@$yVuSP$p*d9udt(Df3 zY~cM#(sd=(nV~k9ly4_EN=UcokQq8b@PUxx$A&}+!N!7TBp*(I&>%pFdIJRKh;lxC zPm%V1Cm{hsJzsvZq~cV;Q9??OYuXzsgwr{0s?a)DaJ-P7N7)o1eMy%wo7tq^7bUn5 z>29Iu5!&vQC42~p9Go0BByw>-p2MQ)E00^ zv8N=@&JPGFJgYM#t_UXxIdMgJpb(E2(gOrX6YeT5j*#lf`c20bjN&zpri|diPPyIW z^je;m_f(d=DJjIMbiZi!85Q(EhVJk?RZ@!25WI#&yXt+v!V7fa9trVE70=m;c-mv0 z_Tpg9Li}44eEBJYpAApKuj59d#V+DEFIWh3N%2HJhEpEn>V|lCi&~n_U3^&SMiSgQ!>ctq_ zNNV6##5Cp6#Ypsw)qP*Is}U`y=l|7%Tr^oFO_tjaFW>OURCSRqH^nM1JxM4q!yaOC zg1+!Y%CM~ECrDUUceu1MswuY9i%D}VW={7>ft`#og6=u-;flhBD?R#TYRM}xZ|F+b^~1->1Z92 zO%S|L+v8i#q2c+M(Ye&p2jEOAe!&tt8}gF{C-jca;gHKX=@gFZ5z@;jyBu60G_Dl< zzBR5xxl<^KGSL#&x9g_09h3xl8*Q%`jsHEr#${rLZKZUdi=@lXW zNEn6D%D(_u(U9=k(+8Ghz^GtCShkFiGeVRuE7Y^X2&%md411x(_2dRx>Tg=_~Q8Yy@~`)pSvBI~>q`tKz; zvJS=|jT5r5g6&W?o-&MiaTsL>3(28KM+;6C?L5)hX;gHBH(wv z7_uRgh3=_Bb-IxC2u`=>32O=Qv`3QCGbJVG3K5ZYaz2rskS`XZe+!-m>WtBO zXQ0#f1>eNo9=9r1mK3cbIOHw}x%-l#Wei?9MNCFy9dv=!gfYb3`2ZmqA~a~38pPfC zP{Cta(FRBiV`V=;BF6T#JZ}%wz$?h?9}JS@-Qk99B`Mfa$Z;168o6X!A=;iY2inBg zs}OAmEujvt3A8@Ng_+!-NvG(pG@r|f5fM2a_%oGd?{e_J z1c%{Xrsd5+GeUD``kC!{s5~D7Ux||Soq7s^W z3#WRyN`F+M@_c}h4H2TXg{(H4R?_$;=fc3Z*i{+O1eY)2s(Ma3>iBPq*KcNXUEAT+k8Y&*&- z%Jvq5wvg^6IC{^C-krcGy#NWP+yQy+So{{LjmL%PG4MXML>S3pAtRpl^6|zFlAKH= zAy_Wf0~uuwmI;g<4txG&#weMG#iA1=H6{yDw~+i&$j$>(Q1Pk;;jm?vXPMTL6cZk1`v^%cc-SczP1zV>Ng~5+q7WU9bR-}sOn!z$6zFAN?TPwr z?I)zJLX7Bfp{_#Tk?{aK6>@YC&+d2~SB(Y-2z6qU{Ul`vQFb8sgH8}kkW>;HRb#-x zDob(S7GEN%dX7V$2fqS`amb zk&YJ1Glc9^)YHH(D0_iVoQX7@vdg7rIE&@^0FN;{j|zsOvK_%#soB}o9*;T&^#l$% z3-wp1OG~OQq>M&0{maTZlCpOxyIoR=Gh6-^;L(;d zIq9vEDgw&te#-6>vTJxw2^yS-IlB|-VjXNBxV(<@J*=`4Z#a7t=^+kzM97{%ork&r z;31dK3fX+{9JrB>y)Ojo=_0cmIN#Mm=kuzqUIzHo<)6T-V3Cl$COGp_c9RZH-k<`H zyZke?uT%RrcoWRhA=SH*njw$!JCqR}XYV0>1a6Vqx{c!=6@tG~_OVdTri>TDqiNM& zs37w9UNhCdQ2z<=@2md^*)OR5TvF?6%Dx1jflhsSNzhf{_?JtA1OwGdNJIqH%AkST1$rZb^7~Y*B?N)C;s5SoQShLNK$z)>fu6m z80w*@6OfJ&iixO4BK=GVjzT(GD31}UV}*W`P>&Nl*{wPawHurwRL2X>?paQel${Jt zq~hm7c`DLW$|ei5dnh}dvNI_A1vm%%lClet&O(|FW(eh(NaqTUcFOZ5wWd*a5jYQA z3@!n`60$3V@-oy*!S$5g0Im|s>yUmeRM&!;fC#9%63hm-3fV14w+ZF#;AYf2gzP4y zIp9vzyTEV2Zz;P^NM;Eg_fz&ep?m=8L8QBd>i4J*qs|p(-;4SPcpTg#R1XQWA4PgX za2H55A9WshjIt-e(?a$P(jSECS=6VHUZCu3@Dg|t{87lB6RJNUy$+s7{WH=lNbd;! z-Ue@=z6CxIvV}HJ>H0tJ7NdLt05lS43J_D2emj^HeP(DQi-}_-eI=P^^kX#8<5eVj&~q%T`BS z4G{KKYf&};X&s~?NCbe@x~PMZHbm+`+6ZYV()vh0LLxG(ekhbghSiUSjPS7B6m?@j zcv$^MzbG4yv>6x#wh*QhD3)6bPLNRzqasBeK?QMRwJlO6Bm|Gu&O){$(oUcS2qVkg z1SduA+f~R3y{p|-5mX#PKjtvx=@&XKGLr#yBO&ra2dE9TrFfXkgi3#1nE+61-J@a39bRx3E53xrjX1Q z${U30R;1enuL-Gcq3jOS+o-q;i6GdykG;3H_djwtT+X55w;XpL$K8qgJ8(Z`4(?v8PXP%Z7l>T(vO8|Td)-vL0Jpz zgt{Zru0l2n^(RQ5b59GTQYdy2>Kt^rq;hvEb`yGjinO!f8B~_r*TGyYA)(y z;9<(1M0yr10FP5PUueB8^le2|y(BdlfIsvIhdc%D6s8}7^aglY2>uA(M2!HwJ>Hb6 zS{`Wyp^TB10!w3kLZtqnDR@(=GC}7h7ye_z7tKUy0l`B$47ne7_D(UAc_Y$(4vVBl@ z1%DPiE27$+iqT+<(3*gBAQ%ts5`u|BorL26%6=nchf}sc>OtU0)DHxAl$B#CE5QZe z7{Oabmq(!<4fX|33&l*q9ctdsriG35Jot{+Bza1%^T&n+kNwuuE%9!p(};>3lguIl zO6Lg)K|_OhAzXxn&+qAlg9htk9@1E814)e^aAS8sDh0c5jRTMl6@sxselilCOo9KB z;a0To6>{2cPbSL(u8+pBz|gLOW%bgE;3WN`bc#@N+f(jAexPc-qR%;l-APnjr;6}K z4w)siztkbkAL*Lg;{=Z}7YmU3>pL393-*URvF$l-Q$e$n(TKQ9c_g;eOD3Aw68E2a zP&s)-YHMws%5RkC__r3R%uh+RwEF%B>lc|_4M8~Qu*by8LekXX^d3lB;uU)U+m6YA3 zgR@uo*rQUTk0qrKa>$1IUa$TRPT>lO#l0Dalar*}uzC^KHj*N4omUuTS4gUt58)%( z0qR@TlXdb%xD_6wcb|TXyBpImd*yCM3+Ab7UY1+zFLgU^c5oV(i+T0pjz*8v5CiJm zm0rWqn8$JaD^l!VbcfKyhJ9tj!@K3>3|=JQ{bxe%)zI^V^nY&H2`VcN6T(^4{#Kv$ zWc}z?)Q7-4q47MD@86q}>M22gm*fTe;XkOItjuYassQaVt4h}&*UIet0 zlZiNx^>Vn5&H317LOly?H{>h!Y3U;VGisIEy9!l{;oju7}a88Q%k^U=q?o7QN8}Gr1*y|ZH8%y;9 z?Cqu_O{JEn#7Rp79tP)>@Fcr@DGo^lFQN%(CV~-w_pM&szcfU~5$?D1T{i=FWg4YB;Gf16LwXRC2Scm`iiA71#DkPhN$ z;$!tXDz0xl@3fbz1ngqWVibdtWvGa3V4 zHIJ$~e|Avl1fd`P8Iod5El&Gd!SlYn`$0lG z?QKW>v#w#7$eV~d0YLLhsoqW?Sytas6oSVH>Sls=A;O#U+@1y1-ay zZ<~aAir`tcvxtB)LX?>+2m#M&`%gk^pipP6!ypeFEfn0uxnSVcy4q6)@Ilb;VRqeRCVrD4)zn_ zncpdHp3|25I6nf{jN>->c>%8Q6XB25YezVXZD&k)UAIw`_2&~^`>D(m4TF8Te@68tY63UAZhri-TT z8*xv^@lrFM7cV9Vm(^KX#P-K^AkmaJF&W+p$TJ%pO0UqPiaJ=qud8^wXD=fp81saO zrWFe1DuRQ|Vtq;3a8#^bxTb!>G~&F9r|BC9XM{$6SKsuDnCXyoZ!kf}MLaKExeh6A zmQ?3?;`OVO7!zB$q4x>ubjJJ}duV|2g_5$rN(y-5}{q z`YY`kxFWb&pS2CEAJ#Sa`Fv~?U$i-rcjEG|+=Vhf&$iis#IKF-pw|8H48xYLMvyYDmm$MmDZcig|D zzU@AQpYI>&A7hN-V0)WZ{Rw}Erxu4?b3T{T^JDxS_4o3?)t}%5X|DeljOb57aOBnf*WNqIMMa%2vw%fKCjQ^KZC^+3U}}YA`&63O3?x5M&HDc zu9sr0Q1`n0kwfSt_X4Z<=Q^MBE~L{q^8%sZZFJ(Pkbi(vwM4vmO`0dqx{5~gl?Mr# z8?W)G69liuZ(>q-;L$q8ap$X&oK)5M+tWXyzAfah3vK=%#XEw1v(OCzZ=+N7 zc{ix&YpDUgt+O$CiF)xZAH#D?n?gNpW{{-5*)d)rQw&yFV?7~RhuRHqoafjeh z+T?mkEB;1kIDom6+PUB!A$$nwaiQK|;tABJ0OPB{bKps#xj<;o7reV|KrgH}wrwqv zq;BQ=C_FvkrO8fyyC zx`HzSHrJwJ6T!WM$83YTnb6LVFj_;_6Ox^ToN>A&7pjp+y9>e2LcWjCW(+MqOYmCS z?jt0*zbU&%l6xDyjMgh?^T#-NA%{E-@Ko~;k=_@aQzw0qvQLEQ5W(YM-Y_aUSZch1 z43Bf=I7OiQ83M+wI%v?|_(15|O^0OTgt*PYL`BJALWKp+P7n%$q@r8!dc^P?Bzn8s zXA54~8Zi`=_jYz==S%fI9NrBo#L=|Z*TR^4drhxj_1xba$ID4?Lae;^)2!$#h_Ux6 z-j`RcdMfaXv}zt43j0$La!4Y0??R9K6suFQ1{EtItp)}N(LlHd=P zvET?H_?b{0C1g17&Pm>+5q1;ZWobMngGa?{y0S}Dn=TZZ?+VrRLQHRugP#tb2rp(n z<3cL}gWoAydWDpFp_gdbh^E8`S-iI+z+0xG;eqV2Q4&HFv2 zT!FWzYH(HVwQ7#wvt0c&PMXtO*0!H*@0yBE-sy%P)-Uws$vA$cKZecm-ofF$s_;6# zx|^P^1IPQ$An(-5^|m_h*auGR)PeJqaC4l*z3#xCrc*iE371zz>L|f64iQVtJ@o>* z5C_-OhoyY2(^c3jCUD(FWqpAeG&aLCfSQm;)5X*8XXFdxX( z(>BIEg1gaTnj$wl?gFXP=smz8{}O_40nLQ(FIi&Q+6~tg3(v6?x>K6!grm1C+c*{cHtId%7Ry-rAXOWP8 zPnTBlJll0HxI@)_oSrD($$R1*bVz&)zk~nzVytbrqu|s6!2?KdZ~{74ys@n}RGW^E zx%fEM#{56p{4c$CLyQyST`%L0CFS^?Ue*%!=T!WYL+o0(2j|0(1z4`QTL_8i0$zxE zrzUW5`C1d#P8A5oQV2>iCyCeKU2x!{ebL>=Z z9%*QD=78~;V5X2WU>W)=vGVENeA{K59@j5eo7z7}iZP&}jU|?$!|wu4ulHFAuay+? zjMpihd11XJs8foElQ}7#Z{hcCrliid1uuFI?$&q2zKlv`zPoY7Cm6J-Zz6tn`%=L- z+dHSW?Z@)}jkebBD8>jeBT3n(NXv23<%M)(fD;qa+tYCk>Rm!?FXJ;L`hC1$Cft)N z=;3?s6t1D8ELuZS{Cy#KShb!~pK=d6d7Xnjbci$0g#)CfCD7@VLr7B0S=Qw&31-Rb z_iMA%RE2jw@!)QFvQ%%l8Z6eCW7?jOW+%k*2i!F;(@*JTk9c;y#J^2b*>w<~xST_H z^hyq{ZWPijbg-?3lV669aRofj-WJ+@|HTEAVM^l;DyHjH-G3HZnEIgin(G98yndP6 z3cfAC8%bzC8h)cVOYn}6GS(5^po-YfP^#nVCdM~sJnD&p^C&g&RqD2f3U?{jnb`Q( zR{Y+K+wNyP;2BTv78-;27&jvDedd4Uv<`J=7nkN-dUbENL!;ZcW`1w{f@(Xz5>gug z-ZJ01+9J)=)hEnz3;(7=>YRIDBJH8F#(1#0R9na70X~aKOSzVAw;C&OFi~6A99493 z+kd5EzJ@bn58_ag zTbGc3S^XMZDyg3DP0-*z(0C_FU7zs1cypb8&>!K;IeqA7!!I3yaZH<+5-bOP!X`)x ze@4Xtl$|L!g`D%t*ID8C(cQOFJ5%s(Rq4fCIRC-mb>Uz_OAj3dw@HeZ=5qPH9p9qH zQr#HFj3>vd3r=3LF@2zo{e);Ap};8`=7DBnKQCcU zdn9=+@}L=%ohNkB!lvA?;3^@!QizD|QW~ZFKFWS8#7_#r&0wC8GMB^~_GE8J>VBWH zMU=fKIH!BPXqV6}{90u(|BARj>gq_V37rFkU@#aetkM#S?F7$0DJn@$*V-tM4ih?# z7rX{Fnt^nw5MkG19;xs)%5FiT-B0JB()drq;H8hEJ}krwka#ddVkU=6nV-&&rA}Ky z{||2i;i(%QMG2Qwnb%r6G;$u&Is-c1Lz)YYU1D17Xp&$*!p)u2^Q24YKV5HAOMj;m zMhu$D1LAk^A!;8(eVp3)NCUWQZ%CSnt5FXK@=qj#Z7l?TnQ*o{aj~8L zAvj7>afRSrwv(B6YB|Y#{k~Baa8+*5@|k>=GiUq+drRH8IPQ#dSGLRC zk!Q&rZ?1Ls=XYu^<;apX$dL8&tL~x#WuineJS2_KYC2zNrWIFj#!elaMz)bz<@j~SEPdd|2 zHcXQDg{m@1tyCyR3XPqGayKE}71gctSV@H&C7LJqPsRsJ3Xc%_x+b%3sa}k>{!~fz z1gRcL;pwQq6x>sp(RlUkJwM!?lrvT4u1SxFhD3|bFlpy0m@9Say@Dr4-c0}G)JKKz zY@tO@W$QVi{eciH6q<_!FPAFaKZ(V3CuPIV_M1}M{}h^^3+2Cs)|Wy`!{op?14i7cQ3kAkruJ>q~I2@=?=uVIBt>PH4?#RsQ(aB z-Zv)=atC69R~0U;XDwV-$gp8vh)@imtRZ-9LAItOr)2W5=L?%kZEPmQ>j`zAAa7_i zQYd?S0;_RS(_aeVQG(NMx7^!vuhj2!3{H~T#Gte>DD8!U`~SRayeG)F-cnid2{=UX z6!>suy?((sp&%U2j}zRl*CsIjPM6+Es95FbG@&{l^&-ozWuXuw0pNIT~W?y74n zkmO0?5z1U0e_UhjK zFQO%BjS(I{P-sk~mL7+khOd3JP|_SXC+hdM-Iaq$E3jtmF+#>LYI>+p{T%5OaI)Y* z$Hp0`*fpNbH=ZLi7_M7%4P0}F$`u8|F zP7_DY+bfk=sk}?@@JhIjq;y@uol_l{uf~rA??BgPn9{2i+nY)92B}T#mA6f5;>IVt z3IRsTd0eBhlB%Bz=?PRECp3=`8VsrgzW}ET=}5t;S>x*{!*aFn7czW?7FH_7UbS8n z5-PkYlaFQ^D zNdu_JAXJBb8AbYqw;7Zn1Q|tTo`{$r$iqp3ii=nif$^0Nq$X8(M=uvSMExCdUfng;Ip)K za|D{k3quOjO@9&HRZ2&qLh-cA3uPkM?O(1fsrxa(dZ@pdq+ZQ)pp3?#hwQ}fp?x|i z9*32y&p|@xc%RWOnx_1YkX`~V5Q2@=n@OS`2A)JhGvq%Z7tN5oD6DOLfEGyKQ_?XS z)AuEnm@^4=-^(5XH9nsp)EfyI6+53Scn_I;b4euzMt-P}9VYY+7Y2_I(r*YhCc?QS zFBHNhLP1pvKM*`t=}pW^y18k>TU$t|mJ))E*@+z68GK&o?;+%e3f>r`^94!Cw}qKk zB3%LQ6w)6fQGf#lxcfB8cfl**J)vGk&zr0wG;0cZ5bUCMM4Oy~t-m7GISjZ_&)z5{7(zL)7fajF_;OIY=bcX^r z?^U6p)Ok&fOPzOR@|b^R!}|Bi9Ub%UkF-nd=%!6tE-A*uHr zA)!slXima+1$%b#i%8xmxOItx_xF;d$Y)OqB@Ijc0>@}rT=*TDHEtt>S?f^d31)3Z z;V(B7^3Moy+~pvWqhsZpE18`xgfj$h`suCi8q|8n2I)54%NHA>oHnMX&KtNHxL0fHAz2K*}3SxR~+`NB6O#i3+7 zU=LDm=>cRbbM$!mO~FGI4sjfvE8o_!oJ!|0;p{=qn=AB2)VlpDUd$JVbXQicXXCcm zlg)UcMXfuIaBA~%4J89=z1mKa2W^LKW8(KI(d`Mk-N8dUUnYreuk2E>j|Y1)rN(^>#qoSk`+2C0{Q`mn)Dzm(Kq z|Aq0CNh+A@mZ#DrA63$w(f;OS>_Kv>(4hGflz#qIaF&o_Q04at6-B;$Na)QKtm><0 zB*l@W*O4+kV6Z)eiR029w&WOgPU^`cQzRw(2>rbT2QnyZ=bWTuemS`m^xlsIuYmW2 z4R@w;tc*D6Vhu_8M+FZ_dLnK)QcgGAl#B{cPVE|xvm&OEbV>X*62&n+P-t8TDO{d# z;4X^CcI;WqR@Sq5xWC*~r}SvvV_QMVpXl}|Y>29yfS2Qu+)x{ck z2$kziMS4r=6c4`ir%GzDe7zLH`X!)HlD9barVuww{)Z$-wXnr#cW<~$@5*7{!#X?+ zlluvQZ=U`}7^e4Le~2F{g=7E; zhjY>wtTL)k=_k7^)1~Hd|U_{BQ3#yTqbECQiOLGa`+zpHF>CCh2TjO&HY1A6WJViP6HO*yu`kTpVa2+4zm>We}% zTL`P_$CHh@13L${Ch4BP3;$6{cDCkr*8|%Mo=0IfUpYa^9%|09&^_rfIbQ$KJ3%O| zrG_P)ew8p4Q^On8&){phTe>F?o&H$}e-d&lqmg&uePyhN9N{WoTaTK4T!?yTH%YzS zh0f=Z4id^kgfLymza=;f(n1$Y@>{E2Iv*kVxR5<4gr|k-r$V3F)4as7-*fDDNbi7m zh2#(5?_iAHT7N}e-Lit6P8pV}-+i^2j+K)I?~s@7PI4u_)3a`rp)Dl!;0XeL{$}(G_tMPGJzF%jXVmo~Vd%?P zl|EiVkWhS@UkaY;ll?%~^MHA}Fh5T5$*~GK&$3?GNX>rIaqx)6)~kq**Va$H{iFNOabvoTuA|`Ru`IyNT|M&w#?0# z*Hm}ErljXPw!@OrX@ZxHcuN%T50>7dV*z_Dx2g7f&P(+8X)eV1gsV%+CkmaFIJTPL zkf9yA(noI~#J=-R34LO(d9;0%P+lt9w?I$W(^q0om_p;OZ+H+1^Qc@B zydZdVsicwfN`Zi}(-~>*D)(mh)Um$XyuBoKrwVmX@I*9+x6F3az1X4V!d2~~q&qd4 zJ2e!Q-Z9)RMa7;m7nO3Rk}fJoUnnVVUHdk#j`HHJuiMb;Us2MVa6O3jiQSREa>~uR zjfoT=_k{4-`gCF8kz&^U9vO5gl37A?3le3m!cCP^;5<&;(vc`oTInmo;IF`QLi9`h zSyF5lXtz9leg?j!l#&>%plBDop-|qFHe!-|jUe(O36B zEW~-VbRIX zsiXqE;YcfyVL+QnWCqf1nB(zUr#d8$W(Sl=$C%Ilk z_6=UnWrFvraLI1Z*Ol!D4p?9Lh5Xtgf@9r#(NKCZ#~$F z*rH&pkS`%56y>lqSe9cWedm$_+^k8)1fg7C@OJm!N;snw+l}ifGF}dsx;*bmhRwWV zC9QFW;E6V#K$u{mxUj}~L3b!=M^E#FB=5AFzaq)ybl_!46&kaqoO(apbgW)Zy0~Bk z>UeYcGD=pf2>p$PIN^!{+}lVP*nwjhHt8-xegHU-W5)`~@g%>AbdKO{V7-%6ezlSg zSKZ!C?tS1MfIXDY6~Y7HMUFiWUJ#mJ34N4r_>jIp_@|_aqs4n!9rKo|o~~Vfl2dvB zZR@B=13PlcIlu*dP~WXyQ;2(o?xBnipGER)@VH=m*Ym@?;idIy`6Y6{0%(NYGjuHA z(%O-tVi%3~(JtO6IYFG)d79AVh{<$feoOTDh1GTD%a# zocAdBi;(;s@N&k`kI#<>RC}*Kk24YI79{%!>21L3A1!bFm;PN>ZuvaPL(28yot*#Z z`d!W9KepAQ=6(khu4G6jhqb}S1#fp{M?jogfy$`qdSv`YoIE$A3t02V?F9bJRruWw zTAnKlN{AqyOmhDZIZ%{TqJr1tmSD;GKzF02A@7PfN1yY)H=hw*J?>g!*hr z^(i{$J>{DhmGtH})gL4^Hwq=Dec>WHM^c>V;J(XfDcMpNs0*RMqwbAf>&-akVV#$` zD}FbjOr{ip{JQ@+wx~5QdN1jej*P}jLXx)lGCdqC-2N=o!sAM`xcaYKkCRSfxmJ}`!JeAtEvfUVA2VHp# z4P*~B;yum6(z?HlhYs|{;wCu{lcc#TFym{!f@6}`H5dJYlF1%Iw8wcHLnAG_U(OJg zs)LgC$aOFbZ&2=OLSY6!PR2xlp&GX(a*TcNU7e1c;z=exZ}4)RJpTKF=MN1`)m0LT zS#qDG@#LPqt}azKLUpSUa$VYGtxsv{QU`6!dTo6S=I{*HONIE9T;4W~%@5DwO1Y>D zurrdQbg3GXI0m`!e{f}+(_YRx=)2(H{zT0rGSt54*cWJ zwd9~s!<;gJi5Mqlk#vFcfB584j9$fe;KhNS&7=2VPGmjU*?hM$S$?E@8FdcZnD=|I0GP{CPW>dnJ&{c{Ph4dA{ zvnxHxco4%seS-{41G~%J5G1%9!-x6bdxY>yPALUX)^GTal2#~OD&*Mru@aLJ_sW~f z1rFfyw8V2(;_|Nx-Ur&d{^oQA^YxYM!IJ!J{cplCugY^5#S{JWlXwnligz0KOq~P+ z$Q`VNjQVgc{~d5Mup8(#{hMdE#idO2N#dQ(P=;3nI;L2-NEtDr+*OjYYlXP4F#ds%g(nZYU)= zU5eD#TTw~Jj?Nd=d2#*$zZ;I>qMV#IJKr30(BXvx`g-43YDwZnc2JR|cC-@G+ zy-4K7GK4|klIU6YHR`n_cPs8W239~-; zt#;haBp(qx&%F7qB!|{p2roqT9=Y$3%g|*#jyF#K!=Vor{g|X|Er9F&?-OpAc zxvJ3rxKM8Z)+ISlh$}$pYmD2Kj1TK7;Sfpoku}(QR>R|X&u#%LtU-t}^5S3Oa3Ah2RQ4T)0hnElBsk_KNEyg_+`C*MoADmPDqJnGVbA@+7Tp&SyD zPYUTeLiSOPeVSvR0^0}<^XI+>R{(7EsLYFK?RUTDFTkBYQB)DD(j|jvQmA|3f9){}PhZkaEGh9=Vt0xV259 zW8OP6{}`vNCUiDM+6?R>I5tLy^5?F(3$Pb!y1>oXH~Emahn&9~k816>yCet5@P0nrxNMTJ6=XZ|;sOBzx&TyWPpAW7AR||UpOz2PmPH##Cl_uoC?i8yP;OJ>53vMv_G#C{wpS%*1ZG~cSq1_H?dyaiZ$af^!2QAnW>;+ua zc9Z1Tni-8vwJ#a8I2A39cUN(M-2BT*cE2QeI4=JRr_lDKhaep+)Q1Vh;X<4w_BBc6 zNkVd*kRC6DlZAFVKrI#Dl+^o%P<$KEZlz~}8A3~MJ3U)Sz9SUh6T($UmjQaJ zcv=Ww2Xlq|r%2BT#S7qhA$dwjpB2hi1iM7Nvq<^|xvztt3mux&6!q18N2uNvia!YU z_H_RwDSc1qzR$6Lk^GAgDAoOigd`Qx4=>j`@1QpOqiXZ7Tzgln^ULD(OoyplTiFY z=>3%>&Dbh`5yFQCguhAh?hJj5ta84Pz9aN9<$BPkT^MO0PR0r^#sK<4X(7z`h>*BN zT!xHgNn)ir3QBi^qhc9POY=;3p7+?0AJNy!evz|Kgc?eur_9|^`{GnYt8uf{;u{!XWibwzx_Ay&QW~aFg#C3yxt`KB!~GuLQ>e?jI&%I zLhKNInp|v#6q_M>DzSGR$t140enQD1%->K8%@n~QKia({rC$`XsYuwxrH4a)Be=0Xqqpuj3fu>d>`HoaETjWdOWcHhCQ!xiLS&N15f0(Wmgqwa26 z`;?^c3n712@NAa!MM-_e0v+JGPkY`SlsZh_m*knP$x1=#{NsXWtQM0c zWnCc+LTsXGjuTql4$Y^h+bz(MJwwORbHRB+dAHz^ftHrZ?zY5@lA9u0p*RKaSCR%t z8k_EKmCW2=jG<)zNXZ4-093sfC)h&nd{oKYS{{8LHd1l`-QG+V!nQ(UEx#)giaY9O zE99>#*|YLJNm4-3E}&GcMK9B_;szoAzEGkVt2=}g>$;pRctf1<14%JVlNH{tIOP=~ z|Fck7Em;{c3YDXC2A3Anl?9JN1#6X+$hAU2Z=~A_CF-FXt?ZxU6xaAKA)PDOG9L|t zl)kKE*0&t{rOW7LPys`|Pv(Oqgpv={S&OS|E%Z=sj&N$Xrh_S!tLWGQ4?|_QlX8d}Ki2j* z=4Joyx|Dku?&c27omSu$IEE9 zLE2iVcR<<&>~puCnQI4?5jvegA)bs2$-Hj23jCo2rdvhR|@$JLUt39HNzc} zk|#+1SP1_OUIxDr2Hrw)Klz`M^1lh`d?9hSc`?1t;g1N((qNp>yG(Cmz=mO^WV!=5 zfLz>_4;(Ax$CDfu!ZcxUhLD~^@-}e05JRp~#XSn|-Kw(ZmCRof?9>j_=^XPTrO>3* zX?Lo_Qj$FO?zjOtBNE=>C~U+jU6MP3Rv7McY!@M=CMSmo9+VH?C*w|zO%t-Wg^KDN zHrE5jO6;ophK`-Qhv1!Zn&Zix22K(Jt{1OX^cYJ+qv==zcK7D1E1A>CrF4<=odoxe zW2;6{{uf1bCUq;u)!2}SUR1}T3zJjQTF1P%Y(U?~aIL)Y_)h2O6xZZoP9EM*|65Yf z<17%0V?F_VQm~&oqy2CxiE}kxR??9R0$(~`PY8U~1*TQ-@jRm<=aY5*DGc(87nt6F z){8S6mgR7+=%MIktFM0fvg-#%MKvK##3Velh zS#E8N&I?rb{M$N~yes6izj4gf{V3jAewi-d7=sDPg3HI@3*MDS5d7ALFn|)Oc;bq^ zq9lj33jD68BRIswFh5y7!LR*HI0Ne@M>l(c4g` zIF^M+>?-cXUc|;lY9#4F(P>lkyPkbl>?Nt$SE%iNy^6Yu9g>SzH0ciU=18lv<|vd zOp#QhPrU-ZxmA)q1mph;iI?p?JBv&&HjEXL#f1!=m~9|9-dwVUr0`jiI}2W?nPL0X zCkfRl!s%ZS9IdBD6J}__3=_xu0D5IkjX4v3&oR1R;a@`W55W;s8k)OoNj-115^p02 zj``T2>uOq451ki3l2lPn3+j>M4>i=#fJzHCM9^!?xSP@FShYJiM#zs9im#D8Q^?S8 z%>zRIoRBQeG1Q#*L{C=W*os22vQQ5R)w(1pVf9uVW0GC69~nKtc6&Wi^gJ{;`~}^M zryP2vp5sBeuzD8^mrhqxTL5eDzeAhpqj<568-MFRUvyh?oy_fh3!H}*sL>l0dc#XJ zeJ=@W$)k}wxLe9R3eSab7`U1`Xiv0HnK6;CFk8r1Z}w0Cj|()r}xf%IJ@1`b{L zb6?N5=05wb`f-QRbF-7vqngMoS(6)YPLbr9!7+3g-^h3GuP}M!qgX|Hkip{ygE(dF zfX%oUuU_#mR{olj)x$im-{gNIace0K&V(B33H)|fdMwLRue|$nxtE^J6ZpLcRF1E& z{Fcz1EsVWh@XokiB?x3if^k zx& z(8?~X5&P((9ecYewT{;hG)~(7V;?LTSD0 z_TzA!+}#G8%_&ob>`0PmWk(h8-0AiV9V-?Q9I-8%&dDfgha2!$b?>-$85x)B-G`Zy z>>uw_X!1)1Z*6ZUd3HIubPHk(&YSqRTZHU(GHwvU9DrK)j`N-apjIO zmrI)ULrIh2b?9<;Xb2h_NC)L9UX+yUFV=;U#-V&gaOi{BLi|=q zSCS9-+r2q_T!C_`exv+{&P&~hxc5%2-FQ)5xx7hIPIKbWFJUpHG5jRvei%YpMyN*G znP!5Lo%P9BS18@f|AeIOrb4l?(3>pSSMNR67wGvft_<&!p7bPzJq5?j>rRo>-B;+) z%d-1@bQxYaQpbA72wpifycVV19s(M)uH6JP__r&C7+Kogf@_qVcn8PsBKQC3I`9tI z#n1I0-RJn<-wN5=LW6hObC0UOOR7@chNt*eZYu3!Sejc~RA~R*+0f)V*8Cql4jXV$ zdmQjREZ}z7QORUyp@%B?paWum9m|dahYHod`y+a2i^fg~n&>g#7NWcNLP?1|6X#3n zUQ2SOkfFG98t@vguKP3DfACxMXDhdTgi{^>KM)phUOcE|_B6+S0Y-co%{-D=0EN98 zH2yJ);NK*zql{w}ROq$n?!Z3ij`}=SRWciOe5^*Uy&oG(@-le4N&k00 z2)0FrZP6d~h|Ey3IahEOD*v)1Z^s&rl$8HisGk;wFhpt$k@DAqC$fxsPTG@o%wc1S z1CZVkqBq5kluFgl1Ki#l)!UsqIAV(F;s|TqZFNd#Z?LmaVa{}q5c;U_aFAfvX@*VH zJxb_&P3YOMIYCllPYhb#4v6b$e|z5s(}fsg6$7Y$k5FR;wNH}qkPv;Ub0sy{0`}N= zv(Xr0)`k-OijwxD*Ac1|sQ_+CmY39BQ7D%Z?8WKPuyj`y`l|@l$An~E!GV&aQ)e|L z(@llw+1XB#r?hyJ&T1vy%Z!%)sD&8d#_JqDtPJm`+5M6-0v1{G6{IhNp5P5M^MjG- z)Y!E82CbTHfk_9dnAxkLJlh3g2_;&8^{S{;kN&3WYhTF95;Ua*I3 zEH2t5Y4xzDr1WUP!Bgg3L&g&v!Y)9l*|w07=^X`yHM>R^ymN% zov6p^b%g>;&@oZNo|3$Ck;j;CjQwt%?4{>J_U7S7FER;91*&*{lHer-v#8>+Mp1hz4B-x+F{3WTDL35JvtSY~ znv*bV%Qy9tshc);1#w*VQ4}>_KjDc|YFUh@V5^VEDlz>6SDAmlPH_Od1T!zgkh9U| zO-bGB;OZJ>6ugB=d$CUGVSRbVzNg`MHxJK6Y+qAG^<8ow(B<=6`JwMA=@^X;iCyu{ zi>rVwt$Cb+Y2_(>G#@b%WldoSKM=gcp*c=cbsy)sSlldWO^Su;&G)J zRlKGFiqo*aD#>fk63UQ^&-$|^6@2*QUZJ@M>2Bd0b4Wfectx5Qk2z>_M!EOoFK>nr zC(xj&hbcJ&E;;igCASGKL)O$@D(N0Zhmx4yD8y)6bTiydv!ZZOX-0D&)scy6e_;Liqha!!p; zSLOmdf^TTsk8pX~1uL!W0-a)gRim%mgG|ojQWRj9Q?~(L;hSF1vET6@ZU}N+D&>0l zvPi3NgOi7+R(mWz5dytGD3LU&cDTZ)^4eYijwNk*;^>)CH0p_iW^3`=L`GgQQ7NU!F zBS`~Wa%?*xWejboE9Cf*68uPx6CL(IVkl)8T{n#Nnht}LgfJcH3&3>-$AWi5j^5gD zk-SI<*s<2sDb{Op6=0YxzX$0qA)O1DIgtMhJTG`9T#kJj@Jo5cS9qNa?9=cn$8ZLx z?{O^ACyPO87w02WFTDUPT~3mH^_~hBhR9usW7OJYGa=nXaMjJf$+2?))ilSR^qk`a z1Jc0u)dVz72 zc6~|SQOC0vWe~swGad3Qh&=| zk$h9|#7}Q}w;Mg{-KoC~^*5vGXsM<>8jK!QsHH1dt|@q?dvh9hdY#a^tSzeRMceGB zl44f@)ojDR!TK8is4iNdZJQr*`O}1iSDdXTq`Q*jlXa(XfjkvXK+#&DV* z)hii>Y0EM?aRvW2#J`Q-OH#d$kobRXGuTqVNz}u7=vj+?M<=KFj2uP|F;7PRz`b@;JFadP`^p% z1uU{=rZW0h=;U;clF7Xs?ooh%b!cbntVMNloPJU8Z;O$n zLL@GKIBOC&BCC-*PN+tklL<;@YYQc{HlbnhV*h}#lY9!`%JI_a)a?xZoDStV#Q-W9 zTFAE&9Kbi(lH@idT@JRER8Y6lmSa1R>CD{PCR(nfIr;_}p*jrF+w&`w z^iZgGDz*YG?%eLU1*A8H#?8B1c3a#GKzZ@|;CxAL z<7;g1_I<&F^0vaeG$%Rj{^-K*IMzg z1jhpnYe{lY&}bxdl?+=6`Q}2og^+Fu`a-d*knbWS*b(0GEXD9o(f1|BM0>s9ojV3- z)Qcy8t^Wfg)$_@HNAODY9{m9On?6I=@{ui+%-kgGq2%r~+YPK5!)B_|#z%zsA6GohqWa-`8VMOuWfu%x7l zmd@iio^Vjv0LOHx#tAXB&jd-$szN!QW2=Kn99u)^uO{U5e;uoCB28tp70IrU(J>i* zLYP5A8t9@pq)Urs6rCLVNOF(G^BKB(DVcs*$fpX~ZbIBJfR=9l6g_@*xuh%TRkn1= zx`UED%duERlKVLMZp!eY#DOCu6|^bdnk1uL@EYv~Z$(l`N5q|qFG5>9F67n`)Z`&o ztC_qjYC!5z>=L_?{@1&km9x1DU%$nyumO36KPVqBnvHxE4|aOj85>F-^2_#6hF90j ze~sUu&ZN{CuMrzMUe}BB4sVdOz*NE)mF!=y{|&!I`h(D=NpK5M9wEuvHcxe_8ZFho zTJX+%^;rE|u{8g?K0m&t(4lPfbD_Y!m=s6@NFNitKqI;cYbASMAeWEguHbxLlgFrR zSq{a{o{o9*rOZw5L%N~fn?i-&jom{!CaJaAsggRV3{TQ&*U-Z_4rGOI*t>MNR(Qwi zYyL}D4l4?!OCA16zrQW`+&0i^tebW}UC%pyR|hLu942_W#F*nGP2(5*3%i^x zgu`{IY#VSSI7Y|3cBzlCQ)BFGb(P@#Qrl}JbuZ_QUn^djeslarpmXK7@2`)QA4Cb6=sSzL+$TE#;zR0F7evKdWxiM zZ<6$)JD(HUsY1QG(4$k`$7-ptTK30a@gB|9A(9e`x1()U$4F}FVN}O)jL!FV(}eNU zg&tPRbJ#E0SweND&|t(A3}|_gZI~g+i$D&?oT)Kq9EqcMnWQc@O*2#Ipc&drh3*YP zHcP0l2d4@phK+s5?cI_(cM8=UVF&D-@7#~{1EHZBcrj#iouvFp!C_sSuaogKm@9;z z3K_Of`IOLL05!i9&VE_&ULV;!N&TM#OraK2D0>(DK}Z=x>%5QjN1^@~$-fBILWwTA zu+U%+)&J13c8ny)O-`01gBn^aE0ik<^$^Jwg#PlvXI2(ESWAv*SYadW;%+I1Qi-9| z;GQV4kunrdm?RuLUZ^()pAsC^?3hg@bv7fpCD;bwyjTe1sp<;#4nn%M(Az@jY!7x6 zJUgb}N^*Qc&y(q6RW*IV8#AQ4Npk4ta(6QJ6ngt|44cc*)XKdi71&%3YuHYe6xWPm zZar{}kRHLYBL&aE=^rnt{2IyQgfJ{LCkgd5A@0P53D*0DP+@}A=LijUSoSR>?6C4& zfc53TPUWSN!WBYxlaQjRJs{`>9~I*ZUhC0*pA390UCgrLRwU*m*!9xfg+v=w&Jof_ zgyI441Cl=kKM}kUZRh8bnrFe2Lhm^;o)J2jZ`sR2`i9`xf!QmP%6R}KZM)9#jJh;b z*&l@ZuR{8k@R1J<=-59cJ@B5;$JWc=5n7x&%|b#i70N|~_QOJ0T=3=;?N~|mAjzf3 zz}Bm<^|F;oV(@i_gl2-!rqu>dW_$~S`3voT?za)7B((0d* zIwuRg4@tLsO-PUCy@NZe#N_PK#+T~}J(_&C_Vph6j}x|4vf2S0B*fivk0Lou=$$TP zCky>EId+2Jz>l7;ICK}ev&p~=?VT%h?gjUA3-BrwG(@x`S4Xv) zFw!py;VghE_3oYC_oj!+$PeL(rU@DKs5jD8NGQM_o=+*eT?%U#L%8D-MoIJlqc>75 zT}mhsfx=LYdO7*+lqQ?L;BDR2g>OcKIlt`sWZ{`PaD0%R>3APz1qtyXV#p zW8%aB6f5fAD%?c@Ur>xbf1{-2ZycM>^KPXd3OrzXwyxsI;VA{Feo4u29asLHk_CRQ znN?SleIR<2URtu15ct*3Vw- zu)A_o`k@2Ia({0tV}SCUWA8f9YJ%~UU?U}bT6YWPVQM%wUw%6hDmOmhIsDt(T#6d% zj$+MM$iD*k3jWBB5bH1?$)P&AI7!I9EhKm#)BA+stND+sgn$>(zQdZ=O5_=7`=_2G8~b#p?~B#$F8A)j}kt~YhPUG|3c5^QRKMM zCVkVc-^R7P4UD#cy%vt{VlIw2$ypTF3kK`A>*zBCYa;(c?aF*lll!0g}QU* zx2N`=F51 z&s)H=O?Peqr}jK0|D!8=)OVe!zy*qJ+(Mf^*#FsC?FvSx%ORdV=%=QawZLF8y{!M$ zMIH80?tgSqGxQj}(_iI!bd928dYB}w!GCl|U!;t1p%9(WG~4B69J^RZ=?mEtozNHh zPo8K;Tm9cX(J%0CBb^mTaP-Q~l#a=$|Jkd~Te>3-iT%HOo#}+Q|B(z)_~~#se4n?S zaxl{9X2!$Z(!&V!CjNi9nduuW;AZ}jk~wDCRtE^3v8ssnE9dJ=%F!?0gL^ur{g<%d z9d^58NAgKZdRAg|8e?`xFENJPKWuE@!YP>82_{{13ooN&G=P?uRH2`Hn0aA>(5x;* z7cjQ6XRQsRxT9BhA4$nxoU)%#VkWy;^rm-Kcr{h1gYs=DC8KV7_lkPlT7n7Y);_My zps`NI>EG<_2@H{h#dOTyEgvh%3-=t+#&f|umu5mtK9U?#ezquSBZ$;MP7TB)G>sak2Tlq(F0*oh^70 zTmCvpoIeF7M7pvb)w?*9SjhG%cm-`{=fFH(1ns^%?q2llfLG}R-9fpgP`UehuB3(r zEprF;HzW@v_d~q8#RP9y;Wf({#nIi(f|9t$NdGc+D6v&ix{TGMf@2j|4@&C&kYjxF zYEhwfXRnZyx)3hKv6V@#B7~7nT)mo-olldCWnNJdGxyLuMHQpS{f~*4NGe_vV$|Ku zd0{^iTm+``HsTfozu*)ss0zcYSzJ<|a@BJcq6`h~ucT+JCbZ7^KIHDFlf#~pTxb%C z%AQk%U3bh1Y01vO8?P3Bgvuf z1LZVH^}>=@B*h7~HkdKSns>>i*e3TWnb6@)==vslIL_R|Amme2&kOtn?gkmb?lu4r>x`bIK+;FPlpc2mKDNsLb?(XT_Xq9 zNme1bI!P?XId14trQSOvbjih94_LHu_ne)O7;4Qj5fTsZMuTA^#D zp<(uX%s2z=?wpeK_tLU7x?97&XA4BCR5#S4Q|G^WFS+as5s&MDs%%9D{$pzf826D0*y zX+B*@alwWA1y3JMo+RTjl4w>36?6=Uf+n?3Ywyil5;ys&l5y%9UbPavo1k}NP;QiO zK=~Hqklanf0`O$ed_2d{%IVrdIf)GPbFwbL)0Uv56O?qamEiW=G2T29TwpVJt4h1p zY%?Ti@5(kqPr21O{O=*)V8I(%dMc~^X0=^wSoJZI$wqttH1&M+bBb#AR%rQm_}?iy zmLJXcxKPRV0!e*Tu2&g&{dDpQ=gs64w5_)TaU|3f-RX5`-S6p?@;)Vpo)tV{Z8JJa zaZix9IB%?OsKLdR&`EM^hjwX6UX9QlM~0Q#1W8^@pKdIvvm+UFbiyt|zB6cqbYG$K zHIgR_j&IgZCj(WLUnqD6PTWY4j)~Xh$B@o`ujqP!ID$t9SWeK6#tVJHs4y` zqq$7d@ajTJyINwL1k|DJjh|D{JhpD;*W0&;k-UKaJ(hnvPPpy_j$Nc< zVXCAQlcZgQq5ZBf7FR@hrKB2@Bv!E3mCUe4>gNQ3264W4rE6&lx~V2yz`IT_t&uN_THb=~N-J&Hn{S!v_fU{(@sVC73fiOcSm+QAkc9!(L}>n*QlR zI8A8JCF4AyIbSHz8|ejtl}B==qo8BL z?{3U7wAr+cguwxl>kAHtUvDX?yN%!p_uXwJt%9!W;X|?ERoSPCxz*WOXnJH&f15od z<$DXsK1h23lwcggm?|kdNSO0wGH|X;JXVNXzkO9whLx5cCnUo{dy?RxfX)m_J?(t_#?8_P^w3NlMQb>I(!fQ}u2)jz#Fu0u`oT_huot)prj` zG_ZqeSqvc&PhGB)D#x9yTxeD#Q>hCx< zUkHinujdKo_-S%1L5~=FwN9~=lC}x+K}qe>f)@!CE0Zx^a7@5_NRl^^YSxw%)&=-! za?FJehM_lGDYueTZ%zj7g2#0e#&sP6sP0ShilAy2a=$55hj8p1!LhyCGsy7Z?p>0G zrwP?;jvXm@aIJkzQZyi+K>9U!U8vp`GVICvFMimgEJiUZ-@;>N;iz&iss178g9htXM))u`nkuqEG8V z+x7(|6Ku>3%d*ABOcJCCLXCNutRi^$wpvY6AEPoZcic>p=NKj*k+jrKLb;ES?*K1 zsEna~l}vbbae$GwJB|*2mt!=Vai!kxmEownaU>Xh@1?7=j?@J@=Wth45^qcN!2w_H zZzuW?-UnuZAzf?`FFF|FUIwsktjN58#5bO(+#m)mViC6ko|Z>-#< zlsHaN{YgpLMnbc(P-Am-KEpAbM0W1wdr2zx5PF_wdKkHMI2_o?{R%%(f=$z2O2!>R z{<@H0gB09k{)*r|!fWod-ILqJT6e&;I63VaC8s}325p}A>b9NTF2%c|!N}3~2@g1Z zrr^M+?RPl#jxO&B8^u}rU9VI*j7k?ng1MJPg>Y<^>GYX8yD1rGllr@XVRvtSs7qzs zi$7!PR_I-RgHvK%z-u+Im*551G^R25jCVk+v9y{oI_B*STkMw-gC+J;4wDpvOS+4K zybP+O4(50la=Zo(^ybxK0XIPh-R@1Py6ABS?)OBS?s9s{8Wma7 z?=DUj!tFv_gn0`|jQ7IsMS7$uZ`|)M)(>9iSc*z|yB^g+d1{g_)E&x8_f0bJJ#<#) zJYR~sHO%d{+_*oA>((5uXIJ)kUzxg}(sOmp6`R;ztr##CQ>?=r>#*6MBvzjXw9+|} zhGz>g_%sGuI#-ChOJSR(^T2BW(<)hBw_zK}s~{3=qy!tu8&Jh!i%nxoCf$czEEz9d zh}}6Xl(?NdhJ$xlNNLYKs{7jK_+6U!INO@{H=pX9qA`;%lDihk7X^7v{nUW^rsO_N>yAKGSvYy`0vAII$DWRlS)X+xto)_8|!F9So?EJi| zWEX$LtlvtCbA;cMRM8Cz3`Vr{g$8Iadhe5gkHSG}+!sp6E9r;{%^FDbY#fBr4p=YL zu0O3~$=2lJY)#!+LG=|B!VZOSkV4pLog-`Ik`QaSb?It3e?{#g)qe zN_(GffhV;(fJ}e1$gii2n$Exr8wrE>S<6bOP*wJCRQOp-DugGOW+N5C+mN)_@-4Rf z;Gsfr)fkqPOb641p_7Fa3qHLFoF`P+=oRL9i)Ef;qoiR#f!Z!**}!O?RYJwh$aDw|AB^Vvx4`>0NocNrHNHoQVppm!t4f z6kalwBpNO(qGP$9KufzN^=R%26m7UvXkHTRBnq#RyjtfaR|xreoN_N0_^u@Tf^5u| z_=1}6k$az{6q~TZ=E`0b64aarph`Sr-uA*i9uJvj3+u}1BHRngEzWuBaI6$!EKFQE z`2 zmW=oTD z4yQaWc$X)Kd(2S}gA0?93O4AQT3apU0Z9An z#}jOo7!C$IaklF!#$x_;C2cW=OF4zg=}0h+NYGF(ZFvk(B^!*692?1VCDYd>71Y7z za$(lBLX2FGxs|y#-YCgYUp&n;IZjEhL~@n1+jUKQ;kA;YB&sjpR~$TxYU5lE%*#W>IIxV?wlZ0oFr14^UIu zUkl+;A;Tc3sVNDyq8+IVEnYwG<>#>UE!Ci<8gyyn+b;@s#(54);#S;URZ4bywUEW}TN^HB9P>+<;7H^ar+?)p2<+T5(q(0@; z&8Jt)wX}on9y<0JifD6;;J7oMz(0LuJ+y}g6H4NY1BEAPnOe%Eql?8-H&03XP+Z{Z zH<%LEsC+*kl(Ebjh-hcsVAxed>e&;;76F`trSon0)ZQ?9_EYS9di z%;Uk>4y{!?nMB0Jqd<&iD?vkgTx+CUR$ScR=1^7He z?iRS7->nM_^A3i12V?l%bU!Zj1;L|-9eM)+ie-D$h4mJQKE<3 zF==VGYg+7foZx96Zn0Zh?Di9a$1Bo}C3$Q6nUl!)l+bJ-cm-azsicyoyxLAkyFzCR zu)WZJRw#BB`gn!hvbT&#IPSEg4_rYTAA2!$V0woMoufGRRiW^R1mh6y%Cxlm&FO;I zzj^c_#eq}NsY&V7xQ|m_$g%T<-W5W2u@LOuL2dT06FkYpeVk^tlI>if_n^=`C6w3) z4td%8m83YT@EXTnC-+ssb3WbMY2Q<_!e(gENFf)xV}&?mu%sj}7D~wnvOYuWqQ4&_9el=-eYeEP3nK=Asl`tM|HuG;8`+c9=!rKG+4Eq-NpbeaK4UUlw0y}R^rdh~JHVZq^`J+HpS zE^#b@&WV!jPaMSO>%|={W{Nla=|3c?^DxQ(64KL<(2l2MLfn~P5xvP5ULa#dAzNAS z1krq?vy!huE?ty#T~5KU@dS{bb$d;+KVai_n-B@KR62%gb{;tt;;_iQ2Y zTRRo$dLh3B39GNU4e9&f$3phB5Pk|?;27FF{iQJcF3D1#)_Y{MYe>o&zOdD2x8cBm zlF`dK9x0HEh0@=NWJ_{au#1pSLE2MD4?+40ID#Z2At|1n_6tI8&(7JBk~2tNj)ea6 zHgCyIB<~cm`;g`U6khKqLjHu%`6Lg1CJO;2=nc>+G+}6j z-gbg@q6bP#>{CZe@eDc#N*VqU$DR=492+Y)ELDf&&EHVQJ=SL1QuL^P!#hi|_qTTx z$4=+u69mtK^W5&krYqUtrgwOh^hrtXU=6sw{gRXIX2Id&@awrX*Q%WNagI^3lkJeu zO>uK0G*V}ZkTXJ*SSe7uJ8uaNK3!Nx;Nr4wuiufBpeOt2M6Vu=`UXzgw>^*lxG- z@M_dyl*ipaP=*6QWgk*9b`X9e$sN>TUX$k|<)7uey-1>g^OXfhNh{9MuX%Cm0FU3; zc%tSN^Mn>-r)IuITIsx+!rymW`#4wOt~!hgdVOP5X_%(vGu*-A`nTTKg}`faJL6a? zJ~^dd8-vlGp$jC72o7J`<2LH|^>3a5I~bJoztwbLQXZk<5&W{3vjW8%)!xW&%;P7I z(M{Tk&{DiBN}UJ7-2?K{RSyFWe@7YVMMB_vWZ2_gjOGbV6>j?e1N``Rl`-i`!BeTz z%O%a4r;Gx%>9Gm#0X0N9=shB2rwU`SxT~8b4J@m>$~P9$t`K^{U?VtsSBXb`2(vb$ z*BfpC7^$9>Pl6d9@c?kThxO? zCJ)mHf9nCki&#A;p`^UT;76D#DXPF;mvk#6Op?YG;tffOYXu%s_dbt0pQps!ijDdw z^(K3KsB)SxN_T6|S z$s>yP*epzOtZB+U=dSmvlEp0~-94lg_XY_Lmo&@$LClmma7|MlD30|k!JBLZ`h#|z z=IiRl^9=+qzRU4}20LM|jb|t|!Xrdf06k zI~SCfoZduzl;G83!AkWCB@-rpPf1sQz_uPAzLRo{Z(j5D%awHFLnuKTr1rGse0a|riTgA8^X$V9 z9R^MZIK;!(h2&Bp?h<_m|29*}0W^aHDrfg`-aOz>f#K?agyG+N<=)pkpdRcz^WHU~ z!;4*m7mHaN+<`_>q?O1H<%*~ z%oZlykAy;L9v8w~p|VzaR#N?vV1-ii^>Y+T$%nV=Ipyo;j|y?p-WYv6x0kt#0KM5M zEAT-XaPt^*J)(0w53izq^V(c5Pt4Fhbx(-P!uOWs@GYJ^SL{#57lkIy zbctO>QnH#*Z7SGR?1>493ou4ZUX$yhY$FB>prIS&xtHN2axt0gD0_$oXmCH>bLwL2 z&^x%Ov>`#v*x=lNGXG$z;y+^G^MWoPpPYuSK%{p6=fF^3un7RAUovgWQwA^LOhvJe4cIT^V-t_Y4d!nekd%# zuVGN7e-Rcvp7X4mPDVme*k=@NDF(TwKc-_Iit={K(at`HlX86bg@SrH zjtsk++%fqX)=lp?Wn?D^^?BfYfE(N!g7wcs`Z>pNWtYz*VVo52NpiFJ`$hDC^;p64 z`TMz~YDuB|2pP1O`O<<%eI4<=T7?YCbF(Vant&!XtRoa_3k{8HI!TBg>rZhEyRO+l zsJ0@5R@W2wGrotnUTt=e6Mi6$&h}+InM-q$#t7RqjW6P;k7t8sA7g zS8!~(hW0#tmSgjTl9Cf=fc;vMgVEPC`C}>M%g$WYiakh3BWav#=oS);plPoCnOc?2@YGCO_Fpn?rn!J=x<5J zHi9F?)!RvOq_`f%J44-6HWzSed(67tL(=Gkdxw0h57aSFxUZ)oF#&T)Ixywo!pvil z@N9cUWX)i9HY_yL1-o)Q%|1DSW7rnOnSy87*XK!!lj|>%WFL2F%j0|{J>G3ccXpYQ z_IuYi@E=zJ?2_^xp=&+K4EuU6$DTsMV5y%MvKIu;rmtR+RKCWsH-+MLp~CN7|5NB< z$+*8|zju{Th3IsZIKRENxkLeY=6tr4qzsEEqb2e5`2zi1mqIy&gpT#}`FdSRar*ow z} z_>$Hj(8Vja5E?pN$uyEEs2t&mm0DR4hjGRuSp9Xw&R+CCbJ60*LV~^u2axd-l23tyb!)X%J&G(nMF?oK-qYj`OS%TV);*t$pK=W4 z=DvYrAys!M!w&4^K~DJzK;d;!cyZbF_4*HMJx3?^=v?|&&SS978mc(zN$v%9 z~LYs z5kiT6&c7z~P7?k49lH5ZrYam)ryk z!GgnLA$V|?g%Cn;Slkx~5S%qwV9|WP_t)QZFaLe=bdJE<&Pj4;KqrUk9ID zOX+pwT`82;AkpcEtC7YF-jg0CN^%_1a4H3N0JMQ8F~eOX?*M8$ zS_#*u(;USmM}xzK^avqGC)dYsA5Xz?LO2nrmx5D~P7}PMHra#Z7$Ka6bS5}mh|Up; zkwU!??R-f+=L+F+!2u6y-F+2F6nOYExSAwd-23F}h((u?yi$lJAYCJ5HwwjdNLK2% zNvb0z+$t%#nF59*;aZ__H%U}}co2!{pKKC%h`c@vAe&6y+$-fDnPD)>wRJ=#t+d{z9sArcxl;kO< z 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

IbJp}ry%Bu;AMLwdV$T=gmgurJx$0r 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%0D9g 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%0DX@j=QGsZdFK^1j!$dmdgP_gP zRXR|S8t-mHkn4e80mH9voqRqyK~H*M>rH*r##~9GJecr=34HG2V=Y?(oa!h0!mD9 zdQ{>}K72`xrE#D6BqSPgYHZbORZl*ms&XZ&PR_(=3j z3>pr1Hf>`93A6gXT=l zGg8iw-mYEScs}r&5<=e(SvF7+(^WjwWF%1+dNO%=rX$FoB^5`*Z4FB9tod+Tq^=y} zl6OQ!HyWzb`%CU#psBWKX6_Zfx7*u7_hyrh>pn-F&JOxC`Csx?(`hk2V?0vHd(V6B z+Wq6FNu}rX`0*y~Ii7$A6_(V&!^FA|I)AJ0OAQ?&@H-~H^Re&;brAr!Sof$YD^j}y zk4YXcJqAqTho%Ue7dL9(sP1Uf$VS)&Uw=1>6)0AqZ`m9(hi>nuon7)4x!=Qc19yWN zVr`$yzCkp6r;?NxUQ-)-jRg4m`3D03Zkw{j9r?A31sQ|7FA8u1pQY`(4Moyh+Kqt; zku#ZIUYtcVCORI4oV){%xU*vubmh3Iq=g`oT8#D=ko>_do8Ijn8r@U|t+VNMPEUu4 z)+bzzAkMw}mXE2X3{919LAam$$LEXn!GNqXZ@?v;K^!Tk*U9=arp4ZvJEzmZn@e zv#brXy*i_dJ1LvrBXy8&py9_qrot>_3MwqUb&m9IQ~b;#oN&{~xZg8Oq8T^$JkR{Y zb7Gxm58#&Vfi7f$?8>>33bRCVUQR>ERNMoozkD9Pzte}e+}&b3;vxmYw*=WS_zuKP z9~tJa>b&HGk>ugN0z3I>Ec1G$I+=ki=E(D{ZXjM&bpv7i=+kRm#VJGg@#D-FobkDg z0sio=;_T>8J&xfw(hYU~T9m`XiCb8oU%SdpYWN%OGvvkJ=p3RId_gxtC!c=9UmEb- zeyPi;A+v{*7pKDKu?E%W8@bT4-MIMOS(MT*I9qk`fE(!3J|yM+YtF&L?qDoNIQc%( zC;OXV*vnF1CDHLt9;=mWBlXp_^h5q}D?8r&nt66d*?bh+FP`O8MEY7g^J|NLT8VQU z*!}IyPs=d@uIwhhGYRZ*weq;A-~n>bXyOFr)B?(z z|6PRai-aRXF2Zk+QqHN*75RBX_o%e3o8K5?iAiCS*rdXowUu2tG|Vb3yFVzetI2ih zkNk*-HuREIHkV^iawqDabYNSe*W_DT!SG&}r2DvbiR&NVk{`GJ?3*6~9m4x8JybfW zmC;bFXhvkBN1?Qgk37i#{^|GF$~uTUnAC6u9@SHX@Ij#UatA)A*gCYZw>2&3U9x4F4K&OV=|^U^;z2(l*i|c|7i+>-x@g zKM!t=B5Abv-s*bc*Q~EO2V<;9tS;X)h@6A3zuW&S;AdIwA(d&aam2$=)-7py>g1_* zHyU5X2sFzOtCyw2#naH(1-j(-{FT` zvAHG9K*%Ibfx^t7Nm*=8u|&dcp}}W#EAG?JonAOdxk__R!euDJo?lLJoiac=+-lUl z&CGsBF;Ez{)1SWLD%JW#4Pj%zbXhA|u~PY;Fx@FiWVA1FP|_jhwlf8>TZf z!@UgMG2RJy7`slt;UZk%PeCtBt)0C1X3&60a{^g~98d=-d2&CM`t!Ujse{yRz9&KW z(rFhzZY6_KQdb9EauF-}bTF65K}HDNV1RTh9zj?-e@#zre(SUeXW9 zRmF*}KwPrx&R&voLE{=~8SgF$%XpN;CUGxbPLNvmRD5w8O*69$^Ct52&H0wY-6wWS z^@2z0gI6m7zj@{3f3C#ogSPt+g2GbScADHp#n<7saZQp`{%teah%DSO1|lmlZ_KdG!5IZhdM*d2!Ma7 zciW_vNbNeBYr~3CI(+w%JRGA*dX}+EdY(6imTmRJ!syqOlFF&v{pq(n0a2Qige~N2 z4b*D9<*9#Y9}1mX=b&OO>id+)C0}&Vk1T@x1s!At8Ja=Lc5|(bxK7+~_Jm+j6?676iTQXL4Pa&!N z34zxyhojYo)J9}}*{8`{o~Ca(5Ik@5jpFUZy1_xj~L_M1uE2ONjC_4iSk^$ zMrFI@+-6P2?Vb!`oTZ-kZgyTe)UOp9wW{CdY#A7N=xr7=vpELlGial&4NpoV{{=;`mYUA(4rZK>k=*~{t@Hd)l+39A1 z+>Nwxdo1S*Rq)L}RA3ji?hbL6+~OltA|ltfqguG7IRwqouc8L_?AuVTsd-b#3~6b!U>#6i%1Ee9>re>{GryQ@ds+x zCAWFo9_tNyMY7j+>8)(TWgYXei1C9CGV3m`Li^eH5p&BHsT6n1tBgXUsvZ0 zKCRWLp^0Jg&lKdHLkV{r&=)j+L?(X>cp>taqN%FIN#&|B4`f4Yx6Zp4T+Jc(pBV-vYY8PQcE<4+PnPf^`4Yk)k?B z;C7TCo(gq}Ae<%0e+qR4)U{A75|&;TW0fra3b$LJej}(p3H224yujyJ`u~9P5-}~J zvZTsZ_Xd?UL=7*1%14XMqQEPK-EYJ8V7CLl2YgqM?)3;dc} zehR+l2x^x>d5QgIQR!BsxwzdV=sboS3(cLU1^F|Aj1|i8h9JFJG7okMeTA$h82PNg zmM6cfm8~MS^+nviEXdXtL@#T9K~#McJPKfA*l~i`hTT?BOn@x~ooxi(+SKZbs^2b1 z7a1(5TC0y2lv@dMEEt_bpr#Ar(E?8Ze`rDbTRi@Vo0X27Aay~F4%=H_Q2h#S8w$#; zVL5`)*$%gf0?%>65AmQ!wJrJ>m_2}(k#A`W0lgxAUTkqKacy7QQItEPh3_dZiEX_m z@YT?xvGzJ`UV>u7F|xZ6kBs?H6Q@Z4D(| zkbx{o>qke+BdNaxwi$ADh9aBfhep)nJ)oiAr;*9(s%-^>-dDe>=xhLu7nOOIB9lOO*WPzyxP8Qt_`*z1iW(FrMx2^76-aT zntqX8OLPn5%sR;NirZ!hwqr^2s)CePLyyngrk8y&VOMuEcL3UISx5-E-oX_%#L_*V^%}Qx|_YPE%eBP;Y&)`Q%N1 zEf1+o*L}-Zml&R^CetY&z++yrMY@Hd@pL>m+(0zedxnbeLkw9tZOwy&XMCPB<@=G; zsdx}KSv6Kxo|Am0hAu;;bJ^Tp)+T>xOvWDOM(r`r?a%D0WXL0I@;Fy1XTK0c%A3u> z_Yi*LP=T*-a9*U#NWbNNS>7$bNwfZ(PsP$XbQ7kbo0+v zkOsQEcU=00wT$&6->_D0E2?&>d@U&ATv6dVL5GFh;!fB(f-2%`I(@;<7}(BQq7+qM z5!l+(dsURLVU5=)@QCZcqGf5awk%cR$ zzFm~^bR&UVn3oLP%xHw^;Xh^$l{;W>7x==6IeeKOLd&=Bxs69YkMHUAP!uP?(#*W! zG>x@Qf>&xDjSWkz9FyoT$Zcl%(|K>uZ`X>$s* z89?u80zL$igv_q;NSE25ftHB5lIgJTI;dITVFRfBRK9hlBk6&Jjg@l#V}W1Zj{C`@ z{-nScT-WHoTh9=*SV<~rwvFoqV~!WJFnQN$r*-T|nS~{}s<3gf&Q3*-mzF*jRm)jN zq9O{y*_@DOHcU(`*Jiq#(h)0`3}$a2lejh9#mSI&Z(B2}GL*LmV~WFhzvFP;WA$SO zzv~@Q_VDMi&D`392>8i#kbE%1aE%Y;+K2@YBF&#RHQQCGCfZf93sAsl;X%*y z)*J_(iO5Y>VuIuh$GL}I3OJv^HD}jf&IlVAVe>7NfaO7w&nN`FQ%RH@BvDEoShl+o zD^Dva2e$3YzdM1(@8zUn9fX|}tvpB&PA35-PNfx~UyG_C9(=jqub8yvyWqBk+{z6| zz7+V8)0}3JBSlL})IXf0D9oA+{u$$-+2)QaYIQj!m8}3Q4-hWnh8$mS?wtC|obIH6 zY?@NBn`g)Ufrm{wtCB$fas_c)v#+Zp)fIuKI+a1RJ)y<|4(F`-NvM=bJlr~+l*iRJ zzu{gs?yD+-Q+AVb0w)q<>bqp}--7&a3R1iSpc!?jgS2~=aLWNMr8|UEamt3d_&Rx~ z>>Su*<*Ve;+gFMDS`l9^?r;$|kF`TKl8Oss$}Pf4J&s4yH4f#J9nHRu(MJoiL~;)1 z4#K&zS6@oM=JCieTsdP0m18%j=ah$~^pMs3rsBqms>CTb>#!uBo?t^Nci5p(Us^#5 zJREK`$v0u0yg$@5*sLG{U*B>jIv07woD6D^$h0sv(c!Z!@O&$XH)dQ;jdh*waQtI_^>Y zxOE0+!*2fYF8R*R8ihFy%2{)Jc4e=MN9m#t!VTXo?GM~cIZ@Zphr}@3B#0@4lQ%dU zu2YX6j^)yX+m`75MHca4uazHdUWe0H#*OeClEM6BO0srJw0{i=#veN6* z>1kSzZ)(rBEukJcsbLW;1tPItDNi7>oAmVzpKh<)55}hi@Qs;6AK9);>j)Z2(THf1<9@fm_def z6~v8t4D-g?F>>?Q@>d9Z5#%?xp#gNMy10jO8qgxc<9Iv){9I7qUT%J*u1W{XcO&ot zgqtYHb_ezsq{TWkqwGh(!2r5I`~j4WsK}WxpE~xZj&y{b67L=VN@WHA7dC~3^xusbVhT3c@?1_TtYGS68qjBd`gIhE6>LyxjnrQi6~}$h7uvQjReAw4 zP`pv#oov}m#cjhy5#|W(q2|5pI^EmAB%C;V7F6^}1s8&LrAJg8UBL?#7o{ zuU8d(-)nB2@Gf}-T4KhMTI(LD-vajue3r4#)Y3Nv7k^Ta+P$!-l51Wf$RCG&LJ)rs z#l$3kUQo^xG?}90ml5udqB?Z7j2Wqq6?pGpU~U?o6O7PJ!;4TXSf(wYm&+}?5|3Aj zc7>?&by2?i#8R*QfZTG7cJUvA?AKyP{t9)3sO+BvrVFKu^6n%s%3X$X=gSPc|Al%F z_?N&>>}BtZ%C8b+Bg#v@5E(*7_=&y#Vxqj#;5kJ08GJp9UQ(3rMNFq}5h(F${bb+< z8o#cWG0_eU!YzXvdQ)f${AfqUGD7}YfN6LbEyz|DM3xrv$lE|mP}y7%w}jnFVC60!FRHtRAZ#Ou+v2gQAZJz37OKX#aO>iR zi6LziLDBSW&i(J=yA!Z8upJ)X5yb6bOW29P?y$QE;v|93J6p5NcfjrYz^;Py$lpGq z{L)`Q_s+0t_%7CbFHvEC*!=|g0lZgKutstG{o+E1H3f!&-eg#}3$SxCv>wsGY>D2jbQGSy!zf)BAW<2f?qz%9~ zK;4bUTtU2FkQTHag1t#lxeMw6LH27wxDV=HsNV=0kHJ1HNUs?F7V39`?umjlNq+>l zdj#Prs6Pm@=LPw5urB~lz&|wO#7GoZ!~-K>WHHgolMh42NA=_3b8^d?f_z{#Xs#|ctc(Z8 zHuE)rHDNKphR*{Gz+n}Dm5Z>BAX{7DOZG-RJ7#^HAlp=s7lN=kur;tHu#F&YC8&H; zkhfvK4YjQxYzAxr`z@dcdBM1y#R*pyRcqnd@1ldo3{a}A2i2DedtmA~k zfP)3T(%H{L`sRXg6dpgs<8VQCq#zyv9FN;Eg78y8)(6JpHdPR(2*PAR|3pFeWI?v8 zAf6=1rwhU~s8et|PB3zUAUhWJXsFYmP8allCdf~P{iPtg05}sk12|WZp96KFz)wqt zvqbsno^U>H7YVG|=gdFiWxy;v<_NkoVXqWqR|A&_!ll5qz*T~HJ#dAfIUBbd1o^LU zyBxR`_D0|u*xLl%iv`V_VXqT}JAvB;*<7gmq3#f*rz&rPx(l}l1@R$4^BzHX0Qj{a zyBq2es7D3e-#|Sshz|qz0gvJKlpwt&bT4jC!af1@G}H@Fe-vcDgL)C_w@}Xr!b`w& zz#jzJ^Md?k*k_?$f%+@d8-nZ~z@G*2RjAhm;oneyf_f8b9@O6j@ipL|u>Xa6OVE55 z_I*L|p&(nJB9D)uJ`(uynf!0C^MUt(s)A%ekS|2w3h<6R(q$M6!Y+dEC?FH~Nq}r& z*hK}MnxMY~9!m+b9BOevIzqZEZVf?gX{gTvp8*yV_|S7Y4!kn#lE89;d?jF2LGAMb zzle~JhN|Py6ogd-*=oQVxQzk6DDZ=v@ymFuDTr$Ws|)gVp}r*Wl@KHALwyCeF9^KC z*4;pqFGSBa!EFUW|Eo}i!22Szv7+KyxNR)xN7%0c8{)Ppun{m$(BDdsZ3(o2ZGmqH z;sinX7ayPlTLRk%vTp<56jZ(iH6CaI-vPcS@XcD4%|wOGVS9p+Ed+iDG;9a^UD%(K z{P#s=y9mO*P$%OtO%M-+Jq`8@LG1)V_!aEUz%7ExWP#rW^^>6a?PAll?>~lm7`TEU z4*|as_!ju=Nl{)l$zH{hYMQX`f{?U@H608fiJ=Ly)*Gt*i!@%Q;CmT6gP?L{En>MA}ZV< z$XJ5Nj)9#f$nOxe*?t!80&WLx75sj#pmgYu?jFo(0p1@ z8!ZT5glYNro zvh4)1CGcM7+Bb0f9_+V)d4k$RL1i~Vwv!<4E(q5P>U#>xU166%v;37PzXg`NDyn(@r|igyYOKC%!#7KN zpMD=vTHlAbQv_WaoDHTnIXabKMoHM7HtNV_5NoetRO?jN$T z!M0bk73^l^`M@mT0zr1Uz*qAZi<1pTrZ(BA(+E?Akq!TNsw*6TUS{Om$LQlZ0@3?@g z#H_=OqGdZ;&Tw2fWr~${l|T&>t-#hXXcQ#sY3n3$YtJc&Z?EyYrLM%L^~4oP ziXi^*O{m4Fu#|hGS&JanL6)UNHA^^tDDCK>M1JqCV4NPVAGsWHbBeCUssU!eWGg53aZQT&A$w63~Zue)h`uP(HN_YwZ3M^Co(25#MBoD zkVqLlKHcYbf#Mdk1g&|Bksl$CVsEkOKIAQxlvnFBD-&-kNRI(L9g-sVM**&JcR#n1 z-dS?X&J@(0=h>nf3zNy5Ut5h|TVCLMd%CoCzdTW2O25{4TTrKBTa0BMqr5@1qg_Xi9W1vWi{osJ9ph-qGlI#k0%u$DH=^Q3)RYK zRZgUL*J>2OdD&gQ|L517o|m>PD4K-xPdeOO*rq3dq&ybL7g2gOW)7YQbm@)mOpa!% zNjO)8H@ui~cD)`tmPDQWn4J{YTPwU=Z!$mWXibK@ z64oEUV2#2F41e6Cfm3mi3C`6Z<1?W?8RXPAG`R=(CnFwC&)43?OK2qsquT4DvUde( zhYM0P?jy*t2=`7Eq*DgiC)3s!n-V|9V=|qw4y^HMnAjO{Iy4f6@!#miN<`qO5t8p#FVTL^wx5tljvGqPM-33{M`} zs~gDIXMXw&JH80k=jnW_Xm+05(uo#oJnb@bo>4h{U3It+YO;Krn1yRL;GhWi_f~aA zLR&IaN@3D{j8BO25?#wJ=dWUmQOZ^JiKy5V<;ANwT2x?YD;b@`DtN3R$Pn;hJ*W)@ z#TeM}g8Z9;_-$Zc*u4bVv4SuIH9P`iE5pK+c^N%yq0Zqu6rB1Fl^b96)GyZ z&zLkmM;%~rX<;vkEkPA?M-AIUf3hIFB=G(1IktlEvYq*S^CfwB;o3V)GxWbY^Q|89sC3tX zb$-HG@voDV7p{E?ujiN1saO`H_W0ylPS(1xCGxaI%8k$K$GxswMSOLLmbMseMzJt( z`dNw2i3;3%M&Nl_wieXxf-X%tr%SpchP&{%N04^syU^$9HzEry`4dVnVB^VmBgU=( z^G0ubtI*5x9{`66>PHE>$HAh)ruBWg&nfcxTewv7#n!EAWzmADk&C5oAByY|q9l?1vLO zb!DTVvHH;%KhWWcPGS4iDCNFbh9V&5`ZT@lHbJnBVnx`m!mcjJHvu+rWj;D^L_`j6zinKq0{R(j??h;$C{_5Nt=aPM5dFsWWS0+`F1h8`8jlHP&l7ko zbIN|U+BF_8l7~fU_=hqcSpoFczYM#cccR9{2(qpq+Z+mem@PKR97AC;3KRDd zzz}+YtgkK;=b&DwcQKZHJF) z)_0_A^wr`t0{=p6_JANiRBkzvFts|wlJCV%mkMUo#`+54MfoyQT(@06m}h%f{tE^1 z^SD*?rm#PW9wcZTE$A_-wa$b(OEBjVfnOV`VY2l>6F<*ftf089&k9P6UA=WkiU$1A z*@Ac^fu{;`B#7@0v}LTdG=UkI>lg=oi)#HsQQjbxZrfsiN$pJ)A-h#n|2jd1wwoa+ z>V>FC#{G6kIf|;=N?;{0yF?z|iWG(#8KZ&UzqEPLFBbNRmN^=Q&ffwSlw15*l%K;q zo@&Z~8j{erx6a&7xhjtbP#nBeQC=b6I+f##L+U7AJ#t!52d?Zc6POOAOnuAcpqjjv zkn~;Jqzxnm1+>}AM$`&{eMD}`>+&clR{n26MxqVAv@as|5{{cii|Kl@MBl9-K6;cP z<*W4W`U}L>zgE}9wqL_-VX+}6slUj_k|sM_lyACC_j0leDPE?)z6r1(mAI!^zu1-5 z0$r2SKC3AHpuqS3oKkQw3h83@6}r zrXXh_(rb`uE6)ZaXncD7>O4+M(el^eSzCf=FX9(iW{4OFbKLj@h8!!Ll zAHnV=Xe~;i8GEwj1c6S{W)$-4wi%<4ua8`m6_acV?B0SK7lCEckTb-1pvr2ZA|rA5 z60niL@67u(`2RB;cUuJB71&WwJqp6K)PSrF1rpC1}oodY8!ldqG5Ff&bF3Ey7Yz_)o^k<5!RD9gJ)i* z;=rS_x8fEj5YElV&HE94=>tT3-A%y81h2n2lZSMu_O)>PL{#{( zV)%nrkK-q=!fhw{rpwtGlXKLlK3TH{)jEv0{E!==U$`vUG2``p&r{M1B>YgbAgOBv z-crzePLy8`tbbnV`SeP@6G<_$S7`hZ56coypuN$xN;9*hna*fh>_)Em$Zbmgy62%3 zzi&x>k$kJ?5oATV6+7^gy9>g_g6wud9GbFi$V0f*?^9AaUC6yBpsmN7#a3wdX$#}m zm8hj&bsweDB)ujA&j*N`d^c}l^p-=PaY_?Z%a>`2n=u#i?xN@+^*AL^aSlEa<>O6h zp_z~3lcFA-XHjUMx(w9m2!h9t1=k4Y_S|2Ik&ns58mNyL2`B#sp?$3I_s=IR43EQxf&>@&VE!Ci5*XF#366?*aEsdyxU7^C2-P zeuELr2dgXe!REQ7%v{6MrIuUR(PHaEg~c(};)nRsGZ{7fs<=y8{zQrPsMClt8y1#t z5Ao`^05HT?2>>%;nxi?w9ZPcuT999@>H4GG*Dt%7&Ib!Y)MWtTFw-{V9r*R^r``d{pe^L zi?RWyZsmk3`MMPr%R~>0=n=Lj<_x5M^)0D0m`XBs!g!&%*5WtLms>su4{zVw8sD?= zI7{Fs=V~pb(m`kNEV>vg%1@u?3JiMOg>a;;T9h@Q?6;koS z`v2s4ke9;W<1PhBC-7iXb_bMm>IG>R!CxUgN#<0X0F-m(z@{pAq#7Dz+;Q#Zq?&^u zX43<%xH*+nR5U?nJgrg;lY(+ikB3S%>AV1Dn|L^7XK2BN#5(1^!#RQfw_+V*2+l!^ zaL%bcoPc!@gA3yt51wO_vZFb$vticJy!7Uz`Xrk20_FS->&mPXFck?hg_Iq{iH`QK z4dSNs26g4QP0H)I|C2na_?mHN!%0PU0=fuJ#Vx{FbH<&3!x?Ovw43uXhG{{DRbvEs z<;94|^edbok2n{%yMTuX_aMNKRm@V5$W%X@PB^HX!J$AFm)Ll!JBl3+^cia%es(#a z&{v1y7z}L-@@D;PFvxiuVnAiD{YSr6Ym4$GZOiO%Cea=c_zv;h)DcQ~0?JAKPC=EK zdJ8dP>!3^NcbozS91GRjS)%*~ig&*U>^a#zf}GmOpN5?$DA7B;>AUU$11n;-ieUI6 zc~XwIzyljkwhO+y3Bt~TI0+V^pI$g(U~YNDxddNpg1;4&9w>T8RE-IGHX>-Tdm?No zNH-iX1*mN%$o-8N+5JFFi;At^ppttuSe4PhLLqO7$}bX>PY~E6qE+3x*z_!n*C8%b zDQyrcJ?~w+Hn+^{5bWo#ZYZ}3T5d%5aj&Q@Ah$FR@KPB) z$}QXSehQ_G$cQ>C`19E!V@q#;b%kq85R~k6Y7i}=Z2Lfk@3iyd9_g+jd^1m%j#l8p zRkx@DclaoNw$+nIcQBuHboUE0)BLk)Z<4}Q%JJ*~KB@@<_U$bKnE z`@;s|{BEw-nH(d1o;6fMX-II&^yFAmPDj|H)mTB$X3}q?n7cuXDdQMSwzdj+DJ9I5 zn=|eY?^T%&n!aP$ZCa@xs=cjnenhWDuKdYdtcldP)xkyaaMp%jX4sG>?yPXx0fKNS zz(P>n%0PZIbXT09-f>kAw~tDPpOGo>g`5sds?kX-^Wfhn2M zhw}v8D*&W-?|MPHx9n!9I|N~_pmq!F{lG(l{3gLDM)ul$0w3q9`#9H=VzU#0dj#cE z`2GR*d4OTDWLPZ!C>YCfa4}C%eI1JJ4dEXGpREe-!G0o$LCwOp_0~e7LX}psn4tJj zzV*5&+k6YA6k$n0-UL<M>ERmC_}XMUa`5B6og6(cNT za_3u6-xj1(LS3j*5Vr#uvFqDIeNT{mSKwno88eImyHB~hz$bz{vey~etBmYb3<25x zzz={!1wQ>#GTK)U#_h*~aD<@zDJV$!J_r-<5t|OPFpbRa6XcIUJtc_07lfw) z52PAe}H-!ctem5r2Jb{_$Tat@pwzn{7}$&Ur@{!)KO=u6?)?$f^3u^ zAcC4p2+Cz~YYKdZqqYX@7=dq?%-4kalAu^0kFN-PEF<3lb{#==6R58W0*X?#5X6lI z%Z?LNwiWn5Mc77EUJ878qQ;cF&n!QnP<1eCmS|O_r`L=m*{=lFOB%O}>SEk$d@N`! zAc0b194J^&@LGAn5ba&}O$;BsGl07ROd!4E1qI`qjUm0dC~rz{Gxn6L2z*&(z|K%@ zsls~b)c@K}5Ox#v4is1dTWm%~h-6Iq5?$y3fe&W7*X9lCp1Hk8un|5$=V4{sy1-~O zfFzZX#bfssc=07E{-oTzoER%90dFAe6V8s#`zp>$ZvTMby`mxP-msIfi7 zz1xa|=aSiB3S325%$8E})f)umfpYU{lX9}C8rq>Zo9Fv0oE55}ZsC*n#imL*J(qZm zDC-gaac5&ma_{UKo_k%a56L&K*g0*NMX| zqHN48DvHsg>Iy5pREhJqf&1Wmg|mIPI24b*phRczR;k8{`k{<)=}ZH0{big<57yQI zJP!6T-_;Q2ZA)+LaQ>nHnZlDmlcBOljTh)czSz?{-m*6p*LTL%5DMvl+B5~u_*%|i zb*f@C_7~fpD5$g8RAWl!HTo9wx88jMkEY>r1$KqaW{THkV%KG)>oS7%m=Cr;hMl5c zt5VAFH$e{zZihKZ7fqpO{d7lB^Qj?g&C{6O74(4W(t?g_7Zt2=kf0<(1$n8z4|O%+ zP#~?E9=E*M^v!>b2Or+;z%`jsIey=?HPGA~*fs8%zuBZH(RA0a3_0AS__Yt&FkLH{! z@a-J&JUnc$zf@F>=|g9>pmmvG6t(NiHM-|1y~ZrD)e8g-G}`=XLHk^^~qr-GM=?V!GO z9uauQQEwj9W%B4fE6S_Q-KU}cAgH|}D4!G5UljCS6Le^&ekiC-KQG@DOkwI#{zK6F zEAUU?E#O_?-@v~FHaV6bifUsH?9t$Qe}|>jH9ip)mZp`UHhL>VkNus2zG?-{bKN>> znWt_&G_t@%HasAxp+nn1$No^T`nfBm78E*amPDECX)%Gw?1R3zHXy%CNei z*ig{kLQvZmx03~RdUy9gLGLty5ANl^f;vGEZWd&>2)wtfHd$2bCP9x;%^OLJAB(C# zEa+T;$3sxR5wsqJdQ!0FO9Jmpt3D>G`e#A?Pl5uO-FsQkeM<1ce*|6%sJ<<#wYQ*# z6lfs;x{RED53;+L*xow=-;Uo}f{(YTpf^fTT}3vC4VAz^y-eHzWyCiJ%;U!VLR*~@X@^LVWQeU!DBKWM*)cN z#*qRa$n*B8-gL3mV}YLu+D8k#*4tq4FA%EM0Q#qk@{Fp7E>JST>Y@;&haR30RYk17 z{YOE)3NY*KEe^2OR=g-Ek&c~Q&|OH7F?p;mDX>wZR}2-Yr&-AEs@^DW+i6+cjZ=V3H4PsRXYSInA?Z(0$;tGPr?Irrn;9P zP89^t%BR2{BWN)pUucHF`}x}!O%ly=FZ=s5UR0Q!eg7%8ApA+O?7nGh%wM5k?3krsg z{vm>NcR5nNhHP&m+dGK$_IyExEN&oZ-?7L&Tx@}`Y#bx#JSfN?f@NOe#n?7|rj1lFp8KT0?Tbzi|3 z`O-dW@4?yz&bYbq68X|OBd4EpteynL=dMi^6byGIBVC&EP**;(J=}T~8Mo?u^T4;_SEp3Po|Sh zn=6kri>872>o=ix9W;B#guZ%@>$m!-hQH5 z*lxP_2r~L$XS`~yID^`yiVHf4ceA`tDU03Z)}pDjXbcvDy|JQv2SnF87ZvMyX#097 za%IWy+&iazPkDA#wAxF5y}H;OjUuCL>2(2?qPmna^-w5xx-HSJJFv|?lr;}5!NbXC<&j>FS(9>LAn|%s z_Ek}_EeI2#CP7)~vqQWx88|_ZZuFWdD%=Z;2v4VZ|0*i0>esvvG{el2e-2m=w=V-< zhus_s>7Di$w{gS#9xTVdgYS;Gq4>``T#)sFsRG~SlkEz70`N0|@8j|9I`J2{T_W%W zH{ll8CkXO9@G9^p!SE)S{3Efx$R%4`UnVXl$d-eu15JS?e_TgYzNsMF27nCYDVKS8)zy{ zWrCv(6s2YHa4Jd9!PntzO>wW7iZ0M1hTD);q2UiXZb>w|c@@Q!M~$R5l7JI+VEei- zKKhp2oIHlr21&Wk%!PU%D1hc9QXyQE9y)VpQME|`zD{rY-ULC9=*$!N0C5xZoqK?{ z3_B_J^OXnDCO{nr3^VB*xayjCjLg+fHgc+SVWl^Y5v(=|c3V;5dQsj0+=}|$I!3nM z9)fH)C~Q3GA)|FEpf!}qqI%N>5xM5GL4M5S;N!{0wSv|g0_W7ZH&vi*woo9gfR94v z_&uBI@03bFJk*g4*P|NL2A_5dYR&a*Q(~VId58`S(f&sN^L7%Jrv@YT{}lgcV&7xV znX^3V&pk}4$*jZ4yZ(l@xtTM`h7~?n;s9Kj=U_dEG|69*QpB+7%J-FKTj6oApm7Kk zW0Wna{$$p|eSw1S?#;F*e@L?`<4o`8f`E?hec|~;Q9gdsI!%sFW6M*H4a(Q+hntDPY@&6k+@i{t3{hdWSTB0FFC*H8z#Kt9 zDT=>P3}63Rr@f>F_?P6?W7d(jyT3+|tHt^?+Kf>xZLXgs4?m6L3toLM@yIOwu8&J4 zt!l0UdmBl_bd@obH|~bIP*nXosJjI5eyDo{_4@?A!Zlv1AnEqjOGH&4A>0#$Lra_U zd%`_~+dM(IOm4PC<}cv!2Rxn@WUoLyC)ml|;6>Qi1l7w)^i@$F(7cZ}ULiN{-ETiY zde-%rGj)EA$3GOW%Y0pR?y1`{Vm*JWHVMZh&PVv_ z4A#}v1=(nUZ)FWDL#-yrnb<|PigrAduOh1Wf*@N%5Y`3|&E;6!))l1DejTVU3#uCk zd{8#5FDjw|)R_v_zAh-n;WkFlL-F_dlq`yBpd{2c$8AeN+(Hn>3t9+9zibn~DJtv0 zepe7Jhe}cH?+D6?f@~K-J_!n&dD?}IPuamUj!|g#q^&{Lq5Cr{cRD+!l`>`PY3s_Jd zA;Z^7;D{)1nG0BTD<3L|wg0q<} zv{!}tyddVlDgs~5SziryeL?vZs4oCt6oi2WnxlcHYxBp7DmN7L(Zj-51sMalSI8R? zYMdZ$0#yjCxDIdLwD#(w-HmVJ%SyU0-RxqNh$ypFl-bY)Fi-f|LLUM5#hGC*xy9Xp zo$=jU;IrXgE4SUdKM6NxO1>X+iNjzIhGo?}I|%j=s2@V1E4Pml#3Nx@Q_uQ>fa)Bk z2qJpP7tsa3Ic2I;aovH1B$7e_t3|)MAgm~ zWar~{o}e>J;C=eu9n-oJUo`XLQbB$_>0`Kq(H{x-zpnsjf8hmk+s4i-JyhBjG zOOW3Kd#@mSQc$&i|2x><3Vdl~_7d##0`J($UJ+GA`;V^+@_A6q16pqivcC($Yl56L z`tTO;F6@T_-vgPW!}$9m>AI;XD&J5LzJ?n!o9aeT;{=Pf1-@}HOc0f~@EDKVx1hGh zZFAVofGq??52`DuZYQXHS5WREsP8NA{fS|ksNz6@Cr&=s<~;{10w1yVUe5YMV#9BM2Z1LAo^r>RL=CS_^s#zd5`4mF{LAw7^IkUF6dx1! zBiu06`C^1@fd!Sod_2&GeQRQS1UFV-S|1Q@QBm1qxQ!BoFF;{Uu8kMOHG#E&LXd3$ zwV5ES3$={E2l9Mjq7MtlirgAo32GPyZ8+NZn}pj%P{mf@1({glwu7KVVb1me4h66> z<*d)tP@-!`;Win!K5(QU+Wd4PtW7G@p|D1Ir6xO?ATtC$X=@8r{GEzA=O($;ZV~u~ zMDL#U!c9I!Zry2kU~q|d2+G?90b9ngb73EZy&HH~P{Y0v9}*Pz3NofL;Td2h3Ha=O zs7C~KtRHLcEm-yQ^6X38B=B^-Tv?QFKJ=cGd^GH8K$9S!7v!r7G8TfWtO4biVtqg| z-Hfs^zN-t$aZsBGA{LuujB6=>=}IuHwf#0hnDR7wg8aLJ@R(ps3kp+RI=F`s!PjPW zcN10YB*=Cb_^?gH7UZ)O=^DZv@z_HUSQiR!2z>cqx{I(QwlzsmKTS{^B=Dn}J_Y7! z-`CGo)_kBWY^3Za>lX5_hdA^UG%`o*GXF?6fC}Lr73*1>-8@_DzsPUgESUO$AV(Fy z>P|u0md9w{Vyv)TG}6{e8d8;p)TJSfp&?aiLpF^Uw4t1q6Ym#fv=ogJgODM3(8 zTj-c2G3vyK^8^LTU4b^|JBZUFE9G@w#y~ayqhhtlpI=w@&AFX5D1IHco%uC>(#r!r zWR^27Crg0L4W4_EuCX1;62@;!okKn>=h5=;P^%iR(!ZDO#gFc$`Hh_kleC zc7K7FAj09IO6&r@RmGQZ#IqIHPs+q2B zC{BeviE!t@o+8R-f_NfsQ(-A!;{^G}g$3E^V!c77HH9FUnzD1CY#caCRO=T4pCWFY zC#twu5H12P5p*sURL>WbvjvUIfD3V(1Z_Tc0JffhR3Y{U$r_H>N-IKgMp7i#Jh33ke_@2 z>MlY3eyCpq_rTr<4~!G(0P+jn%-Ggz!hG z7l5Y)wjXp}5mkK=z>-kDhDWBd#aBfYZ^FJVXd$KQe-l;5IMACTwub4zw?sDnDysTV z0E0p8Jwg1ppro_c={6O zi^|RSHU>-w0johA1uO+LfMo#IdP7s-o3IKNeB);Y!)ILL%DAlxEHB8GgIZINuL8A} zAgm#%V=xF`6x7xh`1ngP7V1mDx&Q_PKjTthFz_y)Vm(m>Rs+A=;-k*x*YO=A2;&64 zDKkV-ezzrVhKEfDEm5^XP;4&nvnzhB-Y>X>tq8XTFdo<%_y&MYA!1V~5sbEN#!{4R z3SoOu#Y92e1(+o8Q!L?oqS`wM3aktH_XWQCCGHKihrn;khJ8d8dkMO`LG3As2MKI! z2nRzQ0vwLV(NKNBW(N!q*-r%CyzaM`{n$!lV1Vc!Bj0igL5>qt*HWj;PZs43?a3Z7 zLu~jNZpRDq(*(6sakJzpdJu}Ujz5z zcAvmkm-yURd{}JzH+cM3U<*cgQdIRs*n9B!9n@2T;&DOw0_+ol_%!fGLG@**mjuP1 z1mQKgMH*vR3lo5H{GeNa&Q1nMI}>jS8N z2^#MU;sW|wwschIi!J^ms0Q4ydDItzstO`Dk91YbqN3LPP~qCFc!p7e#!^tr0Lua> zK;F+^G(_3(;nz#TXT{bYRa_fBe2-kwB=8D?*7Ab5GO!YEs|suk@r_E6QMa}lzH8&V zK43ct77-uAv-KmcCpP~wu&yAYJlO;iQGfzwkrDJizggn@OS}=I7$>)46FfE*R0~0S zb3xn^x2**0Z3ER7)Hf59TL>Z+k?<`+)`P`1(kg-P2y7s!VIYa$g`EI=AJ{?Q0|qvl zgk8iYd&yq-?hLyx)B(WWuzN!N0BRDj53J26KN2b1 zz;a?cNazz}yud4u>8_H=xJ}3HI6>d$6HF@EiFh0foCKU8D1Ro%v7wBdD)1dW^)p1( zF`w9);!Cw`L-9KyUc_vlFJHeC5@w02&LQwjL2)J2C4wA7O1w%?y#lxEf!V;txLpqQ zE8qs;8bQRu;#(QQZBRE0($yANSbQOkH^#)f#QHo$diCROv9(7Dav#*ag5ohj_Iung z!uVZ}{Ap2Dj4-}7!5cM;Kj8bEpm-MQd4Zqr$o~rahM@XqLGh}<)|ogDw>JghPlEjK zc)SMnmZ17B?8k!ep}(_Y%&4GKiO&C6Xo+(wfXpBm}!NIs1Kkp!h{83GlB1b zh>Jok0bs0&i$i?|iaCTYvWi%2Vgq&=fsHkBWvJ!wSP736fmMOe1EU4ix}en*#8qHd z6WDg+*EhVpT&|7pn!xIU_VNVz60k1t1wrd8P#Xa20a$i?pLumH*sluW*P+G&8v`2( zS`q4NP#Xzs=*h>4D%-GI3Bs1Z1lVn$#se)uu{Ca62z;$g+zb{&PyC)BbOo*LV6pbZ z@8h-$urF{jZdiNbG(qDu+|Ceq=WX=_*qdQ*ftn2LCn#5xbc2OPdKE6LJe^}K2 zpWSEVQF-)U68OsL;?Gcj68N-4d6m_hq`d)&@d_nP!pj<#6 zRqQ^#UNvI;35yEqqXf0Zps@RR7h!cg6y}}!7Enw#t7{698E6CC3W3c#zC=6D&~NO# z8R0g^w<2imD7W5LqB-`3NajBj61I}!@J zPq4}7M5yV4>dAsM<^Gwd;%MA#{5e%rx@&DJ)bEs`Yzje+5j2>e+ZN;}GYWRD__d61 zhA2SH~T}f2+v#>#s_Ft_csx?M1swoJgfz<@*5~5W_6>Gz;FUU6(gs;G2 zGpc_Tw=W5*>j=7Qz-|P)x}Y}?c4OFZ^}H6EJ^!ZyGJLF;p>h-u#vRW2p? zOj}Uv3Bq@Q?*lD??`-vLOk=Pp`Qlb@OYzp?Fi~!u-30mW1m0EPcP@OlW^ZS))g6I- z1z`_Cu|L!sz<$6afwuzZSd{z}L4JU!;y^(Q15>d*9*+v<10yJMzk;&cOemWt{5(r! zBHOzjzydTK-?bg&d{F@#K-__bxxK(!2|aQ5Rzly78jr^JCxZ5wg7p6C&5Apklzk!G zD;J9DT`us2aFr|Z;3qu~tvn;j%h26t3BtTFdq4?zDS7X|;>Ik{=YMN=%ENbCrz;2l zg~wHba5dQ-qoR6AvN%^%7j>b+DDL$IzXnxD)VEg@3vLf8)vhQSm$Lv*2}7uHkxCfQNt$> z+={ab$^S*r$9HHa^e&pA#n79pZ2ueXqVX;%$FRlF`(*r+KGK$>$eDG@PAXA!2vc+U z$*;gxm=J~K6vG;KL=pD=yXgwAYZat)?g>1y7AZr`0sI@otPOv1EHV7MsaU@xFjIiu zp`y~EPTE!PEVX(A`#Se!3{X(VVW|JXfr* zj`cm|ev0|Gm&&bozMzW8s9z>%&JozO=JQ~_QN1@yZnmmbktMyW1=VW>-e}{-;JYT> zfJbh{10mDCLy+GsD6p0lcfsB-uszHo=&ehY)A|#*T_UP`fnekjv7LDWUp8A_Cbu>M zs(eAvep=A873>vJ-RA`9-mTa0cvXeD+Qw8b# zTOPi2r2Zk{-WPNbZrL^RosMWUG*1E4HgPb^Opl_CFnw+Orp*h3Qfj*sFHQ6);C@AfK?iGDXNNB>J(?;jK8lUFU| zq+d(xJtb=HfABzJ`n;9TTDBKZ5prawH*V+F^#*EQTui>cORx6@C^S63g66YT1tKHg zOpx9_dqb&AM}2!~2f3B>3a`nv5X0G#g4#&}>tS`IvehlWOXgFsA0T*oC{zuEbPsha zN2|)7fqg{KIbPr^8$U!A*FPi3QFgoz78k-76~}8{KKzs~E4Gbx<0GUsbQ<4o+(1%i zD+58`o#a+xvL0h-74-Os>2wN9IV90I?kAXPe;&BB#M$T;eP_kwxz zS2h~A4FRhVg(zPLoMX)V{}?+LxXq@r|J#qXc?`0*_U)9zZDuf$3@IvQ@3C)(MElmg zOXbuc$4cZ7;+b)18Wj>E@fgR(A(TiCW2lG@q$saULPhoJ#9Qk1|9yY!?Y<`;@8|u0 zp3n39T|O+Qp&-Td7cltM z*AaIMK^yll-_64|=Y8DOVp6fWH9r#AyUD~7g4oh(%vlNhbL@K}dyS~^^#sW@U<1J# zGX!N1*q%6yKTRtLy9(@6B4DRUnVG_I07B8k83OwlOc9R)1`Rs^^?~ye14M@HAv$DW z$47~sp;|^Q8PNPo^!>1`g5|ov>qyuN3PskcYKoRx-708M53L!Fy(B82@!7*^|j;K|1;6bbTG{+CALAYGdTSrf;4;J+|9$Aqv#?LHjWJ{E4cRv9Gju&lz zzPFy{oxy#?h3LHd5K+}JR0DCrLPGykf=CMK;Q}8nY7i29HHkg3^_cvV3j_gG!JBit zmqRh--+-3ToT~CX+xMB{bH@3CYoNYH>g|Hby9DWv1fG~vrsFvEGQ(C(uA^0>xXtvx z6j!_eFq>9Pqzw$9-BRysZ?MZ%vQ&jr_f`l9E{bzQ9IatyscirpC=5U8iC#2+LUN-lH-gw-_n~s0)>^%C$7CPT-lbk zqUu~SSzAx>S?S_x1$)?9d^DFl1U7fr0aSgYg2|zR>}WxKoFJSmXnqLA zD6s(^#>spkmZ+{yss2vTW@*+Z&3B%9?P&%rsym=gdr2R%-gLXC`l(nMyD2?!oKR zk*=lFOua$S!BUx9K42F2`Q&07Q593F5Aj?jmyVkN=q{D;` zT%hn)bk+uTQ?UrQHht2wOMAU2uf;U1n0WJMv5{W2&yZ*c19jVz!(4$+Vqi%sYrl?8X4>(JZAd;9PU4>N8{5vzU z+G0Lb@hQTP1(kdh-}_(|6j%Dqeawf>Rce=yd>!1UypU%M8IL#X+oyz`@l9f=@UnIW zr}2l1TicP~Bc~ZMnPkXhvQO$8MZRHU`e+a{e$(OjHAf#XehbF0ua)rl%{)x84o-bU z32}rnm-!;b&c6@I&Tuq(uhnQY+MwnW^&W#S^D4i&hu1%;@8WAzHT^V4BIIz;{CDSTXHR5zKN7N}J6Bmm#<*F*L-augI8vVaR zouT5b_e`BDYJlG3U4L`k8Ym$ZibQx7Pvce1PsgwYg;_jzTYD$PPssd$pn~faXv{s{+$O!8A>`vAJw&zYIwd@}yq;UH zBD2Js)FLxfso49iY#W{ldd_g!*(0p0YxkNCS6!g9# z=%ZJ(Hwrq71pD12xcm;Ny99%)1YZ5`Ef&?ePtc-a*bjK>mHvkntbZjKUqS*stU&7+ z{6^5&n#a0*`;4Iat-xNia+c>iF9`oH{_2 zN!Juq_p5*crqJ&Sd=FN~oMF0x9n_l+BhLp6IyNe9s$lzi;EjU*7J|VW1f7|JQ{F1D zyFI(ZZ?{%3!DLqKAZXtq80;)KbQeJnb*V*Ns!*5OT?L)KptqNx*jJG3FK9m~7@$4X zXitOLg7hPT;!welS>Rr9tYCmzm9maqA1~-k2wJAzVn0DP59%~QdZM5?MbJ52F!;Qn zcMjCqz?TFa?41LYv-Vs;dLD5X2)sV+J^q6WiMvKnUQWVwg282i8Av>XTZ#Loptwy? zFNXSwz{QPg6i*3ytOR$S7F5p(nkNN=X9VRx1UsPic@usQ zskBNoR(nCvW`h38P%8-rmx&p7r)*Fk;HW%~} zQ+hL@wh;`rCHM|OwWA=|n!Fux?-aB<2s+yXtza+^G`kCm&k1@T6ZnjKa~i>$1^G>a z!2H{KUbsh8^IhOK0{am1#B3iz?LQS4x0Fs-!f{K2L)76z^<8<&K9= z(O3dfOP5(Z-k`<=9)2OPJ=;D$!ZQlmo*kuO6qt;;J3(!BADZ~9iZ9(bZ{fFR3+&z9 zR%h=&u)#TfS_$d%q@sj)>CMMM>~d=)A@|Tk$`fb^23?eM7;42y#93hG1K4D1`EPVW zA)vI{MjO@>BuU1b&G113MD^W6Y`fj|C z9VIiHD@d8f;#Fu&Pt6s?F(1{>lkg%zTMVbEF1~QfTWMOpz7HXVqeV6F;^cc!j|;+& zq4@d@9JqoN3}6N2ih4J13aQaZ>o*9RtpynxX}o`HFXh{DOu=B?^f~!_bDo^`Gz@zSwV5BTHL*95^I#b4>)xu+KF|Su2})yr=_d3s0#I7 zf{`1{K8@Y~yTAj&mqsU_Q~@=mOi;i+fFCpuYUIw-C;pqmRB|{(P#*(DFYcTQH6a+k zS-%LEiz;F3b`W&s0@a{*j)LV~Z}65H(Dl#8kygRybDx-WQw3&O%TunQuKgobwN`I@~)sjj~XzcHK+x}hJyb3 zf_y4~mXM+#_(1n)r*^Z6;sRPi_F6$cjUf8MNL6UwpkN9IPB#Y_M+KTgbjA2aQN1?_ zI$H_s@xL3FRbn z<|6{%P+_kd=@ANsqXqSm0`JQ9IqpP;&*@Nx-Q9dQWni zpgEo383OOX?wuuS@OeRbwje!IF!hT9Z^%y173Bls)%l_tRHO1DQW-NPN>Vu~NH2l9 zM$lo}378^$y^;@zCtoG?YC-cALH}!l^4DpqaZ92 zoOKV>O@c16%31dc((e#=x1hXB(0osjeV@1=5WGqdH)KC3D!)%K_>3T1EU*nZ`418v z5R^X>6c3Z|n4tcpAbXnN<4{iu+9gmw5qKN+)JLFD;sW|x`8z@X_k!YQg8Vmv?2iI( z%}$;n?k|Gyf*@XI@?BBYKLpL+1^s0b{q}F7vX_W^9_pWh`p<%jc_9sgayfxL5ml&y z9aO>oih}VM`Ps^%+CpGIMTM2Z)fLQZEwi-!Sulfiu1wr!Iq+Y?QMqg=xx~5+xW#)07cPGlA0|(jx^KI_%i7P)7^;M+uU{1?6!9@6XOo5EamCo8txE znq8bM%F1mvN7O$132O9!`c%Qx`GWkjg6vE|aw5Ug1a@ZKoJHK}g60c?vCj(vf_x3iY@k{7jHPDrkNw@Sg4J*Tnrs zko-!}M?Y^+&C|aKN;Gw!t+%G$e^SB0pGf#GL5|Ko|F44ZqM)hUV5j8xSB^uLwbLFrFd z6ZpJ+iZ!6OI&s)1TMPjeh5+y0uBM8z`>$SCR1fQAikz6v5Y+1ms*MHVbpmf>NjDQ^ zDRQtWaa#je4ZOHfZ6zwaRnVD9!X|>EB=|N#iPllPS&(5?WAHouGNQz=!i|%np4l4!$HiX+^a=5gZ8e_X+CV1%nR=I-i5ONnmB!60IFE zl}9hDIIITQB7rwxj^8P&K|U?k6aNd3iCO_eK#C!t{e_^jiXdNJm9*o2pR?|4skpjU zTyI_d>`G+OG1k?>K7#UNP>6Xu0%us1gz{-#Cs^HFG^PS96GpX^EKa=_%3`SH#Iq^D zzT}f(mNAS7$;b6@FArG8H0ARA+tv7)OSb>ck>e@H`GD@qWa(0<7vcO{7qx>EfVrfO z!{I6eL95b!hJQPUI6ENQhhI3=rFeIsvpBdK`TXWxhFZx`D~a<7+i#uVzB`W4mXa_XqlsH+!a~fjiAPWKFPz13U4G`GDl$7RoJ%Q>3tChe z?=ET|R)sP&mX^k8KBAz{FT_hpdDY!kQ);?DzaVp%Ll*Rz@ux&}7^^umV!W>D8O4=X zDy~nKF$U*2Uv=CH?-vzJc(|7z?Eo*J{<~J`jZk+AqN^`7su@35&_`?2HB?Hrt-ykR z{{~S$PFNzi+I>*SR1F_DTbDU6z}o}7J;14(mlX8Lg9+><6>VyV-rk*W))F_(zh4Q_ z113tVHzZED!Dv7GCa5R*?bGDrRjXg~pe3SwU$mbw&g;)ThU)51t55=OcrIx$Z#J*6 z7-sVYW4}{scd;lRD)zk(ao6ND6;QrTkj>;Rx28Olu6QW+9mJuIl&Bd~Q6w@nhZI45 zs>O2z>jW`5N6L+RHCENr$}I)nrja3Y*-MbmjRi{zNCkFk8JHylQ((ee7Pmk#DFx=E zJ`+n|PMP?Pz+1=du*6#mcHE6uwQ=ffQ5gorE?nN1=Z?YZlS~j@YCH-xlhj=Rra*VI zDQL$&&fh}C^D}%3H+F44PH&%J4EiS4YH$74C*>1NP2p03ePuTb)CSde6s+$Rcw3Zh zef1Irv)7ZlouHk7x7S>rl>q0MD?*Rd(HM5eFrXJA0%@z38Wh-U#!}R zqKfCK!K%t)E3Ef@MX&AClsQ=>n79MDOqshhjt@V@4}XAu7B|=)rUY+EYncaq*<%5d z@%?J;CMuwzyuf5=ciPqVqKZmTzf;icA*kLj=p7^oM-u#`poN1BP8ImDLua9=`dYzK zRYS{fzb7aj69lwlA5HeY%^HSc-=yo$64h)gDE0>U`h8TC0>z}|1qWyo#oYkk z{gmJ`dM#gB)#HOEQ+Z$H;u3b#!fsl`+CAtmbC6jFHF1_Z?-5mg7g$D3Qtd2gjs|WL z6t@aG$dmr&-pb|uSB=>^hKe|=%@H+j z=0;H|ib+W|?3T)>_q=f;Fr3Y3y^pbci!z%PtbVV45qFa!5WED(T%Gm2fD~@KO8o6~ z{la!1&(nR23r{MG

Lq7Aq`KSeT8n#ZbyP1Ih``d@@1HqLyTA)h*2#43_K2Vv#9I zUly&d)q8l)v5U7HW~z(OVQR)TWLZhC6{WddMS0UyVOfttEr{fn;YKpyuzscG$ybsh zM`GhY)f!TBa!n7l@}PbQCM^{0TXl<3hx zW0l0Y>oqPO%bnx8dy$zqKVwvlk&+a9ECq~8>B2JnGpC+J0e-lTs<}ermLf^;&nBSe zT>P)+`e%+Cb8jcr!3j?ZJgrMy{DK5y@lF6HhCeIGH~wLPDc5ScrNd=C0O+;pb8el9RtN^ym3yY>QT^zwyGx@4~K zPTp7-er75PCse~v+wpEueufKmlavF!jJ0Dw(qGFp81t9mw=OF1pv)W&+k;hobOCu9 zRWSYxiMGu33#X1cgC7|`fEg{)@aR<+QC%0{#_`i8h#U1-2c6I*;bLIaVE(P2=J#-d zVGj8`aGW{xJTnNdq{;_Cw6v@w3KsJRU6;(1yF#jg6hin80l*ntmHmXZ%YcrY)>U*YYXbl$--(zIzzwk zOBdA2EAxFC@zM_pd|D#=leky1l(a-AN3X(VLw;8R`uuj~%4fcZKrFR5I{n^xx zRL%W#-bYnbiSU^rPgW#&7i-DS{C%CT>t;u4?jgVQJx|ZjFG_wf@ohcaJ})v@pBK2> zQ&HcA*!m(L^3B`p8AC|Avu zT!Y_s=~C{>2G@ClpPAkGxu%@p&RUb|F10p-tEriO#*i!f8LpapPLBuqkuJc6`WX&7 zpMT-ZF5a14vMHxpUW-4YyitYb5_F+ms^&s{@1_fgN6^UPpbIcmWL|2vht2unqe{+n zmN)4wGsNjp#aE)d$av_J{)IEUWLG!NWfTzG87e05+Y!|z=!(Y*kWWGY+rn3*1tW`~SnkOi?Cjnbkm?O%ycgb@pIeU*195iI_{a4UMjb7Ew z9&Kc09io1`Gn%Jh!NzcT*^hjKYZ^;MnOHYvMujPa|@eNaB zgOSB0J4^Cq1%Om@N>S3& zB|Hezy$`ba0H^PhtEh`@v;{Kt%VrIKylWBj0?Q2*FF4MknO&7S)y*_Pf_t6gY^$%= z*3-QCA)h8H*-lWyPXm=4u!!XKnLu^zfhJ>JBcmt!Y4*}me?cY3r3$7`TMSDS#SAOw zsGZ$G{O~o*1l_rsds`(e&5p-)fvtP?CZrG8ZInJ4V z8D-4E&rHp7d5HEd)DYkDV!97=K>3uwmm3X^Ra|-w?abzaYPx!aA0DqII*1?!uoBas zSHJ8KIP6FP)TRGBQf=6G#ffv(;yTlIDzvaX;%U-pQ$m6#AJ!QZrCI-3qR`)>pUuSOMc^Yw7Z3?=6vq9&N4B4?io-Hx=BicCj<8Y zGk`^ahngSmIKRhK5=xsyO#v>d%hGv8aLk>{x`AJsR&&!u*BcI!FShe===wpfnyXur zuRF|V%2`U{{Gd^s-(!toQ4SjXjJd;7q7Br+52?DzDk{oPGjDgv?w$`xOmN4gU_=--~< z>JHy%H-dhUQ~jXP!$(t*6a0*kO~$Wf=u+M&i;Mcquo_-|blk-7Y3^a87K-)_N^zE0 z)R0@a8WS6dk=a|6v)EzN=vbQD-i5|zP?Y0lKy{Hy8y-GtPFJW)+{|I^yMBiA4dHGm zH>~Hpxdh!pe)GbHBjQ}=a%evBjOe-;)?ioh%VyJ;HCXKJ!!|hCukf;$Ce9tn8=jj5 z>bv$U8GfMR1M7$x;!(Dtz^BTBWiz;ZiWN3qzk^!kJ72s#&OW-srYfq~N{}87yhcS` zxt)IDZL6NLdS6qVuhq`2#oWTvR-mW@1a`!kScyY0tUa-KUE?^FlH39KXO~dufjont zi_doA(^BWs#-w3_{nf_{IVsea+?SV#%D<}2`CdHSqT~q_@PY~r@Q9M4?Cm3?LU!k5 zd%L%oTi#8-pi*2^J^Y28s zxb2c8n*DE3$zGH5CMPQ}afz6olYB>+Gg>@hZ$-ABz*OqgHI?Ai48L^Z^)i;&vqrxS z1mlt3SRY?u-so?4+QlCgOm8Ri3!*CbV!Bi_mA6Dsu?K1^E6HZO$5w*Ca)`ZJ_@tw^76;nO zJ+b_NC_6wIr@xd30s9NG0|mt=1-|}imOJZd3N|ded&NB<|7DW`J4GINk!F#CzISPi z)? zlp8?71?-78yj7H)@Y><-l$i>4cM#OO2%;O6ouIY{-YdxH&)$z2*l`*57uXMOFcjk=L*6pP;7cEErFgRDmfdlnsyBdOxEE>D0IYeOmJSM4Yv`; zVs`UGfiKu;mJocJ;Bx>A$YX5e>oRncmxyB{U;8XnP(R377Ry!^Ww)tGSCst$RN!2PZ;z<9hr)QV8_RLYF@lQY8_9`+=1jqW6|w$}#66^Z z^UyrAD1=F>H01aoPh2vJt3d z(kyvUyASXo;4tE_Z2Nwa_DHDXh&x2kKL+Xu03&{Ryug!Jdn&;b1f3HF#o;7;TF_$R z|KfyT-j`IX?DL|+X9e~h*qjVy0f=Ex(qMKAG?*)@Jy-C>Lj}ILGh9gA1%mQC;4%^} z75G|?*;ha@ZMRnfNQXW}=X*RSCKdPC0>P1|lCV%zdA=ZHQg1I*Ty+(3SR7tr_}Q~y z?|Q{mlM4DWj&KcGkPdzOMzTm$IEV6XBjHYhOw8dsg6s}K|JzXa5=TD>cM00Np?)N= zN0IrAx8x@Z4jv%&K0)#*sY?Xoj|jql5PVFK{0v~q@BLH|elGaQ6U6;O@RuhAea2RM zwFk#!)~tXcj7AKrglxtVB|%7%p+Y=zo#rQ)EGUDE}tty(mbo73AaUQr`P9 ze>qXUkh7$VrYq6ckcY}uNI>3br-*9*TXD^bqN0%XYEoAt*dcXwr~>E$bo3U3WU{8f zw`ycliDTzQSRX)sX*U4Y0yY+u)1cTdkiQmcQ{vdL*0MX$r?!$eKq2h-rj2%UQNCIu z*_ya51AjzH{8SE0>2Tn0-XxV_)q@ zp*{vM?bL@0!V!Z0#|7g@3w#PJI}vIEKpf0ZhB``M!Egfv!|hHHw4V^fYeMG|oFf=N z2?{Qsd{$KQIYILUsQH3loFQmW6GV@*pN3-7im!lf&lL5Ovjx!$?YW|SOGmhXxbp?R zI<$A0sPb}BFA}tu3eqnN@<~Bl{zeNy1fP@P8zJ}a1bO3?e6p!toUeoo+x<>h~h zDt{pu{Emd*3*woxKZ)|0v+!3@)n5eRyMp`$g8wZ@ek;iS0rhv_&w~7)g3j}T`fq}A z8FiI_%v3BZ$X_M!!u4Pks8rxPLAO0FznfFfSU344F$=1f|~W7!D|I2*6w;^fgLrr?0hUY zBe*%Rf#7JC6@4tN-IBQ13+&jW{4c#_HC4gvZ6vTD({2T@T-~6+#QQ|HfI@+pHzo*g z5sYmk@bw~DDXO!rpm@6=nFXNel<$Ok2h`4jm3o49H-hLr?Yn^O1)X;bto-y_QF%ig z3Xyk57kyFv-38hE1U|Ip3q*?d6Wj;blhhAE?I;L)5k!UR>@Tou6?=ioKBi#uQQ$D( z!vf#Q+8!**4wd_}MYYEe{DdGmQV{*HpnmxvTNm}K#>SH!D@cxpIzrGnPS8Jr;3ol; zv;IlIrv$!eBut13CkuR(-8Z&Q?5AM!OP52!2D*xkV6fCAnEt_!hz2fm?w^z_)>K z3cMEB-a+uYz&(QT?+DVx0y_#V?mxlpvmt z`wPLRf#(G6lO+5}(El&uo)K*LSEv^SJ}1}wQ&jmkLGuTJ&&k;`);_PGb?o*(Ma2X5 z>6qdYK^POX%Mn~wP(7=`0SidWMpd)ToYJL;Hzts zl|=d0+OWDPpQ6h<#H}UB))RzvNZ5$rbU|4N>|Muqp!8o$!Ulq5hM-uN)YlW-SP*YR zK}~DlAc)SQHxt!)lOWlWxJ?Dk)`EI-;?@?t^meE>3bL&Pwixy+;;by-!dK1aZ0gi+sEfC^*#IY4<_pJxU#XkIYvK${z@PQSRVzQQ`Z7_Gv-qcY@}}g1vtU^}N8| zP3&PP|A&H|g9Ub&UA+Xg%(7~d|0LhIC_BDrrif}+5~Q0F_jjds(PopKfGq^QjiKHk zu*Jb<+-!B?wkOWpopvC2hJHJ?v#4e-QG5QHqIOfT+LwHoUV29g@Vzc|G~Apj{-$z9%TzvmJg&@NPl>ETcZ zJ6Q1N#{@6^LeQpyas@$sJwePxWhUqaV0lLJs-k?YNmx#l-4EM=r42oHEt;@7En7$6 z%S?Q&Nw%JXy)}tjA4q^{g3b&4M~S#BE7%D}plxc0=PUOxkS}9J~$K zP*BbijA0D%#U=T+qWU$XXBSc4P_l4GQSH0Qg8li(R?xhU;0FZ0vt+Qls9@{<`$e_y z5qQa^*hkboA0lplLD(DEPtZS5P<~L*eqGSnOHdymh?nAiRFwUkv>$;wOOW-U4imH= z0}dB-_JCrZ$(Ria-l+d;L55IicNfJZUG#FrC07fqf{vqPX0OvPn%np-lS3Jl&o&S5 zo9m(uXQ;y|ndAAWJ&2nx7(=bk7mM=EBFXFYw3nYHn?()Y0qjgFdQWn^phQJ^+0iol zfQU!Skc;D~GKAFZMFqpE)NeiDO@e^H7v4>9Ajo!y+7tMoz}LTzAsWOpXE%%TO<}Ki z@C>%@d#eIW+9xP%ynV&fXAEp#9+c7V|9_5~A@0|E(o9zfe3#2g3q>_o397FN(kBG< zipuA+EzSK3dIzHY!rsFuvkPHgT+(!@0UtTT$dP>o3e!eOZ}JL}Z=$h%&GUZmZAzUE zXU%^j@WRpxj8GeDy-4G}5ne?B+X0^iJ_C?1e1_j*n284vpAywMgVc*CZvhDx3tZH= zyV-9QoWd;W6J+hR%ACU;cSHe9u)4&XKYI$=MTc(`D=lLlq13QB31~JQ#L$4)IJO}_ zTZQNH`sINH&x5)UxLv{aVo~$w=x5z|f*RE_&Gp+d6WG(97v@GAdrNpz%h>l?pq-HC zd@Ud0^NLQkGNmx@d#cQrBlA?n*}Uy5IO4I=CCXCrM&Te*d3czj=f<79@LlicN)AxI za3+~A7i3ood`)e7DOv6$c$uj1G{GyOXz}D;QSCFL%1?>1H_k9k&#+C#=W*o`oClvBayzmXl!xBZjZsTADTP9|^49JdD`+36k-fnvgtQch( z)7aqcq%sG13!Vpw8GLlC&8W4_JUfhMoG8dX4V(j<3ot6oaubF|#n7-OHK~1oWA>Mev`>>=n<9`7QIj#oXgd)jd~~v#A=K-w$edM$I$wNx@t?t3{G!85JJ2 z4JHA%v-cg^t7A1r0d!^C>Px1q+C!WX>J4V`cBCiCNBi{{bT;6Wo}!OcTymkn7sO;! z=q0Za*d9^Q1;!2$_##1jk}%_0=@Tj?ObAMtOahbf^&MflsHR84&u9&L`&1Z!?|?VM zvtwRc&+QRBg?HxH3MxiLTtGoyGpG41jKV(2-5TQ_IM*p|{2+=ySyZN9X+a;zc+fh6 zu$ofq%LEgCUzm)iJ2Sy#F2U;sC2f^5H%33!$MW09DGGjHV$=y3aI)zw{a6*W1NezsL@o3%@Z`YiO+0$OzVg{FZ&|>u&C;zD zSEtmuCx{ocA$0hn0^iP1G7P)`pL&L%JNig|bGH(FWsnaOl*cQf;mgc@P6^(>VS8)| z1I=jDK$|wSY3??KnU9*&Hia=aC)#2HkMQ*vz6+;*NQKU2QK|?6Z)K<~MNU<)WHzlC zU?pN%=3#|ERhjXis>X8@NNE`(&&MZIWLoA!xPRPYo?SF!y$ zx+nm#~OF20j}*no@+PJZ!`3~1nnt9NeT_s zpsURLrN9fmfe#;7b6vmX$?^^29*3IL&&HV5ye^qAMK44ks68a9RW#VUF8=0BG12@) zHGEp9IS7j0p7QYS4T7=F1(tU^OGIU_QcS6LRG5ap|jM>=>zU6lmSKLm*rvzTn$zhBQ zZ<&<>J3z6Y3E%VGyoc2N1%nfy<_P8@x>T60Q#yZchVm1FjDVIA;QbpVrrl;ZCl`#0 zY^GqfodsRkTymhG{J3E3aDhEi)fTAEA(d$-Ss(~DkI~l(#!>wc3GV!`rOLBzLTfO< z%!V7jjJG@t-Xf~g6GVP>l&F%gWg%<8tUJMX3wzQervr?DiMgVD9No?kyQpNYo4v~yn2AvO=8`3ewS^VuVRc03`m@pP54D^zC z*m^`U5M8KGxs<0-0H(Syk4K7-J}qc?Zt*sP!(VtepGUHNZ~N?j=?86~%;kP6pgLU8 z-YD=9v=n2AIi_#j3LoL&*nK<+`@$`sQp+$;6eN^%kTEF#Y~sC?{Gfv4lwR492-lrzsDp--*K`vktfwz7~eiix~6`QVUze71vM>rP~o}O(<~h`Gj}wXQX$bZUNYj|=FcPMYrbo4%Wu80 z&AdJ1w_cSV?}+lLLGLI_EQ6du+$|Ju;b~1i_pX9+UqO1Dz>dV@x%YKdRyu{MnYUZ_ zJDDIObPQ{c`&x$B<4u|FNKx^$&gm(}optKJ>XO_is(KesGvD|zMQx#?d?T;-59MPD zCLa<+r4^0OT-h^NHc9FSR7%`3hZa-tZnI7!ZoVKxcd^eu`m90!C}vXU?FFO#T;X%XokkoCZ#TrKK4Pf-0OfG5 z(o-+fcIv5!S;%vDoGNdifTtA~r%L9T;wpZIR_Xa8+Z~D-!tNuz99Lq+i4wPkF>BG^ zP+Y!*1b+n#wRY8#yo%yS3jT=-R($Tb#d3X8rviMVsAwY@h5ZTcB`9GOzV$b5w%ki~ z@fk5Y!1HksUmh8@Rf0$3IKQw2Z-|`h52{+YN6(EK+DoF!35tK0Ao44;j`WX$0K3k& z*DvDb^`5s7PVyDW%p4G9Gdf5)30x_dxKZGx#<*Q^7Ybl3#65&uxav>zUIWLh7-C<`V+%lc_~Sfxvb4CXQr%#d*2kn>R~1ZTNzq>(^gZ zKPh(=_)xod?)mPY=+24BCiyTg_)%a@6=j2Ng0V39mB3rQ%@o2V#QmJ|kU_Fzl-VoQ z2@kT*q+}!Fknbxxraeo0Y1()C3@oiLpa8@kpV{+OpEhj-WE$Vblk7@0_~vnYwdFM? zv+~0NUt=G4Tf5hFDDRDw2Y-n>d4r1bHf-;m@x?xYg?g_xr>m-z5f}#x~V& zz5bER64j;0HlE+8b3vU`i)zeU>7;`5Ec8-myDqW+NgGGQ*OlsC7hSq+s4Sj|y(!7A zRpvIlAPQS)(ZHPnC8f<=+vXDeHeXG@wUs30b9*^+Vp3G{Rp3U! zQdSKeC~u-?Z2R4iF|LrLUEJvxdgu? zi2H_rB&v4P{YF&W01V5B+jN;B!h|5Z9O^Q`_^nWggW02kk`=(P1nM7xZqOs+hS+s@ z_%wlqKp)f3S^06#?%fZ?(u|$I4F=Si&uGPS@=j4UMZ|rjo~MU$UBm1b&jLJ7K6pvZ zv=hCbSyQ6Cl-IWbEbhQwq!&!?0N4u=H!E24N6KxeslBI1!HY$tKApjvhkX-+4eSZx zZ~m|fSW259pLblwgAJ%2mXV@-#bg*Ai}m%had)IsDCHc17f<8XVwx^rnQG8<2~x8+ zh-T~QXPzb7k#&og_R|X3O+4)2dEu)h(7G0=Y^`+{?a)?zry{x}%P1In0uStgB~VhM zO&>-(0DOkSmeg02ZRs@DI$lx0WfGak=uRx@Dg5ZhI4~L3v#aQ*J->?bovX#J+ zeqxChog@yDUnpM&GhcW#?_u_ZRU>RbT`YMpE}JLxi_AqaP1yIWjq?>En9m0J%+E{T zSLTiH7nt%PpS1}3xRg&5RRl}&O@-Qb7<2*SB>3Ep3y2h19Q27QQ!^X~JT@$9^ou`P zjK4^!uUBm~_5~KjZD8M=5l{lQt9U&x8mBBD@U!lPYK;t8)Xsp4gv?%HgDOY-`2-vW7hVC6u-F&U5m$qyPv}b*nY`1qcC41G)$D1ZD(=+VdJ^WO^ZQ(8!wlB{guo|(yVgng zMVy|PU5fW9)hFC;AE$U8+2@g-4b0K&I~A;!SH5gjGTY3zny9)fuv_}-5K)cAvh$#9 z4AFp*2YKEI-FeBeJPmEEm@i1)twO^_yz1_PW`99k|DaaBpkw~Yit}l#sb`6@HQw8% zWBV~U?Y+=9;KbHAUWIyBV&a$i_vY-vppvsxzjEV$mF&Z=V~k{<;qA>P3ndqPlpeBA zW3vq_cKP0dsIVcmSZnKjT2wk;uq?ePy_5vn*&gb86xCr6Tf4Jw!`{8h;v2u~+eOuv zE7fXWW0h=);%w6Ez@M9-8Vr5~MF)A)p9E1ud%Y4WmJ6Gif_iI$ZxUp)1YRyocNUfN zZtZq}C)Wv46|0BU=L9u+!0fXH4U=4YfnX`0ihlh&6<6IPm~CqcTl%V}$%kFVPE2}F ziR%AMP(CN9{w_!vi8+goc0cFcZ51nz)tdzAmH;b{^+1rb^60Bbs~tu8Sj*rr;xN4w zSY4v?#xIDPa=suv7g$Kbb%OF6P^?g<--2Q>HfIk|WsByoMAdAisb2z^HKM!B>7ts~ z3i8baDKb*ErNB#<#Vk>ab`rF(e`~HYej_S>7NA?Ce4m2JhGcfvV8T644Ur>TbPf~e*N-vLrk zeW}2be#Zlwao#k_GVnf7B-IqHZ2$+}kSHGRtrTEho^cnY(L1OE)S^c^wYawr*d|Xuh4uJ0)j)FQ(kfBeTeI=MryxP}q z6z3f{>CvM4pAp!b!GQLw;Z4*3AaI;zshsL&rvkT73SZF6sNTPuY_2#PE~6h!-q+`V ze88m)eA>DE7V}9$Th0A4luc_#sVFn<4C#8t#Y&jZYjxqzHJ>N@0*~~=VZPxC{lbeS z$>jvGH3v*m-lFeinDAa@$>sM;v027O*_HttVEXp)F&|zR_9f0T`kkU0_qE?C zVd4hm^Ib00rK)6lp&(mF3DH~ao)r2afvwmL4HkYah#tlfUF^NqZx*C+Z))X17S zxpxr1pij1pJR1gQ+)8=t>St4T71bOj7|=T_dS}bSQx9GD2u5f;NOYJ=@rj@#n4)d! zjJJVau3$qyNGFxKhgmZ$P_Tk&S^M-PTrmlUt0|8TVr}*r-pEU8(T^*SOtu#kl^}X= zg#mQ-5LE6+`-;lmFX$af+$RMovu;M;^;t5XBS=53VD#up3$>{5>GuTDk1L$3`aQwt zf#vkIMjl<=H@qu*{kJG#?zV!FTi4E9GM^<#uO;D1L3HqXm8f``#GNFtcp6>3J|rr6 zgw&rBw~Sso`g^4-SFo1O41xW<7M?2KreOVMft>`OzKf`W`Lb>Wy$=XFX9+6nu*{+H zqQeJ8O`vauWoYL!L}fdRYLGi`g?GM(`7*$18m7v?RGDKS9%EXx5#KxGydSQGPnPQe z7M+(>QnT&!+c=$A4fpiPWZlB_`;*Etcafklulu&Bz|5Y)ZWh60 z+V2W_mOH1Y?OprRJ`Q!0pr)gHLqz=?)H3>+?NWVMb3AiP*IUSZ+5ed!S^^(Yp#y(- zIM*2cbkSk_*1QCU=k-f_6kf{LGn^r-1hx4AT%a@L0zP^|w^?~2?bFSs@)^Csv0X>6kRL7Z*_)!$ zD-?W+eHb4F-=p1-qCO_*oCXDZu!wE14DIg}9Q=|vtSRlXD!$@9+U*7T>VkNvcn(2C zzxGT)<2is?BTWUq_@I3asiRS`5y3YJs<#NzcS14swmm^WU}=va&hsy0!3R+rhM&E9 z7t9~NV{Rb>G4TY%T;Zk0XRrmu8DdN2vp+`95cxY5w14krI3+a0DWRFG)O6S*@|zW` zh7&>hpo0021=(W)_mZ56phs8nQ6amY+@JoE4g|iRsW?(pPWSO8NbWNmQ<~}eK%N7Y;r8!Noln8+&Q=F|V37yavN?Led_H+d&7$2!?;KenoEvWhd z(K$hMPL2YwCpI^W3RjA<2y53MDWk&YSA992jr}Db-X8c%K61R18Uv>tH+cJ=PlEWW zN^c*q{WKahR#kaE0O3o9ylF3G{Ll> zzvp1joUc~G79S*aHgLEK@REkN$2EK&yB{gc1tyg`X=#ZmrsGK+7HO?_|Mx0$*qlsviZpTCqXzp6 zdRQ-O%Ih-`*opCAE8?vD>`WXQX}YVRPao=CAqYI&dlv=+l^0KGxcgkMr=_q5-!ngx zR~R6CHj{$hrGgHV(tuixu3517+oN5Ux^Mw|$p8_eZxI4Jux*yUzAa_u^mZ&?fM#K$ zZ}DvbReMH|z9_Jxg*wwCeV5fMUeQ47_W2Zt9iv+L&Is?ps8KDWx3b$rHH!fBOJC)X zuSY8VpaaKDkt5O#1=ZdHtFLB}nN4B-D2#<=QG(+|9;_q{Xp$q{8jBUQkQLh{@cMsJ zoL#@zY#2>fOc=ho@)hk@M<~_X-77wA_DWVOB$Q~JvR%s7D9ZwgezBAdYCQ%25A)Lp zX^k%kqLs;ZhL;(b5bpZ$mx0YnFNs>pqV!t5;Qww+`VFbi0{80cUuxu+czhCDT646(ZkcoX zP+%su=fk)q?PL`dy9#4J?nt4$`Sfu+1xOk3-cM+ULw#&>b~x0*ZX4)zUZLC#x!q=K zZ|Cso3w!&h;iqB9N|O=WWQY&Grqt$PO0kS-270>^vQG(`zbPTI(h(O$?##?enGwrX zsRk3DS!uaMRK@5S@lzjPOID>QX$>^stP ztOA-f$V&lC8O*`7*pb$gWT z6ICr7IDt2Lp?;|wFZQG9=%-$%vu})KQo*^GE3?gzwx~x<&dNNhLV7Sw_pG32jr2kN zqKlB=zUy608!&l!LsN-7Y3|s1F5?4uLi4s&cj}Vi=QrnoNvTVrWv1PLj zqjrJ~aOE^rD0o14fL*3IA31K$QT^i1LWaE!h?Z2nO(XWEdzH{I#iYjw8uojq{}eQq zhtTt)jza;14Fvh5sx}3|wT3@;o)cyDaA4~UeZxzp1*taB*^uYcc74hVd^cY|+v627 zTiQHADayyBeR9`6-CHbt@pd27xs=zBS}$`-y0@VHqQJc*r@wfceapwQf@-6zC-s)j zI$%_E_-=hTmnUoAlhole#+owm6^vCoY${PU)8f;%S-#%TyHh9 zyoQ9)gf^)Hp5UWc&$IE??iw;CW;=T8(+Mpo^%%~X%}Q=!zXt+tv?#g%4Le-4eo((J z+U7xr^VZH_bB8S*d@>8T(Sl*Sg$>TM{aioSiU}j2=L8QmSW5>fcd2`lE>K*JCYQT@ zeBb6}^|LB-r4sBJzT@ihReOk5cEVPm(|J#feOW~L>dk71Y-d`->fFm-kndrWUe2p} zY~4D1)jnTlfJovm6aDzpSuOvyuk`xQtCU3l|Fa%&rZRh>phLy8Pbk4x=QVyAEN#8M za#yNdGlmueCJC`+7~Jd>^lRs-VU|S6nNwcpk6HvU$f6naA6> zewIxYSQP)?@5@?`>M}2MJeVFAHMmOPGfAIvJHu$xDKw|s6!S#9l#1%w_eu0(xd}n~ zLHBM!GzKGQhxZ67{c9_ivUr1q)hatFZ0{g$v7m8-*$lp-GFONT#XeBHw67^^cd8rw>VK$aUMbT^|>{?Q7(_4Of~8qCunXF6Q zlFzC_ap9G>>|HPLSM~mT9}LN1GWHnbo!ahj6PC@a=TUN>o>RU?(Cn|wDU(+VgX-K) z@M2L5*c)o^I`yzq=WM--=gTrxJh<6W5ULLe%)%RZPK}^sLq*NJZ^g-8uNt144(-(O zwq{sWONaBU_WGcp{WBEv6qoRpX;(iRc+~Pe>~kf4TBexFqucYZNB5T$=c6<270Mjv z!G-+nR3&&bN_5KT(LJezafWz$g`oWRab7$@0q%8t{myrkrNd0}Rgd^B)Ef2>W(Pdp zF&O43u8UILd|BX2ywh>LksW<(j3AQD;ss&SB~91cOVGjOGuM0)lTY@XAfYAgn9@$K zeIKq@0rDZ=n0LQw73efpBX2j~pe5(SH){B}H|d0VqP&7?Num6%g68PueWFq`(3M4n zvR;B$G zUI*9$w3?bJ-%wC*LaV*Z7Q~F*+8_jzsW1`RD%3edRBhlE)7;QT#s{5#*`HF)1W1=dXkEhX0 zmY_CKq1J55C5rRGGdt_8j!;5vzJ`udyR(|FS;s*z3ltH=WLr&J zdbZ6SeIx~&5^Gx#J?Lyh@p>6w-~Ou7)1Vl1_Q7PcaNN~-8Z~7C@-3g<)#-EA8Cs?9 z)XPrNGrW_nWwP_}hxhHQMe2@%atDCzcGC|Qq)eZl4QkJROauc)aywPe zNSW>HqoDXa730I!nfM^{9EL%(gKRCz{>}1ARN*d9M=wqibUqJto}j@XUR*7xSpu`s zGyew^ojRpIdtcCP^x_;-XN@dx*QXO^x!03GFHXM(b(J9e2I^I+UqSCo`FOtk+P7^+ zlQO-oro&nFhz@}tQ_wa`Gx&;$CEZ=n>_a}fRQZ&ky++_gLJP+}^3=On&lq5eu$WxF zi$@~l50KY-3j}?#w3qQ)_ryY(t*_enSdnkQGDi-$O>>ycJg;{@sJJPxLvup!{Rq$M zExl(kF(c!9ME#PQRtr>ogPnS*Rf<&gRlA8w`EGp- z*mmHS9V99o2<$J&`JjFJZoIGZBvC2Cggtm?^F{fp#m>28p;Kpk?v~C~-3%-eObn%r z37DI&wCr3ZDm*C27Yni<1DsXx>FV&9sIUZhL{L8kg?%mmnZWM4I?JeWym&gYnRi~J zxG+tSZ6HWC1z5^6pWJ_@sFGQ&Z`Fei*Qp3{*dba|Y-;CZcDA>mU-E?f94rGsFLLY3OA_N(ZK@(WQLsWvzu{)C`#erN6Bn*Ta1~%x;-&y*JRRaz z7nHERsw)U<3z{_r#dLvZrgCHAHWg&A6WEVt`UX*U8s2zf*-F8R8O(>cQl>HALq33M z`NZ%f^J>1YpqMR4_Ywp?ayS?`0Dy-LU}@FSg7P@xjuP1P96lkcJw{L;E0}Tu33H%M z5}3o~OxDdA0<$@9GqnrI^nArxV=m!(5{sPwl2@6#{;MuNFss(#R0QLu1|pvZxB1 z1iTU0LeSeIVouBq)Cl^(gR!pbsmxXY=$)sJ{yA zdTquFqOyeE{;a5Kc~Py|>&nEfA_%JiD+$uo1?^gbYCS=(Ag&9*hJ8}1dY!0jGeNv^ zcymz&ytofn9^aPWHU#0yVMl@eHD}wAPy?)1C7%=66y_Dr0Dn%uDd^520V&N+zp~#! zA(g&_jjVmuvdZ^&sI5iWAy?c>GKb)21=iVp+SvOy?8dvYP|i|?&1gQ?8y+FZ_LV9X z*jYF5MJ;emXY*X%EuAB3oHx&S z5BtQ=;CdzOYhpbLu%2x8Pjhx2Qa*d6^46v(4~--MCh&$V4ApqTGUZjvg#zzO^Ad4F z8)ROyK_{MzPF(X_dolMJa$9z4tClYG02S)1{p=+?97@p7KvS}PqhV4iv1$x{Cdv+d zeBVU!6q%_({(`7{d8(EPGJk-nqRI_`*9gKiU>)EsKo8hfVE@G#{lz|r!%3pb^8k2u z27k_Axxw9Mit3iYN|WgVn{A@kQ}8jKHc?R*6Uc2utLz+XdWaE-6iZJNEmtE5*|-de?f6}50G5~bpCrp0yF3W*_$YjsduR>WjcCD^cxDNj%OZGExj=?S%;q?=J`O6Pp^!Yf1(<`t5Rc4 zsjhdTdXq^?g8j$^kH*U=iq|h0e#z*~>3?4E@QO~n%EsLm&R}a#3S~D8J}EWvB#(q` z+736mTc`6QUV-X%cG82K8t*zEBcVqPF!;r_@|Ac?e@31*Mm18ns5kNjMq@^&_Ganm zjDY7xkq!%$S3!M|OwLr~HBB?xDDasxC_XxrXU6)U4}Y{s->Dbe1{gDwdw^dGykWzf zH9Sl{GTS{~JW%#UWhpNeG#*0O3c8ITKSNKlaj)_e$c*FSGfMWUh06VpHt=qL`_A`+ zDsxPl*t-P$Efe}xTov4$U(lw$>>@IF%WE)m`$Y8&;oFBws%y_s*Lcpjik{3Sh(H>d(V3zKaHNVl+mE#m4%i@W zx6!5LwGrd7r1d;+^anxhe!nj5LNnFoDon1H3VgD-@nCniV0!PnThK8F(*-_{7|bJh z^I#F;gHW>p8Ye;X^7-2AL{Z65>+pJadJb{tIzdpNe>7JJN|cbnR|Em0wu=h1vroW} z57iO-j#)|*`H8Y5PY6nzHkb&aI`Ry^eSsijD=Hzdpkk~wT7`3 z2}5ndZu6~86hm!d0yfg@D+sd%_COQ033p6BSzM_(8tQoRA=A`D^DP!NmPdB z;N9ROr6D<=xJv}dB;Z;68mN)J;1MuX6|5i>CRU3_B5$a3ZhfIe~7YIWsCOqj9eqoTa1qf#VivRic7k{P=YUCr{K#Z_;hW> zS%A!jVtm*}ak<6#UHAnOeEv?Tfxr@c&BWK9P4Mdii}3*oU?!7wa}x=0)&eoWV*LHD zQm3{A-`iSLl;HOjRSpOaCHV481xIpweJ80*Hmzlb6+~HDPu751U(lH*NTx!~gxUsp z8(^UvK0bK0Alscdg!gi9LB~SJ0(C+UN#C2+IfcfyVQU#>>3i0=L|H0N6HoD53y@|q z2z;YCzA|U^3}KtX$eds!!bsdlhAXW(%n>zaQH^dpW^LADnPvX@)a7r2Y5i6dOE_1Ygb`P3SkS~Kq+$ij zrcu*<0miS@*Ao4*qDNS9ikp#X*i!M)ZkwSw*e`^AA(eZPN=Nr`^wRS4d=+4^%)T&v z_g)l^;e`2$JkmlhB3L=p1A=ASe=06`>R`CUty1W^ahH_4-qFLg zb?*RZm(-?Rsr71BJxc}d zj+1%?dsZm;g3U*HBR*NebnMzEbed{2fqmsz@(6B{x9Z`U`yVzGdl^aHB)nF-iXcaL z_x+OI;NyND5c7)ll;Eu(3mE&^6vf5e4rb;sysp)jKT?hT^zdT7z!&vZS3xZngomM) z08ar}@_ol<`FhIRiC`btUtkxh_CMsi2khnFzVj0-;K>exusv{^pjlD1O17YC$hO`= z91fa{A$x9i#U z%eW0kjItDN*3GEeOo82GW6fG7Ie}lCDJZW2ej&(yPu!mfUMpz6N8C!(?+t=%2PldP zxuD!kki1=xZ3|Ts=iLtH>1Q?umzVG$%co{7bpFKbbtF{Y%_~?cwc^RJO7~F#_I@#% zCTwwtW@dk~eN=LoBN(T@SZ80jsfvmQjV(k)bsdIRVV?{i0X&#q6crh*hveqGB^@L# zf(+-1Y&2IeO;l$NYwvDh&D9pKTIChY5Z-^4TtMxats2`8JTsl4)CLY$@X0KG447Tw z#b)jnA6M|@=M8KdLGMo8RUQ_Vc+4=HMiNp?fK~Jv^tfF~kh?ZUvV*=Rlu~-J4Gl?@@%m zxVJZ+IS){RZ=17y!}sBOG$x-_@!of12UYc<1mTW-n%#OzxqvpfL&1`-5H45AHcr+4 z6fY<){}fN-Q!Id=+ND*+aE=#@A;bjqj}k^}*F%Zt>7jATi}GE6p4tDeu5*vpbgJX{ z*{}U_To(J~J;o*V8bc$wj3H$W_A{M>VKT4GArW)Ypp+q(4C$SjM$EWP%d`{08xs(hKDF@Pz)uAz1ma3eTl3 zxPjna$>cZf5rhwuyCb=LQGqHU*94ECZqB!r_aK9&LW$TKAk8HL(--$a<@3v!S5K#Q z+aPzOx{oX_K%zyE>Fjq^={eutnY8~_rA7Cfxet`8$WDH#-k&8GC*Nz}gnvmY3x>JC z1-%(Nfo1uiwRm|he{|TFb^ThTZH7v-IeZjsEMyyn4@j!ELfuU$Gn(3UZQKE`I6l8?iKSJ)G4di1#j1$)|KP{ zR(s~|`r811JRC*_1->zjYhi*BHxLy7s`|{$F&e*mX5%xZC=azIysM$|xDmadVXJx4KjC z&`jb4m4{|V=${#+Nj5N>6WHGy9hmG`pS@l~ny)wwn7 zOO=qYFJ(jQ4Nyk{zvL~+*i1;{z^+0bk2DDhBjai7cDzP^NoqWrG|Ww&BX|+~k$4^n zZ?km;(j~&+H<7Lv@>0S6+Q=1>syj)0Sg_6UmTvXmNlinfJtH(;L48c9KOr<<7wl+O zYwJ1Zb-*TqSEB4?%q8u7p>+Y$w}HDgFP2nagnEro`>{~{MCkt|>U~070hS5ral!6o)l*a2Dni;& z$eSQxM!Z2$&ZO-F_6OLFaDWgeqE0}%h*PQO2g^}E#G|w0<-+e)>iWv4=m;pYzz&tvoWa32 z3ZBMOQEc7E?M3FV=Cco*3SN>VUL~o+N8+_6TX#tc|It0?UQR%@osX9kI$%}OKFBZl zX3Cn-&qxZ?oOun-vbWHS@hyHVE^J)EZ@Fi;5$!?cAymGj2;BJYJ(YtO3jg1kbxlXv z@W`^;q0ukJUasx)O0F)};tYI?|L^Y}qTFGw0VcPiy^w607jreYEv*0!W|keH1jyAyDaRQVl5iOOtUVOY|?DyALij;+)9t!EmA#R zQO8{89||_oiL3RxU&X$%FSM0T<^4mw5_EDsgM*vxir19u;IuMJ$j-43vGL`_mzJTu zL%xqP*4w?VFJw2$mCeT7^!?&&5;4sR_s7Kbmt@9R}GM>2yV_Q>4e4aZ3>OP-%7$-6F8 zUF+z=iuV<$lRekSyTe61C{HXbQQp&~)^UZrc4dX-@*0g^F)Q10?XJhsbh47;8w6&BpSF`s> ziuVcON^*ZM$y2sVy^71;>*wq$b)+6xsYADtE~2pbEoG{feSMq`z$34*tj$%jgcdkSGDXD|INd9rw^mx*5$qz=K80lKO-6&6&y`T> zGS^_YleSWoH`Z;S3MPtLc63#ap2s^g|>VoG+VD7zGQZ2Bn0 zWnpN_uGb(gO-5Yt{&jeb6cvZEmVgbL$isCZd#}xzI=$_XO;DUFwg0PJ*WTt_a!(OP zW0v|)BjZ>hcZ8Ajza)AR;$GkcfNk=;eD7=CccoODs-!EbAuBaf(L1g=O_Ef{Xw~VV z3O5Pfs{HgDBzbL??B{oz)X~d@_O!G)5oxsY z>sKIMDTK?BE*07s6wl;xw6*t;E#y8?N8v3LW$J=tEA3TLJP~4o)qG9NY8?&g)k&|q3O~Xcp3FE zVc<0(yG8I1q`!kVh4^p5>+=u(6X`ubUu=v*aLWOk80o=CZbM)lQxkQ4A+INd5ki?- z;T8sF)0JVQrz5w3t>_k#5>1cr5x@r$wiWUi!9nEid(FF`x;ZkET(?Ouxy^B?SqQrc zX(B33l=dW~{e-wbpq-K?lhzi(fv5)~9Yoq^kv@Yo1$+(_6CP%uP6tzkc#M#a7QF6T zHH{4Sa-Kx)@!$j@x!vRp?R^+>}N4;z3D1;^(!>0qjlL}e(sv87OklDCnR zwin_@z()ng>1Uce;bUM2!Rr;ok0b3WWcr}mI|&}hNR=dS5|*iJ-N^L124QE^@j`7c zA-Lf=iL^KLzr}r#sF*`ri2I{{TIhU|G%D+KfDk7L0|%mB#B(`FQk^=laVxk+=zCId zPgYt*=GrkL^&X@nl`%*I&udjgYtCcGE{~UtS{#E3<+K$ z#xt|ChqnHuU(~;@v(&kv(tkB1X#jZKuWvm`j`OHns_88LII}-aifGt^L!J@J0OJx} zGGJpJ;}CA)<{-n8*-oE$>g3Rln~_SB<1nSE!)PerVCB>apTFr zv{Y7owG%k$^WX>_=K;JjDma_dpDTD*aZgPd*24V@2iv#ZSHEqYAT|1YbESH4x5Q&| zHP1Y7v`Dy!JGc-m5&CIByCqjzxI7Z~^!gC5Q0L!z8f_US=dO~^;@jPvt8tcw8|hzA zuA6C_YV4L+g%Q9|nH4!C3qpmtY;oBBKHxO|jw$1nKLKLmctF9wAA zkM)c4DyAbHE|h)-``H^wEnUjzNeX*$8&3g`Dd|jQ%|eGuWcJ*6Od^6_3+XPD-p5P2?tT-&-^|fVK1&(-`%ujhKuk zUz8UG7+kFDmem^hFU!c;8{96x@DwV?h!l|KiQjEr{2(Q#^x8`+t=azhu9o**vwM2@QXZ^K?Tcg3~4(bKM>#gd2ns=6pD3Ia9wF zHoZwn@gXL-mj8-DjBm;=L*dQLOxfB7XVwrC6dA-)TP2obAyJB;=QC? z_nvoS{o>oC_2~a^Vw%I6f~NqLQ9KXejZ#{*HM!deaYrP~W_KvBO#B(Gv>UOQp7XQv zcpmR^<)OS;N^`(p*{SnuQp=#;95NPwb4a^X=nm?2XX`}DhNtHY8_(nWt)3O)^FsS+ z!I4v*nbUexs>Am@sMnp8liVe`mR@%pK{?n+2o$r33l>{oG@$b_j1kgqV4UF9YusBg zECk?eWi*Zv25%PJNcV;_Ub`}4q#c_#_WjtrIzCNpw#r|L$fGEinKZa5D^H@Sa~#FH z1P5&@sXJlDb#nVN*`wDLXaxw;+oPSnSQ^c2z)LWw_k3H5a$zA2R9@3&E} z72KsVpT>Nd`M0qyStet+s+>--6i1+ljo@NC2i|FB6{3x~{wL=Md`ivIWeVy8FO* zKpu;<2NK?^CvT6LjB2Oj4y0v*UCy$T3a_@0h|8QnL-3B|aT6rh$s3Zft&qkEcDLd# zNV|gF$mr+panN$V5Dx?AkzvFAj_$OqlQ4nDiRp{~P+AF#cTKmZGAf?E!o%k$CCJyt~fqNH(wT3wy|7966B`L8bGDe}j^&)=3b7WKDvN2k!=^RuV}dwTv0N}HTY diff --git a/.vs/dimension-adapters/FileContentIndex/5a5c2c4f-76d9-4a47-b232-307df235a6f4.vsidx b/.vs/dimension-adapters/FileContentIndex/5a5c2c4f-76d9-4a47-b232-307df235a6f4.vsidx deleted file mode 100644 index 80eb9ab0031fe1b152f0bc5e7183cb585ece1b35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427046 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ξ*V5GR5w!!jy=dK&1^r(i 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 W-SdC0-u>FO>IeV-@AtlXWBotKEf*pH diff --git a/.vs/dimension-adapters/FileContentIndex/ecbb4cbf-4142-42ac-92a5-7ccded29d053.vsidx b/.vs/dimension-adapters/FileContentIndex/ecbb4cbf-4142-42ac-92a5-7ccded29d053.vsidx deleted file mode 100644 index 422e5348e3ca26739538eee16de39f07eee6f317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5883 zcma*r2fQ3b9S86iNazX(*s$PP@}9oCz1Q>hMa0@VtV zR#3N8uhmhlShcKcxwPd|lvOvXws)CLRq9o|*pr?aG2U!_Zb>Id;?Sg*Uo|tI2 z>EFpV#q2`6qo$~Qams3C2g)hsBIUGlsj4$oJGEV@ zfumD9%66iuj-Kym)9IN`mUgU-0vc;Zb2E|3qGU2k!YENuQbvi1k~%7j$kkD8VwJ|K zij|AiAlBVj8{G(XV@Z!Y-Lg7RI_T^6tfnWQU!*6~c#K#_PRF5+mF_B?7J94JS)~i7 z&4f0S+JxFHY17rlYTMA(X%uESiPnd=za zYn!Jwug3FgGOxnC%JQl#8e!4u6v`Ek4|c zT}U5KQRii(%2<`%7!RD)WllHSD2uQxY+1R|=+dO6aiw*oQ`LA;=~ksprEQh;D|+%w zSEZ>+TUBLc%F1r6Y^$gUXlt}HU1ie3q&rO3FxjLj zb7P#bfw7^nsd1rkbS+J-O-)a*WH&C^iO{x`ZCM*cHt5=*X9H)$z^b0r4SG4O4z1p7 z^*J`pZCYCTw%xdOp`~{gPhf1_v2|t#^a0dv{1O)~IMs40q}Sc494~j2xTtn`+d_JK zTvEC;b7@Xrp(|sD&xmfyxvFv%?Uy=JQ{w8v)yDOwUB7e#dg5N)$!a}WXRgjWb*^iC zD`{=A+7z{+HA(H#{`6#j`pmvI^lfif=~-1dD56272QD4-%N@$?(DB((a_Pk6r4vir z@RLQ6Q;WjodUa+0>hifOdv>0`Z1-Nc|GbrDv$AjR>hiAL7p&}A-Mx2DbLXy|`wpOL z*UCk!%RBe2tRC3Ae`R_19?Dw>RxiK$>QgQ|c-1<00`EI^%n<%r#7`sI5h8vb5u;-M znx9gLd;>KEM1GWbw1_h>eyn($c)W;P!Tb%VAt3S_BB2-+<0n#sCy6JEHxf?~PbCo$ z^{0vW8v*%Es39Qon_08eh_m9HI4>@Uo5V#i z6qiT@#J-!wJBw$EcM-RUibO!H>mZ?k$Ri{aqhdU!2DR8F5fI}&F%eU7t9Vy2BM}hm z@P`u?VkuVQHGha9>WpYbC)Q%0L_pMUM?wLSpCt~&9VB8@)SbdplNvlNK2W?^yo5wR?Drrf6cG8P;)BJ@#D|CvB@x$0?DsIP9*X?o z)Zimz93p?D_$cwwBm!doG2&yz$BB;@pCCSwL_n;2lK5m20Wtm*@u?&NV*F`HC?N8u zBcZr1QTGh4`hPM0Oc{sBpCvw9e2(~B@p&WyqW<~f3&azMe#kiuyNDgKwmU7!~7h;?beV z-%Jg@MSQFHHu3G^JH&U2?-JiFzDIm7iGbMmeMl%E^7kX5fXF|9gaRV}p!gy2!{SFs z#HgtMD31pBk{*1VpP=qgc|&*c(wR5@#o?%NW`dE_e*NVGf(LHwimC-KkXUq}SRy1yc!fXM$Q{+&cXjQ;}(1w{T&Boq+&zr=rw{~-~h zqVB)c;P5gO`8vA5Bg7-c_2LHcDDi0V81Y!~I1&NTJzhLP#@7;4dIMJZ|1MBSPC9g1 zj~-umA3x!Hyn-)VP|S6F;hlMmH{cTP`7yt~Di7{HA__$71Zq7p~*4 zg71nCKkT$EDE3=%&+q4ZJi*1h0Z%Bb<%4*8p5-y$<5|Cgm+>t3`2M)ZC4Mb0;|cC< zpmRn()Aff^K9`sI3x8I8MvXcy=B@lP-qgyI0-vQ6^ zg~$Ab$9Su?#(0AFJFG;}VZ#rCkL26%CH%a+ACGY{r+$JT#@{KI@aN~3`Te-Z2W`N) zyevj<3obm%`|(=d#n<^We6g?No_|0t;Wx)G!x7l-M06-lA2N0YpG*H^fzKKnyO`IF Gjr|X$97S>f diff --git a/.vs/dimension-adapters/FileContentIndex/read.lock b/.vs/dimension-adapters/FileContentIndex/read.lock deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/.vs/dimension-adapters/v17/.wsuo b/.vs/dimension-adapters/v17/.wsuo deleted file mode 100644 index df7c69cc02110cc1ecb2bdc5467526d576f8384d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11264 zcmeHNOK)366h2NV5ZCUNN zzxn>mZ{mWBazgGNjLO4Cf5fQEGa^r+&Az(_2M2t`I;ulBMjW^*ReTyUE|;Z(XH7n# zC<1t3cx?-aRQ}2Q?|7WWkFZO34}L^_Y;6h$(Kbac2M1Xxw%>mSi7T%CZgm zSvC#Km(Wu)Cw8e5|3l~>K?zF#8I09-&At3%5`g+CXDxPXI6fS>pZ0(2yO#Zbd4%@=GIVul|6l?@YbyN#{Q&LvH0rc%+BDm=e?GPS zKZZ7%9YB$GbPhWnXbw=WUPa5@d{6(c+q5B`74-kQkIyl*UvTxA?^z$hgTa9;BA&8} zLAFt=$b$O5hR951wE^qE=eBIUk2D}4sOO=j700Q zCRWE>cgL&1&v;V%B=`GnZTdIHON0ebp93yp+Xm*F9lNl{d3_`PYV&zsb;a?5Y@t=xgM6OjA@K9wMi~(1A@8c}$S&~K@C+LF+OtK@f&aYs>G)6g z`#oR6%k$2F6~+A>xdQIjA@wXMXAItug3`*vc)RoBnqF&wvlRz{-25$%}5Zb6@a3 zJ=-63WyK-NP5(SFm!JtdxD8enFX)NPoj4PnM*{rkS*N{u``hj<##&nc-1u!wv;_Mm z`Zo5l2meUf9k%LzaRcJMR^0hA_q^XPbkhPf-_r63&H;g%((^~1leqJWAlLE|Y6^1%($A?Ro9qwl{T-eKev9ws^>h&pnKYl!b+G6g&0w;#|K z3pu7L6mJ304Hi=tC9XsuL!m5MiUHW zMY{S1DDozL4dto*M#naJkD?Enm`ct}#|lmOiK3;)ePL#$sNDF{=CBpz?oQcL+z%fnomV|DFHI;51v6@s9iMxRD9-b24G_ zKm7fT4s1|hTG61^>}8$fjNhGq>Yo4d=Eiy4fB7E*o)zSS_sG^8%D(J0-T0Z0Wt7F} z$vf-WS_}Hu^ZzgSdx6fsbi;4|0>MmBQRRpI_QU)efB!m-5|n=4xV`YV@~_Oc*%2p( zdjjoG$ACfcGgq(k4{rKf_ygyE75|x23W}d+zb43yf0+Me&g=f=f8G2)hW6jgy#>|3 e|Cs$p`mz6E{;$9MAI~zLfAnZ!@{dQIKfDLP!01B& diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index edfa7ee577889c7e0b2ab873997b991e85bfb6da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 868352 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

H9*O1_8(@st|E1qp0!L;G}`g^NcTOb$Aj0 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 IM;-Kk0JIs!hX4Qo diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 33f95408f0..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2378 +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@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@^3.400.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.572.0.tgz#2ef0882029a5f621e11e2d3ce685381f0781bf1b" - integrity sha512-YLtJRVZN+ktOaseWeTtthmimRQoWxygdzRPFlb1HpDPX+akBrGkL7Mz69onpXKfqm9Loz3diUXHqKfpxRX9Pog== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sso-oidc" "3.572.0" - "@aws-sdk/client-sts" "3.572.0" - "@aws-sdk/core" "3.572.0" - "@aws-sdk/credential-provider-node" "3.572.0" - "@aws-sdk/middleware-bucket-endpoint" "3.568.0" - "@aws-sdk/middleware-expect-continue" "3.572.0" - "@aws-sdk/middleware-flexible-checksums" "3.572.0" - "@aws-sdk/middleware-host-header" "3.567.0" - "@aws-sdk/middleware-location-constraint" "3.567.0" - "@aws-sdk/middleware-logger" "3.568.0" - "@aws-sdk/middleware-recursion-detection" "3.567.0" - "@aws-sdk/middleware-sdk-s3" "3.572.0" - "@aws-sdk/middleware-signing" "3.572.0" - "@aws-sdk/middleware-ssec" "3.567.0" - "@aws-sdk/middleware-user-agent" "3.572.0" - "@aws-sdk/region-config-resolver" "3.572.0" - "@aws-sdk/signature-v4-multi-region" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-endpoints" "3.572.0" - "@aws-sdk/util-user-agent-browser" "3.567.0" - "@aws-sdk/util-user-agent-node" "3.568.0" - "@aws-sdk/xml-builder" "3.567.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/eventstream-serde-browser" "^2.2.0" - "@smithy/eventstream-serde-config-resolver" "^2.2.0" - "@smithy/eventstream-serde-node" "^2.2.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-blob-browser" "^2.2.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/hash-stream-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/md5-js" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-stream" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - "@smithy/util-waiter" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.572.0.tgz#0abe3282c0900f0641770a928d31221a06df494d" - integrity sha512-S6C/S6xYesDakEuzYvlY1DMMKLtKQxdbbygq3hfeG2R0jUt9KpRLsQXK8qrBuVCKa3WcnjN/30hp4g/iUWFU/w== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.572.0" - "@aws-sdk/core" "3.572.0" - "@aws-sdk/credential-provider-node" "3.572.0" - "@aws-sdk/middleware-host-header" "3.567.0" - "@aws-sdk/middleware-logger" "3.568.0" - "@aws-sdk/middleware-recursion-detection" "3.567.0" - "@aws-sdk/middleware-user-agent" "3.572.0" - "@aws-sdk/region-config-resolver" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-endpoints" "3.572.0" - "@aws-sdk/util-user-agent-browser" "3.567.0" - "@aws-sdk/util-user-agent-node" "3.568.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.572.0.tgz#d686db985b4c430dbfa6854c8fa1c17de2c3d7ac" - integrity sha512-S+xhScao5MD79AkrcHmFpEDk+CgoiuB/31WFcTcnrTio5TOUONAaT0QyscOIwRp7BZ7Aez7TBM+loTteJ+TQvg== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.572.0" - "@aws-sdk/middleware-host-header" "3.567.0" - "@aws-sdk/middleware-logger" "3.568.0" - "@aws-sdk/middleware-recursion-detection" "3.567.0" - "@aws-sdk/middleware-user-agent" "3.572.0" - "@aws-sdk/region-config-resolver" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-endpoints" "3.572.0" - "@aws-sdk/util-user-agent-browser" "3.567.0" - "@aws-sdk/util-user-agent-node" "3.568.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.572.0.tgz#75437254cb314a0a0cdb7b28887d502442167408" - integrity sha512-jCQuH2qkbWoSY4wckLSfzf3OPh7zc7ZckEbIGGVUQar/JVff6EIbpQ+uNG29DDEOpdPPd8rrJsVuUlA/nvJdXA== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sso-oidc" "3.572.0" - "@aws-sdk/core" "3.572.0" - "@aws-sdk/credential-provider-node" "3.572.0" - "@aws-sdk/middleware-host-header" "3.567.0" - "@aws-sdk/middleware-logger" "3.568.0" - "@aws-sdk/middleware-recursion-detection" "3.567.0" - "@aws-sdk/middleware-user-agent" "3.572.0" - "@aws-sdk/region-config-resolver" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-endpoints" "3.572.0" - "@aws-sdk/util-user-agent-browser" "3.567.0" - "@aws-sdk/util-user-agent-node" "3.568.0" - "@smithy/config-resolver" "^2.2.0" - "@smithy/core" "^1.4.2" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/hash-node" "^2.2.0" - "@smithy/invalid-dependency" "^2.2.0" - "@smithy/middleware-content-length" "^2.2.0" - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-body-length-browser" "^2.2.0" - "@smithy/util-body-length-node" "^2.3.0" - "@smithy/util-defaults-mode-browser" "^2.2.1" - "@smithy/util-defaults-mode-node" "^2.3.1" - "@smithy/util-endpoints" "^1.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.572.0.tgz#875cbd9e2ca6b78a3c2663cf67aed24e6b143667" - integrity sha512-DBmf94qfN0dfaLl5EnNcq6TakWfOtVXYifHoTbX+VBwESj3rlY4W+W4mAnvBgAqDjlLFy7bBljmx+vnjnV73lg== - dependencies: - "@smithy/core" "^1.4.2" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.568.0.tgz#fc7fda0bc48bbc75065a9084e41d429037e0e1c5" - integrity sha512-MVTQoZwPnP1Ev5A7LG+KzeU6sCB8BcGkZeDT1z1V5Wt7GPq0MgFQTSSjhImnB9jqRSZkl1079Bt3PbO6lfIS8g== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.568.0.tgz#7f7239bed7c23db7356ebeae5f3b3bda9f751b08" - integrity sha512-gL0NlyI2eW17hnCrh45hZV+qjtBquB+Bckiip9R6DIVRKqYcoILyiFhuOgf2bXeF23gVh6j18pvUvIoTaFWs5w== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.572.0.tgz#b6a447e85a10938a1f038bd7e1096c73229e6699" - integrity sha512-05KzbAp77fEiQXqMeodXeMbT83FOqSyBrfSEMz6U8uBXeJCy8zPUjN3acqcbG55/HNJHUvg1cftqzy+fUz71gA== - dependencies: - "@aws-sdk/credential-provider-env" "3.568.0" - "@aws-sdk/credential-provider-process" "3.572.0" - "@aws-sdk/credential-provider-sso" "3.572.0" - "@aws-sdk/credential-provider-web-identity" "3.568.0" - "@aws-sdk/types" "3.567.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.572.0.tgz#dbb1d26a8a2c18c52f8067f6c6371ee850c1fb05" - integrity sha512-anlYZnpmVkfp9Gan+LcEkQvmRf/m0KcbR11th8sBEyI5lxMaHKXhnAtC/hEGT7e3L6rgNOrFYTPuSvllITD/Pg== - dependencies: - "@aws-sdk/credential-provider-env" "3.568.0" - "@aws-sdk/credential-provider-http" "3.568.0" - "@aws-sdk/credential-provider-ini" "3.572.0" - "@aws-sdk/credential-provider-process" "3.572.0" - "@aws-sdk/credential-provider-sso" "3.572.0" - "@aws-sdk/credential-provider-web-identity" "3.568.0" - "@aws-sdk/types" "3.567.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.572.0.tgz#6054c37721d44b3e855b41f4ad8e3dd73f84e6cf" - integrity sha512-hXcOytf0BadSm/MMy7MV8mmY0+Jv3mkavsHNBx0R82hw5ollD0I3JyOAaCtdUpztF0I72F8K+q8SpJQZ+EwArw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.572.0.tgz#d0fe8122538fc498e9d4f797dfe99eed5bfc7443" - integrity sha512-iIlnpJiDXFp3XC4hJNSiNurnU24mr3iLB3HoNa9efr944bo6XBl9FQdk3NssIkqzSmgyoB2CEUx/daBHz4XSow== - dependencies: - "@aws-sdk/client-sso" "3.572.0" - "@aws-sdk/token-providers" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.568.0.tgz#b4e7958dc92a6cbbf5e9fd065cecd76573d4b70f" - integrity sha512-ZJSmTmoIdg6WqAULjYzaJ3XcbgBzVy36lir6Y0UBMRGaxDgos1AARuX6EcYzXOl+ksLvxt/xMQ+3aYh1LWfKSw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.568.0.tgz#790c0943cc097d3a83665131bc9e0743598cc6ca" - integrity sha512-uc/nbSpXv64ct/wV3Ksz0/bXAsEtXuoZu5J9FTcFnM7c2MSofa0YQrtrJ8cG65uGbdeiFoJwPA048BTG/ilhCA== - dependencies: - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.572.0.tgz#91df3b88a0a109450db84577609ed19520dfff38" - integrity sha512-+NKWVK295rOEANU/ohqEfNjkcEdZao7z6HxkMXX4gu4mDpSsVU8WhYr5hp5k3PUhtaiPU8M1rdfQBrZQc4uttw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.572.0.tgz#639ee54f838a5382a69f07351cd783488b6ad89b" - integrity sha512-ysblGDRn1yy8TlKUrwhnFbl3RuMfbVW1rbtePClEYpC/1u9MsqPmm/fmWJJGKat7NclnsgpQyfSQ64DCuaEedg== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.567.0" - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.567.0.tgz#52f278234458ec3035e9534fee582c95a8fec4f7" - integrity sha512-zQHHj2N3in9duKghH7AuRNrOMLnKhW6lnmb7dznou068DJtDr76w475sHp2TF0XELsOGENbbBsOlN/S5QBFBVQ== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.567.0.tgz#c469e745a3fa146dd29d0024a9f4d2a498985822" - integrity sha512-XiGTH4VxrJ5fj6zeF6UL5U5EuJwLqj9bHW5pB+EKfw0pmbnyqfRdYNt46v4GsQql2iVOq1Z/Fiv754nIItBI/A== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.568.0.tgz#aeb85cc8f7da431442d0f5914f3a3e262eb55a09" - integrity sha512-BinH72RG7K3DHHC1/tCulocFv+ZlQ9SrPF9zYT0T1OT95JXuHhB7fH8gEABrc6DAtOdJJh2fgxQjPy5tzPtsrA== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.567.0.tgz#95d91f071b57fb5245d522db70df1652275f06ac" - integrity sha512-rFk3QhdT4IL6O/UWHmNdjJiURutBCy+ogGqaNHf/RELxgXH3KmYorLwCe0eFb5hq8f6vr3zl4/iH7YtsUOuo1w== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.572.0.tgz#62534ecbfc55d91fcb768b97bb14f73577c3b00e" - integrity sha512-ygQL1G2hWoJXkUGL/Xr5q9ojXCH8hgt/oKsxJtc5U8ZXw3SRlL6pCVE7+aiD0l8mgIGbW0vrL08Oc/jYWlakdw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.572.0.tgz#d3c648e3a280774115003d7ea07860f80f79a19d" - integrity sha512-/pEVgHnf8LsTG0hu9yqqvmLMknlKO5c19NM3J9qTWGLPfySi8tWrFuREAFKAxqJFgDw1IdFWd+dXIkodpbGwew== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.567.0.tgz#0a425182d940f963b34146b22dc2872cb21c41e4" - integrity sha512-lhpBwFi3Tcw+jlOdaCsg3lCAg4oOSJB00bW/aLTFeZWutwi9VexMmsddZllx99lN+LDeCjryNyVd2TCRCKwYhQ== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.572.0.tgz#e629083356e3ea1303544240be82e2784d768984" - integrity sha512-R4bBbLp1ywtF1kJoOX1juDMztKPWeQHNj6XuTvtruFDn1RdfnBlbM3+9rguRfH5s4V+xfl8SSWchnyo2cI00xg== - dependencies: - "@aws-sdk/types" "3.567.0" - "@aws-sdk/util-endpoints" "3.572.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.572.0.tgz#51a4485bf1b1c3a154fe96e8b9fc0a1e80240fef" - integrity sha512-xkZMIxek44F4YW5r9otD1O5Y/kDkgAb6JNJePkP1qPVojrkCmin3OFYAOZgGm+T4DZAQ5rWhpaqTAWmnRumYfw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.572.0.tgz#0d50b39bbe715ae65dd3954a14df09d9c22fb04d" - integrity sha512-FD6FIi8py1ZAR53NjD2VXKDvvQUhhZu7CDUfC9gjAa7JDtv+rJvM9ZuoiQjaDnzzqYxTr4pKqqjLsd6+8BCSWA== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.572.0" - "@aws-sdk/types" "3.567.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/signature-v4" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.572.0.tgz#b63ef02f1700057e9f4532365cd098699b0f8328" - integrity sha512-IkSu8p32tQZhKqwmfLZLGfYwNhsS/HUQBLnDMHJlr9VifmDqlTurcr+DwMCaMimuFhcLeb45vqTymKf/ro/OBw== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.567.0", "@aws-sdk/types@^3.222.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.567.0.tgz#b2dc88e154140b1ff87e94f63c97447bdb1c1738" - integrity sha512-JBznu45cdgQb8+T/Zab7WpBmfEAh77gsk99xuF4biIb2Sw1mdseONdoGDjEJX57a25TzIv/WUJ2oABWumckz1A== - dependencies: - "@smithy/types" "^2.12.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.572.0": - version "3.572.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.572.0.tgz#41a42cbeb6744f5cf0b983c1b9dd958cb0bd66e0" - integrity sha512-AIEC7ItIWBqkJLtqcSd0HG8tvdh3zVwqnKPHNrcfFay0Xonqx3p/qTCDwGosh5CM5hDGzyOSRA5PkacEDBTz9w== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/types" "^2.12.0" - "@smithy/util-endpoints" "^1.2.0" - 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.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.567.0.tgz#1ef37a87b28155274d62e31c1ac5c1c043dcd0b3" - integrity sha512-cqP0uXtZ7m7hRysf3fRyJwcY1jCgQTpJy7BHB5VpsE7DXlXHD5+Ur5L42CY7UrRPrB6lc6YGFqaAOs5ghMcLyA== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.568.0.tgz#8bfb81b23d4947462f1e49c70187b85e7cd3837a" - integrity sha512-NVoZoLnKF+eXPBvXg+KqixgJkPSrerR6Gqmbjwqbv14Ini+0KNKB0/MXas1mDGvvEgtNkHI/Cb9zlJ3KXpti2A== - dependencies: - "@aws-sdk/types" "3.567.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.567.0": - version "3.567.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.567.0.tgz#8dad7461955a8f8458593973b31b3457ea5ad887" - integrity sha512-Db25jK9sZdGa7PEQTdm60YauUVbeYGsSEMQOHGP6ifbXfCknqgkPgWV16DqAKJUsbII0xgkJ9LpppkmYal3K/g== - dependencies: - "@smithy/types" "^2.12.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.55" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.55.tgz#fa3537a9255c2c60d3b4c36b0b2fa25a07f78a5f" - integrity sha512-IYY14D7wSR/lHP3adExvBahynnpcbYubHQKKzmirNq1LVSGaLMtYdPKaf9cwlvZk0hejNwTjP1HF0yF0CehIDA== - dependencies: - "@aws-sdk/client-s3" "^3.400.0" - "@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" - -"@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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.2.0.tgz#18983401a5e2154b5c94057730024a7d14cbcd35" - integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader-native@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz#aff8bddf9fdc1052f885e1b15aa81e4d274e541e" - integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== - dependencies: - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz#192c1787bf3f4f87e2763803425f418e6e613e09" - integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.2.0.tgz#54f40478bb61709b396960a3535866dba5422757" - integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-config-provider" "^2.3.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/core@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.4.2.tgz#1c3ed886d403041ce5bd2d816448420c57baa19c" - integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-retry" "^2.3.1" - "@smithy/middleware-serde" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz#326ce401b82e53f3c7ee4862a066136959a06166" - integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz#63d74fa817188995eb55e792a38060b0ede98dc4" - integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz#69c93cc0210f04caeb0770856ef88c9a82564e11" - integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz#23c8698ce594a128bcc556153efb7fecf6d04f87" - integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz#b82870a838b1bd32ad6e0cf33a520191a325508e" - integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== - dependencies: - "@smithy/eventstream-serde-universal" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz#a75e330040d5e2ca2ac0d8bccde3e390ac5afd38" - integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== - dependencies: - "@smithy/eventstream-codec" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz#0b8e1562807fdf91fe7dd5cde620d7a03ddc10ac" - integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz#d26db0e88b8fc4b59ee487bd026363ea9b48cf3a" - integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== - dependencies: - "@smithy/chunked-blob-reader" "^2.2.0" - "@smithy/chunked-blob-reader-native" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/hash-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.2.0.tgz#df29e1e64811be905cb3577703b0e2d0b07fc5cc" - integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz#7b341fdc89851af6b98d8c01e47185caf0a4b2d9" - integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz#ee3d8980022cb5edb514ac187d159b3e773640f0" - integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== - dependencies: - "@smithy/types" "^2.12.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/md5-js@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.2.0.tgz#033c4c89fe0cbb3f7e99cca3b7b63a2824c98c6d" - integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz#a82e97bd83d8deab69e07fea4512563bedb9461a" - integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== - dependencies: - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz#1333c58304aff4d843e8ef4b85c8cb88975dd5ad" - integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== - dependencies: - "@smithy/middleware-serde" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - "@smithy/url-parser" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - tslib "^2.6.2" - -"@smithy/middleware-retry@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz#d6fdce94f2f826642c01b4448e97a509c4556ede" - integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/service-error-classification" "^2.1.5" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-retry" "^2.2.0" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz#a7615ba646a88b6f695f2d55de13d8158181dd13" - integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz#3fb49eae6313f16f6f30fdaf28e11a7321f34d9f" - integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz#9fac0c94a14c5b5b8b8fa37f20c310a844ab9922" - integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/shared-ini-file-loader" "^2.4.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz#7b5e0565dd23d340380489bd5fe4316d2bed32de" - integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/querystring-builder" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/property-provider@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" - integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz#a37df7b4bb4960cdda560ce49acfd64c455e4090" - integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz#22937e19fcd0aaa1a3e614ef8cb6f8e86756a4ef" - integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== - dependencies: - "@smithy/types" "^2.12.0" - "@smithy/util-uri-escape" "^2.2.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz#24a5633f4b3806ff2888d4c2f4169e105fdffd79" - integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" - integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== - dependencies: - "@smithy/types" "^2.12.0" - -"@smithy/shared-ini-file-loader@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz#1636d6eb9bff41e36ac9c60364a37fd2ffcb9947" - integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz#c30dd4028ae50c607db99459981cce8cdab7a3fd" - integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== - dependencies: - "@smithy/is-array-buffer" "^2.2.0" - "@smithy/types" "^2.12.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-middleware" "^2.2.0" - "@smithy/util-uri-escape" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.5.1.tgz#0fd2efff09dc65500d260e590f7541f8a387eae3" - integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== - dependencies: - "@smithy/middleware-endpoint" "^2.5.1" - "@smithy/middleware-stack" "^2.2.0" - "@smithy/protocol-http" "^3.3.0" - "@smithy/types" "^2.12.0" - "@smithy/util-stream" "^2.2.0" - tslib "^2.6.2" - -"@smithy/types@^2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" - integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.2.0.tgz#6fcda6116391a4f61fef5580eb540e128359b3c0" - integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== - dependencies: - "@smithy/querystring-parser" "^2.2.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-base64@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.3.0.tgz#312dbb4d73fb94249c7261aee52de4195c2dd8e2" - integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== - dependencies: - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz#25620645c6b62b42594ef4a93b66e6ab70e27d2c" - integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz#d065a9b5e305ff899536777bbfe075cdc980136f" - integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== - 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-config-provider@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz#bc79f99562d12a1f8423100ca662a6fb07cde943" - integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz#9db31416daf575d2963c502e0528cfe8055f0c4e" - integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== - dependencies: - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz#4613210a3d107aadb3f85bd80cb71c796dd8bf0a" - integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== - dependencies: - "@smithy/config-resolver" "^2.2.0" - "@smithy/credential-provider-imds" "^2.3.0" - "@smithy/node-config-provider" "^2.3.0" - "@smithy/property-provider" "^2.2.0" - "@smithy/smithy-client" "^2.5.1" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz#b8b805f47e8044c158372f69b88337703117665d" - integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== - dependencies: - "@smithy/node-config-provider" "^2.3.0" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz#87edb7c88c2f422cfca4bb21f1394ae9602c5085" - integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz#80cfad40f6cca9ffe42a5899b5cb6abd53a50006" - integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== - dependencies: - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-retry@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" - integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== - dependencies: - "@smithy/service-error-classification" "^2.1.5" - "@smithy/types" "^2.12.0" - tslib "^2.6.2" - -"@smithy/util-stream@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.2.0.tgz#b1279e417992a0f74afa78d7501658f174ed7370" - integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== - dependencies: - "@smithy/fetch-http-handler" "^2.5.0" - "@smithy/node-http-handler" "^2.5.0" - "@smithy/types" "^2.12.0" - "@smithy/util-base64" "^2.3.0" - "@smithy/util-buffer-from" "^2.2.0" - "@smithy/util-hex-encoding" "^2.2.0" - "@smithy/util-utf8" "^2.3.0" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz#56f5764051a33b67bc93fdd2a869f971b0635406" - integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.3.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-waiter@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.2.0.tgz#d11baf50637bfaadb9641d6ca1619da413dd2612" - integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== - dependencies: - "@smithy/abort-controller" "^2.2.0" - "@smithy/types" "^2.12.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.12.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.11.tgz#c4ef00d3507000d17690643278a60dc55a9dc9be" - integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw== - 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.33" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.33.tgz#98cd286a1b8a5e11aa06623210240bcc28e95c48" - integrity sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A== - 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.11.9" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" - integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -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.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - 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.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - 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.12.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.1.tgz#517ff6d66d4fd5433e38e903051da3e57c87ff37" - integrity sha512-j6wcVoZf06nqEcBbDWkKg8Fp895SS96dSnTCjiXT+8vt2o02raTn4Lo9ERUuIVU5bAjoPYeA+7ytQFexFmLuVw== - 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.5.0" - -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.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - 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.3.14" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.14.tgz#36501f871d373fe197fc5794588d0aa71e69ff68" - integrity sha512-4fkAqu93xe9Mk7le9v0y3VrPDqLKHarNi2s4Pv7f2yOvfhWfhc7hRPHC/JyqMqb8B/Dt/eGS4n7ykwf3fOsl8g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.6" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.11.0" - -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.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -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== - -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@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - 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.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== - -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.1: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.1.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.1.tgz#f7f85aff59aa22f110b20e27692465cf3bf89481" - integrity sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA== - -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== - -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" - -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.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.0.tgz#332d64e9726bf667fb348e5a1c71005c09ad741a" - integrity sha512-LNHTaVkzaYaLGlO+0u3rQTz7QrHTFOuKyba9JMTQutkmtNew8dw8wOD7mTU/5fCPZzCWpfW0XnQKzY61P0aTaw== - 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.11.5" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" - integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== - 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== - -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.11.1, 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.3.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -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.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - -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== - -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.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -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 475948f10e1441c82a5946a42fdd71711a1412f4 Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Sun, 12 May 2024 12:49:10 +0700 Subject: [PATCH 0515/1590] DackieSwap on X Layer volume --- dexs/dackieswap-v2/index.ts | 4 +++- dexs/dackieswap/index.ts | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dexs/dackieswap-v2/index.ts b/dexs/dackieswap-v2/index.ts index 458dd0cbe5..7d8aa9092a 100644 --- a/dexs/dackieswap-v2/index.ts +++ b/dexs/dackieswap-v2/index.ts @@ -11,6 +11,7 @@ const endpoints: ChainEndpoints = { [CHAIN.ARBITRUM]: "https://api.studio.thegraph.com/query/50473/v2-arbitrum/version/latest", [CHAIN.BLAST]: "https://api.studio.thegraph.com/query/50473/v2-blast/version/latest", [CHAIN.MODE]: "https://graph.dackieswap.xyz/mode/subgraphs/name/v2-mode", + [CHAIN.XLAYER]: "https://graph.dackieswap.xyz/xlayer/subgraphs/name/v2-xlayer", }; // Fetch function to query the subgraphs @@ -55,7 +56,8 @@ const adapter: SimpleAdapter = { : chain === CHAIN.ARBITRUM ? 1707885300 : chain === CHAIN.BLAST ? 1709722800 : chain === CHAIN.MODE ? 1712371653 - : 0, + : chain === CHAIN.XLAYER ? 1712369493 + : 0, customBackfill: customBackfill(chain, graphs), meta: {methodology}, } diff --git a/dexs/dackieswap/index.ts b/dexs/dackieswap/index.ts index 715707902e..981e9e22be 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -14,6 +14,8 @@ const v3Endpoint = { "https://api.studio.thegraph.com/query/50473/v3-blast/version/latest", [CHAIN.MODE]: "https://graph.dackieswap.xyz/mode/subgraphs/name/v3-mode", + [CHAIN.XLAYER]: + "https://graph.dackieswap.xyz/xlayer/subgraphs/name/v3-xlayer", }; const VOLUME_USD = "volumeUSD"; @@ -42,6 +44,7 @@ const v3StartTimes = { [CHAIN.ARBITRUM]: 1707885300, [CHAIN.BLAST]: 1709722800, [CHAIN.MODE]: 1712371653, + [CHAIN.XLAYER]: 1712369493, } as IJSON; const adapter: SimpleAdapter = { @@ -66,6 +69,10 @@ const adapter: SimpleAdapter = { fetch: v3Graph(CHAIN.MODE), start: async () => v3StartTimes[CHAIN.MODE] }, + [CHAIN.XLAYER]: { + fetch: v3Graph(CHAIN.XLAYER), + start: async () => v3StartTimes[CHAIN.XLAYER] + }, }, version: 2 }; From 1714d2ac8acb890105ab5cf9e0372f5abc866fc9 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 12 May 2024 15:50:17 +0000 Subject: [PATCH 0516/1590] disable v2 --- protocols/uniswap/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index af5f764eb4..ded9486323 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -222,13 +222,13 @@ const adapter: BreakdownAdapter = { methodology }, }, - ...Object.keys(v2Deployments).reduce((acc, chain) => { - acc[chain] = { - fetch: getUniV2LogAdapter({factory: v2Deployments[chain]}), - start: 0, - } - return acc - }, {}) + // ...Object.keys(v2Deployments).reduce((acc, chain) => { + // acc[chain] = { + // fetch: getUniV2LogAdapter({factory: v2Deployments[chain]}), + // start: 0, + // } + // return acc + // }, {}) }, v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { From 187a01b3fd8668b218963982e383e975713cf962 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 12 May 2024 16:57:25 +0000 Subject: [PATCH 0517/1590] fix chain not work --- dexs/spookyswap/index.ts | 12 ++++++------ dexs/sushiswap/v3.ts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dexs/spookyswap/index.ts b/dexs/spookyswap/index.ts index 6e61d0ca5a..2975c6f059 100644 --- a/dexs/spookyswap/index.ts +++ b/dexs/spookyswap/index.ts @@ -8,7 +8,7 @@ const { FANTOM } = require("../../helpers/chains"); const endpoints = { [FANTOM]: "https://api.thegraph.com/subgraphs/name/eerieeight/spookyswap", [CHAIN.EON]: "https://eon-graph.horizenlabs.io/subgraphs/name/0xALUKARD/spookyswap-eon", - [CHAIN.BITTORRENT]: "https://subgraph.spook.fi/subgraphs/name/eerieeight/spooky-swap-new" + // [CHAIN.BITTORRENT]: "https://subgraph.spook.fi/subgraphs/name/eerieeight/spooky-swap-new" }; const graphs = getChainVolumeWithGasToken({ @@ -21,7 +21,7 @@ const graphs = getChainVolumeWithGasToken({ const graphsV3 = getChainVolume({ graphUrls: { [CHAIN.EON]: endpoints[CHAIN.EON], - [CHAIN.BITTORRENT]: endpoints[CHAIN.BITTORRENT] + // [CHAIN.BITTORRENT]: endpoints[CHAIN.BITTORRENT] }, dailyVolume: { factory: "uniswapDayData", @@ -47,10 +47,10 @@ const adapter: SimpleAdapter = { fetch: graphsV3(CHAIN.EON), start: 1698969600 }, - [CHAIN.BITTORRENT]: { - fetch: graphsV3(CHAIN.BITTORRENT), - start: 23534368 - }, + // [CHAIN.BITTORRENT]: { + // fetch: graphsV3(CHAIN.BITTORRENT), + // start: 23534368 + // }, }, }; diff --git a/dexs/sushiswap/v3.ts b/dexs/sushiswap/v3.ts index fa3fbfc08b..6edb1bd3e5 100644 --- a/dexs/sushiswap/v3.ts +++ b/dexs/sushiswap/v3.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; const endpointsV3 = { - [CHAIN.ARBITRUM_NOVA]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v3/v3-arbitrum-nova', + // [CHAIN.ARBITRUM_NOVA]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v3/v3-arbitrum-nova', [CHAIN.ARBITRUM]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-arbitrum', [CHAIN.AVAX]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-avalanche', [CHAIN.BSC]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-bsc', From 2be5e7ee2876ac4b6d2df30a7895cb7efd2bb16e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 12 May 2024 17:10:33 +0000 Subject: [PATCH 0518/1590] fix disabe cherryswap --- dexs/cherryswap/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dexs/cherryswap/index.ts b/dexs/cherryswap/index.ts index eea87da652..ee4a734055 100644 --- a/dexs/cherryswap/index.ts +++ b/dexs/cherryswap/index.ts @@ -59,7 +59,11 @@ const adapter: SimpleAdapter = { version: 2, adapter: { [CHAIN.OKEXCHAIN]: { - fetch: graphs(CHAIN.OKEXCHAIN), + fetch: async () => { + return { + dailyVolume: '0' + } + }, start: 1627385129, }, }, From 7eb577d6e6b02489e3b483740b63dedbcf1eb445 Mon Sep 17 00:00:00 2001 From: Keen Date: Mon, 13 May 2024 10:37:59 +0800 Subject: [PATCH 0519/1590] fix: tokenlon rfqv2&l2 volume --- dexs/tokenlon/index.ts | 62 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 6 deletions(-) diff --git a/dexs/tokenlon/index.ts b/dexs/tokenlon/index.ts index cf0beb8607..0a17168677 100644 --- a/dexs/tokenlon/index.ts +++ b/dexs/tokenlon/index.ts @@ -8,17 +8,29 @@ import { getPrices } from "../../utils/prices"; interface IGraph { makerAssetAddr: string; makerAssetAmount: string; + makerToken: string; + makerTokenAmount: string; } interface IData { fillOrders: IGraph[]; swappeds: IGraph[]; + filledRFQs: IGraph[]; } type TEndpoint = { [s: string | Chain]: string; }; +const config = { + [CHAIN.POLYGON]: { exchange: '0xac4F3817a726016fC8254119FC48bE838a21f17F' }, + [CHAIN.ARBITRUM]: { exchange: '0xac4F3817a726016fC8254119FC48bE838a21f17F' }, + [CHAIN.BASE]: { exchange: '0xac4F3817a726016fC8254119FC48bE838a21f17F' }, + [CHAIN.BSC]: { exchange: '0xac4F3817a726016fC8254119FC48bE838a21f17F' }, + [CHAIN.OPTIMISM]: { exchange: '0xac4F3817a726016fC8254119FC48bE838a21f17F' }, + [CHAIN.ERA]: { exchange: '0xC63c379Ae456af9C73Bf81A7D745fAF1d9e180e0' }, +} + const endpoints: TEndpoint = { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/consenlabs/tokenlon-v5-exchange", }; @@ -47,6 +59,23 @@ const fetchVolume = (chain: Chain) => { historicalData.map((e: IGraph) => { dailyVolume.add(e.makerAssetAddr, e.makerAssetAmount); }); + + const rfqv2Query = `{ + filledRFQs( + first: 9 + orderBy: blockTimestamp + orderDirection: desc + where: {blockTimestamp_gte: ${fromTimestamp}, blockTimestamp_lte: ${toTimestamp}} + ) { + makerToken + makerTokenAmount + }}` + const rfqV2Response = await request( "https://subgraph.satsuma-prod.com/61c3dea518e9/imtoken-labs--349710/rfq-v2-subgraph/version/v0.0.1-test-version/api",rfqv2Query) + const rfqv2Record: IGraph[] = [...rfqV2Response.filledRFQs] + rfqv2Record.map((e: IGraph) => { + dailyVolume.add(e.makerToken, e.makerTokenAmount); + }); + return { dailyVolume, timestamp: toTimestamp }; }; }; @@ -56,6 +85,11 @@ const abis = { "event FillOrder(string source, bytes32 indexed transactionHash, bytes32 indexed orderHash, address indexed userAddr, address takerAssetAddr, uint256 takerAssetAmount, address makerAddr, address makerAssetAddr, uint256 makerAssetAmount, address receiverAddr, uint256 settleAmount, uint16 feeFactor)", Swapped: "event Swapped(string source, bytes32 indexed transactionHash, address indexed userAddr, address takerAssetAddr, uint256 takerAssetAmount, address makerAddr, address makerAssetAddr, uint256 makerAssetAmount, address receiverAddr, uint256 settleAmount, uint256 receivedAmount, uint16 feeFactor, uint16 subsidyFactor)", + FilledRFQ: + "event FilledRFQ(bytes32 indexed offerHash,address indexed user,address indexed maker,address takerToken,uint256 takerTokenAmount,address makerToken,uint256 makerTokenAmount,address recipient,uint256 settleAmount,uint256 feeFactor)", + + Swap: + "event Swap(bytes32 indexed swapHash,address indexed maker, address indexed taker,address recipient,address inputToken,uint256 inputAmount,address outputToken,uint256 outputAmount)", }; const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions) => { @@ -63,12 +97,33 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLog const pmmLogs = await getLogs({ target: "0x8D90113A1e286a5aB3e496fbD1853F265e5913c6", eventAbi: abis.FillOrder }); const ammLogs = await getLogs({ target: "0x4a14347083B80E5216cA31350a2D21702aC3650d", eventAbi: abis.Swapped }); + const rfqv2Logs = await getLogs({ target: "0x91c986709bb4fe0763edf8e2690ee9d5019bea4a", eventAbi: abis.FilledRFQ }); + [pmmLogs, ammLogs].flat().forEach((log: any) => { dailyVolume.add(log.makerAssetAddr, log.makerAssetAmount); }); + [rfqv2Logs].flat().forEach((log: any) => { + dailyVolume.add(log.makerToken, log.makerTokenAmount); + }); + return { timestamp, dailyVolume }; +}; + +const fetchL2 = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions) => { + const dailyVolume = createBalances(); + const ammLogs = await getLogs({ target: config[chain].exchange, eventAbi: abis.Swap }); + + [ammLogs].flat().forEach((log: any) => { + dailyVolume.add(log.inputToken, log.inputAmount); + }); return { timestamp, dailyVolume }; }; +const adaptersMultiChain : any = {} +adaptersMultiChain[CHAIN.ETHEREUM] = {fetch, start: 1608048000} +Object.keys(config).forEach(chain => { + adaptersMultiChain[chain] = { fetch: fetchL2, start: 0 } +}) + const adapter: BreakdownAdapter = { breakdown: { tokenlon: { @@ -77,12 +132,7 @@ const adapter: BreakdownAdapter = { start: 1608216488, }, }, - "tokenlon-agg": { - [CHAIN.ETHEREUM]: { - fetch, - start: 1702857600, - }, - }, + "tokenlon-agg":adaptersMultiChain, }, }; From 385d1c4d309c947dcbd0ea84737e9450dc6d0e72 Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Mon, 13 May 2024 13:21:40 +0100 Subject: [PATCH 0520/1590] fix nile-v1 fees --- fees/nile-exchange-v1/index.ts | 38 ++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/fees/nile-exchange-v1/index.ts b/fees/nile-exchange-v1/index.ts index d9d055f4d8..1b63e706c2 100644 --- a/fees/nile-exchange-v1/index.ts +++ b/fees/nile-exchange-v1/index.ts @@ -1,16 +1,42 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexFeesExports } from "../../helpers/dexVolumeLogs"; +import { getDexFeesExports, exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; + const FACTORY_ADDRESS = '0xAAA16c016BF556fcD620328f0759252E29b1AB57'; -const adapter: SimpleAdapter = { +type TStartTime = { + [key: string]: number; +} +const startTimeV2: TStartTime = { + [CHAIN.LINEA]: 1705968000, +} + +const methodology = { + UserFees: "User pays 0.3% fees on each swap.", + ProtocolRevenue: "Revenue going to the protocol. 5% of collected fees. (is probably right because the distribution is dynamic.)", + HoldersRevenue: "User fees are distributed among holders. 75% of collected fees. (is probably right because the distribution is dynamic.)", + SupplySideRevenue: "20% of collected fees are distributed among LPs. (is probably right because the distribution is dynamic.)" +} + +const adapter: Adapter = { + version: 2, adapter: { [CHAIN.LINEA]: { - fetch: getDexFeesExports({ chain: CHAIN.LINEA, factory: FACTORY_ADDRESS,}), - start: 1705968000, + fetch: async (options: FetchOptions) => { + const v1Results = await exportDexVolumeAndFees({ chain: CHAIN.LINEA, factory: FACTORY_ADDRESS,})(options.endTimestamp, {}, options) + + return v1Results; + }, + start: startTimeV2[CHAIN.LINEA], + meta: { + methodology: { + ...methodology, + UserFees: "User pays 0.05%, 0.30%, or 1% on each swap.", + }, + }, }, - } + }, }; export default adapter; From f2bf07200473a48f6dac91b66f413b1014e9f911 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 13 May 2024 14:52:45 +0000 Subject: [PATCH 0521/1590] fix contract --- dexs/aerodrome/index.ts | 5 +- fees/aerodrome/bribes.ts | 136 +++++++++++++++++++++++++++++++++++++-- fees/aerodrome/index.ts | 7 +- 3 files changed, 136 insertions(+), 12 deletions(-) diff --git a/dexs/aerodrome/index.ts b/dexs/aerodrome/index.ts index 6d271e322b..51080c3fb7 100644 --- a/dexs/aerodrome/index.ts +++ b/dexs/aerodrome/index.ts @@ -1,9 +1,9 @@ import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" -const gurar = '0x2073D8035bB2b0F2e85aAF5a8732C6f397F9ff9b'; +const gurar = '0x066D31221152f1f483DA474d1Ce47a4F50433e22'; const abis: any = { - "forSwaps": "function forSwaps() view returns ((address lp, bool stable, address token0, address token1, address factory)[])" + "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, bool stable, address token0, address token1, address factory, uint256 poolFee)[])" } interface IForSwap { @@ -25,6 +25,7 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, const forSwaps: IForSwap[] = (await api.call({ target: gurar, abi: abis.forSwaps, + params: [1000, 0], chain: CHAIN.BASE, })).map((e: any) => { return { diff --git a/fees/aerodrome/bribes.ts b/fees/aerodrome/bribes.ts index 811bb616c4..1e0ff27799 100644 --- a/fees/aerodrome/bribes.ts +++ b/fees/aerodrome/bribes.ts @@ -1,23 +1,145 @@ import ADDRESSES from '../../helpers/coreAssets.json' import { FetchOptions } from '../../adapters/types'; +import { CHAIN } from '../../helpers/chains'; const event_notify_reward = 'event NotifyReward(address indexed from,address indexed reward,uint256 indexed epoch,uint256 amount)'; -const gurar = '0x2073D8035bB2b0F2e85aAF5a8732C6f397F9ff9b'; +const gurar = '0x066D31221152f1f483DA474d1Ce47a4F50433e22'; const abis: any = { - "all": "function all(uint256 _limit, uint256 _offset, address _account) view returns ((address lp, string symbol, uint8 decimals, bool stable, uint256 total_supply, address token0, uint256 reserve0, uint256 claimable0, address token1, uint256 reserve1, uint256 claimable1, address gauge, uint256 gauge_total_supply, bool gauge_alive, address fee, address bribe, address factory, uint256 emissions, address emissions_token, uint256 account_balance, uint256 account_earned, uint256 account_staked, uint256 pool_fee, uint256 token0_fees, uint256 token1_fees)[])" + "all": { + "stateMutability": "view", + "type": "function", + "name": "all", + "inputs": [ + { + "name": "_limit", + "type": "uint256" + }, + { + "name": "_offset", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "components": [ + { + "name": "lp", + "type": "address" + }, + { + "name": "symbol", + "type": "string" + }, + { + "name": "decimals", + "type": "uint8" + }, + { + "name": "liquidity", + "type": "uint256" + }, + { + "name": "type", + "type": "int24" + }, + { + "name": "tick", + "type": "int24" + }, + { + "name": "sqrt_ratio", + "type": "uint160" + }, + { + "name": "token0", + "type": "address" + }, + { + "name": "reserve0", + "type": "uint256" + }, + { + "name": "staked0", + "type": "uint256" + }, + { + "name": "token1", + "type": "address" + }, + { + "name": "reserve1", + "type": "uint256" + }, + { + "name": "staked1", + "type": "uint256" + }, + { + "name": "gauge", + "type": "address" + }, + { + "name": "gauge_liquidity", + "type": "uint256" + }, + { + "name": "gauge_alive", + "type": "bool" + }, + { + "name": "fee", + "type": "address" + }, + { + "name": "bribe", + "type": "address" + }, + { + "name": "factory", + "type": "address" + }, + { + "name": "emissions", + "type": "uint256" + }, + { + "name": "emissions_token", + "type": "address" + }, + { + "name": "pool_fee", + "type": "uint256" + }, + { + "name": "unstaked_fee", + "type": "uint256" + }, + { + "name": "token0_fees", + "type": "uint256" + }, + { + "name": "token1_fees", + "type": "uint256" + } + ] + } + ] +} } export const fees_bribes = async ({ getLogs, api, createBalances }: FetchOptions)=> { const dailyFees = createBalances() - const bribeVotingReward: string[] = (await api.call({ + const bribeVotingReward: string[] = (await Promise.all([0, 400, 800].map(async (offset) => api.call({ target: gurar, - params: [1000, 0, ADDRESSES.null], abi: abis.all, - })).map((e: any) => { - return e.bribe; - }).filter((e: string) => e !== ADDRESSES.null); + params: [400, offset], + chain: CHAIN.BASE + })))).flat().map((e: any) => e.bribe) const bribe_contracct = [...new Set(bribeVotingReward)]; const logs = await getLogs({ targets: bribe_contracct, diff --git a/fees/aerodrome/index.ts b/fees/aerodrome/index.ts index 718fc84993..4aa9a1ac0b 100644 --- a/fees/aerodrome/index.ts +++ b/fees/aerodrome/index.ts @@ -4,10 +4,11 @@ import * as sdk from "@defillama/sdk"; import { fees_bribes } from "./bribes"; import { getDexFees } from "../../helpers/dexVolumeLogs"; -const gurar = '0x2073D8035bB2b0F2e85aAF5a8732C6f397F9ff9b'; +const gurar = '0x066D31221152f1f483DA474d1Ce47a4F50433e22'; const abis: any = { - "forSwaps": "function forSwaps() view returns ((address lp, bool stable, address token0, address token1, address factory)[])" + "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, bool stable, address token0, address token1, address factory, uint256 poolFee)[])" } + // defualt abi for multiCall is error some pools const multiCall = async (callN: any) => { return (await sdk.api.abi.multiCall({ @@ -21,7 +22,7 @@ const multiCall = async (callN: any) => { } const fetch = async (timestamp: number, _: ChainBlocks, fetchOptions: FetchOptions): Promise => { - const forSwaps = await sdk.api2.abi.call({ target: gurar, abi: abis.forSwaps, chain: CHAIN.BASE, }) + const forSwaps = await sdk.api2.abi.call({ target: gurar, abi: abis.forSwaps, chain: CHAIN.BASE, params: [1000, 0] }) const pools = forSwaps.map((e: any) => e.lp) fetchOptions.api.multiCall = multiCall const res: any = await getDexFees({ chain: CHAIN.BASE, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, pools, timestamp, fetchOptions }) From 472a5abccf843c921bf232705bb407c4da95a348 Mon Sep 17 00:00:00 2001 From: vrtnd Date: Mon, 13 May 2024 19:53:52 +0300 Subject: [PATCH 0522/1590] Fix 0x agg --- {dexs/0x => aggregators}/zrx/index.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) rename {dexs/0x => aggregators}/zrx/index.ts (86%) diff --git a/dexs/0x/zrx/index.ts b/aggregators/zrx/index.ts similarity index 86% rename from dexs/0x/zrx/index.ts rename to aggregators/zrx/index.ts index 59a3a056d4..c2bbcd0575 100644 --- a/dexs/0x/zrx/index.ts +++ b/aggregators/zrx/index.ts @@ -1,12 +1,13 @@ import { GraphQLClient, gql } from "graphql-request"; -import { getUniqStartOfTodayTimestamp } from "../../../helpers/getUniSubgraphVolume"; -import { getEnv } from "../../../helpers/env"; -import { FetchOptions } from "../../../adapters/types"; -import { CHAIN } from "../../../helpers/chains"; + +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { FetchOptions } from "../../adapters/types"; +import { getEnv } from "../../helpers/env"; type TChain = { [key: string]: string; -} +}; const CHAINS: TChain = { [CHAIN.ARBITRUM]: "Arbitrum", [CHAIN.AVAX]: "Avalanche", @@ -70,7 +71,7 @@ const fetch = async (options: FetchOptions) => { } }; -const adapter_aggs: any = { +const adapter: any = { version: 2, adapter: { ...Object.values(CHAINS).reduce((acc, chain) => { @@ -84,6 +85,5 @@ const adapter_aggs: any = { }, {}), }, }; -export { - adapter_aggs -} + +export default adapter; From a09181be2f237b36183c434284122818db51e6a9 Mon Sep 17 00:00:00 2001 From: vrtnd Date: Mon, 13 May 2024 20:04:43 +0300 Subject: [PATCH 0523/1590] fix import --- dexs/0x/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/dexs/0x/index.ts b/dexs/0x/index.ts index 7eab4db09e..fbc85ca214 100644 --- a/dexs/0x/index.ts +++ b/dexs/0x/index.ts @@ -1,6 +1,5 @@ import { BreakdownAdapter, FetchV2, } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { adapter_aggs } from './zrx/index' // https://0x.org/docs/introduction/0x-cheat-sheet const config = { @@ -92,7 +91,6 @@ const adapter: BreakdownAdapter = { // "0x ERC1155": adaptersERC1155, // "0x ERC721": adaptersERC721, "0x Limit": adaptersERCLimit, - "zrx": adapter_aggs["adapter"] }, version: 2 } From 0f31b39f7bc5dba33499abca196dda5be47159b1 Mon Sep 17 00:00:00 2001 From: ethzoomer Date: Mon, 13 May 2024 18:14:13 -0500 Subject: [PATCH 0524/1590] Velo/Aero fixes --- dexs/aerodrome-slipstream/index.ts | 78 ++++++++++++++++++++ dexs/aerodrome/index.ts | 110 ++++++++++++++++++++++------- dexs/velodrome-slipstream/index.ts | 56 ++++++++++----- fees/aerodrome/bribes.ts | 33 ++++----- fees/aerodrome/index.ts | 24 +++++-- 5 files changed, 232 insertions(+), 69 deletions(-) create mode 100644 dexs/aerodrome-slipstream/index.ts diff --git a/dexs/aerodrome-slipstream/index.ts b/dexs/aerodrome-slipstream/index.ts new file mode 100644 index 0000000000..3e69a75809 --- /dev/null +++ b/dexs/aerodrome-slipstream/index.ts @@ -0,0 +1,78 @@ +import { FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types" +import { CHAIN } from "../../helpers/chains" + +const gurar = '0xe521fc2C55AF632cdcC3D69E7EFEd93d56c89015'; +const abis: any = { + "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" +} + +interface IForSwap { + lp: string; + token0: string; + token1: string; + pool_fee: string; +} + +interface ILog { + address: string; + data: string; + transactionHash: string; + topics: string[]; +} +const event_swap = 'event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)' + +const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { + const dailyVolume = createBalances() + const dailyFees = createBalances() + const chunkSize = 400; + let currentOffset = 965; // Slipstream launched after ~970 v2 pools were already created + const allForSwaps: IForSwap[] = []; + let unfinished = true; + + while (unfinished) { + const forSwaps: IForSwap[] = (await api.call({ + target: gurar, + params: [chunkSize, currentOffset], + abi: abis.forSwaps, + chain: CHAIN.BASE, + })).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; + currentOffset += chunkSize; + allForSwaps.push(...forSwaps); + } + + const targets = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) + + const logs: ILog[][] = await getLogs({ + targets, + eventAbi: event_swap, + flatten: false, + }) + + logs.forEach((logs: ILog[], idx: number) => { + const { token1, pool_fee } = allForSwaps[idx] + logs.forEach((log: any) => { + dailyVolume.add(token1, BigInt(Math.abs(Number(log.amount1)))) + dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1))) * Number(pool_fee)) / 1000000)))) // 1% fee represented as pool_fee=10000 + }) + }) + + return { dailyVolume, timestamp, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } +} +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.BASE]: { + fetch: fetch as any, + start: 1714743000, + } + } +} +export default adapters; diff --git a/dexs/aerodrome/index.ts b/dexs/aerodrome/index.ts index 6d271e322b..f3274d1c79 100644 --- a/dexs/aerodrome/index.ts +++ b/dexs/aerodrome/index.ts @@ -1,8 +1,12 @@ -import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types" +import { FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" -const gurar = '0x2073D8035bB2b0F2e85aAF5a8732C6f397F9ff9b'; +const sugar = '0xe521fc2C55AF632cdcC3D69E7EFEd93d56c89015'; +const sugarOld = '0x2073D8035bB2b0F2e85aAF5a8732C6f397F9ff9b'; const abis: any = { + "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" +} +const abisOld: any = { "forSwaps": "function forSwaps() view returns ((address lp, bool stable, address token0, address token1, address factory)[])" } @@ -10,6 +14,7 @@ interface IForSwap { lp: string; token0: string; token1: string; + pool_fee: string; } interface ILog { @@ -20,37 +25,90 @@ interface ILog { } const event_swap = 'event Swap(address indexed sender,address indexed to,uint256 amount0In,uint256 amount1In,uint256 amount0Out,uint256 amount1Out)' -const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { +const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { const dailyVolume = createBalances() - const forSwaps: IForSwap[] = (await api.call({ - target: gurar, - abi: abis.forSwaps, - chain: CHAIN.BASE, - })).map((e: any) => { - return { - lp: e.lp, - token0: e.token0, - token1: e.token1, + const dailyFees = createBalances() + const chunkSize = 400; + let currentOffset = 0; + const allForSwaps: IForSwap[] = []; + let unfinished = true; + + if (timestamp > 1714743000) { + + while (unfinished) { + const forSwaps: IForSwap[] = (await api.call({ + target: sugar, + params: [chunkSize, currentOffset], + abi: abis.forSwaps, + chain: CHAIN.BASE, + })).filter(t => Number(t.type) < 1).map((e: any) => { // Regular v2 pool are types 0 and -1 + return { + lp: e.lp, + token0: e.token0, + token1: e.token1, + pool_fee: e.pool_fee, + } + }); + + unfinished = forSwaps.length !== 0; + currentOffset += chunkSize; + allForSwaps.push(...forSwaps); } - }) - const targets = forSwaps.map((forSwap: IForSwap) => forSwap.lp) + const targets = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) + + const logs: ILog[][] = await getLogs({ + targets, + eventAbi: event_swap, + flatten: false, + }) + + logs.forEach((logs: ILog[], idx: number) => { + const { token0, token1, pool_fee } = allForSwaps[idx] + logs.forEach((log: any) => { + dailyVolume.add(token0, BigInt(Math.abs(Number(log.amount0In)))) + dailyVolume.add(token1, BigInt(Math.abs(Number(log.amount1In)))) + dailyFees.add(token0, BigInt( Math.round((((Math.abs(Number(log.amount0In))) * Number(pool_fee)) / 10000)))) // 1% fee represented as pool_fee=100 + dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1In))) * Number(pool_fee)) / 10000)))) + }) + }) + + return { dailyVolume, timestamp, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } + } + else { + const forSwapsOld: IForSwap[] = (await api.call({ + target: sugarOld, + abi: abisOld.forSwaps, + chain: CHAIN.BASE, + })).map((e: any) => { + return { + lp: e.lp, + token0: e.token0, + token1: e.token1, + pool_fee: e.stable ? 5 : 30, // v2 0.05% stable swap fees, 0.3% volatile fees + } + }) - const logs: ILog[][] = await getLogs({ - targets, - eventAbi: event_swap, - flatten: false, - }) + const targets = forSwapsOld.map((forSwap: IForSwap) => forSwap.lp) - logs.forEach((logs: ILog[], idx: number) => { - const { token0, token1 } = forSwaps[idx] - logs.forEach((log: any) => { - dailyVolume.add(token0, log.amount0Out) - dailyVolume.add(token1, log.amount1Out) + const logs: ILog[][] = await getLogs({ + targets, + eventAbi: event_swap, + flatten: false, }) - }) - return { dailyVolume, timestamp } + logs.forEach((logs: ILog[], idx: number) => { + const { token0, token1, pool_fee } = forSwapsOld[idx] + logs.forEach((log: any) => { + dailyVolume.add(token0, log.amount0Out) + dailyVolume.add(token1, log.amount1Out) + dailyFees.add(token0, BigInt( Math.round((((Math.abs(Number(log.amount0Out))) * Number(pool_fee)) / 10000)))) + dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1Out))) * Number(pool_fee)) / 10000)))) + }) + }) + + return { dailyVolume, timestamp, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } + } } const adapters: SimpleAdapter = { adapter: { diff --git a/dexs/velodrome-slipstream/index.ts b/dexs/velodrome-slipstream/index.ts index 54f92bfb1d..5bef8012b9 100644 --- a/dexs/velodrome-slipstream/index.ts +++ b/dexs/velodrome-slipstream/index.ts @@ -1,7 +1,8 @@ import { FetchOptions, FetchResult, FetchResultVolume, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" -const gurar = '0xc734656F0112CA18cdcaD424ddd8949F3D4c1DdD'; +const sugarOld = '0x3e532BC1998584fe18e357B5187897ad0110ED3A'; // old Sugar version doesn't properly support pagination +const sugar = '0xdE2aE25FB984dd60C77dcF6489Be9ee6438eC195'; const abis: any = { "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" } @@ -10,7 +11,7 @@ interface IForSwap { lp: string; token0: string; token1: string; - pool_fee: string + pool_fee: string; } interface ILog { @@ -24,21 +25,40 @@ const event_swap = 'event Swap(address indexed sender, address indexed recipient const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { const dailyVolume = createBalances() const dailyFees = createBalances() - const forSwaps: IForSwap[] = (await api.call({ - target: gurar, - params: [3000, 640], // Slipstream launched after ~650 v2 pools were already created - abi: abis.forSwaps, - chain: CHAIN.OPTIMISM, - })).filter(t => Number(t.type) > 0).map((e: any) => { - return { - lp: e.lp, - token0: e.token0, - token1: e.token1, - pool_fee: e.pool_fee, - } - }) + let chunkSize = 400; + let currentOffset = 630; // Slipstream launched after ~650 v2 pools were already created + const allForSwaps: IForSwap[] = []; + let unfinished = true; + let sugarContract = sugar; + + // before the new Sugar is deployed, we must use the old Sugar contract, and make one large Sugar call + if (timestamp < 1715160600) { + chunkSize = 1800; + currentOffset = 0; + sugarContract = sugarOld; + } - const targets = forSwaps.map((forSwap: IForSwap) => forSwap.lp) + while (unfinished) { + const forSwaps: IForSwap[] = (await api.call({ + target: sugarContract, + params: [chunkSize, currentOffset], // Slipstream launched after ~650 v2 pools were already created + abi: abis.forSwaps, + chain: CHAIN.OPTIMISM, + })).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; + currentOffset += chunkSize; + allForSwaps.push(...forSwaps); + } + + const targets = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) const logs: ILog[][] = await getLogs({ targets, @@ -47,7 +67,7 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }) logs.forEach((logs: ILog[], idx: number) => { - const { token1, pool_fee } = forSwaps[idx] + const { token1, pool_fee } = allForSwaps[idx] logs.forEach((log: any) => { dailyVolume.add(token1, BigInt(Math.abs(Number(log.amount1)))) dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1))) * Number(pool_fee)) / 1000000)))) // 1% fee represented as pool_fee=10000 @@ -60,7 +80,7 @@ const adapters: SimpleAdapter = { adapter: { [CHAIN.OPTIMISM]: { fetch: fetch as any, - start: 1709686921, + start: 1709724600, } } } diff --git a/fees/aerodrome/bribes.ts b/fees/aerodrome/bribes.ts index 811bb616c4..da243e0481 100644 --- a/fees/aerodrome/bribes.ts +++ b/fees/aerodrome/bribes.ts @@ -1,30 +1,27 @@ -import ADDRESSES from '../../helpers/coreAssets.json' +import * as sdk from "@defillama/sdk"; import { FetchOptions } from '../../adapters/types'; const event_notify_reward = 'event NotifyReward(address indexed from,address indexed reward,uint256 indexed epoch,uint256 amount)'; +const event_geuge_created = 'event GaugeCreated(address indexed poolFactory,address indexed votingRewardsFactory,address indexed gaugeFactory,address pool,address bribeVotingReward,address feeVotingReward,address gauge,address creator)' -const gurar = '0x2073D8035bB2b0F2e85aAF5a8732C6f397F9ff9b'; - -const abis: any = { - "all": "function all(uint256 _limit, uint256 _offset, address _account) view returns ((address lp, string symbol, uint8 decimals, bool stable, uint256 total_supply, address token0, uint256 reserve0, uint256 claimable0, address token1, uint256 reserve1, uint256 claimable1, address gauge, uint256 gauge_total_supply, bool gauge_alive, address fee, address bribe, address factory, uint256 emissions, address emissions_token, uint256 account_balance, uint256 account_earned, uint256 account_staked, uint256 pool_fee, uint256 token0_fees, uint256 token1_fees)[])" -} - -export const fees_bribes = async ({ getLogs, api, createBalances }: FetchOptions)=> { +export const fees_bribes = async ({ getLogs, createBalances, getToBlock }: FetchOptions): Promise => { + const voter = '0x16613524e02ad97eDfeF371bC883F2F5d6C480A5'; const dailyFees = createBalances() - const bribeVotingReward: string[] = (await api.call({ - target: gurar, - params: [1000, 0, ADDRESSES.null], - abi: abis.all, - })).map((e: any) => { - return e.bribe; - }).filter((e: string) => e !== ADDRESSES.null); - const bribe_contracct = [...new Set(bribeVotingReward)]; + const logs_geuge_created = (await getLogs({ + target: voter, + fromBlock: 3200601, + toBlock: await getToBlock(), + eventAbi: event_geuge_created, + cacheInCloud: true, + })) + const bribes_contract: string[] = logs_geuge_created.map((e: any) => e.bribeVotingReward.toLowerCase()); + const logs = await getLogs({ - targets: bribe_contracct, + targets: bribes_contract, eventAbi: event_notify_reward, }) logs.map((e: any) => { dailyFees.add(e.reward, e.amount) }) return dailyFees; -} +} \ No newline at end of file diff --git a/fees/aerodrome/index.ts b/fees/aerodrome/index.ts index 718fc84993..065b5c7f73 100644 --- a/fees/aerodrome/index.ts +++ b/fees/aerodrome/index.ts @@ -4,10 +4,11 @@ import * as sdk from "@defillama/sdk"; import { fees_bribes } from "./bribes"; import { getDexFees } from "../../helpers/dexVolumeLogs"; -const gurar = '0x2073D8035bB2b0F2e85aAF5a8732C6f397F9ff9b'; +const sugar = '0xe521fc2C55AF632cdcC3D69E7EFEd93d56c89015'; const abis: any = { - "forSwaps": "function forSwaps() view returns ((address lp, bool stable, address token0, address token1, address factory)[])" + "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" } + // defualt abi for multiCall is error some pools const multiCall = async (callN: any) => { return (await sdk.api.abi.multiCall({ @@ -21,14 +22,23 @@ const multiCall = async (callN: any) => { } const fetch = async (timestamp: number, _: ChainBlocks, fetchOptions: FetchOptions): Promise => { - const forSwaps = await sdk.api2.abi.call({ target: gurar, abi: abis.forSwaps, chain: CHAIN.BASE, }) - const pools = forSwaps.map((e: any) => e.lp) + const chunkSize = 500; + let currentOffset = 0; + let unfinished = true; + const allPools: any[] = []; + + while (unfinished) { + const allPoolsChunk = await sdk.api2.abi.call({ target: sugar, abi: abis.forSwaps, params: [chunkSize, currentOffset], chain: CHAIN.BASE, block: "latest", }) + unfinished = allPoolsChunk.length !== 0; + currentOffset += chunkSize; + allPools.push(...allPoolsChunk); + } + + const pools = allPools.map((e: any) => e.lp) fetchOptions.api.multiCall = multiCall const res: any = await getDexFees({ chain: CHAIN.BASE, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, pools, timestamp, fetchOptions }) res.dailyBribesRevenue = await fees_bribes(fetchOptions); - - return res - + return res; } const adapters: SimpleAdapter = { adapter: { From 4f409ae028b518f5a3cca74e0ed39f197ace097f Mon Sep 17 00:00:00 2001 From: RickGrimes2 Date: Tue, 14 May 2024 09:44:07 +0800 Subject: [PATCH 0525/1590] add equation-v3 volume and fees --- dexs/equation-v3/index.ts | 68 +++++++++++++++++++++++++++++++++++++++ fees/equation-v3/index.ts | 64 ++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 dexs/equation-v3/index.ts create mode 100644 fees/equation-v3/index.ts diff --git a/dexs/equation-v3/index.ts b/dexs/equation-v3/index.ts new file mode 100644 index 0000000000..4babfdd2a9 --- /dev/null +++ b/dexs/equation-v3/index.ts @@ -0,0 +1,68 @@ + +import { CHAIN } from "../../helpers/chains"; +import { BreakdownAdapter, FetchV2, SimpleAdapter } from "../../adapters/types"; +import request, { gql } from "graphql-request"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const endpoints: { [key: string]: string } = { + [CHAIN.ARBITRUM]: "https://graph-arbitrum.equation.trade/subgraphs/name/equation-stats-v3-arbitrum", +} + +const methodology = { + DailyVolume: "Volume from the sum of the open/close/liquidation of positions and liquidity positions.", +} + +const queryVolume = gql` + query query_volume($id: String!) { + protocolStatistics(where: {id: $id}) { + volumeUSD + } + } +` + +const queryTotalVolume = gql` + query query_total { + protocolState(id: "protocol_state") { + totalVolumeUSD + } + } +` + +interface IDailyResponse { + protocolStatistics: [{ + volumeUSD: string, + }] +} + +interface ITotalResponse { + protocolState: { + totalVolumeUSD: string, + } +} + +const getFetch = () => (chain: string): FetchV2 => async ({ startOfDay }) => { + const dailyData: IDailyResponse = await request(endpoints[chain], queryVolume, { + id: 'Daily:' + startOfDay, + }) + const totalData: ITotalResponse = await request(endpoints[chain], queryTotalVolume) + return { + timestamp: startOfDay, + dailyVolume: dailyData.protocolStatistics[0].volumeUSD, + totalVolume: totalData.protocolState.totalVolumeUSD, + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: getFetch()(CHAIN.ARBITRUM), + start: 1715558400, + meta:{ + methodology: methodology, + }, + }, + }, +} + +export default adapter; \ No newline at end of file diff --git a/fees/equation-v3/index.ts b/fees/equation-v3/index.ts new file mode 100644 index 0000000000..236069c199 --- /dev/null +++ b/fees/equation-v3/index.ts @@ -0,0 +1,64 @@ +import { request, gql } from "graphql-request"; +import { Chain } from '@defillama/sdk/build/general'; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; +import { BreakdownAdapter, FetchV2, SimpleAdapter } from "../../adapters/types"; + +const endpoints: { [key: string]: string } = { + [CHAIN.ARBITRUM]: "https://graph-arbitrum.equation.trade/subgraphs/name/equation-stats-v3-arbitrum", +} + +const methodology = { + Fees: "Fees from open/close position and placed limit order (0.05%), with invitation code (0.045%)", + Revenue: "Revenue is 50% of all collected fees", + ProtocolRevenue: "Revenue is 50% of all collected fees" +} + +const queryFee = gql` +query query_volume($id: String!) { + protocolStatistics(where: {id: $id}) { + stakeFee + architectFee + protocolFee + } +} +` + +interface IDailyResponse { + protocolStatistics: [ + { + protocolFee: string, + architectFee: string, + stakeFee: string, + } + ] +} + +const getFetch = () => (chain: string): FetchV2 => async ({ startOfDay }) => { + const graphRes: IDailyResponse = await request(endpoints[chain], queryFee, { + id: 'Daily:' + startOfDay, + }) + const dailyFee = graphRes.protocolStatistics[0].protocolFee + const dailyProtocolRevenue = parseFloat(graphRes.protocolStatistics[0].architectFee) + parseFloat(graphRes.protocolStatistics[0].stakeFee) + + return { + timestamp: startOfDay, + dailyFees: dailyFee.toString(), + dailyProtocolRevenue: dailyProtocolRevenue.toString(), + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: getFetch()(CHAIN.ARBITRUM), + start: 1715558400, + meta: { + methodology + } + }, + } +} + +export default adapter; \ No newline at end of file From b158f70680232bec193650d2859fc295271cab96 Mon Sep 17 00:00:00 2001 From: plouis01 Date: Tue, 14 May 2024 09:42:56 +0200 Subject: [PATCH 0526/1590] init --- dexs/dusa/index.ts | 73 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 64 insertions(+), 9 deletions(-) diff --git a/dexs/dusa/index.ts b/dexs/dusa/index.ts index bb794976b8..857757c002 100644 --- a/dexs/dusa/index.ts +++ b/dexs/dusa/index.ts @@ -1,16 +1,71 @@ -import { Adapter, FetchResultVolume } from "../../adapters/types"; +import { Adapter } from "../../adapters/types"; +// import { Chain } from "@defillama/sdk/build/general"; +import { FetchOptions, FetchResultVolume } from "../../adapters/types"; +// import { CHAIN } from "../../helpers/chains"; +import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import fetchURL from "../../utils/fetchURL"; -const getVolumeStats = async (): Promise => { - return fetch("https://api-mainnet-dusa.up.railway.app/volume") - .then((res) => res.json()) - .then((res) => res.data); -}; +// type TEndpoint = { +// [s: string | Chain]: string; +// } +// const endpoints: TEndpoint = { +// [CHAIN.MASSA]: "https://api-mainnet-dusa.up.railway.app/volume" +// } + + type TEndpoint = { + [s: string]: string; + } +const endpoints: TEndpoint = { + ["massa"]: "https://api-mainnet-dusa.up.railway.app/volume" + } + +interface IVolume { + timestamp: number; + volumeUsd: number; + } + const fetchVolume = async (options: FetchOptions): Promise => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) + const historicalVolume: IVolume[] = (await fetchURL(endpoints[options.chain])); + const totalVolume = historicalVolume + .filter(volItem => volItem.timestamp <= dayTimestamp) + .reduce((acc, { volumeUsd }) => acc + Number(volumeUsd), 0) + + const dailyVolume = historicalVolume + .find(dayItem => dayItem.timestamp === dayTimestamp)?.volumeUsd + return { + totalVolume: `${totalVolume}`, + dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, + timestamp: dayTimestamp, + } + } + +const graphs = getChainVolume({ + graphUrls: endpoints, + totalVolume: { + factory: "lbfactories", + field: "volumeUSD", + }, + dailyVolume: { + factory: "DusaDayData", + field: "volumeUSD", + dateField: "date" + }, + }); + +// const adapter: Adapter = { +// adapter: { +// massa: { +// fetch: graphs(CHAIN.MASSA), +// start: 1713170000, +// }, +// }, +// }; const adapter: Adapter = { adapter: { - ethereum: { - fetch: getVolumeStats, - start: 1669420800, + massa: { + fetch: graphs("massa"), + start: 1713170000, }, }, }; From 491e6f0b258734a64816000e4ad7b38d724b605d Mon Sep 17 00:00:00 2001 From: Keen Date: Tue, 14 May 2024 18:55:52 +0800 Subject: [PATCH 0527/1590] fix: tokenlon volume --- dexs/tokenlon/index.ts | 140 ++- yarn.lock | 2378 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2505 insertions(+), 13 deletions(-) create mode 100644 yarn.lock diff --git a/dexs/tokenlon/index.ts b/dexs/tokenlon/index.ts index 0a17168677..8fade81f36 100644 --- a/dexs/tokenlon/index.ts +++ b/dexs/tokenlon/index.ts @@ -3,7 +3,7 @@ import { BreakdownAdapter, ChainBlocks, FetchOptions, FetchResultVolume, SimpleA import { CHAIN } from "../../helpers/chains"; import { gql, request } from "graphql-request"; import { Chain } from "@defillama/sdk/build/general"; -import { getPrices } from "../../utils/prices"; +import { ethers } from "ethers"; interface IGraph { makerAssetAddr: string; @@ -18,6 +18,107 @@ interface IData { filledRFQs: IGraph[]; } +const ammABI = [{ + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "source", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "transactionHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "settleAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receivedAmount", + "type": "uint256" + }, + { + "internalType": "uint16", + "name": "feeFactor", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "subsidyFactor", + "type": "uint16" + } + ], + "indexed": false, + "internalType": "struct AMMWrapper.TxMetaData", + "name": "", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "makerAddr", + "type": "address" + }, + { + "internalType": "address", + "name": "takerAssetAddr", + "type": "address" + }, + { + "internalType": "address", + "name": "makerAssetAddr", + "type": "address" + }, + { + "internalType": "uint256", + "name": "takerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "makerAssetAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userAddr", + "type": "address" + }, + { + "internalType": "address payable", + "name": "receiverAddr", + "type": "address" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct AMMLibEIP712.Order", + "name": "order", + "type": "tuple" + } + ], + "name": "Swapped", + "type": "event" +}] + +const ammDecoder = new ethers.Interface(ammABI) + type TEndpoint = { [s: string | Chain]: string; }; @@ -34,6 +135,7 @@ const config = { const endpoints: TEndpoint = { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/consenlabs/tokenlon-v5-exchange", }; +const rfqV2Endpoint = "https://subgraph.satsuma-prod.com/61c3dea518e9/imtoken-labs--349710/rfq-v2-subgraph/version/v0.0.1-test-version/api" const fetchVolume = (chain: Chain) => { return async ( @@ -61,16 +163,14 @@ const fetchVolume = (chain: Chain) => { }); const rfqv2Query = `{ - filledRFQs( - first: 9 - orderBy: blockTimestamp - orderDirection: desc - where: {blockTimestamp_gte: ${fromTimestamp}, blockTimestamp_lte: ${toTimestamp}} - ) { - makerToken - makerTokenAmount - }}` - const rfqV2Response = await request( "https://subgraph.satsuma-prod.com/61c3dea518e9/imtoken-labs--349710/rfq-v2-subgraph/version/v0.0.1-test-version/api",rfqv2Query) + filledRFQs( + first: 1000 + where: {blockTimestamp_gte: ${fromTimestamp}, blockTimestamp_lte: ${toTimestamp}} + ) { + makerToken + makerTokenAmount + }}` + const rfqV2Response = await request(rfqV2Endpoint, rfqv2Query) const rfqv2Record: IGraph[] = [...rfqV2Response.filledRFQs] rfqv2Record.map((e: IGraph) => { dailyVolume.add(e.makerToken, e.makerTokenAmount); @@ -87,6 +187,8 @@ const abis = { "event Swapped(string source, bytes32 indexed transactionHash, address indexed userAddr, address takerAssetAddr, uint256 takerAssetAmount, address makerAddr, address makerAssetAddr, uint256 makerAssetAmount, address receiverAddr, uint256 settleAmount, uint256 receivedAmount, uint16 feeFactor, uint16 subsidyFactor)", FilledRFQ: "event FilledRFQ(bytes32 indexed offerHash,address indexed user,address indexed maker,address takerToken,uint256 takerTokenAmount,address makerToken,uint256 makerTokenAmount,address recipient,uint256 settleAmount,uint256 feeFactor)", + FillOrderByRFQ: + "event FillOrder( string source,bytes32 indexed transactionHash,bytes32 indexed orderHash,address indexed userAddr,address takerAssetAddr,uint256 takerAssetAmount,address makerAddr,address makerAssetAddr,uint256 makerAssetAmount,address receiverAddr,uint256 settleAmount,uint16 feeFactor)", Swap: "event Swap(bytes32 indexed swapHash,address indexed maker, address indexed taker,address recipient,address inputToken,uint256 inputAmount,address outputToken,uint256 outputAmount)", @@ -96,12 +198,24 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLog const dailyVolume = createBalances(); const pmmLogs = await getLogs({ target: "0x8D90113A1e286a5aB3e496fbD1853F265e5913c6", eventAbi: abis.FillOrder }); - const ammLogs = await getLogs({ target: "0x4a14347083B80E5216cA31350a2D21702aC3650d", eventAbi: abis.Swapped }); + const rfqv1Logs = await getLogs({ target: "0xfD6C2d2499b1331101726A8AC68CCc9Da3fAB54F", eventAbi: abis.FillOrderByRFQ }); const rfqv2Logs = await getLogs({ target: "0x91c986709bb4fe0763edf8e2690ee9d5019bea4a", eventAbi: abis.FilledRFQ }); + const ammV1Logs = await getLogs({ target: "0x4a14347083B80E5216cA31350a2D21702aC3650d", eventAbi: abis.Swapped}); + const ammV2Logs = await getLogs({ target: "0x4a14347083B80E5216cA31350a2D21702aC3650d", topic: "0xc36ae6e11a161c28ae95fc0f8c0f56d3d0fb7f3a3524499c53fb6733ed86764d"}); - [pmmLogs, ammLogs].flat().forEach((log: any) => { + [ammV1Logs, rfqv1Logs, pmmLogs].flat().forEach((log: any) => { dailyVolume.add(log.makerAssetAddr, log.makerAssetAmount); }); + + [ammV2Logs].flat().forEach((log: any) => { + const parsedLog = ammDecoder.parseLog(log) + if (parsedLog == null) { + return + } + const order = parsedLog.args.order + dailyVolume.add(order.makerAssetAddr, order.makerAssetAmount); + }); + [rfqv2Logs].flat().forEach((log: any) => { dailyVolume.add(log.makerToken, log.makerTokenAmount); }); diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..68d48c412f --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2378 @@ +# 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@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-s3@^3.400.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.575.0.tgz#d3548c9d1be0dc4d28c2ab89943cfcdd535bf62a" + integrity sha512-4h0YIvLNcKNqwPbxWqwHCH3KWMpRdKhfQPq7kZcZXzFRi3yVAVaAsZcH8eXZsKPlitxkfWNgvfcTXOjStL1uHA== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sso-oidc" "3.575.0" + "@aws-sdk/client-sts" "3.575.0" + "@aws-sdk/core" "3.575.0" + "@aws-sdk/credential-provider-node" "3.575.0" + "@aws-sdk/middleware-bucket-endpoint" "3.575.0" + "@aws-sdk/middleware-expect-continue" "3.575.0" + "@aws-sdk/middleware-flexible-checksums" "3.575.0" + "@aws-sdk/middleware-host-header" "3.575.0" + "@aws-sdk/middleware-location-constraint" "3.575.0" + "@aws-sdk/middleware-logger" "3.575.0" + "@aws-sdk/middleware-recursion-detection" "3.575.0" + "@aws-sdk/middleware-sdk-s3" "3.575.0" + "@aws-sdk/middleware-signing" "3.575.0" + "@aws-sdk/middleware-ssec" "3.575.0" + "@aws-sdk/middleware-user-agent" "3.575.0" + "@aws-sdk/region-config-resolver" "3.575.0" + "@aws-sdk/signature-v4-multi-region" "3.575.0" + "@aws-sdk/types" "3.575.0" + "@aws-sdk/util-endpoints" "3.575.0" + "@aws-sdk/util-user-agent-browser" "3.575.0" + "@aws-sdk/util-user-agent-node" "3.575.0" + "@aws-sdk/xml-builder" "3.575.0" + "@smithy/config-resolver" "^3.0.0" + "@smithy/core" "^2.0.0" + "@smithy/eventstream-serde-browser" "^3.0.0" + "@smithy/eventstream-serde-config-resolver" "^3.0.0" + "@smithy/eventstream-serde-node" "^3.0.0" + "@smithy/fetch-http-handler" "^3.0.0" + "@smithy/hash-blob-browser" "^3.0.0" + "@smithy/hash-node" "^3.0.0" + "@smithy/hash-stream-node" "^3.0.0" + "@smithy/invalid-dependency" "^3.0.0" + "@smithy/md5-js" "^3.0.0" + "@smithy/middleware-content-length" "^3.0.0" + "@smithy/middleware-endpoint" "^3.0.0" + "@smithy/middleware-retry" "^3.0.0" + "@smithy/middleware-serde" "^3.0.0" + "@smithy/middleware-stack" "^3.0.0" + "@smithy/node-config-provider" "^3.0.0" + "@smithy/node-http-handler" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/smithy-client" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/url-parser" "^3.0.0" + "@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.0" + "@smithy/util-defaults-mode-node" "^3.0.0" + "@smithy/util-endpoints" "^2.0.0" + "@smithy/util-retry" "^3.0.0" + "@smithy/util-stream" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.575.0.tgz#640a38d9fa63ec837b02c4463d84f6828c8662ed" + integrity sha512-YCstVaW5tAvXs+v4LR9gNAO+VRhIObjk1/knCdVQ5QQRTevtVQtdJWeNrDZYo4ATo0OHGyqGCj5Z09TWMv+e1Q== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.575.0" + "@aws-sdk/core" "3.575.0" + "@aws-sdk/credential-provider-node" "3.575.0" + "@aws-sdk/middleware-host-header" "3.575.0" + "@aws-sdk/middleware-logger" "3.575.0" + "@aws-sdk/middleware-recursion-detection" "3.575.0" + "@aws-sdk/middleware-user-agent" "3.575.0" + "@aws-sdk/region-config-resolver" "3.575.0" + "@aws-sdk/types" "3.575.0" + "@aws-sdk/util-endpoints" "3.575.0" + "@aws-sdk/util-user-agent-browser" "3.575.0" + "@aws-sdk/util-user-agent-node" "3.575.0" + "@smithy/config-resolver" "^3.0.0" + "@smithy/core" "^2.0.0" + "@smithy/fetch-http-handler" "^3.0.0" + "@smithy/hash-node" "^3.0.0" + "@smithy/invalid-dependency" "^3.0.0" + "@smithy/middleware-content-length" "^3.0.0" + "@smithy/middleware-endpoint" "^3.0.0" + "@smithy/middleware-retry" "^3.0.0" + "@smithy/middleware-serde" "^3.0.0" + "@smithy/middleware-stack" "^3.0.0" + "@smithy/node-config-provider" "^3.0.0" + "@smithy/node-http-handler" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/smithy-client" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/url-parser" "^3.0.0" + "@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.0" + "@smithy/util-defaults-mode-node" "^3.0.0" + "@smithy/util-endpoints" "^2.0.0" + "@smithy/util-middleware" "^3.0.0" + "@smithy/util-retry" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.575.0.tgz#473e1315e4601319f11b50bd2c5d28992aa0e820" + integrity sha512-elFWpAtktD3XBy47etG80GKXK9Lh3sNCMXLjcSs0NS0fdRIQJS2zKxC8qK22UQmdFKpXxthND5FKk7fNEqrR+g== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.575.0" + "@aws-sdk/middleware-host-header" "3.575.0" + "@aws-sdk/middleware-logger" "3.575.0" + "@aws-sdk/middleware-recursion-detection" "3.575.0" + "@aws-sdk/middleware-user-agent" "3.575.0" + "@aws-sdk/region-config-resolver" "3.575.0" + "@aws-sdk/types" "3.575.0" + "@aws-sdk/util-endpoints" "3.575.0" + "@aws-sdk/util-user-agent-browser" "3.575.0" + "@aws-sdk/util-user-agent-node" "3.575.0" + "@smithy/config-resolver" "^3.0.0" + "@smithy/core" "^2.0.0" + "@smithy/fetch-http-handler" "^3.0.0" + "@smithy/hash-node" "^3.0.0" + "@smithy/invalid-dependency" "^3.0.0" + "@smithy/middleware-content-length" "^3.0.0" + "@smithy/middleware-endpoint" "^3.0.0" + "@smithy/middleware-retry" "^3.0.0" + "@smithy/middleware-serde" "^3.0.0" + "@smithy/middleware-stack" "^3.0.0" + "@smithy/node-config-provider" "^3.0.0" + "@smithy/node-http-handler" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/smithy-client" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/url-parser" "^3.0.0" + "@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.0" + "@smithy/util-defaults-mode-node" "^3.0.0" + "@smithy/util-endpoints" "^2.0.0" + "@smithy/util-middleware" "^3.0.0" + "@smithy/util-retry" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.575.0.tgz#9e24a85588ff8db537c7d9c558a19fd54dfd7ab3" + integrity sha512-8MrT4J2dRiskf0JFMGL5VNBqPvc6igNa218LGBJzHXmLsm1WfGCGnce84R7U2USr8oPOenu0XzSCLvMQyZbGWQ== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sso-oidc" "3.575.0" + "@aws-sdk/core" "3.575.0" + "@aws-sdk/credential-provider-node" "3.575.0" + "@aws-sdk/middleware-host-header" "3.575.0" + "@aws-sdk/middleware-logger" "3.575.0" + "@aws-sdk/middleware-recursion-detection" "3.575.0" + "@aws-sdk/middleware-user-agent" "3.575.0" + "@aws-sdk/region-config-resolver" "3.575.0" + "@aws-sdk/types" "3.575.0" + "@aws-sdk/util-endpoints" "3.575.0" + "@aws-sdk/util-user-agent-browser" "3.575.0" + "@aws-sdk/util-user-agent-node" "3.575.0" + "@smithy/config-resolver" "^3.0.0" + "@smithy/core" "^2.0.0" + "@smithy/fetch-http-handler" "^3.0.0" + "@smithy/hash-node" "^3.0.0" + "@smithy/invalid-dependency" "^3.0.0" + "@smithy/middleware-content-length" "^3.0.0" + "@smithy/middleware-endpoint" "^3.0.0" + "@smithy/middleware-retry" "^3.0.0" + "@smithy/middleware-serde" "^3.0.0" + "@smithy/middleware-stack" "^3.0.0" + "@smithy/node-config-provider" "^3.0.0" + "@smithy/node-http-handler" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/smithy-client" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/url-parser" "^3.0.0" + "@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.0" + "@smithy/util-defaults-mode-node" "^3.0.0" + "@smithy/util-endpoints" "^2.0.0" + "@smithy/util-middleware" "^3.0.0" + "@smithy/util-retry" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.575.0.tgz#c336796db71faac1140aa1b4e4d5f50932964fba" + integrity sha512-117U+kQki2XoKcYQfepmlRcNxn6rELGlOFOBQ8Z2JTBXEYHblW2ke067a0CLmxFwp/zCWuc7IGjd3in3x4Q3rg== + dependencies: + "@smithy/core" "^2.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/signature-v4" "^3.0.0" + "@smithy/smithy-client" "^3.0.0" + "@smithy/types" "^3.0.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.575.0.tgz#2f0238719b383e37265e736575e9a9823a562982" + integrity sha512-YTgpq3rvYBXzW6OTDB00cE79evQtss/lz2GlJXgqqVXD0m7i77hGA8zb44VevP/WxtDaiSW7SSjuu8VCBGsg4g== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/property-provider" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.575.0.tgz#d410dba2ae89ea6c42bf30d319b98e410da14d1b" + integrity sha512-xQfVmYI+9KqRvhWY8fyElnpcVUBBUgi/Hoji3oU6WLrUjrX98k93He7gKDQSyHf7ykMLUAJYWwsV4AjQ2j6njA== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/fetch-http-handler" "^3.0.0" + "@smithy/node-http-handler" "^3.0.0" + "@smithy/property-provider" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/smithy-client" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-stream" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.575.0.tgz#787faee394686d9af83ea482ea44168b5fe8b61d" + integrity sha512-BdM6a/5VUuNge3c6yRuxvO+4srLoSfqHfkQGfUDfhTdTJpljlpfnc9h3z2Ni1+aueOHPZMNFWIktHDcX5wUGBg== + dependencies: + "@aws-sdk/credential-provider-env" "3.575.0" + "@aws-sdk/credential-provider-process" "3.575.0" + "@aws-sdk/credential-provider-sso" "3.575.0" + "@aws-sdk/credential-provider-web-identity" "3.575.0" + "@aws-sdk/types" "3.575.0" + "@smithy/credential-provider-imds" "^3.0.0" + "@smithy/property-provider" "^3.0.0" + "@smithy/shared-ini-file-loader" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.575.0.tgz#eb0a69b229ea8a4f7240fa36968a8a4b661879e1" + integrity sha512-rEdNpqW2jEc5kwbf/s9XQywMLQlIkMjuCK6mw9sF2OVRGHGVnh+6eh/1JFx8Kj+eU51ctifQ7KaHe8dGco8HYQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.575.0" + "@aws-sdk/credential-provider-http" "3.575.0" + "@aws-sdk/credential-provider-ini" "3.575.0" + "@aws-sdk/credential-provider-process" "3.575.0" + "@aws-sdk/credential-provider-sso" "3.575.0" + "@aws-sdk/credential-provider-web-identity" "3.575.0" + "@aws-sdk/types" "3.575.0" + "@smithy/credential-provider-imds" "^3.0.0" + "@smithy/property-provider" "^3.0.0" + "@smithy/shared-ini-file-loader" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.575.0.tgz#b1b409af833ccbce18e2806991434aa30f61ceb3" + integrity sha512-2/5NJV7MZysKglqJSQ/O8OELNcwLcH3xknabL9NagtzB7RNB2p1AUXR0UlTey9sSDLL4oCmNa/+unYuglW/Ahg== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/property-provider" "^3.0.0" + "@smithy/shared-ini-file-loader" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.575.0.tgz#f39bbde97fe4dc2ecc2908cebfe79961a824fb58" + integrity sha512-NtXA9OPIKsqavs2F7hhLT/t2ZDjwJsvQevj31ov1NpmTNYMc7OWFWDptOG7rppsWMsk5KKmfiL2qViQJnezXNA== + dependencies: + "@aws-sdk/client-sso" "3.575.0" + "@aws-sdk/token-providers" "3.575.0" + "@aws-sdk/types" "3.575.0" + "@smithy/property-provider" "^3.0.0" + "@smithy/shared-ini-file-loader" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.575.0.tgz#524ff9f944986c99486be5fa374db4d5895f63ff" + integrity sha512-QcvVH7wpvpFRXGAGgCBfQeiF/ptD0NJ+Hrc8dDYfPGhFeZ0EoVQBYNphLi25xe7JZ+XbaqCKrURHZtr4fAEOJw== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/property-provider" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.575.0.tgz#258c00c672179f6c038f532f9bc1ff51caba5eb0" + integrity sha512-ytsp7xcmbpkVk4TLoi91YyXQh/vwSIGdJ2Awo/pi6ac5Fqe6OntPijh5GHSVj5ZrxW4haPWb6HdBmKMo4liGEw== + dependencies: + "@aws-sdk/types" "3.575.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.575.0.tgz#d54c8b309b87347be9f3a3b566bafa0fbf8cd7bf" + integrity sha512-8Nq4UtEi63MJPoYBACW5YoMKQdbrkLNGIdTyrolNRNwVS+6nQqDMvBplakCzQ1nL1rHOEEsKKc8e2BlG9SkR5A== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.575.0.tgz#0b06111c0cc82c279e6682acd36f96e3df56a1d5" + integrity sha512-UbyqN39v6s+olyuVKwX778w6J2ZuYpxb1j+KdhFtZwpMSLd/UIQ0+A71U2vB6TrC52OEW0jIXEEBv6PcMBz9nw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.575.0" + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.575.0.tgz#5bf24080d6a6c466cdeaff49879c77559f74a2fd" + integrity sha512-V2WoLBiXNCc4rIWZt6FUcP4TN0Vk02A9PPCBWkTfyOooiqfq+WZmZjRRBpwl1+5UsvARslrKWF0VzheMRXPJLQ== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.575.0.tgz#1816fcda54bfefa4b607a0ac93273e12b2027621" + integrity sha512-MtQsLsEjSSSfm0OlQqg9PEzS1nxJDdApGoeCYLTbCzIp6hChdLZCCsDXwGg9S++24rjQsUglMhXh4WGXQ9FDnw== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.575.0.tgz#981c939cb3c10c1e3ecfa458c64f7be8c5a71307" + integrity sha512-7DEKx9Z11Maaye7FfhYtC8rjbM/PcFcMO2N4QEAfypcgWCj+w4gseE2OGdfAH9OFDoFc6YvLp53v16vbPjzQSg== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.575.0.tgz#924a4b7ca864600a202d82621bed3ddfd7819e06" + integrity sha512-ri89ldRFos6KZDGaknWPS2XPO9qr+gZ7+mPaoU8YkSM1W4uKqtnUSONyc+O3CFGJrqReuGHhRq0l2Sld0bjwOw== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.575.0.tgz#b2be802e4522ca4d7b0466b1a9b174f802afc48f" + integrity sha512-8cBG8/tap4F6+UigTpKu8D2bvsLgqRTmn1K86qo3LqRX0Wc5X8TVjdKA2PmG0onOOr7rqTLcP9Q02LCh3usU6Q== + dependencies: + "@aws-sdk/types" "3.575.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/signature-v4" "^3.0.0" + "@smithy/smithy-client" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.575.0.tgz#b19d2d6816770ed8645e12662d147777b271907e" + integrity sha512-frpGG7i3YngWwrYIeDq8/nbat3Gfl803qasaS112rmlPU0ezmYS1SPxpXjpIKxUUYofbzaFtRBAOHU1u7GnWew== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/property-provider" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/signature-v4" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-middleware" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.575.0.tgz#799650e7860a7443e95e0e72313e41b77e99ce1c" + integrity sha512-rEFt2w3DdlmPsHRvVXOW6rNDIPE7UaEZ5a4LAkn78XilQYuQdhm5wtw5Ao0pJpDSVYNCZDVZaAvdHKQ1dnfwCA== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.575.0.tgz#1969f8b8972ee0c02753584575dde3e3b0b204b8" + integrity sha512-fWlr4RfrUNS2R3PgP+WsoMYORAgv/47Lp0J0fb3dXO1YvdczNWddRbFSUX2MQxM/y9XFfQPLpLgzluhoL3Cjeg== + dependencies: + "@aws-sdk/types" "3.575.0" + "@aws-sdk/util-endpoints" "3.575.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.575.0.tgz#8be6a9411ec8b5da3f3d0cac44beaa5b9eb6341f" + integrity sha512-sBJKwTWKCWu9y8FzXIijYGwkKr3tDkPXM7BylToe6W+tGkp4OirV4iXrWA9zReNwTTepoxHufofqjGK9BtcI8g== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/node-config-provider" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.575.0.tgz#73a639120a9bb36a067fdbaa094a54c9bcff7093" + integrity sha512-QMwuLuNwnEQ51RCZX8H/lXnOJgBcJJOCgClB9usW/XujNJVq8GnpZ5E7TsQLN88G6fifmcjQWonLKummuh/zVA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.575.0" + "@aws-sdk/types" "3.575.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/signature-v4" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.575.0.tgz#0d5ded8434b49cafd7303a139d09c97155138d3b" + integrity sha512-EPNDPQoQkjKqn4D2t70qVzbfdtlaAy9KBdG58qD1yNWVxq8Rh/lXdwmB+aE2PSahtyfVikZdCRoZiFzxDh5IUA== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/property-provider" "^3.0.0" + "@smithy/shared-ini-file-loader" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.575.0", "@aws-sdk/types@^3.222.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.575.0.tgz#ed8f33e15c7ea22b5244018330475983d0558556" + integrity sha512-XrnolQGs0wXxdgNudirR14OgNOarH7WUif38+2Pd4onZH+L7XoILem0EgA1tRpgFpw2pFHlZCNaAHDNSBEal7g== + dependencies: + "@smithy/types" "^3.0.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.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.575.0.tgz#370ad9b1ce7df227d44447ab2135c5e110aa72d2" + integrity sha512-wC5x+V6w3kRlR6X6XVINsAPDYG+Tzs3Wthlw+YLtjuPODUNZIQAqsABHahxnekFyAvse+1929Hwo+CaL+BHZGA== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/types" "^3.0.0" + "@smithy/util-endpoints" "^2.0.0" + 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.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.575.0.tgz#3054cc42e0b386a34f7b0d4e8e9609e016c72eed" + integrity sha512-iADonXyaXgwvC4T0qRuDWCdKInz82GX2cyezq/oqVlL8bPY7HD8jwZZruuJdq5tkaJi1EhbO4+f1ksZqOiZKvQ== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/types" "^3.0.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.575.0.tgz#49a6ecc5f56297e1477de90f30f102c470d3dc78" + integrity sha512-kwzvBfA0LoILDOFS6BV8uOkksBHrYulP6kNXegB5eZnDSNia5DbBsXqxQ/HknNF5a429SWQw2aaQJEgQvZB1VA== + dependencies: + "@aws-sdk/types" "3.575.0" + "@smithy/node-config-provider" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.575.0": + version "3.575.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.575.0.tgz#233b2aae422dd789a078073032da1bc60317aa1d" + integrity sha512-cWgAwmbFYNCFzPwxL705+lWps0F3ZvOckufd2KKoEZUmtpVw9/txUXNrPySUXSmRTSRhoatIMABNfStWR043bQ== + dependencies: + "@smithy/types" "^3.0.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.56" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.56.tgz#ad5d9129f0af10ac4ad6f1a74fa0e40d55962fe2" + integrity sha512-91dDh9+EbZ8ABDz4SYhPj/eV8vjobh0uQ7+OkgfHH9V1zH/ajJ2DbN40NJqRL+rMzZqu0CX062wNaxPYmcwASw== + dependencies: + "@aws-sdk/client-s3" "^3.400.0" + "@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" + +"@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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.0.0.tgz#5815f5d4618e14bf8d031bb98a99adabbb831168" + integrity sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA== + dependencies: + "@smithy/types" "^3.0.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.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.0.tgz#d37b31e3202c5ce54d9bd2406dcde7c7b5073cbd" + integrity sha512-2GzOfADwYLQugYkKQhIyZyQlM05K+tMKvRnc6eFfZcpJGRfKoMUMYdPlBKmqHwQFXQKBrGV6cxL9oymWgDzvFw== + dependencies: + "@smithy/node-config-provider" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.0" + tslib "^2.6.2" + +"@smithy/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.0.0.tgz#221c8407d185bd28d3bd6d8f2fefdfe240fa2ccf" + integrity sha512-y1VuiOpU8nL0KlL0pvYpOddKGK+8xpD4Jvg9NN42Bl6gHWAr46LpAzWi4I78WxcFIMN1vw1+RUVOlcqR/vfs5g== + dependencies: + "@smithy/middleware-endpoint" "^3.0.0" + "@smithy/middleware-retry" "^3.0.0" + "@smithy/middleware-serde" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/smithy-client" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-middleware" "^3.0.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.0.0.tgz#a290eb0224ef045742e5c806685cf63d44a084f3" + integrity sha512-lfmBiFQcA3FsDAPxNfY0L7CawcWtbyWsBOHo34nF095728JLkBX4Y9q/VPPE2r7fqMVK+drmDigqE2/SSQeVRA== + dependencies: + "@smithy/node-config-provider" "^3.0.0" + "@smithy/property-provider" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/url-parser" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.0.0.tgz#81d30391220f73d41f432f65384b606d67673e46" + integrity sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.0.tgz#94721b01f01d8b7eb1db5814275a774ed4d38190" + integrity sha512-NB7AFiPN4NxP/YCAnrvYR18z2/ZsiHiF7VtG30gshO9GbFrIb1rC8ep4NGpJSWrz6P64uhPXeo4M0UsCLnZKqw== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.0.tgz#420447d1d284d41f7f070a5d92fc3686cc922581" + integrity sha512-RUQG3vQ3LX7peqqHAbmayhgrF5aTilPnazinaSGF1P0+tgM3vvIRWPHmlLIz2qFqB9LqFIxditxc8O2Z6psrRw== + dependencies: + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.0.tgz#6519523fbb429307be29b151b8ba35bcca2b6e64" + integrity sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.0.tgz#cb8441a73fbde4cbaa68e4a21236f658d914a073" + integrity sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw== + dependencies: + "@smithy/eventstream-codec" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.0.tgz#229ac830d9ac7aaab096f2ef126abd8ed1ea1d35" + integrity sha512-gP1MlOpIB/onIbh4g9eSG3XdI/G31cAvd9Lo11192eL4mxks3xpkPaa+RIcZaX2Vmb8I8HzxBddPSXviY1iq0w== + dependencies: + "@smithy/protocol-http" "^4.0.0" + "@smithy/querystring-builder" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.0.0.tgz#63ef4c98f74c53cbcad8ec73387c68ec4708f55b" + integrity sha512-/Wbpdg+bwJvW7lxR/zpWAc1/x/YkcqguuF2bAzkJrvXriZu1vm8r+PUdE4syiVwQg7PPR2dXpi3CLBb9qRDaVQ== + dependencies: + "@smithy/chunked-blob-reader" "^3.0.0" + "@smithy/chunked-blob-reader-native" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-node@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.0.tgz#f44b5fff193e241c1cdcc957b296b60f186f0e59" + integrity sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw== + dependencies: + "@smithy/types" "^3.0.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.0.0.tgz#b395a8a0d2427e4a8effc56135b37cb299339f8f" + integrity sha512-J0i7de+EgXDEGITD4fxzmMX8CyCNETTIRXlxjMiNUvvu76Xn3GJ31wQR85ynlPk2wI1lqoknAFJaD1fiNDlbIA== + dependencies: + "@smithy/types" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.0.tgz#21cb6b5203ee15321bfcc751f21f7a19536d4ae8" + integrity sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g== + dependencies: + "@smithy/types" "^3.0.0" + 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.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.0.tgz#6a2d1c496f4d4476a0fc84f7724d79b234c3eb13" + integrity sha512-Tm0vrrVzjlD+6RCQTx7D3Ls58S3FUH1ZCtU1MIh/qQmaOo1H9lMN2as6CikcEwgattnA9SURSdoJJ27xMcEfMA== + dependencies: + "@smithy/types" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.0.tgz#084b3d22248967885d496eb0b105d9090e8ababd" + integrity sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg== + dependencies: + "@smithy/protocol-http" "^4.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.0.tgz#54c9e1bd8f35b7d004c803eaf3702e61e32b8295" + integrity sha512-aXOAWztw/5qAfp0NcA2OWpv6ZI/E+Dh9mByif7i91D/0iyYNUcKvskmXiowKESFkuZ7PIMd3VOR4fTibZDs2OQ== + dependencies: + "@smithy/middleware-serde" "^3.0.0" + "@smithy/node-config-provider" "^3.0.0" + "@smithy/shared-ini-file-loader" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/url-parser" "^3.0.0" + "@smithy/util-middleware" "^3.0.0" + tslib "^2.6.2" + +"@smithy/middleware-retry@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.0.tgz#3edf6e73651b81273629bf7a8f10db31c4e90a82" + integrity sha512-kFaBiTa50y0iwhrOjX5UISo1SfiXPrE1EsMtZJAVF7Oci3AUpVzaMzRxzQJFGnxioSyCwSmzqiE9x4X3dW+7VQ== + dependencies: + "@smithy/node-config-provider" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/service-error-classification" "^3.0.0" + "@smithy/smithy-client" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-middleware" "^3.0.0" + "@smithy/util-retry" "^3.0.0" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.0.tgz#786da6a6bc0e5e51d669dac834c19965245dd302" + integrity sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w== + dependencies: + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.0.tgz#00f112bae7af5fc3bd37d4fab95ebce0f17a7774" + integrity sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q== + dependencies: + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.0.0.tgz#4cd5dcf6132c75d6a582fcd6243482dac703865a" + integrity sha512-buqfaSdDh0zo62EPLf8rGDvcpKwGpO5ho4bXS2cdFhlOta7tBkWJt+O5uiaAeICfIOfPclNOndshDNSanX2X9g== + dependencies: + "@smithy/property-provider" "^3.0.0" + "@smithy/shared-ini-file-loader" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.0.0.tgz#e771ea95d03e259f04b7b37e8aece8a4fffc8cdc" + integrity sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ== + dependencies: + "@smithy/abort-controller" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/querystring-builder" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/property-provider@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.0.0.tgz#ef7a26557c855cc1471b9aa0e05529183e99b978" + integrity sha512-LmbPgHBswdXCrkWWuUwBm9w72S2iLWyC/5jet9/Y9cGHtzqxi+GVjfCfahkvNV4KXEwgnH8EMpcrD9RUYe0eLQ== + dependencies: + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.0.0.tgz#04df3b5674b540323f678e7c4113e8abd8b26432" + integrity sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ== + dependencies: + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.0.tgz#48a9aa7b700e8409368c21bc0adf7564e001daea" + integrity sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg== + dependencies: + "@smithy/types" "^3.0.0" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.0.tgz#fa1ed0cee408cd4d622070fa874bc50ac1a379b7" + integrity sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ== + dependencies: + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.0.tgz#06a45cb91b15b8b0d5f3b1df2b3743d2ca42f5c4" + integrity sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA== + dependencies: + "@smithy/types" "^3.0.0" + +"@smithy/shared-ini-file-loader@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.0.0.tgz#8739b7cd24f55fb4e276a74f00f0c2bb4e3f25d8" + integrity sha512-REVw6XauXk8xE4zo5aGL7Rz4ywA8qNMUn8RtWeTRQsgAlmlvbJ7CEPBcaXU2NDC3AYBgYAXrGyWD8XrN8UGDog== + dependencies: + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.0.0.tgz#f536d0abebfeeca8e9aab846a4042658ca07d3b7" + integrity sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-middleware" "^3.0.0" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.0.0.tgz#b9c73b6d162d8f1b3a202d04476c3b588fe666da" + integrity sha512-HTLlEOPOoPxyVCoqzwRGJuRh4hyAAo+eveRcEPi7UpIaq2PCAmdFZM76jabUuzlPPR9ge+OQlKzZre+LT1nXzA== + dependencies: + "@smithy/middleware-endpoint" "^3.0.0" + "@smithy/middleware-stack" "^3.0.0" + "@smithy/protocol-http" "^4.0.0" + "@smithy/types" "^3.0.0" + "@smithy/util-stream" "^3.0.0" + tslib "^2.6.2" + +"@smithy/types@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.0.0.tgz#00231052945159c64ffd8b91e8909d8d3006cb7e" + integrity sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.0.tgz#5fdc77cd22051c1aac6531be0315bfcba0fa705d" + integrity sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw== + dependencies: + "@smithy/querystring-parser" "^3.0.0" + "@smithy/types" "^3.0.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@^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.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.0.tgz#38bf6536fec24059d96459d8480028cf33548695" + integrity sha512-/ChTQXFZVK/92dLR9RLW2fOG03ghgUYZnRfrs9d9T3L7UxtsGx9QitF7Ppu64A8xcUHqA30kV7TUayFRBd7YQw== + dependencies: + "@smithy/property-provider" "^3.0.0" + "@smithy/smithy-client" "^3.0.0" + "@smithy/types" "^3.0.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.0.tgz#7b0d7f8964f78b5bcc94ae5d2849a5338c475d38" + integrity sha512-gfABCXswcMgDUcVO+16e4BgTFnouaXNCowp9mVxV8dgaOCpUT9eEWIC+PK3ZoEm26QwlwT7WgfuN1Y22HKX36g== + dependencies: + "@smithy/config-resolver" "^3.0.0" + "@smithy/credential-provider-imds" "^3.0.0" + "@smithy/node-config-provider" "^3.0.0" + "@smithy/property-provider" "^3.0.0" + "@smithy/smithy-client" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.0.tgz#5a16a723c1220f536a9b1b3e01787e69e77b6f12" + integrity sha512-+exaXzEY3DNt2qtA2OtRNSDlVrE4p32j1JSsQkzA5AdP0YtJNjkYbYhJxkFmPYcjI1abuwopOZCwUmv682QkiQ== + dependencies: + "@smithy/node-config-provider" "^3.0.0" + "@smithy/types" "^3.0.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.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.0.tgz#64d775628b99a495ca83ce982f5c83aa45f1e894" + integrity sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ== + dependencies: + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-retry@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.0.tgz#8a0c47496aab74e1dfde4905d462ad636a8824bb" + integrity sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g== + dependencies: + "@smithy/service-error-classification" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-stream@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.0.tgz#b0fef162385b4daef18601cd3e8e79e19e53a764" + integrity sha512-AYQeeAxBi3yee9SXC0HgrbeIchQeo6EAkpiwwmmCK6Z7uq8GnMGe8AxRZT3O4wyMNRNK2qfjZSvx6+wKfuMajg== + dependencies: + "@smithy/fetch-http-handler" "^3.0.0" + "@smithy/node-http-handler" "^3.0.0" + "@smithy/types" "^3.0.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@^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.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.0.0.tgz#26bcc5bbbf1de9360a7aeb3b3919926fc6afa2bc" + integrity sha512-+fEXJxGDLCoqRKVSmo0auGxaqbiCo+8oph+4auefYjaNxjOLKSY2MxVQfRzo65PaZv4fr+5lWg+au7vSuJJ/zw== + dependencies: + "@smithy/abort-controller" "^3.0.0" + "@smithy/types" "^3.0.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.12.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050" + integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw== + 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.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.33.tgz#98cd286a1b8a5e11aa06623210240bcc28e95c48" + integrity sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A== + 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.11.10" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.10.tgz#feb364018cdd1f3d970a9e8c7f1c314c0a264fff" + integrity sha512-e2PNXoXLr6Z+dbfx5zSh9TRlXJrELycxiaXznp4S5+D2M3b9bqJEitNHA5923jhnB2zzFiZHa2f0SI1HoIahpg== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +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.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + 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.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + 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.12.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.1.tgz#517ff6d66d4fd5433e38e903051da3e57c87ff37" + integrity sha512-j6wcVoZf06nqEcBbDWkKg8Fp895SS96dSnTCjiXT+8vt2o02raTn4Lo9ERUuIVU5bAjoPYeA+7ytQFexFmLuVw== + 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.5.0" + +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.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + 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.3.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.15.tgz#e72bc61bc3038c90605f5dd48543dc67aaf3b50d" + integrity sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.11.0" + +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.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +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== + +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@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + 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.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + +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.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.1.1" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.1.tgz#f7f85aff59aa22f110b20e27692465cf3bf89481" + integrity sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA== + +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== + +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" + +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.0: + 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.11.5" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" + integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== + 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== + +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.11.1, 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.3.1, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +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.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + +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== + +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.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +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 8eddf11c0134a58bfb60aeb4a71aa0d226c488c5 Mon Sep 17 00:00:00 2001 From: Kirill Demidov Date: Tue, 14 May 2024 14:53:36 +0300 Subject: [PATCH 0528/1590] added Mode chain --- aggregators/rubic/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aggregators/rubic/index.ts b/aggregators/rubic/index.ts index cb058eeb90..a00f62697b 100644 --- a/aggregators/rubic/index.ts +++ b/aggregators/rubic/index.ts @@ -33,7 +33,8 @@ const chains: Record = { [CHAIN.FUSE]: 'fuse', [CHAIN.CELO]: 'celo', [CHAIN.OKEXCHAIN]: 'oke-x-chain', - [CHAIN.CRONOS]: 'cronos' + [CHAIN.CRONOS]: 'cronos', + [CHAIN.MODE]: 'mode' }; interface ApiResponce { From 935438c12d4367c52dcb9c30bfb334b7f4706e77 Mon Sep 17 00:00:00 2001 From: CropperFinance <85000094+CropperFinance@users.noreply.github.com> Date: Tue, 14 May 2024 15:11:29 +0200 Subject: [PATCH 0529/1590] Add tracking volume of Cropper CLMM --- dexs/cropper/index.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 dexs/cropper/index.ts diff --git a/dexs/cropper/index.ts b/dexs/cropper/index.ts new file mode 100644 index 0000000000..f1431847da --- /dev/null +++ b/dexs/cropper/index.ts @@ -0,0 +1,31 @@ +import { CHAIN } from '../../helpers/chains'; +import { httpGet } from '../../utils/fetchURL'; + + +const cropperEndpoint = "https://flow.cropper.finance/stats24.json"; + +interface Stats24H { + dailyVolume: number + dailyFees: number + details: number + timestamp: number +}; + +async function fetch(timestamp: any) { + let response: Stats24H = await httpGet(cropperEndpoint); + return { + dailyVolume: response.dailyVolume, + timestamp: timestamp + }; +} + +export default { + version: 2, + adapter: { + [CHAIN.SOLANA]: { + fetch: fetch, + runAtCurrTime: true, + start: 1714435200, + } + } +} From ea05168f0ed4e1097e0efcf02dd835eb28f1bc19 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 14 May 2024 14:57:12 +0000 Subject: [PATCH 0530/1590] fix flipside --- helpers/flipsidecrypto.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/helpers/flipsidecrypto.ts b/helpers/flipsidecrypto.ts index cbe0f5c44e..47f1c4d6d0 100644 --- a/helpers/flipsidecrypto.ts +++ b/helpers/flipsidecrypto.ts @@ -73,17 +73,18 @@ async function _queryFlipside(sqlQuery: string, maxAgeMinutes: number = 90) { } else { const error = new Error(`Payment Required`) bail(error) - console.error("Payment Required") - throw error + console.error("Payment Required: " + FLIPSIDE_API_KEY) + return [] } } if (!e.response) { bail(e) console.error("flipside not found response error") - throw e; + return [] } console.log("make query flipside", e.response, e) - throw e + bail(e) + return [] } } From 4ad02614d8019dfeffc57e42448438588ade07bc Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 14 May 2024 16:06:36 +0000 Subject: [PATCH 0531/1590] fix set run current --- fees/arbitrum/index.ts | 5 +++-- fees/chainlink-requests.ts | 5 +++-- fees/metamask.ts | 1 + fees/op-bnb.ts | 3 ++- fees/polygon.ts | 7 ++++--- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/fees/arbitrum/index.ts b/fees/arbitrum/index.ts index fc77ba06ed..5876d7a6c0 100644 --- a/fees/arbitrum/index.ts +++ b/fees/arbitrum/index.ts @@ -25,7 +25,7 @@ const adapter: Adapter = { ` // const seqGas: number = sequencerGas[0].sum const seqGas: any = await queryIndexer(sequencerGas, options) - const feeQuery = await queryFlipside(`SELECT SUM(TX_FEE) from arbitrum.core.fact_transactions where BLOCK_NUMBER > ${startblock} AND BLOCK_NUMBER < ${endblock}`, 260) + const feeQuery = await queryFlipside(`SELECT SUM(TX_FEE) from arbitrum.core.fact_transactions where BLOCK_NUMBER > ${startblock} AND BLOCK_NUMBER < ${endblock}`, 360) const fees = Number(feeQuery[0][0]) dailyFees.addGasToken(fees * 1e18) @@ -35,7 +35,8 @@ const adapter: Adapter = { return { timestamp, dailyFees, dailyRevenue, }; }) as any, - start: 1628553600 + start: 1628553600, + runAtCurrTime: true, }, }, isExpensiveAdapter: true, diff --git a/fees/chainlink-requests.ts b/fees/chainlink-requests.ts index 749992d00c..ef3a806655 100644 --- a/fees/chainlink-requests.ts +++ b/fees/chainlink-requests.ts @@ -65,7 +65,7 @@ const fetchRequests = (chain: Chain) => { const query_paid = build_link_query(timestamp) const gas_query = build_gas_query(timestamp) - const linkPaid_logs: ILog[] = (await queryFlipside(query_paid, 260)) + const linkPaid_logs: ILog[] = (await queryFlipside(query_paid, 360)) .map(([data, topics, transactionHash, chain]: [string, string[], string, string]) => { return { data, @@ -80,7 +80,7 @@ const fetchRequests = (chain: Chain) => { const payments = Number('0x'+data.slice(128, 192)) / 10 ** 18; return payments; }).reduce((a: number, b: number) => a + b, 0); - const ethGas = await queryFlipside(gas_query, 260) + const ethGas = await queryFlipside(gas_query, 360) const gas_fees = ethGas.map(([fee, chain]: [string, string]) => { return { @@ -130,6 +130,7 @@ const adapter: SimpleAdapter = { [CHAIN.AVAX]: { fetch: fetchRequests(CHAIN.AVAX), start: 1675382400, + runAtCurrTime: true, }, }, isExpensiveAdapter: true, diff --git a/fees/metamask.ts b/fees/metamask.ts index db977eb2ed..3e5233fbbd 100644 --- a/fees/metamask.ts +++ b/fees/metamask.ts @@ -91,6 +91,7 @@ const adapter: Adapter = { [CHAIN.ARBITRUM]: { fetch: graph(CHAIN.ARBITRUM), start: 1672531200, + runAtCurrTime: true, } }, isExpensiveAdapter: true, diff --git a/fees/op-bnb.ts b/fees/op-bnb.ts index 511f69d9cc..2e3dc54227 100644 --- a/fees/op-bnb.ts +++ b/fees/op-bnb.ts @@ -36,7 +36,7 @@ const fetch = async (timestamp: number, _chainBlocks: ChainBlocks, options: Fetc and BLOCK_NUMBER > ${await getFromBlock()} AND BLOCK_NUMBER < ${await getToBlock()} ` - const cost_to_l1: number[] = (await queryFlipside(query, 260)).flat(); + const cost_to_l1: number[] = (await queryFlipside(query, 360)).flat(); const dailyFees = await getFees(options) const dailyRevenue = dailyFees.clone(); dailyRevenue.addGasToken((cost_to_l1[0] ?? 0) * 1e18 * -1) @@ -49,6 +49,7 @@ const adapter: Adapter = { [CHAIN.OP_BNB]: { fetch: fetch as any, start: 1691971200, + runAtCurrTime: true, }, }, isExpensiveAdapter: true, diff --git a/fees/polygon.ts b/fees/polygon.ts index 6a61ba186f..229851c992 100644 --- a/fees/polygon.ts +++ b/fees/polygon.ts @@ -46,7 +46,7 @@ const adapter: Adapter = { LEFT JOIN BlockTotals bt ON tt.BLOCK_NUMBER = bt.BLOCK_NUMBER;` - const [tx_fee, burn_fee]: number[] = (await queryFlipside(query_tx_fee, 260)).flat(); + const [tx_fee, burn_fee]: number[] = (await queryFlipside(query_tx_fee, 360)).flat(); const maticAddress = "ethereum:" + ADDRESSES.ethereum.MATIC; dailyFees.addTokenVannila(maticAddress, tx_fee * 1e18); @@ -54,8 +54,9 @@ const adapter: Adapter = { return { timestamp, dailyFees, dailyRevenue, }; }, // start: 1575158400, - start: 1672531200 - }, + start: 1672531200, + runAtCurrTime: true, + } }, isExpensiveAdapter: true, protocolType: ProtocolType.CHAIN From ce47a82042562de152832a054a287ce45d01635c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 14 May 2024 17:00:08 +0000 Subject: [PATCH 0532/1590] univ2 --- protocols/uniswap/index.ts | 72 +++++++++++++++++++++++++++++++++----- 1 file changed, 64 insertions(+), 8 deletions(-) diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index ded9486323..66be0cb114 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -1,6 +1,6 @@ import ADDRESSES from '../../helpers/coreAssets.json' import { Chain } from "@defillama/sdk/build/general"; -import { BreakdownAdapter, FetchResultGeneric, BaseAdapter } from "../../adapters/types"; +import { BreakdownAdapter, FetchResultGeneric, BaseAdapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import * as sdk from "@defillama/sdk"; @@ -11,6 +11,7 @@ import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, } from "../../helpers/getUniSubgraph" +import request, { gql } from 'graphql-request'; const v1Endpoints = { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap", @@ -170,6 +171,61 @@ const v2Deployments = { zora: '0x0F797dC7efaEA995bB916f268D919d0a1950eE3C' } +const chainv2mapping: any = { + [CHAIN.ARBITRUM]: "ARBITRUM", + [CHAIN.ETHEREUM]: "ETHEREUM", + [CHAIN.OPTIMISM]: "OPTIMISM", + [CHAIN.POLYGON]: "POLYGON", + [CHAIN.BASE]: "BASE", + [CHAIN.BSC]: "BNB", +} + +const fetchV2 = async (options: FetchOptions) => { + interface IGraphResponse { + v2HistoricalProtocolVolume: Array<{ + id: string + timestamp: number + value: string + __typename: string + }> + } + const url = 'https://interface.gateway.uniswap.org/v1/graphql'; + const query = gql`query getVolume($chain: Chain!, $duration: HistoryDuration!) { + v2HistoricalProtocolVolume: historicalProtocolVolume( + chain: $chain + version: V2 + duration: $duration + ) { + id + timestamp + value + __typename + } + }`; + try { + const response:IGraphResponse = await request(url, query, { chain: chainv2mapping[options.chain], duration: "MONTH" }, { + 'accept': '*/*', + 'accept-language': 'th,en-US;q=0.9,en;q=0.8', + 'cache-control': 'no-cache', + 'content-type': 'application/json', + 'origin': 'https://app.uniswap.org', + 'pragma': 'no-cache', + 'priority': 'u=1, i', + 'referer': 'https://app.uniswap.org/', + 'sec-ch-ua': '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"', + 'sec-ch-ua-mobile': '?0', + 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' + }); + const dailyVolume = response.v2HistoricalProtocolVolume.find((item) => item.timestamp === options.startOfDay)?.value; + return {dailyVolume: dailyVolume} + } catch (e) { + console.error(e) + return { + dailyVolume: "0" + } + } +} + const adapter: BreakdownAdapter = { version: 2, @@ -222,13 +278,13 @@ const adapter: BreakdownAdapter = { methodology }, }, - // ...Object.keys(v2Deployments).reduce((acc, chain) => { - // acc[chain] = { - // fetch: getUniV2LogAdapter({factory: v2Deployments[chain]}), - // start: 0, - // } - // return acc - // }, {}) + ...Object.keys(chainv2mapping).reduce((acc, chain) => { + acc[chain] = { + fetch: fetchV2, + start: 0, + } + return acc + }, {}) }, v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { From bf64f57f62e08b2fa63da0ebc432a29f8988fe42 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 14 May 2024 17:03:30 +0000 Subject: [PATCH 0533/1590] disabbe op --- protocols/uniswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 66be0cb114..522e4641ba 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -174,7 +174,7 @@ const v2Deployments = { const chainv2mapping: any = { [CHAIN.ARBITRUM]: "ARBITRUM", [CHAIN.ETHEREUM]: "ETHEREUM", - [CHAIN.OPTIMISM]: "OPTIMISM", + // [CHAIN.OPTIMISM]: "OPTIMISM", [CHAIN.POLYGON]: "POLYGON", [CHAIN.BASE]: "BASE", [CHAIN.BSC]: "BNB", From f719f643fd00719e1b881566c603c956c7c006dc Mon Sep 17 00:00:00 2001 From: Keen Date: Wed, 15 May 2024 15:13:34 +0800 Subject: [PATCH 0534/1590] fix: update rfqv2 subgraph url --- dexs/tokenlon/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/tokenlon/index.ts b/dexs/tokenlon/index.ts index 8fade81f36..8d350bb62a 100644 --- a/dexs/tokenlon/index.ts +++ b/dexs/tokenlon/index.ts @@ -135,7 +135,7 @@ const config = { const endpoints: TEndpoint = { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/consenlabs/tokenlon-v5-exchange", }; -const rfqV2Endpoint = "https://subgraph.satsuma-prod.com/61c3dea518e9/imtoken-labs--349710/rfq-v2-subgraph/version/v0.0.1-test-version/api" +const rfqV2Endpoint = "https://satsuma-subgraph.token.im/subgraph/rfqv2/api" const fetchVolume = (chain: Chain) => { return async ( From fd4426bf2f8628d8beb6b5e599fe8946e2a6e249 Mon Sep 17 00:00:00 2001 From: galen Date: Wed, 15 May 2024 19:14:02 +0700 Subject: [PATCH 0535/1590] chore: fix bug no timestamp --- dexs/zeno/index.ts | 19 +++++++++++++------ fees/zeno.ts | 3 ++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/dexs/zeno/index.ts b/dexs/zeno/index.ts index 900d28803c..288516d7ab 100644 --- a/dexs/zeno/index.ts +++ b/dexs/zeno/index.ts @@ -1,9 +1,10 @@ import { Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, GraphQLClient } from "graphql-request"; -import type { ChainEndpoints } from "../../adapters/types"; +import type { ChainEndpoints, FetchOptions } from "../../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; import { HOUR, getTimestampAtStartOfHour } from "../../utils/date"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.METIS]: @@ -17,7 +18,9 @@ type MarketStat = { const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number) => { + return async (options: FetchOptions) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date()); + if (chain === CHAIN.METIS) { // Get total trading volume const totalTradingVolumeQuery = gql` @@ -28,6 +31,7 @@ const graphs = (graphUrls: ChainEndpoints) => { } } `; + const graphQLClient = new GraphQLClient(graphUrls[chain]); graphQLClient.setHeader("origin", "https://zeno.exchange"); const totalMarketStats = ( @@ -51,9 +55,11 @@ const graphs = (graphUrls: ChainEndpoints) => { for (const markets of splitMarket) { // Get daily trading volume const ids: Array = []; + let latestHourIndex = Math.floor( - getTimestampAtStartOfHour(timestamp) / HOUR + getTimestampAtStartOfHour(options.startTimestamp) / HOUR ); + for (let i = 0; i < 24; i++) { for (const marketStat of markets) { ids.push(`"${latestHourIndex - i}_${marketStat.id}"`); @@ -73,6 +79,7 @@ const graphs = (graphUrls: ChainEndpoints) => { } } `; + const last24hrMarketStats = ( await graphQLClient.request(last24hrVolumeQuery) ).marketHourlyStats as Array<{ tradingVolume: string }>; @@ -84,14 +91,14 @@ const graphs = (graphUrls: ChainEndpoints) => { } return { - timestamp, + timestamp: dayTimestamp, totalVolume: totalVolume.toString(), dailyVolume: last24hrVolume.toString(), }; } return { - timestamp, + timestamp: dayTimestamp, totalVolume: "0", dailyVolume: "0", }; @@ -104,7 +111,7 @@ const adapter: Adapter = { adapter: { [CHAIN.METIS]: { fetch: graphs(endpoints)(CHAIN.METIS), - start: 15176760, + start: 1710294153, }, }, }; diff --git a/fees/zeno.ts b/fees/zeno.ts index 89e060ac60..a05bc326d0 100644 --- a/fees/zeno.ts +++ b/fees/zeno.ts @@ -48,6 +48,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const finalizedDailyFee = Number(dailyFeeResp.dailyFeesStat.totalFeePaid) / 1e30; + const finalizedTotalFee = Number(totalFeeResp.globalFeesStat.totalFeePaid) / 1e30; const finalizedDailyFeeWithoutFundingFee = @@ -110,7 +111,7 @@ const adapter: Adapter = { adapter: { [CHAIN.METIS]: { fetch: graphs(endpoints), - start: 15176760, + start: 1710294153, }, }, }; From 4180e4700c86ea3180d5be22d5a9debbee145786 Mon Sep 17 00:00:00 2001 From: dtmkeng <0xgnek@gmail.com> Date: Wed, 15 May 2024 19:58:55 +0700 Subject: [PATCH 0536/1590] Delete yarn.lock --- yarn.lock | 2378 ----------------------------------------------------- 1 file changed, 2378 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 68d48c412f..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2378 +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@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@^3.400.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.575.0.tgz#d3548c9d1be0dc4d28c2ab89943cfcdd535bf62a" - integrity sha512-4h0YIvLNcKNqwPbxWqwHCH3KWMpRdKhfQPq7kZcZXzFRi3yVAVaAsZcH8eXZsKPlitxkfWNgvfcTXOjStL1uHA== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sso-oidc" "3.575.0" - "@aws-sdk/client-sts" "3.575.0" - "@aws-sdk/core" "3.575.0" - "@aws-sdk/credential-provider-node" "3.575.0" - "@aws-sdk/middleware-bucket-endpoint" "3.575.0" - "@aws-sdk/middleware-expect-continue" "3.575.0" - "@aws-sdk/middleware-flexible-checksums" "3.575.0" - "@aws-sdk/middleware-host-header" "3.575.0" - "@aws-sdk/middleware-location-constraint" "3.575.0" - "@aws-sdk/middleware-logger" "3.575.0" - "@aws-sdk/middleware-recursion-detection" "3.575.0" - "@aws-sdk/middleware-sdk-s3" "3.575.0" - "@aws-sdk/middleware-signing" "3.575.0" - "@aws-sdk/middleware-ssec" "3.575.0" - "@aws-sdk/middleware-user-agent" "3.575.0" - "@aws-sdk/region-config-resolver" "3.575.0" - "@aws-sdk/signature-v4-multi-region" "3.575.0" - "@aws-sdk/types" "3.575.0" - "@aws-sdk/util-endpoints" "3.575.0" - "@aws-sdk/util-user-agent-browser" "3.575.0" - "@aws-sdk/util-user-agent-node" "3.575.0" - "@aws-sdk/xml-builder" "3.575.0" - "@smithy/config-resolver" "^3.0.0" - "@smithy/core" "^2.0.0" - "@smithy/eventstream-serde-browser" "^3.0.0" - "@smithy/eventstream-serde-config-resolver" "^3.0.0" - "@smithy/eventstream-serde-node" "^3.0.0" - "@smithy/fetch-http-handler" "^3.0.0" - "@smithy/hash-blob-browser" "^3.0.0" - "@smithy/hash-node" "^3.0.0" - "@smithy/hash-stream-node" "^3.0.0" - "@smithy/invalid-dependency" "^3.0.0" - "@smithy/md5-js" "^3.0.0" - "@smithy/middleware-content-length" "^3.0.0" - "@smithy/middleware-endpoint" "^3.0.0" - "@smithy/middleware-retry" "^3.0.0" - "@smithy/middleware-serde" "^3.0.0" - "@smithy/middleware-stack" "^3.0.0" - "@smithy/node-config-provider" "^3.0.0" - "@smithy/node-http-handler" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/smithy-client" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/url-parser" "^3.0.0" - "@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.0" - "@smithy/util-defaults-mode-node" "^3.0.0" - "@smithy/util-endpoints" "^2.0.0" - "@smithy/util-retry" "^3.0.0" - "@smithy/util-stream" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.575.0.tgz#640a38d9fa63ec837b02c4463d84f6828c8662ed" - integrity sha512-YCstVaW5tAvXs+v4LR9gNAO+VRhIObjk1/knCdVQ5QQRTevtVQtdJWeNrDZYo4ATo0OHGyqGCj5Z09TWMv+e1Q== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.575.0" - "@aws-sdk/core" "3.575.0" - "@aws-sdk/credential-provider-node" "3.575.0" - "@aws-sdk/middleware-host-header" "3.575.0" - "@aws-sdk/middleware-logger" "3.575.0" - "@aws-sdk/middleware-recursion-detection" "3.575.0" - "@aws-sdk/middleware-user-agent" "3.575.0" - "@aws-sdk/region-config-resolver" "3.575.0" - "@aws-sdk/types" "3.575.0" - "@aws-sdk/util-endpoints" "3.575.0" - "@aws-sdk/util-user-agent-browser" "3.575.0" - "@aws-sdk/util-user-agent-node" "3.575.0" - "@smithy/config-resolver" "^3.0.0" - "@smithy/core" "^2.0.0" - "@smithy/fetch-http-handler" "^3.0.0" - "@smithy/hash-node" "^3.0.0" - "@smithy/invalid-dependency" "^3.0.0" - "@smithy/middleware-content-length" "^3.0.0" - "@smithy/middleware-endpoint" "^3.0.0" - "@smithy/middleware-retry" "^3.0.0" - "@smithy/middleware-serde" "^3.0.0" - "@smithy/middleware-stack" "^3.0.0" - "@smithy/node-config-provider" "^3.0.0" - "@smithy/node-http-handler" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/smithy-client" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/url-parser" "^3.0.0" - "@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.0" - "@smithy/util-defaults-mode-node" "^3.0.0" - "@smithy/util-endpoints" "^2.0.0" - "@smithy/util-middleware" "^3.0.0" - "@smithy/util-retry" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.575.0.tgz#473e1315e4601319f11b50bd2c5d28992aa0e820" - integrity sha512-elFWpAtktD3XBy47etG80GKXK9Lh3sNCMXLjcSs0NS0fdRIQJS2zKxC8qK22UQmdFKpXxthND5FKk7fNEqrR+g== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.575.0" - "@aws-sdk/middleware-host-header" "3.575.0" - "@aws-sdk/middleware-logger" "3.575.0" - "@aws-sdk/middleware-recursion-detection" "3.575.0" - "@aws-sdk/middleware-user-agent" "3.575.0" - "@aws-sdk/region-config-resolver" "3.575.0" - "@aws-sdk/types" "3.575.0" - "@aws-sdk/util-endpoints" "3.575.0" - "@aws-sdk/util-user-agent-browser" "3.575.0" - "@aws-sdk/util-user-agent-node" "3.575.0" - "@smithy/config-resolver" "^3.0.0" - "@smithy/core" "^2.0.0" - "@smithy/fetch-http-handler" "^3.0.0" - "@smithy/hash-node" "^3.0.0" - "@smithy/invalid-dependency" "^3.0.0" - "@smithy/middleware-content-length" "^3.0.0" - "@smithy/middleware-endpoint" "^3.0.0" - "@smithy/middleware-retry" "^3.0.0" - "@smithy/middleware-serde" "^3.0.0" - "@smithy/middleware-stack" "^3.0.0" - "@smithy/node-config-provider" "^3.0.0" - "@smithy/node-http-handler" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/smithy-client" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/url-parser" "^3.0.0" - "@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.0" - "@smithy/util-defaults-mode-node" "^3.0.0" - "@smithy/util-endpoints" "^2.0.0" - "@smithy/util-middleware" "^3.0.0" - "@smithy/util-retry" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.575.0.tgz#9e24a85588ff8db537c7d9c558a19fd54dfd7ab3" - integrity sha512-8MrT4J2dRiskf0JFMGL5VNBqPvc6igNa218LGBJzHXmLsm1WfGCGnce84R7U2USr8oPOenu0XzSCLvMQyZbGWQ== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sso-oidc" "3.575.0" - "@aws-sdk/core" "3.575.0" - "@aws-sdk/credential-provider-node" "3.575.0" - "@aws-sdk/middleware-host-header" "3.575.0" - "@aws-sdk/middleware-logger" "3.575.0" - "@aws-sdk/middleware-recursion-detection" "3.575.0" - "@aws-sdk/middleware-user-agent" "3.575.0" - "@aws-sdk/region-config-resolver" "3.575.0" - "@aws-sdk/types" "3.575.0" - "@aws-sdk/util-endpoints" "3.575.0" - "@aws-sdk/util-user-agent-browser" "3.575.0" - "@aws-sdk/util-user-agent-node" "3.575.0" - "@smithy/config-resolver" "^3.0.0" - "@smithy/core" "^2.0.0" - "@smithy/fetch-http-handler" "^3.0.0" - "@smithy/hash-node" "^3.0.0" - "@smithy/invalid-dependency" "^3.0.0" - "@smithy/middleware-content-length" "^3.0.0" - "@smithy/middleware-endpoint" "^3.0.0" - "@smithy/middleware-retry" "^3.0.0" - "@smithy/middleware-serde" "^3.0.0" - "@smithy/middleware-stack" "^3.0.0" - "@smithy/node-config-provider" "^3.0.0" - "@smithy/node-http-handler" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/smithy-client" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/url-parser" "^3.0.0" - "@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.0" - "@smithy/util-defaults-mode-node" "^3.0.0" - "@smithy/util-endpoints" "^2.0.0" - "@smithy/util-middleware" "^3.0.0" - "@smithy/util-retry" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.575.0.tgz#c336796db71faac1140aa1b4e4d5f50932964fba" - integrity sha512-117U+kQki2XoKcYQfepmlRcNxn6rELGlOFOBQ8Z2JTBXEYHblW2ke067a0CLmxFwp/zCWuc7IGjd3in3x4Q3rg== - dependencies: - "@smithy/core" "^2.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/signature-v4" "^3.0.0" - "@smithy/smithy-client" "^3.0.0" - "@smithy/types" "^3.0.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.575.0.tgz#2f0238719b383e37265e736575e9a9823a562982" - integrity sha512-YTgpq3rvYBXzW6OTDB00cE79evQtss/lz2GlJXgqqVXD0m7i77hGA8zb44VevP/WxtDaiSW7SSjuu8VCBGsg4g== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/property-provider" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.575.0.tgz#d410dba2ae89ea6c42bf30d319b98e410da14d1b" - integrity sha512-xQfVmYI+9KqRvhWY8fyElnpcVUBBUgi/Hoji3oU6WLrUjrX98k93He7gKDQSyHf7ykMLUAJYWwsV4AjQ2j6njA== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/fetch-http-handler" "^3.0.0" - "@smithy/node-http-handler" "^3.0.0" - "@smithy/property-provider" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/smithy-client" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-stream" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.575.0.tgz#787faee394686d9af83ea482ea44168b5fe8b61d" - integrity sha512-BdM6a/5VUuNge3c6yRuxvO+4srLoSfqHfkQGfUDfhTdTJpljlpfnc9h3z2Ni1+aueOHPZMNFWIktHDcX5wUGBg== - dependencies: - "@aws-sdk/credential-provider-env" "3.575.0" - "@aws-sdk/credential-provider-process" "3.575.0" - "@aws-sdk/credential-provider-sso" "3.575.0" - "@aws-sdk/credential-provider-web-identity" "3.575.0" - "@aws-sdk/types" "3.575.0" - "@smithy/credential-provider-imds" "^3.0.0" - "@smithy/property-provider" "^3.0.0" - "@smithy/shared-ini-file-loader" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.575.0.tgz#eb0a69b229ea8a4f7240fa36968a8a4b661879e1" - integrity sha512-rEdNpqW2jEc5kwbf/s9XQywMLQlIkMjuCK6mw9sF2OVRGHGVnh+6eh/1JFx8Kj+eU51ctifQ7KaHe8dGco8HYQ== - dependencies: - "@aws-sdk/credential-provider-env" "3.575.0" - "@aws-sdk/credential-provider-http" "3.575.0" - "@aws-sdk/credential-provider-ini" "3.575.0" - "@aws-sdk/credential-provider-process" "3.575.0" - "@aws-sdk/credential-provider-sso" "3.575.0" - "@aws-sdk/credential-provider-web-identity" "3.575.0" - "@aws-sdk/types" "3.575.0" - "@smithy/credential-provider-imds" "^3.0.0" - "@smithy/property-provider" "^3.0.0" - "@smithy/shared-ini-file-loader" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.575.0.tgz#b1b409af833ccbce18e2806991434aa30f61ceb3" - integrity sha512-2/5NJV7MZysKglqJSQ/O8OELNcwLcH3xknabL9NagtzB7RNB2p1AUXR0UlTey9sSDLL4oCmNa/+unYuglW/Ahg== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/property-provider" "^3.0.0" - "@smithy/shared-ini-file-loader" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.575.0.tgz#f39bbde97fe4dc2ecc2908cebfe79961a824fb58" - integrity sha512-NtXA9OPIKsqavs2F7hhLT/t2ZDjwJsvQevj31ov1NpmTNYMc7OWFWDptOG7rppsWMsk5KKmfiL2qViQJnezXNA== - dependencies: - "@aws-sdk/client-sso" "3.575.0" - "@aws-sdk/token-providers" "3.575.0" - "@aws-sdk/types" "3.575.0" - "@smithy/property-provider" "^3.0.0" - "@smithy/shared-ini-file-loader" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.575.0.tgz#524ff9f944986c99486be5fa374db4d5895f63ff" - integrity sha512-QcvVH7wpvpFRXGAGgCBfQeiF/ptD0NJ+Hrc8dDYfPGhFeZ0EoVQBYNphLi25xe7JZ+XbaqCKrURHZtr4fAEOJw== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/property-provider" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.575.0.tgz#258c00c672179f6c038f532f9bc1ff51caba5eb0" - integrity sha512-ytsp7xcmbpkVk4TLoi91YyXQh/vwSIGdJ2Awo/pi6ac5Fqe6OntPijh5GHSVj5ZrxW4haPWb6HdBmKMo4liGEw== - dependencies: - "@aws-sdk/types" "3.575.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.575.0.tgz#d54c8b309b87347be9f3a3b566bafa0fbf8cd7bf" - integrity sha512-8Nq4UtEi63MJPoYBACW5YoMKQdbrkLNGIdTyrolNRNwVS+6nQqDMvBplakCzQ1nL1rHOEEsKKc8e2BlG9SkR5A== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.575.0.tgz#0b06111c0cc82c279e6682acd36f96e3df56a1d5" - integrity sha512-UbyqN39v6s+olyuVKwX778w6J2ZuYpxb1j+KdhFtZwpMSLd/UIQ0+A71U2vB6TrC52OEW0jIXEEBv6PcMBz9nw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.575.0" - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.575.0.tgz#5bf24080d6a6c466cdeaff49879c77559f74a2fd" - integrity sha512-V2WoLBiXNCc4rIWZt6FUcP4TN0Vk02A9PPCBWkTfyOooiqfq+WZmZjRRBpwl1+5UsvARslrKWF0VzheMRXPJLQ== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.575.0.tgz#1816fcda54bfefa4b607a0ac93273e12b2027621" - integrity sha512-MtQsLsEjSSSfm0OlQqg9PEzS1nxJDdApGoeCYLTbCzIp6hChdLZCCsDXwGg9S++24rjQsUglMhXh4WGXQ9FDnw== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.575.0.tgz#981c939cb3c10c1e3ecfa458c64f7be8c5a71307" - integrity sha512-7DEKx9Z11Maaye7FfhYtC8rjbM/PcFcMO2N4QEAfypcgWCj+w4gseE2OGdfAH9OFDoFc6YvLp53v16vbPjzQSg== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.575.0.tgz#924a4b7ca864600a202d82621bed3ddfd7819e06" - integrity sha512-ri89ldRFos6KZDGaknWPS2XPO9qr+gZ7+mPaoU8YkSM1W4uKqtnUSONyc+O3CFGJrqReuGHhRq0l2Sld0bjwOw== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.575.0.tgz#b2be802e4522ca4d7b0466b1a9b174f802afc48f" - integrity sha512-8cBG8/tap4F6+UigTpKu8D2bvsLgqRTmn1K86qo3LqRX0Wc5X8TVjdKA2PmG0onOOr7rqTLcP9Q02LCh3usU6Q== - dependencies: - "@aws-sdk/types" "3.575.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/signature-v4" "^3.0.0" - "@smithy/smithy-client" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.575.0.tgz#b19d2d6816770ed8645e12662d147777b271907e" - integrity sha512-frpGG7i3YngWwrYIeDq8/nbat3Gfl803qasaS112rmlPU0ezmYS1SPxpXjpIKxUUYofbzaFtRBAOHU1u7GnWew== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/property-provider" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/signature-v4" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-middleware" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.575.0.tgz#799650e7860a7443e95e0e72313e41b77e99ce1c" - integrity sha512-rEFt2w3DdlmPsHRvVXOW6rNDIPE7UaEZ5a4LAkn78XilQYuQdhm5wtw5Ao0pJpDSVYNCZDVZaAvdHKQ1dnfwCA== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.575.0.tgz#1969f8b8972ee0c02753584575dde3e3b0b204b8" - integrity sha512-fWlr4RfrUNS2R3PgP+WsoMYORAgv/47Lp0J0fb3dXO1YvdczNWddRbFSUX2MQxM/y9XFfQPLpLgzluhoL3Cjeg== - dependencies: - "@aws-sdk/types" "3.575.0" - "@aws-sdk/util-endpoints" "3.575.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.575.0.tgz#8be6a9411ec8b5da3f3d0cac44beaa5b9eb6341f" - integrity sha512-sBJKwTWKCWu9y8FzXIijYGwkKr3tDkPXM7BylToe6W+tGkp4OirV4iXrWA9zReNwTTepoxHufofqjGK9BtcI8g== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/node-config-provider" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.575.0.tgz#73a639120a9bb36a067fdbaa094a54c9bcff7093" - integrity sha512-QMwuLuNwnEQ51RCZX8H/lXnOJgBcJJOCgClB9usW/XujNJVq8GnpZ5E7TsQLN88G6fifmcjQWonLKummuh/zVA== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.575.0" - "@aws-sdk/types" "3.575.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/signature-v4" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.575.0.tgz#0d5ded8434b49cafd7303a139d09c97155138d3b" - integrity sha512-EPNDPQoQkjKqn4D2t70qVzbfdtlaAy9KBdG58qD1yNWVxq8Rh/lXdwmB+aE2PSahtyfVikZdCRoZiFzxDh5IUA== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/property-provider" "^3.0.0" - "@smithy/shared-ini-file-loader" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.575.0", "@aws-sdk/types@^3.222.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.575.0.tgz#ed8f33e15c7ea22b5244018330475983d0558556" - integrity sha512-XrnolQGs0wXxdgNudirR14OgNOarH7WUif38+2Pd4onZH+L7XoILem0EgA1tRpgFpw2pFHlZCNaAHDNSBEal7g== - dependencies: - "@smithy/types" "^3.0.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.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.575.0.tgz#370ad9b1ce7df227d44447ab2135c5e110aa72d2" - integrity sha512-wC5x+V6w3kRlR6X6XVINsAPDYG+Tzs3Wthlw+YLtjuPODUNZIQAqsABHahxnekFyAvse+1929Hwo+CaL+BHZGA== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/types" "^3.0.0" - "@smithy/util-endpoints" "^2.0.0" - 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.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.575.0.tgz#3054cc42e0b386a34f7b0d4e8e9609e016c72eed" - integrity sha512-iADonXyaXgwvC4T0qRuDWCdKInz82GX2cyezq/oqVlL8bPY7HD8jwZZruuJdq5tkaJi1EhbO4+f1ksZqOiZKvQ== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/types" "^3.0.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.575.0.tgz#49a6ecc5f56297e1477de90f30f102c470d3dc78" - integrity sha512-kwzvBfA0LoILDOFS6BV8uOkksBHrYulP6kNXegB5eZnDSNia5DbBsXqxQ/HknNF5a429SWQw2aaQJEgQvZB1VA== - dependencies: - "@aws-sdk/types" "3.575.0" - "@smithy/node-config-provider" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.575.0": - version "3.575.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.575.0.tgz#233b2aae422dd789a078073032da1bc60317aa1d" - integrity sha512-cWgAwmbFYNCFzPwxL705+lWps0F3ZvOckufd2KKoEZUmtpVw9/txUXNrPySUXSmRTSRhoatIMABNfStWR043bQ== - dependencies: - "@smithy/types" "^3.0.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.56" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.56.tgz#ad5d9129f0af10ac4ad6f1a74fa0e40d55962fe2" - integrity sha512-91dDh9+EbZ8ABDz4SYhPj/eV8vjobh0uQ7+OkgfHH9V1zH/ajJ2DbN40NJqRL+rMzZqu0CX062wNaxPYmcwASw== - dependencies: - "@aws-sdk/client-s3" "^3.400.0" - "@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" - -"@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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.0.0.tgz#5815f5d4618e14bf8d031bb98a99adabbb831168" - integrity sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA== - dependencies: - "@smithy/types" "^3.0.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.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.0.tgz#d37b31e3202c5ce54d9bd2406dcde7c7b5073cbd" - integrity sha512-2GzOfADwYLQugYkKQhIyZyQlM05K+tMKvRnc6eFfZcpJGRfKoMUMYdPlBKmqHwQFXQKBrGV6cxL9oymWgDzvFw== - dependencies: - "@smithy/node-config-provider" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.0" - tslib "^2.6.2" - -"@smithy/core@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.0.0.tgz#221c8407d185bd28d3bd6d8f2fefdfe240fa2ccf" - integrity sha512-y1VuiOpU8nL0KlL0pvYpOddKGK+8xpD4Jvg9NN42Bl6gHWAr46LpAzWi4I78WxcFIMN1vw1+RUVOlcqR/vfs5g== - dependencies: - "@smithy/middleware-endpoint" "^3.0.0" - "@smithy/middleware-retry" "^3.0.0" - "@smithy/middleware-serde" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/smithy-client" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-middleware" "^3.0.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.0.0.tgz#a290eb0224ef045742e5c806685cf63d44a084f3" - integrity sha512-lfmBiFQcA3FsDAPxNfY0L7CawcWtbyWsBOHo34nF095728JLkBX4Y9q/VPPE2r7fqMVK+drmDigqE2/SSQeVRA== - dependencies: - "@smithy/node-config-provider" "^3.0.0" - "@smithy/property-provider" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/url-parser" "^3.0.0" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.0.0.tgz#81d30391220f73d41f432f65384b606d67673e46" - integrity sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-hex-encoding" "^3.0.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.0.tgz#94721b01f01d8b7eb1db5814275a774ed4d38190" - integrity sha512-NB7AFiPN4NxP/YCAnrvYR18z2/ZsiHiF7VtG30gshO9GbFrIb1rC8ep4NGpJSWrz6P64uhPXeo4M0UsCLnZKqw== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.0.tgz#420447d1d284d41f7f070a5d92fc3686cc922581" - integrity sha512-RUQG3vQ3LX7peqqHAbmayhgrF5aTilPnazinaSGF1P0+tgM3vvIRWPHmlLIz2qFqB9LqFIxditxc8O2Z6psrRw== - dependencies: - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.0.tgz#6519523fbb429307be29b151b8ba35bcca2b6e64" - integrity sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.0.tgz#cb8441a73fbde4cbaa68e4a21236f658d914a073" - integrity sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw== - dependencies: - "@smithy/eventstream-codec" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.0.tgz#229ac830d9ac7aaab096f2ef126abd8ed1ea1d35" - integrity sha512-gP1MlOpIB/onIbh4g9eSG3XdI/G31cAvd9Lo11192eL4mxks3xpkPaa+RIcZaX2Vmb8I8HzxBddPSXviY1iq0w== - dependencies: - "@smithy/protocol-http" "^4.0.0" - "@smithy/querystring-builder" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.0.0.tgz#63ef4c98f74c53cbcad8ec73387c68ec4708f55b" - integrity sha512-/Wbpdg+bwJvW7lxR/zpWAc1/x/YkcqguuF2bAzkJrvXriZu1vm8r+PUdE4syiVwQg7PPR2dXpi3CLBb9qRDaVQ== - dependencies: - "@smithy/chunked-blob-reader" "^3.0.0" - "@smithy/chunked-blob-reader-native" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-node@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.0.tgz#f44b5fff193e241c1cdcc957b296b60f186f0e59" - integrity sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw== - dependencies: - "@smithy/types" "^3.0.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.0.0.tgz#b395a8a0d2427e4a8effc56135b37cb299339f8f" - integrity sha512-J0i7de+EgXDEGITD4fxzmMX8CyCNETTIRXlxjMiNUvvu76Xn3GJ31wQR85ynlPk2wI1lqoknAFJaD1fiNDlbIA== - dependencies: - "@smithy/types" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.0.tgz#21cb6b5203ee15321bfcc751f21f7a19536d4ae8" - integrity sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g== - dependencies: - "@smithy/types" "^3.0.0" - 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.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.0.tgz#6a2d1c496f4d4476a0fc84f7724d79b234c3eb13" - integrity sha512-Tm0vrrVzjlD+6RCQTx7D3Ls58S3FUH1ZCtU1MIh/qQmaOo1H9lMN2as6CikcEwgattnA9SURSdoJJ27xMcEfMA== - dependencies: - "@smithy/types" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.0.tgz#084b3d22248967885d496eb0b105d9090e8ababd" - integrity sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg== - dependencies: - "@smithy/protocol-http" "^4.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.0.tgz#54c9e1bd8f35b7d004c803eaf3702e61e32b8295" - integrity sha512-aXOAWztw/5qAfp0NcA2OWpv6ZI/E+Dh9mByif7i91D/0iyYNUcKvskmXiowKESFkuZ7PIMd3VOR4fTibZDs2OQ== - dependencies: - "@smithy/middleware-serde" "^3.0.0" - "@smithy/node-config-provider" "^3.0.0" - "@smithy/shared-ini-file-loader" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/url-parser" "^3.0.0" - "@smithy/util-middleware" "^3.0.0" - tslib "^2.6.2" - -"@smithy/middleware-retry@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.0.tgz#3edf6e73651b81273629bf7a8f10db31c4e90a82" - integrity sha512-kFaBiTa50y0iwhrOjX5UISo1SfiXPrE1EsMtZJAVF7Oci3AUpVzaMzRxzQJFGnxioSyCwSmzqiE9x4X3dW+7VQ== - dependencies: - "@smithy/node-config-provider" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/service-error-classification" "^3.0.0" - "@smithy/smithy-client" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-middleware" "^3.0.0" - "@smithy/util-retry" "^3.0.0" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.0.tgz#786da6a6bc0e5e51d669dac834c19965245dd302" - integrity sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w== - dependencies: - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.0.tgz#00f112bae7af5fc3bd37d4fab95ebce0f17a7774" - integrity sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q== - dependencies: - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.0.0.tgz#4cd5dcf6132c75d6a582fcd6243482dac703865a" - integrity sha512-buqfaSdDh0zo62EPLf8rGDvcpKwGpO5ho4bXS2cdFhlOta7tBkWJt+O5uiaAeICfIOfPclNOndshDNSanX2X9g== - dependencies: - "@smithy/property-provider" "^3.0.0" - "@smithy/shared-ini-file-loader" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.0.0.tgz#e771ea95d03e259f04b7b37e8aece8a4fffc8cdc" - integrity sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ== - dependencies: - "@smithy/abort-controller" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/querystring-builder" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/property-provider@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.0.0.tgz#ef7a26557c855cc1471b9aa0e05529183e99b978" - integrity sha512-LmbPgHBswdXCrkWWuUwBm9w72S2iLWyC/5jet9/Y9cGHtzqxi+GVjfCfahkvNV4KXEwgnH8EMpcrD9RUYe0eLQ== - dependencies: - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.0.0.tgz#04df3b5674b540323f678e7c4113e8abd8b26432" - integrity sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ== - dependencies: - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.0.tgz#48a9aa7b700e8409368c21bc0adf7564e001daea" - integrity sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg== - dependencies: - "@smithy/types" "^3.0.0" - "@smithy/util-uri-escape" "^3.0.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.0.tgz#fa1ed0cee408cd4d622070fa874bc50ac1a379b7" - integrity sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ== - dependencies: - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.0.tgz#06a45cb91b15b8b0d5f3b1df2b3743d2ca42f5c4" - integrity sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA== - dependencies: - "@smithy/types" "^3.0.0" - -"@smithy/shared-ini-file-loader@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.0.0.tgz#8739b7cd24f55fb4e276a74f00f0c2bb4e3f25d8" - integrity sha512-REVw6XauXk8xE4zo5aGL7Rz4ywA8qNMUn8RtWeTRQsgAlmlvbJ7CEPBcaXU2NDC3AYBgYAXrGyWD8XrN8UGDog== - dependencies: - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.0.0.tgz#f536d0abebfeeca8e9aab846a4042658ca07d3b7" - integrity sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.0" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.0.0.tgz#b9c73b6d162d8f1b3a202d04476c3b588fe666da" - integrity sha512-HTLlEOPOoPxyVCoqzwRGJuRh4hyAAo+eveRcEPi7UpIaq2PCAmdFZM76jabUuzlPPR9ge+OQlKzZre+LT1nXzA== - dependencies: - "@smithy/middleware-endpoint" "^3.0.0" - "@smithy/middleware-stack" "^3.0.0" - "@smithy/protocol-http" "^4.0.0" - "@smithy/types" "^3.0.0" - "@smithy/util-stream" "^3.0.0" - tslib "^2.6.2" - -"@smithy/types@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.0.0.tgz#00231052945159c64ffd8b91e8909d8d3006cb7e" - integrity sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.0.tgz#5fdc77cd22051c1aac6531be0315bfcba0fa705d" - integrity sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw== - dependencies: - "@smithy/querystring-parser" "^3.0.0" - "@smithy/types" "^3.0.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@^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.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.0.tgz#38bf6536fec24059d96459d8480028cf33548695" - integrity sha512-/ChTQXFZVK/92dLR9RLW2fOG03ghgUYZnRfrs9d9T3L7UxtsGx9QitF7Ppu64A8xcUHqA30kV7TUayFRBd7YQw== - dependencies: - "@smithy/property-provider" "^3.0.0" - "@smithy/smithy-client" "^3.0.0" - "@smithy/types" "^3.0.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.0.tgz#7b0d7f8964f78b5bcc94ae5d2849a5338c475d38" - integrity sha512-gfABCXswcMgDUcVO+16e4BgTFnouaXNCowp9mVxV8dgaOCpUT9eEWIC+PK3ZoEm26QwlwT7WgfuN1Y22HKX36g== - dependencies: - "@smithy/config-resolver" "^3.0.0" - "@smithy/credential-provider-imds" "^3.0.0" - "@smithy/node-config-provider" "^3.0.0" - "@smithy/property-provider" "^3.0.0" - "@smithy/smithy-client" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.0.tgz#5a16a723c1220f536a9b1b3e01787e69e77b6f12" - integrity sha512-+exaXzEY3DNt2qtA2OtRNSDlVrE4p32j1JSsQkzA5AdP0YtJNjkYbYhJxkFmPYcjI1abuwopOZCwUmv682QkiQ== - dependencies: - "@smithy/node-config-provider" "^3.0.0" - "@smithy/types" "^3.0.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.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.0.tgz#64d775628b99a495ca83ce982f5c83aa45f1e894" - integrity sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ== - dependencies: - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-retry@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.0.tgz#8a0c47496aab74e1dfde4905d462ad636a8824bb" - integrity sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g== - dependencies: - "@smithy/service-error-classification" "^3.0.0" - "@smithy/types" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-stream@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.0.tgz#b0fef162385b4daef18601cd3e8e79e19e53a764" - integrity sha512-AYQeeAxBi3yee9SXC0HgrbeIchQeo6EAkpiwwmmCK6Z7uq8GnMGe8AxRZT3O4wyMNRNK2qfjZSvx6+wKfuMajg== - dependencies: - "@smithy/fetch-http-handler" "^3.0.0" - "@smithy/node-http-handler" "^3.0.0" - "@smithy/types" "^3.0.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@^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.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.0.0.tgz#26bcc5bbbf1de9360a7aeb3b3919926fc6afa2bc" - integrity sha512-+fEXJxGDLCoqRKVSmo0auGxaqbiCo+8oph+4auefYjaNxjOLKSY2MxVQfRzo65PaZv4fr+5lWg+au7vSuJJ/zw== - dependencies: - "@smithy/abort-controller" "^3.0.0" - "@smithy/types" "^3.0.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.12.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050" - integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw== - 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.33" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.33.tgz#98cd286a1b8a5e11aa06623210240bcc28e95c48" - integrity sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A== - 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.11.10" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.10.tgz#feb364018cdd1f3d970a9e8c7f1c314c0a264fff" - integrity sha512-e2PNXoXLr6Z+dbfx5zSh9TRlXJrELycxiaXznp4S5+D2M3b9bqJEitNHA5923jhnB2zzFiZHa2f0SI1HoIahpg== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -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.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - 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.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - 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.12.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.1.tgz#517ff6d66d4fd5433e38e903051da3e57c87ff37" - integrity sha512-j6wcVoZf06nqEcBbDWkKg8Fp895SS96dSnTCjiXT+8vt2o02raTn4Lo9ERUuIVU5bAjoPYeA+7ytQFexFmLuVw== - 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.5.0" - -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.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - 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.3.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.15.tgz#e72bc61bc3038c90605f5dd48543dc67aaf3b50d" - integrity sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.6" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.11.0" - -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.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -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== - -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@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - 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.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== - -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.1: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.1.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.1.tgz#f7f85aff59aa22f110b20e27692465cf3bf89481" - integrity sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA== - -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== - -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" - -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.0: - 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.11.5" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128" - integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw== - 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== - -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.11.1, 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.3.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -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.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - -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== - -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.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -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 dd988cd8beba752cfed32b6d91e877e9ac0d4106 Mon Sep 17 00:00:00 2001 From: lil-il <> Date: Wed, 15 May 2024 16:02:33 +0300 Subject: [PATCH 0537/1590] adapter for vooi --- aggregator-derivatives/vooi/index.ts | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 aggregator-derivatives/vooi/index.ts diff --git a/aggregator-derivatives/vooi/index.ts b/aggregator-derivatives/vooi/index.ts new file mode 100644 index 0000000000..5c85032e72 --- /dev/null +++ b/aggregator-derivatives/vooi/index.ts @@ -0,0 +1,34 @@ +import fetchURL from "../../utils/fetchURL"; +import { FetchResult, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const URL = "https://app.vooi.io/"; +const endpoint = "api/defilama-stats"; +const startTimestamp = 1714608000; // 02.05.2024 + + +interface IAPIResponse { + dailyVolume: string; + totalVolume: string; +} +const fetch = async (options: any): Promise => { + let timestamp = options.toTimestamp + const { dailyVolume, totalVolume }: IAPIResponse = ( + (await fetchURL(`${URL}${endpoint}?ts=${timestamp}`)).data + ); + return { + dailyVolume, + totalVolume, + timestamp + }; +}; + +export default { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetch, + start: startTimestamp + }, + }, + version: 2 +} \ No newline at end of file From 37cef5150d7bb76f650d0367d5a7fb347b6142d1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 15 May 2024 13:32:27 +0000 Subject: [PATCH 0538/1590] rename --- dexs/{cropper => cropper-clmm}/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename dexs/{cropper => cropper-clmm}/index.ts (94%) diff --git a/dexs/cropper/index.ts b/dexs/cropper-clmm/index.ts similarity index 94% rename from dexs/cropper/index.ts rename to dexs/cropper-clmm/index.ts index f1431847da..445cbffa2c 100644 --- a/dexs/cropper/index.ts +++ b/dexs/cropper-clmm/index.ts @@ -25,7 +25,7 @@ export default { [CHAIN.SOLANA]: { fetch: fetch, runAtCurrTime: true, - start: 1714435200, + start: 1714435200, } } } From 00b80260112b14fed3bf7a76d73b95c8d4aaca96 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 15 May 2024 14:30:01 +0000 Subject: [PATCH 0539/1590] count only one side --- dexs/mangrove/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/mangrove/index.ts b/dexs/mangrove/index.ts index 621eb654ca..bc4831f4bb 100644 --- a/dexs/mangrove/index.ts +++ b/dexs/mangrove/index.ts @@ -37,7 +37,7 @@ const adapter: Adapter = { for (const market of markets) { const { base, quote, totalValueInBase, totalValueInQuote } = market; dailyVolume.add(base, totalValueInBase); - dailyVolume.add(quote, totalValueInQuote); + // dailyVolume.add(quote, totalValueInQuote); } return { dailyVolume }; From 97be09853918ec0c26317e8666d2a59a73efd59d Mon Sep 17 00:00:00 2001 From: stepollo2 Date: Wed, 15 May 2024 16:58:14 +0200 Subject: [PATCH 0540/1590] vfat fees --- fees/vfat/index.ts | 68 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 fees/vfat/index.ts diff --git a/fees/vfat/index.ts b/fees/vfat/index.ts new file mode 100644 index 0000000000..a03f9e9ad1 --- /dev/null +++ b/fees/vfat/index.ts @@ -0,0 +1,68 @@ +import { Adapter, FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const chainSettings = { + base: { + factory: '0x71D234A3e1dfC161cc1d081E6496e76627baAc31', + fromBlock: 12116234, + chainName: 'base', + }, + optimism: { + factory: '0xB4C31b0f0B76b351395D4aCC94A54dD4e6fbA1E8', + fromBlock: 117753454, + chainName: 'optimism', + }, +}; + +const fetchFees = (chain: string) => async ({ createBalances, getLogs }: FetchOptions) => { + const dailyFees = createBalances(); + const settings = chainSettings[chain]; + + + // Fetch Deploy events to get all Sickle contract addresses + const deployLogs = await getLogs({ + target: settings.factory, + fromBlock: settings.fromBlock, + eventAbi: 'event Deploy(address indexed admin, address sickle)', + }); + + + const sickleContracts = deployLogs.map((log: any) => log.sickle); + + + // Fetch FeeCharged events from all Sickle contracts + for (const sickle of sickleContracts) { + const logs = await getLogs({ + target: sickle, + fromBlock: settings.fromBlock, + eventAbi: 'event FeeCharged(bytes32 feesHash, uint256 amount, address token)', + }); + + logs.forEach((log: any) => { + dailyFees.add(log.token, log.amount); + }); + + console.log(dailyFees) + } + + return { + dailyFees, + dailyRevenue: dailyFees, +}; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.BASE]: { + fetch: fetchFees('base'), + start: 1713225241, + }, + [CHAIN.OPTIMISM]: { + fetch: fetchFees('optimism'), + start: 117753454, + }, + }, +}; + +export default adapter; From 068276bce5d10f95d8067d581b0699bdfd3ac8db Mon Sep 17 00:00:00 2001 From: stepollo2 Date: Wed, 15 May 2024 17:43:08 +0200 Subject: [PATCH 0541/1590] fees --- fees/vfat/index.ts | 125 +++++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/fees/vfat/index.ts b/fees/vfat/index.ts index a03f9e9ad1..838ee35afa 100644 --- a/fees/vfat/index.ts +++ b/fees/vfat/index.ts @@ -1,68 +1,69 @@ -import { Adapter, FetchOptions } from "../../adapters/types"; +import { Adapter, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const chainSettings = { - base: { - factory: '0x71D234A3e1dfC161cc1d081E6496e76627baAc31', - fromBlock: 12116234, - chainName: 'base', - }, - optimism: { - factory: '0xB4C31b0f0B76b351395D4aCC94A54dD4e6fbA1E8', - fromBlock: 117753454, - chainName: 'optimism', - }, -}; - -const fetchFees = (chain: string) => async ({ createBalances, getLogs }: FetchOptions) => { - const dailyFees = createBalances(); - const settings = chainSettings[chain]; +const chainSettings: any = { + base: { + factory: '0x71D234A3e1dfC161cc1d081E6496e76627baAc31', + fromBlock: 12116234, + chainName: 'base', + }, + optimism: { + factory: '0xB4C31b0f0B76b351395D4aCC94A54dD4e6fbA1E8', + fromBlock: 117753454, + chainName: 'optimism', + }, + }; - - // Fetch Deploy events to get all Sickle contract addresses - const deployLogs = await getLogs({ - target: settings.factory, - fromBlock: settings.fromBlock, - eventAbi: 'event Deploy(address indexed admin, address sickle)', - }); - - - const sickleContracts = deployLogs.map((log: any) => log.sickle); - - - // Fetch FeeCharged events from all Sickle contracts - for (const sickle of sickleContracts) { - const logs = await getLogs({ - target: sickle, + const fetchFees = async ({ createBalances, getLogs, chain }: FetchOptions) => { + const dailyFees = createBalances(); + const settings = chainSettings[chain]; + + + // Fetch Deploy events to get all Sickle contract addresses + const deployLogs = await getLogs({ + target: settings.factory, fromBlock: settings.fromBlock, - eventAbi: 'event FeeCharged(bytes32 feesHash, uint256 amount, address token)', + eventAbi: 'event Deploy(address indexed admin, address sickle)', }); - - logs.forEach((log: any) => { - dailyFees.add(log.token, log.amount); - }); - - console.log(dailyFees) + + + const sickleContracts = deployLogs.map((log: any) => log.sickle); + + + // Fetch FeeCharged events from all Sickle contracts + for (const sickle of sickleContracts) { + const logs = await getLogs({ + target: sickle, + fromBlock: settings.fromBlock, + eventAbi: 'event FeeCharged(bytes32 feesHash, uint256 amount, address token)', + }); + + logs.forEach((log: any) => { + dailyFees.add(log.token, log.amount); + }); + console.log(dailyFees) + } + + return { + dailyFees, + dailyRevenue: dailyFees, + }; + }; + + const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.OPTIMISM]: { + fetch: fetchFees, + start: chainSettings.optimism.fromBlock, + }, + [CHAIN.BASE]: { + fetch: fetchFees, + start: chainSettings.base.fromBlock, + }, + } } - - return { - dailyFees, - dailyRevenue: dailyFees, -}; -}; - -const adapter: Adapter = { - version: 2, - adapter: { - [CHAIN.BASE]: { - fetch: fetchFees('base'), - start: 1713225241, - }, - [CHAIN.OPTIMISM]: { - fetch: fetchFees('optimism'), - start: 117753454, - }, - }, -}; - -export default adapter; + + export default adapter; + + \ No newline at end of file From b1a8e37fd59ac8efe4be7cc5484172f2dc02468e Mon Sep 17 00:00:00 2001 From: stepollo2 Date: Wed, 15 May 2024 18:17:15 +0200 Subject: [PATCH 0542/1590] remove logging --- fees/vfat/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/fees/vfat/index.ts b/fees/vfat/index.ts index 838ee35afa..40f90073be 100644 --- a/fees/vfat/index.ts +++ b/fees/vfat/index.ts @@ -41,7 +41,6 @@ const chainSettings: any = { logs.forEach((log: any) => { dailyFees.add(log.token, log.amount); }); - console.log(dailyFees) } return { From 64b38b04910bf03aaa4676569d95b4e9ffe2c024 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 15 May 2024 16:55:37 +0000 Subject: [PATCH 0543/1590] add jitp=fees --- fees/jito.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 fees/jito.ts diff --git a/fees/jito.ts b/fees/jito.ts new file mode 100644 index 0000000000..250c8beff4 --- /dev/null +++ b/fees/jito.ts @@ -0,0 +1,36 @@ +import { time } from "console" +import { FetchOptions, SimpleAdapter } from "../adapters/types" +import { CHAIN } from "../helpers/chains" +import { queryDune } from "../helpers/dune" + +const fetchFees = async (_: any, _t: any, options: FetchOptions) => { + const dailyFees = options.createBalances() + const dailyRevenue = options.createBalances() + const result = await queryDune("3733728", { + start: options.startOfDay, + end: options.startOfDay + 86400, + }); + dailyFees.add('So11111111111111111111111111111111111111112', result[0].sol_tip * 1e9) + dailyRevenue.add('So11111111111111111111111111111111111111112', result[0].sol_tip * 1e9) + dailyRevenue.resizeBy(0.04) + + return { + dailyFees: dailyFees, + dailyRevenue: dailyRevenue, + timestamp: options.startOfDay + } +} + +const adapter: SimpleAdapter = { + version: 1, + adapter: { + [CHAIN.SOLANA]: { + fetch: fetchFees, + runAtCurrTime: true, + start: 1714435200, + } + }, + isExpensiveAdapter: true +} + +export default adapter From f6438267a0e508ec0bf767073d1f69beb31379cc Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 16 May 2024 00:45:47 +0000 Subject: [PATCH 0544/1590] fix max age --- fees/arbitrum/index.ts | 2 +- fees/chainlink-requests.ts | 4 ++-- fees/metamask.ts | 2 +- fees/op-bnb.ts | 2 +- fees/polygon.ts | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fees/arbitrum/index.ts b/fees/arbitrum/index.ts index 5876d7a6c0..96af8bd879 100644 --- a/fees/arbitrum/index.ts +++ b/fees/arbitrum/index.ts @@ -25,7 +25,7 @@ const adapter: Adapter = { ` // const seqGas: number = sequencerGas[0].sum const seqGas: any = await queryIndexer(sequencerGas, options) - const feeQuery = await queryFlipside(`SELECT SUM(TX_FEE) from arbitrum.core.fact_transactions where BLOCK_NUMBER > ${startblock} AND BLOCK_NUMBER < ${endblock}`, 360) + const feeQuery = await queryFlipside(`SELECT SUM(TX_FEE) from arbitrum.core.fact_transactions where BLOCK_NUMBER > ${startblock} AND BLOCK_NUMBER < ${endblock}`, 260) const fees = Number(feeQuery[0][0]) dailyFees.addGasToken(fees * 1e18) diff --git a/fees/chainlink-requests.ts b/fees/chainlink-requests.ts index ef3a806655..d83a232701 100644 --- a/fees/chainlink-requests.ts +++ b/fees/chainlink-requests.ts @@ -65,7 +65,7 @@ const fetchRequests = (chain: Chain) => { const query_paid = build_link_query(timestamp) const gas_query = build_gas_query(timestamp) - const linkPaid_logs: ILog[] = (await queryFlipside(query_paid, 360)) + const linkPaid_logs: ILog[] = (await queryFlipside(query_paid, 260)) .map(([data, topics, transactionHash, chain]: [string, string[], string, string]) => { return { data, @@ -80,7 +80,7 @@ const fetchRequests = (chain: Chain) => { const payments = Number('0x'+data.slice(128, 192)) / 10 ** 18; return payments; }).reduce((a: number, b: number) => a + b, 0); - const ethGas = await queryFlipside(gas_query, 360) + const ethGas = await queryFlipside(gas_query, 260) const gas_fees = ethGas.map(([fee, chain]: [string, string]) => { return { diff --git a/fees/metamask.ts b/fees/metamask.ts index 3e5233fbbd..2e4bbcb7ed 100644 --- a/fees/metamask.ts +++ b/fees/metamask.ts @@ -44,7 +44,7 @@ const graph = (chain: Chain) => { ` - const value: string[][] = (await queryFlipside(query, 510)) + const value: string[][] = (await queryFlipside(query, 260)) const rawData = value.map((a: string[]) => { const data = a[0].replace('0x5f575529', ''); const address = data.slice(64, 128); diff --git a/fees/op-bnb.ts b/fees/op-bnb.ts index 2e3dc54227..a15498cd7d 100644 --- a/fees/op-bnb.ts +++ b/fees/op-bnb.ts @@ -36,7 +36,7 @@ const fetch = async (timestamp: number, _chainBlocks: ChainBlocks, options: Fetc and BLOCK_NUMBER > ${await getFromBlock()} AND BLOCK_NUMBER < ${await getToBlock()} ` - const cost_to_l1: number[] = (await queryFlipside(query, 360)).flat(); + const cost_to_l1: number[] = (await queryFlipside(query, 260)).flat(); const dailyFees = await getFees(options) const dailyRevenue = dailyFees.clone(); dailyRevenue.addGasToken((cost_to_l1[0] ?? 0) * 1e18 * -1) diff --git a/fees/polygon.ts b/fees/polygon.ts index 229851c992..2ce0f69d4b 100644 --- a/fees/polygon.ts +++ b/fees/polygon.ts @@ -46,7 +46,7 @@ const adapter: Adapter = { LEFT JOIN BlockTotals bt ON tt.BLOCK_NUMBER = bt.BLOCK_NUMBER;` - const [tx_fee, burn_fee]: number[] = (await queryFlipside(query_tx_fee, 360)).flat(); + const [tx_fee, burn_fee]: number[] = (await queryFlipside(query_tx_fee, 260)).flat(); const maticAddress = "ethereum:" + ADDRESSES.ethereum.MATIC; dailyFees.addTokenVannila(maticAddress, tx_fee * 1e18); From 8e2b65674833b522a550f4f30fe2a173954d5e2a Mon Sep 17 00:00:00 2001 From: galen Date: Thu, 16 May 2024 11:18:08 +0700 Subject: [PATCH 0545/1590] chore: fix bug --- dexs/zeno/index.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dexs/zeno/index.ts b/dexs/zeno/index.ts index 288516d7ab..bc0674d7ea 100644 --- a/dexs/zeno/index.ts +++ b/dexs/zeno/index.ts @@ -19,7 +19,8 @@ type MarketStat = { const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { return async (options: FetchOptions) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date()); + const startTime = Date.now(); + const hourStartTime = startTime / 1e3; if (chain === CHAIN.METIS) { // Get total trading volume @@ -57,7 +58,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const ids: Array = []; let latestHourIndex = Math.floor( - getTimestampAtStartOfHour(options.startTimestamp) / HOUR + getTimestampAtStartOfHour(hourStartTime) / HOUR ); for (let i = 0; i < 24; i++) { @@ -91,14 +92,14 @@ const graphs = (graphUrls: ChainEndpoints) => { } return { - timestamp: dayTimestamp, + timestamp: startTime, totalVolume: totalVolume.toString(), dailyVolume: last24hrVolume.toString(), }; } return { - timestamp: dayTimestamp, + timestamp: startTime, totalVolume: "0", dailyVolume: "0", }; From d60f01d6e0ba2929347449bfe42f5c243117fdd3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 16 May 2024 13:43:20 +0000 Subject: [PATCH 0546/1590] call with all target --- fees/vfat/index.ts | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/fees/vfat/index.ts b/fees/vfat/index.ts index 40f90073be..366f07b617 100644 --- a/fees/vfat/index.ts +++ b/fees/vfat/index.ts @@ -13,42 +13,36 @@ const chainSettings: any = { chainName: 'optimism', }, }; - + const fetchFees = async ({ createBalances, getLogs, chain }: FetchOptions) => { const dailyFees = createBalances(); const settings = chainSettings[chain]; - - + + // Fetch Deploy events to get all Sickle contract addresses const deployLogs = await getLogs({ target: settings.factory, fromBlock: settings.fromBlock, eventAbi: 'event Deploy(address indexed admin, address sickle)', }); - - + const sickleContracts = deployLogs.map((log: any) => log.sickle); - - - // Fetch FeeCharged events from all Sickle contracts - for (const sickle of sickleContracts) { - const logs = await getLogs({ - target: sickle, - fromBlock: settings.fromBlock, - eventAbi: 'event FeeCharged(bytes32 feesHash, uint256 amount, address token)', - }); - - logs.forEach((log: any) => { - dailyFees.add(log.token, log.amount); - }); - } - + + const logs = await getLogs({ + targets: sickleContracts, + eventAbi: 'event FeeCharged(bytes32 feesHash, uint256 amount, address token)', + }); + + logs.forEach((log: any) => { + dailyFees.add(log.token, log.amount); + }); + return { dailyFees, dailyRevenue: dailyFees, }; }; - + const adapter: SimpleAdapter = { version: 2, adapter: { @@ -62,7 +56,5 @@ const chainSettings: any = { }, } } - + export default adapter; - - \ No newline at end of file From 56912f36de9392c04653159d1c6cf73c66eaa6b2 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 16 May 2024 13:56:58 +0000 Subject: [PATCH 0547/1590] fix bug --- fees/jito.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/fees/jito.ts b/fees/jito.ts index 250c8beff4..a7371d9193 100644 --- a/fees/jito.ts +++ b/fees/jito.ts @@ -3,12 +3,12 @@ import { FetchOptions, SimpleAdapter } from "../adapters/types" import { CHAIN } from "../helpers/chains" import { queryDune } from "../helpers/dune" -const fetchFees = async (_: any, _t: any, options: FetchOptions) => { +const fetchFees = async (options: FetchOptions) => { const dailyFees = options.createBalances() const dailyRevenue = options.createBalances() const result = await queryDune("3733728", { - start: options.startOfDay, - end: options.startOfDay + 86400, + start: options.startTimestamp, + end: options.endTimestamp, }); dailyFees.add('So11111111111111111111111111111111111111112', result[0].sol_tip * 1e9) dailyRevenue.add('So11111111111111111111111111111111111111112', result[0].sol_tip * 1e9) @@ -22,11 +22,10 @@ const fetchFees = async (_: any, _t: any, options: FetchOptions) => { } const adapter: SimpleAdapter = { - version: 1, + version: 2, adapter: { [CHAIN.SOLANA]: { fetch: fetchFees, - runAtCurrTime: true, start: 1714435200, } }, From 56d8b1835eb172f97dd2f62fc6d5b012ddae146b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 16 May 2024 14:08:42 +0000 Subject: [PATCH 0548/1590] fix start time --- fees/vfat/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/vfat/index.ts b/fees/vfat/index.ts index 366f07b617..86999a58e0 100644 --- a/fees/vfat/index.ts +++ b/fees/vfat/index.ts @@ -1,4 +1,4 @@ -import { Adapter, FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const chainSettings: any = { @@ -48,11 +48,11 @@ const chainSettings: any = { adapter: { [CHAIN.OPTIMISM]: { fetch: fetchFees, - start: chainSettings.optimism.fromBlock, + start: 1710979200, }, [CHAIN.BASE]: { fetch: fetchFees, - start: chainSettings.base.fromBlock, + start: 1710979200, }, } } From b7952e4da26502b1018cc336a8a53daed48b0b44 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 16 May 2024 14:40:46 +0000 Subject: [PATCH 0549/1590] fix missing data --- fees/gmx-v2/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/gmx-v2/index.ts b/fees/gmx-v2/index.ts index 96f48c229f..1a9b9a5db5 100644 --- a/fees/gmx-v2/index.ts +++ b/fees/gmx-v2/index.ts @@ -21,7 +21,7 @@ const fetch = (chain: Chain) => { const dateString = new Date(dayTimestamp * 1000).toISOString().split("T")[0]; const daily = fees.find(fee => fee.time.split(' ')[0] === dateString); const dailyFees = daily?.v2_fees || 0 - const total_fees = daily?.total_fees; + const total_fees = daily?.total_fees || 0; return { dailyFees: `${dailyFees}`, dailyRevenue: `${dailyFees * 0.37}`, From f72b8c68c508808f478387a24069ffdfd3fba9b4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 16 May 2024 15:20:07 +0000 Subject: [PATCH 0550/1590] switch to v2 --- dexs/gmx-v2/gmx-v2-trade/index.ts | 46 +++++++------------------------ dexs/gmx-v2/index.ts | 38 +++++++++---------------- 2 files changed, 23 insertions(+), 61 deletions(-) diff --git a/dexs/gmx-v2/gmx-v2-trade/index.ts b/dexs/gmx-v2/gmx-v2-trade/index.ts index 57796d26a5..b74ee4da48 100644 --- a/dexs/gmx-v2/gmx-v2-trade/index.ts +++ b/dexs/gmx-v2/gmx-v2-trade/index.ts @@ -1,7 +1,5 @@ -import { FetchResultVolume, SimpleAdapter } from "../../../adapters/types"; +import { FetchOptions, FetchResultV2 } from "../../../adapters/types"; import { CHAIN } from "../../../helpers/chains"; -import * as sdk from "@defillama/sdk"; -import { getBlock } from "../../../helpers/getBlock"; import { Chain } from "@defillama/sdk/build/general"; interface ILog { @@ -28,36 +26,16 @@ const contract: TChain = { [CHAIN.AVAX]: '0xdb17b211c34240b014ab6d61d4a31fa0c0e20c26' } -const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - const fromBlock = (await getBlock(fromTimestamp, chain, {})); - const toBlock = (await getBlock(toTimestamp, chain, {})); - - const posistion_logs: ILog[] = (await sdk.getEventLogs({ - target: contract[chain], - toBlock: toBlock, - fromBlock: fromBlock, - chain: chain, +const fetch = async (options: FetchOptions): Promise => { + const posistion_logs = await options.getLogs({ + target: contract[options.chain], topics: [topic0_ins, topic1_ins] - })) as ILog[]; + }); - const decress_logs: ILog[] = (await sdk.getEventLogs({ - target: contract[chain], - toBlock: toBlock, - fromBlock: fromBlock, - chain: chain, + const decress_logs = await options.getLogs({ + target: contract[options.chain], topics: [topic0_des, topic1_des] - })) as ILog[]; - - // const fees_logs: ILog[] = (await sdk.getEventLogs({ - // target: contract[chain], - // toBlock: toBlock, - // fromBlock: fromBlock, - // chain: chain, - // topics: [topic0_fees, topic1_fees] - // }))as ILog[]; + }); let hash: string[] = []; const raw_des = decress_logs.map((e: ILog) => { @@ -76,27 +54,23 @@ const fetch = (chain: Chain) => { return Number('0x' + volume) / 1e30; }) - - const dailyVolume: number = [...raw_des, ...raw_in] .reduce((a: number, b: number) => a + b, 0); return { dailyVolume: `${dailyVolume}`, - timestamp } - } } const adapter_trade: any = { adapter: { [CHAIN.ARBITRUM]: { - fetch: fetch(CHAIN.ARBITRUM), + fetch: fetch, start: 1688428800, }, [CHAIN.AVAX]: { - fetch: fetch(CHAIN.AVAX), + fetch: fetch, start: 1688428800, }, }, diff --git a/dexs/gmx-v2/index.ts b/dexs/gmx-v2/index.ts index ed6e6a0452..2f7ef9892c 100644 --- a/dexs/gmx-v2/index.ts +++ b/dexs/gmx-v2/index.ts @@ -1,10 +1,9 @@ -import { BreakdownAdapter, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions, FetchResultV2, FetchResultVolume } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import * as sdk from "@defillama/sdk"; -import { getBlock } from "../../helpers/getBlock"; import { Chain } from "@defillama/sdk/build/general"; import { adapter_trade } from './gmx-v2-trade/index' + interface ILog { data: string; transactionHash: string; @@ -28,22 +27,12 @@ const contract: TChain = { [CHAIN.AVAX]: '0xdb17b211c34240b014ab6d61d4a31fa0c0e20c26' } -const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { - const balances = new sdk.Balances({ chain, timestamp }) - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - const fromBlock = (await getBlock(fromTimestamp, chain, {})); - const toBlock = (await getBlock(toTimestamp, chain, {})); - - const swap_logs: ILog[] = (await sdk.getEventLogs({ - target: contract[chain], - toBlock: toBlock, - fromBlock: fromBlock, - chain: chain, - topics: [topic0_ins, topic1_ins] - })) as ILog[]; - +const fetch = async (options: FetchOptions): Promise => { + const dailyVolume = options.createBalances(); + const swap_logs: ILog[] = await options.getLogs({ + target: contract[options.chain], + topics: [topic0_ins, topic1_ins], + }); const raw_in = swap_logs.map((e: ILog) => { const data = e.data.replace('0x', ''); const volume = Number('0x' + data.slice(53 * 64, (53 * 64) + 64)); @@ -56,31 +45,30 @@ const fetch = (chain: Chain) => { }) raw_in.map((e: IToken) => { - balances.add(e.token, e.amount) + dailyVolume.add(e.token, e.amount) }) return { - dailyVolume: await balances.getUSDString(), - timestamp + dailyVolume: dailyVolume, } - } } const adapter: any = { adapter: { [CHAIN.ARBITRUM]: { - fetch: fetch(CHAIN.ARBITRUM), + fetch: fetch, start: 1688428800, }, [CHAIN.AVAX]: { - fetch: fetch(CHAIN.AVAX), + fetch: fetch, start: 1688428800, }, }, }; const adapters: BreakdownAdapter = { + version: 2, breakdown: { "gmx-v2-swap": adapter["adapter"], "gmx-v2-trade": adapter_trade["adapter"], From ec46c010bc251fbaeb9e52d5eba01ddc7ab7fd95 Mon Sep 17 00:00:00 2001 From: ChrisPantostin Date: Thu, 16 May 2024 18:43:51 +0200 Subject: [PATCH 0551/1590] ociswap dimension adapters v2 for fees and volume --- dexs/ociswap/index.ts | 55 +++++++++++++++++++++++++++++++++++++++++++ fees/ociswap.ts | 55 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 dexs/ociswap/index.ts create mode 100644 fees/ociswap.ts diff --git a/dexs/ociswap/index.ts b/dexs/ociswap/index.ts new file mode 100644 index 0000000000..0cd086c352 --- /dev/null +++ b/dexs/ociswap/index.ts @@ -0,0 +1,55 @@ +import { BreakdownAdapter, FetchResultVolume, SimpleAdapter } from "../../adapters/types" +import { CHAIN } from "../../helpers/chains" +import fetchURL from "../../utils/fetchURL" + +interface PoolStatistics { + pool_type: string; + volume: { + xrd: { + '24h': string; + total: string; + }; + usd: { + '24h': string; + total: string; + }; + }; +} + +const fetchVolume = (poolType: 'basic' | 'precision') => { + return async (timestamp: number): Promise => { + const response: Array = await fetchURL('http://api.ociswap.com/statistics/pool-types'); + + const index = response.findIndex(pool => pool.pool_type === poolType); + + const dailyVolume = Number(response[index].volume.usd["24h"]); + const totalVolume = Number(response[index].volume.usd.total); + + return { + dailyVolume: `${dailyVolume}`, + totalVolume: `${totalVolume}`, + timestamp + }; + }; +}; + +const adapters: BreakdownAdapter = { + version: 2, + breakdown: { + basic: { + [CHAIN.RADIXDLT]: { + fetch: fetchVolume('basic'), + start: 1696118400, + // runAtCurrTime: true + } + }, + precision: { + [CHAIN.RADIXDLT]: { + fetch: fetchVolume('precision'), + start: 1696118400, + // runAtCurrTime: true + } + } + } +} +export default adapters; \ No newline at end of file diff --git a/fees/ociswap.ts b/fees/ociswap.ts new file mode 100644 index 0000000000..f853ff715a --- /dev/null +++ b/fees/ociswap.ts @@ -0,0 +1,55 @@ +import { BreakdownAdapter, FetchResultFees, SimpleAdapter } from "../adapters/types" +import { CHAIN } from "../helpers/chains" +import fetchURL from "../utils/fetchURL" + +interface PoolStatistics { + pool_type: string; + fees: { + xrd: { + '24h': string; + total: string; + }; + usd: { + '24h': string; + total: string; + }; + }; +} + +const fetchFees = (poolType: 'basic' | 'precision') => { + return async (timestamp: number): Promise => { + const response: Array = await fetchURL('http://api.ociswap.com/statistics/pool-types'); + + const index = response.findIndex(pool => pool.pool_type === poolType); + + const dailyFees = Number(response[index].fees.usd["24h"]); + const totalFees = Number(response[index].fees.usd.total); + + return { + dailyFees: `${dailyFees}`, + totalFees: `${totalFees}`, + timestamp + }; + }; +}; + +const adapters: BreakdownAdapter = { + version: 2, + breakdown: { + basic: { + [CHAIN.RADIXDLT]: { + fetch: fetchFees('basic'), + start: 1696118400, + // runAtCurrTime: true + } + }, + precision: { + [CHAIN.RADIXDLT]: { + fetch: fetchFees('precision'), + start: 1696118400, + // runAtCurrTime: true + } + } + } +} +export default adapters; \ No newline at end of file From d10c1bad787e39e8af43733ea640fe1f31e29862 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 16 May 2024 16:46:55 +0000 Subject: [PATCH 0552/1590] fix stack volume --- dexs/Omnidrome/index.ts | 8 ++- dexs/swaap/index.ts | 133 +++++++++++++++------------------------- 2 files changed, 56 insertions(+), 85 deletions(-) diff --git a/dexs/Omnidrome/index.ts b/dexs/Omnidrome/index.ts index b5f1216ff7..1492b86bd2 100644 --- a/dexs/Omnidrome/index.ts +++ b/dexs/Omnidrome/index.ts @@ -1,5 +1,6 @@ -import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types" +import { DISABLED_ADAPTER_KEY, FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" +import disabledAdapter from "../../helpers/disabledAdapter"; const lphelper = '0x1f176AABA9c6e2014455E5C199afD15A70f9e34e'; @@ -36,7 +37,7 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, } }) - const targets = forSwaps.map((forSwap: IForSwap) => forSwap.lp) + const targets = [...new Set(forSwaps.map((forSwap: IForSwap) => forSwap.lp))] const logs: ILog[][] = await getLogs({ targets, @@ -56,8 +57,9 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, } const adapters: SimpleAdapter = { adapter: { + [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.ZETA]: { - fetch: fetch as any, + fetch: async (timestamp: number) => {return {timestamp, dailyVolume: '0'}}, start: 1707177600, } } diff --git a/dexs/swaap/index.ts b/dexs/swaap/index.ts index 5b238513a1..ceb359ef25 100644 --- a/dexs/swaap/index.ts +++ b/dexs/swaap/index.ts @@ -1,9 +1,7 @@ -import {BaseAdapter, BreakdownAdapter} from "../../adapters/types"; -import {CHAIN} from "../../helpers/chains"; -import {gql, GraphQLClient} from "graphql-request"; -import {Chain} from "@defillama/sdk/build/general"; -import {getTimestampAtStartOfDay,} from "../../utils/date"; -import {getChainVolume} from "../../helpers/getUniSubgraphVolume"; +import { BreakdownAdapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, GraphQLClient } from "graphql-request"; +import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; import customBackfill from "../../helpers/customBackfill"; interface ChainConfig{ @@ -36,97 +34,54 @@ const config:Record = { } interface Data { - swaapSnapshot: { + start: { id: string, totalSwapVolume: string - } | null + }, + end: { + id: string, + totalSwapVolume: string + } } -async function getTotalVolume(chain: Chain, timestamp: number): Promise { - let id = config[chain].id + '-' + timestamp - const url = config[chain].api - const graphQLClient = new GraphQLClient(url); - const todayVolumeQuery = gql` +const getVolume = async (options: FetchOptions) => { + const endtimestamp = options.startOfDay + const starttimestamp = endtimestamp - 86400 + const startId = config[options.chain].id + '-' + starttimestamp + const endId = config[options.chain].id + '-' + endtimestamp + + const query = gql` { - swaapSnapshot(id:"${id}"){ + start:swaapSnapshot(id: "${startId}") { id totalSwapVolume - } - } - `; - - const result = await graphQLClient.request(todayVolumeQuery) as Data - return result.swaapSnapshot ? Number(result.swaapSnapshot.totalSwapVolume) : null -} - -/** - * While the getTotalVolume is null, fetch getTotalVolume of the previous day - * @param chain - * @param timestamp - */ -async function getClosestTotalVolume(chain: Chain, timestamp: number): Promise { - - const minimalTS = config[chain].start - if (timestamp <= minimalTS) { - return config[chain].firstDayVolume - } - - - let totalVolume = await getTotalVolume(chain, timestamp) - if (totalVolume === null) { - const yesterdayTS = timestamp - 24 * 3600 - totalVolume = await getClosestTotalVolume(chain, yesterdayTS) + } + end:swaapSnapshot(id: "${endId}") { + id + totalSwapVolume + } } - return totalVolume -} - - -async function getVolume(chain: Chain, timestamp: number,) { - - const timestampBegin =getTimestampAtStartOfDay(timestamp) - const timestampYesterday = timestampBegin - 24 * 3600 - - const totalVolume = await getClosestTotalVolume(chain, timestampBegin) - const yesterdayVolume = await getClosestTotalVolume(chain, timestampYesterday) - - const dailyVolume = totalVolume - yesterdayVolume - + ` + const url = config[options.chain].api + const graphQLClient = new GraphQLClient(url); + const result: Data = await graphQLClient.request(query) + const dailyVolume = Number(result.end?.totalSwapVolume || 0) - Number(result.start?.totalSwapVolume || 0) + const totalVolume = Number(result.end?.totalSwapVolume || 0) return { + dailyVolume, totalVolume, - dailyVolume } } -const v2graphs = (chain: Chain) => { - return async (timestamp: number) => { - - const {totalVolume, dailyVolume} = await getVolume( chain, timestamp) - return { - timestamp, - totalVolume:totalVolume.toString(), - dailyVolume:dailyVolume.toString() - - }; +const v2graphs = async (options: FetchOptions): Promise => { + const { dailyVolume, totalVolume } = await getVolume(options) + return { + dailyVolume, + totalVolume } } -const adapterV2: BaseAdapter = Object.keys(config).reduce((acc, chain) => { - return { - ...acc, - [chain]: { - fetch: v2graphs(chain), - start: config[chain].start, - runAtCurrTime: false, - meta: { - methodology: 'Comparing total volume of the current day with the total volume of the previous day, using TheGraph.' - } - }, - } - }, {} as BaseAdapter) -; - -// Directly from Balancer adapter const graphParams = { totalVolume: { factory: "swaapProtocols", @@ -152,11 +107,25 @@ const adapter: BreakdownAdapter = { customBackfill: customBackfill(CHAIN.POLYGON, v1graphs) }, }, - v2: adapterV2 + v2: { + [CHAIN.ETHEREUM]: { + fetch: v2graphs, + start: 1688169600, + + }, + [CHAIN.POLYGON]: { + fetch: v2graphs, + start: 1688083200, + + }, + [CHAIN.ARBITRUM]: { + fetch: v2graphs, + start: 1696464000, + }, + } } } export default adapter; - From 869646c6c2ba062fa6f7e6934310c7237426691d Mon Sep 17 00:00:00 2001 From: Gary Leung Date: Fri, 17 May 2024 00:47:53 +0800 Subject: [PATCH 0553/1590] add Jaspervault adapter --- options/jaspervault/index.ts | 193 ++++++++++++++++++++++++++++ options/jaspervault/pythpriceIds.ts | 31 +++++ 2 files changed, 224 insertions(+) create mode 100644 options/jaspervault/index.ts create mode 100644 options/jaspervault/pythpriceIds.ts diff --git a/options/jaspervault/index.ts b/options/jaspervault/index.ts new file mode 100644 index 0000000000..30d1be117e --- /dev/null +++ b/options/jaspervault/index.ts @@ -0,0 +1,193 @@ +import { Adapter, FetchV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { GraphQLClient, gql } from 'graphql-request'; +import { price_id_mapping } from './pythpriceIds'; +import BigNumber from "bignumber.js"; + +const subgraphEndpoint = "https://gateway-arbitrum.network.thegraph.com/api/7ca317c1d6347234f75513585a71157c/deployments/id/QmQF8cZUUb3hEVfuNBdGAQPBmvRioLsqyxHZbRRgk1zpVV" +const client = new GraphQLClient(subgraphEndpoint); + +async function getUnderlyingAssetPrice(underlyingAsset: string) { + const hermesApiEndpoint = "https://hermes.pyth.network" + const mapping = price_id_mapping.find(m => m.token.toLowerCase() == underlyingAsset.toLowerCase()); + if (!mapping) { + console.error(`No price ID found for underlying asset: ${underlyingAsset}`) + return 0; + } + else if (mapping.price == 0) { + try { + const response = await fetch(`${hermesApiEndpoint}/v2/updates/price/latest?ids[]=${mapping.price_id}`); + const data = await response.json(); + return data.parsed[0].price.price; + } + catch (error) { + console.error(error) + return 0; + } + } + else { + return mapping.price; + } +} + +async function calculateNotionalVolume(orders: any[]) { + let notionalVolume = new BigNumber(0) + for (const order of orders) { + let price = 0; + let price_bignumber = new BigNumber(0); + let orderDetails = order.callOrder || order.putOrder; + + if (!orderDetails) { + console.error("No order details found"); + continue; + } + let tokenInfo_underlying = price_id_mapping.find(m => m.token.toLowerCase() == orderDetails.underlyingAsset.toLowerCase()); + if (tokenInfo_underlying) { + price = await getUnderlyingAssetPrice(orderDetails.underlyingAsset); + if (order.callOrder) { + let tokenInfo_strike = price_id_mapping.find(m => m.token.toLowerCase() == orderDetails.strikeAsset.toLowerCase()); + if (tokenInfo_strike) { + notionalVolume = notionalVolume.plus(new BigNumber(orderDetails.strikeAmount).dividedBy(10 ** tokenInfo_strike.decimals)) + order.notionalVolume = new BigNumber(orderDetails.strikeAmount).dividedBy(10 ** tokenInfo_strike.decimals).toFixed(2) + } + } + else if (order.putOrder) { + price_bignumber = new BigNumber(price).dividedBy(10 ** tokenInfo_underlying.decimals_pyth) + let underlyingAmount_bignumber = new BigNumber(orderDetails.underlyingAmount).dividedBy(10 ** tokenInfo_underlying.decimals) + notionalVolume = notionalVolume.plus(price_bignumber.multipliedBy(underlyingAmount_bignumber)) + order.notionalVolume = price_bignumber.multipliedBy(underlyingAmount_bignumber).toFixed(2) + } + } + } + return notionalVolume.toFixed(2); +} + +function calculatePremiumVolume(optionPremiums: any[]) { + let premiumVolume = new BigNumber(0) + for (const premium of optionPremiums) { + let tokenInfo = price_id_mapping.find(m => m.token.toLowerCase() == premium.premiumAsset.toLowerCase()); + if (tokenInfo) { + let primium_bigNumber = new BigNumber(premium.amount).dividedBy(10 ** tokenInfo.decimals) + premiumVolume = premiumVolume.plus(primium_bigNumber); + } + } + return premiumVolume.toFixed(2); +} + +async function fetchCallOrder(client: GraphQLClient, start: number, end: number | null, pageSize: number = 100) { + let skip = 0; + let allData = { callOrderEntities: [] }; + let hasMore = true; + while (hasMore) { + const query = gql` + { + callOrderEntities(where: { timestamp_gte: ${start}, timestamp_lte: ${end}}, first: ${pageSize}, skip: ${skip}) { + callOrder { + underlyingAsset + underlyingAmount + strikeAsset + strikeAmount + } + orderId + transactionHash + } + } + `; + const result = await client.request(query); + allData.callOrderEntities.push(...result.callOrderEntities as never[]); + skip += pageSize; + hasMore = result.callOrderEntities.length === pageSize; + } + return allData; +} +async function fetchPutOrder(client: GraphQLClient, start: number, end: number | null, pageSize: number = 100) { + let skip = 0; + let allData = { putOrderEntities: [] }; + let hasMore = true; + while (hasMore) { + const query = gql` + { + putOrderEntities(where: { timestamp_gte: ${start}, timestamp_lte: ${end}}, first: ${pageSize}, skip: ${skip}) { + putOrder { + underlyingAsset + underlyingAmount + strikeAsset + strikeAmount + } + orderId + transactionHash + } + }` + const result = await client.request(query); + allData.putOrderEntities.push(...result.putOrderEntities as never[]); + skip += pageSize; + hasMore = result.putOrderEntities.length === pageSize; + } + return allData; +} +async function fetchOptionPremiums(client: GraphQLClient, start: number, end: number | null, pageSize: number = 100) { + let skip = 0; + let allData = { optionPremiums: [] }; + let hasMore = true; + while (hasMore) { + const query = gql` + { + optionPremiums(where: { timestamp_gte: ${start}, timestamp_lte: ${end}}, first: ${pageSize}, skip: ${skip}) { + amount + premiumAsset + orderID + transactionHash + } + } + `; + const result = await client.request(query); + allData.optionPremiums.push(...result.optionPremiums as never[]); + skip += pageSize; + hasMore = result.optionPremiums.length === pageSize; + } + return allData; +} + +export async function fetchSubgraphData() { + for (const mapping of price_id_mapping) { + mapping.price = await getUnderlyingAssetPrice(mapping.token); + } + const now = Math.floor(Date.now() / 1000); + const startOfDay = now - (now % 86400); + const [dailyCallData, totalCallData, dailyPutData, totalPutData, dailyPremiumData, totalPremiumData] = await Promise.all([ + fetchCallOrder(client, startOfDay, now), + fetchCallOrder(client, start, now), + fetchPutOrder(client, startOfDay, now), + fetchPutOrder(client, start, now), + fetchOptionPremiums(client, startOfDay, now), + fetchOptionPremiums(client, start, now) + ]); + const dailyNotionalVolume = await calculateNotionalVolume([...dailyCallData.callOrderEntities, ...dailyPutData.putOrderEntities]); + const dailyPremiumVolume = calculatePremiumVolume(dailyPremiumData.optionPremiums); + + const totalNotionalVolume = await calculateNotionalVolume([...totalCallData.callOrderEntities, ...totalPutData.putOrderEntities]); + const totalPremiumVolume = calculatePremiumVolume(totalPremiumData.optionPremiums); + + const transformedData = { + dailyNotionalVolume: dailyNotionalVolume, + dailyPremiumVolume: dailyPremiumVolume, + totalNotionalVolume: totalNotionalVolume, + totalPremiumVolume: totalPremiumVolume, + }; + + return transformedData; +} + +const start = 1715175000 + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetchSubgraphData, + runAtCurrTime: true, + start: start, + }, + } +} +export default adapter; diff --git a/options/jaspervault/pythpriceIds.ts b/options/jaspervault/pythpriceIds.ts new file mode 100644 index 0000000000..f970cddec2 --- /dev/null +++ b/options/jaspervault/pythpriceIds.ts @@ -0,0 +1,31 @@ + +export const price_id_mapping = [ + { + price_id: "c9d8b075a5c69303365ae23633d4e085199bf5c520a3b90fed1322a0342ffc33", + token: "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f", + price: 0, + decimals_pyth: 8, + decimals: 8 + }, + { + price_id: "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace", + token: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + price: 0, + decimals_pyth: 8, + decimals: 18 + }, + { + price_id: "2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b", + token: "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", + price: 0, + decimals_pyth: 8, + decimals: 6 + }, + { + price_id: "eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a", + token: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", + price: 0, + decimals_pyth: 8, + decimals: 6 + } +]; \ No newline at end of file From e7560e2ffc9b74bdfa2cc62a20b91d1553e7cdcd Mon Sep 17 00:00:00 2001 From: Dongminh1997 Date: Thu, 16 May 2024 23:57:23 +0700 Subject: [PATCH 0554/1590] Update Magpie Adapter with new data endpoint --- aggregators/magpie/index.ts | 94 +++++-------------------------------- 1 file changed, 13 insertions(+), 81 deletions(-) diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts index 86fcf5a245..fa409d15f5 100644 --- a/aggregators/magpie/index.ts +++ b/aggregators/magpie/index.ts @@ -1,92 +1,24 @@ -import fetchUrl from "../../utils/fetchURL" +import { postURL } from "../../utils/fetchURL"; import { ChainBlocks, FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types"; import { getTimestampAtStartOfDayUTC } from "../../utils/date" -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; -const chainsMap: Record = { - ETHEREUM: CHAIN.ETHEREUM, - ARBITRUM: CHAIN.ARBITRUM, - POLYGON: CHAIN.POLYGON, - AVALANCHE: CHAIN.AVAX, - BNB: CHAIN.BSC, - OPTIMISM: CHAIN.OPTIMISM, - BASE: CHAIN.BASE, -}; - -type IRequest = { - [key: string]: Promise; -} -const requests: IRequest = {} - - -export async function _fetchURL(url: string, retries: number = 10) { - if (!requests[url]) { - requests[url] = fetchUrl(url, retries) - } - return requests[url] -} - -export function getKey(chain: string) { - if (chain === 'ETHEREUM') { - return 'eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0' - } else if (chain === 'ARBITRUM') { - return 'B8GDtFV1J59aQxRfzjTKu3Dt0P9bdJsS' - } else if (chain === 'POLYGON') { - return 'rzB03yaeM47jvGV7gqWX1Uh4yDVeNyB0' - } else if (chain === 'AVALANCHE') { - return '1Bxivmv97g0sxui3guLRZJN3TCRPaTW2' - } else if (chain === 'BSC') { - return '86dsHrnyuMd3p2XRDfugc5UA0e6i91oc' - } else { - return 'eyZHAcPUFcAFvMk5sVysebYKeyrp9CK0' - } -} - const fetch = async (timestamp: number, _: ChainBlocks, {chain}: FetchOptions): Promise => { - const unixTimestamp1 = getTimestampAtStartOfDayUTC(timestamp) - const unixTimestamp2 = getTimestampAtStartOfDayUTC(getUniqStartOfTodayTimestamp()-1); - // console.log(chain, timestamp, unixTimestamp1, unixTimestamp2) - if (unixTimestamp1 < unixTimestamp2) { - console.log("Method 1") - const url = `https://script.google.com/macros/s/AKfycbxqWlzQQzpG-KVGVpVLPafPljYkXejEAJ7TpQc8iBaHuvvu5jx5BnRFYEfQu0pqK5j_-Q/exec?timestamp=${unixTimestamp1.toString()}` - const data = await _fetchURL(url, 10); - - const chainData = data.result.rows.find( - (row: any) => chainsMap[row.chain] === chain - ); - if (chainData === undefined ) { - return { - dailyVolume: 0, - timestamp: unixTimestamp1, - }; - } else { + const unixTimestamp= getTimestampAtStartOfDayUTC(timestamp) + console.log(chain, unixTimestamp) + const data = await postURL(`https://nj4rp6s90f.execute-api.us-west-1.amazonaws.com/v1/llama`, {timestamp: unixTimestamp, chain:chain}, 10); + const chainData = data.result + if (chainData === undefined ) { return { - dailyVolume: chainData.dailyVolume, - timestamp: unixTimestamp1, + dailyVolume: 0, + timestamp: unixTimestamp, }; - } } else { - console.log("Method 2") - const api_key = getKey(chain) - const url = `https://api.dune.com/api/v1/query/3587739/results?api_key=${api_key}` - const data = await _fetchURL(url, 10); - // console.log(data.result) - const chainData = data.result.rows.find( - (row: any) => chainsMap[row.chain] === chain && parseInt(row.timestamp) == parseInt(unixTimestamp1.toString()) - ); - if (chainData === undefined ) { - return { - dailyVolume: 0, - timestamp: unixTimestamp1, - }; - } else { - return { - dailyVolume: chainData.dailyVolume, - timestamp: unixTimestamp1, - }; - } - } + return { + dailyVolume: chainData.dailyVolume, + timestamp: unixTimestamp, + }; + } }; const adapter: SimpleAdapter = { From 1d4870266a3ee3e8654304d12c88c4f9c826edf8 Mon Sep 17 00:00:00 2001 From: Chimpy Developer <86309030+chimpydev@users.noreply.github.com> Date: Thu, 16 May 2024 18:05:10 +0100 Subject: [PATCH 0555/1590] UPDATE SWAPBASED V3 - Update to new v3 subgraph endpoint fetching volume --- dexs/swapbased/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/swapbased/index.ts b/dexs/swapbased/index.ts index 189458f6fd..58fddaa849 100644 --- a/dexs/swapbased/index.ts +++ b/dexs/swapbased/index.ts @@ -44,7 +44,7 @@ const graphs = getGraphDimensions({ const endpointsV3 = { [CHAIN.BASE]: - "https://api.thegraph.com/subgraphs/name/chimpydev/swapbased-algebra-core", + "https://api.studio.thegraph.com/query/67101/swapbased-pcsv3-core/version/latest", }; const graphsV3 = getChainVolume({ graphUrls: endpointsV3, @@ -53,7 +53,7 @@ const graphsV3 = getChainVolume({ field: "totalVolumeUSD", }, dailyVolume: { - factory: "algebraDayData", + factory: "pancakeDayData", field: "volumeUSD", dateField: "date", }, From ba57eda858f1c672966baac021bc7d6d96119921 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 May 2024 14:34:49 +0530 Subject: [PATCH 0556/1590] revenue for flash.trade --- fees/flashtrade.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 fees/flashtrade.ts diff --git a/fees/flashtrade.ts b/fees/flashtrade.ts new file mode 100644 index 0000000000..5b8c883a3d --- /dev/null +++ b/fees/flashtrade.ts @@ -0,0 +1,45 @@ +import { Adapter, FetchResultFees } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import fetchURL from "../utils/fetchURL"; + +interface Pool { + pool: string; + accured: string; + paid: string; +} + + +const methodology = { + ProtocolReveneue: 'Sum of all fees accrued from LP pools.' +} + +const urlTotalStats = "https://api.prod.flash.trade/market-stat/revenue-all-time"; +const urlDailyStats = "https://api.prod.flash.trade/market-stat/revenue-24hr"; + +const fetchFlashStats = async (timestamp: number): Promise => { + const totalStats:Pool[] = (await fetchURL(urlTotalStats)); + const dailyStats:Pool[] = (await fetchURL(urlDailyStats)); + const dailyAccured = dailyStats.reduce((sum, item) => sum + parseFloat(item.accured), 0); + const totalAccured = totalStats.reduce((sum, item) => sum + parseFloat(item.accured), 0); + return { + timestamp, + dailyProtocolRevenue: dailyAccured.toString(), + totalProtocolRevenue: totalAccured.toString(), + }; + }; + + const adapter: Adapter = { + adapter: { + [CHAIN.SOLANA]: { + runAtCurrTime: true, + customBackfill: undefined, + fetch: fetchFlashStats, + start: 0, + meta: { + methodology, + }, + }, + }, + }; + + export default adapter; \ No newline at end of file From 780e6f08c05a800d3277049a4629217d7cfcdf08 Mon Sep 17 00:00:00 2001 From: lil-il <> Date: Fri, 17 May 2024 12:56:58 +0300 Subject: [PATCH 0557/1590] updated api --- aggregator-derivatives/vooi/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aggregator-derivatives/vooi/index.ts b/aggregator-derivatives/vooi/index.ts index 5c85032e72..509cce4023 100644 --- a/aggregator-derivatives/vooi/index.ts +++ b/aggregator-derivatives/vooi/index.ts @@ -2,8 +2,8 @@ import fetchURL from "../../utils/fetchURL"; import { FetchResult, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const URL = "https://app.vooi.io/"; -const endpoint = "api/defilama-stats"; +const URL = "https://defilama-stats.vooi.workers.dev/"; +const endpoint = ""; const startTimestamp = 1714608000; // 02.05.2024 From 888e730968eab8547c2d2c8446ef16bb3a9cea11 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 17 May 2024 13:23:12 +0000 Subject: [PATCH 0558/1590] fix query --- fees/jito.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/fees/jito.ts b/fees/jito.ts index a7371d9193..411a05388f 100644 --- a/fees/jito.ts +++ b/fees/jito.ts @@ -3,15 +3,14 @@ import { FetchOptions, SimpleAdapter } from "../adapters/types" import { CHAIN } from "../helpers/chains" import { queryDune } from "../helpers/dune" -const fetchFees = async (options: FetchOptions) => { +const fetchFees = async (_t: any, _a: any, options: FetchOptions) => { const dailyFees = options.createBalances() const dailyRevenue = options.createBalances() - const result = await queryDune("3733728", { - start: options.startTimestamp, - end: options.endTimestamp, - }); - dailyFees.add('So11111111111111111111111111111111111111112', result[0].sol_tip * 1e9) - dailyRevenue.add('So11111111111111111111111111111111111111112', result[0].sol_tip * 1e9) + const result = await queryDune("3740661"); + const dateStr = new Date(options.startOfDay * 1000).toISOString().split('T')[0] + const day = result.find((r: any) => r.day === dateStr) + dailyFees.add('So11111111111111111111111111111111111111112', day.sol_tip * 1e9) + dailyRevenue.add('So11111111111111111111111111111111111111112', day.sol_tip * 1e9) dailyRevenue.resizeBy(0.04) return { @@ -22,7 +21,7 @@ const fetchFees = async (options: FetchOptions) => { } const adapter: SimpleAdapter = { - version: 2, + version: 1, adapter: { [CHAIN.SOLANA]: { fetch: fetchFees, From 6e9d3dbbe5bf3b599ecede6928467b47362d78e8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 17 May 2024 13:59:19 +0000 Subject: [PATCH 0559/1590] fix timestamp --- fees/gmx.ts | 60 +++++++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 32 deletions(-) diff --git a/fees/gmx.ts b/fees/gmx.ts index 736998eb0e..0ece74762c 100644 --- a/fees/gmx.ts +++ b/fees/gmx.ts @@ -4,7 +4,7 @@ import { request, gql } from "graphql-request"; import type { ChainEndpoints, FetchV2 } from "../adapters/types" import { getTimestampAtStartOfDayUTC } from "../utils/date"; -const endpoints = { +const endpoints: any = { [ARBITRUM]: "https://subgraph.satsuma-prod.com/3b2ced13c8d9/gmx/gmx-arbitrum-stats/api", [AVAX]: "https://subgraph.satsuma-prod.com/3b2ced13c8d9/gmx/gmx-avalanche-stats/api" } @@ -18,39 +18,35 @@ const methodology = { ProtocolRevenue: "Treasury has no revenue" } -const graphs = (graphUrls: ChainEndpoints) => { - const fetch: FetchV2 = async ({ chain, startTimestamp }) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(startTimestamp) - const searchTimestamp = chain == "arbitrum" ? todaysTimestamp : todaysTimestamp + ":daily" +const graphs: FetchV2 = async ({ chain, endTimestamp }) => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(endTimestamp) + const searchTimestamp = chain == "arbitrum" ? todaysTimestamp : todaysTimestamp + ":daily" - const graphQuery = gql - `{ - feeStat(id: "${searchTimestamp}") { - mint - burn - marginAndLiquidation - swap - } - }`; - - const graphRes = await request(graphUrls[chain], graphQuery); + const graphQuery = gql + `{ + feeStat(id: "${searchTimestamp}") { + mint + burn + marginAndLiquidation + swap + } + }`; - const dailyFee = parseInt(graphRes.feeStat.mint) + parseInt(graphRes.feeStat.burn) + parseInt(graphRes.feeStat.marginAndLiquidation) + parseInt(graphRes.feeStat.swap) - const finalDailyFee = (dailyFee / 1e30); - const userFee = parseInt(graphRes.feeStat.marginAndLiquidation) + parseInt(graphRes.feeStat.swap) - const finalUserFee = (userFee / 1e30); + const graphRes = await request(endpoints[chain], graphQuery); + const dailyFee = parseInt(graphRes.feeStat.mint) + parseInt(graphRes.feeStat.burn) + parseInt(graphRes.feeStat.marginAndLiquidation) + parseInt(graphRes.feeStat.swap) + const finalDailyFee = (dailyFee / 1e30); + const userFee = parseInt(graphRes.feeStat.marginAndLiquidation) + parseInt(graphRes.feeStat.swap) + const finalUserFee = (userFee / 1e30); - return { - dailyFees: finalDailyFee.toString(), - dailyUserFees: finalUserFee.toString(), - dailyRevenue: (finalDailyFee * 0.3).toString(), - dailyProtocolRevenue: "0", - totalProtocolRevenue: "0", - dailyHoldersRevenue: (finalDailyFee * 0.3).toString(), - dailySupplySideRevenue: (finalDailyFee * 0.7).toString(), - }; + return { + dailyFees: finalDailyFee.toString(), + dailyUserFees: finalUserFee.toString(), + dailyRevenue: (finalDailyFee * 0.3).toString(), + dailyProtocolRevenue: "0", + totalProtocolRevenue: "0", + dailyHoldersRevenue: (finalDailyFee * 0.3).toString(), + dailySupplySideRevenue: (finalDailyFee * 0.7).toString(), }; - return fetch }; @@ -58,14 +54,14 @@ const adapter: Adapter = { version: 2, adapter: { [ARBITRUM]: { - fetch: graphs(endpoints), + fetch: graphs, start: 1630468800, meta: { methodology } }, [AVAX]: { - fetch: graphs(endpoints), + fetch: graphs, start: 1641445200, meta: { methodology From 08670a323da54f1a1f0b16d396c07361e5ae0f2a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 17 May 2024 14:24:21 +0000 Subject: [PATCH 0560/1590] enable run current --- dexs/ociswap/index.ts | 9 +++++---- fees/ociswap.ts | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/dexs/ociswap/index.ts b/dexs/ociswap/index.ts index 0cd086c352..bf8b1ac35f 100644 --- a/dexs/ociswap/index.ts +++ b/dexs/ociswap/index.ts @@ -40,16 +40,17 @@ const adapters: BreakdownAdapter = { [CHAIN.RADIXDLT]: { fetch: fetchVolume('basic'), start: 1696118400, - // runAtCurrTime: true + runAtCurrTime: true } }, precision: { [CHAIN.RADIXDLT]: { fetch: fetchVolume('precision'), start: 1696118400, - // runAtCurrTime: true + runAtCurrTime: true } } - } + }, + isExpensiveAdapter: true } -export default adapters; \ No newline at end of file +export default adapters; diff --git a/fees/ociswap.ts b/fees/ociswap.ts index f853ff715a..74d0019feb 100644 --- a/fees/ociswap.ts +++ b/fees/ociswap.ts @@ -40,16 +40,17 @@ const adapters: BreakdownAdapter = { [CHAIN.RADIXDLT]: { fetch: fetchFees('basic'), start: 1696118400, - // runAtCurrTime: true + runAtCurrTime: true } }, precision: { [CHAIN.RADIXDLT]: { fetch: fetchFees('precision'), start: 1696118400, - // runAtCurrTime: true + runAtCurrTime: true } } - } + }, + isExpensiveAdapter: true } -export default adapters; \ No newline at end of file +export default adapters; From d23a7df6032664096d562e7731fb0f74239e99bb Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 17 May 2024 14:24:55 +0000 Subject: [PATCH 0561/1590] Revert "enable run current" This reverts commit 08670a323da54f1a1f0b16d396c07361e5ae0f2a. --- dexs/ociswap/index.ts | 9 ++++----- fees/ociswap.ts | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/dexs/ociswap/index.ts b/dexs/ociswap/index.ts index bf8b1ac35f..0cd086c352 100644 --- a/dexs/ociswap/index.ts +++ b/dexs/ociswap/index.ts @@ -40,17 +40,16 @@ const adapters: BreakdownAdapter = { [CHAIN.RADIXDLT]: { fetch: fetchVolume('basic'), start: 1696118400, - runAtCurrTime: true + // runAtCurrTime: true } }, precision: { [CHAIN.RADIXDLT]: { fetch: fetchVolume('precision'), start: 1696118400, - runAtCurrTime: true + // runAtCurrTime: true } } - }, - isExpensiveAdapter: true + } } -export default adapters; +export default adapters; \ No newline at end of file diff --git a/fees/ociswap.ts b/fees/ociswap.ts index 74d0019feb..f853ff715a 100644 --- a/fees/ociswap.ts +++ b/fees/ociswap.ts @@ -40,17 +40,16 @@ const adapters: BreakdownAdapter = { [CHAIN.RADIXDLT]: { fetch: fetchFees('basic'), start: 1696118400, - runAtCurrTime: true + // runAtCurrTime: true } }, precision: { [CHAIN.RADIXDLT]: { fetch: fetchFees('precision'), start: 1696118400, - runAtCurrTime: true + // runAtCurrTime: true } } - }, - isExpensiveAdapter: true + } } -export default adapters; +export default adapters; \ No newline at end of file From 78c1f1e0353aa969daa3acd40f7ae8ea8a7480fc Mon Sep 17 00:00:00 2001 From: vrtnd Date: Fri, 17 May 2024 20:05:33 +0300 Subject: [PATCH 0562/1590] fix zrx adapter --- aggregators/zrx/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aggregators/zrx/index.ts b/aggregators/zrx/index.ts index c2bbcd0575..12e6218877 100644 --- a/aggregators/zrx/index.ts +++ b/aggregators/zrx/index.ts @@ -59,7 +59,7 @@ const fetch = async (options: FetchOptions) => { timestamp.split("T")[0] === strDate ); return { - dailyVolume: dayData.volumeUSD, + dailyVolume: dayData?.volumeUSD, timestamp: unixTimestamp, }; } catch (e) { @@ -79,7 +79,7 @@ const adapter: any = { ...acc, [chain]: { fetch: fetch, - start: 0, + start: 1652745600, }, }; }, {}), From ca9fec9a50d09d91a76709fb59788813324d5af4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 17 May 2024 17:14:44 +0000 Subject: [PATCH 0563/1590] op running --- fees/fluid/index.ts | 4 ++-- fees/orby-network.ts | 8 ++++++-- fees/synapse/index.ts | 12 +++++++++++- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index 9cc628550b..40418542be 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -58,9 +58,9 @@ 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, dataStartTimestamp, toTimestamp), dailyFees: await getFeesFromTo(api, fromTimestamp, toTimestamp), - totalRevenue: await getRevenueFromTo(api, dataStartTimestamp, toTimestamp), + // totalRevenue: await getRevenueFromTo(api, dataStartTimestamp, toTimestamp), dailyRevenue: await getRevenueFromTo(api, fromTimestamp, toTimestamp), }; }; diff --git a/fees/orby-network.ts b/fees/orby-network.ts index 9222d21ed5..07a949bbcd 100644 --- a/fees/orby-network.ts +++ b/fees/orby-network.ts @@ -30,10 +30,14 @@ const graphs = (graphUrls: ChainEndpoints) => { } } `; + const [startBlock, endBlock] = await Promise.all([ + getStartBlock(), + getEndBlock(), + ]); const graphRes = await request(graphUrls[chain], graphQuery, { - startOfDayBlock: await getStartBlock(), - endOfDayBlock: (await getEndBlock()) - 2, + startOfDayBlock: startBlock, + endOfDayBlock: endBlock - 2, }); const borrowingFees = diff --git a/fees/synapse/index.ts b/fees/synapse/index.ts index 3c23e7b1d1..5c4561b88a 100644 --- a/fees/synapse/index.ts +++ b/fees/synapse/index.ts @@ -63,10 +63,20 @@ const query = ` }` +type IRequest = { + [key: string]: Promise; +} +const requests: IRequest = {} + +export async function fetchrequest(url: string, query: string) { + if (!requests[url]) + requests[url] = request(url, query) + return requests[url] +} const graphs = (chain: Chain) => { return async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const historical: IHistory[] = (await request(url, query)).dailyStatisticsByChain; + const historical: IHistory[] = (await fetchrequest(url, query)).dailyStatisticsByChain; // const historical: IHistory[] = require('./historical.json'); const historicalVolume = historical const date = new Date(timestamp * 1000); From 541b57b5f10b619a95bdedd9fefe94d6d1f6ac6c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 May 2024 19:17:33 +0200 Subject: [PATCH 0564/1590] code refactor --- options/jaspervault/index.ts | 103 ++++++++-------------------- options/jaspervault/pythpriceIds.ts | 31 --------- 2 files changed, 28 insertions(+), 106 deletions(-) delete mode 100644 options/jaspervault/pythpriceIds.ts diff --git a/options/jaspervault/index.ts b/options/jaspervault/index.ts index 30d1be117e..fcf2da2fad 100644 --- a/options/jaspervault/index.ts +++ b/options/jaspervault/index.ts @@ -1,77 +1,31 @@ -import { Adapter, FetchV2 } from "../../adapters/types"; +import { Adapter, FetchOptions, } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { GraphQLClient, gql } from 'graphql-request'; -import { price_id_mapping } from './pythpriceIds'; -import BigNumber from "bignumber.js"; +import { Balances } from "@defillama/sdk"; const subgraphEndpoint = "https://gateway-arbitrum.network.thegraph.com/api/7ca317c1d6347234f75513585a71157c/deployments/id/QmQF8cZUUb3hEVfuNBdGAQPBmvRioLsqyxHZbRRgk1zpVV" const client = new GraphQLClient(subgraphEndpoint); -async function getUnderlyingAssetPrice(underlyingAsset: string) { - const hermesApiEndpoint = "https://hermes.pyth.network" - const mapping = price_id_mapping.find(m => m.token.toLowerCase() == underlyingAsset.toLowerCase()); - if (!mapping) { - console.error(`No price ID found for underlying asset: ${underlyingAsset}`) - return 0; - } - else if (mapping.price == 0) { - try { - const response = await fetch(`${hermesApiEndpoint}/v2/updates/price/latest?ids[]=${mapping.price_id}`); - const data = await response.json(); - return data.parsed[0].price.price; - } - catch (error) { - console.error(error) - return 0; - } - } - else { - return mapping.price; - } -} - -async function calculateNotionalVolume(orders: any[]) { - let notionalVolume = new BigNumber(0) +async function calculateNotionalVolume(balances: Balances, orders: any[]) { for (const order of orders) { - let price = 0; - let price_bignumber = new BigNumber(0); let orderDetails = order.callOrder || order.putOrder; if (!orderDetails) { console.error("No order details found"); continue; } - let tokenInfo_underlying = price_id_mapping.find(m => m.token.toLowerCase() == orderDetails.underlyingAsset.toLowerCase()); - if (tokenInfo_underlying) { - price = await getUnderlyingAssetPrice(orderDetails.underlyingAsset); - if (order.callOrder) { - let tokenInfo_strike = price_id_mapping.find(m => m.token.toLowerCase() == orderDetails.strikeAsset.toLowerCase()); - if (tokenInfo_strike) { - notionalVolume = notionalVolume.plus(new BigNumber(orderDetails.strikeAmount).dividedBy(10 ** tokenInfo_strike.decimals)) - order.notionalVolume = new BigNumber(orderDetails.strikeAmount).dividedBy(10 ** tokenInfo_strike.decimals).toFixed(2) - } - } - else if (order.putOrder) { - price_bignumber = new BigNumber(price).dividedBy(10 ** tokenInfo_underlying.decimals_pyth) - let underlyingAmount_bignumber = new BigNumber(orderDetails.underlyingAmount).dividedBy(10 ** tokenInfo_underlying.decimals) - notionalVolume = notionalVolume.plus(price_bignumber.multipliedBy(underlyingAmount_bignumber)) - order.notionalVolume = price_bignumber.multipliedBy(underlyingAmount_bignumber).toFixed(2) - } + if (order.callOrder) { + balances.add(orderDetails.strikeAsset, orderDetails.strikeAmount) + } + else if (order.putOrder) { + balances.add(orderDetails.underlyingAsset, orderDetails.underlyingAmount) } } - return notionalVolume.toFixed(2); } -function calculatePremiumVolume(optionPremiums: any[]) { - let premiumVolume = new BigNumber(0) - for (const premium of optionPremiums) { - let tokenInfo = price_id_mapping.find(m => m.token.toLowerCase() == premium.premiumAsset.toLowerCase()); - if (tokenInfo) { - let primium_bigNumber = new BigNumber(premium.amount).dividedBy(10 ** tokenInfo.decimals) - premiumVolume = premiumVolume.plus(primium_bigNumber); - } - } - return premiumVolume.toFixed(2); +function calculatePremiumVolume(balances: Balances, optionPremiums: any[]) { + for (const premium of optionPremiums) + balances.add(premium.premiumAsset, premium.amount) } async function fetchCallOrder(client: GraphQLClient, start: number, end: number | null, pageSize: number = 100) { @@ -148,12 +102,9 @@ async function fetchOptionPremiums(client: GraphQLClient, start: number, end: nu return allData; } -export async function fetchSubgraphData() { - for (const mapping of price_id_mapping) { - mapping.price = await getUnderlyingAssetPrice(mapping.token); - } - const now = Math.floor(Date.now() / 1000); - const startOfDay = now - (now % 86400); +export async function fetchSubgraphData({ createBalances, startTimestamp, endTimestamp, }: FetchOptions) { + const now = endTimestamp; + const startOfDay = startTimestamp; const [dailyCallData, totalCallData, dailyPutData, totalPutData, dailyPremiumData, totalPremiumData] = await Promise.all([ fetchCallOrder(client, startOfDay, now), fetchCallOrder(client, start, now), @@ -162,20 +113,22 @@ export async function fetchSubgraphData() { fetchOptionPremiums(client, startOfDay, now), fetchOptionPremiums(client, start, now) ]); - const dailyNotionalVolume = await calculateNotionalVolume([...dailyCallData.callOrderEntities, ...dailyPutData.putOrderEntities]); - const dailyPremiumVolume = calculatePremiumVolume(dailyPremiumData.optionPremiums); + const dailyNotionalVolume = createBalances() + const dailyPremiumVolume = createBalances() + const totalNotionalVolume = createBalances() + const totalPremiumVolume = createBalances() - const totalNotionalVolume = await calculateNotionalVolume([...totalCallData.callOrderEntities, ...totalPutData.putOrderEntities]); - const totalPremiumVolume = calculatePremiumVolume(totalPremiumData.optionPremiums); + calculateNotionalVolume(dailyNotionalVolume, [...dailyCallData.callOrderEntities, ...dailyPutData.putOrderEntities]); + calculateNotionalVolume(totalNotionalVolume, [...totalCallData.callOrderEntities, ...totalPutData.putOrderEntities]); + calculatePremiumVolume(dailyPremiumVolume, dailyPremiumData.optionPremiums); + calculatePremiumVolume(totalPremiumVolume, totalPremiumData.optionPremiums); - const transformedData = { - dailyNotionalVolume: dailyNotionalVolume, - dailyPremiumVolume: dailyPremiumVolume, - totalNotionalVolume: totalNotionalVolume, - totalPremiumVolume: totalPremiumVolume, - }; - - return transformedData; + return { + dailyNotionalVolume, + dailyPremiumVolume, + totalNotionalVolume, + totalPremiumVolume, + } } const start = 1715175000 diff --git a/options/jaspervault/pythpriceIds.ts b/options/jaspervault/pythpriceIds.ts deleted file mode 100644 index f970cddec2..0000000000 --- a/options/jaspervault/pythpriceIds.ts +++ /dev/null @@ -1,31 +0,0 @@ - -export const price_id_mapping = [ - { - price_id: "c9d8b075a5c69303365ae23633d4e085199bf5c520a3b90fed1322a0342ffc33", - token: "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f", - price: 0, - decimals_pyth: 8, - decimals: 8 - }, - { - price_id: "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace", - token: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - price: 0, - decimals_pyth: 8, - decimals: 18 - }, - { - price_id: "2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b", - token: "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", - price: 0, - decimals_pyth: 8, - decimals: 6 - }, - { - price_id: "eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a", - token: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", - price: 0, - decimals_pyth: 8, - decimals: 6 - } -]; \ No newline at end of file From 4961ba1dd61c89c32ed536f50ecafb8122f02663 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 17 May 2024 20:36:01 +0200 Subject: [PATCH 0565/1590] skip tpv & tnv --- options/jaspervault/index.ts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/options/jaspervault/index.ts b/options/jaspervault/index.ts index fcf2da2fad..e9bed9dfb3 100644 --- a/options/jaspervault/index.ts +++ b/options/jaspervault/index.ts @@ -6,6 +6,8 @@ import { Balances } from "@defillama/sdk"; const subgraphEndpoint = "https://gateway-arbitrum.network.thegraph.com/api/7ca317c1d6347234f75513585a71157c/deployments/id/QmQF8cZUUb3hEVfuNBdGAQPBmvRioLsqyxHZbRRgk1zpVV" const client = new GraphQLClient(subgraphEndpoint); + +// event logs can be found here: https://github.com/DefiLlama/dimension-adapters/pull/1492#issuecomment-2118112517 async function calculateNotionalVolume(balances: Balances, orders: any[]) { for (const order of orders) { let orderDetails = order.callOrder || order.putOrder; @@ -24,7 +26,7 @@ async function calculateNotionalVolume(balances: Balances, orders: any[]) { } function calculatePremiumVolume(balances: Balances, optionPremiums: any[]) { - for (const premium of optionPremiums) + for (const premium of optionPremiums) balances.add(premium.premiumAsset, premium.amount) } @@ -105,29 +107,32 @@ async function fetchOptionPremiums(client: GraphQLClient, start: number, end: nu export async function fetchSubgraphData({ createBalances, startTimestamp, endTimestamp, }: FetchOptions) { const now = endTimestamp; const startOfDay = startTimestamp; - const [dailyCallData, totalCallData, dailyPutData, totalPutData, dailyPremiumData, totalPremiumData] = await Promise.all([ + const [ + dailyCallData, dailyPutData, dailyPremiumData, + // totalCallData, totalPutData, totalPremiumData + ] = await Promise.all([ fetchCallOrder(client, startOfDay, now), - fetchCallOrder(client, start, now), fetchPutOrder(client, startOfDay, now), - fetchPutOrder(client, start, now), fetchOptionPremiums(client, startOfDay, now), - fetchOptionPremiums(client, start, now) + // fetchCallOrder(client, start, now), + // fetchPutOrder(client, start, now), + // fetchOptionPremiums(client, start, now) ]); const dailyNotionalVolume = createBalances() const dailyPremiumVolume = createBalances() - const totalNotionalVolume = createBalances() - const totalPremiumVolume = createBalances() + // const totalNotionalVolume = createBalances() + // const totalPremiumVolume = createBalances() calculateNotionalVolume(dailyNotionalVolume, [...dailyCallData.callOrderEntities, ...dailyPutData.putOrderEntities]); - calculateNotionalVolume(totalNotionalVolume, [...totalCallData.callOrderEntities, ...totalPutData.putOrderEntities]); calculatePremiumVolume(dailyPremiumVolume, dailyPremiumData.optionPremiums); - calculatePremiumVolume(totalPremiumVolume, totalPremiumData.optionPremiums); + // calculateNotionalVolume(totalNotionalVolume, [...totalCallData.callOrderEntities, ...totalPutData.putOrderEntities]); + // calculatePremiumVolume(totalPremiumVolume, totalPremiumData.optionPremiums); return { dailyNotionalVolume, dailyPremiumVolume, - totalNotionalVolume, - totalPremiumVolume, + // totalNotionalVolume, + // totalPremiumVolume, } } From 28b1685a390439120e3db4ee51587368b17ead35 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 18 May 2024 01:13:08 +0000 Subject: [PATCH 0566/1590] set timeoiut --- dexs/swaap/index.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/dexs/swaap/index.ts b/dexs/swaap/index.ts index ceb359ef25..037a480ff3 100644 --- a/dexs/swaap/index.ts +++ b/dexs/swaap/index.ts @@ -2,7 +2,6 @@ import { BreakdownAdapter, FetchOptions, FetchResultV2 } from "../../adapters/ty import { CHAIN } from "../../helpers/chains"; import { gql, GraphQLClient } from "graphql-request"; import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; -import customBackfill from "../../helpers/customBackfill"; interface ChainConfig{ api: string, @@ -64,7 +63,7 @@ const getVolume = async (options: FetchOptions) => { } ` const url = config[options.chain].api - const graphQLClient = new GraphQLClient(url); + const graphQLClient = new GraphQLClient(url, { timeout: 3000 }); const result: Data = await graphQLClient.request(query) const dailyVolume = Number(result.end?.totalSwapVolume || 0) - Number(result.start?.totalSwapVolume || 0) const totalVolume = Number(result.end?.totalSwapVolume || 0) @@ -94,7 +93,7 @@ const v1graphs = getChainVolume({ graphUrls: { [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/swaap-labs/swaapv1" }, - ...graphParams + ...graphParams, }); const adapter: BreakdownAdapter = { @@ -103,8 +102,7 @@ const adapter: BreakdownAdapter = { v1: { [CHAIN.POLYGON]: { fetch: v1graphs(CHAIN.POLYGON), - start: 1655195452, - customBackfill: customBackfill(CHAIN.POLYGON, v1graphs) + start: 1655195452 }, }, v2: { From d2f0efe20e4eb4fb6a447ea7df33bcd98736ceb4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 18 May 2024 03:13:46 +0000 Subject: [PATCH 0567/1590] disable run current --- options/jaspervault/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/options/jaspervault/index.ts b/options/jaspervault/index.ts index e9bed9dfb3..e341fce510 100644 --- a/options/jaspervault/index.ts +++ b/options/jaspervault/index.ts @@ -143,7 +143,6 @@ const adapter: Adapter = { adapter: { [CHAIN.ARBITRUM]: { fetch: fetchSubgraphData, - runAtCurrTime: true, start: start, }, } From 91f09ce6eab75df2ab796a6081562fc290b37663 Mon Sep 17 00:00:00 2001 From: Gary Leung Date: Sun, 19 May 2024 01:27:39 +0800 Subject: [PATCH 0568/1590] Corrected notionalValue calculation in call orders --- options/jaspervault/index.ts | 58 ++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/options/jaspervault/index.ts b/options/jaspervault/index.ts index e341fce510..ffa42ba6a2 100644 --- a/options/jaspervault/index.ts +++ b/options/jaspervault/index.ts @@ -2,22 +2,62 @@ import { Adapter, FetchOptions, } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { GraphQLClient, gql } from 'graphql-request'; import { Balances } from "@defillama/sdk"; - +import { Chain } from "@defillama/sdk/build/general"; +import BigNumber from "bignumber.js"; +import ADDRESSES from '../../helpers/coreAssets.json' +type TokenContracts = { + [key in Chain]: string[][]; +}; +const contracts: TokenContracts = { + [CHAIN.ARBITRUM]: [ + [ADDRESSES.arbitrum.WETH], + [ADDRESSES.arbitrum.WBTC], + [ADDRESSES.arbitrum.USDC], + [ADDRESSES.arbitrum.USDT], + ], +} +let tokenDecimals = {} const subgraphEndpoint = "https://gateway-arbitrum.network.thegraph.com/api/7ca317c1d6347234f75513585a71157c/deployments/id/QmQF8cZUUb3hEVfuNBdGAQPBmvRioLsqyxHZbRRgk1zpVV" const client = new GraphQLClient(subgraphEndpoint); - +function getDecimals(token_address: string) { + let decimalPlaces = 0; + if (token_address == "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") { + decimalPlaces = 18 + } + else { + if (tokenDecimals[token_address.toLowerCase()] != undefined) { + decimalPlaces = tokenDecimals[token_address.toLowerCase()] + } + else { + return 0; + } + } + return decimalPlaces; +} // event logs can be found here: https://github.com/DefiLlama/dimension-adapters/pull/1492#issuecomment-2118112517 -async function calculateNotionalVolume(balances: Balances, orders: any[]) { +function calculateNotionalVolume(balances: Balances, orders: any[]) { for (const order of orders) { let orderDetails = order.callOrder || order.putOrder; - if (!orderDetails) { console.error("No order details found"); continue; } if (order.callOrder) { - balances.add(orderDetails.strikeAsset, orderDetails.strikeAmount) + let decimals_strikeAsset: number = getDecimals(orderDetails.strikeAsset); + if (decimals_strikeAsset == 0) { + console.error("No decimals data found for strikeAsset"); + continue; + } + let decimals_underlyingAsset = getDecimals(orderDetails.underlyingAsset); + if (decimals_underlyingAsset == 0) { + console.error("No decimals data found for underlyingAsset"); + continue; + } + let notionalValue = new BigNumber(orderDetails.strikeAmount).dividedBy(new BigNumber(10).pow(decimals_strikeAsset)).multipliedBy(new BigNumber(orderDetails.underlyingAmount).dividedBy(new BigNumber(10).pow(decimals_underlyingAsset))) + notionalValue = notionalValue.decimalPlaces(Number(decimals_strikeAsset)).multipliedBy(new BigNumber(10).pow(decimals_strikeAsset)); + balances.add(orderDetails.strikeAsset, notionalValue); + //console.log(`notionalValue:${notionalValue} strikeAsset: ${orderDetails.strikeAsset}, strikeAmount : ${orderDetails.strikeAmount} underlyingAmount:${orderDetails.underlyingAmount},orderId: ${order.orderId} ,transactionHash: ${order.transactionHash} `) } else if (order.putOrder) { balances.add(orderDetails.underlyingAsset, orderDetails.underlyingAmount) @@ -104,9 +144,15 @@ async function fetchOptionPremiums(client: GraphQLClient, start: number, end: nu return allData; } -export async function fetchSubgraphData({ createBalances, startTimestamp, endTimestamp, }: FetchOptions) { +export async function fetchSubgraphData({ createBalances, startTimestamp, endTimestamp, chain, api }: FetchOptions) { const now = endTimestamp; const startOfDay = startTimestamp; + const tokens = contracts[chain].map(i => i[0]); + const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: tokens }) + tokenDecimals = tokens.reduce((obj, token, index) => { + obj[token] = decimals[index]; + return obj; + }, {}); const [ dailyCallData, dailyPutData, dailyPremiumData, // totalCallData, totalPutData, totalPremiumData From eeb73253a9346e78df2d51a75e9e55d1b4d2bb34 Mon Sep 17 00:00:00 2001 From: Halberd <146163939+halberd01@users.noreply.github.com> Date: Sun, 19 May 2024 23:00:25 +0800 Subject: [PATCH 0569/1590] add rollie-finance --- dexs/rollie-finance/index.ts | 63 ++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 dexs/rollie-finance/index.ts diff --git a/dexs/rollie-finance/index.ts b/dexs/rollie-finance/index.ts new file mode 100644 index 0000000000..f818c086db --- /dev/null +++ b/dexs/rollie-finance/index.ts @@ -0,0 +1,63 @@ +import request, { gql } from 'graphql-request'; +import {FetchOptions, FetchResultV2, FetchV2, SimpleAdapter} from '../../adapters/types'; +import { CHAIN } from '../../helpers/chains'; +import { + getUniqStartOfTodayTimestamp, +} from '../../helpers/getUniSubgraphVolume'; + +const ENDPOINTS: { [key: string]: string } = { + [CHAIN.SCROLL]: 'https://api.studio.thegraph.com/query/54326/rollie-beta/0.0.1', +}; +const USDC_DECIMALS: { [key: string]: number } = { + [CHAIN.SCROLL]: 6, +}; + +const getVolume = gql` + query get_volume($id: String!) { + market(id: "1") { + id + tradeVolume + marketDayDatas(where: {id: $id}) { + id + tradeVolume + } + } + } +`; + + +const getFetch = (chain: string): FetchV2 => async (options: FetchOptions): Promise => { + const { startTimestamp} = options; + const dayTimestamp = getUniqStartOfTodayTimestamp( + new Date(startTimestamp * 1000) + ); + const dayIndex = Math.floor(dayTimestamp / 86400); + const { market: response } = await request(ENDPOINTS[chain], + getVolume, { + id: String(dayIndex), + }); + + return { + timestamp: getUniqStartOfTodayTimestamp(new Date(dayTimestamp)), + dailyVolume: + response.marketDayDatas.length === 1 + ? (BigInt(response.marketDayDatas[0].tradeVolume) / + BigInt(10 ** USDC_DECIMALS[chain])).toString() + : undefined, + totalVolume: (BigInt(response.tradeVolume) / + BigInt(10 ** USDC_DECIMALS[chain])).toString(), + + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.SCROLL]: { + fetch: getFetch(CHAIN.SCROLL), + start: 5423335, + }, + }, +}; + +export default adapter; From 61b6f6a66d25d2ee91d1cf4cafc9c84f1a44c3e7 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 19 May 2024 15:08:09 +0000 Subject: [PATCH 0570/1590] move to under dexs agg --- {aggregator-derivatives => aggregators}/vooi/index.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {aggregator-derivatives => aggregators}/vooi/index.ts (100%) diff --git a/aggregator-derivatives/vooi/index.ts b/aggregators/vooi/index.ts similarity index 100% rename from aggregator-derivatives/vooi/index.ts rename to aggregators/vooi/index.ts From 268c9eb3ab996a5225b0485c496acfe0a651a2e9 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 19 May 2024 15:11:36 +0000 Subject: [PATCH 0571/1590] fix result type --- aggregators/vooi/index.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/aggregators/vooi/index.ts b/aggregators/vooi/index.ts index 509cce4023..ac81af4297 100644 --- a/aggregators/vooi/index.ts +++ b/aggregators/vooi/index.ts @@ -1,5 +1,5 @@ import fetchURL from "../../utils/fetchURL"; -import { FetchResult, SimpleAdapter } from "../../adapters/types"; +import { FetchResult, FetchResultV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const URL = "https://defilama-stats.vooi.workers.dev/"; @@ -11,7 +11,7 @@ interface IAPIResponse { dailyVolume: string; totalVolume: string; } -const fetch = async (options: any): Promise => { +const fetch = async (options: any): Promise => { let timestamp = options.toTimestamp const { dailyVolume, totalVolume }: IAPIResponse = ( (await fetchURL(`${URL}${endpoint}?ts=${timestamp}`)).data @@ -19,7 +19,6 @@ const fetch = async (options: any): Promise => { return { dailyVolume, totalVolume, - timestamp }; }; @@ -31,4 +30,4 @@ export default { }, }, version: 2 -} \ No newline at end of file +} From 040166ca2ca9c11a735b8ff04c4636168251d695 Mon Sep 17 00:00:00 2001 From: whichghost Date: Mon, 20 May 2024 00:51:34 +0800 Subject: [PATCH 0572/1590] fees and revenues --- fees/polter/index.ts | 168 +++++++++++++++++++++++++++++++++++++++++++ fees/polter/types.ts | 10 +++ 2 files changed, 178 insertions(+) create mode 100644 fees/polter/index.ts create mode 100644 fees/polter/types.ts diff --git a/fees/polter/index.ts b/fees/polter/index.ts new file mode 100644 index 0000000000..0d3cec0179 --- /dev/null +++ b/fees/polter/index.ts @@ -0,0 +1,168 @@ +import { Adapter } from "../../adapters/types"; +import { FANTOM } from "../../helpers/chains"; +import { request, gql } from "graphql-request"; +import type { ChainEndpoints, FetchV2 } from "../../adapters/types"; +import BigNumber from "bignumber.js" +// import retry from 'async-retry' + +import { Chain } from "@defillama/sdk/build/general"; + +import { getPrices } from '../../utils/prices' + +type THeader = { + [s: string]: string; +} +const headers: THeader = { + 'origin': 'https://polter.finance/', + 'referer': 'https://polter.finance/', + 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' +}; + +const ONE_DAY = 24 * 60 * 60; // in seconds +const RECORDS_PER_PAGE = 100 + +const endpoints = { + [FANTOM]: "https://api.studio.thegraph.com/query/71811/polter/version/latest", +}; + +const PLATFORM_TOKEN = '0x5c725631fd299703d0a74c23f89a55c6b9a0c52f' +const tokens = { + '0x5c725631fd299703d0a74c23f89a55c6b9a0c52f': { + gecko: 'coingecko:polter-finance', + decimals: 18 + }, + '0xbbce4b1513d4285bd7a59c2c63835535151c8e7c': { + gecko: 'coingecko:fantom', + decimals: 18 + }, + '0x5a75a5f3a637cc9394816efc553d102302d4cfcd': { + gecko: 'coingecko:usd-coin', + decimals: 6 + }, + '0xa826b29d81caef8c9aa212f172ab3ef00566e91e': { + gecko: 'coingecko:magic-internet-money', + decimals: 18 + }, + '0x4bf6f3210488091a0111daf7ab7cf840a3af8022': { + gecko: 'coingecko:stader-sftmx', + decimals: 18 + }, + '0x0299553df0fa396c0f6f3456d293608e189c3cf3': { + gecko: 'coingecko:solana', + decimals: 18 + }, + '0xb49da25f726451ba0e7c7e1c0b273322d2656514': { + gecko: 'coingecko:layerzero-usdc', + decimals: 6 + }, + '0xc60f08059586849810d9c19c67919d2d99174ecf': { + gecko: 'coingecko:axlusdc', + decimals: 6 + }, + '0xa37e0d5590436bd9abd2803c18c328a650b236ee': { + gecko: 'coingecko:bitcoin', + decimals: 8 + }, + '0x328c7a684f160c089ebff07ff1b5a417f024979e': { + gecko: 'coingecko:bridged-wrapped-ether-stargate', + decimals: 18 + } +} + +const geckoNames = (() => { + const addresses = Object.keys(tokens) + return addresses.map((address) => { + return tokens[address].gecko + }) +})() + +type RewardsPaid = { + id: number + reward: BigNumber + rewardsToken: string + blockTimestamp: number +} + +const rewardsPaid = async (graphUrls: ChainEndpoints, chain: string, timestamp: number, skip: number) => { + const graphQuery = gql + `{ + rewardPaids( + first: ${RECORDS_PER_PAGE} + skip: ${skip} + where: { blockTimestamp_lte: ${timestamp}, blockTimestamp_gt: ${timestamp - ONE_DAY} }, + orderBy: blockTimestamp + order: ASC + ) { + id + reward + rewardsToken + blockTimestamp + } + }` + + const graphRes = await request(graphUrls[chain], graphQuery, {}, headers); + const rewardsPaid = graphRes.rewardPaids + return rewardsPaid +} + +const graphs: FetchV2 = async ({ chain, endTimestamp }) => { + + let recordsProcessed = 0 + let rewardsMap = {} + let pricesMap = {} + let rewards: RewardsPaid[] = [] + + do { + rewards = await rewardsPaid(endpoints, chain, endTimestamp, recordsProcessed); + // console.log('rewards', rewards) + + for (let i=0; i 0) // keep searching while there are still records + + // total up the fees of all tokens + let fees = BigNumber('0') + let revenue = BigNumber('0') + const addresses = Object.keys(rewardsMap) + for (let i=0; i Date: Mon, 20 May 2024 08:53:06 +0000 Subject: [PATCH 0573/1590] move voo --- {aggregators => aggregator-derivatives}/vooi/index.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {aggregators => aggregator-derivatives}/vooi/index.ts (100%) diff --git a/aggregators/vooi/index.ts b/aggregator-derivatives/vooi/index.ts similarity index 100% rename from aggregators/vooi/index.ts rename to aggregator-derivatives/vooi/index.ts From ba79cc7f25dd4b3e8ee2d8b886b60144c2cd59ac Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 20 May 2024 12:45:39 +0000 Subject: [PATCH 0574/1590] add dydx-v4 --- fees/dydx-v4/index.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 fees/dydx-v4/index.ts diff --git a/fees/dydx-v4/index.ts b/fees/dydx-v4/index.ts new file mode 100644 index 0000000000..2e4e7d0397 --- /dev/null +++ b/fees/dydx-v4/index.ts @@ -0,0 +1,30 @@ +import { FetchOptions, SimpleAdapter } from '../../adapters/types' +import { httpGet } from '../../utils/fetchURL' + +interface IFees { + day: string + sum_tradingfeecollection: string +} +const fetchFees = async (options: FetchOptions) => { + const url = 'https://api.lacertalabs.xyz/data/tradingfeecollection' + const dateStr = new Date(options.startOfDay * 1000).toISOString().split('T')[0] + const res = await httpGet(url) + delete res['latestTen'] + const item: IFees[] = Object.values(res) + const dailyFees = item.find((i) => i.day.split('T')[0] === dateStr)?.sum_tradingfeecollection + return { + dailyFees: dailyFees ? dailyFees : undefined, + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + "dydx": { + fetch: fetchFees, + start: 1699747200, + } + } +} + +export default adapter From 420cfa8693037e885fb08adc2fddcfeefe7844e0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 20 May 2024 16:33:36 +0000 Subject: [PATCH 0575/1590] covert to v2 --- aggregators/kyberswap/index.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/aggregators/kyberswap/index.ts b/aggregators/kyberswap/index.ts index 8c063a51dd..0548141dfa 100644 --- a/aggregators/kyberswap/index.ts +++ b/aggregators/kyberswap/index.ts @@ -16,25 +16,24 @@ const chainToId: Record = { [CHAIN.SCROLL]: 534352, [CHAIN.ERA]: 324, [CHAIN.CRONOS]: 25, - [CHAIN.BASE]: 8453, + [CHAIN.BASE]: 8453, [CHAIN.MANTLE]: 5000, [CHAIN.BLAST]: 81457, [CHAIN.POLYGON_ZKEVM]: 1101, [CHAIN.BITTORRENT]: 199 }; -const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { - const unixTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - const url = `https://common-service.kyberswap.com/api/v1/aggregator/volume/daily?chainId=${chainToId[options.chain]}×tamps=${unixTimestamp}`; +const fetch = async (options: FetchOptions) => { + const url = `https://common-service.kyberswap.com/api/v1/aggregator/volume/daily?chainId=${chainToId[options.chain]}×tamps=${options.startOfDay}`; const data = (await httpGet(url, { headers: { 'origin': 'https://common-service.kyberswap.com'}})).data?.volumes?.[0]; return { dailyVolume: data.value, - timestamp: timestamp, }; }; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BASE]: { fetch: fetch, From 44e04c6bcf769843912f168fb17eda8968ed3a30 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 20 May 2024 16:48:50 +0000 Subject: [PATCH 0576/1590] fix addapter --- dexs/rollie-finance/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/rollie-finance/index.ts b/dexs/rollie-finance/index.ts index f818c086db..527196b41e 100644 --- a/dexs/rollie-finance/index.ts +++ b/dexs/rollie-finance/index.ts @@ -31,7 +31,7 @@ const getFetch = (chain: string): FetchV2 => async (options: FetchOptions): Prom const dayTimestamp = getUniqStartOfTodayTimestamp( new Date(startTimestamp * 1000) ); - const dayIndex = Math.floor(dayTimestamp / 86400); + const dayIndex = Math.floor(options.startOfDay / 86400); const { market: response } = await request(ENDPOINTS[chain], getVolume, { id: String(dayIndex), @@ -43,7 +43,7 @@ const getFetch = (chain: string): FetchV2 => async (options: FetchOptions): Prom response.marketDayDatas.length === 1 ? (BigInt(response.marketDayDatas[0].tradeVolume) / BigInt(10 ** USDC_DECIMALS[chain])).toString() - : undefined, + : '0', totalVolume: (BigInt(response.tradeVolume) / BigInt(10 ** USDC_DECIMALS[chain])).toString(), @@ -55,7 +55,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.SCROLL]: { fetch: getFetch(CHAIN.SCROLL), - start: 5423335, + start: 1715212800, }, }, }; From f59a9125520abfcb47fc7d2401c7e399793ee46f Mon Sep 17 00:00:00 2001 From: whichghost Date: Tue, 21 May 2024 11:16:01 +0800 Subject: [PATCH 0577/1590] fix start backfill timestamp --- fees/polter/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/polter/index.ts b/fees/polter/index.ts index 0d3cec0179..9c3fd6ed99 100644 --- a/fees/polter/index.ts +++ b/fees/polter/index.ts @@ -136,6 +136,7 @@ const graphs: FetchV2 = async ({ chain, endTimestamp }) => { recordsProcessed += RECORDS_PER_PAGE } while(rewards.length > 0) // keep searching while there are still records + // console.log('rewardsMap', rewardsMap) // total up the fees of all tokens let fees = BigNumber('0') let revenue = BigNumber('0') @@ -160,7 +161,7 @@ const adapter: Adapter = { adapter: { [FANTOM]: { fetch: graphs, - start: 74897280 // Jan-29-2024 04:49:13 PM +UTC + start: 1706546953 // Jan-29-2024 04:49:13 PM +UTC }, }, } From 63d03b507a4be0fbc8fb446881f9a3a90dc910b4 Mon Sep 17 00:00:00 2001 From: octave-jumper Date: Tue, 21 May 2024 11:11:42 +0200 Subject: [PATCH 0578/1590] Add bridge-aggregator adaptor a nd change swap-aggregator Jumper adapter --- aggregators/jumper-exchange/index.ts | 16 +++++-- bridge-aggregator/jumper.exchange/index.ts | 49 ++++++++++++++++++++++ 2 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 bridge-aggregator/jumper.exchange/index.ts diff --git a/aggregators/jumper-exchange/index.ts b/aggregators/jumper-exchange/index.ts index 5ee72a6b3d..af51f49f11 100644 --- a/aggregators/jumper-exchange/index.ts +++ b/aggregators/jumper-exchange/index.ts @@ -15,7 +15,11 @@ const contract: IContract = { [CHAIN.BSC]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.POLYGON]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.POLYGON_ZKEVM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', - [CHAIN.FANTOM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae' + [CHAIN.FANTOM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.MODE]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.SCROLL]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.ZKSYNC]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.METIS]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', } const fetch: any = async (timestamp: number, _, { chain, getLogs, createBalances, }: FetchOptions): Promise => { @@ -23,8 +27,14 @@ const fetch: any = async (timestamp: number, _, { chain, getLogs, createBalances const data: any[] = await getLogs({ target: contract[chain], eventAbi: 'event LiFiGenericSwapCompleted(bytes32 indexed transactionId, string integrator, string referrer, address receiver, address fromAssetId, address toAssetId, uint256 fromAmount, uint256 toAmount)' - }) - data.forEach((e: any) => dailyVolume.add(e.toAssetId, e.toAmount)); + }); + + data.forEach((e: any) => { + if (e.integrator === 'jumper.exchange' || e.integrator === 'jumper.exchange.gas') { + dailyVolume.add(e.toAssetId, e.toAmount); + } + }); + return { dailyVolume, timestamp, } as any; }; diff --git a/bridge-aggregator/jumper.exchange/index.ts b/bridge-aggregator/jumper.exchange/index.ts new file mode 100644 index 0000000000..e34689825c --- /dev/null +++ b/bridge-aggregator/jumper.exchange/index.ts @@ -0,0 +1,49 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +type IContract = { + [c: string | Chain]: string; +} + +const contract: IContract = { + [CHAIN.ARBITRUM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.OPTIMISM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.BASE]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.ETHEREUM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.AVAX]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.BSC]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.POLYGON]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.POLYGON_ZKEVM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.FANTOM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.MODE]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.SCROLL]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.ZKSYNC]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.METIS]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', +} + +const fetch: any = async (timestamp: number, _, { chain, getLogs, createBalances, }: FetchOptions): Promise => { + const dailyVolume = createBalances(); + const data: any[] = await getLogs({ + target: contract[chain], + eventAbi: 'event LiFiTransferStarted(bytes32 indexed transactionId, string bridge, string integrator, address referrer, address sendingAssetId, address receiver, uint256 minAmount, uint256 destinationChainId,bool hasSourceSwaps,bool hasDestinationCall )' + }); + data.forEach((e: any) => { + if (e.integrator === 'jumper.exchange' || e.integrator === 'jumper.exchange.gas') { + dailyVolume.add(e.sendingAssetId, e.minAmount); + } + }); + + return { dailyVolume, timestamp, } as any; +}; + +const adapter: SimpleAdapter = { + adapter: Object.keys(contract).reduce((acc, chain) => { + return { + ...acc, + [chain]: { fetch, start: 1691625600, } + } + }, {}) +}; + +export default adapter; From 6cfad3b4b4be6c90429f5df061ecb5335f4ae923 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 21 May 2024 16:45:00 +0000 Subject: [PATCH 0579/1590] disable base --- dexs/solidly-v3/index.ts | 2 +- fees/solidly-v3.ts | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dexs/solidly-v3/index.ts b/dexs/solidly-v3/index.ts index 24e9d98704..b08d32a69c 100644 --- a/dexs/solidly-v3/index.ts +++ b/dexs/solidly-v3/index.ts @@ -3,7 +3,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3", - [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", + // [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-optimism", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-arbitrum", [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-fantom" diff --git a/fees/solidly-v3.ts b/fees/solidly-v3.ts index bf132882b9..6ebf071fe9 100644 --- a/fees/solidly-v3.ts +++ b/fees/solidly-v3.ts @@ -17,7 +17,7 @@ type IURL = { const endpoints: IURL = { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3", - [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", + // [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-optimism", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-arbitrum", [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-fantom" @@ -58,10 +58,10 @@ const adapter: Adapter = { fetch: fetch(CHAIN.ETHEREUM), start: 1693526400, }, - [CHAIN.BASE]: { - fetch: fetch(CHAIN.BASE), - start: 0, - }, + // [CHAIN.BASE]: { + // fetch: fetch(CHAIN.BASE), + // start: 0, + // }, [CHAIN.OPTIMISM]: { fetch: fetch(CHAIN.OPTIMISM), start: 0, From a5d5e1d15a82f7d6a32fdad749394e424f183c10 Mon Sep 17 00:00:00 2001 From: 0xCrumbs <97379465+0xcrumb@users.noreply.github.com> Date: Wed, 22 May 2024 11:24:55 +0100 Subject: [PATCH 0580/1590] add v8 support --- dexs/gains-network/index.ts | 54 +++++++++++++++++++++++++-------- fees/gains-network.ts | 60 +++++++++++++++++++++++++++++-------- 2 files changed, 90 insertions(+), 24 deletions(-) diff --git a/dexs/gains-network/index.ts b/dexs/gains-network/index.ts index 78a744b4b2..83d9067af6 100644 --- a/dexs/gains-network/index.ts +++ b/dexs/gains-network/index.ts @@ -9,20 +9,27 @@ type IAddresses = { interface ILog { address: string; data: string; + topics: string[]; } +const V8_LIMIT_TOPIC0 = "0xc10f67c0e22c53149183a414c16a62334103432a2c48b839a057cd9bd5fdeb99"; +const V8_MARKET_TOPIC0 = "0xbbd5cfa7b4ec0d44d4155fcaad32af9cf7e65799d6b8b08f233b930de7bcd9a8"; + const topic0_limit_ex = [ "0x1ab0771256522e5114b583b488c490436d6f8fe02b1e1c9697443e8704c4e840", // v5-v6 "0xa97091b8c54bf9d1906c2a06322d0ea74fedde4538cdcdf95d81d0ffdca41857", // v7 + V8_LIMIT_TOPIC0, // v8 ]; const topic0_market_ex = [ "0x2739a12dffae5d66bd9e126a286078ed771840f2288f0afa5709ce38c3330997", // v5-v6 "0xca42b0e44cd853d207b87e8f8914eaefef9c9463a8c77ca33754aa62f6904f00", // v7 + V8_MARKET_TOPIC0, // v8 ]; -const precisionException: { [a: string]: number } = { +const precisionException: { [a: string | number]: number } = { "0x2ac6749d0affd42c8d61ef25e433f92e375a1aef": 1e6, "0x4542256c583bcad66a19a525b57203773a6485bf": 1e6, + 3: 1e6, // v8 USDC }; const contract_addresses: IAddresses = { @@ -30,11 +37,13 @@ const contract_addresses: IAddresses = { "0x82e59334da8c667797009bbe82473b55c7a6b311", // DAI TradingCallbacks "0x0bbed2eac3237ba128643670b7cf3be475933755", // ETH TradingCallbacks "0x2ac6749d0affd42c8d61ef25e433f92e375a1aef", // USDC TradingCallbacks + "0x209a9a01980377916851af2ca075c2b170452018", // v8 Diamond ], [CHAIN.ARBITRUM]: [ "0x298a695906e16aea0a184a2815a76ead1a0b7522", // DAI TradingCallbacks "0x62a9f50c92a57c719ff741133caa55c7a81ce019", // ETH TradingCallbacks "0x4542256c583bcad66a19a525b57203773a6485bf", // USDC TradingCallbacks + "0xff162c694eaa571f685030649814282ea457f169", // v8 Diamond ], }; @@ -64,32 +73,53 @@ const fetch: any = async (timestamp: number, _, { getLogs, createBalances, chain const limit_volume = limitLogs .map((e: ILog) => { const data = e.data.replace("0x", ""); - const leverage = Number("0x" + data.slice(512, 576)); - const positionSizeDai = Number("0x" + data.slice(896, 960)) / (precisionException[e.address] ?? 1e18); - const collateralPrice = (data.length === 1216 ? Number("0x" + data.slice(1088, 1152)) : 1e8) / 1e8; - return leverage * positionSizeDai * collateralPrice; + + // v8 + if (e.topics[0] === V8_LIMIT_TOPIC0) { + const leverage = Number("0x" + data.slice(320, 384)) / 1e3; + const collateralIndex = Number("0x" + data.slice(512, 576)); + const collateralAmount = Number("0x" + data.slice(640, 704)) / (precisionException[collateralIndex] ?? 1e18); + const collateralPriceUsd = Number("0x" + data.slice(1280, 1344)) / 1e8; + return leverage * collateralAmount * collateralPriceUsd; + } else { + // v5-v7 + const leverage = Number("0x" + data.slice(512, 576)); + const positionSizeDai = Number("0x" + data.slice(896, 960)) / (precisionException[e.address] ?? 1e18); + const collateralPrice = (data.length === 1216 ? Number("0x" + data.slice(1088, 1152)) : 1e8) / 1e8; + return leverage * positionSizeDai * collateralPrice; + } }) .reduce((a: number, b: number) => a + b, 0); const market_volume = marketLogs .map((e: ILog) => { const data = e.data.replace("0x", ""); - const leverage = Number("0x" + data.slice(448, 512)); - const positionSizeDai = Number("0x" + data.slice(832, 896)) / (precisionException[e.address] ?? 1e18); - const collateralPrice = (data.length === 1088 ? Number("0x" + data.slice(1024, 1088)) : 1e8) / 1e8; - return leverage * positionSizeDai * collateralPrice; + // v8 + if (e.topics[0] === V8_MARKET_TOPIC0) { + const leverage = Number("0x" + data.slice(320, 384)) / 1e3; + const collateralIndex = Number("0x" + data.slice(512, 576)); + const collateralAmount = Number("0x" + data.slice(640, 704)) / (precisionException[collateralIndex] ?? 1e18); + const collateralPriceUsd = Number("0x" + data.slice(1280, 1344)) / 1e8; + return leverage * collateralAmount * collateralPriceUsd; + } else { + // v5-v7 + const leverage = Number("0x" + data.slice(448, 512)); + const positionSizeDai = Number("0x" + data.slice(832, 896)) / (precisionException[e.address] ?? 1e18); + const collateralPrice = (data.length === 1088 ? Number("0x" + data.slice(1024, 1088)) : 1e8) / 1e8; + return leverage * positionSizeDai * collateralPrice; + } }) .reduce((a: number, b: number) => a + b, 0); const dailyVolume = limit_volume + market_volume; - return { dailyVolume, timestamp, }; + return { dailyVolume, timestamp }; }; const adapter: SimpleAdapter = { adapter: { - [CHAIN.ARBITRUM]: { fetch, start: 1684972800, }, - [CHAIN.POLYGON]: { fetch, start: 1684972800, }, + [CHAIN.ARBITRUM]: { fetch, start: 1684972800 }, + [CHAIN.POLYGON]: { fetch, start: 1684972800 }, }, }; diff --git a/fees/gains-network.ts b/fees/gains-network.ts index 40f057c386..d0d25ac973 100644 --- a/fees/gains-network.ts +++ b/fees/gains-network.ts @@ -19,6 +19,16 @@ const event: string[] = [ "event BorrowingFeeCharged(address indexed trader, uint tradeValueDai, uint valueDai)", ]; +const eventV8: string[] = [ + "event GovFeeCharged(address indexed trader, uint8 indexed collateralIndex, uint256 amountCollateral)", + "event ReferralFeeCharged(address indexed trader, uint8 indexed collateralIndex, uint256 amountCollateral)", + "event TriggerFeeCharged(address indexed trader, uint8 indexed collateralIndex, uint256 amountCollateral)", + "event GnsStakingFeeCharged(address indexed trader, uint8 indexed collateralIndex, uint256 amountCollateral)", + "event GTokenFeeCharged(address indexed trader, uint8 indexed collateralIndex, uint256 amountCollateral)", + "event BorrowingFeeCharged(address indexed trader, uint8 indexed collateralIndex, uint256 amountCollateral)", +]; + +// Pre-v8 const addressConfig: { [a: string]: string } = { "0x82e59334da8c667797009bbe82473b55c7a6b311": ADDRESSES.polygon.DAI, "0x0bbed2eac3237ba128643670b7cf3be475933755": ADDRESSES.polygon.WETH, @@ -28,37 +38,63 @@ const addressConfig: { [a: string]: string } = { "0x4542256c583bcad66a19a525b57203773a6485bf": ADDRESSES.arbitrum.USDC_CIRCLE, }; +// Post-v8 +const collateralIndexMap: { [s: string | Chain]: { [a: number]: string } } = { + [CHAIN.POLYGON]: { 1: ADDRESSES.polygon.DAI, 2: ADDRESSES.polygon.WETH, 3: ADDRESSES.polygon.USDC_CIRCLE }, + [CHAIN.ARBITRUM]: { 1: ADDRESSES.arbitrum.DAI, 2: ADDRESSES.arbitrum.WETH, 3: ADDRESSES.arbitrum.USDC_CIRCLE }, +}; + const contract_addresses: IAddresses = { [CHAIN.POLYGON]: [ "0x82e59334da8c667797009bbe82473b55c7a6b311", // DAI TradingCallbacks "0x0bbed2eac3237ba128643670b7cf3be475933755", // ETH TradingCallbacks "0x2ac6749d0affd42c8d61ef25e433f92e375a1aef", // USDC TradingCallbacks + "0x209a9a01980377916851af2ca075c2b170452018", // v8 Diamond ], [CHAIN.ARBITRUM]: [ "0x298a695906e16aea0a184a2815a76ead1a0b7522", // DAI TradingCallbacks "0x62a9f50c92a57c719ff741133caa55c7a81ce019", // ETH TradingCallbacks "0x4542256c583bcad66a19a525b57203773a6485bf", // USDC TradingCallbacks + "0xff162c694eaa571f685030649814282ea457f169", // v8 Diamond ], }; const fetch = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, }: FetchOptions): Promise => { - const dailyFees = createBalances() - const dailyRevenue = createBalances() - const dailyHoldersRevenue = createBalances() + return async (timestamp: number, _: ChainBlocks, { createBalances, getLogs }: FetchOptions): Promise => { + const collateralIndexToToken = collateralIndexMap[chain]; + const dailyFees = createBalances(); + const dailyRevenue = createBalances(); + const dailyHoldersRevenue = createBalances(); for (const target of contract_addresses[chain]) { - const token = addressConfig[target] - const [ - devFee, ssFee, referralFee, nftBotFee, daiVault, lpFee, triggerFee, govFee, borrowingFee, - ]: any = await Promise.all(event.map((eventAbi) => getLogs({ target, eventAbi }))); + const token = addressConfig[target]; + + // pre-v8 + if (token) { + const [devFee, ssFee, referralFee, nftBotFee, daiVault, lpFee, triggerFee, govFee, borrowingFee]: any = await Promise.all( + event.map((eventAbi) => getLogs({ target, eventAbi })) + ); + + [devFee, ssFee, referralFee, nftBotFee, daiVault, lpFee, triggerFee, govFee, borrowingFee] + .flat() + .forEach((i: any) => dailyFees.add(token, i.valueDai)); + [devFee, ssFee, govFee].flat().forEach((i: any) => dailyRevenue.add(token, i.valueDai)); + ssFee.forEach((i: any) => dailyHoldersRevenue.add(token, i.valueDai)); + } else { + // v8 + const [govFee, referralFee, triggerFee, stakingFee, gTokenFee, borrowingFee]: any = await Promise.all( + eventV8.map((eventAbi) => getLogs({ target, eventAbi })) + ); - [devFee, ssFee, referralFee, nftBotFee, daiVault, lpFee, triggerFee, govFee, borrowingFee,].flat().forEach((i: any) => dailyFees.add(token, i.valueDai)); - [devFee, ssFee, govFee,].flat().forEach((i: any) => dailyRevenue.add(token, i.valueDai)); - ssFee.forEach((i: any) => dailyHoldersRevenue.add(token, i.valueDai)); + [govFee, referralFee, triggerFee, stakingFee, gTokenFee, borrowingFee] + .flat() + .forEach((i: any) => dailyFees.add(collateralIndexToToken[i.collateralIndex], i.amountCollateral)); + [govFee, stakingFee].flat().forEach((i: any) => dailyRevenue.add(collateralIndexToToken[i.collateralIndex], i.amountCollateral)); + stakingFee.forEach((i: any) => dailyHoldersRevenue.add(collateralIndexToToken[i.collateralIndex], i.amountCollateral)); + } } - return { timestamp, dailyFees, dailyRevenue, dailyHoldersRevenue, } + return { timestamp, dailyFees, dailyRevenue, dailyHoldersRevenue }; }; }; From 09b05538f67a5fbf5960ccfb19c0efa6399c400b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 22 May 2024 12:21:45 +0000 Subject: [PATCH 0581/1590] disable run --- fees/polter/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/polter/index.ts b/fees/polter/index.ts index 9c3fd6ed99..616bee1021 100644 --- a/fees/polter/index.ts +++ b/fees/polter/index.ts @@ -160,7 +160,7 @@ const adapter: Adapter = { version: 2, adapter: { [FANTOM]: { - fetch: graphs, + fetch: async () => {return {} }, start: 1706546953 // Jan-29-2024 04:49:13 PM +UTC }, }, From 907665af720ed50c89b0eeeef07bef3c44cea6ff Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 22 May 2024 13:03:52 +0000 Subject: [PATCH 0582/1590] fix feespolter --- fees/polter/index.ts | 149 +++++++++---------------------------------- 1 file changed, 29 insertions(+), 120 deletions(-) diff --git a/fees/polter/index.ts b/fees/polter/index.ts index 616bee1021..a6678933c6 100644 --- a/fees/polter/index.ts +++ b/fees/polter/index.ts @@ -1,13 +1,7 @@ import { Adapter } from "../../adapters/types"; -import { FANTOM } from "../../helpers/chains"; +import { CHAIN } from "../../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainEndpoints, FetchV2 } from "../../adapters/types"; -import BigNumber from "bignumber.js" -// import retry from 'async-retry' - -import { Chain } from "@defillama/sdk/build/general"; - -import { getPrices } from '../../utils/prices' +import { FetchV2 } from "../../adapters/types"; type THeader = { [s: string]: string; @@ -18,78 +12,31 @@ const headers: THeader = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' }; -const ONE_DAY = 24 * 60 * 60; // in seconds -const RECORDS_PER_PAGE = 100 - -const endpoints = { - [FANTOM]: "https://api.studio.thegraph.com/query/71811/polter/version/latest", +const RECORDS_PER_PAGE = 1000 +const endpoints: any = { + [CHAIN.FANTOM]: "https://api.studio.thegraph.com/query/71811/polter/version/latest", }; -const PLATFORM_TOKEN = '0x5c725631fd299703d0a74c23f89a55c6b9a0c52f' -const tokens = { - '0x5c725631fd299703d0a74c23f89a55c6b9a0c52f': { - gecko: 'coingecko:polter-finance', - decimals: 18 - }, - '0xbbce4b1513d4285bd7a59c2c63835535151c8e7c': { - gecko: 'coingecko:fantom', - decimals: 18 - }, - '0x5a75a5f3a637cc9394816efc553d102302d4cfcd': { - gecko: 'coingecko:usd-coin', - decimals: 6 - }, - '0xa826b29d81caef8c9aa212f172ab3ef00566e91e': { - gecko: 'coingecko:magic-internet-money', - decimals: 18 - }, - '0x4bf6f3210488091a0111daf7ab7cf840a3af8022': { - gecko: 'coingecko:stader-sftmx', - decimals: 18 - }, - '0x0299553df0fa396c0f6f3456d293608e189c3cf3': { - gecko: 'coingecko:solana', - decimals: 18 - }, - '0xb49da25f726451ba0e7c7e1c0b273322d2656514': { - gecko: 'coingecko:layerzero-usdc', - decimals: 6 - }, - '0xc60f08059586849810d9c19c67919d2d99174ecf': { - gecko: 'coingecko:axlusdc', - decimals: 6 - }, - '0xa37e0d5590436bd9abd2803c18c328a650b236ee': { - gecko: 'coingecko:bitcoin', - decimals: 8 - }, - '0x328c7a684f160c089ebff07ff1b5a417f024979e': { - gecko: 'coingecko:bridged-wrapped-ether-stargate', - decimals: 18 - } -} - -const geckoNames = (() => { - const addresses = Object.keys(tokens) - return addresses.map((address) => { - return tokens[address].gecko - }) -})() type RewardsPaid = { id: number - reward: BigNumber + reward: BigInt rewardsToken: string blockTimestamp: number } -const rewardsPaid = async (graphUrls: ChainEndpoints, chain: string, timestamp: number, skip: number) => { - const graphQuery = gql +const fetch: FetchV2 = async ({ chain, startTimestamp, endTimestamp, createBalances }) => { + let skip = 0 + const dailyFees = createBalances() + const dailyRevenue = createBalances() + const rewardsPaids: RewardsPaid[] = [] + while (true) { + const graphQuery = gql `{ rewardPaids( - first: ${RECORDS_PER_PAGE} + first: ${RECORDS_PER_PAGE}, skip: ${skip} - where: { blockTimestamp_lte: ${timestamp}, blockTimestamp_gt: ${timestamp - ONE_DAY} }, + where: { blockTimestamp_lte: ${endTimestamp}, blockTimestamp_gte: ${startTimestamp} }, orderBy: blockTimestamp order: ASC ) { @@ -100,67 +47,29 @@ const rewardsPaid = async (graphUrls: ChainEndpoints, chain: string, timestamp: } }` - const graphRes = await request(graphUrls[chain], graphQuery, {}, headers); - const rewardsPaid = graphRes.rewardPaids - return rewardsPaid -} - -const graphs: FetchV2 = async ({ chain, endTimestamp }) => { - - let recordsProcessed = 0 - let rewardsMap = {} - let pricesMap = {} - let rewards: RewardsPaid[] = [] - - do { - rewards = await rewardsPaid(endpoints, chain, endTimestamp, recordsProcessed); - // console.log('rewards', rewards) - - for (let i=0; i 0) // keep searching while there are still records - - // console.log('rewardsMap', rewardsMap) - // total up the fees of all tokens - let fees = BigNumber('0') - let revenue = BigNumber('0') - const addresses = Object.keys(rewardsMap) - for (let i=0; i { + dailyFees.add(reward.rewardsToken, reward.reward) + dailyRevenue.add(reward.rewardsToken, reward.reward) + }) return { - dailyFees: fees.toString(10), - dailyRevenue: revenue.toString(10), // revenue = user fees + depositors fees which is 50-50 (exclude platform token) at the moment + dailyFees, + dailyRevenue, } } const adapter: Adapter = { version: 2, adapter: { - [FANTOM]: { - fetch: async () => {return {} }, + [CHAIN.FANTOM]: { + fetch: fetch, start: 1706546953 // Jan-29-2024 04:49:13 PM +UTC }, }, From 5b37d49879ae66b137647d0bd39bf61234392da2 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 22 May 2024 13:17:51 +0000 Subject: [PATCH 0583/1590] fix rev --- fees/polter/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/fees/polter/index.ts b/fees/polter/index.ts index a6678933c6..867d07d42a 100644 --- a/fees/polter/index.ts +++ b/fees/polter/index.ts @@ -59,6 +59,7 @@ const fetch: FetchV2 = async ({ chain, startTimestamp, endTimestamp, createBalan dailyFees.add(reward.rewardsToken, reward.reward) dailyRevenue.add(reward.rewardsToken, reward.reward) }) + dailyRevenue.resizeBy(0.5) return { dailyFees, dailyRevenue, From e55664e6929f9169d1091e8d8d6a517e95e71ca7 Mon Sep 17 00:00:00 2001 From: 0xR <0xr@metavault.org> Date: Wed, 22 May 2024 18:37:13 +0300 Subject: [PATCH 0584/1590] Add LineHub V3 Volume Adapter --- dexs/linehub-v3/index.ts | 64 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 dexs/linehub-v3/index.ts diff --git a/dexs/linehub-v3/index.ts b/dexs/linehub-v3/index.ts new file mode 100644 index 0000000000..252de64626 --- /dev/null +++ b/dexs/linehub-v3/index.ts @@ -0,0 +1,64 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { CHAIN } from "../../helpers/chains"; +import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { BreakdownAdapter } from "../../adapters/types"; + +const endpointsV3 = { + [CHAIN.LINEA]: + "https://api.studio.thegraph.com/query/55804/linehub-v3/version/latest", +}; + +const v3Graphs = getGraphDimensions({ + graphUrls: endpointsV3, + totalVolume: { + factory: "factories", + field: "totalVolumeUSD", + }, + dailyVolume: { + factory: "uniswapDayData", + field: "volumeUSD", + }, + feesPercent: { + type: "fees", + ProtocolRevenue: 0, + HoldersRevenue: 0, + UserFees: 100, // User fees are 100% of collected fees + SupplySideRevenue: 100, // 100% of fees are going to LPs + Revenue: 0, // Set revenue to 0 as protocol fee is not set for all pools for now + }, +}); + +const startTimeV3: { [key: string]: number } = { + [CHAIN.LINEA]: 1713398400, // Thursday, April 18, 2024 12:00:00 AM +}; + +const v3 = Object.keys(endpointsV3).reduce( + (acc, chain) => ({ + ...acc, + [chain]: { + fetch: v3Graphs(chain as Chain), + start: startTimeV3[chain], + meta: { + methodology: { + Fees: "Each pool charge between 0.01% to 1% fee", + UserFees: "Users pay between 0.01% to 1% fee", + Revenue: "0 to 1/4 of the fee goes to treasury", + HoldersRevenue: "None", + ProtocolRevenue: "Treasury receives a share of the fees", + SupplySideRevenue: + "Liquidity providers get most of the fees of all trades in their pools", + }, + }, + }, + }), + {} +); + +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + v3: v3, + }, +}; + +export default adapter; From 7adb7413e8b0ae1c134600ce75e40a89286cbc41 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 22 May 2024 16:17:21 +0000 Subject: [PATCH 0585/1590] fix chain --- aggregators/jumper-exchange/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregators/jumper-exchange/index.ts b/aggregators/jumper-exchange/index.ts index af51f49f11..5563b753f1 100644 --- a/aggregators/jumper-exchange/index.ts +++ b/aggregators/jumper-exchange/index.ts @@ -18,7 +18,7 @@ const contract: IContract = { [CHAIN.FANTOM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.MODE]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.SCROLL]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', - [CHAIN.ZKSYNC]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.ERA]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.METIS]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', } From 20c3f17ab2cd1ebe0091a2115b47f1e185d40bf1 Mon Sep 17 00:00:00 2001 From: Bonkman Date: Wed, 22 May 2024 16:20:28 -0400 Subject: [PATCH 0586/1590] added hop volume aggregator --- aggregators/hop-aggregator/index.ts | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 aggregators/hop-aggregator/index.ts diff --git a/aggregators/hop-aggregator/index.ts b/aggregators/hop-aggregator/index.ts new file mode 100644 index 0000000000..33c8c5437b --- /dev/null +++ b/aggregators/hop-aggregator/index.ts @@ -0,0 +1,30 @@ +import { CHAIN } from "../../helpers/chains"; +import { httpPost } from "../../utils/fetchURL"; +import { FetchOptions } from "../../adapters/types"; + +const fetchVolume = async (options: FetchOptions) => { + let timestamp = options.startOfDay * 1_000; + + const res = await httpPost("http://35.153.229.202/api/volume", { timestamp }); + const record = res.record || {}; + + return { + dailyVolume: record.total_volume_usd ? record.total_volume_usd.toFixed(2) : 0, + totalVolume: res.total_volume_usd ? res.total_volume_usd.toFixed(2) : 0, + dailyFees: 0, + totalFees: 0, + timestamp: timestamp, + }; +}; + +const adapter: any = { + version: 2, + adapter: { + [CHAIN.SUI]: { + fetch: fetchVolume, + start: () => 1714276800 + }, + }, +}; + +export default adapter; \ No newline at end of file From 72ca7d47ed58261b74fa20a573ad38300c1ba851 Mon Sep 17 00:00:00 2001 From: Luke Steyn Date: Thu, 23 May 2024 15:31:16 +0800 Subject: [PATCH 0587/1590] Added new dimensions for Drift Protocol --- dexs/drift-protocol/index.ts | 67 ++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index b9994f4ff6..4aa357204f 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -1,28 +1,75 @@ import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; +import { queryDune } from "../../helpers/dune"; -const dailyVolEndpoint = +const DAILY_VOL_ENDPOINT = "https://mainnet-beta.api.drift.trade/stats/24HourVolume"; -async function fetch(type: "perp" | "spot") { +const DUNE_QUERY_ID = "3756979"; + +type DimentionResult = { + dailyVolume?: number; + dailyFees?: number; + dailyUserFees?: number; + dailyRevenue?: number; +}; + +async function getPerpDimensions(): Promise { + const resultRows = await queryDune(DUNE_QUERY_ID); + + const summaryRow = resultRows.find((row) => row.market_index === null); + + // Perp Volume + const dailyVolume = summaryRow.total_volume as number; + + // All taker fees paid + const dailyFees = summaryRow.total_taker_fee as number; + + // All taker fees paid, minus maker rebates paid - not sure if this should be used as the "dailyFees" number instead. + const dailyRevenue = summaryRow.total_revenue as number; + + return { + dailyVolume, + dailyFees, + dailyUserFees: dailyFees, + dailyRevenue, + }; +} + +async function getSpotDimensions(): Promise { const volumeResponse = await httpGet( - `${dailyVolEndpoint}?${ - type === "perp" ? "perpMarkets" : "spotMarkets" - }=true` + `${DAILY_VOL_ENDPOINT}?spotMarkets=true` ); const rawVolumeQuotePrecision = volumeResponse.data.volume; // Volume will be returned in 10^6 precision - const volumeNumber = + const dailyVolume = rawVolumeQuotePrecision.length >= 6 ? Number(rawVolumeQuotePrecision.slice(0, -6)) : 0; - return { - dailyVolume: volumeNumber, - timestamp: Date.now() / 1e3, - }; + return { dailyVolume }; +} + +async function fetch(type: "perp" | "spot") { + const timestamp = Date.now() / 1e3; + + if (type === "perp") { + const results = await getPerpDimensions(); + + return { + ...results, + timestamp, + }; + } else { + const results = await getSpotDimensions(); + + return { + ...results, + timestamp: Date.now() / 1e3, + }; + } } const adapter = { From 325b2605d802429049d9c4340394ab3ebdfc9ab3 Mon Sep 17 00:00:00 2001 From: sundayalpaca Date: Thu, 23 May 2024 17:37:38 +0700 Subject: [PATCH 0588/1590] chore: fix logic query over limit --- dexs/hmx/index.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dexs/hmx/index.ts b/dexs/hmx/index.ts index d660850acc..b32e900090 100644 --- a/dexs/hmx/index.ts +++ b/dexs/hmx/index.ts @@ -42,7 +42,7 @@ const graphs = (graphUrls: ChainEndpoints) => { 0 as number ) / 1e30; - const chunkSize = 40; + const chunkSize = 10; const splitMarket: MarketStat[][] = []; for (let i = 0; i < totalMarketStats.length; i += chunkSize) { const chunk = totalMarketStats.slice(i, i + chunkSize); @@ -56,8 +56,9 @@ const graphs = (graphUrls: ChainEndpoints) => { let latestHourIndex = Math.floor( getTimestampAtStartOfHour(timestamp) / HOUR ); - for (let i = 0; i < 24; i++) { - for (const marketStat of markets) { + + for (const marketStat of markets) { + for (let i = 1; i < 25; i++) { ids.push(`"${latestHourIndex - i}_${marketStat.id}"`); } } @@ -75,9 +76,11 @@ const graphs = (graphUrls: ChainEndpoints) => { } } `; + const last24hrMarketStats = ( await graphQLClient.request(last24hrVolumeQuery) ).marketHourlyStats as Array<{ tradingVolume: string }>; + last24hrVolume += last24hrMarketStats.reduce( (accum, t) => accum + parseInt(t.tradingVolume), From 6d0041265b94759231f667efc22516df7b48294f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 23 May 2024 13:02:54 +0000 Subject: [PATCH 0589/1590] fix version --- fees/aerodrome/index.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/fees/aerodrome/index.ts b/fees/aerodrome/index.ts index cc3ee888f9..64337e8fb4 100644 --- a/fees/aerodrome/index.ts +++ b/fees/aerodrome/index.ts @@ -21,26 +21,27 @@ const multiCall = async (callN: any) => { })).output.map((r: any) => r.output).flat() } -const fetch = async (timestamp: number, _: ChainBlocks, fetchOptions: FetchOptions): Promise => { +const fetch = async (fetchOptions: FetchOptions): Promise => { const chunkSize = 500; let currentOffset = 0; let unfinished = true; const allPools: any[] = []; while (unfinished) { - const allPoolsChunk = await sdk.api2.abi.call({ target: sugar, abi: abis.forSwaps, params: [chunkSize, currentOffset], chain: CHAIN.BASE, block: "latest", }) + const allPoolsChunk = await fetchOptions.api.call({ target: sugar, abi: abis.forSwaps, params: [chunkSize, currentOffset], chain: CHAIN.BASE }) unfinished = allPoolsChunk.length !== 0; currentOffset += chunkSize; allPools.push(...allPoolsChunk); } - const pools = allPools.map((e: any) => e.lp) - fetchOptions.api.multiCall = multiCall + const pools = [...new Set(allPools.map((e: any) => e.lp))] + const timestamp = fetchOptions.startOfDay; const res: any = await getDexFees({ chain: CHAIN.BASE, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, pools, timestamp, fetchOptions }) res.dailyBribesRevenue = await fees_bribes(fetchOptions); return res; } const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BASE]: { fetch: fetch, @@ -48,4 +49,4 @@ const adapters: SimpleAdapter = { } } } -export default adapters; \ No newline at end of file +export default adapters; From 7d3118ecc9e7c10605b37705eb3d9eec8122a96c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 23 May 2024 14:33:58 +0000 Subject: [PATCH 0590/1590] fix aerodrome version 2 --- dexs/aerodrome/index.ts | 23 ++++++++++++----------- fees/aerodrome/index.ts | 15 +-------------- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/dexs/aerodrome/index.ts b/dexs/aerodrome/index.ts index f3274d1c79..2c69be1647 100644 --- a/dexs/aerodrome/index.ts +++ b/dexs/aerodrome/index.ts @@ -1,4 +1,4 @@ -import { FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types" +import { FetchOptions, FetchResult, FetchResultV2, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" const sugar = '0xe521fc2C55AF632cdcC3D69E7EFEd93d56c89015'; @@ -25,18 +25,18 @@ interface ILog { } const event_swap = 'event Swap(address indexed sender,address indexed to,uint256 amount0In,uint256 amount1In,uint256 amount0Out,uint256 amount1Out)' -const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { - const dailyVolume = createBalances() - const dailyFees = createBalances() +const fetch = async (options: FetchOptions): Promise => { + const dailyVolume = options.createBalances() + const dailyFees = options.createBalances() const chunkSize = 400; let currentOffset = 0; const allForSwaps: IForSwap[] = []; let unfinished = true; - if (timestamp > 1714743000) { + if (options.startOfDay > 1714743000) { while (unfinished) { - const forSwaps: IForSwap[] = (await api.call({ + const forSwaps: IForSwap[] = (await options.api.call({ target: sugar, params: [chunkSize, currentOffset], abi: abis.forSwaps, @@ -57,7 +57,7 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, const targets = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) - const logs: ILog[][] = await getLogs({ + const logs: ILog[][] = await options.getLogs({ targets, eventAbi: event_swap, flatten: false, @@ -73,10 +73,10 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }) }) - return { dailyVolume, timestamp, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } + return { dailyVolume, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } } else { - const forSwapsOld: IForSwap[] = (await api.call({ + const forSwapsOld: IForSwap[] = (await options.api.call({ target: sugarOld, abi: abisOld.forSwaps, chain: CHAIN.BASE, @@ -91,7 +91,7 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, const targets = forSwapsOld.map((forSwap: IForSwap) => forSwap.lp) - const logs: ILog[][] = await getLogs({ + const logs: ILog[][] = await options.getLogs({ targets, eventAbi: event_swap, flatten: false, @@ -107,10 +107,11 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }) }) - return { dailyVolume, timestamp, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } + return { dailyVolume, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } } } const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BASE]: { fetch: fetch as any, diff --git a/fees/aerodrome/index.ts b/fees/aerodrome/index.ts index 64337e8fb4..d73a9029e2 100644 --- a/fees/aerodrome/index.ts +++ b/fees/aerodrome/index.ts @@ -1,6 +1,5 @@ -import { ChainBlocks, FetchOptions, FetchResultFees, SimpleAdapter } from "../../adapters/types" +import { FetchOptions, FetchResultFees, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" -import * as sdk from "@defillama/sdk"; import { fees_bribes } from "./bribes"; import { getDexFees } from "../../helpers/dexVolumeLogs"; @@ -9,18 +8,6 @@ const abis: any = { "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" } -// defualt abi for multiCall is error some pools -const multiCall = async (callN: any) => { - return (await sdk.api.abi.multiCall({ - abi: callN.abi, - calls: callN.calls.map((pool: any) => ({ - target: pool, - })), - chain: CHAIN.BASE, - permitFailure: true, - })).output.map((r: any) => r.output).flat() -} - const fetch = async (fetchOptions: FetchOptions): Promise => { const chunkSize = 500; let currentOffset = 0; From 4debe930ccbbf6b1933f1fd335eae6920e5187cb Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 23 May 2024 15:34:42 +0000 Subject: [PATCH 0591/1590] fix version 2 --- dexs/velodrome-slipstream/index.ts | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/dexs/velodrome-slipstream/index.ts b/dexs/velodrome-slipstream/index.ts index 5bef8012b9..d5ebee94bf 100644 --- a/dexs/velodrome-slipstream/index.ts +++ b/dexs/velodrome-slipstream/index.ts @@ -1,5 +1,5 @@ -import { FetchOptions, FetchResult, FetchResultVolume, SimpleAdapter } from "../../adapters/types" -import { CHAIN } from "../../helpers/chains" +import { FetchOptions, FetchResultV2, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; const sugarOld = '0x3e532BC1998584fe18e357B5187897ad0110ED3A'; // old Sugar version doesn't properly support pagination const sugar = '0xdE2aE25FB984dd60C77dcF6489Be9ee6438eC195'; @@ -22,9 +22,9 @@ interface ILog { } const event_swap = 'event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)' -const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { - const dailyVolume = createBalances() - const dailyFees = createBalances() +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 const allForSwaps: IForSwap[] = []; @@ -32,14 +32,14 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, let sugarContract = sugar; // before the new Sugar is deployed, we must use the old Sugar contract, and make one large Sugar call - if (timestamp < 1715160600) { + if (options.startOfDay < 1715160600) { chunkSize = 1800; currentOffset = 0; sugarContract = sugarOld; } while (unfinished) { - const forSwaps: IForSwap[] = (await api.call({ + const forSwaps: IForSwap[] = (await options.api.call({ target: sugarContract, params: [chunkSize, currentOffset], // Slipstream launched after ~650 v2 pools were already created abi: abis.forSwaps, @@ -57,10 +57,10 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, currentOffset += chunkSize; allForSwaps.push(...forSwaps); } - - const targets = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) - const logs: ILog[][] = await getLogs({ + const targets: string[] = [...new Set(allForSwaps.map((forSwap: IForSwap) => forSwap.lp))] + + const logs: ILog[][] = await options.getLogs({ targets, eventAbi: event_swap, flatten: false, @@ -74,9 +74,10 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }) }) - return { dailyVolume, timestamp, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } + return { dailyVolume, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } } const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.OPTIMISM]: { fetch: fetch as any, From 2c3256fbab6a65cc77ab7932c4d09d2e14f061c6 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 23 May 2024 16:14:33 +0000 Subject: [PATCH 0592/1590] fix error adapter --- dexs/luaswap/index.ts | 2 +- dexs/velodrome-v2/v2.ts | 2 +- dexs/wagmi/index.ts | 7 ++++--- dexs/wagmi/wagmi.ts | 8 +++----- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/dexs/luaswap/index.ts b/dexs/luaswap/index.ts index 092b9b84df..330b972744 100644 --- a/dexs/luaswap/index.ts +++ b/dexs/luaswap/index.ts @@ -3,6 +3,6 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; // process.env.NODE_TLS_REJECT_UNAUTHORIZED='0' // TODO: disable TLS check only for this adapter, above line disables it for all adapters which is not ok export default univ2Adapter({ - [CHAIN.TOMOCHAIN]: "https://api.luaswap.org/subgraphs/name/phucngh/Luaswap3", + // [CHAIN.TOMOCHAIN]: "https://api.luaswap.org/subgraphs/name/phucngh/Luaswap3", [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/phucngh/luaswap" }, {}); diff --git a/dexs/velodrome-v2/v2.ts b/dexs/velodrome-v2/v2.ts index 3fd736010c..83085e5834 100644 --- a/dexs/velodrome-v2/v2.ts +++ b/dexs/velodrome-v2/v2.ts @@ -4,4 +4,4 @@ import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0xF1046053aa5682b4F9a81b5481394DA16BE5FF5a'; const swapEvent = 'event Swap(address indexed sender, address indexed to, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out)'; -export const fetchV2 = getDexVolumeExports({ swapEvent, factory: FACTORY_ADDRESS, chain: 'optimism', pairItemAbi: 'allPools', pairLengthAbi: 'allPoolsLength' }) \ No newline at end of file +export const fetchV2 = getDexVolumeExports({ swapEvent, factory: FACTORY_ADDRESS, chain: 'optimism', pairItemAbi: 'allPools', pairLengthAbi: 'allPoolsLength' }) diff --git a/dexs/wagmi/index.ts b/dexs/wagmi/index.ts index 49004ea9e5..c86f5f2028 100644 --- a/dexs/wagmi/index.ts +++ b/dexs/wagmi/index.ts @@ -3,17 +3,18 @@ import { CHAIN } from "../../helpers/chains"; import { fetchVolume } from "./wagmi"; const adapter: SimpleAdapter = { + version:2, adapter: { // [CHAIN.ERA]: { // fetch: fetchVolume(CHAIN.ERA), error: "Wagmi does not exist on Era", // start: 1681257600, // }, [CHAIN.FANTOM]: { - fetch: fetchVolume(CHAIN.FANTOM), + fetch: fetchVolume, start: 1681257600, }, [CHAIN.ETHEREUM]: { - fetch: fetchVolume(CHAIN.ETHEREUM), + fetch: fetchVolume, start: 18240112, }, // [CHAIN.METIS]: { @@ -21,7 +22,7 @@ const adapter: SimpleAdapter = { // start: 1702888970, // }, [CHAIN.KAVA]: { - fetch: fetchVolume(CHAIN.KAVA), + fetch: fetchVolume, start: 1694476800, }, }, diff --git a/dexs/wagmi/wagmi.ts b/dexs/wagmi/wagmi.ts index 25047cdfc1..8777e75c6b 100644 --- a/dexs/wagmi/wagmi.ts +++ b/dexs/wagmi/wagmi.ts @@ -4,6 +4,7 @@ const { request, gql } = require("graphql-request"); import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { getBlock } from "../../helpers/getBlock"; import { Chain } from "@defillama/sdk/build/general"; +import { FetchOptions } from "../../adapters/types"; export const LINKS: { [key: string]: any } = { [CHAIN.ERA]: { @@ -81,16 +82,13 @@ const getData = async (chain: Chain, timestamp: number) => { }; }; -export const fetchVolume = (chain: string) => { - return async (timestamp: number) => { - const data = await getData(chain, timestamp); - +export const fetchVolume = async (options: FetchOptions) => { + const data = await getData(options.chain, options.startOfDay); return { totalVolume: data.totalVolume, dailyVolume: data.dailyVolume, timestamp: data.timestamp, }; - }; }; export const fetchFee = (chain: string) => { From c3cfdc3cb5377aa6c337842e2af0117919680f28 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 23 May 2024 16:26:42 +0000 Subject: [PATCH 0593/1590] fix joe v2 --- dexs/joe-v2.1/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index 5859561aa1..259fde2cda 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -47,15 +47,14 @@ const pools: TPool = { ] } -const fetch: any = async (timestamp: number, _, { api, chain, getLogs, createBalances, }: FetchOptions) => { - const dailyVolume = createBalances(); - const lpTokens = pools[chain] +const fetch: any = async (options: FetchOptions) => { + const dailyVolume = options.createBalances(); + const lpTokens = pools[options.chain] const [tokens0, tokens1] = await Promise.all( - ['address:getTokenX', 'address:getTokenY'].map((abi: string) => - api.multiCall({ abi, calls: lpTokens, }) ) + ['address:getTokenX', 'address:getTokenY'].map((abi: string) => options.api.multiCall({abi,calls: lpTokens,})) ); - const logs: any[][] = (await getLogs({ + const logs: any[][] = (await options.getLogs({ targets: lpTokens, eventAbi: event_swap, flatten: false, @@ -71,10 +70,11 @@ const fetch: any = async (timestamp: number, _, { api, chain, getLogs, createBal dailyVolume.add(token1, amountInX); }) }); - return { dailyVolume, timestamp, }; + return { dailyVolume, }; } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch, start: 1682121600, }, [CHAIN.BSC]: { fetch, start: 1681084800, }, From 00c0b079f7bbdaa451cdf3d0d117fc4356368d0a Mon Sep 17 00:00:00 2001 From: Javokhir Artykov Date: Fri, 24 May 2024 00:17:14 +0500 Subject: [PATCH 0594/1590] feat(chain): new chain for azuro added --- fees/azuro/index.ts | 207 ++++++++++++++++++++------------------------ helpers/chains.ts | 3 +- 2 files changed, 97 insertions(+), 113 deletions(-) diff --git a/fees/azuro/index.ts b/fees/azuro/index.ts index 4ec5eea09a..c347d13df3 100644 --- a/fees/azuro/index.ts +++ b/fees/azuro/index.ts @@ -1,150 +1,133 @@ -import {Adapter, ChainEndpoints, FetchResultFees} from "../../adapters/types"; -import {CHAIN} from "../../helpers/chains"; -import {Bet, BetResult} from "./types"; -import {Chain} from "@defillama/sdk/build/general"; -import {request, gql} from "graphql-request"; -import {getTimestampAtStartOfDayUTC} from "../../utils/date"; +import { Adapter, ChainEndpoints, FetchResultFees } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { Bet, BetResult } from "./types"; +import { Chain } from "@defillama/sdk/build/general"; +import { request, gql } from "graphql-request"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; -const endpoints = { +const endpoints: ChainEndpoints = { [CHAIN.POLYGON]: "https://thegraph.azuro.org/subgraphs/name/azuro-protocol/azuro-api-polygon-v3", [CHAIN.XDAI]: "https://thegraph.azuro.org/subgraphs/name/azuro-protocol/azuro-api-gnosis-v3", [CHAIN.ARBITRUM]: "https://thegraph.azuro.org/subgraphs/name/azuro-protocol/azuro-api-arbitrum-one-v3", - [CHAIN.LINEA]: "https://thegraph.bookmaker.xyz/subgraphs/name/azuro-protocol/azuro-api-linea-v3" -} -type IStart = { - [s: string | Chain]: number -} -const getStartTimestamp: IStart = { + [CHAIN.LINEA]: "https://thegraph.bookmaker.xyz/subgraphs/name/azuro-protocol/azuro-api-linea-v3", + [CHAIN.CHILIZ]: "https://thegraph.bookmaker.xyz/subgraphs/name/azuro-protocol/azuro-api-chiliz-v3" +}; + +const getStartTimestamp: { [chain: string]: number } = { [CHAIN.POLYGON]: 1675209600, [CHAIN.XDAI]: 1654646400, [CHAIN.ARBITRUM]: 1686009600, - [CHAIN.LINEA]: 1691452800 -} - -const graphs = (graphUrls: ChainEndpoints) => { - return (chain: Chain) => { - return async (timestamp: number): Promise => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp) - const fromTimestamp = todaysTimestamp - 60 * 60 * 24 - const toTimestamp = todaysTimestamp - const bets: Bet[] = [] - const total_bets: Bet[] = [] - let skip = 0 - - while (true) { - const graphQuery = gql` - { - bets( - where: { - status: Resolved, - _isFreebet: false - resolvedBlockTimestamp_gte: ${fromTimestamp}, - resolvedBlockTimestamp_lte: ${toTimestamp}, - } - first: 1000, - skip: ${skip} - ) { - amount - odds - result - } - } - `; - const graphRes = await request(graphUrls[chain], graphQuery); - - bets.push(...graphRes.bets) - skip += 1000 + [CHAIN.LINEA]: 1691452800, + [CHAIN.CHILIZ]: 1716422400 +}; - if (graphRes.bets.length < 1000) break +const fetchBets = async (url: string, from: number, to: number, skip: number, live = false): Promise => { + const query = gql` + { + ${live ? 'liveBets' : 'bets'}( + where: { + status: Resolved, + _isFreebet: false, + resolvedBlockTimestamp_gte: ${from}, + resolvedBlockTimestamp_lte: ${to} + }, + first: 1000, + skip: ${skip} + ) { + amount + odds + result } + } + `; + const response = await request(url, query); + return response[live ? 'liveBets' : 'bets']; +}; - let skip_total = 0 - while (true) { - const graphQuery = gql` - { - bets( - where: { - status: Resolved, - _isFreebet: false - resolvedBlockTimestamp_gte: ${getStartTimestamp[chain]}, - resolvedBlockTimestamp_lte: ${toTimestamp}, - } - first: 1000, - skip: ${skip_total} - ) { - amount - odds - result - } - } - `; - const graphRes = await request(graphUrls[chain], graphQuery); - - total_bets.push(...graphRes.bets) - skip_total += 1000 - if (graphRes.bets.length < 1000) break - } - const totalBetAmount = total_bets.reduce((e: number, {amount}) => e+Number(amount), 0); - const totalWonAmount = total_bets.filter(({result}) => result === BetResult.Won) - .reduce((e: number, {amount, odds}) => e+Number(amount) * Number(odds), 0); - const totalFees = totalBetAmount - totalWonAmount; - - const dailyBetAmount = bets.reduce((e: number, {amount}) => e+Number(amount), 0) - const dailyWonAmount = bets.filter(({result}) => result === BetResult.Won) - .reduce((e: number, {amount, odds}) => e+Number(amount) * Number(odds), 0) +const fetchAllBets = async (url: string, from: number, to: number, live = false): Promise => { + let bets: Bet[] = []; + let skip = 0; + while (true) { + const newBets = await fetchBets(url, from, to, skip, live); + bets = [...bets, ...newBets]; + if (newBets.length < 1000) break; + skip += 1000; + } + return bets; +}; - const totalPoolProfit = dailyBetAmount - dailyWonAmount; - const dailyFees = totalPoolProfit; - const dailyRevenue = totalPoolProfit; +const calculateAmounts = (bets: Bet[]) => { + const totalBetAmount = bets.reduce((sum, { amount }) => sum + Number(amount), 0); + const totalWonAmount = bets + .filter(({ result }) => result === BetResult.Won) + .reduce((sum, { amount, odds }) => sum + Number(amount) * Number(odds), 0); + return { totalBetAmount, totalWonAmount }; +}; +const graphs = (graphUrls: ChainEndpoints) => { + return (chain: Chain) => { + return async (timestamp: number): Promise => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); + const fromTimestamp = todaysTimestamp - 60 * 60 * 24; + const toTimestamp = todaysTimestamp; + + const [bets, totalBets] = await Promise.all([ + fetchAllBets(graphUrls[chain], fromTimestamp, toTimestamp, false), + fetchAllBets(graphUrls[chain], getStartTimestamp[chain], toTimestamp, false), + fetchAllBets(graphUrls[chain], fromTimestamp, toTimestamp, true), + fetchAllBets(graphUrls[chain], getStartTimestamp[chain], toTimestamp, true) + ]); + + const { totalBetAmount: dailyBetAmount, totalWonAmount: dailyWonAmount } = calculateAmounts(bets); + const { totalBetAmount, totalWonAmount } = calculateAmounts(totalBets); + + const totalFees = totalBetAmount - totalWonAmount; + const dailyPoolProfit = dailyBetAmount - dailyWonAmount; + return { timestamp, - dailyFees: dailyFees.toString(), - dailyRevenue: dailyRevenue.toString(), + dailyFees: dailyPoolProfit.toString(), + dailyRevenue: dailyPoolProfit.toString(), totalFees: totalFees.toString(), totalRevenue: totalFees.toString(), }; - } - } -} + }; + }; +}; const methodology = { Fees: "Total pools profits (equals total bets amount minus total won bets amount)", Revenue: "Total pools profits (equals total bets amount minus total won bets amount)", -} +}; const adapter: Adapter = { adapter: { [CHAIN.POLYGON]: { fetch: graphs(endpoints)(CHAIN.POLYGON), - start: 1675209600, - meta: { - methodology - } + start: getStartTimestamp[CHAIN.POLYGON], + meta: { methodology }, }, [CHAIN.XDAI]: { fetch: graphs(endpoints)(CHAIN.XDAI), - start: 1654646400, - meta: { - methodology - } + start: getStartTimestamp[CHAIN.XDAI], + meta: { methodology }, }, [CHAIN.ARBITRUM]: { fetch: graphs(endpoints)(CHAIN.ARBITRUM), - start: 1686009600, - meta: { - methodology - } + start: getStartTimestamp[CHAIN.ARBITRUM], + meta: { methodology }, }, [CHAIN.LINEA]: { fetch: graphs(endpoints)(CHAIN.LINEA), - start: 1691452800, - meta: { - methodology - } + start: getStartTimestamp[CHAIN.LINEA], + meta: { methodology }, }, - - } -} + [CHAIN.CHILIZ]: { + fetch: graphs(endpoints)(CHAIN.CHILIZ), + start: getStartTimestamp[CHAIN.CHILIZ], + meta: { methodology }, + }, + }, +}; export default adapter; diff --git a/helpers/chains.ts b/helpers/chains.ts index 794f76100f..4dea93a823 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -148,7 +148,8 @@ export enum CHAIN { LYRA = "lyra", BITLAYER = "bitlayer", XLAYER = "xlayer", - MERLIN = "merlin" + MERLIN = "merlin", + CHILIZ = "chiliz" } // Don´t use From c7b237876be69067ad5ee4206daeded94ae2420b Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Fri, 24 May 2024 10:45:59 +0400 Subject: [PATCH 0595/1590] Add ston.fi daily volume adapter --- dexs/ston/index.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 dexs/ston/index.ts diff --git a/dexs/ston/index.ts b/dexs/ston/index.ts new file mode 100644 index 0000000000..173471c19b --- /dev/null +++ b/dexs/ston/index.ts @@ -0,0 +1,30 @@ +import postURL from "../../utils/fetchURL" +import { CHAIN } from "../../helpers/chains"; +import { FetchOptions } from "../../adapters/types"; + +const endpoint = "https://api.ston.fi/v1/stats/dex?" + + +const fetch = async (options: FetchOptions) => { + const startTime = new Date(options.startTimestamp * 1000).toISOString().split(".")[0] + const endTime = new Date(options.endTimestamp * 1000).toISOString().split(".")[0] + const res = await postURL(`${endpoint}since=${startTime}&until=${endTime}`) + + return { + dailyVolume: parseInt(res['stats']['volume_usd']), + timestamp: options.startTimestamp, + }; +}; + + +const adapter: any = { + version: 2, + adapter: { + [CHAIN.TON]: { + fetch, + start: 1668801600, + }, + }, +}; + +export default adapter; From ef76db6176c15a937193e61042bc92194a0c6162 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 24 May 2024 08:48:36 +0000 Subject: [PATCH 0596/1590] fix version chainlink --- fees/chainlink-vrf-v1.ts | 85 +++++++++++++--------------------------- 1 file changed, 27 insertions(+), 58 deletions(-) diff --git a/fees/chainlink-vrf-v1.ts b/fees/chainlink-vrf-v1.ts index 60d1e182da..58d8ca9fc4 100644 --- a/fees/chainlink-vrf-v1.ts +++ b/fees/chainlink-vrf-v1.ts @@ -1,10 +1,6 @@ -import { SimpleAdapter, ChainBlocks, FetchResultFees, IJSON } from "../adapters/types"; +import { SimpleAdapter, FetchOptions, FetchResultV2 } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../utils/date"; -import { getPrices } from "../utils/prices"; -import { getBlock } from "../helpers/getBlock"; -import { Chain, getProvider } from "@defillama/sdk/build/general"; -import * as sdk from "@defillama/sdk"; +import { Chain } from "@defillama/sdk/build/general"; import getTxReceipts from "../helpers/getTxReceipts"; const topic0_v1 = '0xa2e7a402243ebda4a69ceeb3dfb682943b7a9b3ac66d6eefa8db65894009611c'; @@ -36,55 +32,30 @@ interface ITx { transactionHash: string; topics: string[]; } -type IFeeV2 = { - [l: string | Chain]: number; -} -const feesV2: IFeeV2 = { - [CHAIN.ETHEREUM]: 0.25, - [CHAIN.BSC]: 0.005, - [CHAIN.POLYGON]: 0.0005, - [CHAIN.FANTOM]: 0.0005, - [CHAIN.AVAX]: 0.005, -} - -const feesV1: IFeeV2 = { - [CHAIN.ETHEREUM]: 2, - [CHAIN.BSC]: 0.2, - [CHAIN.POLYGON]: 0.0001, -} type IGasTokenId = { [l: string | Chain]: string; } const gasTokenId: IGasTokenId = { - [CHAIN.ETHEREUM]: "coingecko:ethereum", - [CHAIN.BSC]: "coingecko:binancecoin", - [CHAIN.POLYGON]: "coingecko:matic-network", - [CHAIN.FANTOM]: "coingecko:fantom", - [CHAIN.AVAX]: "coingecko:avalanche-2", - [CHAIN.ARBITRUM]: "coingecko:ethereum", - [CHAIN.OPTIMISM]: "coingecko:ethereum" + [CHAIN.ETHEREUM]: "ethereum", + [CHAIN.BSC]: "binancecoin", + [CHAIN.POLYGON]: "matic-network", + [CHAIN.FANTOM]: "fantom", + [CHAIN.AVAX]: "avalanche-2", + [CHAIN.ARBITRUM]: "ethereum", + [CHAIN.OPTIMISM]: "ethereum" } -const fetch = (chain: Chain, version: number) => { - return async (timestamp: number, _: ChainBlocks): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - const fromBlock = (await getBlock(fromTimestamp, chain, {})); - const toBlock = (await getBlock(toTimestamp, chain, {})); - const logs_1: ITx[] = (await sdk.getEventLogs({ +const fetch = async (options: FetchOptions): Promise => { + const version = 1; + const chain = options.chain + const logs_1: ITx[] = (await options.getLogs({ target: version === 1 ? address_v1[chain] : address_v2[chain], - fromBlock: fromBlock, - toBlock: toBlock, topics: version === 1 ? [topic0_v1] : [topic0_v2], - chain: chain })).map((e: any) => { return { data: e.data.replace('0x', ''), transactionHash: e.transactionHash } as ITx }); - const logs_2: ITx[] = (await sdk.getEventLogs({ + const logs_2: ITx[] = (await options.getLogs({ target: version === 1 ? address_v1[chain] : address_v2[chain], - fromBlock: fromBlock, - toBlock: toBlock, topics: version === 1 ? [topic1_v1] : [topic1_v2], - chain: chain })).map((e: any) => { return { data: e.data.replace('0x', ''), transactionHash: e.transactionHash } as ITx }); const request_fees: any[] = logs_2.map((e: ITx) => { @@ -103,43 +74,41 @@ const fetch = (chain: Chain, version: number) => { return fees?.fees || 0; }).reduce((a: number, b: number) => a+b, 0) - const tx_hash: string[] = [...new Set([...logs_1].map((e: ITx) => e.transactionHash).filter(e => !exclude.includes(e)))] const txReceipt: number[] = chain === CHAIN.OPTIMISM ? [] : (await getTxReceipts(chain, tx_hash, { cacheKey: 'chainlink-vrf-v1' })) .map((e: any) => { const amount = (Number(e?.gasUsed || 0) * Number(e?.effectiveGasPrice || 0)) / 10 ** 18 return amount }) - const linkAddress = "coingecko:chainlink"; + const linkAddress = "chainlink"; const gasToken = gasTokenId[chain]; - const prices = await getPrices([linkAddress, gasToken], timestamp); + const dailyGasUsd = options.createBalances() + const dailyFees = options.createBalances() const dailyGas = txReceipt.reduce((a: number, b: number) => a + b, 0); - const linkPrice = prices[linkAddress].price - const gagPrice = prices[gasToken].price - const dailyGasUsd = dailyGas * gagPrice; - const dailyFees =(fees_amount * linkPrice); - const dailyRevenue = dailyFees - dailyGasUsd; + dailyGasUsd.addCGToken(gasToken, dailyGas); + dailyFees.addCGToken(linkAddress, fees_amount); + const dailyRevenue = dailyFees.clone() + dailyRevenue.subtract(dailyGasUsd) return { - dailyFees: dailyFees.toString(), - dailyRevenue: chain === CHAIN.OPTIMISM ? undefined : dailyRevenue.toString(), - timestamp + dailyFees: dailyFees, + dailyRevenue: dailyRevenue, } - } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { - fetch: fetch(CHAIN.ETHEREUM, 1), + fetch: fetch, start: 1675382400, }, [CHAIN.BSC]: { - fetch: fetch(CHAIN.BSC, 1), + fetch: fetch, start: 1675382400, }, [CHAIN.POLYGON]: { - fetch: fetch(CHAIN.POLYGON, 1), + fetch: fetch, start: 1675382400, } } From 2f742010c608caef5743199f8811624ff15fc0db Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 24 May 2024 08:56:17 +0000 Subject: [PATCH 0597/1590] add flag run current --- dexs/drift-protocol/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index 4aa357204f..c2486331d5 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -1,6 +1,7 @@ import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; import { queryDune } from "../../helpers/dune"; +import { BreakdownAdapter } from "../../adapters/types"; const DAILY_VOL_ENDPOINT = "https://mainnet-beta.api.drift.trade/stats/24HourVolume"; @@ -72,7 +73,7 @@ async function fetch(type: "perp" | "spot") { } } -const adapter = { +const adapter: BreakdownAdapter = { breakdown: { swap: { [CHAIN.SOLANA]: { @@ -89,6 +90,7 @@ const adapter = { }, }, }, + isExpensiveAdapter: true, }; export default adapter; From 5eed85dccea37467495f39e0dd6211ab4d841902 Mon Sep 17 00:00:00 2001 From: Maxence Raballand Date: Fri, 24 May 2024 11:31:15 +0200 Subject: [PATCH 0598/1590] chore: change from api call to getLogs methodology --- dexs/mangrove/index.ts | 109 ++++++++++++++++++++++++++++------------- 1 file changed, 75 insertions(+), 34 deletions(-) diff --git a/dexs/mangrove/index.ts b/dexs/mangrove/index.ts index bc4831f4bb..387daf307b 100644 --- a/dexs/mangrove/index.ts +++ b/dexs/mangrove/index.ts @@ -1,47 +1,88 @@ -import { Balances } from "@defillama/sdk"; -import { Adapter, FetchOptions, FetchResultV2, FetchResultVolume } from "../../adapters/types"; +import type { ChainApi } from "@defillama/sdk"; +import type { + Adapter, + FetchOptions, + FetchResultV2, +} from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; -const api = "https://data.mangrove.exchange/volumes-per-pair/total/all"; +type ChainConfig = { + core: string; +}; + +const mangrove: Record = { + [CHAIN.BLAST]: { + core: "0xb1a49C54192Ea59B233200eA38aB56650Dfb448C", + }, +}; + +const abi = { + OfferSuccess: + "event OfferSuccess(bytes32 indexed olKeyHash, address indexed taker, uint indexed id, uint takerWants, uint takerGives)", + OfferSuccessWithPosthookData: + "event OfferSuccessWithPosthookData(bytes32 indexed olKeyHash,address indexed taker,uint indexed id,uint takerWants,uint takerGives,bytes32 posthookData)", + olKeys: + "function olKeys(bytes32 olKeyHash) external view returns (address outbound_tkn,address inbound_tkn,uint tickSpacing)", +}; + +async function getToken( + map: Map, + olKeyHash: string, + api: ChainApi, + chain: string, +): Promise { + let token = map.get(olKeyHash.toLowerCase()); + if (token) { + return token; + } + const apiToken = await api.call({ + abi: abi.olKeys, + params: [olKeyHash], + target: mangrove[chain].core, + }); + token = apiToken[0] as string; + map.set(olKeyHash.toLowerCase(), token); + return token; +} + +async function fetch({ + getLogs, + api, + chain, + createBalances, +}: FetchOptions): Promise { + const dailyVolume = createBalances(); + const olKeys = new Map(); + const logs = await Promise.all([ + getLogs({ + eventAbi: abi.OfferSuccessWithPosthookData, + target: mangrove[chain].core, + }), + getLogs({ + eventAbi: abi.OfferSuccess, + target: mangrove[chain].core, + }), + ]).then((r) => r.flat()); + for (const log of logs) { + const olKeyHash = log.olKeyHash; + const token = await getToken(olKeys, olKeyHash, api, chain); + dailyVolume.add(token, log.takerWants); + } + return { + dailyVolume, + }; +} const adapter: Adapter = { version: 2, - adapter: { - blast: { + [CHAIN.BLAST]: { meta: { methodology: { dailyVolume: "Sum of all offers taken in the last 24hrs", }, }, - fetch: async (options: FetchOptions): Promise => { - const startBlock = await options.getStartBlock(); - const endBlock = await options.getEndBlock(); - - const url = `${api}/${startBlock}/${endBlock}`; - - const dailyVolume = options.createBalances() as Balances; - - const data = await fetch(url).then((res) => res.json()); - - const markets = Object.keys(data).map((key) => { - const [base, quote] = key.split("-"); - const { totalValueInBase, totalValueInQuote } = data[key][0]; - return { - base, - quote, - totalValueInBase, - totalValueInQuote, - }; - }); - - for (const market of markets) { - const { base, quote, totalValueInBase, totalValueInQuote } = market; - dailyVolume.add(base, totalValueInBase); - // dailyVolume.add(quote, totalValueInQuote); - } - - return { dailyVolume }; - }, + fetch, start: 1708992000, }, }, From f59db72b3dd9cc4050092d6b72ffafbd4bdf48b1 Mon Sep 17 00:00:00 2001 From: yfxcom Date: Fri, 24 May 2024 18:12:26 +0800 Subject: [PATCH 0599/1590] add YFX V4 --- dexs/yfx-v4/index.ts | 91 ++++++++++++++++++++++++++++++++ fees/yfx-v4.ts | 76 ++++++++++++++++++++++++++ users/routers/routerAddresses.ts | 3 +- 3 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 dexs/yfx-v4/index.ts create mode 100644 fees/yfx-v4.ts diff --git a/dexs/yfx-v4/index.ts b/dexs/yfx-v4/index.ts new file mode 100644 index 0000000000..bcfa216b98 --- /dev/null +++ b/dexs/yfx-v4/index.ts @@ -0,0 +1,91 @@ +import request, { gql } from "graphql-request"; +import { Fetch, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const chains = [CHAIN.ARBITRUM] + +const endpoints: { [key: string]: string } = { + [CHAIN.ARBITRUM]: "https://graph-v4.yfx.com/yfx_v4" +} + +const historicalDailyData = gql` + query marketInfoDailies($dayTime: String!){ + marketInfoDailies(where: {dayTime: $dayTime}) { + liqVolUSD + totalVolUSD + } + } +` +const historicalTotalData = gql` + query markets { + markets { + # liqVol + totalVolUSD + } + } +` + +interface IGraphResponse { + marketInfoDailies: Array<{ + liqVolUSD: string, + totalVolUSD: string, + }> +} +interface IGraphResponse { + markets: Array<{ + liqVolUSD: string, + totalVolUSD: string, + }> +} + + +const getFetch = (chain: string): Fetch => async (timestamp: any) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp.toTimestamp * 1000))) + + const dailyData: IGraphResponse = await request(endpoints[chain], historicalDailyData, { + dayTime: String(dayTimestamp), + }) + + let dailyVolume = 0; + for(let i in dailyData.marketInfoDailies) { + dailyVolume += parseFloat(dailyData.marketInfoDailies[i].totalVolUSD) + } + + const totalData: IGraphResponse = await request(endpoints[chain], historicalTotalData, {}) + let totalVolume = 0; + for(let i in totalData.markets) { + totalVolume += parseFloat(totalData.markets[i].totalVolUSD) + } + + return { + timestamp: dayTimestamp, + dailyVolume: dailyVolume.toString(), + totalVolume: totalVolume.toString() + } +} + +const getStartTimestamp = async (chain: string) => { + const startTimestamps: { [chain: string]: number } = { + [CHAIN.ARBITRUM]: 1713916800, + } + return startTimestamps[chain] +} + + +const volume = chains.reduce( + (acc, chain) => ({ + ...acc, + [chain]: { + fetch: getFetch(chain), + start: async () => getStartTimestamp(chain) + }, + }), + {} +); + +const adapter: SimpleAdapter = { + version: 2, + adapter: volume +}; +export default adapter; diff --git a/fees/yfx-v4.ts b/fees/yfx-v4.ts new file mode 100644 index 0000000000..cb7bf618a4 --- /dev/null +++ b/fees/yfx-v4.ts @@ -0,0 +1,76 @@ +import { Adapter } from "../adapters/types"; +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: { [key: string]: string } = { + [CHAIN.ARBITRUM]: "https://graph-v4.yfx.com/yfx_v4" +} + +const methodology = { + Fees: "Fees from open/close position (0.05%) and remove liquidity fees (0%)", + UserFees: "Fees from open/close position (0.05%)", +} + +const graphs = (graphUrls: ChainEndpoints) => { + return (chain: Chain) => { + return async (timestamp: any) => { + const time = timestamp.toTimestamp; + const todaysTimestamp = getTimestampAtStartOfDayUTC(time) + + const marketData = gql` + { + marketInfoDailies(where: {dayTime: "${todaysTimestamp}"}) { + totalFeeUSD + totalCommissionUSD + totalDiscountUSD + } + }` + const poolData = gql` + { + poolDailyDatas(where: {dayTime: "${todaysTimestamp}"}) { + removeLiquidityFeeUSD + } + } + ` + + + const marketFees = await request(graphUrls[chain], marketData); + const poolFees = await request(graphUrls[chain], poolData); + + let swapFee = 0 + let liquidityFee = 0 + for (let i in marketFees.marketInfoDailies) { + swapFee += parseFloat(marketFees.marketInfoDailies[i].totalFeeUSD); + } + + for (let i in poolFees.poolDataDailyDatas) { + liquidityFee += parseFloat(poolFees.poolDataDailyDatas[i].removeLiquidityFeeUSD) + } + + return { + time: time.toString(), + dailyFees: (swapFee+liquidityFee).toString(), + dailyUserFees: swapFee.toString(), + }; + }; + }; +}; + + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: graphs(endpoints)(CHAIN.ARBITRUM), + start: async () => 1713916800, + meta: { + methodology + } + }, + } +} + +export default adapter; diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index b396fdb147..3369389ac5 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -8,7 +8,8 @@ export default ([ "name":"YFX", "addresses":{ "arbitrum":[ - "0xebb4871d1be1262C8bd1aa7dfc4C047483f02028" + "0xebb4871d1be1262C8bd1aa7dfc4C047483f02028", // yfx-v3 + "0xcC619251bB94b7605A7Ea7391fEB7D18C32552D5", // yfx-v4 ] } }, From 1dac4edcad47ea1dc376040a75b7db415ff3e039 Mon Sep 17 00:00:00 2001 From: 0xBluePingu <156801910+0xBluePingu@users.noreply.github.com> Date: Fri, 24 May 2024 14:54:57 +0200 Subject: [PATCH 0600/1590] update subgraph --- dexs/pingu/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/pingu/index.ts b/dexs/pingu/index.ts index e2217aacf2..bee60c00ba 100644 --- a/dexs/pingu/index.ts +++ b/dexs/pingu/index.ts @@ -11,7 +11,7 @@ interface IGraph { id: string; } -const URL = 'https://api.studio.thegraph.com/query/43986/pingu-sg/0.1.0'; +const URL = 'https://api.studio.thegraph.com/query/43986/pingu-sg/0.1.1'; const fetch = async (timestamp: number): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); const chain = CHAIN.ARBITRUM; From 859f7a7bbeccffd55f8abd69874859c6ad6ab801 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 24 May 2024 15:59:44 +0000 Subject: [PATCH 0601/1590] fix dodo --- dexs/dodo/index.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/dexs/dodo/index.ts b/dexs/dodo/index.ts index 6093ee52e8..e6dfdf8728 100644 --- a/dexs/dodo/index.ts +++ b/dexs/dodo/index.ts @@ -118,12 +118,15 @@ const abis = { const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain }: FetchOptions) => { const dailyVolume = createBalances() - - const logs = await getLogs({ targets: config[chain].DODOFeeRouteProxys, eventAbi: abis.OrderHistory, }) - logs.forEach((log: any) => { - dailyVolume.add(log.toToken, log.returnAmount) - }) - return { timestamp, dailyVolume } + try { + const logs = await getLogs({ targets: config[chain].DODOFeeRouteProxys, eventAbi: abis.OrderHistory, }) + logs.forEach((log: any) => { + dailyVolume.add(log.toToken, log.returnAmount) + }) + return { timestamp, dailyVolume } + } catch (e) { + return { timestamp, dailyVolume } + } }; const adapter_agg: any = { From 043c9d406fcb1eb91a20c6a211e773e8fabb5c5b Mon Sep 17 00:00:00 2001 From: GabrielReFintech Date: Fri, 24 May 2024 13:52:00 -0300 Subject: [PATCH 0602/1590] Feat: Viri fees & volume adapter --- dexs/Viridian/index.ts | 17 +++++++++ fees/Viridian/bribes.ts | 76 +++++++++++++++++++++++++++++++++++++++++ fees/Viridian/index.ts | 29 ++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 dexs/Viridian/index.ts create mode 100644 fees/Viridian/bribes.ts create mode 100644 fees/Viridian/index.ts diff --git a/dexs/Viridian/index.ts b/dexs/Viridian/index.ts new file mode 100644 index 0000000000..7ea6b1ef78 --- /dev/null +++ b/dexs/Viridian/index.ts @@ -0,0 +1,17 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; + +const FACTORY_ADDRESS = '0xb54a83cfEc6052E05BB2925097FAff0EC22893F3' + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.CORE]: { + fetch: async () => await getDexVolumeExports({ chain: CHAIN.CORE, factory: FACTORY_ADDRESS }), + start: 1715904000, + }, + } +}; + +export default adapter; diff --git a/fees/Viridian/bribes.ts b/fees/Viridian/bribes.ts new file mode 100644 index 0000000000..bdd436ea7c --- /dev/null +++ b/fees/Viridian/bribes.ts @@ -0,0 +1,76 @@ +import * as sdk from "@defillama/sdk"; +import { ethers } from "ethers"; +import { CHAIN } from "../../helpers/chains"; +import { FetchOptions } from "../../adapters/types"; + +const event_notify_reward = 'event NotifyReward(address indexed from,address indexed reward,uint256 indexed epoch,uint256 amount)'; +const event_geuge_created = 'event GaugeCreated(address indexed poolFactory,address indexed votingRewardsFactory,address indexed gaugeFactory,address pool,address bribeVotingReward,address feeVotingReward,address gauge,address creator)' + +const topic0_geuge_created = '0xef9f7d1ffff3b249c6b9bf2528499e935f7d96bb6d6ec4e7da504d1d3c6279e1'; +const contract_interface = new ethers.Interface([ + event_notify_reward, + event_geuge_created +]); + +interface ILog { + data: string; + transactionHash: string; + topics: string[]; +} + +interface IBribes { + token: string; + amount: number; +} + + +export const getBribes = async (options: FetchOptions): Promise => { + try { + const dailyBribesRevenue = options.createBalances(); + const fromBlock = await options.getFromBlock(); + const toBlock = await options.getToBlock(); + const voter = '0xbB7855fA0Ad297EC6e4aa1d4BE30f148447eD68c'; + const logs_geuge_created: ethers.EventLog[] = (await sdk.api.util.getLogs({ + target: voter, + fromBlock: 14188569, //Block number of the contract's creation + toBlock: toBlock, + topic: '', + topics: [topic0_geuge_created], + chain: CHAIN.CORE, + keys: [] + })).output; + const bribes_contract: string[] = logs_geuge_created.map((e: ethers.EventLog) => { + const value = contract_interface.parseLog(e as any); + return value?.args.bribeVotingReward; + }) + + const logs: ILog[] = (await Promise.all(bribes_contract.map((address: string) => sdk.api.util.getLogs({ + target: address, + topic: '', + toBlock: toBlock, + fromBlock: fromBlock, + keys: [], + chain: CHAIN.CORE, + topics: ['0x52977ea98a2220a03ee9ba5cb003ada08d394ea10155483c95dc2dc77a7eb24b'] + })))) + .map((p: any) => p) + .map((a: any) => a.output).flat(); + + const logs_bribes = logs.map((e: ILog) => { + const value = contract_interface.parseLog(e) + return { + token: value?.args.reward, + amount: Number(value?.args.amount._hex) + } as IBribes + }) + logs_bribes.forEach((e: IBribes) => { + dailyBribesRevenue.add(e.token, e.amount) + }); + return { + dailyBribesRevenue + }; + } catch (error) { + console.error(error); + throw error; + } +} \ No newline at end of file diff --git a/fees/Viridian/index.ts b/fees/Viridian/index.ts new file mode 100644 index 0000000000..37f53ea17c --- /dev/null +++ b/fees/Viridian/index.ts @@ -0,0 +1,29 @@ +import { Adapter, FetchOptions, FetchResultV2 } from '../../adapters/types'; +import { CHAIN } from '../../helpers/chains'; +import { getBribes } from './bribes'; +import { exportDexVolumeAndFees } from '../../helpers/dexVolumeLogs'; + +const FACTORY_ADDRESS = '0xb54a83cfEc6052E05BB2925097FAff0EC22893F3'; + +const getFees = async (options: FetchOptions): Promise => { + const v1Results = await exportDexVolumeAndFees({ chain: CHAIN.CORE, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options) + const bribesResult = await getBribes(options); + v1Results.dailyBribesRevenue = bribesResult.dailyBribesRevenue; + return { + dailyFees: v1Results.dailyFees, + dailyRevenue: v1Results.dailyRevenue, + dailyHoldersRevenue: v1Results.dailyFees, + dailyBribesRevenue: v1Results.dailyBribesRevenue, + } +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.CORE]: { + fetch: getFees, + start: 1715904000 + }, + }, +}; +export default adapter; \ No newline at end of file From 32d5fa41ffcef8fc2aea37eafa1d6e8ed522c0be Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 25 May 2024 02:58:17 +0000 Subject: [PATCH 0603/1590] add log --- dexs/joe-v2.1/index.ts | 47 +++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index 259fde2cda..34c7a43dc4 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -1,4 +1,4 @@ -import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const event_swap = 'event Swap(address indexed sender,address indexed to,uint24 id,bytes32 amountsIn,bytes32 amountsOut,uint24 volatilityAccumulator,bytes32 totalFees,bytes32 protocolFees)'; @@ -47,30 +47,35 @@ const pools: TPool = { ] } -const fetch: any = async (options: FetchOptions) => { +const fetch: FetchV2 = async (options: FetchOptions): Promise => { const dailyVolume = options.createBalances(); const lpTokens = pools[options.chain] - const [tokens0, tokens1] = await Promise.all( - ['address:getTokenX', 'address:getTokenY'].map((abi: string) => options.api.multiCall({abi,calls: lpTokens,})) - ); + try { + const [tokens0, tokens1] = await Promise.all( + ['address:getTokenX', 'address:getTokenY'].map((abi: string) => options.api.multiCall({abi,calls: lpTokens })) + ); - const logs: any[][] = (await options.getLogs({ - targets: lpTokens, - eventAbi: event_swap, - flatten: false, - })) + const logs: any[][] = (await options.getLogs({ + targets: lpTokens, + eventAbi: event_swap, + flatten: false, + })) - logs.map((log: any, index: number) => { - const token0 = tokens0[index]; - const token1 = tokens1[index]; - log.forEach((i: any) => { - const amountInX = Number('0x' + '0'.repeat(32) + i.amountsIn.replace('0x', '').slice(0, 32)) - const amountInY = Number('0x' + '0'.repeat(32) + i.amountsIn.replace('0x', '').slice(32, 64)) - dailyVolume.add(token0, amountInY); - dailyVolume.add(token1, amountInX); - }) - }); - return { dailyVolume, }; + logs.map((log: any, index: number) => { + const token0 = tokens0[index]; + const token1 = tokens1[index]; + log.forEach((i: any) => { + const amountInX = Number('0x' + '0'.repeat(32) + i.amountsIn.replace('0x', '').slice(0, 32)) + const amountInY = Number('0x' + '0'.repeat(32) + i.amountsIn.replace('0x', '').slice(32, 64)) + dailyVolume.add(token0, amountInY); + dailyVolume.add(token1, amountInX); + }) + }); + return { dailyVolume }; + } catch (err: any) { + console.error(`joe-v2.1: ${options.chain} error ${err}`) + return { dailyVolume }; + } } const adapter: SimpleAdapter = { From a03f67e81d6905ee62c50832d67b4448411824e0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 25 May 2024 03:24:51 +0000 Subject: [PATCH 0604/1590] add logs done --- dexs/joe-v2.1/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index 34c7a43dc4..44cb947902 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -71,6 +71,7 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => dailyVolume.add(token1, amountInX); }) }); + console.info(`joe-v2.1: ${options.chain} done`) return { dailyVolume }; } catch (err: any) { console.error(`joe-v2.1: ${options.chain} error ${err}`) From d9dad1448e799ee9560cd5f5db66803bc5e47268 Mon Sep 17 00:00:00 2001 From: Cellula Date: Sat, 25 May 2024 18:31:40 +0800 Subject: [PATCH 0605/1590] Add CELLULA adapter --- fees/cellula/index.ts | 73 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 fees/cellula/index.ts diff --git a/fees/cellula/index.ts b/fees/cellula/index.ts new file mode 100644 index 0000000000..4f1645c875 --- /dev/null +++ b/fees/cellula/index.ts @@ -0,0 +1,73 @@ +import { CHAIN } from "../../helpers/chains"; +import { Adapter, FetchV2 } from "../../adapters/types"; + +const CELL_ADDRESS = "0xa258107cb9dcd325a37c7d65a7f4850bb9986bc6"; +const CELL_ABI = "event MintFeeReceived(uint256 tokenId, uint256 amount)" + +const LIFE_ADDRESS = "0xabd1780208a62b9cbf9d3b7a1617918d42493933"; +const LIFE_ABI = "event FeedEvent(uint256 tokenId, uint256 startTime, uint256 workTime)" + +const methodology = { + Fees: "The cost of renting a Cell.", + Revenue: "The sum of life charging fees and life mint fees.", +}; +const adapter: Adapter = { + adapter: { + [CHAIN.BSC]: { + fetch: (async ({ getLogs, createBalances, }) => { + // Fees + const totalFees = createBalances() + const dailyFees = createBalances() // ✅ + const dailyUserFees = createBalances() + + // Revenue + const dailyRevenue = createBalances() // ✅ + const dailyProtocolRevenue = createBalances() // 70% + Food + const dailyHoldersRevenue = createBalances() // 5% + const dailySupplySideRevenue = createBalances() // 25% + // const totalRevenue = createBalances() + // const totalProtocolRevenue = createBalances() + // const totalSupplySideRevenue = createBalances() + // const totalUserFees = createBalances() + // const dailyBribesRevenue = createBalances() + // const dailyTokenTaxes = createBalances() + + const logs = await getLogs({ target: CELL_ADDRESS, eventAbi: CELL_ABI }) + logs.map((e: any) => { + totalFees.addGasToken(e.amount) + dailyFees.addGasToken(e.amount) + dailyUserFees.addGasToken(e.amount) + + dailyRevenue.addGasToken(e.amount * BigInt(20)) + dailyProtocolRevenue.addGasToken(e.amount * BigInt(14)) + dailyHoldersRevenue.addGasToken(e.amount) + dailySupplySideRevenue.addGasToken(e.amount * BigInt(5)) + }) + const buyFoodLogs = await getLogs({ target: LIFE_ADDRESS, eventAbi: LIFE_ABI }) + // 0.0017 BNB / 1D + // 0.0051 BNB / 3D + // 0.0119 BNB / 7D + const workTimePrice = { + "86400": "1700000000000000", + "259200": "5100000000000000", + "604800": "11900000000000000", + } + buyFoodLogs.map(e => { + dailyRevenue.addGasToken(workTimePrice[e.workTime]) + dailyProtocolRevenue.addGasToken(workTimePrice[e.workTime]) + }) + return { + totalFees, dailyFees, dailyUserFees, + dailyRevenue, dailyProtocolRevenue, dailyHoldersRevenue, dailySupplySideRevenue + } + }) as FetchV2, + start: 1713052800, + meta: { + methodology + }, + }, + }, + version: 2, +} + +export default adapter; \ No newline at end of file From ccbf41b7825bccdda4241e55271a034791fc4df0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 25 May 2024 12:19:23 +0000 Subject: [PATCH 0606/1590] fix add flga --- dexs/joe-v2.1/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index 44cb947902..8b6ef44915 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -52,7 +52,7 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => const lpTokens = pools[options.chain] try { const [tokens0, tokens1] = await Promise.all( - ['address:getTokenX', 'address:getTokenY'].map((abi: string) => options.api.multiCall({abi,calls: lpTokens })) + ['address:getTokenX', 'address:getTokenY'].map((abi: string) => options.api.multiCall({abi,calls: lpTokens, permitFailure: true })) ); const logs: any[][] = (await options.getLogs({ From c392e0717349be577cd6d75c070934b6cc0cfa4f Mon Sep 17 00:00:00 2001 From: NatPDeveloper Date: Sat, 25 May 2024 08:55:26 -0400 Subject: [PATCH 0607/1590] fix --- fees/ethena.ts | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/fees/ethena.ts b/fees/ethena.ts index 6239e4df68..49ea49e198 100644 --- a/fees/ethena.ts +++ b/fees/ethena.ts @@ -2,13 +2,15 @@ import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { queryIndexer } from "../helpers/indexer"; -const mint_event = 'event Mint( address indexed minter,address indexed benefactor,address indexed beneficiary,address collateral_asset,uint256 collateral_amount,uint256 usde_amount)'; +const mint_event = + "event Mint( address indexed minter,address indexed benefactor,address indexed beneficiary,address collateral_asset,uint256 collateral_amount,uint256 usde_amount)"; const fetch = async (options: FetchOptions) => { const logs = await options.getLogs({ eventAbi: mint_event, - target: '0x2cc440b721d2cafd6d64908d6d8c4acc57f8afc3', + target: "0x2cc440b721d2cafd6d64908d6d8c4acc57f8afc3", }); - const in_flow = await queryIndexer(` + const in_flow = await queryIndexer( + ` SELECT '0x' || encode(data, 'hex') AS data, '0x' || encode(contract_address, 'hex') AS token @@ -17,11 +19,15 @@ const fetch = async (options: FetchOptions) => { WHERE block_number > 18637861 AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' + AND topic_1 NOT IN ('\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87', '\\x0000000000000000000000002b5ab59163a6e93b4486f6055d33ca4a115dd4d5') AND topic_2 in ('\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87', '\\x0000000000000000000000002b5ab59163a6e93b4486f6055d33ca4a115dd4d5') AND block_time BETWEEN llama_replace_date_range; -`, options); +`, + options + ); -const out_flow = await queryIndexer(` + const out_flow = await queryIndexer( + ` SELECT '0x' || encode(data, 'hex') AS data, '0x' || encode(contract_address, 'hex') AS token @@ -32,7 +38,9 @@ const out_flow = await queryIndexer(` AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' AND topic_2 in ('\\x000000000000000000000000f2fa332bd83149c66b09b45670bce64746c6b439') AND block_time BETWEEN llama_replace_date_range; -`, options); +`, + options + ); const dailyFeesInflow = options.createBalances(); const supplyRewards = options.createBalances(); @@ -49,23 +57,23 @@ const out_flow = await queryIndexer(` dailyFeesMint.add(log.collateral_asset, log.collateral_amount); }); - dailyFeesMint.resizeBy(0.001) + dailyFeesMint.resizeBy(0.001); dailyFeesMint.addBalances(dailyFeesInflow); - const revenue = dailyFeesMint.clone() - revenue.subtract(supplyRewards) + const revenue = dailyFeesMint.clone(); + revenue.subtract(supplyRewards); return { dailyFees: dailyFeesMint, dailyRevenue: revenue, - } -} + }; +}; const adapters: SimpleAdapter = { version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch, - start: 1700784000 - } - } -} -export default adapters + start: 1700784000, + }, + }, +}; +export default adapters; From f8ef865372b003447790d6d431e66dab09f2e4b1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 25 May 2024 16:04:56 +0000 Subject: [PATCH 0608/1590] fix get token --- dexs/joe-v2.1/index.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index 8b6ef44915..45b02f48d6 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -51,9 +51,8 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => const dailyVolume = options.createBalances(); const lpTokens = pools[options.chain] try { - const [tokens0, tokens1] = await Promise.all( - ['address:getTokenX', 'address:getTokenY'].map((abi: string) => options.api.multiCall({abi,calls: lpTokens, permitFailure: true })) - ); + const tokens0 = await options.api.multiCall({ abi: 'address:getTokenX', calls: lpTokens! }) + const tokens1 = await options.api.multiCall({ abi: 'address:getTokenY', calls: lpTokens! }) const logs: any[][] = (await options.getLogs({ targets: lpTokens, From a6261845c3992ed7f5336b267acf6fc543e10699 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 26 May 2024 04:00:10 +0000 Subject: [PATCH 0609/1590] type skipCacheRead --- dexs/joe-v2.1/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index 45b02f48d6..73b6bd8859 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -58,6 +58,7 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => targets: lpTokens, eventAbi: event_swap, flatten: false, + skipCacheRead: true })) logs.map((log: any, index: number) => { From fc48438b442801869da9f134605b0aa83c518970 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 26 May 2024 04:23:28 +0000 Subject: [PATCH 0610/1590] Revert "type skipCacheRead" This reverts commit a6261845c3992ed7f5336b267acf6fc543e10699. --- dexs/joe-v2.1/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index 73b6bd8859..45b02f48d6 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -58,7 +58,6 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => targets: lpTokens, eventAbi: event_swap, flatten: false, - skipCacheRead: true })) logs.map((log: any, index: number) => { From f68ed87e30b4b1181638ee4b068203db2bcc9f8b Mon Sep 17 00:00:00 2001 From: Cellula Date: Sun, 26 May 2024 12:31:42 +0800 Subject: [PATCH 0611/1590] change cellula --- fees/cellula/index.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/fees/cellula/index.ts b/fees/cellula/index.ts index 4f1645c875..34d020a8d0 100644 --- a/fees/cellula/index.ts +++ b/fees/cellula/index.ts @@ -16,9 +16,8 @@ const adapter: Adapter = { [CHAIN.BSC]: { fetch: (async ({ getLogs, createBalances, }) => { // Fees - const totalFees = createBalances() + // const totalFees = createBalances() const dailyFees = createBalances() // ✅ - const dailyUserFees = createBalances() // Revenue const dailyRevenue = createBalances() // ✅ @@ -34,9 +33,7 @@ const adapter: Adapter = { const logs = await getLogs({ target: CELL_ADDRESS, eventAbi: CELL_ABI }) logs.map((e: any) => { - totalFees.addGasToken(e.amount) - dailyFees.addGasToken(e.amount) - dailyUserFees.addGasToken(e.amount) + dailyFees.addGasToken(e.amount * BigInt(20)) dailyRevenue.addGasToken(e.amount * BigInt(20)) dailyProtocolRevenue.addGasToken(e.amount * BigInt(14)) @@ -53,11 +50,12 @@ const adapter: Adapter = { "604800": "11900000000000000", } buyFoodLogs.map(e => { + dailyFees.addGasToken(workTimePrice[e.workTime]) dailyRevenue.addGasToken(workTimePrice[e.workTime]) dailyProtocolRevenue.addGasToken(workTimePrice[e.workTime]) }) return { - totalFees, dailyFees, dailyUserFees, + dailyFees, dailyRevenue, dailyProtocolRevenue, dailyHoldersRevenue, dailySupplySideRevenue } }) as FetchV2, From b6bfef992a56b4890e83b321b3d0aaf53de45880 Mon Sep 17 00:00:00 2001 From: Cellula Date: Mon, 27 May 2024 11:32:31 +0800 Subject: [PATCH 0612/1590] Recreate exports --- fees/cellula/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/cellula/index.ts b/fees/cellula/index.ts index 34d020a8d0..b55a32f585 100644 --- a/fees/cellula/index.ts +++ b/fees/cellula/index.ts @@ -41,9 +41,9 @@ const adapter: Adapter = { dailySupplySideRevenue.addGasToken(e.amount * BigInt(5)) }) const buyFoodLogs = await getLogs({ target: LIFE_ADDRESS, eventAbi: LIFE_ABI }) - // 0.0017 BNB / 1D - // 0.0051 BNB / 3D - // 0.0119 BNB / 7D + // 0.0017 BNB / 1 D + // 0.0051 BNB / 3 D + // 0.0119 BNB / 7 D const workTimePrice = { "86400": "1700000000000000", "259200": "5100000000000000", From f3d057e8cd653514b878ee652f9cfd573251171d Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 27 May 2024 08:26:26 +0100 Subject: [PATCH 0613/1590] add basecamp --- fees/basecamp/index.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 fees/basecamp/index.ts diff --git a/fees/basecamp/index.ts b/fees/basecamp/index.ts new file mode 100644 index 0000000000..de56874312 --- /dev/null +++ b/fees/basecamp/index.ts @@ -0,0 +1,21 @@ +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { addTokensReceived } from '../../helpers/token'; + +const fetch: any = async (options: FetchOptions) => { + const dailyFees = await addTokensReceived({ options, tokens: ["0x4200000000000000000000000000000000000006"], targets: ["0xbcb4a982d3c2786e69a0fdc0f0c4f2db1a04e875"] }) + + return { dailyFees, dailyRevenue: dailyFees } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.BASE]: { + fetch: fetch, + start: 0, + }, + }, +}; + +export default adapter; From c84e166dd265dfe3ac08c5da5803b196919abd6d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 27 May 2024 10:14:22 +0200 Subject: [PATCH 0614/1590] add fee adapter for tna --- fees/tna.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 fees/tna.ts diff --git a/fees/tna.ts b/fees/tna.ts new file mode 100644 index 0000000000..6143f36960 --- /dev/null +++ b/fees/tna.ts @@ -0,0 +1,37 @@ +import { Adapter, FetchOptions, } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const abi_event = { + nameRegistered: "event Register(address indexed owner,uint256 indexed rootId,uint256 indexed tokenId,uint256 fee,bytes fullName)", +}; + +const methodology = { + Fees: "registration and renew cost", + Revenue: "registration and renew cost", +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.BITLAYER]: { + fetch: (async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const registeredLogs = await options.getLogs({ + targets: ['0x048d86f26952aB5e1F601f897BC9512A1E7fA675'], + eventAbi: abi_event.nameRegistered, + }) + registeredLogs.map((tx: any) => { + dailyFees.addGasToken(tx.fee) + }) + return { dailyFees, dailyRevenue: dailyFees, } + }) as any, + start: 1677110400, + meta: { + methodology + } + }, + }, + +} + +export default adapter; From 31cbe864691b348856ffe2747c6a26690325050c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 27 May 2024 10:16:17 +0200 Subject: [PATCH 0615/1590] ens: update adapter to v2 --- fees/ens.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fees/ens.ts b/fees/ens.ts index f73ea1c5ec..c9e5a7c1ff 100644 --- a/fees/ens.ts +++ b/fees/ens.ts @@ -15,9 +15,10 @@ const methodology = { } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { - fetch: (async (timestamp: number, _: any, options: FetchOptions) => { + fetch: (async (options: FetchOptions) => { const dailyFees = options.createBalances(); const registeredLogs = await options.getLogs({ targets: [address_v4, address_v5], @@ -30,7 +31,7 @@ const adapter: Adapter = { registeredLogs.concat(renewedLogs).map((tx: any) => { dailyFees.addGasToken(tx.cost) }) - return { timestamp, dailyFees, dailyRevenue: dailyFees, } + return { dailyFees, dailyRevenue: dailyFees, } }) as any, start: 1677110400, meta: { From 0764a5ff3df1f17868efe506f54842a8c3e03889 Mon Sep 17 00:00:00 2001 From: PatrickRoy Date: Mon, 27 May 2024 11:53:26 +0300 Subject: [PATCH 0616/1590] Add Base network to Kinetix V3 dexs adapter. --- dexs/kinetix-v3/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dexs/kinetix-v3/index.ts b/dexs/kinetix-v3/index.ts index 99b46ae329..99c3aa610a 100644 --- a/dexs/kinetix-v3/index.ts +++ b/dexs/kinetix-v3/index.ts @@ -6,6 +6,8 @@ import { BreakdownAdapter } from "../../adapters/types"; const endpointsV3 = { [CHAIN.KAVA]: "https://kava-graph-node.metavault.trade/subgraphs/name/kinetixfi/v3-subgraph", + [CHAIN.BASE]: + "https://api.studio.thegraph.com/query/55804/kinetixfi-base-v3/version/latest", }; const v3Graphs = getGraphDimensions({ @@ -30,6 +32,7 @@ const v3Graphs = getGraphDimensions({ const startTimeV3: { [key: string]: number } = { [CHAIN.KAVA]: 1693267200, + [CHAIN.BASE]: 1715126400, }; const v3 = Object.keys(endpointsV3).reduce( From 2a1faffda160d7572d5d7c598eb86c0ba7021934 Mon Sep 17 00:00:00 2001 From: marsclimber0109 Date: Mon, 27 May 2024 18:24:01 +0900 Subject: [PATCH 0617/1590] index on master: fc48438b Revert "type skipCacheRead" --- aggregators/eisen/index.ts | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 aggregators/eisen/index.ts diff --git a/aggregators/eisen/index.ts b/aggregators/eisen/index.ts new file mode 100644 index 0000000000..c98c42858b --- /dev/null +++ b/aggregators/eisen/index.ts @@ -0,0 +1,44 @@ +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const event_swap = + "event EisenSwapCompleted(address indexed sender, address indexed fromAssetId, address indexed toAssetId, address receiver, uint256 fromAmount, uint256 toAmount, uint256 expectedToAmount, uint256 fee)"; + +type TPool = { + [c: string]: string[]; +}; + +type TBlock = { + [c: string]: number; +}; + +const FEE_COLLECTORS: TPool = { + [CHAIN.MODE]: ["0x37Cb37b752DBDcd08A872e7dfec256A216C7144C"], + [CHAIN.SCROLL]: ["0xA06568773A247657E7b89BBA465014CF85702093"], + [CHAIN.MANTLE]: ["0x31d6F212142D3B222EF11c9eBB6AF3569b8442EE"], + [CHAIN.BLAST]: ["0xd57Ed7F46D64Ec7b6f04E4A8409D88C55Ef8AA3b"], +}; + +const START_BLOCKS = { + [CHAIN.MODE]: 5257432, + [CHAIN.SCROLL]: 67559, + [CHAIN.MANTLE]: 64201716, + [CHAIN.BLAST]: 3258143, +}; + +async function fetch({ getLogs, createBalances, chain }: FetchOptions) { + const feeCollectors = FEE_COLLECTORS[chain]; + const dailyVolume = createBalances(); + const logs = await getLogs({ targets: feeCollectors, eventAbi: event_swap }); + + logs.forEach((i) => dailyVolume.add(i.toAssetId, i.toAmount)); + + return { dailyVolume }; +} + +const adapter: SimpleAdapter = { adapter: {}, version: 2 }; +Object.keys(FEE_COLLECTORS).forEach( + (chain) => (adapter.adapter[chain] = { fetch, start: START_BLOCKS[chain] }) +); + +export default adapter; From 9c54686035cde034f67804a7ce7ffda6b3a7c139 Mon Sep 17 00:00:00 2001 From: Macaron <164980497+Macaromswap@users.noreply.github.com> Date: Mon, 27 May 2024 12:08:55 +0000 Subject: [PATCH 0618/1590] update macaron swap data --- dexs/macaron-xyz/index.ts | 57 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 dexs/macaron-xyz/index.ts diff --git a/dexs/macaron-xyz/index.ts b/dexs/macaron-xyz/index.ts new file mode 100644 index 0000000000..6cc88d4554 --- /dev/null +++ b/dexs/macaron-xyz/index.ts @@ -0,0 +1,57 @@ +import fetchURL from "../../utils/fetchURL" +import { ChainBlocks, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import customBackfill from "../../helpers/customBackfill"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { Chain } from "@defillama/sdk/build/general"; + +const historicalVolumeEndpoint = "https://info-api.macaron.xyz/pair/" + +interface IVolume { + count: string; + statistics_date: string; + volume: string; +} +type ChainMapId = { + [chain: string | Chain]: number; +} +const mapChainId: ChainMapId = { + [CHAIN.BITLAYER]: 200901 +}; +const fetch = (chain: Chain) => { + return async (timestamp: any) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp.toTimestamp * 1000)); + const historicalVolume: IVolume[] = (await fetchURL(`${historicalVolumeEndpoint}/${mapChainId[chain]}/volume`)).data; + const totalVolume = historicalVolume + .filter(volItem => getUniqStartOfTodayTimestamp(new Date(volItem.statistics_date)) <= dayTimestamp) + .reduce((acc, { volume }) => acc + Number(volume), 0) + const dailyVolume = historicalVolume + .find(dayItem => getUniqStartOfTodayTimestamp(new Date(dayItem.statistics_date)) === dayTimestamp)?.volume + return { + totalVolume: `${totalVolume}`, + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + timestamp: dayTimestamp, + }; + }; +} + +const getStartTimestamp = async (chain: Chain) => { + // const queryByChainId = `?chain_id=${mapChainId[chain]}`; + const historicalVolume: IVolume[] = (await fetchURL(`${historicalVolumeEndpoint}/${mapChainId[chain]}/volume`)).data; + return (new Date(historicalVolume[0].statistics_date).getTime()) / 1000 +} +const adapter: SimpleAdapter = { + version: 2, + adapter: Object.keys(mapChainId).reduce((acc, chain: any) => { + return { + ...acc, + [chain]: { + fetch: fetch(chain as Chain), + start: async () => getStartTimestamp(chain), + customBackfill: customBackfill(chain as Chain, fetch), + } + } + }, {}) +}; + +export default adapter; From 653994f0ff29ac1224a9030a5c365b3966551522 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 27 May 2024 17:00:42 +0100 Subject: [PATCH 0619/1590] blocxroute fees --- fees/blocxroute.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 fees/blocxroute.ts diff --git a/fees/blocxroute.ts b/fees/blocxroute.ts new file mode 100644 index 0000000000..41a768adba --- /dev/null +++ b/fees/blocxroute.ts @@ -0,0 +1,29 @@ +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("3521814", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: 'HWEoBxYs7ssKuudEjzjmpfJVX7Dvi7wescFsVx2L5yoY' + })); + dailyFees.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); + + return { dailyFees } + +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.SOLANA]: { + fetch: fetch, + start: 0, + }, + }, + isExpensiveAdapter: true +}; + +export default adapter; From 03a7ac0b01b646d3dcc4e3c4be3f6fea10fcf019 Mon Sep 17 00:00:00 2001 From: JohnnyWyles <97029546+JohnnyWyles@users.noreply.github.com> Date: Mon, 27 May 2024 18:30:57 +0100 Subject: [PATCH 0620/1590] Add Astroport Osmosis Deployment --- dexs/astroport-v2/index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dexs/astroport-v2/index.ts b/dexs/astroport-v2/index.ts index 7a34f187af..22554f4fab 100644 --- a/dexs/astroport-v2/index.ts +++ b/dexs/astroport-v2/index.ts @@ -16,7 +16,7 @@ query Stats($chains: [String]!) { } } `; -const url = 'https://app.astroport.fi/api/trpc/protocol.stats?input={"json":{"chains":["phoenix-1","injective-1","neutron-1","pacific-1"]}}' +const url = 'https://app.astroport.fi/api/trpc/protocol.stats?input={"json":{"chains":["phoenix-1","injective-1","neutron-1","pacific-1","osmosis-1"]}}' const fetch = (chainId: string) => { return async (timestamp: number): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); @@ -54,6 +54,12 @@ const adapter: SimpleAdapter = { runAtCurrTime: true, customBackfill: undefined, start: 0, + }, + [CHAIN.OSMOSIS]: { + fetch: fetch("osmosis-1"), + runAtCurrTime: true, + customBackfill: undefined, + start: 0, } }, }; From dbb4814399fceb83188d5d241ce4b417596332cd Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 28 May 2024 10:27:32 +0200 Subject: [PATCH 0621/1590] joe v2: disable bsc --- fees/joe-v2.1.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/joe-v2.1.ts b/fees/joe-v2.1.ts index 05cfcfc595..ba0d5d83fa 100644 --- a/fees/joe-v2.1.ts +++ b/fees/joe-v2.1.ts @@ -10,9 +10,9 @@ type TPool = { } const pools: TPool = { [CHAIN.BSC]: [ - '0xdce12347b429a32a177708646d4024449827a69a', - '0x3708d924f627d8109687ce10f6c324445c28347c', - '0x7e6857d4b2efaf9ff29f88f6d7d083a160e0849e', + // '0xdce12347b429a32a177708646d4024449827a69a', + // '0x3708d924f627d8109687ce10f6c324445c28347c', + // '0x7e6857d4b2efaf9ff29f88f6d7d083a160e0849e', ], [CHAIN.AVAX]: [ '0xd9fa522f5bc6cfa40211944f2c8da785773ad99d', From 0eb78630d77c86c1b1971292412efa8ddd58640b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 28 May 2024 10:31:10 +0200 Subject: [PATCH 0622/1590] joe v2: disable bsc --- fees/joe-v2.1.ts | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/fees/joe-v2.1.ts b/fees/joe-v2.1.ts index ba0d5d83fa..7e8f90220e 100644 --- a/fees/joe-v2.1.ts +++ b/fees/joe-v2.1.ts @@ -50,7 +50,7 @@ const pools: TPool = { } const graph = (chain: Chain) => { - return async (timestamp: number , _: ChainBlocks, { createBalances, getLogs, api }: FetchOptions): Promise => { + return async ({ createBalances, getLogs, api }: FetchOptions) => { const dailyFees = createBalances(); const dailyRevenue = createBalances(); const lpTokens = pools[chain] @@ -62,15 +62,17 @@ const graph = (chain: Chain) => { }) ) ); - const decimalsXs = await api.multiCall({ abi: 'erc20:decimals', calls: tokenXs}) - const decimalsYs = await api.multiCall({ abi: 'erc20:decimals', calls: tokenYs}) + const decimalsXs = await api.multiCall({ abi: 'erc20:decimals', calls: tokenXs }) + const decimalsYs = await api.multiCall({ abi: 'erc20:decimals', calls: tokenYs }) - const logs: any[][] = await getLogs({ - targets: lpTokens, - eventAbi: event_swap, - flatten: false, - }) + let logs: any[][] = [] + if (lpTokens.length) + logs = await getLogs({ + targets: lpTokens, + eventAbi: event_swap, + flatten: false, + }) lpTokens.map((_: string, index: number) => { logs[index] @@ -99,13 +101,13 @@ const graph = (chain: Chain) => { dailyProtocolRevenue: dailyRevenue, dailyHoldersRevenue: dailyRevenue, dailySupplySideRevenue, - timestamp, }; } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: graph(CHAIN.ARBITRUM), From d4b5a176b566eefa5284deb87c58c41980be3791 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 28 May 2024 08:35:55 +0000 Subject: [PATCH 0623/1590] disable bsc joe-v2.1 --- dexs/joe-v2.1/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index 45b02f48d6..300a4a7502 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -82,7 +82,7 @@ const adapter: SimpleAdapter = { version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch, start: 1682121600, }, - [CHAIN.BSC]: { fetch, start: 1681084800, }, + // [CHAIN.BSC]: { fetch, start: 1681084800, }, [CHAIN.AVAX]: { fetch, start: 1682467200, }, } }; From 177b50d19ce3d45040200e8457b61f2334cbe33a Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 28 May 2024 10:31:32 +0100 Subject: [PATCH 0624/1590] add chain --- dexs/panacakeswap-perp/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dexs/panacakeswap-perp/index.ts b/dexs/panacakeswap-perp/index.ts index 9340360a2f..c2afcad96c 100644 --- a/dexs/panacakeswap-perp/index.ts +++ b/dexs/panacakeswap-perp/index.ts @@ -3,6 +3,8 @@ const config = { arbitrum: { contract: '0xb3879e95a4b8e3ee570c232b19d520821f540e48', }, bsc: { contract: '0x1b6f2d3844c6ae7d56ceb3c3643b9060ba28feb0', }, + //op_bnb: { contract: '0x5A5454A6030FB50ceb3eb78977D140198A27be5e' }, + base: {contract: '0x9D93e5B2364070bC9837e91833F162430246DD57' }, } import { ChainBlocks, FetchOptions } from "../../adapters/types"; From c3a375b3c8a263fe607adc3d61438e14c1424dfa Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 28 May 2024 13:03:41 +0100 Subject: [PATCH 0625/1590] better crvusd --- fees/crv-usd.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/fees/crv-usd.ts b/fees/crv-usd.ts index 58d942d440..f885736760 100644 --- a/fees/crv-usd.ts +++ b/fees/crv-usd.ts @@ -17,11 +17,17 @@ const controller: TContract = { } const fetchFees = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, }: FetchOptions): Promise => { + return async ({ createBalances, getLogs, fromApi, toApi }: FetchOptions) => { const dailyFees = createBalances() - const logs = await getLogs({ targets: controller[chain], eventAbi: 'event CollectFees (uint256 amount, uint256 new_supply)' }) - logs.forEach((i: any) => dailyFees.add('0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E', i.amount)) - return { dailyFees, timestamp, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } + await Promise.all(controller[chain].map(async controller=>{ + const logs = await getLogs({ target: controller, eventAbi: 'event CollectFees (uint256 amount, uint256 new_supply)' }) + logs.forEach((i: any) => dailyFees.subtractToken('0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E', i.amount)) + const feesStart = await fromApi.call({target: controller, abi: "uint:admin_fees"}) + const feesEnd = await toApi.call({target: controller, abi: "uint:admin_fees"}) + dailyFees.add("0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E", feesEnd-feesStart) + })) + + return { dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } } } @@ -31,6 +37,7 @@ const adapters: SimpleAdapter = { fetch: fetchFees(CHAIN.ETHEREUM), start: 1684047600 } - } + }, + version: 2 } export default adapters; From 7abb8dbadcaccd786b60902c47e8ee0c6fce0aa8 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 28 May 2024 13:08:16 +0100 Subject: [PATCH 0626/1590] curve use apis --- fees/curve.ts | 86 +++++++++++++++++++++------------------------------ 1 file changed, 36 insertions(+), 50 deletions(-) diff --git a/fees/curve.ts b/fees/curve.ts index cbee0571ea..9c7a4f94e2 100644 --- a/fees/curve.ts +++ b/fees/curve.ts @@ -3,7 +3,7 @@ import { ARBITRUM, ETHEREUM, OPTIMISM, POLYGON, AVAX, FANTOM, XDAI } from "../he import { request, gql } from "graphql-request"; import type { ChainEndpoints } from "../adapters/types" import { Chain } from '@defillama/sdk/build/general'; - +import fetchURL from "../utils/fetchURL"; const endpoints = { [ETHEREUM]: @@ -86,6 +86,21 @@ const graph = (graphUrls: ChainEndpoints) => { } }; +const fetch = (chain: string) => async (ts:number) => { + if(ts < Date.now()/1e3-36*3600){ + return graph(endpoints)(chain)(ts) + } + const response = (await fetchURL(`https://prices.curve.fi/v1/chains/${chain}`)); + const fees = (response.data as any[]).reduce((all, pool)=>{ + return all + pool.liquidity_fee_24h+pool.trading_fee_24h + }, 0) + return { + dailyFees: `${fees}`, + dailyRevenue: `${fees/2}`, + dailyHoldersRevenue: `${fees/2}`, + }; +}; + const methodology = { UserFees: "Users pay a trading fee from 0.04% to 0.4% on each swap (as of July 2022, the fee on all pools was 0.04%)", Fees: "Trading fees paid by users", @@ -95,58 +110,29 @@ const methodology = { SupplySideRevenue: "A 50% of all trading fees are distributed among liquidity providers" } +const starts = { + [ETHEREUM]: 1577854800, + [OPTIMISM]: 1620532800, + [ARBITRUM]: 1632110400, + [POLYGON]: 1620014400, + //[AVAX]: 1633492800, + [FANTOM]: 1620532800, + [XDAI]: 1620532800 +} as { + [chain:string]:number +} + const adapter: Adapter = { - adapter: { - [ETHEREUM]: { - fetch: graph(endpoints)(ETHEREUM), - start: 1577854800, - meta: { - methodology - } - }, - [OPTIMISM]: { - fetch: graph(endpoints)(OPTIMISM), - start: 1620532800, + adapter: Object.keys(starts).reduce((all, chain)=>{ + all[chain] = { + fetch: fetch(chain), + start: starts[chain], meta: { methodology - } - }, - [ARBITRUM]: { - fetch: graph(endpoints)(ARBITRUM), - start: 1632110400, - meta: { - methodology - } - }, - [POLYGON]: { - fetch: graph(endpoints)(POLYGON), - start: 1620014400, - meta: { - methodology - } - }, - [AVAX]: { - fetch: graph(endpoints)(AVAX), - start: 1633492800, - meta: { - methodology - } - }, - [FANTOM]: { - fetch: graph(endpoints)(FANTOM), - start: 1620532800, - meta: { - methodology - } - }, - [XDAI]: { - fetch: graph(endpoints)(XDAI), - start: 1620532800, - meta: { - methodology - } - }, - } + }, + } + return all + }, {} as any) } export default adapter; From 03f203d4974116da2b9e220e6d0a5edf7f1e5dcd Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 28 May 2024 12:51:33 +0000 Subject: [PATCH 0627/1590] fix adapter version --- dexs/Viridian/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/Viridian/index.ts b/dexs/Viridian/index.ts index 7ea6b1ef78..7c26ae7e2d 100644 --- a/dexs/Viridian/index.ts +++ b/dexs/Viridian/index.ts @@ -1,4 +1,4 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; @@ -8,7 +8,7 @@ const adapter: SimpleAdapter = { version: 2, adapter: { [CHAIN.CORE]: { - fetch: async () => await getDexVolumeExports({ chain: CHAIN.CORE, factory: FACTORY_ADDRESS }), + fetch: async (options: FetchOptions) => getDexVolumeExports({ chain: CHAIN.CORE, factory: FACTORY_ADDRESS, })(options.startOfDay, null, options), start: 1715904000, }, } From d248b07b82b6727239d21c3537e788d3b7174b73 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 28 May 2024 14:13:26 +0100 Subject: [PATCH 0628/1590] add bribes --- fees/curve.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/fees/curve.ts b/fees/curve.ts index 9c7a4f94e2..b41c1380b1 100644 --- a/fees/curve.ts +++ b/fees/curve.ts @@ -94,11 +94,23 @@ const fetch = (chain: string) => async (ts:number) => { const fees = (response.data as any[]).reduce((all, pool)=>{ return all + pool.liquidity_fee_24h+pool.trading_fee_24h }, 0) - return { + const allFees:any = { dailyFees: `${fees}`, dailyRevenue: `${fees/2}`, dailyHoldersRevenue: `${fees/2}`, }; + if(chain === ETHEREUM){ + const bribes:any[] = (await fetchURL(`https://raw.githubusercontent.com/pierremarsotlyon1/chainhub-backend/main/data/stats.json`)).claimsLast7Days.claims + const yesterday = bribes.reduce((closest, item)=>{ + const timeDiff = (val:any) => Math.abs(val.timestamp - (Date.now()/1e3-24*3600)) + if(timeDiff(item) < timeDiff(closest)){ + return item + } + return closest + }) + allFees.dailyBribesRevenue = (bribes[bribes.length-1].value - yesterday.value).toString() + } + return allFees }; const methodology = { From cda3cdba053d486733f65e049c14e7fdac4f740f Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 28 May 2024 19:12:56 +0100 Subject: [PATCH 0629/1590] fix ethena rev --- fees/ethena.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fees/ethena.ts b/fees/ethena.ts index 49ea49e198..90f5e031a3 100644 --- a/fees/ethena.ts +++ b/fees/ethena.ts @@ -18,6 +18,7 @@ const fetch = async (options: FetchOptions) => { ethereum.event_logs WHERE block_number > 18637861 + AND contract_address NOT IN ('\\x4c9edd5852cd905f086c759e8383e09bff1e68b3') AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' AND topic_1 NOT IN ('\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87', '\\x0000000000000000000000002b5ab59163a6e93b4486f6055d33ca4a115dd4d5') AND topic_2 in ('\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87', '\\x0000000000000000000000002b5ab59163a6e93b4486f6055d33ca4a115dd4d5') @@ -35,6 +36,7 @@ const fetch = async (options: FetchOptions) => { ethereum.event_logs WHERE block_number > 18637861 + AND contract_address NOT IN ('\\x4c9edd5852cd905f086c759e8383e09bff1e68b3') AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' AND topic_2 in ('\\x000000000000000000000000f2fa332bd83149c66b09b45670bce64746c6b439') AND block_time BETWEEN llama_replace_date_range; From 2eb798c5bfd3bad449aff7cad2bf6256c974e9c8 Mon Sep 17 00:00:00 2001 From: Kirill Demidov Date: Wed, 29 May 2024 11:57:22 +0300 Subject: [PATCH 0630/1590] added merlin chain --- aggregators/rubic/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aggregators/rubic/index.ts b/aggregators/rubic/index.ts index a00f62697b..f930d0f587 100644 --- a/aggregators/rubic/index.ts +++ b/aggregators/rubic/index.ts @@ -34,7 +34,8 @@ const chains: Record = { [CHAIN.CELO]: 'celo', [CHAIN.OKEXCHAIN]: 'oke-x-chain', [CHAIN.CRONOS]: 'cronos', - [CHAIN.MODE]: 'mode' + [CHAIN.MODE]: 'mode', + [CHAIN.MERLIN]: 'merlin' }; interface ApiResponce { From 939a27a0941afedf52724c5f46ca1216f583655e Mon Sep 17 00:00:00 2001 From: UjjwalGupta49 Date: Wed, 29 May 2024 14:55:25 +0530 Subject: [PATCH 0631/1590] Updated adapter version for flashtrade fees adapter --- fees/flashtrade.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/flashtrade.ts b/fees/flashtrade.ts index 5b8c883a3d..6e0d1b1200 100644 --- a/fees/flashtrade.ts +++ b/fees/flashtrade.ts @@ -29,6 +29,7 @@ const fetchFlashStats = async (timestamp: number): Promise => { }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.SOLANA]: { runAtCurrTime: true, @@ -42,4 +43,4 @@ const fetchFlashStats = async (timestamp: number): Promise => { }, }; - export default adapter; \ No newline at end of file + export default adapter; From 748bd9168bf051aa92a8cae8a6fd82781afa601e Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 29 May 2024 11:51:18 +0100 Subject: [PATCH 0632/1590] crvusd fix --- fees/crv-usd.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/crv-usd.ts b/fees/crv-usd.ts index f885736760..25468985a3 100644 --- a/fees/crv-usd.ts +++ b/fees/crv-usd.ts @@ -21,7 +21,7 @@ const fetchFees = (chain: Chain) => { const dailyFees = createBalances() await Promise.all(controller[chain].map(async controller=>{ const logs = await getLogs({ target: controller, eventAbi: 'event CollectFees (uint256 amount, uint256 new_supply)' }) - logs.forEach((i: any) => dailyFees.subtractToken('0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E', i.amount)) + logs.forEach((i: any) => dailyFees.add('0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E', i.amount)) const feesStart = await fromApi.call({target: controller, abi: "uint:admin_fees"}) const feesEnd = await toApi.call({target: controller, abi: "uint:admin_fees"}) dailyFees.add("0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E", feesEnd-feesStart) From 671198e2894aca844605edc32eb33e13adc8a077 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 13:53:05 +0100 Subject: [PATCH 0633/1590] aave --- fees/aave/index.ts | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/fees/aave/index.ts b/fees/aave/index.ts index 27699e0886..4ccfc4105e 100644 --- a/fees/aave/index.ts +++ b/fees/aave/index.ts @@ -1,9 +1,6 @@ -import { Adapter } from "../../adapters/types"; import { AVAX, OPTIMISM, FANTOM, HARMONY, ARBITRUM, ETHEREUM, POLYGON, CHAIN } from "../../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainEndpoints } from "../../adapters/types"; - -import { getTimestampAtStartOfPreviousDayUTC, getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../../utils/date"; +import type { ChainEndpoints, FetchOptions } from "../../adapters/types"; import { V1Reserve, V2Reserve, V3Reserve } from "./types" import { Chain } from "@defillama/sdk/build/general"; @@ -93,9 +90,9 @@ const v1Reserves = async (graphUrls: ChainEndpoints, chain: string, timestamp: n const v1Graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number) => { - const todaysTimestamp = timestamp - const yesterdaysTimestamp = timestamp - 60 * 60 * 24 + return async ({ endTimestamp }: FetchOptions) => { + const todaysTimestamp = endTimestamp + const yesterdaysTimestamp = endTimestamp - 60 * 60 * 24 const todaysReserves: V1Reserve[] = await v1Reserves(graphUrls, chain, todaysTimestamp); const yesterdaysReserves: V1Reserve[] = await v1Reserves(graphUrls, chain, yesterdaysTimestamp); @@ -149,7 +146,6 @@ const v1Graphs = (graphUrls: ChainEndpoints) => { }, 0); return { - timestamp, dailyFees: dailyFee.toString(), dailyRevenue: dailyRev.toString(), dailyHoldersRevenue: '0', @@ -198,9 +194,9 @@ const blacklisted_v2_symbol: TMap = { } const v2Graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number) => { - const todaysTimestamp = timestamp - const yesterdaysTimestamp = timestamp - 60 * 60 * 24 + return async ({ endTimestamp }: FetchOptions) => { + const todaysTimestamp = endTimestamp + const yesterdaysTimestamp = endTimestamp - 60 * 60 * 24 let poolID = poolIDs.V2 if (chain == "avax") { @@ -299,7 +295,6 @@ const v2Graphs = (graphUrls: ChainEndpoints) => { } return { - timestamp, dailyFees: dailyFee.toString(), dailyRevenue: dailyRev.toString(), }; @@ -368,10 +363,9 @@ const v3Reserves = async (graphUrls: ChainEndpoints, chain: string, timestamp: n const v3Graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number) => { - const _timestamp = getTimestampAtStartOfNextDayUTC(timestamp); - const todaysTimestamp = _timestamp - const yesterdaysTimestamp = _timestamp - 60 * 60 * 24 + return async ({ endTimestamp }: FetchOptions) => { + const todaysTimestamp = endTimestamp + const yesterdaysTimestamp = endTimestamp - 60 * 60 * 24 const todaysReserves: V3Reserve[] = await v3Reserves(graphUrls, chain, todaysTimestamp); const yesterdaysReserves: V3Reserve[] = await v3Reserves(graphUrls, chain, yesterdaysTimestamp); @@ -429,7 +423,6 @@ const v3Graphs = (graphUrls: ChainEndpoints) => { const dailyRev = feeBreakdown.treasuryIncomeUSD return { - timestamp, dailyFees: dailyFee.toString(), dailyRevenue: dailyRev.toString(), }; @@ -437,7 +430,7 @@ const v3Graphs = (graphUrls: ChainEndpoints) => { }; }; -const adapter: Adapter = { +const adapter = { breakdown: { //v1 subgraph no longer responding // v1: { @@ -510,7 +503,8 @@ const adapter: Adapter = { start: 1705741200 }, } - } + }, + version: 2 } export default adapter; From a96f7ffdef4f8223e037f237f462a286d2908ca3 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 14:00:08 +0100 Subject: [PATCH 0634/1590] amphor --- fees/amphor/index.ts | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index 7aeed749ae..b7e5a7fe96 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -1,7 +1,6 @@ import * as sdk from "@defillama/sdk"; import { ethers, EventFilter } from 'ethers'; - -import { Adapter, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { ETHEREUM } from "../../helpers/chains"; import ADDRESSES from '../../helpers/coreAssets.json' @@ -68,16 +67,9 @@ const methodology = { Revenue: "Sum of protocol revenue.", } -interface ILog { - address: string; - data: string; - transactionHash: string; - topics: string[]; -} - -const data = async (timestamp: number): Promise => { - const toTimestamp = timestamp; - const fromTimestamp = timestamp - 60 * 60 * 24; +const data = async ({ endTimestamp }: FetchOptions): Promise => { + const toTimestamp = endTimestamp; + const fromTimestamp = endTimestamp - 60 * 60 * 24; const toBlock = await getBlock(toTimestamp, CHAIN.ETHEREUM, {}); const eventFilterUSDC: EventFilter = { @@ -284,7 +276,6 @@ const data = async (timestamp: number): Promise => { const totalFeesNumber = Number(await totalFees.getUSDValue()).toFixed(0); const dailyRevenueNumber = Number(await dailyRevenue.getUSDValue()).toFixed(0); return { - timestamp: timestamp, totalFees: totalFeesNumber, //totalRevenue: Number(await totalRevenue.getUSDValue()).toFixed(0), totalProtocolRevenue: totalFeesNumber, @@ -304,7 +295,8 @@ const adapter: Adapter = { methodology } } - } + }, + version: 2 } export default adapter; From 531aa1d79fee19a46da92224fe44772d23656002 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 14:03:54 +0100 Subject: [PATCH 0635/1590] angle --- fees/angle/index.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/fees/angle/index.ts b/fees/angle/index.ts index a552a5da26..3ab63cb28e 100644 --- a/fees/angle/index.ts +++ b/fees/angle/index.ts @@ -1,4 +1,4 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { request, gql } from "graphql-request"; import { getTimestampAtStartOfPreviousDayUTC, getTimestampAtStartOfDayUTC } from "../../utils/date"; @@ -201,20 +201,15 @@ function aggregateFee( const graph = (graphUrls: ChainEndpoint) => { return (chain: CHAIN) => { - return async (timestamp: number) => { - - const todayTimestamp = getTimestampAtStartOfDayUTC(timestamp) - const yesterdayTimestamp = getTimestampAtStartOfPreviousDayUTC(timestamp) - - const borrowFees = await getBorrowFees(graphUrls[chain] as string, todayTimestamp, yesterdayTimestamp); - const coreFees = await getCoreFees(graphUrls[chain] as string, todayTimestamp, yesterdayTimestamp); - const veANGLEInterest = await getVEANGLERevenues(graphUrls[chain] as string, todayTimestamp); + return async ({ endTimestamp, startTimestamp }: FetchOptions) => { + const borrowFees = await getBorrowFees(graphUrls[chain] as string, endTimestamp, startTimestamp); + const coreFees = await getCoreFees(graphUrls[chain] as string, endTimestamp, startTimestamp); + const veANGLEInterest = await getVEANGLERevenues(graphUrls[chain] as string, endTimestamp); const total = aggregateFee("totalFees", coreFees, borrowFees); const daily = aggregateFee("deltaFees", coreFees, borrowFees); return { - timestamp, totalFees: (total.totalFees + veANGLEInterest.totalInterest).toString(), dailyFees: (daily.totalFees + veANGLEInterest.deltaInterest).toString(), totalRevenue: (total.totalRevenue + veANGLEInterest.totalInterest).toString(), @@ -246,7 +241,8 @@ const adapter: SimpleAdapter = { fetch: graph(endpoints)(CHAIN.POLYGON), start: 1672531200, }, - } + }, + version: 2 } export default adapter; From 5361c95b18e2aac5316842514ed2fb827e1e56a8 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 14:07:08 +0100 Subject: [PATCH 0636/1590] arbi --- fees/apollox/index.ts | 3 ++- fees/arbitrum/index.ts | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fees/apollox/index.ts b/fees/apollox/index.ts index 6e078a97d6..7bb4384dc2 100644 --- a/fees/apollox/index.ts +++ b/fees/apollox/index.ts @@ -30,7 +30,8 @@ const adapter: Adapter = { fetch: request(endpoints)(CHAIN.BSC), start: 1689609600, }, - } + }, + version: 1 } export default adapter; diff --git a/fees/arbitrum/index.ts b/fees/arbitrum/index.ts index 96af8bd879..c498a1f682 100644 --- a/fees/arbitrum/index.ts +++ b/fees/arbitrum/index.ts @@ -6,7 +6,7 @@ import { queryIndexer } from "../../helpers/indexer"; const adapter: Adapter = { adapter: { [CHAIN.ARBITRUM]: { - fetch: (async (timestamp: number, _: any, options: FetchOptions) => { + fetch: (async (options: FetchOptions) => { const { getFromBlock, getToBlock, createBalances, } = options const startblock = await getFromBlock() const endblock = await getToBlock() @@ -32,7 +32,7 @@ const adapter: Adapter = { dailyRevenue.addGasToken(seqGas[0].sum * -1) dailyRevenue.addGasToken(fees * 1e18) - return { timestamp, dailyFees, dailyRevenue, }; + return { dailyFees, dailyRevenue, }; }) as any, start: 1628553600, @@ -40,7 +40,8 @@ const adapter: Adapter = { }, }, isExpensiveAdapter: true, - protocolType: ProtocolType.CHAIN + protocolType: ProtocolType.CHAIN, + version: 2 } export default adapter; From bd56ebcb7a15dcde8ff6aea0f8f79b0aed7fe1cd Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 14:11:20 +0100 Subject: [PATCH 0637/1590] ashperp --- fees/ash-perp/index.ts | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/fees/ash-perp/index.ts b/fees/ash-perp/index.ts index 16152079d5..8213844233 100644 --- a/fees/ash-perp/index.ts +++ b/fees/ash-perp/index.ts @@ -1,25 +1,13 @@ -import { Chain } from "@defillama/sdk/build/general"; -import { Adapter, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { queryDune } from "../../helpers/dune"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import request from "graphql-request"; const API_URL = 'https://statistic-api.ashperp.trade/graphql'; -interface IFee { - time: string; - v2_fees: number; - total_fees: number; -} - -const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { - const startTs = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const endTs = startTs + 86400; +const fetch = async ({ endTimestamp, startTimestamp}: FetchOptions) => { const feeQuery =`query Trading { trading { - getDailyFee(from: ${startTs}, to: ${endTs}){ + getDailyFee(from: ${startTimestamp}, to: ${endTimestamp}){ daily_fees daily_holders_revenue daily_protocol_revenue @@ -34,19 +22,18 @@ const fetch = (chain: Chain) => { dailyRevenue: `${dailyRevenue}`, dailyHoldersRevenue: `${dailyFee.trading.getDailyFee.daily_holders_revenue}`, dailyProtocolRevenue: `${dailyFee.trading.getDailyFee.daily_protocol_revenue}`, - timestamp, }; }; -}; const adapter: Adapter = { adapter: { [CHAIN.ELROND]: { - fetch: fetch(CHAIN.ARBITRUM), + fetch, start: 1706745600, runAtCurrTime: true, } }, isExpensiveAdapter: true, + version: 2 }; export default adapter; From 35f9200a8538acb77912cb91d2c007b7f072dc2c Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 14:13:32 +0100 Subject: [PATCH 0638/1590] azuro --- fees/avantis/index.ts | 1 + fees/azuro/index.ts | 18 +++++++----------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/fees/avantis/index.ts b/fees/avantis/index.ts index afb52569df..628801ff67 100644 --- a/fees/avantis/index.ts +++ b/fees/avantis/index.ts @@ -56,6 +56,7 @@ const adapter: SimpleAdapter = { start: 1706313600, }, }, + version: 1 }; export default adapter; diff --git a/fees/azuro/index.ts b/fees/azuro/index.ts index c347d13df3..9e936695c9 100644 --- a/fees/azuro/index.ts +++ b/fees/azuro/index.ts @@ -1,4 +1,4 @@ -import { Adapter, ChainEndpoints, FetchResultFees } from "../../adapters/types"; +import { Adapter, ChainEndpoints, FetchOptions, FetchResultFees } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { Bet, BetResult } from "./types"; import { Chain } from "@defillama/sdk/build/general"; @@ -66,16 +66,12 @@ const calculateAmounts = (bets: Bet[]) => { const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number): Promise => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const fromTimestamp = todaysTimestamp - 60 * 60 * 24; - const toTimestamp = todaysTimestamp; - + return async ({ endTimestamp, startTimestamp }: FetchOptions) => { const [bets, totalBets] = await Promise.all([ - fetchAllBets(graphUrls[chain], fromTimestamp, toTimestamp, false), - fetchAllBets(graphUrls[chain], getStartTimestamp[chain], toTimestamp, false), - fetchAllBets(graphUrls[chain], fromTimestamp, toTimestamp, true), - fetchAllBets(graphUrls[chain], getStartTimestamp[chain], toTimestamp, true) + fetchAllBets(graphUrls[chain], startTimestamp, endTimestamp, false), + fetchAllBets(graphUrls[chain], getStartTimestamp[chain], endTimestamp, false), + fetchAllBets(graphUrls[chain], startTimestamp, endTimestamp, true), + fetchAllBets(graphUrls[chain], getStartTimestamp[chain], endTimestamp, true) ]); const { totalBetAmount: dailyBetAmount, totalWonAmount: dailyWonAmount } = calculateAmounts(bets); @@ -85,7 +81,6 @@ const graphs = (graphUrls: ChainEndpoints) => { const dailyPoolProfit = dailyBetAmount - dailyWonAmount; return { - timestamp, dailyFees: dailyPoolProfit.toString(), dailyRevenue: dailyPoolProfit.toString(), totalFees: totalFees.toString(), @@ -128,6 +123,7 @@ const adapter: Adapter = { meta: { methodology }, }, }, + version: 2 }; export default adapter; From c739709191c77f991ceb168e32368402c6448449 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 14:19:26 +0100 Subject: [PATCH 0639/1590] beefy --- fees/azuro/index.ts | 3 +-- fees/beefy/index.ts | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/azuro/index.ts b/fees/azuro/index.ts index 9e936695c9..ef3fab11cb 100644 --- a/fees/azuro/index.ts +++ b/fees/azuro/index.ts @@ -1,9 +1,8 @@ -import { Adapter, ChainEndpoints, FetchOptions, FetchResultFees } from "../../adapters/types"; +import { Adapter, ChainEndpoints, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { Bet, BetResult } from "./types"; import { Chain } from "@defillama/sdk/build/general"; import { request, gql } from "graphql-request"; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints: ChainEndpoints = { [CHAIN.POLYGON]: "https://thegraph.azuro.org/subgraphs/name/azuro-protocol/azuro-api-polygon-v3", diff --git a/fees/beefy/index.ts b/fees/beefy/index.ts index 8c49baf9a5..f825063d8d 100644 --- a/fees/beefy/index.ts +++ b/fees/beefy/index.ts @@ -58,6 +58,7 @@ const methodology = { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.ARBITRUM]: { fetch: fetch('arbitrum'), From 1efaf4ebc5a6ecb6c2011783261735153cf37078 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 14:22:30 +0100 Subject: [PATCH 0640/1590] betswirl --- fees/betswirl/index.ts | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/fees/betswirl/index.ts b/fees/betswirl/index.ts index 0fd04bff65..2e805184d6 100644 --- a/fees/betswirl/index.ts +++ b/fees/betswirl/index.ts @@ -1,20 +1,7 @@ import { request } from "graphql-request"; -import BigNumber from "bignumber.js"; - -import { Adapter, ChainBlocks, FetchOptions, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { BSC, POLYGON, AVAX, ARBITRUM } from "../../helpers/chains"; -import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../../utils/date"; import { Chain } from "@defillama/sdk/build/general"; -import { getPrices } from "../../utils/prices"; -import { getBlock } from "../../helpers/getBlock"; - -const ten = toBN("10"); -function fromWei(wei: string | BigNumber, unit = 18) { - return toBN(wei).dividedBy(ten.pow(unit)); -} -function toBN(wei: string | BigNumber) { - return new BigNumber(wei); -} const endpoints: any = { [BSC]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-bnb", @@ -24,10 +11,6 @@ const endpoints: any = { [ARBITRUM]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-arbitrum", }; -type TBalance = { - [s: string]: number; -} - interface IToken { id: string; dividendAmount: string; @@ -53,7 +36,7 @@ interface IGraph { function graphs() { return (chain: Chain): any => { - return async (timestamp: number, _: ChainBlocks, { createBalances, getFromBlock, getToBlock }: FetchOptions): Promise => { + return async ({ createBalances, getFromBlock, getToBlock }: FetchOptions) => { const todaysBlock = await getToBlock(); const yesterdaysBlock = await getFromBlock(); @@ -159,7 +142,6 @@ function graphs() { dailySupplySideRevenue.add(tokenKey, 0 - +initiatorAmount) } return { - timestamp, dailyFees, dailyUserFees: dailyFees, dailyRevenue, @@ -233,6 +215,7 @@ const meta = { }; const adapter: Adapter = { + version: 2, adapter: { [BSC]: { start: 1658880000, From ad4ee6618db25e7bb7c250a96e8383074283b9aa Mon Sep 17 00:00:00 2001 From: denissergeev Date: Wed, 29 May 2024 16:37:23 +0300 Subject: [PATCH 0641/1590] Add V1 vault for Amphor tracking --- fees/amphor/index.ts | 116 +++++++++++----------------------------- helpers/coreAssets.json | 3 +- 2 files changed, 32 insertions(+), 87 deletions(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index 7aeed749ae..f9d135304a 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -7,9 +7,7 @@ import { ETHEREUM } from "../../helpers/chains"; import ADDRESSES from '../../helpers/coreAssets.json' import { getBlock } from "../../helpers/getBlock"; -const AmphorILHedgedUSDC_contractAddress: string = '0x3b022EdECD65b63288704a6fa33A8B9185b5096b'; -const AmphorILHedgedWSTETH_contractAddress: string = '0x2791EB5807D69Fe10C02eED6B4DC12baC0701744'; -const AmphorILHedgedWBTC_contractAddress: string = '0xC4A324fDF8a2495776B4d6cA46599B5a52f96489'; +const AmphorILHedgedWSTETH_contractAddress: string = '0xcDC51F2B0e5F0906f2fd5f557de49D99c34Df54e'; const AmphorPTezETHVault_contractAddress: string = '0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1'; const AmphorPTrsETHVault_contractAddress: string = '0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E'; const AmphorPTweETHVault_contractAddress: string = '0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966'; @@ -54,9 +52,7 @@ const contractAbi: ethers.InterfaceAbi = [ }, ] -const AmphorILHedgedUSDC_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedUSDC_contractAddress, contractAbi); const AmphorILHedgedWSTETH_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedWSTETH_contractAddress, contractAbi); -const AmphorILHedgedWBTC_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedWBTC_contractAddress, contractAbi); const AmphorPTezETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTezETHVault_contractAddress, contractAbi); const AmphorPTrsETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTrsETHVault_contractAddress, contractAbi); const AmphorPTweETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTweETHVault_contractAddress, contractAbi); @@ -80,18 +76,12 @@ const data = async (timestamp: number): Promise => { const fromTimestamp = timestamp - 60 * 60 * 24; const toBlock = await getBlock(toTimestamp, CHAIN.ETHEREUM, {}); - const eventFilterUSDC: EventFilter = { - address: AmphorILHedgedUSDC_contractAddress, - topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] - }; + const eventFilterWSTETH: EventFilter = { address: AmphorILHedgedWSTETH_contractAddress, topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; - const eventFilterWBTC: EventFilter = { - address: AmphorILHedgedWBTC_contractAddress, - topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] - }; + const eventFilterPTezETH: EventFilter = { address: AmphorPTezETHVault_contractAddress, topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] @@ -105,13 +95,7 @@ const data = async (timestamp: number): Promise => { topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; - const eventsUSDC = (await sdk.getEventLogs({ - target: AmphorILHedgedUSDC_contractAddress, - topics: eventFilterUSDC.topics as string[], - fromBlock: 18299242, - toBlock: toBlock, - chain: CHAIN.ETHEREUM, - })) as ethers.Log[]; + const eventsWSTETH = (await sdk.getEventLogs({ target: AmphorILHedgedWSTETH_contractAddress, @@ -121,13 +105,7 @@ const data = async (timestamp: number): Promise => { chain: CHAIN.ETHEREUM, })) as ethers.Log[]; - const eventsWBTC = (await sdk.getEventLogs({ - target: AmphorILHedgedWBTC_contractAddress, - topics: eventFilterWBTC.topics as string[], - fromBlock: 18535914, - toBlock: toBlock, - chain: CHAIN.ETHEREUM, - })) as ethers.Log[]; + const eventsPTezETH = (await sdk.getEventLogs({ target: AmphorPTezETHVault_contractAddress, @@ -153,12 +131,8 @@ const data = async (timestamp: number): Promise => { chain: CHAIN.ETHEREUM, })) as ethers.Log[]; - let totalRevenueUSDC = BigInt(0); - let totalFeesUSDC = BigInt(0); let totalRevenueWSTETH = BigInt(0); let totalFeesWSTETH = BigInt(0); - let totalRevenueWBTC = BigInt(0); - let totalFeesWBTC = BigInt(0); let totalRevenuePTezETH = BigInt(0); let totalFeesPTezETH = BigInt(0); let totalRevenuePTrsETH = BigInt(0); @@ -166,28 +140,16 @@ const data = async (timestamp: number): Promise => { let totalRevenuePTweETH = BigInt(0); let totalFeesPTweETH = BigInt(0); - let dailyFeesUSDC = BigInt(0); let dailyFeesWSTETH = BigInt(0); - let dailyFeesWBTC = BigInt(0); let dailyFeesPTezETH = BigInt(0); let dailyFeesPTrsETH = BigInt(0); let dailyFeesPTweETH = BigInt(0); - let dailyRevenueUSDC = BigInt(0); let dailyRevenueWSTETH = BigInt(0); - let dailyRevenueWBTC = BigInt(0); let dailyRevenuePTezETH = BigInt(0); let dailyRevenuePTrsETH = BigInt(0); let dailyRevenuePTweETH = BigInt(0); - eventsUSDC.forEach(res => { - const event = AmphorILHedgedUSDC_contract.interface.parseLog(res as any); - totalRevenueUSDC += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); - totalFeesUSDC += BigInt(event!.args.fees); - if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { - dailyFeesUSDC += BigInt(event!.args.fees); - dailyRevenueUSDC = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); - } - }); + eventsWSTETH.forEach(res => { const event = AmphorILHedgedWSTETH_contract.interface.parseLog(res as any); @@ -199,50 +161,40 @@ const data = async (timestamp: number): Promise => { } }); - eventsWBTC.forEach(res => { - const event = AmphorILHedgedWBTC_contract.interface.parseLog(res as any); - totalRevenueWBTC += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); - totalFeesWBTC += BigInt(event!.args.fees); - if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { - dailyFeesWBTC += BigInt(event!.args.fees); - dailyRevenueWBTC = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); - } - }); + eventsPTezETH.forEach(res => { const event = AmphorPTezETHVault_contract.interface.parseLog(res as any); - totalRevenuePTezETH += BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); - totalFeesPTezETH += BigInt(event.args!.fees); - if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { - dailyFeesPTezETH += BigInt(event.args!.fees); - dailyRevenuePTezETH = BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); + totalRevenuePTezETH += BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); + totalFeesPTezETH += BigInt(event!.args!.fees); + if (event!.args!.timestamp > fromTimestamp && event!.args!.timestamp < toTimestamp) { + dailyFeesPTezETH += BigInt(event!.args!.fees); + dailyRevenuePTezETH = BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); } }); eventsPTrsETH.forEach(res => { const event = AmphorPTrsETHVault_contract.interface.parseLog(res as any); - totalRevenuePTrsETH += BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); - totalFeesPTrsETH += BigInt(event.args!.fees); - if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { - dailyFeesPTrsETH += BigInt(event.args!.fees); - dailyRevenuePTrsETH = BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); + totalRevenuePTrsETH += BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); + totalFeesPTrsETH += BigInt(event!.args!.fees); + if (event!.args!.timestamp > fromTimestamp && event!.args!.timestamp < toTimestamp) { + dailyFeesPTrsETH += BigInt(event!.args!.fees); + dailyRevenuePTrsETH = BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); } }); eventsPTweETH.forEach(res => { const event = AmphorPTweETHVault_contract.interface.parseLog(res as any); - totalRevenuePTweETH += BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); - totalFeesPTweETH += BigInt(event.args!.fees); - if (event.args!.timestamp > fromTimestamp && event.args!.timestamp < toTimestamp) { - dailyFeesPTweETH += BigInt(event.args!.fees); - dailyRevenuePTweETH = BigInt(event.args!.returnedAssets) - BigInt(event.args!.lastSavedBalance); + totalRevenuePTweETH += BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); + totalFeesPTweETH += BigInt(event!.args!.fees); + if (event!.args!.timestamp > fromTimestamp && event!.args!.timestamp < toTimestamp) { + dailyFeesPTweETH += BigInt(event!.args!.fees); + dailyRevenuePTweETH = BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); } }); const TOKENS = { - USDC: ADDRESSES.ethereum.USDC, - WSTETH: ADDRESSES.ethereum.WSTETH, - WBTC: ADDRESSES.ethereum.WBTC, + amprETH: ADDRESSES.ethereum.amprETH, PTezETH: "0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1", PTrsETH: "0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E", PTweETH: "0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966", @@ -252,30 +204,22 @@ const data = async (timestamp: number): Promise => { const dailyFees = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); const dailyRevenue = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); - totalFees.add(TOKENS.USDC, totalFeesUSDC.toString()); - totalFees.add(TOKENS.WSTETH, totalFeesWSTETH.toString()); - totalFees.add(TOKENS.WBTC, totalFeesWBTC.toString()); + totalFees.add(TOKENS.amprETH, totalFeesWSTETH.toString()); totalFees.add(TOKENS.PTezETH, totalFeesPTezETH.toString()); totalFees.add(TOKENS.PTrsETH, totalFeesPTrsETH.toString()); totalFees.add(TOKENS.PTweETH, totalFeesPTweETH.toString()); - totalRevenue.add(TOKENS.USDC, totalRevenueUSDC.toString()); - totalRevenue.add(TOKENS.WSTETH, totalRevenueWSTETH.toString()); - totalRevenue.add(TOKENS.WBTC, totalRevenueWBTC.toString()); + totalRevenue.add(TOKENS.amprETH, totalRevenueWSTETH.toString()); totalRevenue.add(TOKENS.PTezETH, totalRevenuePTezETH.toString()); totalRevenue.add(TOKENS.PTrsETH, totalRevenuePTrsETH.toString()); totalRevenue.add(TOKENS.PTweETH, totalRevenuePTweETH.toString()); - dailyFees.add(TOKENS.USDC, dailyFeesUSDC.toString()); - dailyFees.add(TOKENS.WSTETH, dailyFeesWSTETH.toString()); - dailyFees.add(TOKENS.WBTC, dailyFeesWBTC.toString()); + dailyFees.add(TOKENS.amprETH, dailyFeesWSTETH.toString()); dailyFees.add(TOKENS.PTezETH, dailyFeesPTezETH.toString()); dailyFees.add(TOKENS.PTrsETH, dailyFeesPTrsETH.toString()); dailyFees.add(TOKENS.PTweETH, dailyFeesPTweETH.toString()); - dailyRevenue.add(TOKENS.USDC, dailyRevenueUSDC.toString()); - dailyRevenue.add(TOKENS.WSTETH, dailyRevenueWSTETH.toString()); - dailyRevenue.add(TOKENS.WBTC, dailyRevenueWBTC.toString()); + dailyRevenue.add(TOKENS.amprETH, dailyRevenueWSTETH.toString()); dailyRevenue.add(TOKENS.PTezETH, dailyRevenuePTezETH.toString()); dailyRevenue.add(TOKENS.PTrsETH, dailyRevenuePTrsETH.toString()); dailyRevenue.add(TOKENS.PTweETH, dailyRevenuePTweETH.toString()); @@ -286,12 +230,12 @@ const data = async (timestamp: number): Promise => { return { timestamp: timestamp, totalFees: totalFeesNumber, - //totalRevenue: Number(await totalRevenue.getUSDValue()).toFixed(0), + totalRevenue: Number(await totalRevenue.getUSDValue()).toFixed(0), totalProtocolRevenue: totalFeesNumber, totalUserFees: totalFeesNumber, dailyFees: Number(await dailyFees.getUSDValue()).toFixed(0), - // dailyProtocolRevenue: dailyRevenueNumber, - //dailyRevenue: dailyRevenueNumber, + dailyProtocolRevenue: dailyRevenueNumber, + dailyRevenue: dailyRevenueNumber, }; } diff --git a/helpers/coreAssets.json b/helpers/coreAssets.json index 6c71d69dee..a75ad94998 100644 --- a/helpers/coreAssets.json +++ b/helpers/coreAssets.json @@ -44,7 +44,8 @@ "SUSHI": "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2", "cbETH": "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704", "FDUSD": "0xc5f0f7b66764f6ec8c8dff7ba683102295e16409", - "EETH": "0x35fa164735182de50811e8e2e824cfb9b6118ac2" + "EETH": "0x35fa164735182de50811e8e2e824cfb9b6118ac2", + "amprETH": "0xcDC51F2B0e5F0906f2fd5f557de49D99c34Df54e" }, "fantom": { "WFTM": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", From 882e3655c62d671fbe6493d97b886f98121eea87 Mon Sep 17 00:00:00 2001 From: denissergeev Date: Wed, 29 May 2024 17:01:21 +0300 Subject: [PATCH 0642/1590] Add V1 vault for Amphor tracking --- fees/amphor/index.ts | 38 ++++++++++++++++++++------------------ helpers/coreAssets.json | 2 +- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index f9d135304a..dc4d5dd4f5 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -7,7 +7,7 @@ import { ETHEREUM } from "../../helpers/chains"; import ADDRESSES from '../../helpers/coreAssets.json' import { getBlock } from "../../helpers/getBlock"; -const AmphorILHedgedWSTETH_contractAddress: string = '0xcDC51F2B0e5F0906f2fd5f557de49D99c34Df54e'; +const AmphorILHedgedWETH_contractAddress: string = '0xcDC51F2B0e5F0906f2fd5f557de49D99c34Df54e'; const AmphorPTezETHVault_contractAddress: string = '0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1'; const AmphorPTrsETHVault_contractAddress: string = '0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E'; const AmphorPTweETHVault_contractAddress: string = '0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966'; @@ -52,7 +52,7 @@ const contractAbi: ethers.InterfaceAbi = [ }, ] -const AmphorILHedgedWSTETH_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedWSTETH_contractAddress, contractAbi); +const AmphorILHedgedWETH_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedWETH_contractAddress, contractAbi); const AmphorPTezETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTezETHVault_contractAddress, contractAbi); const AmphorPTrsETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTrsETHVault_contractAddress, contractAbi); const AmphorPTweETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTweETHVault_contractAddress, contractAbi); @@ -77,8 +77,8 @@ const data = async (timestamp: number): Promise => { const toBlock = await getBlock(toTimestamp, CHAIN.ETHEREUM, {}); - const eventFilterWSTETH: EventFilter = { - address: AmphorILHedgedWSTETH_contractAddress, + const eventFilterWETH: EventFilter = { + address: AmphorILHedgedWETH_contractAddress, topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; @@ -97,9 +97,9 @@ const data = async (timestamp: number): Promise => { - const eventsWSTETH = (await sdk.getEventLogs({ - target: AmphorILHedgedWSTETH_contractAddress, - topics: eventFilterWSTETH.topics as string[], + const eventsWETH = (await sdk.getEventLogs({ + target: AmphorILHedgedWETH_contractAddress, + topics: eventFilterWETH.topics as string[], fromBlock: 18535914, toBlock: toBlock, chain: CHAIN.ETHEREUM, @@ -107,6 +107,8 @@ const data = async (timestamp: number): Promise => { + + const eventsPTezETH = (await sdk.getEventLogs({ target: AmphorPTezETHVault_contractAddress, topics: eventFilterPTezETH.topics as string[], @@ -131,7 +133,7 @@ const data = async (timestamp: number): Promise => { chain: CHAIN.ETHEREUM, })) as ethers.Log[]; - let totalRevenueWSTETH = BigInt(0); + let totalRevenueWETH = BigInt(0); let totalFeesWSTETH = BigInt(0); let totalRevenuePTezETH = BigInt(0); let totalFeesPTezETH = BigInt(0); @@ -140,7 +142,7 @@ const data = async (timestamp: number): Promise => { let totalRevenuePTweETH = BigInt(0); let totalFeesPTweETH = BigInt(0); - let dailyFeesWSTETH = BigInt(0); + let dailyFeesWETH = BigInt(0); let dailyFeesPTezETH = BigInt(0); let dailyFeesPTrsETH = BigInt(0); let dailyFeesPTweETH = BigInt(0); @@ -151,12 +153,12 @@ const data = async (timestamp: number): Promise => { - eventsWSTETH.forEach(res => { - const event = AmphorILHedgedWSTETH_contract.interface.parseLog(res as any); - totalRevenueWSTETH += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) + eventsWETH.forEach(res => { + const event = AmphorILHedgedWETH_contract.interface.parseLog(res as any); + totalRevenueWETH += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) totalFeesWSTETH += BigInt(event!.args.fees) if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { - dailyFeesWSTETH += BigInt(event!.args.fees); + dailyFeesWETH += BigInt(event!.args.fees); dailyRevenueWSTETH = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); } }); @@ -194,7 +196,7 @@ const data = async (timestamp: number): Promise => { }); const TOKENS = { - amprETH: ADDRESSES.ethereum.amprETH, + WETH: ADDRESSES.ethereum.WETH, PTezETH: "0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1", PTrsETH: "0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E", PTweETH: "0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966", @@ -204,22 +206,22 @@ const data = async (timestamp: number): Promise => { const dailyFees = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); const dailyRevenue = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); - totalFees.add(TOKENS.amprETH, totalFeesWSTETH.toString()); + totalFees.add(TOKENS.WETH, totalFeesWSTETH.toString()); totalFees.add(TOKENS.PTezETH, totalFeesPTezETH.toString()); totalFees.add(TOKENS.PTrsETH, totalFeesPTrsETH.toString()); totalFees.add(TOKENS.PTweETH, totalFeesPTweETH.toString()); - totalRevenue.add(TOKENS.amprETH, totalRevenueWSTETH.toString()); + totalRevenue.add(TOKENS.WETH, totalRevenueWETH.toString()); totalRevenue.add(TOKENS.PTezETH, totalRevenuePTezETH.toString()); totalRevenue.add(TOKENS.PTrsETH, totalRevenuePTrsETH.toString()); totalRevenue.add(TOKENS.PTweETH, totalRevenuePTweETH.toString()); - dailyFees.add(TOKENS.amprETH, dailyFeesWSTETH.toString()); + dailyFees.add(TOKENS.WETH, dailyFeesWETH.toString()); dailyFees.add(TOKENS.PTezETH, dailyFeesPTezETH.toString()); dailyFees.add(TOKENS.PTrsETH, dailyFeesPTrsETH.toString()); dailyFees.add(TOKENS.PTweETH, dailyFeesPTweETH.toString()); - dailyRevenue.add(TOKENS.amprETH, dailyRevenueWSTETH.toString()); + dailyRevenue.add(TOKENS.WETH, dailyRevenueWSTETH.toString()); dailyRevenue.add(TOKENS.PTezETH, dailyRevenuePTezETH.toString()); dailyRevenue.add(TOKENS.PTrsETH, dailyRevenuePTrsETH.toString()); dailyRevenue.add(TOKENS.PTweETH, dailyRevenuePTweETH.toString()); diff --git a/helpers/coreAssets.json b/helpers/coreAssets.json index a75ad94998..7e2aea66b5 100644 --- a/helpers/coreAssets.json +++ b/helpers/coreAssets.json @@ -45,7 +45,7 @@ "cbETH": "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704", "FDUSD": "0xc5f0f7b66764f6ec8c8dff7ba683102295e16409", "EETH": "0x35fa164735182de50811e8e2e824cfb9b6118ac2", - "amprETH": "0xcDC51F2B0e5F0906f2fd5f557de49D99c34Df54e" + "WETH": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" }, "fantom": { "WFTM": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", From 31b615e660acc7c0f9b43622a1683aa335ab91b2 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 15:15:52 +0100 Subject: [PATCH 0643/1590] core markets --- fees/blex/index.ts | 3 ++- fees/bluemove/index.ts | 1 + fees/blur/index.ts | 9 +++++---- fees/bonk-bot/index.ts | 1 + fees/buffer/index.ts | 4 ++-- fees/core-markets/index.ts | 17 +++++------------ 6 files changed, 16 insertions(+), 19 deletions(-) diff --git a/fees/blex/index.ts b/fees/blex/index.ts index 088fea02c9..0db9ab2e29 100644 --- a/fees/blex/index.ts +++ b/fees/blex/index.ts @@ -111,7 +111,8 @@ const adapter: Adapter = { fetch: getFetch(allFeesData,userFeesData)(ARBITRUM), start: 1691211277, }, - } + }, + version: 1 } export default adapter; diff --git a/fees/bluemove/index.ts b/fees/bluemove/index.ts index 65f879ae77..239343fb55 100644 --- a/fees/bluemove/index.ts +++ b/fees/bluemove/index.ts @@ -39,6 +39,7 @@ const adapter: SimpleAdapter = { start: 1666224000, }, }, + version: 1 }; export default adapter; diff --git a/fees/blur/index.ts b/fees/blur/index.ts index 284fda2e1d..cb9d6f3410 100644 --- a/fees/blur/index.ts +++ b/fees/blur/index.ts @@ -1,4 +1,4 @@ -import { Adapter, FetchOptions, FetchResultFees } from "../../adapters/types" +import { Adapter, FetchOptions } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" import { ethers } from "ethers" import { queryIndexer } from "../../helpers/indexer"; @@ -18,7 +18,7 @@ const unpackTypePriceCollection = (packedValue: any): any => { }; -const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { +const fetch: any = async (options: FetchOptions) => { const contract_interface = new ethers.Interface(abi); const dailyFees = options.createBalances(); @@ -81,7 +81,7 @@ const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { const _price = price.toString() * 1 dailyFees.addGasToken(_rate * _price); }) - return { dailyFees, timestamp } + return { dailyFees } } const adapter: Adapter = { @@ -90,6 +90,7 @@ const adapter: Adapter = { fetch, start: 1688256000 } - } + }, + version: 2 } export default adapter diff --git a/fees/bonk-bot/index.ts b/fees/bonk-bot/index.ts index 920ed1e1c7..bb93f7b90a 100644 --- a/fees/bonk-bot/index.ts +++ b/fees/bonk-bot/index.ts @@ -19,6 +19,7 @@ const fetchFees = async (timestamp: number): Promise => { } const adapter: SimpleAdapter = { + version: 1, adapter: { [CHAIN.SOLANA]: { fetch: fetchFees, diff --git a/fees/buffer/index.ts b/fees/buffer/index.ts index 1f1a4e0a0d..a41ec83207 100644 --- a/fees/buffer/index.ts +++ b/fees/buffer/index.ts @@ -3,7 +3,6 @@ import { request, gql } from "graphql-request"; import type { ChainEndpoints } from "../../adapters/types" import { Chain } from '@defillama/sdk/build/general'; import BigNumber from "bignumber.js"; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { Adapter } from "../../adapters/types" const endpoints = { @@ -54,7 +53,8 @@ const adapter: Adapter = { fetch: graphs(endpoints)(CHAIN.ARBITRUM), start: 1674950400 , }, - } + }, + version: 1 } export default adapter; diff --git a/fees/core-markets/index.ts b/fees/core-markets/index.ts index 5d6776a8d0..71a013e414 100644 --- a/fees/core-markets/index.ts +++ b/fees/core-markets/index.ts @@ -1,11 +1,7 @@ import BigNumber from "bignumber.js"; import request, { gql } from "graphql-request"; -import { FetchResultFees, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; - -const ONE_DAY_IN_SECONDS = 60 * 60 * 24; - const endpoint = "https://api.studio.thegraph.com/query/62472/core-analytics-082/version/latest"; @@ -48,11 +44,11 @@ const toString = (x: BigNumber) => { return x.toString(); }; -const fetchVolume = async (timestamp: number): Promise => { +const fetchVolume = async ({ startTimestamp, endTimestamp }: FetchOptions) => { const response: IGraphResponse = await request(endpoint, query, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), + from: startTimestamp, + to: endTimestamp, }); // Merging both responses @@ -85,11 +81,7 @@ const fetchVolume = async (timestamp: number): Promise => { const totalProtocolRevenue = "0"; const totalSupplySideRevenue = "0"; - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - return { - timestamp: dayTimestamp, - dailyFees: _dailyFees ?? "0", totalFees: _totalFees ?? "0", @@ -112,5 +104,6 @@ const adapter: SimpleAdapter = { start: async () => 236678, }, }, + version: 2 }; export default adapter; From 4f29dddff605ea4a56e5916b34b3f33bf9813de9 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 15:20:49 +0100 Subject: [PATCH 0644/1590] plaza --- fees/danogo/index.ts | 12 ++++++------ fees/defiplaza/index.ts | 16 ++++++---------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/fees/danogo/index.ts b/fees/danogo/index.ts index 2902b9a8bb..027bc98966 100644 --- a/fees/danogo/index.ts +++ b/fees/danogo/index.ts @@ -1,4 +1,4 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { getPrices } from "../../utils/prices"; import fetchURL from "../../utils/fetchURL"; import { DanogoDimensions, DanogoFees } from "./types"; @@ -35,13 +35,12 @@ const convertDataToUSD = (data: DanogoDimensions, price: number) => { return convertedData; } -const fetchData = async (timestamp: number) => { - const dataPromise = fetchDanogoGatewayData(timestamp); - const adaPricePromise = fetchADAprice(timestamp); +const fetchData = async ({ endTimestamp }: FetchOptions) => { + const dataPromise = fetchDanogoGatewayData(endTimestamp); + const adaPricePromise = fetchADAprice(endTimestamp); const [data, adaPrice] = await Promise.all([dataPromise, adaPricePromise]); return { - timestamp: timestamp, ...convertDataToUSD(data, adaPrice) }; } @@ -53,7 +52,8 @@ const adapter: SimpleAdapter = { start: DANOGO_START_TIMESTAMP, runAtCurrTime: false, } - } + }, + version: 2 }; export default adapter; diff --git a/fees/defiplaza/index.ts b/fees/defiplaza/index.ts index b97fbb355a..3ded2083ae 100644 --- a/fees/defiplaza/index.ts +++ b/fees/defiplaza/index.ts @@ -1,7 +1,6 @@ import request, { gql } from "graphql-request"; -import { FetchResultGeneric, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import fetchURL from "../../utils/fetchURL"; type RadixPlazaResponse = { @@ -18,11 +17,10 @@ const thegraph_endpoints = "https://api.thegraph.com/subgraphs/name/omegasyndica const radix_endpoint = "https://radix.defiplaza.net/api/defillama/volume"; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { - fetch: async (timestamp: number): Promise => { - const toTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const fromTimestamp = timestamp - 86400; + fetch: async ({ startTimestamp, endTimestamp }: FetchOptions) => { const graphData = (await request(thegraph_endpoints, gql` { factories(first: 1) { @@ -30,7 +28,7 @@ const adapter: SimpleAdapter = { totalTradeVolumeUSD totalFeesEarnedUSD } - dailies(first: 1, where:{date_lte: ${toTimestamp}, date_gte: ${fromTimestamp}}, orderBy: date, orderDirection:desc) { + dailies(first: 1, where:{date_lte: ${endTimestamp}, date_gte: ${startTimestamp}}, orderBy: date, orderDirection:desc) { date tradeVolumeUSD swapUSD @@ -49,7 +47,6 @@ const adapter: SimpleAdapter = { dailyUserFees, dailyFees, dailySupplySideRevenue, - timestamp } }, meta: { @@ -61,8 +58,8 @@ const adapter: SimpleAdapter = { start: 1633237008 }, [CHAIN.RADIXDLT]: { - fetch: async (timestamp: number): Promise => { - const daily: RadixPlazaResponse = (await fetchURL(radix_endpoint + `?timestamp=${timestamp}`)); + fetch: async ({ endTimestamp }: FetchOptions) => { + const daily: RadixPlazaResponse = (await fetchURL(radix_endpoint + `?timestamp=${endTimestamp}`)); const dailySupplySideRevenue = daily.feesUSD; const dailyProtocolRevenue = daily.royaltiesUSD; @@ -77,7 +74,6 @@ const adapter: SimpleAdapter = { dailyRevenue, dailyProtocolRevenue, dailySupplySideRevenue, - timestamp } }, meta: { From ca7b35dfed7c1a15f3a27668210ed4d5f12d5efa Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 15:26:48 +0100 Subject: [PATCH 0645/1590] extra --- fees/dexter/index.ts | 3 ++- fees/dln/index.ts | 1 + fees/equation-v2/index.ts | 1 + fees/equation/index.ts | 1 + fees/equity/index.ts | 1 + fees/ethereum/index.ts | 6 +++--- fees/extra/index.ts | 9 +++------ 7 files changed, 12 insertions(+), 10 deletions(-) diff --git a/fees/dexter/index.ts b/fees/dexter/index.ts index 81438e6367..3c8a4b9050 100644 --- a/fees/dexter/index.ts +++ b/fees/dexter/index.ts @@ -37,7 +37,8 @@ const adapter: Adapter = { runAtCurrTime: true, start: 0, }, - } + }, + version: 1 }; export default adapter; diff --git a/fees/dln/index.ts b/fees/dln/index.ts index 636d573b14..055b438b93 100644 --- a/fees/dln/index.ts +++ b/fees/dln/index.ts @@ -38,6 +38,7 @@ function formatTimestampAsDate(timestamp: number) { } const adapter: Adapter = { + version: 1, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch(1), diff --git a/fees/equation-v2/index.ts b/fees/equation-v2/index.ts index b650f64171..8d4f6738ea 100644 --- a/fees/equation-v2/index.ts +++ b/fees/equation-v2/index.ts @@ -50,6 +50,7 @@ const getFetch = () => (chain: string): Fetch => async (timestamp: number) => { }; const adapter: SimpleAdapter = { + version: 1, adapter: { [CHAIN.ARBITRUM]: { fetch: getFetch()(CHAIN.ARBITRUM), diff --git a/fees/equation/index.ts b/fees/equation/index.ts index 729fd9151d..509e381d76 100644 --- a/fees/equation/index.ts +++ b/fees/equation/index.ts @@ -50,6 +50,7 @@ const getFetch = () => (chain: string): Fetch => async (timestamp: number) => { }; const adapter: SimpleAdapter = { + version: 1, adapter: { [CHAIN.ARBITRUM]: { fetch: getFetch()(CHAIN.ARBITRUM), diff --git a/fees/equity/index.ts b/fees/equity/index.ts index 102f98549f..4fc7a72624 100644 --- a/fees/equity/index.ts +++ b/fees/equity/index.ts @@ -43,6 +43,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 1, adapter: { [FANTOM]: { fetch: graphs(endpoints)(FANTOM), diff --git a/fees/ethereum/index.ts b/fees/ethereum/index.ts index 6ed9e371d2..fb4b01528e 100644 --- a/fees/ethereum/index.ts +++ b/fees/ethereum/index.ts @@ -1,9 +1,9 @@ -import { Adapter, ChainBlocks, FetchOptions, ProtocolType } from "../../adapters/types"; +import { Adapter, FetchOptions, ProtocolType } from "../../adapters/types"; import { ETHEREUM } from "../../helpers/chains"; import { queryIndexer } from '../../helpers/indexer'; -const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { +const fetch = async (options: FetchOptions) => { const toBlock = await options.getToBlock() const fromBlock = await options.getFromBlock() const eth_txs: any = await queryIndexer(` @@ -37,7 +37,6 @@ const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) = const dailyFee = options.createBalances() dailyFee.addGasToken(Number(eth_txs[0].txn_fees) * 10 ** 18) return { - timestamp, dailyFees: dailyFee, dailyRevenue: dailyRev, dailyHoldersRevenue: dailyRev, @@ -45,6 +44,7 @@ const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) = }; const adapter: Adapter = { + version: 2, adapter: { [ETHEREUM]: { fetch, diff --git a/fees/extra/index.ts b/fees/extra/index.ts index 8031344e3d..bf41605ec3 100644 --- a/fees/extra/index.ts +++ b/fees/extra/index.ts @@ -1,4 +1,4 @@ -import { Adapter, ChainBlocks, FetchOptions, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import request from "graphql-request"; import BigNumber from "bignumber.js"; @@ -28,12 +28,9 @@ interface ILendingPool { } const graphs = (chain: CHAIN) => { - return async (timestamp: number, _: ChainBlocks, { createBalances, startOfDay }: FetchOptions): Promise => { + return async ({ fromTimestamp, toTimestamp, createBalances }: FetchOptions) => { const dailyFees = createBalances() - const fromTimestamp = startOfDay - 60 * 60 * 24 - const toTimestamp = startOfDay - const farmingQuery = `{ feePaids( where: { blockTimestamp_lte: ${toTimestamp}, blockTimestamp_gte: ${fromTimestamp} }, @@ -93,13 +90,13 @@ const graphs = (chain: CHAIN) => { dailyRevenue.resizeBy(0.5) return { - timestamp: startOfDay, dailyFees, dailyRevenue, }; }; } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.OPTIMISM]: { fetch: graphs(CHAIN.OPTIMISM), From e557c15ff91fec6064f204fbf6745d962c2a7158 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 15:48:04 +0100 Subject: [PATCH 0646/1590] garden --- fees/first-crypto-bank/index.ts | 5 +++-- fees/fjord-foundry/index.ts | 9 +++++---- fees/furucombo/index.ts | 10 ++++------ fees/fwx/index.ts | 1 + fees/garden/index.ts | 10 +++++----- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/fees/first-crypto-bank/index.ts b/fees/first-crypto-bank/index.ts index c72c2db82b..2ce2f4c29f 100644 --- a/fees/first-crypto-bank/index.ts +++ b/fees/first-crypto-bank/index.ts @@ -4,7 +4,7 @@ import { queryIndexer } from "../../helpers/indexer"; /** Calculate USD equivalent for a given ether amount */ -const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { +const fetch: any = async (options: FetchOptions) => { const dailyFees = options.createBalances(); @@ -24,10 +24,11 @@ const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { AND block_time BETWEEN llama_replace_date_range; `, options); transactions.map((transaction: any) => dailyFees.addGasToken(transaction.eth_value)) - return { timestamp, dailyFees, } + return { dailyFees, } } const adapter: Adapter = { + version: 2, adapter: { ethereum: { fetch, diff --git a/fees/fjord-foundry/index.ts b/fees/fjord-foundry/index.ts index 50a4c90113..684828ab1d 100644 --- a/fees/fjord-foundry/index.ts +++ b/fees/fjord-foundry/index.ts @@ -1,5 +1,5 @@ -import { BreakdownAdapter, FetchOptions, FetchV2 } from "../../adapters/types"; -import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfPreviousDayUTC } from "../../utils/date"; +import { BreakdownAdapter, FetchOptions } from "../../adapters/types"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; @@ -70,12 +70,13 @@ const methodology = { }; const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: Object.keys(v2ChainIDs).reduce((acc, chain) => { return { ...acc, [chain]: { - fetch: async (_ts: number, _chain: any, { startOfDay }: FetchOptions) => await getV2Data(startOfDay, v2ChainIDs[chain]), + fetch: async ({ startOfDay }: FetchOptions) => await getV2Data(startOfDay, v2ChainIDs[chain]), start: 1702857600, meta: { methodology, @@ -87,7 +88,7 @@ const adapter: BreakdownAdapter = { return { ...acc, [chain]: { - fetch: async (_ts: number, _chain: any, { startOfDay }: FetchOptions) => await getV1Data(startOfDay, v1ChainIDs[chain]), + fetch: async ({ startOfDay }: FetchOptions) => await getV1Data(startOfDay, v1ChainIDs[chain]), start: 1631836800, meta: { methodology, diff --git a/fees/furucombo/index.ts b/fees/furucombo/index.ts index 7c8798d662..20609dd3e7 100644 --- a/fees/furucombo/index.ts +++ b/fees/furucombo/index.ts @@ -1,29 +1,27 @@ -import { Adapter, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import fetchURL from "../../utils/fetchURL"; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; function fetch(chainId: number) { - return async (timestamp: number): Promise => { - const timestampToday = getTimestampAtStartOfDayUTC(timestamp); + return async ({ endTimestamp }: FetchOptions) => { const resp: { totalFees: string; dailyFees: string; } = await fetchURL( - `https://api.furucombo.app/v1/defillama/${chainId}/fees?timestamp=${timestampToday}` + `https://api.furucombo.app/v1/defillama/${chainId}/fees?timestamp=${endTimestamp}` ); return { ...resp, totalRevenue: resp.totalFees, dailyRevenue: resp.dailyFees, - timestamp, }; }; } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch(1), diff --git a/fees/fwx/index.ts b/fees/fwx/index.ts index 947c75c02c..41499fd5b5 100644 --- a/fees/fwx/index.ts +++ b/fees/fwx/index.ts @@ -68,5 +68,6 @@ const adapter: Adapter = { start: 1701907200, }, }, + version: 1 }; export default adapter; diff --git a/fees/garden/index.ts b/fees/garden/index.ts index 1cd336e2bf..83fc5429f0 100644 --- a/fees/garden/index.ts +++ b/fees/garden/index.ts @@ -1,4 +1,4 @@ -import { FetchResultFees, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import fetchURL from "../../utils/fetchURL"; import BigNumber from "bignumber.js"; @@ -22,13 +22,13 @@ type IApiFeeResponse = { }; }; -const fetch = (chain: string) => async (timestamp: number): Promise => { +const fetch = (chain: string) => async ({ endTimestamp }: FetchOptions) => { const dailyFeeResponse: IApiFeeResponse = ( - await fetchURL(feeUrl(chainMapper[chain], timestamp, "day")) + await fetchURL(feeUrl(chainMapper[chain], endTimestamp, "day")) ); const totalFeeResponse: IApiFeeResponse = ( - await fetchURL(feeUrl(chainMapper[chain], timestamp)) + await fetchURL(feeUrl(chainMapper[chain], endTimestamp)) ); const dailyUserFees = new BigNumber(dailyFeeResponse.data.fee); @@ -39,7 +39,6 @@ const fetch = (chain: string) => async (timestamp: number): Promise async (timestamp: number): Promise { return { ...acc, From 16f9957c1b4577ec6b977784ce66876076cfa8e5 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 15:54:14 +0100 Subject: [PATCH 0647/1590] goku --- fees/gearbox/index.ts | 5 +++-- fees/geist-finance/index.ts | 1 + fees/ghostmarket/index.ts | 10 ++++------ fees/gmx-v2/index.ts | 1 + fees/goku-money/index.ts | 30 +++++++++--------------------- 5 files changed, 18 insertions(+), 29 deletions(-) diff --git a/fees/gearbox/index.ts b/fees/gearbox/index.ts index 3e5bf8bfca..a85929b272 100644 --- a/fees/gearbox/index.ts +++ b/fees/gearbox/index.ts @@ -51,7 +51,7 @@ interface ILog { } -const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { +const fetch: any = async (options: FetchOptions) => { const dailyFees = options.createBalances(); @@ -167,10 +167,11 @@ const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { }); const dailyRevenue = dailyFees.clone() dailyRevenue.resizeBy(0.5); - return { timestamp, dailyFees, dailyRevenue, }; + return { dailyFees, dailyRevenue, }; }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch, diff --git a/fees/geist-finance/index.ts b/fees/geist-finance/index.ts index ecc3a86874..3a7c7a3608 100644 --- a/fees/geist-finance/index.ts +++ b/fees/geist-finance/index.ts @@ -39,6 +39,7 @@ const graphs = () => { const adapter: Adapter = { + version: 1, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [FANTOM]: { diff --git a/fees/ghostmarket/index.ts b/fees/ghostmarket/index.ts index bb868b2a30..7aa7bb9da8 100644 --- a/fees/ghostmarket/index.ts +++ b/fees/ghostmarket/index.ts @@ -1,6 +1,5 @@ import { Adapter, DISABLED_ADAPTER_KEY } from "../../adapters/types"; -import type { ChainEndpoints } from "../../adapters/types" -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; +import type { ChainEndpoints, FetchOptions } from "../../adapters/types" import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; @@ -30,13 +29,11 @@ const methodology = { const apis = (apiUrls: ChainEndpoints) => { return (chain: CHAIN) => { - return async (timestamp: number) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const url = await buildUrl(apiUrls[chain], todaysTimestamp); + return async ({ endTimestamp }: FetchOptions) => { + const url = await buildUrl(apiUrls[chain], endTimestamp); const data = (await fetchURL(url)); return { - timestamp, dailyFees: String(data.dailyFees), totalFees: String(data.userFees), dailyUserFees: String(data.dailyFees), @@ -55,6 +52,7 @@ const apis = (apiUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 2, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.NEO]: { diff --git a/fees/gmx-v2/index.ts b/fees/gmx-v2/index.ts index 1a9b9a5db5..ba32f49562 100644 --- a/fees/gmx-v2/index.ts +++ b/fees/gmx-v2/index.ts @@ -34,6 +34,7 @@ const fetch = (chain: Chain) => { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.ARBITRUM]: { fetch: fetch(CHAIN.ARBITRUM), diff --git a/fees/goku-money/index.ts b/fees/goku-money/index.ts index 4134106f9f..c88d259445 100644 --- a/fees/goku-money/index.ts +++ b/fees/goku-money/index.ts @@ -1,8 +1,7 @@ import ADDRESSES from '../../helpers/coreAssets.json' import * as sdk from "@defillama/sdk"; -import { Adapter, ChainBlocks } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getBlock } from "../../helpers/getBlock"; import { Chain } from "@defillama/sdk/build/general"; const BORROW_CONTRACT_ADDRESS = [ @@ -38,13 +37,7 @@ const PYTH_CONFIG = { type PYTH_CONFIG_TYPE = typeof PYTH_CONFIG; type PYTH_CONFIG_KEYS = keyof PYTH_CONFIG_TYPE; -const fetchGaiRevenue = async (timestamp: number, balances: sdk.Balances) => { - const fromTimestamp = timestamp - 60 * 60 * 24; - const toTimestamp = timestamp; - - const fromBlock = await getBlock(fromTimestamp, CHAIN.MANTA as Chain, {}); - const toBlock = await getBlock(toTimestamp, CHAIN.MANTA as Chain, {}); - +const fetchGaiRevenue = async (fromBlock: number, toBlock: number, balances: sdk.Balances) => { const logs = await sdk.getEventLogs({ targets: BORROW_CONTRACT_ADDRESS, toBlock: toBlock, @@ -57,13 +50,7 @@ const fetchGaiRevenue = async (timestamp: number, balances: sdk.Balances) => { logs.forEach(log => balances.add('0xcd91716ef98798A85E79048B78287B13ae6b99b2', log._GAIFee)) }; -const fetchCollateralRedemptionRevenue = async (timestamp: number, balances: sdk.Balances) => { - const fromTimestamp = timestamp - 60 * 60 * 24; - const toTimestamp = timestamp; - - const fromBlock = await getBlock(fromTimestamp, CHAIN.MANTA as Chain, {}); - const toBlock = await getBlock(toTimestamp, CHAIN.MANTA as Chain, {}); - +const fetchCollateralRedemptionRevenue = async (fromBlock: number, toBlock: number, balances: sdk.Balances) => { for (const token of Object.keys(PYTH_CONFIG) as PYTH_CONFIG_KEYS[]) { const { contractAddress, address, } = PYTH_CONFIG[token]; const logs = await sdk.getEventLogs({ @@ -81,16 +68,17 @@ const fetchCollateralRedemptionRevenue = async (timestamp: number, balances: sdk }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.MANTA]: { - fetch: async (timestamp: number, _: ChainBlocks) => { - const balances = new sdk.Balances({ chain: CHAIN.MANTA as Chain, timestamp }); - await fetchGaiRevenue(timestamp, balances); - await fetchCollateralRedemptionRevenue(timestamp, balances); + fetch: async ({ getFromBlock, getToBlock }: FetchOptions) => { + const balances = new sdk.Balances({ chain: CHAIN.MANTA as Chain }); + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + await fetchGaiRevenue(fromBlock, toBlock, balances); + await fetchCollateralRedemptionRevenue(fromBlock, toBlock, balances); const totalRevenue = await balances.getUSDString() return { - timestamp, dailyFees: totalRevenue, dailyRevenue: totalRevenue, dailyHoldersRevenue: totalRevenue, From be56f738620d64355ec9d035612c6205a3790f56 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 29 May 2024 15:56:50 +0100 Subject: [PATCH 0648/1590] hopr --- fees/hipo/index.ts | 1 + fees/hopr/index.ts | 15 ++++++--------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/fees/hipo/index.ts b/fees/hipo/index.ts index cfdf4a7860..37e486ea4c 100644 --- a/fees/hipo/index.ts +++ b/fees/hipo/index.ts @@ -5,6 +5,7 @@ import * as sdk from '@defillama/sdk' const address = 'EQCLyZHP4Xe8fpchQz76O-_RmUhaVc_9BAoGyJrwJrcbz2eZ' export default { + version: 2, adapter: { [CHAIN.TON]: { runAtCurrTime: true, diff --git a/fees/hopr/index.ts b/fees/hopr/index.ts index 147c07f07a..ff1c9f91be 100644 --- a/fees/hopr/index.ts +++ b/fees/hopr/index.ts @@ -1,5 +1,5 @@ import ADDRESSES from '../../helpers/coreAssets.json' -import { Adapter, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions, FetchResultFees } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import * as sdk from "@defillama/sdk"; import { ethers } from "ethers"; @@ -25,20 +25,17 @@ interface ITx { transactionHash: string; } -const fetch = async (timestamp: number): Promise => { +const fetch = async ({ getFromBlock, getToBlock, toTimestamp }: FetchOptions) => { const provider = getProvider('xdai'); const iface = new ethers.Interface(['function execTransactionFromModule(address to,uint256 value,bytes data,uint8 operation)']) - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - const fromBlock = (await getBlock(fromTimestamp, CHAIN.XDAI, {})); - const toBlock = (await getBlock(toTimestamp, CHAIN.XDAI, {})); + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) const ticketRedeemedLogs: ITx[] = (await sdk.getEventLogs({ target: channels_address, topic: topic0, - fromBlock: fromBlock, - toBlock: toBlock, + fromBlock, + toBlock, topics: [topic0], chain: CHAIN.XDAI }))as ITx[]; @@ -88,7 +85,6 @@ const fetch = async (timestamp: number): Promise => { const dailyRevenueUSD = dailyRevenue * price; return { - timestamp: timestamp, dailyFees: `${dailyRevenueUSD}`, dailyUserFees: `${dailyRevenueUSD}`, dailyRevenue: `${dailyRevenueUSD}` @@ -96,6 +92,7 @@ const fetch = async (timestamp: number): Promise => { } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.XDAI]: { fetch: fetch, From 229b122c267100fe26ed6452a61d1e561055cd95 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 28 May 2024 16:27:49 +0000 Subject: [PATCH 0649/1590] fix staart time --- aggregators/eisen/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/aggregators/eisen/index.ts b/aggregators/eisen/index.ts index c98c42858b..47e31d5cea 100644 --- a/aggregators/eisen/index.ts +++ b/aggregators/eisen/index.ts @@ -20,10 +20,10 @@ const FEE_COLLECTORS: TPool = { }; const START_BLOCKS = { - [CHAIN.MODE]: 5257432, - [CHAIN.SCROLL]: 67559, - [CHAIN.MANTLE]: 64201716, - [CHAIN.BLAST]: 3258143, + [CHAIN.MODE]: 1704067200, + [CHAIN.SCROLL]: 1704067200, + [CHAIN.MANTLE]: 1704067200, + [CHAIN.BLAST]: 1704067200, }; async function fetch({ getLogs, createBalances, chain }: FetchOptions) { From 1591952c144f4f3d926b733b6ac6a40ad9e06fa6 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 29 May 2024 16:36:19 +0000 Subject: [PATCH 0650/1590] disable dune query --- dexs/drift-protocol/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index c2486331d5..c40a44d2f4 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -72,19 +72,21 @@ async function fetch(type: "perp" | "spot") { }; } } - +const emtry = async (timestamp: number) => {return{timestamp}} const adapter: BreakdownAdapter = { breakdown: { swap: { [CHAIN.SOLANA]: { - fetch: () => fetch("spot"), + // fetch: () => fetch("spot"), + fetch: emtry, runAtCurrTime: true, start: 1690239600, }, }, derivatives: { [CHAIN.SOLANA]: { - fetch: () => fetch("perp"), + // // fetch: () => fetch("perp"), + fetch: emtry, runAtCurrTime: true, start: 1690239600, }, From d723f56d119a0f59f2429195ec4287246e9607a3 Mon Sep 17 00:00:00 2001 From: octave-jumper Date: Thu, 30 May 2024 09:17:27 +0200 Subject: [PATCH 0651/1590] add bungee + a few jumper chains --- bridge-aggregator/bungee/index.ts | 52 ++++++++++++++++++++++ bridge-aggregator/jumper.exchange/index.ts | 4 ++ 2 files changed, 56 insertions(+) create mode 100644 bridge-aggregator/bungee/index.ts diff --git a/bridge-aggregator/bungee/index.ts b/bridge-aggregator/bungee/index.ts new file mode 100644 index 0000000000..af2df42795 --- /dev/null +++ b/bridge-aggregator/bungee/index.ts @@ -0,0 +1,52 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +type IContract = { + [c: string | Chain]: string; +} + +const contract: IContract = { + [CHAIN.AURORA]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.ARBITRUM]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.OPTIMISM]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.BASE]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.BLAST]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.ETHEREUM]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.AVAX]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.BSC]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.POLYGON]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.POLYGON_ZKEVM]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.FANTOM]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.LINEA]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.MANTLE]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.SCROLL]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.ZKSYNC]: '0x3a23f943181408eac424116af7b7790c94cb97a5', + [CHAIN.XDAI]: '0x3a23f943181408eac424116af7b7790c94cb97a5', +} + +const fetch: any = async (timestamp: number, _, { chain, getLogs, createBalances, }: FetchOptions): Promise => { + const dailyVolume = createBalances(); + const data: any[] = await getLogs({ + target: contract[chain], + eventAbi: 'event SocketBridge(uint256 amount, address token, uint256 toChainId, bytes32 bridgeName, address sender, address receiver, bytes32 metadata)' + }); + data.forEach((e: any) => { + if (e.metadata === '0x00000000000000000000000000000000000000000000000000000000000000cd') { + dailyVolume.add(e.sendingAssetId, e.minAmount); + } + }); + + return { dailyVolume, timestamp, } as any; +}; + +const adapter: SimpleAdapter = { + adapter: Object.keys(contract).reduce((acc, chain) => { + return { + ...acc, + [chain]: { fetch, start: 1691625600, } + } + }, {}) +}; + +export default adapter; diff --git a/bridge-aggregator/jumper.exchange/index.ts b/bridge-aggregator/jumper.exchange/index.ts index e34689825c..b0f31c275f 100644 --- a/bridge-aggregator/jumper.exchange/index.ts +++ b/bridge-aggregator/jumper.exchange/index.ts @@ -7,12 +7,15 @@ type IContract = { } const contract: IContract = { + [CHAIN.AURORA]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.ARBITRUM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.OPTIMISM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.BASE]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.ETHEREUM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.AVAX]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.BSC]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.LINEA]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.MANTA]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.POLYGON]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.POLYGON_ZKEVM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.FANTOM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', @@ -20,6 +23,7 @@ const contract: IContract = { [CHAIN.SCROLL]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.ZKSYNC]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.METIS]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.XDAI]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', } const fetch: any = async (timestamp: number, _, { chain, getLogs, createBalances, }: FetchOptions): Promise => { From a0cc21ef809962ee75f9a4840db4e3c308d333ac Mon Sep 17 00:00:00 2001 From: octave-jumper Date: Thu, 30 May 2024 09:38:18 +0200 Subject: [PATCH 0652/1590] change bungee --- bridge-aggregator/bungee/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bridge-aggregator/bungee/index.ts b/bridge-aggregator/bungee/index.ts index af2df42795..5db85f9d83 100644 --- a/bridge-aggregator/bungee/index.ts +++ b/bridge-aggregator/bungee/index.ts @@ -33,7 +33,7 @@ const fetch: any = async (timestamp: number, _, { chain, getLogs, createBalances }); data.forEach((e: any) => { if (e.metadata === '0x00000000000000000000000000000000000000000000000000000000000000cd') { - dailyVolume.add(e.sendingAssetId, e.minAmount); + dailyVolume.add(e.token, e.amount); } }); From ccade5050847563c92bcbf6d5987c37d1cd16944 Mon Sep 17 00:00:00 2001 From: Bogdan Crisan Date: Thu, 30 May 2024 11:04:01 +0200 Subject: [PATCH 0653/1590] fix calculation --- dexs/econia/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/econia/index.ts b/dexs/econia/index.ts index 9622776099..5f0eebe312 100644 --- a/dexs/econia/index.ts +++ b/dexs/econia/index.ts @@ -25,7 +25,7 @@ const fetch = async (timestamp: number) => { markets.map(async m => await fetchURL(`${BASE_URL}/rpc/volume_history?market_id=${m.market_id}&time=${dayISO}`) .then(res => ( - { daily: res[0].daily * m.tick_size / 1000000, total: res[0].total * m.tick_size / 1000000 } + { daily: res[0].daily / 1000000, total: res[0].total / 1000000 } )) ) ); From f225d0d2e95e9db40d2beb4cf31411914c32a659 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 30 May 2024 10:44:09 +0100 Subject: [PATCH 0654/1590] hyperion --- fees/hyperionx/index.ts | 13 +++++-------- fees/immortalx/index.ts | 11 ++++------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/fees/hyperionx/index.ts b/fees/hyperionx/index.ts index 89f2a0b9aa..1e8aec403f 100644 --- a/fees/hyperionx/index.ts +++ b/fees/hyperionx/index.ts @@ -1,6 +1,5 @@ -import { Adapter, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getBlock } from "../../helpers/getBlock"; import { gql, GraphQLClient } from "graphql-request"; import { Chain } from "@defillama/sdk/build/general"; @@ -23,11 +22,9 @@ interface IResponse { const graphs = (chain: Chain) => { - return async (timestamp: number): Promise => { - const toTimestamp = timestamp; - const fromTimestamp = timestamp - 24 * 60 * 60; - const toBlock = (await getBlock(toTimestamp, chain, {})); - const fromBlock = (await getBlock(fromTimestamp, chain, {})); + return async ({ getFromBlock, getToBlock }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + const query = gql` { today:protocolMetrics(block:{number:${toBlock}}, where: {id: "1"}){ @@ -47,7 +44,6 @@ const graphs = (chain: Chain) => { const totalFee = Number(response.today[0].totalFee) / 10 ** 6; return { - timestamp, totalFees: totalFee.toString(), dailyFees: dailyFees.toString(), }; @@ -61,6 +57,7 @@ const adapter: Adapter = { start: 1706659200, }, }, + version: 2 }; export default adapter; diff --git a/fees/immortalx/index.ts b/fees/immortalx/index.ts index a38db987a3..53e4fd4c41 100644 --- a/fees/immortalx/index.ts +++ b/fees/immortalx/index.ts @@ -1,8 +1,7 @@ import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; -import { Adapter, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; interface IData { totalTradeFee: string; @@ -22,12 +21,10 @@ const endpoints: IURL = { }; const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { - const todayTimestamp = getTimestampAtStartOfDayUTC(timestamp); - + return async ({ startOfDay }: FetchOptions) => { const graphQuery = gql` { - protocolByDay(id: "${todayTimestamp}") { + protocolByDay(id: "${startOfDay}") { totalTradeFee } protocol(id: "1") { @@ -41,7 +38,6 @@ const fetch = (chain: Chain) => { const totalFees = Number(res.protocol.totalTradeFee) / 10 ** 18; return { - timestamp, dailyFees: dailyFees.toString(), totalFees: totalFees.toString(), }; @@ -55,6 +51,7 @@ const adapter: Adapter = { start: 1690848000, }, }, + version: 2 }; export default adapter; From 6b1f17b25fe9f0705a901d5ca03ff223e214f8f6 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 30 May 2024 11:07:40 +0100 Subject: [PATCH 0655/1590] inverse --- fees/integral/index.ts | 1 + fees/intent-x/index.tsx | 46 +++++++++++++---------------------- fees/inverse-finance/index.ts | 6 ++--- 3 files changed, 21 insertions(+), 32 deletions(-) diff --git a/fees/integral/index.ts b/fees/integral/index.ts index 1a13521cdc..4f3b95a366 100644 --- a/fees/integral/index.ts +++ b/fees/integral/index.ts @@ -43,6 +43,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapters: SimpleAdapter = { + version: 1, adapter: chains.reduce((acc, chain) => { return { ...acc, diff --git a/fees/intent-x/index.tsx b/fees/intent-x/index.tsx index 88d3de8167..004a098b1e 100644 --- a/fees/intent-x/index.tsx +++ b/fees/intent-x/index.tsx @@ -1,10 +1,7 @@ import BigNumber from "bignumber.js"; import request, { gql } from "graphql-request"; -import { FetchResultFees, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -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"; @@ -135,18 +132,20 @@ const toString = (x: BigNumber) => { return x.toString(); }; -const fetchVolume = async (timestamp: number): Promise => { +const fetchVolume = async ( + { endTimestamp, startTimestamp }: FetchOptions +) => { const response_0_8_0: IGraphResponse = await request( endpoint_0_8_0, query_0_8_0, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), + from: String(startTimestamp), + to: String(endTimestamp), } ); const response: IGraphResponse = await request(endpoint, query, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), + from: String(startTimestamp), + to: String(endTimestamp), }); // Merging both responses @@ -183,11 +182,7 @@ const fetchVolume = async (timestamp: number): Promise => { const totalProtocolRevenue = "0"; const totalSupplySideRevenue = "0"; - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - return { - timestamp: dayTimestamp, - dailyFees: _dailyFees ?? "0", totalFees: _totalFees ?? "0", @@ -204,8 +199,8 @@ const fetchVolume = async (timestamp: number): Promise => { }; const fetchVolumeBlast = async ( - timestamp: number -): Promise => { + { endTimestamp, startTimestamp }: FetchOptions +) => { let dailyFees = new BigNumber(0); let totalFees = new BigNumber(0); @@ -213,8 +208,8 @@ const fetchVolumeBlast = async ( endpoint_blast, queryBlast, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), + from: String(startTimestamp), + to: String(endTimestamp), } ); response_blast.dailyHistories.forEach((data) => { @@ -240,11 +235,7 @@ const fetchVolumeBlast = async ( const totalProtocolRevenue = "0"; const totalSupplySideRevenue = "0"; - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - return { - timestamp: dayTimestamp, - dailyFees: _dailyFees ?? "0", totalFees: _totalFees ?? "0", @@ -261,8 +252,8 @@ const fetchVolumeBlast = async ( }; const fetchVolumeMantle = async ( - timestamp: number -): Promise => { + { endTimestamp, startTimestamp }: FetchOptions +) => { let dailyFees = new BigNumber(0); let totalFees = new BigNumber(0); @@ -270,8 +261,8 @@ const fetchVolumeMantle = async ( endpoint_mantle, queryMantle, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), + from: String(startTimestamp), + to: String(endTimestamp), } ); response_mantle.dailyHistories.forEach((data) => { @@ -297,11 +288,7 @@ const fetchVolumeMantle = async ( const totalProtocolRevenue = "0"; const totalSupplySideRevenue = "0"; - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - return { - timestamp: dayTimestamp, - dailyFees: _dailyFees ?? "0", totalFees: _totalFees ?? "0", @@ -318,6 +305,7 @@ const fetchVolumeMantle = async ( }; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BASE]: { fetch: fetchVolume, diff --git a/fees/inverse-finance/index.ts b/fees/inverse-finance/index.ts index 553d693f4c..9309621891 100644 --- a/fees/inverse-finance/index.ts +++ b/fees/inverse-finance/index.ts @@ -61,7 +61,7 @@ const toDbrUSDValue = (bn: BigNumber, dbrHistoPrice: number) => { } const fetch = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, getFromBlock, api }: FetchOptions): Promise => { + return async ({ toTimestamp, createBalances, getLogs, getFromBlock, api }: FetchOptions) => { const dbr = DBR_CONTRACTS[chain]; const dola = DOLA_CONTRACTS[chain]; const dbrAuction = DBR_AUCTION_CONTRACTS[chain]; @@ -78,7 +78,7 @@ const fetch = (chain: Chain) => { getDbrPrices(), ]); - const dbrHistoPrice = dbrPrices.findLast(d => d.timestamp < (timestamp * 1000)).price; + const dbrHistoPrice = dbrPrices.findLast(d => d.timestamp < (toTimestamp * 1000)).price; const existingMarkets = markets.filter(m => m.startingBlock <= block) @@ -159,12 +159,12 @@ const fetch = (chain: Chain) => { dailyFees, dailyRevenue, dailyHoldersRevenue, - timestamp, } } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch(CHAIN.ETHEREUM), From f49ee5c29ad6090be60f9d4bbc1c439d40e73a55 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 30 May 2024 11:11:49 +0100 Subject: [PATCH 0656/1590] koi --- fees/jibswap/index.ts | 1 + fees/kiloex/index.ts | 1 + fees/kinetix-derivatives-v2/index.ts | 1 + fees/kinetix/index.ts | 1 + fees/koi-finance/index.ts | 8 ++++---- fees/koi-finance/koi-finance.ts | 19 +++---------------- 6 files changed, 11 insertions(+), 20 deletions(-) diff --git a/fees/jibswap/index.ts b/fees/jibswap/index.ts index 9944ad5c77..1419900089 100644 --- a/fees/jibswap/index.ts +++ b/fees/jibswap/index.ts @@ -12,6 +12,7 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 1, adapter: feeAdapter }; diff --git a/fees/kiloex/index.ts b/fees/kiloex/index.ts index 37a02b8000..920c6dbcc9 100644 --- a/fees/kiloex/index.ts +++ b/fees/kiloex/index.ts @@ -42,6 +42,7 @@ const fetch = (chainId: string) => { const adapter: SimpleAdapter = { + version: 1, adapter: { [CHAIN.BSC]: { fetch: fetch(CHAIN.BSC), start: 1686528000 diff --git a/fees/kinetix-derivatives-v2/index.ts b/fees/kinetix-derivatives-v2/index.ts index 0e225b2abb..abade52877 100644 --- a/fees/kinetix-derivatives-v2/index.ts +++ b/fees/kinetix-derivatives-v2/index.ts @@ -46,6 +46,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.KAVA]: { fetch: graphs(endpoints)(CHAIN.KAVA), diff --git a/fees/kinetix/index.ts b/fees/kinetix/index.ts index e7c3a1bbb7..5704109ddd 100644 --- a/fees/kinetix/index.ts +++ b/fees/kinetix/index.ts @@ -44,6 +44,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.KAVA]: { fetch: graphs(endpoints)(CHAIN.KAVA), diff --git a/fees/koi-finance/index.ts b/fees/koi-finance/index.ts index 1431899b4d..94906cf03c 100644 --- a/fees/koi-finance/index.ts +++ b/fees/koi-finance/index.ts @@ -1,21 +1,21 @@ -import { Adapter, FetchResultFees } from '../../adapters/types'; +import { Adapter, FetchOptions, FetchResultFees } from '../../adapters/types'; import { ZKSYNC } from '../../helpers/chains'; import { fetchV1 } from './koi-finance'; -const getFees = async (timestamp: number): Promise => { - const [feeV1] = await Promise.all([fetchV1()(timestamp)]); +const getFees = async (options: FetchOptions) => { + const [feeV1] = await Promise.all([fetchV1()(options)]); const dailyFees = Number(feeV1.dailyFees); const dailyRevenue = Number(feeV1.dailyRevenue); return { dailyFees: `${dailyFees}`, dailyRevenue: `${dailyRevenue}`, - timestamp } } const adapter: Adapter = { + version: 2, adapter: { [ZKSYNC]: { fetch: getFees, diff --git a/fees/koi-finance/koi-finance.ts b/fees/koi-finance/koi-finance.ts index 1a524282c8..ea2706e96a 100644 --- a/fees/koi-finance/koi-finance.ts +++ b/fees/koi-finance/koi-finance.ts @@ -1,24 +1,12 @@ import request, { gql } from "graphql-request"; -import { getBlock } from "../../helpers/getBlock"; -import { - getTimestampAtStartOfDayUTC, - getTimestampAtStartOfPreviousDayUTC -} from "../../utils/date"; import BigNumber from "bignumber.js"; +import { FetchOptions } from "../../adapters/types"; const endpoint = "https://api.goldsky.com/api/public/project_clmtie4nnezuh2nw6hhjg6mo7/subgraphs/mute_switch/v0.0.7/gn" export const fetchV1 = () => { - return async (timestamp: number) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const yesterdaysTimestamp = getTimestampAtStartOfPreviousDayUTC(timestamp); - const todaysBlock = await getBlock( - todaysTimestamp, - "era", - {} - ); - - const yesterdaysBlock = await getBlock(yesterdaysTimestamp, "era", {}); + return async ({ getEndBlock, getStartBlock }: FetchOptions) => { + const [ todaysBlock, yesterdaysBlock] = await Promise.all([ getEndBlock(), getStartBlock()]) const query = gql` query fees { @@ -54,7 +42,6 @@ export const fetchV1 = () => { } return { - timestamp, dailyFees: dailyFee.toString(), dailyRevenue: dailyFee.times(0.2).toString(), }; From d6db6db5d91bd94d7b58482c5d3a2e507c8f6dce Mon Sep 17 00:00:00 2001 From: Luke Steyn Date: Thu, 30 May 2024 18:27:26 +0800 Subject: [PATCH 0657/1590] Patch bug in dune query --- dexs/drift-protocol/index.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index c40a44d2f4..15efce59a1 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -15,19 +15,24 @@ type DimentionResult = { dailyRevenue?: number; }; +const sum = (values: number[]) => values.reduce((a, b) => a + b, 0); + async function getPerpDimensions(): Promise { const resultRows = await queryDune(DUNE_QUERY_ID); - const summaryRow = resultRows.find((row) => row.market_index === null); + const marketRows = resultRows.filter((row) => row.market_index !== null); + // const summaryRow = resultRows.find((row) => row.market_index === null); // Perp Volume - const dailyVolume = summaryRow.total_volume as number; + const dailyVolume = sum(marketRows.map((row) => row.total_volume as number)); // All taker fees paid - const dailyFees = summaryRow.total_taker_fee as number; + const dailyFees = sum(marketRows.map((row) => row.total_taker_fee as number)); // All taker fees paid, minus maker rebates paid - not sure if this should be used as the "dailyFees" number instead. - const dailyRevenue = summaryRow.total_revenue as number; + const dailyRevenue = sum( + marketRows.map((row) => row.total_revenue as number) + ); return { dailyVolume, From e5e27b3c6bef7d25fae3e29221f5b982858699db Mon Sep 17 00:00:00 2001 From: Luke Steyn Date: Thu, 30 May 2024 19:08:45 +0800 Subject: [PATCH 0658/1590] Bump --- dexs/drift-protocol/index.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index 15efce59a1..1aa1a53f32 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -77,21 +77,24 @@ async function fetch(type: "perp" | "spot") { }; } } -const emtry = async (timestamp: number) => {return{timestamp}} + +// Used to replace "fetch" to disable a query if it starts failing +const emtry = async (timestamp: number) => { + return { timestamp }; +}; + const adapter: BreakdownAdapter = { breakdown: { swap: { [CHAIN.SOLANA]: { - // fetch: () => fetch("spot"), - fetch: emtry, + fetch: () => fetch("spot"), runAtCurrTime: true, start: 1690239600, }, }, derivatives: { [CHAIN.SOLANA]: { - // // fetch: () => fetch("perp"), - fetch: emtry, + fetch: () => fetch("perp"), runAtCurrTime: true, start: 1690239600, }, From 313e7b29122982988dcb24b8746ba0e3ace68901 Mon Sep 17 00:00:00 2001 From: Luke Steyn Date: Thu, 30 May 2024 19:14:09 +0800 Subject: [PATCH 0659/1590] Bump --- dexs/drift-protocol/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index 1aa1a53f32..772d35cdb6 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -20,7 +20,9 @@ const sum = (values: number[]) => values.reduce((a, b) => a + b, 0); async function getPerpDimensions(): Promise { const resultRows = await queryDune(DUNE_QUERY_ID); - const marketRows = resultRows.filter((row) => row.market_index !== null); + const marketRows = resultRows.filter( + (row) => row.market_index !== null && row.market_index >= 0 + ); // const summaryRow = resultRows.find((row) => row.market_index === null); // Perp Volume From 8aed99b4194830159d1d3685dd9149a615244b93 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 30 May 2024 14:19:57 +0100 Subject: [PATCH 0660/1590] marnate --- fees/lexer/index.ts | 10 ++++------ fees/liondex/index.ts | 11 ++++------- fees/marinade-liquid-staking/index.ts | 4 ++-- fees/marinade-native/index.ts | 4 ++-- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/fees/lexer/index.ts b/fees/lexer/index.ts index 69b14db023..4cff2cb8ba 100644 --- a/fees/lexer/index.ts +++ b/fees/lexer/index.ts @@ -1,7 +1,6 @@ -import { Fetch, FetchResultFees, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, FetchV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, request } from 'graphql-request'; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; // TODO: change these endpoints const apiEndPoints = [ @@ -32,14 +31,13 @@ const historicalDataSwap = gql` `; -const fetch: Fetch = async(timestamp): Promise => { +const fetch: FetchV2 = async({ startOfDay }: FetchOptions) => { // TODO: get result from fetching api call let dailyFees = 0; let totalFees = 0; - const t = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) for (const api of apiEndPoints){ const response: FeeStatsQuery = await request(api, historicalDataSwap, { - id: String(t), + id: String(startOfDay), period: "daily", }) dailyFees += response.feeStats.length ? Number( @@ -62,13 +60,13 @@ const fetch: Fetch = async(timestamp): Promise => { dailyFees /= 1e30 totalFees /= 1e30 return { - timestamp, dailyFees: dailyFees.toString(), totalFees: totalFees.toString(), } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { start: 1704758400, diff --git a/fees/liondex/index.ts b/fees/liondex/index.ts index 28f910c115..9fc4d8870e 100644 --- a/fees/liondex/index.ts +++ b/fees/liondex/index.ts @@ -1,9 +1,8 @@ import { Adapter, DISABLED_ADAPTER_KEY } from "../../adapters/types"; import { ARBITRUM } from "../../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainEndpoints } from "../../adapters/types"; +import type { ChainEndpoints, FetchOptions } from "../../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import * as sdk from "@defillama/sdk"; import disabledAdapter from "../../helpers/disabledAdapter"; @@ -28,12 +27,10 @@ async function lpPrice() { const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); - + return async ({ startOfDay }: FetchOptions) => { const graphQuery = gql` { - dailyGlobalInfo(id: "global-fee-${todaysTimestamp}" ) { + dailyGlobalInfo(id: "global-fee-${startOfDay}" ) { fees } } @@ -42,7 +39,6 @@ const graphs = (graphUrls: ChainEndpoints) => { const fees = graphRes.dailyGlobalInfo.fees * (await lpPrice()) / 1e18; return { - timestamp, dailyFees: fees.toString() }; }; @@ -50,6 +46,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 2, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [ARBITRUM]: { diff --git a/fees/marinade-liquid-staking/index.ts b/fees/marinade-liquid-staking/index.ts index 2af2fab0cb..70c5b47229 100644 --- a/fees/marinade-liquid-staking/index.ts +++ b/fees/marinade-liquid-staking/index.ts @@ -15,7 +15,7 @@ interface MarinadeAmounts { totalUserFees: string; } -const fetch = async (timestamp: number, _:ChainBlocks, { createBalances }: FetchOptions): Promise => { +const fetch = async ({ createBalances }: FetchOptions) => { // Amounts in SOL lamports const amounts: MarinadeAmounts = (await fetchURL('https://stats-api.marinade.finance/v1/integrations/defillama/fees')).liquid const coin = 'So11111111111111111111111111111111111111112' @@ -42,7 +42,6 @@ const fetch = async (timestamp: number, _:ChainBlocks, { createBalances }: Fetch totalUserFees.add(coin, amounts.totalUserFees); return { - timestamp: timestamp, dailyFees, totalFees, dailyUserFees, @@ -57,6 +56,7 @@ const fetch = async (timestamp: number, _:ChainBlocks, { createBalances }: Fetch } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.SOLANA]: { fetch, diff --git a/fees/marinade-native/index.ts b/fees/marinade-native/index.ts index a50cd9e173..3a1fb812a7 100644 --- a/fees/marinade-native/index.ts +++ b/fees/marinade-native/index.ts @@ -15,7 +15,7 @@ interface MarinadeAmounts { totalUserFees: string; } -const fetch = async (timestamp: number, _: ChainBlocks, { createBalances }: FetchOptions): Promise => { +const fetch = async ({ createBalances }: FetchOptions) => { // Amounts in SOL lamports const amounts: MarinadeAmounts = (await fetchURL('https://stats-api.marinade.finance/v1/integrations/defillama/fees')).native const coin = 'So11111111111111111111111111111111111111112' @@ -42,7 +42,6 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances }: Fetc totalUserFees.add(coin, amounts.totalUserFees); return { - timestamp: timestamp, totalFees, dailyFees, dailyUserFees, @@ -57,6 +56,7 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances }: Fetc } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.SOLANA]: { fetch, From 57d435dddba278f3a079a9ed048d1f09e74a2172 Mon Sep 17 00:00:00 2001 From: Luke Steyn Date: Thu, 30 May 2024 21:32:47 +0800 Subject: [PATCH 0661/1590] Updated to new dune query which should be faster --- dexs/drift-protocol/index.ts | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index 772d35cdb6..693caf35cf 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -6,7 +6,8 @@ import { BreakdownAdapter } from "../../adapters/types"; const DAILY_VOL_ENDPOINT = "https://mainnet-beta.api.drift.trade/stats/24HourVolume"; -const DUNE_QUERY_ID = "3756979"; +// const DUNE_QUERY_ID = "3756979"; // https://dune.com/queries/3756979/6318568 +const DUNE_QUERY_ID = "3782153"; // Should be faster than the above - https://dune.com/queries/3782153/6359334 type DimentionResult = { dailyVolume?: number; @@ -17,13 +18,13 @@ type DimentionResult = { const sum = (values: number[]) => values.reduce((a, b) => a + b, 0); -async function getPerpDimensions(): Promise { +// This is the previous method for query_id 3756979 which was too slow .. saving for posterity if we manage to speed it up. +async function _getPerpDimensions(): Promise { const resultRows = await queryDune(DUNE_QUERY_ID); const marketRows = resultRows.filter( (row) => row.market_index !== null && row.market_index >= 0 ); - // const summaryRow = resultRows.find((row) => row.market_index === null); // Perp Volume const dailyVolume = sum(marketRows.map((row) => row.total_volume as number)); @@ -44,6 +45,19 @@ async function getPerpDimensions(): Promise { }; } +async function getPerpDimensions(): Promise { + const resultRows = await queryDune(DUNE_QUERY_ID); + + const { perpetual_volume, total_revenue, total_taker_fee } = resultRows[0]; + + return { + dailyVolume: perpetual_volume, + dailyFees: total_taker_fee, + dailyUserFees: total_taker_fee, + dailyRevenue: total_revenue, + }; +} + async function getSpotDimensions(): Promise { const volumeResponse = await httpGet( `${DAILY_VOL_ENDPOINT}?spotMarkets=true` From 851323b361f60c7cadf4b63fa214c8e315b872cd Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 30 May 2024 15:10:20 +0100 Subject: [PATCH 0662/1590] more --- fees/Omnidrome/index.ts | 9 ++------- fees/abcdefx.ts | 1 + fees/apollox/index.ts | 6 ++---- fees/chronos.ts | 1 + fees/equilibre-exchange.ts | 1 + fees/jito.ts | 5 ++--- fees/meowl/index.ts | 6 +++--- fees/metavault-derivatives-v2/index.ts | 1 + fees/metavault.trade/index.ts | 1 + fees/monarchpay/index.ts | 14 ++++---------- fees/multichain/index.ts | 1 + fees/near/index.ts | 1 + fees/nether-fi/index.ts | 1 + fees/nuri-exchange-v1/index.ts | 1 + fees/pearlfi.ts | 1 + helpers/dexVolumeLogs.ts | 4 ++-- 16 files changed, 25 insertions(+), 29 deletions(-) diff --git a/fees/Omnidrome/index.ts b/fees/Omnidrome/index.ts index 52072524f8..06e471b50c 100644 --- a/fees/Omnidrome/index.ts +++ b/fees/Omnidrome/index.ts @@ -17,12 +17,8 @@ const abis: any = { }; const fetch = async ( - timestamp: number, - _: ChainBlocks, fetchOptions: FetchOptions ): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24; - const toTimestamp = timestamp; const forSwaps = await sdk.api2.abi.call({ target: lphelper, params: [1000, 0], @@ -63,10 +59,8 @@ const fetch = async ( const res: any = await getDexFees({ chain: CHAIN.ZETA, - fromTimestamp, - toTimestamp, pools, - timestamp, + timestamp: fetchOptions.toTimestamp, fetchOptions, }); // const fromBlock = await getBlock(fromTimestamp, CHAIN.ZETA, {}); @@ -79,6 +73,7 @@ const fetch = async ( return res }; const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ZETA]: { fetch: fetch, diff --git a/fees/abcdefx.ts b/fees/abcdefx.ts index e0fea66619..d699831a71 100644 --- a/fees/abcdefx.ts +++ b/fees/abcdefx.ts @@ -20,6 +20,7 @@ const methodology = { } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.KCC]: { fetch: graph(CHAIN.KCC), start: 1670188701, meta: { methodology } }, //[CHAIN.MULTIVAC]: { fetch: graph(CHAIN.MULTIVAC), start: 1670226950, meta: { methodology } }, /// ! typeof CHAIN diff --git a/fees/apollox/index.ts b/fees/apollox/index.ts index 7bb4384dc2..6e8294cf91 100644 --- a/fees/apollox/index.ts +++ b/fees/apollox/index.ts @@ -1,4 +1,4 @@ -import { Adapter, ChainEndpoints } from "../../adapters/types"; +import { Adapter, ChainEndpoints, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; import { httpGet } from "../../utils/fetchURL"; @@ -9,11 +9,10 @@ const endpoints = { const request = (urls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number) => { + return async () => { const { data } = await httpGet(urls[chain]); const { alpFeeVOFor24Hour, allAlpFeeVO } = data return { - timestamp, dailyFees: alpFeeVOFor24Hour.fee || 0, dailyRevenue: alpFeeVOFor24Hour.revenue || 0, totalFees: allAlpFeeVO.fee || 0, @@ -31,7 +30,6 @@ const adapter: Adapter = { start: 1689609600, }, }, - version: 1 } export default adapter; diff --git a/fees/chronos.ts b/fees/chronos.ts index 40729db6f9..10eaa6295c 100644 --- a/fees/chronos.ts +++ b/fees/chronos.ts @@ -5,6 +5,7 @@ import { getDexFeesExports } from "../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0xCe9240869391928253Ed9cc9Bcb8cb98CB5B0722'; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: getDexFeesExports({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS }), diff --git a/fees/equilibre-exchange.ts b/fees/equilibre-exchange.ts index 4f5e4ca8bb..12a47f9131 100644 --- a/fees/equilibre-exchange.ts +++ b/fees/equilibre-exchange.ts @@ -4,6 +4,7 @@ import { getDexFeesExports } from "../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0xA138FAFc30f6Ec6980aAd22656F2F11C38B56a95' const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.KAVA]: { fetch: getDexFeesExports({ chain: CHAIN.KAVA, factory: FACTORY_ADDRESS,}), diff --git a/fees/jito.ts b/fees/jito.ts index 411a05388f..14907beddf 100644 --- a/fees/jito.ts +++ b/fees/jito.ts @@ -3,7 +3,7 @@ import { FetchOptions, SimpleAdapter } from "../adapters/types" import { CHAIN } from "../helpers/chains" import { queryDune } from "../helpers/dune" -const fetchFees = async (_t: any, _a: any, options: FetchOptions) => { +const fetchFees = async (options: FetchOptions) => { const dailyFees = options.createBalances() const dailyRevenue = options.createBalances() const result = await queryDune("3740661"); @@ -16,12 +16,11 @@ const fetchFees = async (_t: any, _a: any, options: FetchOptions) => { return { dailyFees: dailyFees, dailyRevenue: dailyRevenue, - timestamp: options.startOfDay } } const adapter: SimpleAdapter = { - version: 1, + version: 2, adapter: { [CHAIN.SOLANA]: { fetch: fetchFees, diff --git a/fees/meowl/index.ts b/fees/meowl/index.ts index 052b801b70..da97508efc 100644 --- a/fees/meowl/index.ts +++ b/fees/meowl/index.ts @@ -4,17 +4,17 @@ import { CHAIN } from "../../helpers/chains"; const adapter: Adapter = { adapter: { [CHAIN.ETHEREUM]: { - fetch: async (timestamp: number) => { + fetch: async () => { const fees = 0; return { - timestamp, dailyFees: fees.toString(), dailyRevenue: fees.toString(), }; }, start: 1685332595 }, - } + }, + version: 2 } export default adapter; diff --git a/fees/metavault-derivatives-v2/index.ts b/fees/metavault-derivatives-v2/index.ts index deb312d289..f7a61670b4 100644 --- a/fees/metavault-derivatives-v2/index.ts +++ b/fees/metavault-derivatives-v2/index.ts @@ -57,6 +57,7 @@ const fetch = (endpoint) => { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.LINEA]: { fetch: fetch(endpoints[CHAIN.LINEA]), diff --git a/fees/metavault.trade/index.ts b/fees/metavault.trade/index.ts index 32f680dbe4..15422e423a 100644 --- a/fees/metavault.trade/index.ts +++ b/fees/metavault.trade/index.ts @@ -43,6 +43,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 1, adapter: { [POLYGON]: { fetch: graphs(endpoints)(POLYGON), diff --git a/fees/monarchpay/index.ts b/fees/monarchpay/index.ts index 2b749012b6..ad5910b5a6 100644 --- a/fees/monarchpay/index.ts +++ b/fees/monarchpay/index.ts @@ -1,8 +1,6 @@ -import { Adapter, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../../utils/date"; import * as sdk from "@defillama/sdk"; -import { getBlock } from "../../helpers/getBlock"; const address = '0x0296fD8b25D2f7B0B434eD4423BFA0CC47D08276'; @@ -11,12 +9,8 @@ interface ITx { transactionHash: string; } -const fetch = async (timestamp: number): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - - const fromBlock = (await getBlock(fromTimestamp, CHAIN.KAVA, {})); - const toBlock = (await getBlock(toTimestamp, CHAIN.KAVA, {})); +const fetch = async ({ getFromBlock, getToBlock }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) const logs: ITx[] = (await sdk.getEventLogs({ target: address, fromBlock: fromBlock, @@ -29,12 +23,12 @@ const fetch = async (timestamp: number): Promise => { return amount; }).reduce((a: number, b: number) => a+b,0); return { - timestamp: timestamp, dailyFees: `${dailyFees}` }; } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.KAVA]: { fetch: fetch, diff --git a/fees/multichain/index.ts b/fees/multichain/index.ts index 0fdea02387..5e77bf11dc 100644 --- a/fees/multichain/index.ts +++ b/fees/multichain/index.ts @@ -26,6 +26,7 @@ const fetch = async (timestamp: number) => { const adapter: Adapter = { + version: 1, adapter: { ["anyswap"]: { fetch: fetch, diff --git a/fees/near/index.ts b/fees/near/index.ts index 25bcd51839..410ad06f4e 100644 --- a/fees/near/index.ts +++ b/fees/near/index.ts @@ -27,6 +27,7 @@ const fetchFees = async (timestamp: number): Promise => { } const adapter: SimpleAdapter = { + version: 1, adapter: { [CHAIN.NEAR]: { fetch: fetchFees, diff --git a/fees/nether-fi/index.ts b/fees/nether-fi/index.ts index 5ed8ff31ba..778aa11545 100644 --- a/fees/nether-fi/index.ts +++ b/fees/nether-fi/index.ts @@ -53,6 +53,7 @@ const getFetch = (): Fetch => async (timestamp: number) => { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.BASE]: { fetch: getFetch(), diff --git a/fees/nuri-exchange-v1/index.ts b/fees/nuri-exchange-v1/index.ts index 284df52299..162e22c943 100644 --- a/fees/nuri-exchange-v1/index.ts +++ b/fees/nuri-exchange-v1/index.ts @@ -5,6 +5,7 @@ import { getDexFeesExports } from "../../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0xAAA16c016BF556fcD620328f0759252E29b1AB57'; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.SCROLL]: { fetch: getDexFeesExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS,}), diff --git a/fees/pearlfi.ts b/fees/pearlfi.ts index 8987d5d51c..3b570f6fba 100644 --- a/fees/pearlfi.ts +++ b/fees/pearlfi.ts @@ -5,6 +5,7 @@ import { getDexFeesExports } from "../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0xEaF188cdd22fEEBCb345DCb529Aa18CA9FcB4FBd'; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.POLYGON]: { fetch: getDexFeesExports({ chain: CHAIN.POLYGON, factory: FACTORY_ADDRESS,}), diff --git a/helpers/dexVolumeLogs.ts b/helpers/dexVolumeLogs.ts index 110e49b446..ee647672e6 100644 --- a/helpers/dexVolumeLogs.ts +++ b/helpers/dexVolumeLogs.ts @@ -137,8 +137,8 @@ export async function getDexFees({ factory, timestamp, pools, lengthAbi = 'allPa } export function getDexFeesExports(options: getDexFeesExportParams): any { - return async (timestamp: number, _cb: any, fetchOptions: FetchOptions) => { - const params = { ...options, timestamp, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, fetchOptions, } + return async (fetchOptions: FetchOptions) => { + const params = { ...options, timestamp: fetchOptions.toTimestamp, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, fetchOptions, } return getDexFees(params) } } From df818f3d7f84436fbed37c2a6e59819fea1937c2 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 30 May 2024 16:13:30 +0100 Subject: [PATCH 0663/1590] more --- fees/opensea/index.ts | 1 + fees/optionBlitz/index.ts | 1 + fees/paal-ai/index.ts | 5 +++-- fees/pepe-swaves/index.ts | 7 +++---- fees/pingu/index.ts | 1 + fees/predy-finance/index.ts | 1 + fees/reserve/index.ts | 9 +++++---- fees/shoebillFinance-v2/index.ts | 5 +++-- 8 files changed, 18 insertions(+), 12 deletions(-) diff --git a/fees/opensea/index.ts b/fees/opensea/index.ts index 4008ec301e..ce1d971d6d 100644 --- a/fees/opensea/index.ts +++ b/fees/opensea/index.ts @@ -24,6 +24,7 @@ const graphs = (_: ChainEndpoints) => { }; const adapter: Adapter = { + version: 1, breakdown: { v1: { [DISABLED_ADAPTER_KEY]: disabledAdapter, diff --git a/fees/optionBlitz/index.ts b/fees/optionBlitz/index.ts index fa1a4ac8c5..62ed0d4d41 100644 --- a/fees/optionBlitz/index.ts +++ b/fees/optionBlitz/index.ts @@ -74,6 +74,7 @@ const methodology = { }; const adapters: SimpleAdapter = { + version: 1, adapter: { [CHAIN.ARBITRUM]: { fetch: fetch as any, diff --git a/fees/paal-ai/index.ts b/fees/paal-ai/index.ts index 8a944746ca..2906335b4d 100644 --- a/fees/paal-ai/index.ts +++ b/fees/paal-ai/index.ts @@ -5,7 +5,7 @@ import { getTokenDiff } from "../../helpers/token"; /** Address to check = paalecosystemfund.eth */ const CONTRACT_ADDRESS = "0x54821d1B461aa887D37c449F3ace8dddDFCb8C0a"; -const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { +const fetch = async (options: FetchOptions) => { const dailyFees = options.createBalances(); await getTokenDiff({ target: CONTRACT_ADDRESS, options, includeGasToken: true, balances: dailyFees, }) const transactions = await queryIndexer(` @@ -25,11 +25,12 @@ const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { `, options); transactions.map((transaction: any) => dailyFees.addGasToken(transaction.eth_value)) - return { timestamp, dailyFees, } + return { dailyFees, } } /** Adapter */ const adapter: Adapter = { + version: 2, adapter: { ethereum: { fetch, diff --git a/fees/pepe-swaves/index.ts b/fees/pepe-swaves/index.ts index 7ae167f801..49ac0360ef 100644 --- a/fees/pepe-swaves/index.ts +++ b/fees/pepe-swaves/index.ts @@ -35,7 +35,7 @@ const extractShareReward = (rewardShares: RewardShares, miner: string): number = }, 0) } -const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getFromBlock, getToBlock, }: FetchOptions) => { +const fetch = async ({ createBalances, getFromBlock, getToBlock, }: FetchOptions) => { let miner = (await getData(ADAPTER, "ADAPTEE")).value; let feeRate = +(await getData(ADAPTER, "FEE_RATE")).value / FEE_DIVIDER; @@ -62,12 +62,11 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getFro const dailyRevenue = dailyFees.clone() dailyRevenue.resizeBy(feeRate) - return { - timestamp, dailyFees, dailyRevenue, - }; + return { dailyFees, dailyRevenue }; }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.WAVES]: { fetch, diff --git a/fees/pingu/index.ts b/fees/pingu/index.ts index b4f6c6a7ba..3dbd835f60 100644 --- a/fees/pingu/index.ts +++ b/fees/pingu/index.ts @@ -39,6 +39,7 @@ const fetch = async (timestamp: number): Promise => { } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: fetch, diff --git a/fees/predy-finance/index.ts b/fees/predy-finance/index.ts index b18b9ffec4..a0a6ff0b35 100644 --- a/fees/predy-finance/index.ts +++ b/fees/predy-finance/index.ts @@ -423,6 +423,7 @@ const v3DailyRevenue = async ( }; const adapter: BreakdownAdapter = { + version: 1, breakdown: { v3: { [DISABLED_ADAPTER_KEY]: disabledAdapter, diff --git a/fees/reserve/index.ts b/fees/reserve/index.ts index e30ef31d74..ed5c69a3d7 100644 --- a/fees/reserve/index.ts +++ b/fees/reserve/index.ts @@ -1,4 +1,4 @@ -import { Adapter } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import request from "graphql-request"; @@ -33,7 +33,7 @@ const graphQuery = ` } `; -const fetch: any = async (timestamp: number, _, { getLogs, createBalances }) => { +const fetch: any = async ({ getLogs, createBalances, toTimestamp }: FetchOptions) => { const RSR = '0x320623b8e4ff03373931769a31fc52a4e78b5d70' // Get list of deployed RTokens @@ -43,7 +43,7 @@ const fetch: any = async (timestamp: number, _, { getLogs, createBalances }) => const rtokens = rtokenCreationLogs.map((i) => i.rToken.toLowerCase()); const graphRes = ( - await request(endpoints[CHAIN.ETHEREUM], graphQuery, { currentTime: timestamp, rtokens, }) + await request(endpoints[CHAIN.ETHEREUM], graphQuery, { currentTime: toTimestamp, rtokens, }) ).rtokens; const dailyFees = createBalances(); @@ -57,10 +57,11 @@ const fetch: any = async (timestamp: number, _, { getLogs, createBalances }) => dailyFees.add(RSR, snapshots[0].rsrStaked * (todayRate - yesterdayRate)); }); - return { timestamp, dailyFees, dailyRevenue: dailyFees, }; + return { dailyFees, dailyRevenue: dailyFees, }; }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch, diff --git a/fees/shoebillFinance-v2/index.ts b/fees/shoebillFinance-v2/index.ts index a67d31ac05..5effddcd1f 100644 --- a/fees/shoebillFinance-v2/index.ts +++ b/fees/shoebillFinance-v2/index.ts @@ -12,17 +12,18 @@ const unitrollers = { ] } -const fetch: any = async (timestamp: number, chainBlocks: ChainBlocks, options: FetchOptions): Promise => { +const fetch: any = async (options: FetchOptions) => { const { chain, createBalances, } = options const dailyFees = createBalances(); const dailyRevenue = createBalances(); for (const market of unitrollers[chain]) { await getFees(market, options, { dailyFees, dailyRevenue, abis: { reserveFactor: "uint256:reserveFactorMantissa", } }); } - return { timestamp, dailyFees, dailyRevenue, dailyHoldersRevenue: dailyRevenue, }; + return { dailyFees, dailyRevenue, dailyHoldersRevenue: dailyRevenue, }; }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.MANTA]: { fetch, From 4683d5d7b715b94f20e284747e9a145a7d87fe44 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 30 May 2024 16:17:23 +0100 Subject: [PATCH 0664/1590] more --- fees/SmarDex/index.ts | 2 +- fees/sonne-finance/index.ts | 9 +++++---- fees/stormtrade/index.ts | 1 + fees/substanceX/index.ts | 14 ++++++-------- fees/surfone/index.ts | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/fees/SmarDex/index.ts b/fees/SmarDex/index.ts index 2f42a7b61c..51b110726f 100644 --- a/fees/SmarDex/index.ts +++ b/fees/SmarDex/index.ts @@ -50,7 +50,7 @@ const methodology = { }; // Define the adapter -const adapter: Adapter = { adapter: {} }; +const adapter: Adapter = { version: 1, adapter: {} }; for (let chain in FEES) { adapter.adapter[chain] = { fetch: (timestamp: number) => diff --git a/fees/sonne-finance/index.ts b/fees/sonne-finance/index.ts index c7d60c9856..51ec39815a 100644 --- a/fees/sonne-finance/index.ts +++ b/fees/sonne-finance/index.ts @@ -23,23 +23,24 @@ const unitrollerBASE = "0x1DB2466d9F5e10D7090E7152B68d62703a2245F0"; // }; -const fetchoptimism = async (timestamp: number, chainBlocks: ChainBlocks, options: FetchOptions): Promise => { +const fetchoptimism = async (options: FetchOptions) => { const { dailyFees, dailyRevenue } = await getFees(unitrollerOP, options, {}); // const dailyHoldersRevenue = await getDailyVeloRewards(options) // dailyHoldersRevenue.addBalances(dailyRevenue) - return { timestamp, dailyFees, dailyRevenue, }; + return { dailyFees, dailyRevenue, }; }; -const fetchbase = async (timestamp: number, chainBlocks: ChainBlocks, options: FetchOptions): Promise => { +const fetchbase = async (options: FetchOptions) => { const { dailyFees, dailyRevenue } = await getFees(unitrollerBASE, options, {}); // const dailyHoldersRevenue = await getDailyVeloRewards(options) // dailyHoldersRevenue.addBalances(dailyRevenue) - return { timestamp, dailyFees, dailyRevenue, }; + return { dailyFees, dailyRevenue, }; }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.OPTIMISM]: { fetch: fetchoptimism as any, diff --git a/fees/stormtrade/index.ts b/fees/stormtrade/index.ts index 9f50bfa66a..9612cdee2d 100644 --- a/fees/stormtrade/index.ts +++ b/fees/stormtrade/index.ts @@ -3,6 +3,7 @@ import fetchURL from '../../utils/fetchURL' export default { + version: 1, adapter: { [CHAIN.TON]: { runAtCurrTime: true, diff --git a/fees/substanceX/index.ts b/fees/substanceX/index.ts index 570e00af02..a43affcb4b 100644 --- a/fees/substanceX/index.ts +++ b/fees/substanceX/index.ts @@ -1,7 +1,7 @@ import { Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { request, gql, GraphQLClient } from "graphql-request"; -import type { ChainEndpoints } from "../../adapters/types"; +import { gql, GraphQLClient } from "graphql-request"; +import type { ChainEndpoints, FetchOptions } from "../../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; @@ -15,14 +15,14 @@ const blockNumberGraph = { const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number) => { + return async ({ toTimestamp }: FetchOptions) => { if (chain === CHAIN.ARBITRUM) { // Get blockNumers const blockNumerQuery = gql` { blocks( - where: {timestamp_lte:${timestamp}} + where: {timestamp_lte:${toTimestamp}} orderBy: timestamp orderDirection: desc first: 1 @@ -35,7 +35,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const last24hBlockNumberQuery = gql` { blocks( - where: {timestamp_lte:${timestamp - 24 * 60 * 60}} + where: {timestamp_lte:${toTimestamp - 24 * 60 * 60}} orderBy: timestamp orderDirection: desc first: 1 @@ -89,15 +89,12 @@ const graphs = (graphUrls: ChainEndpoints) => { const dailyFee = Number(totalFee) - (Number(last24hTotalFee) / 10 ** 6) return { - timestamp, dailyFees: dailyFee.toString(), totalFees: totalFee.toString(), }; } - return { - timestamp, dailyFees: "0", totalFees: "0", }; @@ -106,6 +103,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: graphs(endpoints)(CHAIN.ARBITRUM), diff --git a/fees/surfone/index.ts b/fees/surfone/index.ts index f77f41ead3..365fff81e4 100644 --- a/fees/surfone/index.ts +++ b/fees/surfone/index.ts @@ -1,5 +1,4 @@ import { SimpleAdapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpGet } from "../../utils/fetchURL"; @@ -30,6 +29,7 @@ const fetch = () => { const adapter: SimpleAdapter = { + version: 1, adapter: { ['merlin']: { fetch: fetch(), From 8e7011dc25762622847daf0638f1be0b66fb3316 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 30 May 2024 16:32:11 +0100 Subject: [PATCH 0665/1590] more --- fees/swych/index.ts | 8 +++----- fees/synapse/index.ts | 1 + fees/thorswap/index.ts | 1 + fees/tigris/index.ts | 1 + fees/valorem/index.ts | 1 + fees/vela/index.ts | 1 + fees/velodrome-v2/index.ts | 5 +++-- fees/velodrome-v2/velodrome-v2.ts | 6 +++--- fees/velodrome/index.ts | 8 ++++---- fees/velodrome/velodrome.ts | 23 +++++------------------ fees/waves/index.ts | 7 ++++--- fees/xoxno/index.ts | 14 +++++--------- fees/y2k/index.ts | 1 + fees/y2k/y2k-finance-v2.ts | 6 +++--- fees/y2k/y2k-finance.ts | 8 ++++---- fees/yologames/index.ts | 27 ++++++++------------------- 16 files changed, 48 insertions(+), 70 deletions(-) diff --git a/fees/swych/index.ts b/fees/swych/index.ts index 870fb24fda..0cc08b7f2b 100644 --- a/fees/swych/index.ts +++ b/fees/swych/index.ts @@ -105,7 +105,7 @@ const fetchTotalProtocolRevenue = async (options: FetchOptions) => { return dailyFees; }; -const fetchFees = async (timestamp: number, _c: any, options: FetchOptions): Promise => { +const fetchFees = async (options: FetchOptions) => { const dailyFees = await fetchTotalProtocolRevenue(options); const totalWithdrawalFeeData = await fetchWithdrawalFees(options.startOfDay); const tokenWithdrawalFees = [...new Set(totalWithdrawalFeeData.map((fee) => fee.token))]; @@ -116,13 +116,11 @@ const fetchFees = async (timestamp: number, _c: any, options: FetchOptions): Pro const feeValue = Number(fee.amount)/10 ** (30 - token_decimal) dailyFees.add(fee.token, feeValue); }); - return { - timestamp, - dailyFees: dailyFees, - } + return { dailyFees: dailyFees } }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.BSC]: { fetch: fetchFees, diff --git a/fees/synapse/index.ts b/fees/synapse/index.ts index 5c4561b88a..e392a9f623 100644 --- a/fees/synapse/index.ts +++ b/fees/synapse/index.ts @@ -107,6 +107,7 @@ const methodology = { } const adapter: Adapter = { + version: 1, adapter: Object.keys(chains).reduce((acc, chain: any) => { return { ...acc, diff --git a/fees/thorswap/index.ts b/fees/thorswap/index.ts index e80fa8c683..8f4985197b 100644 --- a/fees/thorswap/index.ts +++ b/fees/thorswap/index.ts @@ -81,6 +81,7 @@ const fetchFees = async (timestamp: number): Promise => { } } const adapters: SimpleAdapter = { + version: 1, adapter: { [CHAIN.THORCHAIN]: { runAtCurrTime: true, diff --git a/fees/tigris/index.ts b/fees/tigris/index.ts index cd62324728..70804e60e0 100644 --- a/fees/tigris/index.ts +++ b/fees/tigris/index.ts @@ -68,6 +68,7 @@ const fetch = (chain: Chain) => { } const adapter: Adapter = { + version: 1, adapter: { [CHAIN.ARBITRUM]: { fetch: fetch(CHAIN.ARBITRUM), diff --git a/fees/valorem/index.ts b/fees/valorem/index.ts index d4f00f31a7..8fbebcc2c9 100644 --- a/fees/valorem/index.ts +++ b/fees/valorem/index.ts @@ -105,6 +105,7 @@ const graphOptions = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 1, adapter: { [ARBITRUM]: { fetch: graphOptions(endpoints)(ARBITRUM), diff --git a/fees/vela/index.ts b/fees/vela/index.ts index 4adb134228..8b21413a11 100644 --- a/fees/vela/index.ts +++ b/fees/vela/index.ts @@ -36,6 +36,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 1, adapter: { [ARBITRUM]: { fetch: graphs(endpoints)(ARBITRUM), diff --git a/fees/velodrome-v2/index.ts b/fees/velodrome-v2/index.ts index 2dc4259a76..3d7ca5f18f 100644 --- a/fees/velodrome-v2/index.ts +++ b/fees/velodrome-v2/index.ts @@ -4,11 +4,11 @@ import { fetchV2 } from './velodrome-v2'; import { fees_bribes } from './bribes'; -const getFees = async (timestamp: number, _, fetchOptions: FetchOptions): Promise => { +const getFees = async (fetchOptions: FetchOptions): Promise => { const { getFromBlock, getToBlock, } = fetchOptions const fromBlock = await getFromBlock() const toBlock = await getToBlock() - const [feeV2, bribes] = await Promise.all([fetchV2(fromBlock, toBlock,timestamp, fetchOptions), fees_bribes(fetchOptions)]); + const [feeV2, bribes] = await Promise.all([fetchV2(fromBlock, toBlock, fetchOptions), fees_bribes(fetchOptions)]); return { ...feeV2, dailyBribesRevenue: bribes, @@ -16,6 +16,7 @@ const getFees = async (timestamp: number, _, fetchOptions: FetchOptions): Promis } const adapter: Adapter = { + version: 2, adapter: { [OPTIMISM]: { fetch: getFees, diff --git a/fees/velodrome-v2/velodrome-v2.ts b/fees/velodrome-v2/velodrome-v2.ts index 0762bfba6d..bcae11edc3 100644 --- a/fees/velodrome-v2/velodrome-v2.ts +++ b/fees/velodrome-v2/velodrome-v2.ts @@ -1,9 +1,9 @@ -import { FetchOptions, FetchResultFees } from "../../adapters/types"; +import { FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getDexFees } from "../../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0xF1046053aa5682b4F9a81b5481394DA16BE5FF5a'; -export const fetchV2 = async (fromBlock: number, toBlock: number, timestamp: number, fetchOptions: FetchOptions): Promise => { - return getDexFees({ chain: CHAIN.OPTIMISM, fromBlock, toBlock, factory: FACTORY_ADDRESS, timestamp, lengthAbi: 'allPoolsLength', itemAbi: 'allPools', fetchOptions }) +export const fetchV2 = async (fromBlock: number, toBlock: number, fetchOptions: FetchOptions): Promise => { + return getDexFees({ chain: CHAIN.OPTIMISM, fromBlock, toBlock, factory: FACTORY_ADDRESS, timestamp: fetchOptions.toTimestamp, lengthAbi: 'allPoolsLength', itemAbi: 'allPools', fetchOptions }) } diff --git a/fees/velodrome/index.ts b/fees/velodrome/index.ts index cd05e69db0..0f714dca94 100644 --- a/fees/velodrome/index.ts +++ b/fees/velodrome/index.ts @@ -1,10 +1,10 @@ -import { Adapter, FetchResultFees } from '../../adapters/types'; +import { Adapter, FetchOptions, FetchResultFees } from '../../adapters/types'; import { OPTIMISM } from '../../helpers/chains'; import { fetchV1 } from './velodrome'; -const getFees = async (timestamp: number): Promise => { - const [feeV1] = await Promise.all([fetchV1()(timestamp)]); +const getFees = async (options: FetchOptions) => { + const [feeV1] = await Promise.all([fetchV1()(options)]); const dailyFees = Number(feeV1.dailyFees); const dailyRevenue = Number(feeV1.dailyRevenue); const dailyHoldersRevenue = Number(feeV1.dailyHoldersRevenue); @@ -12,11 +12,11 @@ const getFees = async (timestamp: number): Promise => { dailyFees: `${dailyFees}`, dailyRevenue: `${dailyRevenue}`, dailyHoldersRevenue: `${dailyHoldersRevenue}`, - timestamp } } const adapter: Adapter = { + version: 2, adapter: { [OPTIMISM]: { fetch: getFees, diff --git a/fees/velodrome/velodrome.ts b/fees/velodrome/velodrome.ts index de3a2b4415..056c914382 100644 --- a/fees/velodrome/velodrome.ts +++ b/fees/velodrome/velodrome.ts @@ -1,10 +1,5 @@ import request, { gql } from "graphql-request"; -import { Adapter } from "../../adapters/types"; -import { getBlock } from "../../helpers/getBlock"; -import { - getTimestampAtStartOfDayUTC, - getTimestampAtStartOfPreviousDayUTC -} from "../../utils/date"; +import { FetchOptions } from "../../adapters/types"; import BigNumber from "bignumber.js"; const STABLE_FEES = 0.0002; @@ -13,24 +8,17 @@ const endpoint = "https://api.thegraph.com/subgraphs/name/dmihal/velodrome"; export const fetchV1 = () => { - return async (timestamp: number) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const yesterdaysTimestamp = getTimestampAtStartOfPreviousDayUTC(timestamp); - const todaysBlock = await getBlock( - todaysTimestamp, - "optimism", - {} - ); - const yesterdaysBlock = await getBlock(yesterdaysTimestamp, "optimism", {}); + return async ({ getToBlock, getFromBlock }: FetchOptions) => { + const [toBlock, fromBlock] = await Promise.all([ getToBlock(), getFromBlock()]) const query = gql` query fees { - yesterday: pairs(block: {number: ${yesterdaysBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { + yesterday: pairs(block: {number: ${fromBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { id isStable volumeUSD } - today: pairs(block: {number: ${todaysBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { + today: pairs(block: {number: ${toBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { id isStable volumeUSD @@ -57,7 +45,6 @@ export const fetchV1 = () => { } return { - timestamp, dailyFees: dailyFee.toString(), dailyRevenue: dailyFee.toString(), dailyHoldersRevenue: dailyFee.toString(), diff --git a/fees/waves/index.ts b/fees/waves/index.ts index f1536217c2..d71aaab38a 100644 --- a/fees/waves/index.ts +++ b/fees/waves/index.ts @@ -1,4 +1,4 @@ -import { Adapter, ChainBlocks, FetchOptions, ProtocolType } from "../../adapters/types"; +import { Adapter, FetchOptions, ProtocolType } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import fetchURL from "../../utils/fetchURL"; @@ -9,7 +9,7 @@ interface IBlockHeader { totalFee: number, } -const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getFromBlock, getToBlock }: FetchOptions) => { +const fetch = async ({ createBalances, getFromBlock, getToBlock }: FetchOptions) => { const dailyFees = createBalances() let startBlock = await getFromBlock(); @@ -29,10 +29,11 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getFro dailyFees.add(wavesToken, blockHeaders.reduce((acc, header) => acc + header.totalFee, 0)) - return { timestamp, dailyFees, }; + return { dailyFees, }; }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.WAVES]: { fetch, diff --git a/fees/xoxno/index.ts b/fees/xoxno/index.ts index 36964d2a0c..e1389b3677 100644 --- a/fees/xoxno/index.ts +++ b/fees/xoxno/index.ts @@ -1,4 +1,4 @@ -import { FetchResultFees, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; @@ -8,12 +8,9 @@ interface IRaw { Day: string; } -const fetchFees = async (timestamp: number): Promise => { - const startTime = 1683849600; - const beforeTime = timestamp + 86400; - const startTimeStr = new Date(startTime * 1000).toISOString().split("T")[0]; - const toDayTime = new Date(timestamp * 1000).toISOString().split("T")[0]; - const toDayTimeStr = new Date(beforeTime * 1000).toISOString().split("T")[0]; +const fetchFees = async ({ fromTimestamp, toTimestamp }: FetchOptions) => { + const startTimeStr = new Date(fromTimestamp * 1000).toISOString().split("T")[0]; + const toDayTimeStr = new Date(toTimestamp * 1000).toISOString().split("T")[0]; const url = `https://proxy-api.xoxno.com/getMarketplaceVolume?after=${startTimeStr}&before=${toDayTimeStr}&bin=1d`; const response: IRaw[] = (await httpGet(url, { headers: { @@ -25,14 +22,13 @@ const fetchFees = async (timestamp: number): Promise => { // fs.writeFileSync('./xoxno.json', JSON.stringify(response)); // const response: IRaw[] = require('./xoxno.json'); - const toDayStr = toDayTime.split('-')[1] +'-'+ toDayTime.split('-')[2]; + const toDayStr = toDayTimeStr.split('-')[1] +'-'+ toDayTimeStr.split('-')[2]; const dayData = response.find((item) => item.Day === toDayStr); const dailyFees = (dayData?.XO_FeesPaidUSD || 0) + (dayData?.XO_RoyaltiesPaidUSD || 0); const dailyRevenue = dayData?.XO_FeesPaidUSD; return { dailyFees: `${dailyFees}`, dailyRevenue: `${dailyRevenue}`, - timestamp } } const adapters: SimpleAdapter = { diff --git a/fees/y2k/index.ts b/fees/y2k/index.ts index 08e273cc10..a3cdb792f0 100644 --- a/fees/y2k/index.ts +++ b/fees/y2k/index.ts @@ -9,6 +9,7 @@ const methodology = { }; const adapter: Adapter = { + version: 2, breakdown: { v1: { [CHAIN.ARBITRUM]: { diff --git a/fees/y2k/y2k-finance-v2.ts b/fees/y2k/y2k-finance-v2.ts index 925bd8064c..8d0246449b 100644 --- a/fees/y2k/y2k-finance-v2.ts +++ b/fees/y2k/y2k-finance-v2.ts @@ -1,5 +1,5 @@ import ADDRESSES from '../../helpers/coreAssets.json' -import { FetchResultFees } from "../../adapters/types"; +import { FetchOptions } from "../../adapters/types"; import { addTokensReceived } from '../../helpers/token'; const factory = "0xC3179AC01b7D68aeD4f27a19510ffe2bfb78Ab3e"; @@ -12,7 +12,7 @@ const tokens = [ ]; const treasury = "0x5c84cf4d91dc0acde638363ec804792bb2108258"; -const fetch = async (timestamp: number, _, options): Promise => { +const fetch = async (options: FetchOptions) => { const { createBalances, getLogs, } = options const market_create = await getLogs({ @@ -31,7 +31,7 @@ const fetch = async (timestamp: number, _, options): Promise => await addTokensReceived({ options, tokens, fromAddressFilter: vault, target: treasury, balances: dailyFees }) - return { dailyFees, dailyRevenue: dailyFees, timestamp, }; + return { dailyFees, dailyRevenue: dailyFees }; }; export default fetch; diff --git a/fees/y2k/y2k-finance.ts b/fees/y2k/y2k-finance.ts index 64a13957fd..0a7e8c8a3c 100644 --- a/fees/y2k/y2k-finance.ts +++ b/fees/y2k/y2k-finance.ts @@ -1,5 +1,5 @@ import ADDRESSES from '../../helpers/coreAssets.json' -import { FetchResultFees } from "../../adapters/types"; +import { FetchOptions } from "../../adapters/types"; import { addTokensReceived } from '../../helpers/token'; const vault_factory = "0x984e0eb8fb687afa53fc8b33e12e04967560e092"; @@ -16,8 +16,8 @@ const tokens = [ const treasury = "0x5c84cf4d91dc0acde638363ec804792bb2108258"; -const fetch = async (timestamp: number, _, options): Promise => { - const { api, createBalances, getLogs, } = options +const fetch = async (options: FetchOptions) => { + const { api, createBalances } = options const vaultRes = await api.fetchList({ lengthAbi: abis.marketIndex, itemAbi: abis.getVaults, target: vault_factory }) const vaults = vaultRes.flat() @@ -27,7 +27,7 @@ const fetch = async (timestamp: number, _, options): Promise => await addTokensReceived({ options, tokens, fromAddressFilter: vault, target: treasury, balances: dailyFees }) - return { dailyFees, dailyRevenue: dailyFees, timestamp, }; + return { dailyFees, dailyRevenue: dailyFees, }; }; export default fetch; diff --git a/fees/yologames/index.ts b/fees/yologames/index.ts index 8c2a1ca439..d9f6adcd54 100644 --- a/fees/yologames/index.ts +++ b/fees/yologames/index.ts @@ -2,35 +2,24 @@ import { ETHER_ADDRESS } from "@defillama/sdk/build/general"; import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import fetchURL from "../../utils/fetchURL"; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; - -const nextDayTimestamp = (timestamp: number) => timestamp + 86_400_000; const fetchDailyStats = async ( - timestampSeconds: number + from: number, to: number ): Promise<{ feesETH: number }> => { - const timestampMs = timestampSeconds * 1000; - const from = timestampMs; - const to = nextDayTimestamp(timestampMs); - const url = `https://stats.yologames.io/stats?from=${from}&to=${to}`; + const url = `https://stats.yologames.io/stats?from=${from * 1000}&to=${to * 1000}`; const response = await fetchURL(url); - return { - feesETH: response.feesETH - }; + return { feesETH: response.feesETH }; }; -const fetch: any = async (timestampSeconds: number, _: any, options: FetchOptions) => { - const dailyFees = options.createBalances(); - const today = getTimestampAtStartOfDayUTC(options.startOfDay); - const statsApiResponse = await fetchDailyStats(today); +const fetch: any = async ({ createBalances, fromTimestamp, toTimestamp }: FetchOptions) => { + const dailyFees = createBalances(); + const statsApiResponse = await fetchDailyStats(fromTimestamp, toTimestamp); dailyFees.add(ETHER_ADDRESS, statsApiResponse.feesETH * 1e18); - return { - timestamp: timestampSeconds, - dailyFees, - }; + return { dailyFees }; }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.BLAST]: { fetch, From 035b967fe50f795d6b2d8733157f09d09f21eff9 Mon Sep 17 00:00:00 2001 From: "a.maik" Date: Thu, 30 May 2024 20:42:10 +0200 Subject: [PATCH 0666/1590] Fees code upgraded and V2 - V3 are separated --- dexs/keller-cl/index.ts | 21 ++++++ dexs/keller/index.ts | 26 ++----- fees/keller-cl/index.ts | 147 ++++++++++++++++++++++++++++++++++++++++ fees/keller/bribes.ts | 88 ++++++++---------------- fees/keller/index.ts | 91 +++++++------------------ 5 files changed, 229 insertions(+), 144 deletions(-) create mode 100644 dexs/keller-cl/index.ts create mode 100644 fees/keller-cl/index.ts diff --git a/dexs/keller-cl/index.ts b/dexs/keller-cl/index.ts new file mode 100644 index 0000000000..8c09cc1cb0 --- /dev/null +++ b/dexs/keller-cl/index.ts @@ -0,0 +1,21 @@ +import { SimpleAdapter, Fetch } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getDexVolumeExportsV3 } from "../../helpers/dexVolumeLogs"; + +const FACTORY_V3_ADDRESS = '0x952aC46B2586737df679e836d9B980E43E12B2d8'; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.SCROLL]: { + fetch: getDexVolumeExportsV3({ + factory: FACTORY_V3_ADDRESS, + factoryFromBlock: 4627488, + chain: CHAIN.SCROLL + }) as Fetch, + start: 1712174400, + } + } +}; + +export default adapter; \ No newline at end of file diff --git a/dexs/keller/index.ts b/dexs/keller/index.ts index bfa70eed7b..47fc4d981c 100644 --- a/dexs/keller/index.ts +++ b/dexs/keller/index.ts @@ -3,26 +3,14 @@ import { CHAIN } from "../../helpers/chains"; import { getDexVolumeExports, getDexVolumeExportsV3 } from "../../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367'; -const FACTORY_V3_ADDRESS = '0x952aC46B2586737df679e836d9B980E43E12B2d8'; -const adapter: BreakdownAdapter = { - breakdown:{ - v2: { - [CHAIN.SCROLL]: { - fetch: getDexVolumeExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS }), - start: 1710806400, - }, - }, - sprinkler: { - [CHAIN.SCROLL]: { - fetch: getDexVolumeExportsV3({ - factory: FACTORY_V3_ADDRESS, - factoryFromBlock: 4627488, - chain: CHAIN.SCROLL - }) as Fetch, - start: 1712174400, - }, - }, +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.SCROLL]: { + fetch: getDexVolumeExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS }), + start: 1710806400, + } } }; diff --git a/fees/keller-cl/index.ts b/fees/keller-cl/index.ts new file mode 100644 index 0000000000..6e236948aa --- /dev/null +++ b/fees/keller-cl/index.ts @@ -0,0 +1,147 @@ +import { Adapter, FetchOptions, FetchResultFees, SimpleAdapter } from '../../adapters/types'; +import { CHAIN } from '../../helpers/chains'; +import { Chain } from "@defillama/sdk/build/general"; +import BigNumber from "bignumber.js"; +import request, { gql } from "graphql-request"; +import { getUniqStartOfTodayTimestamp } from '../../helpers/getUniSubgraphVolume'; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; + +interface IPoolData { + id: number; + feesUSD: string; +} + +type IURL = { + [l: string | Chain]: string; +} + +const endpoints: IURL = { + [CHAIN.SCROLL]: "https://api.thegraph.com/subgraphs/name/bitdeep/keller-cl", +} +const fetch = (chain: Chain) => { + return async (timestamp: any): Promise => { + const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp.fromTimestamp * 1000)); + const dateId = Math.floor(getTimestampAtStartOfDayUTC(todayTimestamp) / 86400) + const graphQuery = gql + ` + { + uniswapDayData(id: ${dateId}) { + id + feesUSD + } + } + `; + + const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).uniswapDayData; + const dailyFeeUSD = graphRes; + console.log("🚀 ~ return ~ dailyFeeUSD:", dailyFeeUSD) + const dailyFee = dailyFeeUSD?.feesUSD ? new BigNumber(dailyFeeUSD.feesUSD) : undefined + if (dailyFee === undefined) return { timestamp } + + return { + timestamp, + dailyFees: dailyFee.toString(), + dailyUserFees: dailyFee.toString(), + dailyRevenue: dailyFee.times(0.2).toString(), + dailyHoldersRevenue: dailyFee.times(0.2).toString(), + }; + }; +} + +const getFees = async (fetchOptions: FetchOptions): Promise => { + const v3PoolCreated = 'event PoolCreated(address indexed token0,address indexed token1,uint24 indexed fee,int24 tickSpacing,address pool)'; + const v3SwapEvent = 'event Swap(address indexed sender,address indexed recipient,int256 amount0,int256 amount1,uint160 sqrtPriceX96,uint128 liquidity,int24 tick)' + const collectProtocolEvent = 'event CollectProtocol(address indexed sender,address indexed recipient,uint128 amount0,uint128 amount1)'; + const factory = '0x952aC46B2586737df679e836d9B980E43E12B2d8'; + const timestamp = fetchOptions.fromTimestamp; + const logs = await fetchOptions.getLogs({ + target: factory, + eventAbi: v3PoolCreated, + fromBlock: 4627488, + toBlock: await fetchOptions.getToBlock(), + }); + const fees = fetchOptions.createBalances(); + const protocolFees = fetchOptions.createBalances(); + const pools = logs.map((log: any) => log.pool); + const feesPercentage = (await fetchOptions.api.multiCall({ + abi: 'function fee() view returns (uint24)', + calls: pools, + })).map((fee: any) => fee / 10000); + for (let i = 0; i < pools.length; i++) { + const pool = pools[i]; + // Protocol Fees + const collectProtocolLogs = await fetchOptions.getLogs({ + target: pool, + eventAbi: collectProtocolEvent, + fromBlock: await fetchOptions.getFromBlock(), + toBlock: await fetchOptions.getToBlock(), + }); + // User Fees + const swapLogs = await fetchOptions.getLogs({ + target: pool, + eventAbi: v3SwapEvent, + fromBlock: await fetchOptions.getFromBlock(), + toBlock: await fetchOptions.getToBlock(), + }); + for (let j = 0; j < swapLogs.length; j++) { + const log = swapLogs[j]; + const protocolLog = collectProtocolLogs[j]; + if(!log.length) continue; + const isToken0 = log[2] > 0; + let tokenAddress; + let tokenDecimals; + let feeAccumulated = 0n; + let feeProtocol = 0n; + if (isToken0) { + tokenAddress = await fetchOptions.api.call({ + target: pool, + abi: 'address:token0', + chain: CHAIN.SCROLL, + }); + tokenDecimals = await fetchOptions.api.call({ + target: tokenAddress, + abi: 'function decimals() view returns (uint8)', + chain: CHAIN.SCROLL, + }); + feeAccumulated = BigInt((Number(log[2]) * feesPercentage[i]).toFixed(0)); + feeProtocol = BigInt((Number(protocolLog[2]) * feesPercentage[i]).toFixed(0)); + }else { + tokenAddress = await fetchOptions.api.call({ + target: pool, + abi: 'address:token1', + chain: CHAIN.SCROLL, + }); + tokenDecimals = await fetchOptions.api.call({ + target: tokenAddress, + abi: 'function decimals() view returns (uint8)', + chain: CHAIN.SCROLL, + }); + feeAccumulated = BigInt((Number(log[3]) * feesPercentage[i]).toFixed(0)); + feeProtocol = BigInt((Number(protocolLog[3]) * feesPercentage[i]).toFixed(0)); + } + fees.add(tokenAddress, feeAccumulated); + protocolFees.add(tokenAddress, feeProtocol); + }; + } + return { + timestamp, + dailyFees: fees, + dailyHoldersRevenue: fees, + dailyProtocolRevenue: protocolFees, + }; +} + + + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.SCROLL]: { + fetch: getFees, + start: 1712740841, + } +} +}; +export default adapter; + + diff --git a/fees/keller/bribes.ts b/fees/keller/bribes.ts index 9c218efb79..edede3d6f8 100644 --- a/fees/keller/bribes.ts +++ b/fees/keller/bribes.ts @@ -1,76 +1,46 @@ -import * as sdk from "@defillama/sdk"; -import { ethers } from "ethers"; import { CHAIN } from "../../helpers/chains"; import { FetchOptions } from "../../adapters/types"; -const event_notify_reward = 'event NotifyReward(address indexed from,address indexed reward,uint256 indexed epoch,uint256 amount)'; -const event_geuge_created = 'event GaugeCreated(address indexed poolFactory,address indexed votingRewardsFactory,address indexed gaugeFactory,address pool,address bribeVotingReward,address feeVotingReward,address gauge,address creator)' - -const topic0_geuge_created = '0xef9f7d1ffff3b249c6b9bf2528499e935f7d96bb6d6ec4e7da504d1d3c6279e1'; -const contract_interface = new ethers.Interface([ - event_notify_reward, - event_geuge_created -]); - -interface ILog { - data: string; - transactionHash: string; - topics: string[]; -} - -interface IBribes { - token: string; - amount: number; -} - export const getBribes = async (options: FetchOptions): Promise => { - try { - const dailyBribesRevenue = options.createBalances(); - const fromBlock = await options.getFromBlock(); - const toBlock = await options.getToBlock(); + try{ const voter = '0x30f827DECe6F25c74F37d0dD45bC245d893266e6'; - const logs_geuge_created: ethers.EventLog[] = (await sdk.api.util.getLogs({ + const event_notify_reward = 'event NotifyReward(address indexed from, address indexed reward, uint epoch, uint amount)'; + const event_gauge_created = 'event GaugeCreated(address indexed gauge, address creator, address internal_bribe, address indexed external_bribe, address indexed pool)' + const dailyBribesRevenue = options.createBalances(); + const logs_gauge_created = (await options.api.getLogs({ target: voter, - fromBlock: 4265093, //Block number of the contract's creation - toBlock: toBlock, - topic: '', - topics: [topic0_geuge_created], + fromBlock: 4265908, + toBlock: await options.getToBlock(), + eventAbi: event_gauge_created, + chain: CHAIN.SCROLL + })); + + const gauges_contracts : string[] = logs_gauge_created.map((e: any) => { + return e.args.gauge.toLowerCase(); + }); + const wrapped_external_bribes = (await options.api.multiCall({ + target: voter, + abi: 'function gaugesInfo(address) view returns (address,address,address,address,address,uint256,uint256)', chain: CHAIN.SCROLL, - keys: [] - })).output; - const bribes_contract: string[] = logs_geuge_created.map((e: ethers.EventLog) => { - const value = contract_interface.parseLog(e as any); - return value?.args.bribeVotingReward; + calls: gauges_contracts + })).map((e: any) => e[4]); + const logs = await options.api.getLogs({ + targets: wrapped_external_bribes, + eventAbi: event_notify_reward, + toBlock: await options.getToBlock(), + fromBlock: await options.getFromBlock(), + chain: CHAIN.SCROLL }) - - const logs: ILog[] = (await Promise.all(bribes_contract.map((address: string) => sdk.api.util.getLogs({ - target: address, - topic: '', - toBlock: toBlock, - fromBlock: fromBlock, - keys: [], - chain: CHAIN.SCROLL, - topics: ['0x52977ea98a2220a03ee9ba5cb003ada08d394ea10155483c95dc2dc77a7eb24b'] - })))) - .map((p: any) => p) - .map((a: any) => a.output).flat(); - - const logs_bribes = logs.map((e: ILog) => { - const value = contract_interface.parseLog(e) - return { - token: value?.args.reward, - amount: Number(value?.args.amount._hex) - } as IBribes + logs.map((e: any) => { + dailyBribesRevenue.add(e.args.reward, e.args.amount) }) - logs_bribes.forEach((e: IBribes) => { - dailyBribesRevenue.add(e.token, e.amount) - }); return { - dailyBribesRevenue + dailyBribesRevenue, }; } catch (error) { console.error(error); throw error; } + } diff --git a/fees/keller/index.ts b/fees/keller/index.ts index d646c3ca12..60aaed8699 100644 --- a/fees/keller/index.ts +++ b/fees/keller/index.ts @@ -1,84 +1,43 @@ -import { BreakdownAdapter, FetchOptions, FetchResultFees, FetchResultV2 } from '../../adapters/types'; +import { Adapter, FetchOptions, FetchResultFees } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains'; import { getBribes } from './bribes'; -import { exportDexVolumeAndFees } from '../../helpers/dexVolumeLogs'; -import { Chain } from "@defillama/sdk/build/general"; -import BigNumber from "bignumber.js"; -import request, { gql } from "graphql-request"; -import { getUniqStartOfTodayTimestamp } from '../../helpers/getUniSubgraphVolume'; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; +import { getDexFees } from '../../helpers/dexVolumeLogs'; const FACTORY_ADDRESS = '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367'; -const FACTORY_V3_ADDRESS = '0x952aC46B2586737df679e836d9B980E43E12B2d8'; -interface IPoolData { - id: number; - feesUSD: string; -} - -type IURL = { - [l: string | Chain]: string; -} - -const endpoints: IURL = { - [CHAIN.SCROLL]: "https://api.thegraph.com/subgraphs/name/bitdeep/keller-cl", -} -const fetch = (chain: Chain) => { - return async (timestamp: any): Promise => { - const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp.fromTimestamp * 1000)); - const dateId = Math.floor(getTimestampAtStartOfDayUTC(todayTimestamp) / 86400) - const graphQuery = gql - ` - { - uniswapDayData(id: ${dateId}) { - id - feesUSD - } - } - `; - - const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).uniswapDayData; - const dailyFeeUSD = graphRes; - const dailyFee = dailyFeeUSD?.feesUSD ? new BigNumber(dailyFeeUSD.feesUSD) : undefined - if (dailyFee === undefined) return { timestamp } - return { - timestamp, - dailyFees: dailyFee.toString(), - dailyUserFees: dailyFee.toString(), - dailyRevenue: dailyFee.times(0.2).toString(), - dailyHoldersRevenue: dailyFee.times(0.2).toString(), - }; - }; -} - -const getFees = async (options: FetchOptions): Promise => { - const v1Results = await exportDexVolumeAndFees({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options) - const bribesResult = await getBribes(options); - v1Results.dailyBribesRevenue = bribesResult.dailyBribesRevenue; +const getFees = async (fetchOptions: FetchOptions): Promise => { + const { getFromBlock, getToBlock } = fetchOptions + const fromBlock = await getFromBlock() + const toBlock = await getToBlock() + const fees = await getDexFees( + { + chain: CHAIN.SCROLL, + factory: FACTORY_ADDRESS, + fromBlock: fromBlock, + toBlock: toBlock, + lengthAbi: 'allPairsLength', + itemAbi: 'allPairs', + timestamp: fetchOptions.fromTimestamp, + fetchOptions: fetchOptions + } + ) + const bribesResult = await getBribes(fetchOptions); + return { - dailyFees: v1Results.dailyFees, - dailyRevenue: v1Results.dailyRevenue, - dailyHoldersRevenue: v1Results.dailyFees, - dailyBribesRevenue: v1Results.dailyBribesRevenue, + timestamp: fetchOptions.fromTimestamp, + dailyFees: fees.dailyFees, + dailyBribesRevenue: bribesResult.dailyBribesRevenue, } } -const adapter: BreakdownAdapter = { +const adapter: Adapter = { version: 2, - breakdown: { - v2: { + adapter: { [CHAIN.SCROLL]: { fetch: getFees, start: 1710806400 }, }, - v3:{ - [CHAIN.SCROLL]: { - fetch: fetch(CHAIN.SCROLL), - start: 1712174400, - }, - } -}, }; export default adapter; From aac4dc03d46af2e827ba924d98f45397ef33f1b2 Mon Sep 17 00:00:00 2001 From: vulntor <22735155+algtm@users.noreply.github.com> Date: Fri, 31 May 2024 11:08:10 +0800 Subject: [PATCH 0667/1590] add udex-agg --- aggregators/udex-agg/index.ts | 63 +++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 aggregators/udex-agg/index.ts diff --git a/aggregators/udex-agg/index.ts b/aggregators/udex-agg/index.ts new file mode 100644 index 0000000000..c13f8c4747 --- /dev/null +++ b/aggregators/udex-agg/index.ts @@ -0,0 +1,63 @@ +import { FetchOptions, FetchResult, FetchV2, } from "../../adapters/types"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { fetchURLWithRetry } from "../../helpers/duneRequest"; +import customBackfill from "../../helpers/customBackfill"; +import { ChainApi, api2 } from "@defillama/sdk"; + +const chainsMap: Record = { + BNB: "bsc", + //comming soon + // ETHEREUM: "ethereum", + // POLYGON: "polygon", + // BASE: "base", +}; +function convertTimestampToUTCString(timestamp) { + const date = new Date(timestamp); + const year = date.getUTCFullYear(); + const month = String(date.getUTCMonth() + 1).padStart(2, '0'); + const day = String(date.getUTCDate()).padStart(2, '0'); + const hours = String(date.getUTCHours()).padStart(2, '0'); + const minutes = String(date.getUTCMinutes()).padStart(2, '0'); + const seconds = String(date.getUTCSeconds()).padStart(2, '0'); + const milliseconds = String(date.getUTCMilliseconds()).padStart(3, '0'); + const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds} UTC`; + + return formattedDate; +} + +const fetch = + (chain: string) => + async (opt:FetchOptions): Promise => { + const utcString=convertTimestampToUTCString(opt.startOfDay*1000)//like 2024-05-31 00:00:00.000 UTC + const data = await fetchURLWithRetry(`https://api.dune.com/api/v1/query/3781797/results`) + const chainData = data.result.rows.find( + (row: any) => row.block_date === utcString + ); + return { + dailyVolume: chainData.bscVolumeUSD, + dailyUserFees:chainData.feesUSD, + timestamp:opt.endTimestamp, + } + }; + +const adapter: any = { + timetravel: false, + version: 2, + adapter: { + ...Object.values(chainsMap).reduce((acc, chain) => { + return { + ...acc, + [(chainsMap as any)[chain] || chain]: { + fetch: fetch(chain), + runAtCurrTime: false, + start: 1703376000, + customBackfill: customBackfill(chain, () => fetch(chain)) + + }, + }; + }, {}), + }, + isExpensiveAdapter: true, +}; + +export default adapter; From 98aa1b7e05be2ba003693c380cc72e614b92a504 Mon Sep 17 00:00:00 2001 From: brianbodollo Date: Fri, 31 May 2024 21:43:01 +0800 Subject: [PATCH 0668/1590] feat: added dymension fees adapter --- fees/stride.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fees/stride.ts b/fees/stride.ts index 61fc7816b6..23ddf870e5 100644 --- a/fees/stride.ts +++ b/fees/stride.ts @@ -61,6 +61,12 @@ const adapter: Adapter = { start: 0, meta, }, + dymension: { + fetch: fetch("dymension"), + runAtCurrTime: true, + start: 0, + meta, + }, juno: { fetch: fetch("juno"), runAtCurrTime: true, From dbc5b1e68fe2aa223cf531d2f53f8889488677f6 Mon Sep 17 00:00:00 2001 From: hbdgr Date: Mon, 27 May 2024 17:31:10 +0200 Subject: [PATCH 0669/1590] colony: addresses for users adapter --- users/routers/routerAddresses.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index 3369389ac5..82b02b040c 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -2855,6 +2855,22 @@ export default ([ "0x858646372cc42e1a627fce94aa7a7033e7cf075a" ] } + }, + { + "id":"1004", + "name":"Colony", + "addresses":{ + "avax":[ + "0xA2e7ab89A2C59818E1ecD925E718a9d63889A131", // Router + "0x2aC45f92EABaa8DCB2eA1807A659a1393C3947d0", // Masterchef + "0x3Db497a9783eBbEda6950d4f1911B3a27D79C071", // AntTiers + "0x62685d3EAacE96D6145D35f3B7540d35f482DE5b", // StakingV3 + "0x62B38293896e040e36fE5345F9D30DbFd75C04B9", // EarlyStageManager + "0x17CE2A490CB260b48891aDE019a86f4B4a5520d4", // Comments + "0xac59c21ADfdDb1E56A959dD60a08c07AaED2F3Ba", // Upvotes + "0xd071AA359ed1b7776A12c8329f2C337aBED157D7", // Analysis + ] + } } ] as ProtocolAddresses[]).filter(isAddressesUsable) From 1d5f05f5af0980d3eadcc11fa09e4f54c910ac8a Mon Sep 17 00:00:00 2001 From: hbdgr Date: Fri, 31 May 2024 16:15:09 +0200 Subject: [PATCH 0670/1590] colony: fees/revenue from staking and dex --- fees/colony/dex.ts | 42 +++++++++++++++++++++ fees/colony/index.ts | 84 ++++++++++++++++++++++++++++++++++++++++++ fees/colony/staking.ts | 76 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 202 insertions(+) create mode 100644 fees/colony/dex.ts create mode 100644 fees/colony/index.ts create mode 100644 fees/colony/staking.ts diff --git a/fees/colony/dex.ts b/fees/colony/dex.ts new file mode 100644 index 0000000000..f926c56d70 --- /dev/null +++ b/fees/colony/dex.ts @@ -0,0 +1,42 @@ +import { getGraphDimensions } from "../../helpers/getUniSubgraph" +import { FetchOptions, FetchResultGeneric } from "../../adapters/types"; + +export async function dexRevenue( + options: FetchOptions, + dexSubgraphEndpoint: string, + DexFactoryContract: string, +): Promise { + + const endpoints = { + [options.chain]: dexSubgraphEndpoint, + }; + + const VOLUME_USD = "volumeUSD"; + const FEES_USD = "feesUSD"; + + const v2Graph = getGraphDimensions({ + graphUrls: endpoints, + totalVolume: { + factory: "factories", + field: VOLUME_USD, + }, + dailyVolume: { + factory: "dayData", + field: VOLUME_USD, + }, + totalFees: { + factory: "factories", + field: FEES_USD, + }, + dailyFees: { + factory: "dayData", + field: FEES_USD, + }, + feesPercent: { + type: "fees", + ProtocolRevenue: 100, // Fees going back to liquidity providers + } + }); + + return v2Graph(options.chain)(options) +} diff --git a/fees/colony/index.ts b/fees/colony/index.ts new file mode 100644 index 0000000000..6661cf8760 --- /dev/null +++ b/fees/colony/index.ts @@ -0,0 +1,84 @@ +import { Balances } from "@defillama/sdk"; +import { Adapter, FetchOptions, FetchResultV2, FetchResponseValue } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +import { stakingRevenue } from "./staking"; +import { dexRevenue } from "./dex"; + +const { request, gql } = require("graphql-request"); + +const ColonyGovernanceToken = "0xec3492a2508DDf4FDc0cD76F31f340b30d1793e6"; +const DexFactoryContract = "0x814ebf333bdaf1d2d364c22a1e2400a812f1f850" +const StakingV3Contract = "0x62685d3EAacE96D6145D35f3B7540d35f482DE5b" + +const stakingSubgraphEndpoint = 'https://graph.colonylab.io/subgraphs/name/colony/stakingV3-avalanche-production'; +const dexSubgraphEndpoint = 'https://graph.colonylab.io/subgraphs/name/colony-dex/exchange-avalanche-production'; + +const methodology = { + HoldersRevenue: "Staking and Unstaking fees are collected by the protocol and distributed back to the stakers.", + ProtocolRevenue: "Colony DEX distribute swap fees back to liquidity providers." +} + +const convertToNumber = async (value: FetchResponseValue): Promise => { + if (typeof value === 'string') { + return Number(value); + } + if (typeof value === 'number') { + return value; + } + if (value instanceof Balances) { + return await value.getUSDValue(); + } + return 0; +}; + +async function fetch(options: FetchOptions): Promise { + const { createBalances, startTimestamp } = options; + + let totalHoldersRevenue = createBalances(); + let dailyHoldersRevenue = createBalances(); + + const stakingResult = await stakingRevenue( + options, + stakingSubgraphEndpoint, + ColonyGovernanceToken, + StakingV3Contract + ); + + const dexResult = await dexRevenue( + options, + dexSubgraphEndpoint, + DexFactoryContract + ); + + const mergedResult = { + timestamp: dexResult.timestamp, + block: dexResult.block, + totalVolume: dexResult.totalVolume, + dailyVolume: dexResult.dailyVolume, + + totalFees: await convertToNumber(dexResult.totalFees) + stakingResult.totalFees, + dailyFees: await convertToNumber(dexResult.dailyFees) + stakingResult.dailyFees, + + totalHoldersRevenue: stakingResult.totalHoldersRevenue, + dailyHoldersRevenue: stakingResult.dailyHoldersRevenue, + dailyProtocolRevenue: dexResult["dailyProtocolRevenue"], + totalProtocolRevenue: dexResult["totalProtocolRevenue"], + }; + return mergedResult; +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.AVAX]: { + fetch, + start: 1711370069, + meta: { + methodology + } + }, + } +} + +export default adapter; diff --git a/fees/colony/staking.ts b/fees/colony/staking.ts new file mode 100644 index 0000000000..3ee7379ccd --- /dev/null +++ b/fees/colony/staking.ts @@ -0,0 +1,76 @@ +import { Balances } from "@defillama/sdk"; +import { FetchOptions } from "../../adapters/types"; + +const { request, gql } = require("graphql-request"); + +export interface StakingRevenue { + totalFees: number; + dailyFees: number; + totalHoldersRevenue: number; + dailyHoldersRevenue: number; +} + +interface ITotalStakeFees { + totalStakeFees: string; + totalUnstakeFees: string; +} + +interface IDailyStakeFees { + stakeFees: string; + unstakeFees: string; +} + +interface IGraphStakeResponse { + metrics: ITotalStakeFees[]; + dailyMetrics: IDailyStakeFees[]; +} + +const queryStakingFeesMetrics = gql +`query fees($date: Int!) { + metrics { + totalStakeFees + totalUnstakeFees + } + dailyMetrics(where: {date: $date}) { + unstakeFees + stakeFees + } +}`; + +export async function stakingRevenue( + options: FetchOptions, + stakingSubgraphEndpoint: string, + ColonyGovernanceToken: string, + StakingV3Contract: string, +): Promise { + const { createBalances, startTimestamp } = options; + + let totalHoldersRevenue = createBalances(); + let dailyHoldersRevenue = createBalances(); + + const day = Math.floor(startTimestamp / 86400) + const date = day * 86400 + + try { + const res: IGraphStakeResponse = await request(stakingSubgraphEndpoint, queryStakingFeesMetrics, { date }); + + if (res.metrics && res.metrics.length) { + totalHoldersRevenue.add(ColonyGovernanceToken, res.metrics[0].totalStakeFees); + totalHoldersRevenue.add(ColonyGovernanceToken, res.metrics[0].totalUnstakeFees); + } + + if (res.dailyMetrics && res.dailyMetrics.length) { + dailyHoldersRevenue.add(ColonyGovernanceToken, res.dailyMetrics[0].stakeFees); + dailyHoldersRevenue.add(ColonyGovernanceToken, res.dailyMetrics[0].unstakeFees); + } + } catch (e) { + console.error(e); + } + + return { + totalFees: await totalHoldersRevenue.getUSDValue(), + dailyFees: await dailyHoldersRevenue.getUSDValue(), + totalHoldersRevenue: await totalHoldersRevenue.getUSDValue(), + dailyHoldersRevenue: await dailyHoldersRevenue.getUSDValue(), + } +} From c6fe794e4bccaee8b5baae5374d1362601098688 Mon Sep 17 00:00:00 2001 From: Soil King <157099073+soilking@users.noreply.github.com> Date: Fri, 31 May 2024 13:51:54 -0700 Subject: [PATCH 0671/1590] [dexs] Basin volume adapter for spot wells --- dexs/basin/index.ts | 93 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 dexs/basin/index.ts diff --git a/dexs/basin/index.ts b/dexs/basin/index.ts new file mode 100644 index 0000000000..42775c35ea --- /dev/null +++ b/dexs/basin/index.ts @@ -0,0 +1,93 @@ +import { request, gql } from "graphql-request"; +import { BreakdownAdapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +class SubgraphVolumeResponse { + wells: SubgraphWell[]; +} + +class SubgraphWell { + rollingDailyVolumeUSD: string; + cumulativeVolumeUSD: string; +} + +enum WellType { + SPOT +}; + +const chains = { + [CHAIN.ETHEREUM]: { + startBlock: 17977905, + startTime: 1692793703, + subgraph: "https://graph.node.bean.money/subgraphs/name/basin" + } +}; + +const methodology = { + dailyVolume: "USD sum of all swaps and add/remove liquidity operations that affect the price of pooled tokens", + UserFees: "There are no user fees.", + SupplySideRevenue: "There is no swap revenue for LP holders. However, rewards can be received if whitelisted LP tokens are deposited in the Beanstalk Silo.", + Fees: "There are no fees." +}; + +/** + * Returns daily/cumulative volume for the requested wells. + * @param chain - the chain for which to retrieve the statistics. + * @param type - the type of Well for which to get the volume. + * @param block - the block in which to query the subgraph. + * @dev Currently only type=SPOT is supported, as this is the only type of market which has been deployed + * so far. Future work in this adapter includes updating the subgraph query to account for the well type. + */ +async function getVolumeStats(chain: CHAIN, type: WellType, block: number): Promise { + + // Gets the volume of each well from the subgraph. + // If there are more than 1,000 wells at some point in the future, this may need to be revisited. + const subgraphVolume = await request(chains[chain].subgraph, gql` + { + wells( + block: {number: ${block}} + first: 1000 + orderBy: cumulativeVolumeUSD + orderDirection: desc + ) { + rollingDailyVolumeUSD + cumulativeVolumeUSD + } + }` + ) as SubgraphVolumeResponse; + + // Sum and return the overall volume + return subgraphVolume.wells.reduce((result: FetchResultV2, next: SubgraphWell) => { + return { + dailyVolume: result.dailyVolume as number + parseFloat(next.rollingDailyVolumeUSD), + totalVolume: result.totalVolume as number + parseFloat(next.cumulativeVolumeUSD) + }; + }, { dailyVolume: 0, totalVolume: 0 }); +} + +function volumeForCategory(chain: CHAIN, type: WellType) { + + return { + [chain]: { + fetch: async (fetchParams: FetchOptions): Promise => { + const block = await fetchParams.getEndBlock(); + return await getVolumeStats(chain, type, block); + }, + start: async () => chains[chain].startTime, + meta: { + methodology + }, + } + } +} + +// Currently there are only spot wells available, but it is expeted for more to exist in the future, +// therefore using BreakdownAdapter. +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + "spot": volumeForCategory(CHAIN.ETHEREUM, WellType.SPOT) + } +}; + +export default adapter; From 4d1c0a7dee81e04e0492542d6fd0d67b39c8d53c Mon Sep 17 00:00:00 2001 From: Gary Leung Date: Sat, 1 Jun 2024 15:32:26 +0800 Subject: [PATCH 0672/1590] added data reading for the V2 orders. --- options/jaspervault/index.ts | 129 +++++++++++++++++++++++++++++------ 1 file changed, 108 insertions(+), 21 deletions(-) diff --git a/options/jaspervault/index.ts b/options/jaspervault/index.ts index ffa42ba6a2..ce9c0288ae 100644 --- a/options/jaspervault/index.ts +++ b/options/jaspervault/index.ts @@ -17,7 +17,7 @@ const contracts: TokenContracts = { ], } let tokenDecimals = {} -const subgraphEndpoint = "https://gateway-arbitrum.network.thegraph.com/api/7ca317c1d6347234f75513585a71157c/deployments/id/QmQF8cZUUb3hEVfuNBdGAQPBmvRioLsqyxHZbRRgk1zpVV" +const subgraphEndpoint = "https://gateway-arbitrum.network.thegraph.com/api/7ca317c1d6347234f75513585a71157c/subgraphs/id/HkE4i846HyUEbmBg7cTawRqbTXQZnJ8VGwMfgVjdH19F" const client = new GraphQLClient(subgraphEndpoint); function getDecimals(token_address: string) { @@ -43,31 +43,64 @@ function calculateNotionalVolume(balances: Balances, orders: any[]) { console.error("No order details found"); continue; } - if (order.callOrder) { - let decimals_strikeAsset: number = getDecimals(orderDetails.strikeAsset); - if (decimals_strikeAsset == 0) { - console.error("No decimals data found for strikeAsset"); - continue; + //v1 orders + if (!orderDetails.quantity) { + if (order.callOrder) { + let decimals_strikeAsset: number = getDecimals(orderDetails.strikeAsset); + if (decimals_strikeAsset == 0) { + console.error("No decimals data found for strikeAsset"); + continue; + } + let decimals_underlyingAsset = getDecimals(orderDetails.underlyingAsset); + if (decimals_underlyingAsset == 0) { + console.error("No decimals data found for underlyingAsset"); + continue; + } + let notionalValue = new BigNumber(orderDetails.strikeAmount).dividedBy(new BigNumber(10).pow(decimals_strikeAsset)).multipliedBy(new BigNumber(orderDetails.underlyingAmount).dividedBy(new BigNumber(10).pow(decimals_underlyingAsset))) + notionalValue = notionalValue.decimalPlaces(Number(decimals_strikeAsset)).multipliedBy(new BigNumber(10).pow(decimals_strikeAsset)); + balances.add(orderDetails.strikeAsset, notionalValue); + //console.log(`notionalValue:${notionalValue} strikeAsset: ${orderDetails.strikeAsset}, strikeAmount : ${orderDetails.strikeAmount} underlyingAmount:${orderDetails.underlyingAmount},orderId: ${order.orderId} ,transactionHash: ${order.transactionHash} `) } - let decimals_underlyingAsset = getDecimals(orderDetails.underlyingAsset); - if (decimals_underlyingAsset == 0) { - console.error("No decimals data found for underlyingAsset"); - continue; + else if (order.putOrder) { + balances.add(orderDetails.underlyingAsset, orderDetails.underlyingAmount) } - let notionalValue = new BigNumber(orderDetails.strikeAmount).dividedBy(new BigNumber(10).pow(decimals_strikeAsset)).multipliedBy(new BigNumber(orderDetails.underlyingAmount).dividedBy(new BigNumber(10).pow(decimals_underlyingAsset))) - notionalValue = notionalValue.decimalPlaces(Number(decimals_strikeAsset)).multipliedBy(new BigNumber(10).pow(decimals_strikeAsset)); - balances.add(orderDetails.strikeAsset, notionalValue); - //console.log(`notionalValue:${notionalValue} strikeAsset: ${orderDetails.strikeAsset}, strikeAmount : ${orderDetails.strikeAmount} underlyingAmount:${orderDetails.underlyingAmount},orderId: ${order.orderId} ,transactionHash: ${order.transactionHash} `) } - else if (order.putOrder) { - balances.add(orderDetails.underlyingAsset, orderDetails.underlyingAmount) + //v2 orders + else { + if (order.callOrder) { + let decimals_strikeAsset: number = getDecimals(orderDetails.strikeAsset); + if (decimals_strikeAsset == 0) { + console.error("No decimals data found for strikeAsset"); + continue; + } + let notionalValue = new BigNumber(orderDetails.strikeAmount).dividedBy(new BigNumber(10).pow(decimals_strikeAsset)).multipliedBy(new BigNumber(orderDetails.quantity).dividedBy(new BigNumber(10).pow(18))) + notionalValue = notionalValue.decimalPlaces(Number(decimals_strikeAsset)).multipliedBy(new BigNumber(10).pow(decimals_strikeAsset)); + balances.add(orderDetails.strikeAsset, notionalValue); + console.log(`notionalValue:${notionalValue} strikeAsset: ${orderDetails.strikeAsset}, strikeAmount : ${orderDetails.strikeAmount} quantity:${orderDetails.quantity},orderId: ${order.orderId} ,transactionHash: ${order.transactionHash} `) + } + else if (order.putOrder) { + let decimals_lockAsset: number = getDecimals(orderDetails.lockAsset); + if (decimals_lockAsset == 0) { + console.error("No decimals data found for lockAsset"); + continue; + } + let notionalValue = new BigNumber(orderDetails.lockAmount).dividedBy(new BigNumber(10).pow(decimals_lockAsset)).multipliedBy(new BigNumber(orderDetails.quantity).dividedBy(new BigNumber(10).pow(18))) + notionalValue = notionalValue.decimalPlaces(Number(decimals_lockAsset)).multipliedBy(new BigNumber(10).pow(decimals_lockAsset)); + balances.add(orderDetails.lockAsset, notionalValue); + console.log(`notionalValue:${notionalValue} lockAsset: ${orderDetails.lockAsset}, lockAmount : ${orderDetails.lockAmount} quantity:${orderDetails.quantity},orderId: ${order.orderId} ,transactionHash: ${order.transactionHash} `) + } + } } } function calculatePremiumVolume(balances: Balances, optionPremiums: any[]) { - for (const premium of optionPremiums) - balances.add(premium.premiumAsset, premium.amount) + for (const premium of optionPremiums) { + //The premium data for these orders during this period is incorrect, so we should ignore the premium data for this batch of orders. + if (premium.orderID <= 4309 || premium.orderID >= 4343) { + balances.add(premium.premiumAsset, premium.amount) + } + } } async function fetchCallOrder(client: GraphQLClient, start: number, end: number | null, pageSize: number = 100) { @@ -96,6 +129,31 @@ async function fetchCallOrder(client: GraphQLClient, start: number, end: number } return allData; } +async function fetchCallOrderV2(client: GraphQLClient, start: number, end: number | null, pageSize: number = 100) { + let skip = 0; + let allData = { callOrderEntities: [] }; + let hasMore = true; + while (hasMore) { + const query = gql` + { + callOrderEntityV2S(where: { timestamp_gte: ${start}, timestamp_lte: ${end}}, first: ${pageSize}, skip: ${skip}) { + callOrder { + underlyingAsset + quantity + strikeAsset + strikeAmount + } + orderId + transactionHash + } + }` + const result = await client.request(query); + allData.callOrderEntities.push(...result.callOrderEntityV2S as never[]); + skip += pageSize; + hasMore = result.callOrderEntityV2S.length === pageSize; + } + return allData; +} async function fetchPutOrder(client: GraphQLClient, start: number, end: number | null, pageSize: number = 100) { let skip = 0; let allData = { putOrderEntities: [] }; @@ -121,6 +179,33 @@ async function fetchPutOrder(client: GraphQLClient, start: number, end: number | } return allData; } +async function fetchPutOrderV2(client: GraphQLClient, start: number, end: number | null, pageSize: number = 100) { + let skip = 0; + let allData = { putOrderEntities: [] }; + let hasMore = true; + while (hasMore) { + const query = gql` + { + putOrderEntityV2S(where: { timestamp_gte: ${start}, timestamp_lte: ${end}}, first: ${pageSize}, skip: ${skip}) { + putOrder { + underlyingAsset + lockAsset + lockAmount + quantity + strikeAsset + strikeAmount + } + orderId + transactionHash + } + }` + const result = await client.request(query); + allData.putOrderEntities.push(...result.putOrderEntityV2S as never[]); + skip += pageSize; + hasMore = result.putOrderEntityV2S.length === pageSize; + } + return allData; +} async function fetchOptionPremiums(client: GraphQLClient, start: number, end: number | null, pageSize: number = 100) { let skip = 0; let allData = { optionPremiums: [] }; @@ -132,7 +217,7 @@ async function fetchOptionPremiums(client: GraphQLClient, start: number, end: nu amount premiumAsset orderID - transactionHash + transactionHash } } `; @@ -154,11 +239,13 @@ export async function fetchSubgraphData({ createBalances, startTimestamp, endTim return obj; }, {}); const [ - dailyCallData, dailyPutData, dailyPremiumData, + dailyCallData, dailyCallDataV2, dailyPutData, dailyPutDataV2, dailyPremiumData, // totalCallData, totalPutData, totalPremiumData ] = await Promise.all([ fetchCallOrder(client, startOfDay, now), + fetchCallOrderV2(client, startOfDay, now), fetchPutOrder(client, startOfDay, now), + fetchPutOrderV2(client, startOfDay, now), fetchOptionPremiums(client, startOfDay, now), // fetchCallOrder(client, start, now), // fetchPutOrder(client, start, now), @@ -169,7 +256,7 @@ export async function fetchSubgraphData({ createBalances, startTimestamp, endTim // const totalNotionalVolume = createBalances() // const totalPremiumVolume = createBalances() - calculateNotionalVolume(dailyNotionalVolume, [...dailyCallData.callOrderEntities, ...dailyPutData.putOrderEntities]); + calculateNotionalVolume(dailyNotionalVolume, [...dailyCallData.callOrderEntities, ...dailyCallDataV2.callOrderEntities, ...dailyPutData.putOrderEntities, ...dailyPutDataV2.putOrderEntities]); calculatePremiumVolume(dailyPremiumVolume, dailyPremiumData.optionPremiums); // calculateNotionalVolume(totalNotionalVolume, [...totalCallData.callOrderEntities, ...totalPutData.putOrderEntities]); // calculatePremiumVolume(totalPremiumVolume, totalPremiumData.optionPremiums); From 4301e86bd8e51755ea5d3180e16b18b1d98bf791 Mon Sep 17 00:00:00 2001 From: Gary Leung Date: Sat, 1 Jun 2024 15:39:29 +0800 Subject: [PATCH 0673/1590] remove debug log --- options/jaspervault/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/options/jaspervault/index.ts b/options/jaspervault/index.ts index ce9c0288ae..1f3f4f915a 100644 --- a/options/jaspervault/index.ts +++ b/options/jaspervault/index.ts @@ -76,7 +76,7 @@ function calculateNotionalVolume(balances: Balances, orders: any[]) { let notionalValue = new BigNumber(orderDetails.strikeAmount).dividedBy(new BigNumber(10).pow(decimals_strikeAsset)).multipliedBy(new BigNumber(orderDetails.quantity).dividedBy(new BigNumber(10).pow(18))) notionalValue = notionalValue.decimalPlaces(Number(decimals_strikeAsset)).multipliedBy(new BigNumber(10).pow(decimals_strikeAsset)); balances.add(orderDetails.strikeAsset, notionalValue); - console.log(`notionalValue:${notionalValue} strikeAsset: ${orderDetails.strikeAsset}, strikeAmount : ${orderDetails.strikeAmount} quantity:${orderDetails.quantity},orderId: ${order.orderId} ,transactionHash: ${order.transactionHash} `) + //console.log(`notionalValue:${notionalValue} strikeAsset: ${orderDetails.strikeAsset}, strikeAmount : ${orderDetails.strikeAmount} quantity:${orderDetails.quantity},orderId: ${order.orderId} ,transactionHash: ${order.transactionHash} `) } else if (order.putOrder) { let decimals_lockAsset: number = getDecimals(orderDetails.lockAsset); @@ -87,7 +87,7 @@ function calculateNotionalVolume(balances: Balances, orders: any[]) { let notionalValue = new BigNumber(orderDetails.lockAmount).dividedBy(new BigNumber(10).pow(decimals_lockAsset)).multipliedBy(new BigNumber(orderDetails.quantity).dividedBy(new BigNumber(10).pow(18))) notionalValue = notionalValue.decimalPlaces(Number(decimals_lockAsset)).multipliedBy(new BigNumber(10).pow(decimals_lockAsset)); balances.add(orderDetails.lockAsset, notionalValue); - console.log(`notionalValue:${notionalValue} lockAsset: ${orderDetails.lockAsset}, lockAmount : ${orderDetails.lockAmount} quantity:${orderDetails.quantity},orderId: ${order.orderId} ,transactionHash: ${order.transactionHash} `) + //console.log(`notionalValue:${notionalValue} lockAsset: ${orderDetails.lockAsset}, lockAmount : ${orderDetails.lockAmount} quantity:${orderDetails.quantity},orderId: ${order.orderId} ,transactionHash: ${order.transactionHash} `) } } From 7c99b28e41fa0b24f8835707718fa7d22078232b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 1 Jun 2024 14:19:12 +0000 Subject: [PATCH 0674/1590] fix set timeout when getBlock --- fees/azuro/index.ts | 15 +++------------ helpers/getBlock.ts | 2 +- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/fees/azuro/index.ts b/fees/azuro/index.ts index ef3fab11cb..cd9ac855fc 100644 --- a/fees/azuro/index.ts +++ b/fees/azuro/index.ts @@ -66,24 +66,15 @@ const calculateAmounts = (bets: Bet[]) => { const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { return async ({ endTimestamp, startTimestamp }: FetchOptions) => { - const [bets, totalBets] = await Promise.all([ + const [bets] = await Promise.all([ fetchAllBets(graphUrls[chain], startTimestamp, endTimestamp, false), - fetchAllBets(graphUrls[chain], getStartTimestamp[chain], endTimestamp, false), - fetchAllBets(graphUrls[chain], startTimestamp, endTimestamp, true), - fetchAllBets(graphUrls[chain], getStartTimestamp[chain], endTimestamp, true) ]); - + const { totalBetAmount: dailyBetAmount, totalWonAmount: dailyWonAmount } = calculateAmounts(bets); - const { totalBetAmount, totalWonAmount } = calculateAmounts(totalBets); - - const totalFees = totalBetAmount - totalWonAmount; const dailyPoolProfit = dailyBetAmount - dailyWonAmount; - return { dailyFees: dailyPoolProfit.toString(), - dailyRevenue: dailyPoolProfit.toString(), - totalFees: totalFees.toString(), - totalRevenue: totalFees.toString(), + dailyRevenue: dailyPoolProfit.toString() }; }; }; diff --git a/helpers/getBlock.ts b/helpers/getBlock.ts index 76e7e6ebfe..30bcf91935 100644 --- a/helpers/getBlock.ts +++ b/helpers/getBlock.ts @@ -100,7 +100,7 @@ async function getBlock(timestamp: number, chain: Chain, chainBlocks = {} as Cha throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) }))?.result?.blockNumber))); else - block = Number((await retry(async () => (await httpGet(`https://coins.llama.fi/block/${chain}/${timestamp}`).catch((e) => { + block = Number((await retry(async () => (await httpGet(`https://coins.llama.fi/block/${chain}/${timestamp}`, { timeout: 10000 }).catch((e) => { throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) }))?.height, { retries: 1 }))); if (block) chainBlocks[chain] = block From 20105d349ca971928529c32dd4880aee0907b709 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 1 Jun 2024 16:24:38 +0000 Subject: [PATCH 0675/1590] update logs --- package-lock.json | 72 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5f11fbacc1..e035e363f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,11 +804,12 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.54", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.54.tgz", - "integrity": "sha512-0akwrfkgtD8/Fk+vHM3N8nMUBW+vdndc8GfQXU40VQrEXnDm24tmlOZwnfmf0Cb+PL2ts24ll00lLR5HgdP5Gw==", + "version": "5.0.60", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.60.tgz", + "integrity": "sha512-B7upEgd1Fad1duY0cRuPpcaLpTasIHjgqmQ73cJr189XmgEbsTUxQqPfD5mbsjdDgJMDSE5YjEPzjDIkLXBqfg==", "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", @@ -824,6 +825,47 @@ "node": ">=8" } }, + "node_modules/@elastic/elasticsearch": { + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.13.1.tgz", + "integrity": "sha512-2G4Vu6OHw4+XTrp7AGIcOEezpPEoVrWg2JTK1v/exEKSLYquZkUdd+m4yOL3/UZ6bTj7hmXwrmYzW76BnLCkJQ==", + "dependencies": { + "@elastic/transport": "~8.4.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@elastic/transport": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@elastic/transport/-/transport-8.4.1.tgz", + "integrity": "sha512-/SXVuVnuU5b4dq8OFY4izG+dmGla185PcoqgK6+AJMpmOeY1QYVNbWtCwvSvoAANN5D/wV+EBU8+x7Vf9EphbA==", + "dependencies": { + "debug": "^4.3.4", + "hpagent": "^1.0.0", + "ms": "^2.1.3", + "secure-json-parse": "^2.4.0", + "tslib": "^2.4.0", + "undici": "^5.22.1" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@elastic/transport/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "engines": { + "node": ">=14" + } + }, "node_modules/@graphql-typed-document-node/core": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", @@ -2314,6 +2356,14 @@ "node": ">=8" } }, + "node_modules/hpagent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", + "engines": { + "node": ">=14" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3186,6 +3236,11 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, "node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -3490,6 +3545,17 @@ "node": ">=14.17" } }, + "node_modules/undici": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", From 1321bb0a03998c8c4f9aee4cc1202c03297eff23 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 1 Jun 2024 16:29:57 +0000 Subject: [PATCH 0676/1590] enable bsc --- dexs/joe-v2.1/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index 300a4a7502..304a08cf3c 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -81,9 +81,9 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => const adapter: SimpleAdapter = { version: 2, adapter: { - [CHAIN.ARBITRUM]: { fetch, start: 1682121600, }, - // [CHAIN.BSC]: { fetch, start: 1681084800, }, [CHAIN.AVAX]: { fetch, start: 1682467200, }, + [CHAIN.ARBITRUM]: { fetch, start: 1682121600, }, + [CHAIN.BSC]: { fetch, start: 1681084800, }, } }; From 1db031292646e1a95b0db1ddf7ec264ca603dc16 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 1 Jun 2024 16:32:27 +0000 Subject: [PATCH 0677/1590] fix missing --- dexs/joe-v2.1/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index 304a08cf3c..b5f4229286 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -53,11 +53,15 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => try { const tokens0 = await options.api.multiCall({ abi: 'address:getTokenX', calls: lpTokens! }) const tokens1 = await options.api.multiCall({ abi: 'address:getTokenY', calls: lpTokens! }) + const fromBlock = await options.getBlock(options.fromTimestamp, options.chain, {}); + const toBlock = await options.getBlock(options.toTimestamp, options.chain, {}); const logs: any[][] = (await options.getLogs({ targets: lpTokens, eventAbi: event_swap, flatten: false, + fromBlock, + toBlock, })) logs.map((log: any, index: number) => { From bf4243b407f02b8ddbb0ed382af7471ea5c52680 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 1 Jun 2024 17:11:20 +0000 Subject: [PATCH 0678/1590] fix set value --- dexs/keller-cl/index.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/dexs/keller-cl/index.ts b/dexs/keller-cl/index.ts index 8c09cc1cb0..3150372c34 100644 --- a/dexs/keller-cl/index.ts +++ b/dexs/keller-cl/index.ts @@ -1,4 +1,4 @@ -import { SimpleAdapter, Fetch } from "../../adapters/types"; +import { SimpleAdapter, Fetch, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getDexVolumeExportsV3 } from "../../helpers/dexVolumeLogs"; @@ -8,14 +8,10 @@ const adapter: SimpleAdapter = { version: 2, adapter: { [CHAIN.SCROLL]: { - fetch: getDexVolumeExportsV3({ - factory: FACTORY_V3_ADDRESS, - factoryFromBlock: 4627488, - chain: CHAIN.SCROLL - }) as Fetch, + fetch: async (options: FetchOptions) => getDexVolumeExportsV3({factory: FACTORY_V3_ADDRESS,factoryFromBlock: 4627488, chain: CHAIN.SCROLL})(options.toTimestamp, null, options), start: 1712174400, } } }; -export default adapter; \ No newline at end of file +export default adapter; From 488076ccf452a7bd510a9371df9a9142b12cea31 Mon Sep 17 00:00:00 2001 From: vulntor <22735155+algtm@users.noreply.github.com> Date: Sun, 2 Jun 2024 22:48:36 +0800 Subject: [PATCH 0679/1590] feat: change to getLog --- aggregators/udex-agg/index.ts | 95 +++++++++++++---------------------- 1 file changed, 36 insertions(+), 59 deletions(-) diff --git a/aggregators/udex-agg/index.ts b/aggregators/udex-agg/index.ts index c13f8c4747..4d2dbcfcd5 100644 --- a/aggregators/udex-agg/index.ts +++ b/aggregators/udex-agg/index.ts @@ -1,63 +1,40 @@ -import { FetchOptions, FetchResult, FetchV2, } from "../../adapters/types"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import { fetchURLWithRetry } from "../../helpers/duneRequest"; -import customBackfill from "../../helpers/customBackfill"; -import { ChainApi, api2 } from "@defillama/sdk"; - -const chainsMap: Record = { - BNB: "bsc", - //comming soon - // ETHEREUM: "ethereum", - // POLYGON: "polygon", - // BASE: "base", -}; -function convertTimestampToUTCString(timestamp) { - const date = new Date(timestamp); - const year = date.getUTCFullYear(); - const month = String(date.getUTCMonth() + 1).padStart(2, '0'); - const day = String(date.getUTCDate()).padStart(2, '0'); - const hours = String(date.getUTCHours()).padStart(2, '0'); - const minutes = String(date.getUTCMinutes()).padStart(2, '0'); - const seconds = String(date.getUTCSeconds()).padStart(2, '0'); - const milliseconds = String(date.getUTCMilliseconds()).padStart(3, '0'); - const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds} UTC`; - - return formattedDate; +import { Chain } from "@defillama/sdk/build/general"; +import { FetchResult, FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +let abi = ["event Swap(address indexed payer,address indexed payee,address fromToken,address toToken,uint fromAmount,uint receivedAmount)"]; + +type IContract = { + [c: string | Chain]: string; } -const fetch = - (chain: string) => - async (opt:FetchOptions): Promise => { - const utcString=convertTimestampToUTCString(opt.startOfDay*1000)//like 2024-05-31 00:00:00.000 UTC - const data = await fetchURLWithRetry(`https://api.dune.com/api/v1/query/3781797/results`) - const chainData = data.result.rows.find( - (row: any) => row.block_date === utcString - ); - return { - dailyVolume: chainData.bscVolumeUSD, - dailyUserFees:chainData.feesUSD, - timestamp:opt.endTimestamp, - } - }; - -const adapter: any = { - timetravel: false, - version: 2, - adapter: { - ...Object.values(chainsMap).reduce((acc, chain) => { - return { - ...acc, - [(chainsMap as any)[chain] || chain]: { - fetch: fetch(chain), - runAtCurrTime: false, - start: 1703376000, - customBackfill: customBackfill(chain, () => fetch(chain)) - - }, - }; - }, {}), - }, - isExpensiveAdapter: true, +const contract: IContract = { + [CHAIN.BSC]: '0x15Fa1b705D85Cf35b625d0Afa3Ab4360b92D019a', + [CHAIN.POLYGON]:'0xc6C4013D6f7D4313634798D6E516ef72D1912915', + [CHAIN.ETHEREUM]:'0x94aa97b013b9b1cc7915199e8621ddf664646339', + [CHAIN.BASE]:'0x94aa97b013b9b1cc7915199e8621ddf664646339' + +} + +const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise => { + const dailyVolume = createBalances(); + const logs = (await getLogs({ target: contract[chain], eventAbi: abi[0], })) + + logs.map((log: any) => dailyVolume.add(log.toToken, log.receivedAmount)); + + return { dailyVolume }; }; -export default adapter; +const adapter: SimpleAdapter = { + adapter: Object.keys(contract).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch, + start: 1703376000, + } + } + }, {}), + version: 2, +}; +export default adapter; \ No newline at end of file From c387f1dce115efe3a7474325a4943834957d938a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 2 Jun 2024 15:19:49 +0000 Subject: [PATCH 0680/1590] fix matemask fees --- fees/metamask.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fees/metamask.ts b/fees/metamask.ts index 2e4bbcb7ed..518880d044 100644 --- a/fees/metamask.ts +++ b/fees/metamask.ts @@ -38,8 +38,9 @@ const graph = (chain: Chain) => { TX_HASH from ${chain}.core.fact_transactions - WHERE to_address = '${address[chain]}' - and BLOCK_NUMBER > ${await getFromBlock()} AND BLOCK_NUMBER < ${await getToBlock()} + WHERE + BLOCK_NUMBER > ${await getFromBlock()} AND BLOCK_NUMBER < ${await getToBlock()} + and to_address = '${address[chain]}' and status = 'SUCCESS' ` From 165116771d4ba2b3a3ed9683479bb1ccad4d6157 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 2 Jun 2024 15:40:36 +0000 Subject: [PATCH 0681/1590] fix filter trading fees --- fees/curve.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/curve.ts b/fees/curve.ts index b41c1380b1..b5a3b7365f 100644 --- a/fees/curve.ts +++ b/fees/curve.ts @@ -91,7 +91,8 @@ const fetch = (chain: string) => async (ts:number) => { return graph(endpoints)(chain)(ts) } const response = (await fetchURL(`https://prices.curve.fi/v1/chains/${chain}`)); - const fees = (response.data as any[]).reduce((all, pool)=>{ + const fees = (response.data as any[]) + .filter(e => e.trading_fee_24h < 1_000_000).reduce((all, pool)=>{ return all + pool.liquidity_fee_24h+pool.trading_fee_24h }, 0) const allFees:any = { From dd28c56965868bcdd4db1c4b6700f864041e48ab Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 2 Jun 2024 16:42:05 +0000 Subject: [PATCH 0682/1590] fix try get logs by just 1 target --- dexs/joe-v2.1/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index b5f4229286..fc6a145569 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -56,13 +56,13 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => const fromBlock = await options.getBlock(options.fromTimestamp, options.chain, {}); const toBlock = await options.getBlock(options.toTimestamp, options.chain, {}); - const logs: any[][] = (await options.getLogs({ - targets: lpTokens, + const logs: any[][] = (await Promise.all(lpTokens.map((lp: string) => options.getLogs({ + target: lp, eventAbi: event_swap, flatten: false, fromBlock, toBlock, - })) + })))) logs.map((log: any, index: number) => { const token0 = tokens0[index]; From 744779ee9dcc12bec3acacca68b06d27197f9bee Mon Sep 17 00:00:00 2001 From: marsclimber0109 Date: Mon, 3 Jun 2024 13:48:42 +0900 Subject: [PATCH 0683/1590] feat: add bitlayer chain to eisen --- aggregators/eisen/index.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/aggregators/eisen/index.ts b/aggregators/eisen/index.ts index c98c42858b..1a9f373954 100644 --- a/aggregators/eisen/index.ts +++ b/aggregators/eisen/index.ts @@ -17,13 +17,15 @@ const FEE_COLLECTORS: TPool = { [CHAIN.SCROLL]: ["0xA06568773A247657E7b89BBA465014CF85702093"], [CHAIN.MANTLE]: ["0x31d6F212142D3B222EF11c9eBB6AF3569b8442EE"], [CHAIN.BLAST]: ["0xd57Ed7F46D64Ec7b6f04E4A8409D88C55Ef8AA3b"], + [CHAIN.BITLAYER]: ["0x5722c0B501e7B9880F9bB13A14217851e45C454f"], }; const START_BLOCKS = { - [CHAIN.MODE]: 5257432, - [CHAIN.SCROLL]: 67559, - [CHAIN.MANTLE]: 64201716, - [CHAIN.BLAST]: 3258143, + [CHAIN.MODE]: 1704067200, + [CHAIN.SCROLL]: 1704067200, + [CHAIN.MANTLE]: 1704067200, + [CHAIN.BLAST]: 1704067200, + [CHAIN.BITLAYER]: 1704067200, }; async function fetch({ getLogs, createBalances, chain }: FetchOptions) { From 0418e887d460a9a2e5c96fd67fdfeee053f141cb Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 3 Jun 2024 12:53:53 +0100 Subject: [PATCH 0684/1590] patches --- fees/koi-finance/koi-finance.ts | 19 +++++++++++-------- fees/pingu/index.ts | 2 +- fees/xoxno/index.ts | 6 ++---- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/fees/koi-finance/koi-finance.ts b/fees/koi-finance/koi-finance.ts index ea2706e96a..78ffde9e5e 100644 --- a/fees/koi-finance/koi-finance.ts +++ b/fees/koi-finance/koi-finance.ts @@ -1,12 +1,17 @@ import request, { gql } from "graphql-request"; import BigNumber from "bignumber.js"; import { FetchOptions } from "../../adapters/types"; +import { getBlock } from "../../helpers/getBlock"; -const endpoint = "https://api.goldsky.com/api/public/project_clmtie4nnezuh2nw6hhjg6mo7/subgraphs/mute_switch/v0.0.7/gn" +const endpoint = + "https://api.goldsky.com/api/public/project_clmtie4nnezuh2nw6hhjg6mo7/subgraphs/mute_switch/v0.0.7/gn"; export const fetchV1 = () => { - return async ({ getEndBlock, getStartBlock }: FetchOptions) => { - const [ todaysBlock, yesterdaysBlock] = await Promise.all([ getEndBlock(), getStartBlock()]) + return async ({ endTimestamp, startTimestamp }: FetchOptions) => { + const [todaysBlock, yesterdaysBlock] = await Promise.all([ + getBlock(endTimestamp, "era", {}), + getBlock(startTimestamp, "era", {}), + ]); const query = gql` query fees { @@ -34,11 +39,9 @@ export const fetchV1 = () => { for (const pool of graphRes["yesterday"]) { if (!todayVolume[pool.id]) continue; - const dailyVolume = BigNumber(todayVolume[pool.id]).minus( - pool.volumeUSD - ); + const dailyVolume = BigNumber(todayVolume[pool.id]).minus(pool.volumeUSD); - dailyFee = dailyFee.plus(dailyVolume.times(pool.pairFee).div(10000)) + dailyFee = dailyFee.plus(dailyVolume.times(pool.pairFee).div(10000)); } return { @@ -46,4 +49,4 @@ export const fetchV1 = () => { dailyRevenue: dailyFee.times(0.2).toString(), }; }; -}; \ No newline at end of file +}; diff --git a/fees/pingu/index.ts b/fees/pingu/index.ts index 3dbd835f60..0a26af7d61 100644 --- a/fees/pingu/index.ts +++ b/fees/pingu/index.ts @@ -39,7 +39,7 @@ const fetch = async (timestamp: number): Promise => { } const adapter: SimpleAdapter = { - version: 2, + version: 1, adapter: { [CHAIN.ARBITRUM]: { fetch: fetch, diff --git a/fees/xoxno/index.ts b/fees/xoxno/index.ts index e1389b3677..a4e1054ddb 100644 --- a/fees/xoxno/index.ts +++ b/fees/xoxno/index.ts @@ -18,20 +18,18 @@ const fetchFees = async ({ fromTimestamp, toTimestamp }: FetchOptions) => { referer: 'https://xoxno.com/' } })); - // const fs = require('fs'); - // fs.writeFileSync('./xoxno.json', JSON.stringify(response)); - // const response: IRaw[] = require('./xoxno.json'); const toDayStr = toDayTimeStr.split('-')[1] +'-'+ toDayTimeStr.split('-')[2]; const dayData = response.find((item) => item.Day === toDayStr); const dailyFees = (dayData?.XO_FeesPaidUSD || 0) + (dayData?.XO_RoyaltiesPaidUSD || 0); - const dailyRevenue = dayData?.XO_FeesPaidUSD; + const dailyRevenue = dayData?.XO_FeesPaidUSD || 0; return { dailyFees: `${dailyFees}`, dailyRevenue: `${dailyRevenue}`, } } const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ELROND]: { fetch: fetchFees, From 9d8e6759a0ffaeb859bbeab16ba4ea0213b66963 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 3 Jun 2024 13:19:56 +0000 Subject: [PATCH 0685/1590] enable total volume --- options/ithaca/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/options/ithaca/index.ts b/options/ithaca/index.ts index c68c26cbd6..4196f5fcb2 100644 --- a/options/ithaca/index.ts +++ b/options/ithaca/index.ts @@ -48,9 +48,9 @@ export async function fetchIthacaVolumeData( dailyFees: ithacaStats.daily_fees, totalFees: ithacaStats.total_fees, dailyPremiumVolume: ithacaStats.daily_premium, - // totalPremiumVolume: ithacaStats.total_premium, + totalPremiumVolume: ithacaStats.total_premium, dailyNotionalVolume, - // totalNotionalVolume, + totalNotionalVolume, }; } From fc88d12ec4e0a8e0baff2976ea3ab6bdcacaa638 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 3 Jun 2024 22:48:38 +0100 Subject: [PATCH 0686/1590] more --- fees/0x0dex.ts | 11 +++++++---- fees/abracadabra.ts | 16 +++++----------- fees/across.ts | 17 +++++++++++------ fees/aimbot.ts | 7 ++++--- fees/airswap.ts | 10 +++++++--- fees/alchemix.ts | 9 +++++---- fees/allbridge-classic.ts | 1 + fees/allbridge-core.ts | 4 ++-- fees/apeswap.ts | 3 ++- fees/apex.ts | 1 + fees/ascent-v2.ts | 18 ++++++------------ fees/aura.ts | 5 +++-- fees/auragi.ts | 23 +++++++---------------- fees/avalanche.ts | 6 +++--- fees/balancer.ts | 33 +++++++++++---------------------- 15 files changed, 75 insertions(+), 89 deletions(-) diff --git a/fees/0x0dex.ts b/fees/0x0dex.ts index 2f76d4b7e0..453f2f7626 100644 --- a/fees/0x0dex.ts +++ b/fees/0x0dex.ts @@ -1,4 +1,4 @@ -import { Adapter, FetchOptions, FetchResult } from "../adapters/types"; +import { Adapter, FetchOptions } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; const OxOPoolETHAddress = "0x3d18AD735f949fEbD59BBfcB5864ee0157607616"; @@ -9,10 +9,13 @@ const discount = 0.0045; // Deposit Event const discountThreshold = 1000000 * (9 ** 18); -const fetch: any = async (timestamp: number, _: any, { getLogs, api }: FetchOptions): Promise => { +const fetch: any = async ({ getLogs, api, getFromBlock, getToBlock }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) const logs = await getLogs({ target: OxOPoolETHAddress, - eventAbi: "event Deposit (address sender, uint256 tokenAmount, uint256 ringIndex)" + eventAbi: "event Deposit (address sender, uint256 tokenAmount, uint256 ringIndex)", + fromBlock, + toBlock }) const senders = logs.map((log: any) => log.sender); const balances = await api.multiCall({ abi: 'erc20:balanceOf', calls: senders, target: OxOToken }) @@ -25,7 +28,6 @@ const fetch: any = async (timestamp: number, _: any, { getLogs, api }: FetchOpti dailyFees /= 1e18; return { - timestamp, dailyFees, // 100% of the revenue going to holders, hence, fees = revenue, fees = holdersRevenue dailyHoldersRevenue: dailyFees, @@ -34,6 +36,7 @@ const fetch: any = async (timestamp: number, _: any, { getLogs, api }: FetchOpti }; const adapter: Adapter = { + version: 2, adapter: { [ETHEREUM]: { fetch, diff --git a/fees/abracadabra.ts b/fees/abracadabra.ts index db747d2c29..e629f878c1 100644 --- a/fees/abracadabra.ts +++ b/fees/abracadabra.ts @@ -1,10 +1,8 @@ -import { Adapter, ChainBlocks } from "../adapters/types"; +import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainEndpoints } from "../adapters/types" +import type { ChainEndpoints, FetchOptions } from "../adapters/types" import { Chain } from '@defillama/sdk/build/general'; -import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../utils/date"; -import { getBlock } from "../helpers/getBlock"; const endpoints = { @@ -39,12 +37,8 @@ const getFees = (data: DataResponse): number => { const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp) - const yesterdaysTimestamp = getTimestampAtStartOfNextDayUTC(timestamp) - - const startBlock = (await getBlock(todaysTimestamp, chain, {})); - const endBlock = (await getBlock(yesterdaysTimestamp, chain, {})); + return async ({ getFromBlock, getToBlock}: FetchOptions) => { + const [startBlock, endBlock] = await Promise.all([getFromBlock(), getToBlock()]) const graphQuery = gql `query fees($startBlock: Int!, $endBlock: Int!) { startValue: cauldronFees(block: { number: $startBlock }) { @@ -63,7 +57,6 @@ const graphs = (graphUrls: ChainEndpoints) => { const dailyFeeUsd = dailyFee; const dailyRevenue = dailyFeeUsd * .5; return { - timestamp, dailyFees: dailyFeeUsd.toString(), dailyRevenue: dailyRevenue.toString(), }; @@ -73,6 +66,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: graphs(endpoints)(CHAIN.ETHEREUM), diff --git a/fees/across.ts b/fees/across.ts index 02df95501d..2af53f89fd 100644 --- a/fees/across.ts +++ b/fees/across.ts @@ -33,17 +33,16 @@ const address: any = { [CHAIN.POLYGON]: "0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096", }; const graph = (chain: Chain) => { - return async ( - timestamp: number, - _: ChainBlocks, - { createBalances, getLogs }: FetchOptions, - ): Promise => { + return async ({ createBalances, getLogs, getFromBlock, getToBlock }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) const dailyFees = createBalances(); const logs_fund_disposit = ( await getLogs({ target: address[chain], eventAbi: abis.FundsDeposited, topic: topic0_fund_disposit_v2, + fromBlock, + toBlock }) ).filter((a: any) => Number(a!.destinationChainId) === 288); @@ -52,6 +51,8 @@ const graph = (chain: Chain) => { target: address[chain], eventAbi: abis.V3FundsDeposited, topic: topic0_fund_disposit_v3, + fromBlock, + toBlock }) ).filter((a: any) => Number(a!.destinationChainId) === 288); @@ -59,12 +60,16 @@ const graph = (chain: Chain) => { target: address[chain], eventAbi: abis.FilledRelay, topic: topic0_filled_replay_v2, + fromBlock, + toBlock }); const logs_filled_replay_v3 = await getLogs({ target: address[chain], eventAbi: abis.FilledV3Relay, topic: topic0_filled_replay_v3, + fromBlock, + toBlock }); logs_fund_disposit.map((a: any) => @@ -90,12 +95,12 @@ const graph = (chain: Chain) => { return { dailyFees, dailySupplySideRevenue: dailyFees, - timestamp, }; }; }; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: graph(CHAIN.ETHEREUM), diff --git a/fees/aimbot.ts b/fees/aimbot.ts index e2b0b1b6b8..e97babf66e 100644 --- a/fees/aimbot.ts +++ b/fees/aimbot.ts @@ -1,4 +1,4 @@ -import { FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { queryIndexer } from "../helpers/indexer"; import { httpGet } from "../utils/fetchURL"; @@ -8,7 +8,7 @@ interface IData { value: string; } -const fetch: any = async (timestamp: number, _: any, options: FetchOptions): Promise => { +const fetch: any = async (options: FetchOptions) => { const { createBalances, } = options const dailyFees = createBalances() const transfer_txs = ` @@ -41,11 +41,12 @@ const fetch: any = async (timestamp: number, _: any, options: FetchOptions): Pro const openBotFundAmount = openBotFundData['total']; dailyFees.addGasToken(openBotFundAmount * 1e18); - return { dailyFees, dailyRevenue: dailyFees, timestamp } + return { dailyFees, dailyRevenue: dailyFees } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch, diff --git a/fees/airswap.ts b/fees/airswap.ts index b3f8a07dd0..4ac91cf66e 100644 --- a/fees/airswap.ts +++ b/fees/airswap.ts @@ -1,4 +1,4 @@ -import { ChainBlocks, FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; @@ -16,21 +16,25 @@ const address: TAddress = { } const graph = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, }: FetchOptions): Promise => { + return async ({ createBalances, getLogs, getFromBlock, getToBlock }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) const dailyFees = createBalances(); (await getLogs({ target: address[chain], eventAbi: event_swap, + fromBlock, + toBlock })).map((e: any) => { dailyFees.add(e.signerToken, e.signerAmount.toString() * e.protocolFee.toString() / 10000) }) - return { dailyFees, dailyRevenue: dailyFees, timestamp, }; + return { dailyFees, dailyRevenue: dailyFees, }; } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: graph(CHAIN.ETHEREUM), diff --git a/fees/alchemix.ts b/fees/alchemix.ts index 1856838bf0..7d3925add1 100644 --- a/fees/alchemix.ts +++ b/fees/alchemix.ts @@ -1,7 +1,7 @@ -import { Adapter, FetchResultFees } from "../adapters/types"; +import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainBlocks, ChainEndpoints, FetchOptions } from "../adapters/types" +import type { ChainEndpoints, FetchOptions } from "../adapters/types" import { Chain } from '@defillama/sdk/build/general'; interface IData { @@ -39,7 +39,7 @@ const graph = (graphUrls: ChainEndpoints) => { }`; return (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { createBalances, fromTimestamp, toTimestamp }: FetchOptions): Promise => { + return async ({ createBalances, fromTimestamp, toTimestamp }: FetchOptions) => { const dailyFees = createBalances() const graphRes: IData[] = (await request(graphUrls[chain], graphQuery, { @@ -50,13 +50,14 @@ const graph = (graphUrls: ChainEndpoints) => { graphRes.map((a: IData) => dailyFees.add(a.yieldToken, a.totalHarvested)) const dailyRevenue = dailyFees.clone(0.1) - return { dailyFees, dailyRevenue, timestamp } + return { dailyFees, dailyRevenue } } } }; const adapter: Adapter = { + version: 2, adapter: { // [CHAIN.ETHEREUM]: { // index error // fetch: graph(endpoints)(CHAIN.ETHEREUM), diff --git a/fees/allbridge-classic.ts b/fees/allbridge-classic.ts index 4c810bd5ee..21debfbf6d 100644 --- a/fees/allbridge-classic.ts +++ b/fees/allbridge-classic.ts @@ -86,6 +86,7 @@ const methodology = { }; const adapter: Adapter = { + version: 1, adapter: Object.keys(chainCodeMap).reduce((acc, chain) => { acc[chain] = { fetch: getFeesFunction(chain), diff --git a/fees/allbridge-core.ts b/fees/allbridge-core.ts index bdb276ee9f..4085a2afcd 100644 --- a/fees/allbridge-core.ts +++ b/fees/allbridge-core.ts @@ -92,7 +92,7 @@ const getTronLogs = async (address: string, eventName: string, minBlockTimestamp return res.data; } -const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { +const fetch: any = async (options: FetchOptions) => { let dailyFees = await (options.chain === CHAIN.TRON ? fetchFeesTron(options) : fetchFees(options)); const dailyRevenue = dailyFees * 0.2; const dailySupplySideRevenue = dailyFees * 0.8; @@ -100,7 +100,6 @@ const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => { dailyFees, dailyRevenue: dailyRevenue, dailySupplySideRevenue: dailySupplySideRevenue, - timestamp, }; }; @@ -113,6 +112,7 @@ const meta = { }; const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch, diff --git a/fees/apeswap.ts b/fees/apeswap.ts index ec4c173b4f..ba0eecb90f 100644 --- a/fees/apeswap.ts +++ b/fees/apeswap.ts @@ -85,7 +85,8 @@ const baseAdapter: BaseAdapter = { } const adapter: Adapter = { - adapter: baseAdapter + adapter: baseAdapter, + version: 1, }; diff --git a/fees/apex.ts b/fees/apex.ts index 49d35f0fad..1f2d294ba5 100644 --- a/fees/apex.ts +++ b/fees/apex.ts @@ -19,6 +19,7 @@ const fees = async (timestamp: number): Promise => { } } const adapter: SimpleAdapter = { + version: 1, adapter: { [CHAIN.ETHEREUM]: { fetch: fees, diff --git a/fees/ascent-v2.ts b/fees/ascent-v2.ts index fa09603625..532a45c055 100644 --- a/fees/ascent-v2.ts +++ b/fees/ascent-v2.ts @@ -1,9 +1,7 @@ import BigNumber from "bignumber.js"; import request, { gql } from "graphql-request"; -import { FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getTimestampAtStartOfDayUTC } from "../utils/date"; -import { getBlock } from "../helpers/getBlock"; const STABLE_FEES = 0.0001; const VOLATILE_FEES = 0.002; @@ -20,21 +18,17 @@ interface IGraphResponse { yesterday: IPair[]; } const getFees = () => { - return async (timestamp: number): Promise => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const fromTimestamp = todaysTimestamp - 60 * 60 * 24 - const toTimestamp = todaysTimestamp - const todaysBlock = await getBlock(toTimestamp, CHAIN.EON, {}); - const yesterdaysBlock = await getBlock(fromTimestamp, CHAIN.EON, {}); + return async ({ getFromBlock, getToBlock}: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) const query = gql` query fees { - yesterday: pairs(block: {number: ${yesterdaysBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { + yesterday: pairs(block: {number: ${fromBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { id isStable volumeUSD } - today: pairs(block: {number: ${todaysBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { + today: pairs(block: {number: ${toBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { id isStable volumeUSD @@ -61,7 +55,6 @@ const getFees = () => { const dailyFee = totalFeesToday.minus(totalFeesYesterday); return { - timestamp, dailyFees: dailyFee.toString(), dailyUserFees: dailyFee.toString(), dailyRevenue: dailyFee.multipliedBy(0.32).toString(), @@ -71,6 +64,7 @@ const getFees = () => { const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.EON]: { fetch: getFees(), diff --git a/fees/aura.ts b/fees/aura.ts index 46f0ee67d6..b1bd08e48d 100644 --- a/fees/aura.ts +++ b/fees/aura.ts @@ -4,7 +4,7 @@ import { queryIndexer } from "../helpers/indexer"; const BAL_TOKEN = '0xba100000625a3754423978a60c9317c58a424e3D'; -const fetch = async (timestamp: number, _: any, options: FetchOptions): Promise => { +const fetch = async (options: FetchOptions) => { const dailyFees = options.createBalances(); @@ -77,10 +77,11 @@ const fetch = async (timestamp: number, _: any, options: FetchOptions): Promise< const dailyHoldersRevenue = dailyFees.clone(); dailyHoldersRevenue.resizeBy(0.04); - return { timestamp, dailyFees, dailyRevenue, dailySupplySideRevenue, dailyHoldersRevenue, } + return { dailyFees, dailyRevenue, dailySupplySideRevenue, dailyHoldersRevenue, } } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch as any, diff --git a/fees/auragi.ts b/fees/auragi.ts index a8b1910c57..030d6e2004 100644 --- a/fees/auragi.ts +++ b/fees/auragi.ts @@ -1,7 +1,5 @@ import request, { gql } from "graphql-request"; -import { Adapter } from "../adapters/types"; -import { getBlock } from "../helpers/getBlock"; -import {getTimestampAtStartOfDayUTC, getTimestampAtStartOfPreviousDayUTC} from "../utils/date"; +import { Adapter, FetchOptions } from "../adapters/types"; import BigNumber from "bignumber.js"; import { CHAIN } from "../helpers/chains"; @@ -10,24 +8,17 @@ const VOLATILE_FEES = 0.0005; const endpoint = "https://api.thegraph.com/subgraphs/name/oxbill/auragi"; const getFees = () => { - return async (timestamp: number) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const yesterdaysTimestamp = getTimestampAtStartOfPreviousDayUTC(timestamp); - const todaysBlock = await getBlock( - todaysTimestamp, - CHAIN.ARBITRUM, - {} - ); - const yesterdaysBlock = await getBlock(yesterdaysTimestamp, CHAIN.ARBITRUM, {}); - + return async ({ getFromBlock, getToBlock}: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + const query = gql` query fees { - yesterday: pairs(block: {number: ${yesterdaysBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { + yesterday: pairs(block: {number: ${fromBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { id isStable volumeUSD } - today: pairs(block: {number: ${todaysBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { + today: pairs(block: {number: ${toBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { id isStable volumeUSD @@ -54,7 +45,6 @@ const getFees = () => { } return { - timestamp, dailyFees: dailyFee.toString(), dailyRevenue: dailyFee.toString(), dailyHoldersRevenue: dailyFee.toString(), @@ -63,6 +53,7 @@ const getFees = () => { }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: getFees(), diff --git a/fees/avalanche.ts b/fees/avalanche.ts index 3f3070a647..cc9967ae88 100644 --- a/fees/avalanche.ts +++ b/fees/avalanche.ts @@ -1,15 +1,15 @@ -import { Adapter, ChainBlocks, FetchOptions, ProtocolType } from "../adapters/types"; +import { Adapter, FetchOptions, ProtocolType } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { getTokenDiff } from "../helpers/token"; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.AVAX]: { - fetch: async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { + fetch: async (options: FetchOptions) => { const dailyFees = await getTokenDiff({ target: '0x0100000000000000000000000000000000000000', includeGasToken: true, options}) return { - timestamp, dailyFees: dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees, diff --git a/fees/balancer.ts b/fees/balancer.ts index 32af257c3d..11c1fc8aa4 100644 --- a/fees/balancer.ts +++ b/fees/balancer.ts @@ -1,12 +1,9 @@ import { Adapter } from "../adapters/types"; import { CHAIN }from "../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainEndpoints } from "../adapters/types" +import type { ChainEndpoints, FetchOptions } from "../adapters/types" import { Chain } from '@defillama/sdk/build/general'; -import { getBlock } from "../helpers/getBlock"; -import { ChainBlocks } from "../adapters/types"; import BigNumber from "bignumber.js"; -import { getTimestampAtStartOfPreviousDayUTC, getTimestampAtStartOfDayUTC } from "../utils/date"; const v1Endpoints = { [CHAIN.ETHEREUM]: @@ -32,19 +29,15 @@ const v2Endpoints = { const v1Graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number, chainBlocks: ChainBlocks) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp) - const yesterdaysTimestamp = getTimestampAtStartOfPreviousDayUTC(timestamp) - - const todaysBlock = (await getBlock(todaysTimestamp, chain, chainBlocks)); - const yesterdaysBlock = (await getBlock(yesterdaysTimestamp, chain, {})); + return async ({ getFromBlock, getToBlock}: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) const graphQuery = gql `{ - today: balancer(id: "1", block: { number: ${todaysBlock} }) { + today: balancer(id: "1", block: { number: ${toBlock} }) { totalSwapFee } - yesterday: balancer(id: "1", block: { number: ${yesterdaysBlock} }) { + yesterday: balancer(id: "1", block: { number: ${fromBlock} }) { totalSwapFee } }`; @@ -53,7 +46,6 @@ const v1Graphs = (graphUrls: ChainEndpoints) => { const dailyFee = (new BigNumber(graphRes["today"]["totalSwapFee"]).minus(new BigNumber(graphRes["yesterday"]["totalSwapFee"]))) return { - timestamp, totalFees: graphRes["today"]["totalSwapFee"], dailyFees: dailyFee.toString(), totalUserFees: graphRes["today"]["totalSwapFee"], @@ -89,10 +81,7 @@ interface IPoolSnapshot { const v2Graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number) => { - const startTimestamp = getTimestampAtStartOfDayUTC(timestamp) - const fromTimestamp = startTimestamp - 60 * 60 * 24 - const toTimestamp = startTimestamp + return async ({ fromTimestamp, toTimestamp}: FetchOptions) => { const graphQuery = gql `query fees { today:poolSnapshots(where: {timestamp:${toTimestamp}, protocolFee_gt:0}, orderBy:swapFees, orderDirection: desc) { @@ -140,10 +129,10 @@ const v2Graphs = (graphUrls: ChainEndpoints) => { // 10% gov vote enabled: https://vote.balancer.fi/#/proposal/0xf6238d70f45f4dacfc39dd6c2d15d2505339b487bbfe014457eba1d7e4d603e3 // 50% gov vote change: https://vote.balancer.fi/#/proposal/0x03e64d35e21467841bab4847437d4064a8e4f42192ce6598d2d66770e5c51ace - const dailyRevenue = startTimestamp < tenPcFeeTimestamp ? "0" : ( - startTimestamp < fiftyPcFeeTimestamp ? dailyFee.multipliedBy(0.1) : dailyFee.multipliedBy(0.5)) - const totalRevenue = startTimestamp < tenPcFeeTimestamp ? "0" : ( - startTimestamp < fiftyPcFeeTimestamp ? currentTotalSwapFees.minus(tenPcTotalSwapFees).multipliedBy(0.1) : currentTotalSwapFees.minus(fiftyPcTotalSwapFees).multipliedBy(0.5)) + const dailyRevenue = toTimestamp < tenPcFeeTimestamp ? "0" : ( + toTimestamp < fiftyPcFeeTimestamp ? dailyFee.multipliedBy(0.1) : dailyFee.multipliedBy(0.5)) + const totalRevenue = toTimestamp < tenPcFeeTimestamp ? "0" : ( + toTimestamp < fiftyPcFeeTimestamp ? currentTotalSwapFees.minus(tenPcTotalSwapFees).multipliedBy(0.1) : currentTotalSwapFees.minus(fiftyPcTotalSwapFees).multipliedBy(0.5)) const dailyProtocolFee = graphRes["today"].map((e: IPool) => { const yesterdayValue = new BigNumber(graphRes["yesterday"].find((p: IPool) => p.id.split('-')[0] === e.id.split('-')[0])?.protocolFee || 0); @@ -153,7 +142,6 @@ const v2Graphs = (graphUrls: ChainEndpoints) => { .reduce((a: BigNumber, b: BigNumber) => a.plus(b), new BigNumber('0')) return { - timestamp, // totalUserFees: currentTotalSwapFees.toString(), dailyUserFees: dailyFee.toString(), // totalFees: currentTotalSwapFees.toString(), @@ -178,6 +166,7 @@ const methodology = { } const adapter: Adapter = { + version: 2, breakdown: { v1: { [CHAIN.ETHEREUM]: { From 834a0dd66e10a8bd527bebc6711c3aac65248106 Mon Sep 17 00:00:00 2001 From: vulntor <22735155+algtm@users.noreply.github.com> Date: Tue, 4 Jun 2024 11:11:25 +0800 Subject: [PATCH 0687/1590] allow backfill --- aggregators/udex-agg/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/aggregators/udex-agg/index.ts b/aggregators/udex-agg/index.ts index 4d2dbcfcd5..83d7a3d953 100644 --- a/aggregators/udex-agg/index.ts +++ b/aggregators/udex-agg/index.ts @@ -1,6 +1,7 @@ import { Chain } from "@defillama/sdk/build/general"; import { FetchResult, FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import customBackfill from "../../helpers/customBackfill"; let abi = ["event Swap(address indexed payer,address indexed payee,address fromToken,address toToken,uint fromAmount,uint receivedAmount)"]; @@ -31,8 +32,9 @@ const adapter: SimpleAdapter = { ...acc, [chain]: { fetch, - start: 1703376000, - } + start: 1701388800, + runAtCurrTime:false + }, } }, {}), version: 2, From 45fe19ed4cd6126b3ce9ffec7b0d3b1410170516 Mon Sep 17 00:00:00 2001 From: Thanh Nguyen Date: Wed, 29 May 2024 09:14:50 +0700 Subject: [PATCH 0688/1590] Add Capybara Exchange --- dexs/capybara-exchange/index.ts | 72 +++++++++++++++++++++++++++++++++ fees/capybara-exchange.ts | 17 ++++++++ 2 files changed, 89 insertions(+) create mode 100644 dexs/capybara-exchange/index.ts create mode 100644 fees/capybara-exchange.ts diff --git a/dexs/capybara-exchange/index.ts b/dexs/capybara-exchange/index.ts new file mode 100644 index 0000000000..670f0b6342 --- /dev/null +++ b/dexs/capybara-exchange/index.ts @@ -0,0 +1,72 @@ +import {FetchOptions, FetchResultV2, SimpleAdapter} from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, request } from "graphql-request"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { Chain } from "@defillama/sdk/build/general"; +import { getBlock } from "../../helpers/getBlock"; + +interface IGraph { + dailyTradeVolumeUSD: string; + dayID: string; +} + +interface IProtocol { + totalTradeVolumeUSD: string; +} +interface IData { + protocolDayData: IGraph; + protocols: IProtocol[]; +} + +type TEndpoint = { + [s: string | Chain]: string; +}; + +// Updated using studio +const endpoints: TEndpoint = { + [CHAIN.KLAYTN]: + "https://klaytn-graphnode.ecosystem-dev.klaytn.in/cypress/graph/http/subgraphs/name/capy-exchange/capy-klaytn", +}; + +const fetchVolume = (chain: Chain) => { + return async (options: FetchOptions): Promise => { + const { startTimestamp} = options; + const dayTimestamp = getUniqStartOfTodayTimestamp( + new Date(startTimestamp * 1000) + ); + const todaysBlock = await getBlock(dayTimestamp, chain, {}); + const dayID = dayTimestamp / 86400; + const query = gql` + { + protocolDayData(id: "${dayID}") { + dayID + dailyTradeVolumeUSD + }, + protocols(block: { number: ${todaysBlock} }) { + totalTradeVolumeUSD + } + }`; + const response: IData = await request(endpoints[chain], query); + const dailyVolume = + Number(response.protocolDayData.dailyTradeVolumeUSD) / 2; + const totalTradeVolumeUSD = + Number(response.protocols[0].totalTradeVolumeUSD) / 2; + return { + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + totalVolume: totalTradeVolumeUSD ? `${totalTradeVolumeUSD}` : undefined, + timestamp: dayTimestamp, + }; + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.KLAYTN]: { + fetch: fetchVolume(CHAIN.KLAYTN), + start: 153765758, + }, + }, +}; + +export default adapter; diff --git a/fees/capybara-exchange.ts b/fees/capybara-exchange.ts new file mode 100644 index 0000000000..777e9a91c5 --- /dev/null +++ b/fees/capybara-exchange.ts @@ -0,0 +1,17 @@ +import { Adapter } from "../adapters/types"; +import volumeAdapter from "../dexs/capybara-exchange"; +import { getDexChainFees } from "../helpers/getUniSubgraphFees"; + +const TOTAL_FEES = 0.0004; + +const feeAdapter = getDexChainFees({ + totalFees: TOTAL_FEES, + volumeAdapter +}); + +const adapter: Adapter = { + adapter: feeAdapter +}; + + +export default adapter; From 295a05bacdadd5c6137e70620df165d81d70e740 Mon Sep 17 00:00:00 2001 From: Thanh Nguyen Date: Wed, 29 May 2024 10:32:27 +0700 Subject: [PATCH 0689/1590] Update timestamp --- dexs/capybara-exchange/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/capybara-exchange/index.ts b/dexs/capybara-exchange/index.ts index 670f0b6342..fe4534a55b 100644 --- a/dexs/capybara-exchange/index.ts +++ b/dexs/capybara-exchange/index.ts @@ -64,7 +64,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.KLAYTN]: { fetch: fetchVolume(CHAIN.KLAYTN), - start: 153765758, + start: 1715752335, }, }, }; From 4fc9b014035d609bfc16884256956fc35bf07bc7 Mon Sep 17 00:00:00 2001 From: Thanh Nguyen Date: Wed, 29 May 2024 11:17:10 +0700 Subject: [PATCH 0690/1590] Add `version` to adapter --- fees/capybara-exchange.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/fees/capybara-exchange.ts b/fees/capybara-exchange.ts index 777e9a91c5..4a5bd13de1 100644 --- a/fees/capybara-exchange.ts +++ b/fees/capybara-exchange.ts @@ -10,6 +10,7 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: feeAdapter }; From bab922309918cac9351604d7f7d11064393fde73 Mon Sep 17 00:00:00 2001 From: Thanh Nguyen Date: Tue, 4 Jun 2024 11:32:22 +0700 Subject: [PATCH 0691/1590] Reformat `index.ts` --- dexs/capybara-exchange/index.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/dexs/capybara-exchange/index.ts b/dexs/capybara-exchange/index.ts index fe4534a55b..209cdb0870 100644 --- a/dexs/capybara-exchange/index.ts +++ b/dexs/capybara-exchange/index.ts @@ -1,4 +1,4 @@ -import {FetchOptions, FetchResultV2, SimpleAdapter} from "../../adapters/types"; +import { FetchOptions, FetchResultV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, request } from "graphql-request"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; @@ -13,6 +13,7 @@ interface IGraph { interface IProtocol { totalTradeVolumeUSD: string; } + interface IData { protocolDayData: IGraph; protocols: IProtocol[]; @@ -25,14 +26,14 @@ type TEndpoint = { // Updated using studio const endpoints: TEndpoint = { [CHAIN.KLAYTN]: - "https://klaytn-graphnode.ecosystem-dev.klaytn.in/cypress/graph/http/subgraphs/name/capy-exchange/capy-klaytn", + "https://klaytn-graphnode.ecosystem-dev.klaytn.in/cypress/graph/http/subgraphs/name/capy-exchange/capy-klaytn" }; const fetchVolume = (chain: Chain) => { return async (options: FetchOptions): Promise => { - const { startTimestamp} = options; + const { startTimestamp } = options; const dayTimestamp = getUniqStartOfTodayTimestamp( - new Date(startTimestamp * 1000) + new Date(startTimestamp * 1000) ); const todaysBlock = await getBlock(dayTimestamp, chain, {}); const dayID = dayTimestamp / 86400; @@ -54,7 +55,7 @@ const fetchVolume = (chain: Chain) => { return { dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, totalVolume: totalTradeVolumeUSD ? `${totalTradeVolumeUSD}` : undefined, - timestamp: dayTimestamp, + timestamp: dayTimestamp }; }; }; @@ -64,9 +65,9 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.KLAYTN]: { fetch: fetchVolume(CHAIN.KLAYTN), - start: 1715752335, - }, - }, + start: 1715752335 + } + } }; export default adapter; From 670f0be3ec32bf06ce8e0c69dbf195c58f34df15 Mon Sep 17 00:00:00 2001 From: Thanh Nguyen Date: Tue, 4 Jun 2024 15:05:51 +0700 Subject: [PATCH 0692/1590] Remove `version: 2` of `feeAdapter` --- fees/capybara-exchange.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/fees/capybara-exchange.ts b/fees/capybara-exchange.ts index 4a5bd13de1..777e9a91c5 100644 --- a/fees/capybara-exchange.ts +++ b/fees/capybara-exchange.ts @@ -10,7 +10,6 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { - version: 2, adapter: feeAdapter }; From 12a96fc05832e527eeea12f52b1e66c84afcab7f Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Jun 2024 17:11:19 +0530 Subject: [PATCH 0693/1590] updated fees and revnue adapter --- fees/flashtrade.ts | 60 +++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/fees/flashtrade.ts b/fees/flashtrade.ts index 6e0d1b1200..83c29ff621 100644 --- a/fees/flashtrade.ts +++ b/fees/flashtrade.ts @@ -8,39 +8,55 @@ interface Pool { paid: string; } - const methodology = { - ProtocolReveneue: 'Sum of all fees accrued from LP pools.' + Fees: 'Sum of all fees accrued from LP pools.', + ProtocolReveneue: '30% of all the fees accrued excluding Community pool.' } const urlTotalStats = "https://api.prod.flash.trade/market-stat/revenue-all-time"; const urlDailyStats = "https://api.prod.flash.trade/market-stat/revenue-24hr"; +const calculateProtocolRevenue = (stats: Pool[]) => { + return stats + .filter(item => item.pool !== "Community.1") + .reduce((sum, item) => sum + 0.3 * parseFloat(item.accured), 0); +} + const fetchFlashStats = async (timestamp: number): Promise => { - const totalStats:Pool[] = (await fetchURL(urlTotalStats)); - const dailyStats:Pool[] = (await fetchURL(urlDailyStats)); - const dailyAccured = dailyStats.reduce((sum, item) => sum + parseFloat(item.accured), 0); - const totalAccured = totalStats.reduce((sum, item) => sum + parseFloat(item.accured), 0); + const totalStatsResponse = await fetchURL(urlTotalStats); + const dailyStatsResponse = await fetchURL(urlDailyStats); + + const totalStats: Pool[] = totalStatsResponse.data; + const dailyStats: Pool[] = dailyStatsResponse.data; + + const dailyAccrued = dailyStats.reduce((sum, item) => sum + parseFloat(item.accured), 0); + const totalAccrued = totalStats.reduce((sum, item) => sum + parseFloat(item.accured), 0); + + const dailyProtocolRevenue = calculateProtocolRevenue(dailyStats); + const totalProtocolRevenue = calculateProtocolRevenue(totalStats); + return { - timestamp, - dailyProtocolRevenue: dailyAccured.toString(), - totalProtocolRevenue: totalAccured.toString(), + timestamp, + dailyFees: dailyAccrued.toString(), + totalFees: totalAccrued.toString(), + dailyProtocolRevenue: dailyProtocolRevenue.toString(), + totalProtocolRevenue: totalProtocolRevenue.toString(), }; - }; +}; - const adapter: Adapter = { +const adapter: Adapter = { version: 2, adapter: { - [CHAIN.SOLANA]: { - runAtCurrTime: true, - customBackfill: undefined, - fetch: fetchFlashStats, - start: 0, - meta: { - methodology, + [CHAIN.SOLANA]: { + runAtCurrTime: true, + customBackfill: undefined, + fetch: fetchFlashStats, + start: 0, + meta: { + methodology, + }, }, - }, }, - }; - - export default adapter; +}; + +export default adapter; From 911811e05d98559c44fc432c11e6458a4a4b59e8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 4 Jun 2024 13:07:35 +0000 Subject: [PATCH 0694/1590] set env --- helpers/env.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/helpers/env.ts b/helpers/env.ts index bb2aaab04c..72a67d168d 100644 --- a/helpers/env.ts +++ b/helpers/env.ts @@ -7,6 +7,7 @@ const DEFAULTS: any = { ZETA_RPC: "https://zetachain-evm.blockpi.network/v1/rpc/public,https://zetachain-mainnet-archive.allthatnode.com:8545", SVM_RPC: "https://rpc.cosvm.net", XLAYER_RPC: "https://xlayerrpc.okx.com", + BITLAYER_RPC: "https://rpc-bitlayer.rockx.com", } export const ENV_KEYS = new Set([ From b04a1c152ba7bcf62ed5820755f86ee97c86f7fa Mon Sep 17 00:00:00 2001 From: Thanh Nguyen Date: Tue, 4 Jun 2024 21:22:36 +0700 Subject: [PATCH 0695/1590] Add `version: 2` --- fees/capybara-exchange.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fees/capybara-exchange.ts b/fees/capybara-exchange.ts index 777e9a91c5..15ad5f9d16 100644 --- a/fees/capybara-exchange.ts +++ b/fees/capybara-exchange.ts @@ -6,11 +6,12 @@ const TOTAL_FEES = 0.0004; const feeAdapter = getDexChainFees({ totalFees: TOTAL_FEES, - volumeAdapter + volumeAdapter, }); const adapter: Adapter = { - adapter: feeAdapter + version: 2, + adapter: feeAdapter, }; From 536da1d56c4eebf232f67775540f3e8b5e9bba63 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 4 Jun 2024 14:55:22 +0000 Subject: [PATCH 0696/1590] fix fees --- fees/flashtrade.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/flashtrade.ts b/fees/flashtrade.ts index 83c29ff621..579caf61ce 100644 --- a/fees/flashtrade.ts +++ b/fees/flashtrade.ts @@ -26,8 +26,8 @@ const fetchFlashStats = async (timestamp: number): Promise => { const totalStatsResponse = await fetchURL(urlTotalStats); const dailyStatsResponse = await fetchURL(urlDailyStats); - const totalStats: Pool[] = totalStatsResponse.data; - const dailyStats: Pool[] = dailyStatsResponse.data; + const totalStats: Pool[] = totalStatsResponse; + const dailyStats: Pool[] = dailyStatsResponse; const dailyAccrued = dailyStats.reduce((sum, item) => sum + parseFloat(item.accured), 0); const totalAccrued = totalStats.reduce((sum, item) => sum + parseFloat(item.accured), 0); From 5046ce2803d1901f504e7bc81299219bf63c1f9c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 4 Jun 2024 15:10:47 +0000 Subject: [PATCH 0697/1590] add celo --- dexs/curve/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/curve/index.ts b/dexs/curve/index.ts index 6b0d035615..693b6a6a33 100644 --- a/dexs/curve/index.ts +++ b/dexs/curve/index.ts @@ -9,7 +9,8 @@ const endpoints: { [chain: string]: string } = { [CHAIN.ARBITRUM]: "https://api.curve.fi/api/getSubgraphData/arbitrum", [CHAIN.AVAX]: "https://api.curve.fi/api/getSubgraphData/avalanche", [CHAIN.OPTIMISM]: "https://api.curve.fi/api/getSubgraphData/optimism", - [CHAIN.XDAI]: "https://api.curve.fi/api/getSubgraphData/xdai" + [CHAIN.XDAI]: "https://api.curve.fi/api/getSubgraphData/xdai", + [CHAIN.CELO]: "https://api.curve.fi/api/getSubgraphData/celo", }; interface IAPIResponse { From 6875dbd5c5e15a63f71a4d511c7f8e2f4fa0cf99 Mon Sep 17 00:00:00 2001 From: whichghost Date: Tue, 4 Jun 2024 23:48:40 +0800 Subject: [PATCH 0698/1590] update polter methodolgy --- fees/polter/index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fees/polter/index.ts b/fees/polter/index.ts index 867d07d42a..64b643f2a8 100644 --- a/fees/polter/index.ts +++ b/fees/polter/index.ts @@ -71,7 +71,13 @@ const adapter: Adapter = { adapter: { [CHAIN.FANTOM]: { fetch: fetch, - start: 1706546953 // Jan-29-2024 04:49:13 PM +UTC + start: 1706546953, // Jan-29-2024 04:49:13 PM +UTC + meta: { + methodology: { + Fees: "lockers' revenue = stakers' revenue + 50% penalty from early exit", + Revenue: "depositors' revenue from borrow interests", + } + } }, }, } From 4e108b516b0ceb13ca9bd859259faa8a4265ca9d Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 4 Jun 2024 17:06:39 +0100 Subject: [PATCH 0699/1590] more v2s --- fees/banana-gun-trading.ts | 16 +++------------- fees/base.ts | 1 + fees/based-markets.ts | 15 +++++---------- fees/basepaint.ts | 7 ++++--- fees/beamex.ts | 1 + fees/beamswap-v3.ts | 1 + fees/beamswap.ts | 1 + fees/benqi-staked-avax.ts | 5 +++-- fees/bitcoin.ts | 1 + fees/blastapi.ts | 5 +++-- fees/blitz.ts | 1 + fees/bluefin.ts | 1 + fees/bmx.ts | 1 + fees/boba.ts | 1 + fees/manta.ts | 1 + fees/optimism.ts | 1 + helpers/ethereum-l2.ts | 4 ++-- 17 files changed, 31 insertions(+), 32 deletions(-) diff --git a/fees/banana-gun-trading.ts b/fees/banana-gun-trading.ts index 60105687b8..79caf1b7e0 100644 --- a/fees/banana-gun-trading.ts +++ b/fees/banana-gun-trading.ts @@ -1,17 +1,9 @@ import { ChainBlocks, FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getTimestampAtStartOfDayUTC } from "../utils/date"; import { queryDune } from "../helpers/dune"; -interface IFees { - block_date: string; - feesSOL: number; -} - -const fethcFeesSolana = async (timestamp: number, _: ChainBlocks, options: FetchOptions): Promise => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); +const fethcFeesSolana = async (options: FetchOptions) => { try { - const dateStr = new Date(todaysTimestamp * 1000).toISOString().split('T')[0]; const dailyFees = options.createBalances(); const dailyRevenue = options.createBalances(); const value = (await queryDune("3521814", { @@ -24,13 +16,11 @@ const fethcFeesSolana = async (timestamp: number, _: ChainBlocks, options: Fetch return { dailyFees: dailyFees, dailyRevenue: dailyRevenue, - timestamp } } catch (error: any) { console.error('Error fetching fees for Solana', error); return { dailyFees: "0", - timestamp } } } @@ -41,7 +31,7 @@ const contract_address: any = { [CHAIN.ETHEREUM]: '0x3328f7f4a1d1c57c35df56bbf0c9dcafca309c49', } -const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOptions): Promise => { +const fetchFees = async (options: FetchOptions) => { const dailyFees = options.createBalances(); const dailyRevenue = options.createBalances(); const logs = await options.getLogs({ @@ -57,11 +47,11 @@ const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOption return { dailyFees: dailyFees, dailyRevenue: dailyRevenue, - timestamp } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetchFees, diff --git a/fees/base.ts b/fees/base.ts index a7ef7a3c35..7bc8356ca6 100644 --- a/fees/base.ts +++ b/fees/base.ts @@ -10,6 +10,7 @@ const ethereumWallets = [ ] const adapter: Adapter = { + version: 1, adapter: { [CHAIN.BASE]: { fetch: L2FeesFetcher({ ethereumWallets }), diff --git a/fees/based-markets.ts b/fees/based-markets.ts index 8ba3eaa112..4ca2883086 100644 --- a/fees/based-markets.ts +++ b/fees/based-markets.ts @@ -2,9 +2,7 @@ import request, { gql } from "graphql-request"; import { CHAIN } from "../helpers/chains"; import BigNumber from "bignumber.js"; import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; -import { FetchResultFees, SimpleAdapter } from "../adapters/types"; - -const ONE_DAY_IN_SECONDS = 60 * 60 * 24 +import { FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; const endpoint = "https://api.thegraph.com/subgraphs/name/symmiograph/base_analytics_8" @@ -46,10 +44,10 @@ const toString = (x: BigNumber) => { return x.toString() } -const fetchVolume = async (timestamp: number): Promise => { +const fetchVolume = async ({ fromTimestamp, toTimestamp}: FetchOptions) => { const response: IGraphResponse = await request(endpoint, query, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp) + from: String(fromTimestamp), + to: String(toTimestamp) }) @@ -80,11 +78,7 @@ const fetchVolume = async (timestamp: number): Promise => { const totalProtocolRevenue = '0'; const totalSupplySideRevenue = '0'; - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000))) - return { - timestamp: dayTimestamp, - dailyFees: _dailyFees, totalFees: _totalFees, @@ -103,6 +97,7 @@ const fetchVolume = async (timestamp: number): Promise => { const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BASE]: { fetch: fetchVolume, diff --git a/fees/basepaint.ts b/fees/basepaint.ts index 63d6cd4168..bbd7fd014c 100644 --- a/fees/basepaint.ts +++ b/fees/basepaint.ts @@ -1,5 +1,5 @@ import ADDRESSES from '../helpers/coreAssets.json' -import { FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types" +import { FetchOptions, SimpleAdapter } from "../adapters/types" import { CHAIN } from "../helpers/chains" const contract = '0xBa5e05cb26b78eDa3A2f8e3b3814726305dcAc83' @@ -8,7 +8,7 @@ const protocol_fees = 10; // 10% fees const ethAddress = ADDRESSES.null; -const fetch: any = async (timestamp: number, _: any, { getLogs, createBalances, }: FetchOptions): Promise => { +const fetch: any = async ({ getLogs, createBalances, }: FetchOptions) => { const logs = await getLogs({ target: contract, eventAbi }) const dailyFees = createBalances() const dailyRevenue = createBalances() @@ -18,10 +18,11 @@ const fetch: any = async (timestamp: number, _: any, { getLogs, createBalances, dailyRevenue.addBalances(dailyFees) dailyRevenue.resizeBy(protocol_fees / 100) // 10% of the fees go to the protocol - return { dailyFees, dailyRevenue, timestamp } + return { dailyFees, dailyRevenue } } const adapterFees: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BASE]: { fetch, diff --git a/fees/beamex.ts b/fees/beamex.ts index 5b134014d5..851df70372 100644 --- a/fees/beamex.ts +++ b/fees/beamex.ts @@ -89,6 +89,7 @@ const graphsBeamex = (chain: string) => async (timestamp: number) => { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.MOONBEAM]: { fetch: graphsBeamex(CHAIN.MOONBEAM), diff --git a/fees/beamswap-v3.ts b/fees/beamswap-v3.ts index b87e42a3fd..6a42674b77 100644 --- a/fees/beamswap-v3.ts +++ b/fees/beamswap-v3.ts @@ -75,6 +75,7 @@ const fetch = (chain: Chain) => { } const adapter: Adapter = { + version: 1, adapter: { [CHAIN.MOONBEAM]: { fetch: fetch(CHAIN.MOONBEAM), diff --git a/fees/beamswap.ts b/fees/beamswap.ts index f8bf5fddef..26ecbe85ff 100644 --- a/fees/beamswap.ts +++ b/fees/beamswap.ts @@ -33,6 +33,7 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 1, adapter: feeAdapter }; diff --git a/fees/benqi-staked-avax.ts b/fees/benqi-staked-avax.ts index 039cb6dfc9..17f0e12559 100644 --- a/fees/benqi-staked-avax.ts +++ b/fees/benqi-staked-avax.ts @@ -4,17 +4,18 @@ import { CHAIN } from "../helpers/chains"; const topic0 = '0x8fbf6a230d02fb8f41af8c1ca90b126472e11286c47d7ed86bb2e1fc51a283d8'; const address = '0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be' -const fetchFees = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, }: FetchOptions): Promise => { +const fetchFees = async ({ createBalances, getLogs, }: FetchOptions) => { const dailyFees = createBalances() const logs = await getLogs({ target: address, topics: [topic0] }) logs.map((log) => dailyFees.add('0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be', log.data)) dailyFees.resizeBy(1 / 0.9) const dailyRevenue = dailyFees.clone(0.1) const dailySupplySideRevenue = dailyFees.clone(0.9) - return { dailyFees, dailyRevenue, dailySupplySideRevenue, timestamp } + return { dailyFees, dailyRevenue, dailySupplySideRevenue } } const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.AVAX]: { fetch: fetchFees, diff --git a/fees/bitcoin.ts b/fees/bitcoin.ts index ecbf8554a4..294e74b49b 100644 --- a/fees/bitcoin.ts +++ b/fees/bitcoin.ts @@ -5,6 +5,7 @@ import { chainAdapter } from "../helpers/getChainFees"; const feeAdapter = chainAdapter(BITCOIN, "btc", 1230958800); const adapter: Adapter = { + version: 1, adapter: feeAdapter, protocolType: ProtocolType.CHAIN } diff --git a/fees/blastapi.ts b/fees/blastapi.ts index e821a2f344..e46a22e16b 100644 --- a/fees/blastapi.ts +++ b/fees/blastapi.ts @@ -18,17 +18,18 @@ const marketplace_address: TMarketPlaceAddress = { } const fetch = (chain: Chain) => { - return async (timestamp: number , _: ChainBlocks, { createBalances, getLogs, }: FetchOptions): Promise => { + return async ({ createBalances, getLogs, }: FetchOptions) => { const dailyFees = createBalances(); (await getLogs({ target: marketplace_address[chain], eventAbi: 'event Deposit (address indexed account, address indexed erc20, uint256 amount)' })).forEach((e: any) => dailyFees.add(e.erc20, e.amount)) - return { dailyFees, timestamp, dailyRevenue: dailyFees }; + return { dailyFees, dailyRevenue: dailyFees }; } } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch(CHAIN.ETHEREUM), diff --git a/fees/blitz.ts b/fees/blitz.ts index d190b634cb..fb7e6eb477 100644 --- a/fees/blitz.ts +++ b/fees/blitz.ts @@ -115,6 +115,7 @@ const fetch = async (timestamp: number): Promise => { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.BLAST]: { fetch: fetch, diff --git a/fees/bluefin.ts b/fees/bluefin.ts index 1b196d4aaa..b8294038de 100644 --- a/fees/bluefin.ts +++ b/fees/bluefin.ts @@ -19,6 +19,7 @@ const fetch_sui = async (timestamp: number): Promise => { }; const adapter: SimpleAdapter = { + version: 1, adapter: { [CHAIN.SUI]: { fetch: fetch_sui, diff --git a/fees/bmx.ts b/fees/bmx.ts index 6b71c8f6c0..06563fed28 100644 --- a/fees/bmx.ts +++ b/fees/bmx.ts @@ -55,6 +55,7 @@ const graphs = (chain: string) => async (timestamp: number) => { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.BASE]: { fetch: graphs(CHAIN.BASE), diff --git a/fees/boba.ts b/fees/boba.ts index 7af9bff6d5..9e4a5c396e 100644 --- a/fees/boba.ts +++ b/fees/boba.ts @@ -8,6 +8,7 @@ const ethereumWallets = [ ] const adapter: Adapter = { + version: 2, adapter: { [CHAIN.BOBA]: { fetch: L2FeesFetcher({ ethereumWallets, }), diff --git a/fees/manta.ts b/fees/manta.ts index 6c79be53c2..517b222e73 100644 --- a/fees/manta.ts +++ b/fees/manta.ts @@ -9,6 +9,7 @@ const ethereumWallets = [ ] const adapter: Adapter = { + version: 2, adapter: { [CHAIN.MANTA]: { fetch: L2FeesFetcher({ ethereumWallets }), diff --git a/fees/optimism.ts b/fees/optimism.ts index fc4ad46da3..21d229c7e6 100644 --- a/fees/optimism.ts +++ b/fees/optimism.ts @@ -10,6 +10,7 @@ const ethereumWallets = [ ] const adapter: Adapter = { + version: 2, adapter: { [CHAIN.OPTIMISM]: { fetch: L2FeesFetcher({ ethereumWallets }), diff --git a/helpers/ethereum-l2.ts b/helpers/ethereum-l2.ts index c9f6c089a7..eaa6040e0c 100644 --- a/helpers/ethereum-l2.ts +++ b/helpers/ethereum-l2.ts @@ -37,7 +37,7 @@ export function L2FeesFetcher({ feeVaults?: string[]; ethereumWallets: string[]; }): any { - return async (timestamp: number, _chainBlocks: ChainBlocks, options: FetchOptions): Promise => { + return async (options: FetchOptions) => { const sequencerGas = queryIndexer(` SELECT sum(ethereum.transactions.gas_used * ethereum.transactions.gas_price) AS sum @@ -52,6 +52,6 @@ export function L2FeesFetcher({ dailyRevenue.addTokenVannila(gasToken, (totalSpentBySequencer as any)[0].sum * -1) else dailyRevenue.addGasToken((totalSpentBySequencer as any)[0].sum * -1) - return { timestamp, dailyFees, dailyRevenue, } + return { dailyFees, dailyRevenue, } } } From 0538c3f0912ec46d7887d6e98a9fc2e7c3704027 Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:19:51 +0800 Subject: [PATCH 0700/1590] Update index.ts --- dexs/kiloex/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dexs/kiloex/index.ts b/dexs/kiloex/index.ts index 27a62d3bf1..771921b31a 100644 --- a/dexs/kiloex/index.ts +++ b/dexs/kiloex/index.ts @@ -12,7 +12,8 @@ type ChainMap = { const historicalVolumeEndpoints: ChainMap = { [CHAIN.BSC]: "https://api.kiloex.io/common/queryTradeSummary", [CHAIN.OP_BNB]: "https://opapi.kiloex.io/common/queryTradeSummary", - [CHAIN.MANTA]: "https://mantaapi.kiloex.io/common/queryTradeSummary" + [CHAIN.MANTA]: "https://mantaapi.kiloex.io/common/queryTradeSummary", + [CHAIN.TAIKO]: "https://mantaapi.kiloex.io/common/queryTradeSummary", }; interface IVolume { @@ -52,6 +53,9 @@ const adapter: SimpleAdapter = { [CHAIN.MANTA]: { fetch: fetch(CHAIN.MANTA), start: async () => 1698796800 }, + [CHAIN.TAIKO]: { + fetch: fetch(CHAIN.TAIKO), start: async () => 1717027200 + }, }, }; From 064a6465c91b02da59a451f27b6dbad4171b843c Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:20:46 +0800 Subject: [PATCH 0701/1590] Update index.ts --- fees/kiloex/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fees/kiloex/index.ts b/fees/kiloex/index.ts index d8042137d4..cc1bbfc514 100644 --- a/fees/kiloex/index.ts +++ b/fees/kiloex/index.ts @@ -12,7 +12,8 @@ type ChainMap = { const endpoints: ChainMap = { [CHAIN.BSC]: "https://api.kiloex.io/common/queryTradeSummary", [CHAIN.OP_BNB]: "https://opapi.kiloex.io/common/queryTradeSummary", - [CHAIN.MANTA]: "https://mantaapi.kiloex.io/common/queryTradeSummary" + [CHAIN.MANTA]: "https://mantaapi.kiloex.io/common/queryTradeSummary", + [CHAIN.TAIKO]: "https://mantaapi.kiloex.io/common/queryTradeSummary" }; interface IFee { @@ -52,6 +53,9 @@ const adapter: SimpleAdapter = { [CHAIN.MANTA]: { fetch: fetch(CHAIN.MANTA), start: async () => 1698796800 }, + [CHAIN.TAIKO]: { + fetch: fetch(CHAIN.TAIKO), start: async () => 1717027200 + }, }, }; From 3e2aa3acfb39173bf8e337d354503e2a0659f139 Mon Sep 17 00:00:00 2001 From: Ivan Shukhov <45999338+ivanshukhov@users.noreply.github.com> Date: Wed, 5 Jun 2024 11:02:54 +0200 Subject: [PATCH 0702/1590] add physica volume --- dexs/physica-finance/index.ts | 64 +++++++++++++++++++++++++++++++++++ helpers/chains.ts | 3 +- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 dexs/physica-finance/index.ts diff --git a/dexs/physica-finance/index.ts b/dexs/physica-finance/index.ts new file mode 100644 index 0000000000..1bc9caab55 --- /dev/null +++ b/dexs/physica-finance/index.ts @@ -0,0 +1,64 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { CHAIN } from "../../helpers/chains"; +import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { BreakdownAdapter } from "../../adapters/types"; + +const endpointsV3 = { + [CHAIN.PLANQ]: + "https://subgraph.planq.finance/subgraphs/name/ianlapham/uniswap-v3", +}; + +const v3Graphs = getGraphDimensions({ + graphUrls: endpointsV3, + totalVolume: { + factory: "factories", + field: "totalVolumeUSD", + }, + dailyVolume: { + factory: "uniswapDayData", + field: "volumeUSD", + }, + feesPercent: { + type: "fees", + ProtocolRevenue: 14.2857, // 1/7th of generated LP fees are protocol fees + HoldersRevenue: 0, + UserFees: 100, // User fees are 100% of collected fees + SupplySideRevenue: 85.7143, // ~85% of fees are going to LPs + Revenue: 100, // Revenue is 100% of collected fees + }, +}); + +const startTimeV3: { [key: string]: number } = { + [CHAIN.PLANQ]: 1716372437, +}; + +const v3 = Object.keys(endpointsV3).reduce( + (acc, chain) => ({ + ...acc, + [chain]: { + fetch: v3Graphs(chain as Chain), + start: startTimeV3[chain], + meta: { + methodology: { + Fees: "Each pool charge between 0.01% to 1% fee", + UserFees: "Users pay between 0.01% to 1% fee", + Revenue: "0 to 1/4 of the fee goes to Physica Token stakers", + HoldersRevenue: "None", + ProtocolRevenue: "Physica token stakers receive a share of the fees", + SupplySideRevenue: + "Liquidity providers get most of the fees of all trades in their pools", + }, + }, + }, + }), + {} +); + +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + v3: v3, + }, +}; + +export default adapter; diff --git a/helpers/chains.ts b/helpers/chains.ts index 4dea93a823..c42b725818 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -149,7 +149,8 @@ export enum CHAIN { BITLAYER = "bitlayer", XLAYER = "xlayer", MERLIN = "merlin", - CHILIZ = "chiliz" + CHILIZ = "chiliz", + PLANQ = "planq" } // Don´t use From 853852c4ef213a253193e73ab89d9210a223ac99 Mon Sep 17 00:00:00 2001 From: 0xBluePingu <156801910+0xBluePingu@users.noreply.github.com> Date: Wed, 5 Jun 2024 11:38:57 +0200 Subject: [PATCH 0703/1590] change subgraph link --- fees/pingu/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/pingu/index.ts b/fees/pingu/index.ts index 0a26af7d61..bff0625ee2 100644 --- a/fees/pingu/index.ts +++ b/fees/pingu/index.ts @@ -11,7 +11,7 @@ interface IGraph { id: string; } -const URL = 'https://api.studio.thegraph.com/query/43986/pingu-sg/0.1.0'; +const URL = 'https://api.studio.thegraph.com/query/43986/pingu-sg/0.1.1'; const fetch = async (timestamp: number): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); From a7931f571d374b68e9dc4b4a01abf6c116d7e472 Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Wed, 5 Jun 2024 21:28:49 +0800 Subject: [PATCH 0704/1590] Update index.ts --- dexs/kiloex/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/kiloex/index.ts b/dexs/kiloex/index.ts index 771921b31a..cd14ef611a 100644 --- a/dexs/kiloex/index.ts +++ b/dexs/kiloex/index.ts @@ -13,7 +13,7 @@ const historicalVolumeEndpoints: ChainMap = { [CHAIN.BSC]: "https://api.kiloex.io/common/queryTradeSummary", [CHAIN.OP_BNB]: "https://opapi.kiloex.io/common/queryTradeSummary", [CHAIN.MANTA]: "https://mantaapi.kiloex.io/common/queryTradeSummary", - [CHAIN.TAIKO]: "https://mantaapi.kiloex.io/common/queryTradeSummary", + [CHAIN.TAIKO]: "https://taikoapi.kiloex.io/common/queryTradeSummary", }; interface IVolume { From 5354ff9eb0a03f64c513bff3056d444ba346d55b Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Wed, 5 Jun 2024 21:30:21 +0800 Subject: [PATCH 0705/1590] Update index.ts --- fees/kiloex/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/kiloex/index.ts b/fees/kiloex/index.ts index cc1bbfc514..12c5414da1 100644 --- a/fees/kiloex/index.ts +++ b/fees/kiloex/index.ts @@ -13,7 +13,7 @@ const endpoints: ChainMap = { [CHAIN.BSC]: "https://api.kiloex.io/common/queryTradeSummary", [CHAIN.OP_BNB]: "https://opapi.kiloex.io/common/queryTradeSummary", [CHAIN.MANTA]: "https://mantaapi.kiloex.io/common/queryTradeSummary", - [CHAIN.TAIKO]: "https://mantaapi.kiloex.io/common/queryTradeSummary" + [CHAIN.TAIKO]: "https://taikoapi.kiloex.io/common/queryTradeSummary" }; interface IFee { From cd777423d671a4567b7bdaac1661571c82c32880 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 5 Jun 2024 14:40:29 +0100 Subject: [PATCH 0706/1590] patch --- fees/base.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/base.ts b/fees/base.ts index 7bc8356ca6..d010b17b3f 100644 --- a/fees/base.ts +++ b/fees/base.ts @@ -10,7 +10,7 @@ const ethereumWallets = [ ] const adapter: Adapter = { - version: 1, + version: 2, adapter: { [CHAIN.BASE]: { fetch: L2FeesFetcher({ ethereumWallets }), From f524d2a6969ed09f39adca17f9dcf47268be3448 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:43:21 +0200 Subject: [PATCH 0707/1590] cowswap: track arbitrum --- aggregators/cowswap/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/aggregators/cowswap/index.ts b/aggregators/cowswap/index.ts index c858d1fdd9..78d623fcf1 100644 --- a/aggregators/cowswap/index.ts +++ b/aggregators/cowswap/index.ts @@ -18,6 +18,7 @@ const adapter: any = { adapter: { ethereum: { fetch, start: 1685491200, }, xdai: { fetch, start: 1685491200, }, + arbitrum: { fetch, start: 1714142553, }, }, }; From c88506db6ae6ca0244005fab2ebc6b879220cd65 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 5 Jun 2024 15:12:38 +0000 Subject: [PATCH 0708/1590] add mode and bob --- dexs/velodrome/index.ts | 10 +++++ dexs/velodrome/v2.ts | 95 +++++++++++++++++++++++++++++++++++++++++ fees/velodrome/index.ts | 11 ++++- fees/velodrome/v2.ts | 73 +++++++++++++++++++++++++++++++ helpers/chains.ts | 3 +- 5 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 dexs/velodrome/v2.ts create mode 100644 fees/velodrome/v2.ts diff --git a/dexs/velodrome/index.ts b/dexs/velodrome/index.ts index 233394147a..920c4f2fae 100644 --- a/dexs/velodrome/index.ts +++ b/dexs/velodrome/index.ts @@ -2,6 +2,7 @@ import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; +import { fetchV2Volume } from "./v2" const endpoints = { [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/dmihal/velodrome", @@ -20,6 +21,7 @@ const graphs = getChainVolume({ }); + const fetch = (chain: Chain) => { return async (options: FetchOptions) => { const [v1] = await Promise.all([graphs(chain)(options)]) @@ -37,6 +39,14 @@ const adapter: SimpleAdapter = { fetch: fetch(CHAIN.OPTIMISM), start: 1677110400 }, + [CHAIN.MODE]: { + fetch: fetchV2Volume, + start: 1715763701 + }, + [CHAIN.BOB]: { + fetch: fetchV2Volume, + start: 1715763701 + } }, }; diff --git a/dexs/velodrome/v2.ts b/dexs/velodrome/v2.ts new file mode 100644 index 0000000000..32d0c3a575 --- /dev/null +++ b/dexs/velodrome/v2.ts @@ -0,0 +1,95 @@ +import { FetchOptions, FetchResult, FetchResultV2, SimpleAdapter } from "../../adapters/types" +import { CHAIN } from "../../helpers/chains" + +const sugars = { + [CHAIN.MODE]: "0x207DfB36A449fd10d9c3bA7d75e76290a0c06731", + [CHAIN.BOB]: "0x3e71CCdf495d9628D3655A600Bcad3afF2ddea98" +} +const abis: any = { + "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" +} + +interface IForSwap { + lp: string; + type: string; + token0: string; + token1: string; + pool_fee: string; +} + +interface ILog { + address: string; + data: string; + transactionHash: string; + topics: string[]; +} +const event_swap = 'event Swap(address indexed sender,address indexed to,uint256 amount0In,uint256 amount1In,uint256 amount0Out,uint256 amount1Out)' +const event_swap_slipstream = 'event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)' + +const fetchV2Volume = async ({ api, getLogs, createBalances, chain }: FetchOptions): Promise => { + const dailyVolume = createBalances() + const dailyFees = createBalances() + const chunkSize = 400; + let currentOffset = 0; + const allForSwaps: IForSwap[] = []; + let unfinished = true; + +while (unfinished) { + const forSwaps: IForSwap[] = (await api.call({ + target: sugars[chain], + params: [chunkSize, currentOffset], + abi: abis.forSwaps, + chain: chain, + })).filter(t => Number(t.type) >= -1).map((e: any) => { + return { + lp: e.lp, + type: e.type, + token0: e.token0, + token1: e.token1, + pool_fee: e.pool_fee, + } + }); + + unfinished = forSwaps.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, +}) + +logs.forEach((logs: ILog[], idx: number) => { + const { token0, token1, pool_fee } = allForSwaps[idx] + logs.forEach((log: any) => { + dailyVolume.add(token0, BigInt(Math.abs(Number(log.amount0In)))) + dailyVolume.add(token1, BigInt(Math.abs(Number(log.amount1In)))) + dailyFees.add(token0, BigInt( Math.round((((Math.abs(Number(log.amount0In))) * Number(pool_fee)) / 10000)))) // 1% fee represented as pool_fee=100 + dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1In))) * Number(pool_fee)) / 10000)))) + }) +}) + +const slipstreamLogs: ILog[][] = await getLogs({ + targets, + eventAbi: event_swap_slipstream, + flatten: false, +}) + +slipstreamLogs.forEach((logs: ILog[], idx: number) => { + const { token1, pool_fee } = allForSwaps[idx] + logs.forEach((log: any) => { + dailyVolume.add(token1, BigInt(Math.abs(Number(log.amount1)))) + dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1))) * Number(pool_fee)) / 1000000)))) // 1% fee represented as pool_fee=10000 for Slipstream + }) +}) + +return { dailyVolume, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } +} + +export { + fetchV2Volume +} diff --git a/fees/velodrome/index.ts b/fees/velodrome/index.ts index 0f714dca94..db0c3f23db 100644 --- a/fees/velodrome/index.ts +++ b/fees/velodrome/index.ts @@ -1,6 +1,7 @@ import { Adapter, FetchOptions, FetchResultFees } from '../../adapters/types'; -import { OPTIMISM } from '../../helpers/chains'; +import { CHAIN, OPTIMISM } from '../../helpers/chains'; import { fetchV1 } from './velodrome'; +import { fetchFees } from "./v2" const getFees = async (options: FetchOptions) => { @@ -22,6 +23,14 @@ const adapter: Adapter = { fetch: getFees, start: 1677110400, // TODO: Add accurate timestamp }, + [CHAIN.MODE]: { + fetch: fetchFees, + start: 1715763701 + }, + [CHAIN.BOB]: { + fetch: fetchFees, + start: 1715763701 + } }, }; export default adapter; diff --git a/fees/velodrome/v2.ts b/fees/velodrome/v2.ts new file mode 100644 index 0000000000..8cff3ae11b --- /dev/null +++ b/fees/velodrome/v2.ts @@ -0,0 +1,73 @@ +import { Balances } from "@defillama/sdk"; +import { FetchOptions, FetchResultFees } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getDexFees } from "../../helpers/dexVolumeLogs"; + +const event_notify_reward = 'event NotifyReward(address indexed from,uint256 amount)'; +const event_geuge_created = 'event StakingRewardsCreated(address indexed pool,address indexed rewardToken,address indexed stakingRewards,address creator)' + +const abis: any = { + "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" +} +const sugars: any = { + [CHAIN.MODE]: "0x207DfB36A449fd10d9c3bA7d75e76290a0c06731", + [CHAIN.BOB]: "0x3e71CCdf495d9628D3655A600Bcad3afF2ddea98" +} + +const stakingRewards = { + [CHAIN.MODE]: "0xD2F998a46e4d9Dd57aF1a28EBa8C34E7dD3851D7", + [CHAIN.BOB]: "0x8Eb6838B4e998DA08aab851F3d42076f21530389" +} +const rewardTokens = { + [CHAIN.MODE]: "0xDfc7C877a950e49D2610114102175A06C2e3167a", + [CHAIN.BOB]: "0x4200000000000000000000000000000000000006" +} + +export const fees_bribes = async ({ getLogs, createBalances, getToBlock, chain }: FetchOptions): Promise => { + const stakingRewardsFactory = stakingRewards[chain] ; + const rewardToken = rewardTokens[chain]; + const dailyFees = createBalances() + const logs_geuge_created = (await getLogs({ + target: stakingRewardsFactory, + fromBlock: 7797181, + toBlock: await getToBlock(), + eventAbi: event_geuge_created, + })) + const bribes_contract: string[] = logs_geuge_created.map((e: any) => e.stakingRewards.toLowerCase()); + if (bribes_contract.length === 0) { + return dailyFees; + } + const logs = await getLogs({ + targets: bribes_contract, + eventAbi: event_notify_reward, + }) + logs.map((e: any) => { + dailyFees.add(rewardToken, e.amount) + }) + return dailyFees; +} + +const fetchFees = async (options: FetchOptions): Promise => { + const chunkSize = 500; + let currentOffset = 0; + let unfinished = true; + const allPools: any[] = []; + + if (options.startOfDay > 1715763701) { // Sugar pools data helper contract created at this timestamp + while (unfinished) { + const allPoolsChunk = await options.api.call({ target: sugars[options.chain], abi: abis.forSwaps, params: [chunkSize, currentOffset], chain: options.chain}) + unfinished = allPoolsChunk.length !== 0; + currentOffset += chunkSize; + allPools.push(...allPoolsChunk); + } + } + + const pools = allPools.map((e: any) => e.lp) + const res: any = await getDexFees({ chain: options.chain, fromTimestamp: options.fromTimestamp, toTimestamp: options.toTimestamp, pools, timestamp: options.startOfDay, fetchOptions: options }) + res.dailyBribesRevenue = await fees_bribes(options); + return res; +} + +export { + fetchFees +} diff --git a/helpers/chains.ts b/helpers/chains.ts index 4dea93a823..0a33755373 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -149,7 +149,8 @@ export enum CHAIN { BITLAYER = "bitlayer", XLAYER = "xlayer", MERLIN = "merlin", - CHILIZ = "chiliz" + CHILIZ = "chiliz", + BOB = "bob", } // Don´t use From c273576fbfa2c37d8d966872e8115369914669f2 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 5 Jun 2024 15:34:16 +0000 Subject: [PATCH 0709/1590] set env --- dexs/physica-finance/index.ts | 3 +-- helpers/env.ts | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/physica-finance/index.ts b/dexs/physica-finance/index.ts index 1bc9caab55..a94dfd6269 100644 --- a/dexs/physica-finance/index.ts +++ b/dexs/physica-finance/index.ts @@ -4,8 +4,7 @@ import { getGraphDimensions } from "../../helpers/getUniSubgraph"; import { BreakdownAdapter } from "../../adapters/types"; const endpointsV3 = { - [CHAIN.PLANQ]: - "https://subgraph.planq.finance/subgraphs/name/ianlapham/uniswap-v3", + [CHAIN.PLANQ]: "https://subgraph.planq.finance/subgraphs/name/ianlapham/uniswap-v3", }; const v3Graphs = getGraphDimensions({ diff --git a/helpers/env.ts b/helpers/env.ts index 72a67d168d..cfce9e4cfd 100644 --- a/helpers/env.ts +++ b/helpers/env.ts @@ -8,6 +8,7 @@ const DEFAULTS: any = { SVM_RPC: "https://rpc.cosvm.net", XLAYER_RPC: "https://xlayerrpc.okx.com", BITLAYER_RPC: "https://rpc-bitlayer.rockx.com", + PLANQ_RPC: "https://planq-rpc.nodies.app,https://jsonrpc.planq.nodestake.top", } export const ENV_KEYS = new Set([ From 2fec46178990ec9a89973bf254fb701175a55290 Mon Sep 17 00:00:00 2001 From: "a.maik" Date: Wed, 5 Jun 2024 18:29:51 +0200 Subject: [PATCH 0710/1590] Update index.ts --- fees/keller-cl/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/keller-cl/index.ts b/fees/keller-cl/index.ts index 6e236948aa..b62db9b29b 100644 --- a/fees/keller-cl/index.ts +++ b/fees/keller-cl/index.ts @@ -66,7 +66,7 @@ const getFees = async (fetchOptions: FetchOptions): Promise => const feesPercentage = (await fetchOptions.api.multiCall({ abi: 'function fee() view returns (uint24)', calls: pools, - })).map((fee: any) => fee / 10000); + })).map((fee: any) => fee / 1000000); for (let i = 0; i < pools.length; i++) { const pool = pools[i]; // Protocol Fees From 09d48843e5bfbece6107e084dd07270d0bc8c704 Mon Sep 17 00:00:00 2001 From: Jason Mansfield Date: Wed, 5 Jun 2024 13:58:21 -0400 Subject: [PATCH 0711/1590] Add Polkadex volume --- dexs/polkadex/index.ts | 28 ++++++++++++++++++++++++++++ helpers/chains.ts | 1 + helpers/getBlock.ts | 1 + 3 files changed, 30 insertions(+) create mode 100644 dexs/polkadex/index.ts diff --git a/dexs/polkadex/index.ts b/dexs/polkadex/index.ts new file mode 100644 index 0000000000..41a3dad741 --- /dev/null +++ b/dexs/polkadex/index.ts @@ -0,0 +1,28 @@ +import fetchURL from "../../utils/fetchURL" +import {FetchOptions, FetchV2, SimpleAdapter} from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +type IAPIResponse = { + volume_usd: number; +}; + +const fetchVolume: FetchV2 = async (options: FetchOptions) => { + const response: IAPIResponse = (await fetchURL(`https://integration-api.polkadex.trade/v1/volumeByRange?start=${options.startTimestamp}&end=${options.endTimestamp}`)); + const dailyVolume = response.volume_usd; + + return { + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.POLKADEX]: { + fetch: fetchVolume, + start: 1704292840 + } + } +}; + +export default adapter; \ No newline at end of file diff --git a/helpers/chains.ts b/helpers/chains.ts index 4dea93a823..ef22891eb0 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -134,6 +134,7 @@ export enum CHAIN { ROLLUX = "rollux", MODE = "mode", PERSISTENCE = "persistence", + POLKADEX = "polkadex", JBC = "jbc", ZKFAIR = "zkfair", ZETA = "zeta", diff --git a/helpers/getBlock.ts b/helpers/getBlock.ts index 76e7e6ebfe..2d5aefa891 100644 --- a/helpers/getBlock.ts +++ b/helpers/getBlock.ts @@ -27,6 +27,7 @@ const blacklistedChains: string[] = [ "thorchain", "flow", "aptos", + "polkadex", "neo", "phantasma", "starknet", From 5ae06b01996e2d932b2b705eaea9cf058ef824e5 Mon Sep 17 00:00:00 2001 From: Soil King <157099073+soilking@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:42:40 -0700 Subject: [PATCH 0712/1590] update subgraph field names --- dexs/basin/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dexs/basin/index.ts b/dexs/basin/index.ts index 42775c35ea..15198b1e52 100644 --- a/dexs/basin/index.ts +++ b/dexs/basin/index.ts @@ -7,8 +7,8 @@ class SubgraphVolumeResponse { } class SubgraphWell { - rollingDailyVolumeUSD: string; - cumulativeVolumeUSD: string; + rollingDailyTradeVolumeUSD: string; + cumulativeTradeVolumeUSD: string; } enum WellType { @@ -47,11 +47,11 @@ async function getVolumeStats(chain: CHAIN, type: WellType, block: number): Prom wells( block: {number: ${block}} first: 1000 - orderBy: cumulativeVolumeUSD + orderBy: cumulativeTradeVolumeUSD orderDirection: desc ) { - rollingDailyVolumeUSD - cumulativeVolumeUSD + rollingDailyTradeVolumeUSD + cumulativeTradeVolumeUSD } }` ) as SubgraphVolumeResponse; @@ -59,8 +59,8 @@ async function getVolumeStats(chain: CHAIN, type: WellType, block: number): Prom // Sum and return the overall volume return subgraphVolume.wells.reduce((result: FetchResultV2, next: SubgraphWell) => { return { - dailyVolume: result.dailyVolume as number + parseFloat(next.rollingDailyVolumeUSD), - totalVolume: result.totalVolume as number + parseFloat(next.cumulativeVolumeUSD) + dailyVolume: result.dailyVolume as number + parseFloat(next.rollingDailyTradeVolumeUSD), + totalVolume: result.totalVolume as number + parseFloat(next.cumulativeTradeVolumeUSD) }; }, { dailyVolume: 0, totalVolume: 0 }); } From 3dc707199029fda998767e7887fdd5c5940c1687 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 6 Jun 2024 01:16:10 +0000 Subject: [PATCH 0713/1590] fix spike token --- dexs/ipor/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/ipor/index.ts b/dexs/ipor/index.ts index d56b459fd3..a76636a931 100644 --- a/dexs/ipor/index.ts +++ b/dexs/ipor/index.ts @@ -46,7 +46,8 @@ const fetch: any = async (timestamp: number, _: any, { chain, getLogs, createBal if (log.asset.toLowerCase() === '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'.toLowerCase()) { balance = balance / 1e12 } - if (log.asset.toLowerCase() === '0xdAC17F958D2ee523a2206206994597C13D831ec7'.toLowerCase()) { + if (log.asset.toLowerCase() === '0xdAC17F958D2ee523a2206206994597C13D831ec7'.toLowerCase() + || log.asset.toLowerCase() === '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'.toLowerCase()) { // 6 balance = balance / 1e10 } dailyNotionalVolume.add(log.asset, balance) From 0b31b4bc5a58388a153bc716db18f66a59a4932e Mon Sep 17 00:00:00 2001 From: Thanh Nguyen Date: Thu, 6 Jun 2024 09:40:30 +0700 Subject: [PATCH 0714/1590] feat: add fees calculation within volume --- dexs/capybara-exchange/index.ts | 9 ++++++++- fees/capybara-exchange.ts | 15 +-------------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/dexs/capybara-exchange/index.ts b/dexs/capybara-exchange/index.ts index 209cdb0870..60c876a4c0 100644 --- a/dexs/capybara-exchange/index.ts +++ b/dexs/capybara-exchange/index.ts @@ -4,6 +4,7 @@ import { gql, request } from "graphql-request"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { Chain } from "@defillama/sdk/build/general"; import { getBlock } from "../../helpers/getBlock"; +import BigNumber from 'bignumber.js'; interface IGraph { dailyTradeVolumeUSD: string; @@ -29,9 +30,11 @@ const endpoints: TEndpoint = { "https://klaytn-graphnode.ecosystem-dev.klaytn.in/cypress/graph/http/subgraphs/name/capy-exchange/capy-klaytn" }; +const feesRatio = 0.0004; + const fetchVolume = (chain: Chain) => { return async (options: FetchOptions): Promise => { - const { startTimestamp } = options; + const {startTimestamp} = options; const dayTimestamp = getUniqStartOfTodayTimestamp( new Date(startTimestamp * 1000) ); @@ -52,9 +55,13 @@ const fetchVolume = (chain: Chain) => { Number(response.protocolDayData.dailyTradeVolumeUSD) / 2; const totalTradeVolumeUSD = Number(response.protocols[0].totalTradeVolumeUSD) / 2; + const dailyFees = new BigNumber(dailyVolume ? dailyVolume : '0').multipliedBy(feesRatio).toString() + const totalFees = new BigNumber(totalTradeVolumeUSD ? totalTradeVolumeUSD : '0').multipliedBy(feesRatio).toString() return { dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, totalVolume: totalTradeVolumeUSD ? `${totalTradeVolumeUSD}` : undefined, + dailyFees: dailyFees, + totalFees: totalFees, timestamp: dayTimestamp }; }; diff --git a/fees/capybara-exchange.ts b/fees/capybara-exchange.ts index 15ad5f9d16..79f6133587 100644 --- a/fees/capybara-exchange.ts +++ b/fees/capybara-exchange.ts @@ -2,17 +2,4 @@ import { Adapter } from "../adapters/types"; import volumeAdapter from "../dexs/capybara-exchange"; import { getDexChainFees } from "../helpers/getUniSubgraphFees"; -const TOTAL_FEES = 0.0004; - -const feeAdapter = getDexChainFees({ - totalFees: TOTAL_FEES, - volumeAdapter, -}); - -const adapter: Adapter = { - version: 2, - adapter: feeAdapter, -}; - - -export default adapter; +export default volumeAdapter; From c5a1a6516f17067748d7678ed4a80d469b8137eb Mon Sep 17 00:00:00 2001 From: vulntor <22735155+algtm@users.noreply.github.com> Date: Thu, 6 Jun 2024 11:29:08 +0800 Subject: [PATCH 0715/1590] add token priority --- aggregators/udex-agg/index.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/aggregators/udex-agg/index.ts b/aggregators/udex-agg/index.ts index 83d7a3d953..0fba509831 100644 --- a/aggregators/udex-agg/index.ts +++ b/aggregators/udex-agg/index.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; let abi = ["event Swap(address indexed payer,address indexed payee,address fromToken,address toToken,uint fromAmount,uint receivedAmount)"]; - +let kwnownTokens=new Set(["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c","0x55d398326f99059fF775485246999027B3197955","0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"]) type IContract = { [c: string | Chain]: string; } @@ -19,10 +19,14 @@ const contract: IContract = { const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise => { const dailyVolume = createBalances(); - const logs = (await getLogs({ target: contract[chain], eventAbi: abi[0], })) - - logs.map((log: any) => dailyVolume.add(log.toToken, log.receivedAmount)); - + const logs = (await getLogs({ target: contract[chain], eventAbi: abi[0] })) + logs.map((log: any) => { + if ( kwnownTokens.has(log.toToken)){ + dailyVolume.add(log.toToken, log.receivedAmount) + }else{ + dailyVolume.add(log.fromToken, log.fromAmount) + } + }); return { dailyVolume }; }; From 345be5327825661332484f9554c6e5c1e0d00d19 Mon Sep 17 00:00:00 2001 From: vulntor <22735155+algtm@users.noreply.github.com> Date: Thu, 6 Jun 2024 11:30:28 +0800 Subject: [PATCH 0716/1590] fix --- aggregators/udex-agg/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aggregators/udex-agg/index.ts b/aggregators/udex-agg/index.ts index 0fba509831..c20476f89f 100644 --- a/aggregators/udex-agg/index.ts +++ b/aggregators/udex-agg/index.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; let abi = ["event Swap(address indexed payer,address indexed payee,address fromToken,address toToken,uint fromAmount,uint receivedAmount)"]; -let kwnownTokens=new Set(["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c","0x55d398326f99059fF775485246999027B3197955","0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"]) +let knownTokens=new Set(["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c","0x55d398326f99059fF775485246999027B3197955","0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"]) type IContract = { [c: string | Chain]: string; } @@ -21,7 +21,7 @@ const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise { - if ( kwnownTokens.has(log.toToken)){ + if ( knownTokens.has(log.toToken)){ dailyVolume.add(log.toToken, log.receivedAmount) }else{ dailyVolume.add(log.fromToken, log.fromAmount) From 1319fe06711b698269d24786b15a67801bd9068d Mon Sep 17 00:00:00 2001 From: bergben Date: Thu, 6 Jun 2024 10:31:54 +0200 Subject: [PATCH 0717/1590] fluid: make getting fees logic robust during new vault listing --- fees/fluid/index.ts | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index 40418542be..afe9f70909 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -153,18 +153,25 @@ const getFeesFromTo = async ( borrowBalance = borrowBalance.plus(new BigNumber(vaultOperate[3])); } - const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = await toApi.call({ - target: await fluidVaultResolverTarget(toApi), - abi: fluidVaultResolverAbi.getVaultEntireData, - params: [vault], - }); - - toApi.addToken( - borrowToken, - new BigNumber(totalSupplyAndBorrowTo.totalBorrowVault).minus( - borrowBalance - ) - ); + try { + const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = await toApi.call( + { + target: await fluidVaultResolverTarget(toApi), + abi: fluidVaultResolverAbi.getVaultEntireData, + params: [vault], + } + ); + + toApi.addToken( + borrowToken, + new BigNumber(totalSupplyAndBorrowTo.totalBorrowVault).minus( + borrowBalance + ) + ); + } catch (ex) { + // when vault is deployed but not fully configured yet, getVaultEntireData() will revert at the used version of VaultResolver. + // totalBorrow is still 0 at that point. + } } return await toApi.getUSDValue(); From 958b8ea28d885460bfc2b749763b3c461d3a20d5 Mon Sep 17 00:00:00 2001 From: Define101 Date: Thu, 6 Jun 2024 09:53:27 +0100 Subject: [PATCH 0718/1590] add bitgenie-amm --- protocols/bitgenie-amm.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/bitgenie-amm.ts diff --git a/protocols/bitgenie-amm.ts b/protocols/bitgenie-amm.ts new file mode 100644 index 0000000000..d9bee6741e --- /dev/null +++ b/protocols/bitgenie-amm.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + merlin: { + factory: '0xEa51E2E458aE7Cb921d47fC463Ac4fED7ae65a41', + } +}) \ No newline at end of file From f92ae753202af464e16faf4c537fd73ec3af2e07 Mon Sep 17 00:00:00 2001 From: WOWMAX CTO Date: Thu, 6 Jun 2024 14:23:06 +0400 Subject: [PATCH 0719/1590] add Metic, X Layer, Arbitrum chains to WOWMAX --- aggregators/wowmax/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/aggregators/wowmax/index.ts b/aggregators/wowmax/index.ts index 26c22e9ed4..36dda617bc 100644 --- a/aggregators/wowmax/index.ts +++ b/aggregators/wowmax/index.ts @@ -11,6 +11,9 @@ const chains = [ CHAIN.CRONOS, CHAIN.MANTA, CHAIN.BLAST, + CHAIN.XLAYER, + CHAIN.METIS, + CHAIN.ARBITRUM ]; const chainToId: Record = { @@ -22,6 +25,9 @@ const chainToId: Record = { [CHAIN.CRONOS]: 25, [CHAIN.MANTA]: 169, [CHAIN.BLAST]: 81457, + [CHAIN.METIS]: 1088, + [CHAIN.XLAYER]: 196, + [CHAIN.ARBITRUM]: 42161, }; const fetch = (chain: string) => async (timestamp: number) => { From 247cd3e3a3a27bea976f2b32874ac8a0f354a9c7 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 6 Jun 2024 13:21:21 +0100 Subject: [PATCH 0720/1590] v2 --- aggregators/kyberswap/index.ts | 129 +++++++++++++++-------------- fees/bsc.ts | 8 +- fees/camelot-v2.ts | 1 + fees/camelot-v3.ts | 1 + fees/cardano.ts | 1 + fees/caviar-tangible.ts | 6 +- fees/caviarnine-lsu-pool.ts | 1 + fees/caviarnine-shape-liquidity.ts | 1 + fees/chainlink-keepers.ts | 17 ++-- fees/chainlink-requests.ts | 24 +++--- helpers/blockscoutFees.ts | 1 + helpers/etherscanFees.ts | 7 +- 12 files changed, 100 insertions(+), 97 deletions(-) diff --git a/aggregators/kyberswap/index.ts b/aggregators/kyberswap/index.ts index 0548141dfa..421663a2a2 100644 --- a/aggregators/kyberswap/index.ts +++ b/aggregators/kyberswap/index.ts @@ -3,7 +3,6 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume import { CHAIN } from "../../helpers/chains"; import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; - const chainToId: Record = { [CHAIN.ETHEREUM]: 1, [CHAIN.ARBITRUM]: 42161, @@ -20,12 +19,18 @@ const chainToId: Record = { [CHAIN.MANTLE]: 5000, [CHAIN.BLAST]: 81457, [CHAIN.POLYGON_ZKEVM]: 1101, - [CHAIN.BITTORRENT]: 199 + [CHAIN.BITTORRENT]: 199, }; -const fetch = async (options: FetchOptions) => { - const url = `https://common-service.kyberswap.com/api/v1/aggregator/volume/daily?chainId=${chainToId[options.chain]}×tamps=${options.startOfDay}`; - const data = (await httpGet(url, { headers: { 'origin': 'https://common-service.kyberswap.com'}})).data?.volumes?.[0]; +const fetch = async (_a: any, _b: any, options: FetchOptions) => { + const url = `https://common-service.kyberswap.com/api/v1/aggregator/volume/daily?chainId=${ + chainToId[options.chain] + }×tamps=${options.startOfDay}`; + const data = ( + await httpGet(url, { + headers: { origin: "https://common-service.kyberswap.com" }, + }) + ).data?.volumes?.[0]; return { dailyVolume: data.value, @@ -33,64 +38,64 @@ const fetch = async (options: FetchOptions) => { }; const adapter: SimpleAdapter = { - version: 2, + version: 1, adapter: { - [CHAIN.BASE]: { - fetch: fetch, - start: 1622544000, - }, - [CHAIN.MANTLE]: { - fetch: fetch, - start: 1622544000, - }, - [CHAIN.BLAST]: { - fetch: fetch, - start: 1622544000, - }, - [CHAIN.POLYGON_ZKEVM]: { - fetch: fetch, - start: 1622544000, - }, - // [CHAIN.BITTORRENT]: { - // fetch: fetch, - // start: 1622544000, - // }, - [CHAIN.ETHEREUM]: { - fetch: fetch, - start: 1622544000, - }, - [CHAIN.ARBITRUM]: { - fetch: fetch, - start: 1632268800, - }, - [CHAIN.AVAX]: { - fetch: fetch, - start: 1622544000, - }, - [CHAIN.BSC]: { - fetch: fetch, - start: 1622544000, - }, - [CHAIN.FANTOM]: { - fetch: fetch, - start: 1622544000, - }, - [CHAIN.OPTIMISM]: { - fetch: fetch, - start: 1632268800, - }, - [CHAIN.POLYGON]: { - fetch: fetch, - start: 1622544000, - }, - [CHAIN.LINEA]: { - fetch: fetch, - start: 1632268800, - }, - [CHAIN.SCROLL]: { - fetch: fetch, - start: 1632268800, - }, + // [CHAIN.BASE]: { + // fetch: fetch, + // start: 1622544000, + // }, + // [CHAIN.MANTLE]: { + // fetch: fetch, + // start: 1622544000, + // }, + // [CHAIN.BLAST]: { + // fetch: fetch, + // start: 1622544000, + // }, + // [CHAIN.POLYGON_ZKEVM]: { + // fetch: fetch, + // start: 1622544000, + // }, + // // [CHAIN.BITTORRENT]: { + // // fetch: fetch, + // // start: 1622544000, + // // }, + // [CHAIN.ETHEREUM]: { + // fetch: fetch, + // start: 1622544000, + // }, + // [CHAIN.ARBITRUM]: { + // fetch: fetch, + // start: 1632268800, + // }, + // [CHAIN.AVAX]: { + // fetch: fetch, + // start: 1622544000, + // }, + // [CHAIN.BSC]: { + // fetch: fetch, + // start: 1622544000, + // }, + // [CHAIN.FANTOM]: { + // fetch: fetch, + // start: 1622544000, + // }, + // [CHAIN.OPTIMISM]: { + // fetch: fetch, + // start: 1632268800, + // }, + // [CHAIN.POLYGON]: { + // fetch: fetch, + // start: 1622544000, + // }, + // [CHAIN.LINEA]: { + // fetch: fetch, + // start: 1632268800, + // }, + // [CHAIN.SCROLL]: { + // fetch: fetch, + // start: 1632268800, + // }, [CHAIN.ERA]: { fetch: fetch, start: 1632268800, diff --git a/fees/bsc.ts b/fees/bsc.ts index 9671c64273..e3f1a2bf1f 100644 --- a/fees/bsc.ts +++ b/fees/bsc.ts @@ -3,7 +3,6 @@ import { BSC } from "../helpers/chains"; import { request, } from "graphql-request"; import type { ChainEndpoints, FetchOptions } from "../adapters/types" import { Chain } from '@defillama/sdk/build/general'; -import { ChainBlocks } from "../adapters/types"; const endpoints = { [BSC]: @@ -13,7 +12,7 @@ const endpoints = { const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number, _chainBlocks: ChainBlocks, { createBalances, getFromBlock, getToBlock, }: FetchOptions) => { + return async ({ createBalances, getFromBlock, getToBlock, toTimestamp }: FetchOptions) => { const dailyFees = createBalances() const graphQuery = `query txFees { @@ -32,9 +31,9 @@ const graphs = (graphUrls: ChainEndpoints) => { dailyFees.addGasToken(dailyFee * 1e18) return { - timestamp, dailyFees, + dailyFees, // totalFees: finalTotalFee.toString(), - dailyRevenue: timestamp < 1638234000 ? 0: dailyFees.clone(0.1), // https://github.com/bnb-chain/BEPs/blob/master/BEP95.md + dailyRevenue: toTimestamp < 1638234000 ? 0: dailyFees.clone(0.1), // https://github.com/bnb-chain/BEPs/blob/master/BEP95.md }; }; }; @@ -42,6 +41,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const adapter: Adapter = { + version: 2, adapter: { [BSC]: { fetch: graphs(endpoints)(BSC), diff --git a/fees/camelot-v2.ts b/fees/camelot-v2.ts index d4c24011da..9a31568e58 100644 --- a/fees/camelot-v2.ts +++ b/fees/camelot-v2.ts @@ -50,6 +50,7 @@ const fetch = (chain: Chain) => { } const adapter: Adapter = { + version: 1, adapter: { [CHAIN.ARBITRUM]: { fetch: fetch(CHAIN.ARBITRUM), diff --git a/fees/camelot-v3.ts b/fees/camelot-v3.ts index 1be6b91f93..7975ebb325 100644 --- a/fees/camelot-v3.ts +++ b/fees/camelot-v3.ts @@ -50,6 +50,7 @@ const fetch = (chain: Chain) => { } const adapter: Adapter = { + version: 1, adapter: { [CHAIN.ARBITRUM]: { fetch: fetch(CHAIN.ARBITRUM), diff --git a/fees/cardano.ts b/fees/cardano.ts index 247fb855cd..1332e4591e 100644 --- a/fees/cardano.ts +++ b/fees/cardano.ts @@ -54,6 +54,7 @@ const fetch = async (timestamp: number , _: ChainBlocks, { createBalances }: Fet }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.CARDANO]: { fetch: fetch, diff --git a/fees/caviar-tangible.ts b/fees/caviar-tangible.ts index ebf5c269dc..39bc7734a3 100644 --- a/fees/caviar-tangible.ts +++ b/fees/caviar-tangible.ts @@ -1,20 +1,20 @@ import ADDRESSES from '../helpers/coreAssets.json' -import { ChainBlocks, FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types" +import { FetchOptions, SimpleAdapter } from "../adapters/types" import { CHAIN } from "../helpers/chains" import { addTokensReceived } from '../helpers/token'; -const fetchFees = async (timestamp: number , _: ChainBlocks, options: FetchOptions): Promise => { +const fetchFees = async (options: FetchOptions) => { const dailyFees = await addTokensReceived({ options, tokens: [ADDRESSES.polygon.USDC], fromAddressFilter: '0xbbc843dcb1009bc7dc988bceb5bb1b50299d9a6d' , target: '0x6ced48efbb581a141667d7487222e42a3fa17cf7' }) return { dailyFees: dailyFees, dailyHoldersRevenue: dailyFees, dailyRevenue: dailyFees, - timestamp } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.POLYGON]: { fetch: fetchFees, diff --git a/fees/caviarnine-lsu-pool.ts b/fees/caviarnine-lsu-pool.ts index b452fad321..ff9214e08c 100644 --- a/fees/caviarnine-lsu-pool.ts +++ b/fees/caviarnine-lsu-pool.ts @@ -28,6 +28,7 @@ const fetchFees = async (timestamp: number): Promise => { } const adapters: SimpleAdapter = { + version: 1, adapter: { [CHAIN.RADIXDLT]: { fetch: fetchFees, diff --git a/fees/caviarnine-shape-liquidity.ts b/fees/caviarnine-shape-liquidity.ts index b1621482b8..da74790160 100644 --- a/fees/caviarnine-shape-liquidity.ts +++ b/fees/caviarnine-shape-liquidity.ts @@ -30,6 +30,7 @@ const fetchFees = async (timestamp: number): Promise => { } } const adapters: SimpleAdapter = { + version: 1, adapter: { [CHAIN.RADIXDLT]: { fetch: fetchFees, diff --git a/fees/chainlink-keepers.ts b/fees/chainlink-keepers.ts index d9b6969072..30c0fabae7 100644 --- a/fees/chainlink-keepers.ts +++ b/fees/chainlink-keepers.ts @@ -1,10 +1,8 @@ -import ADDRESSES from '../helpers/coreAssets.json' -import { SimpleAdapter, ChainBlocks, FetchResultFees, IJSON } from "../adapters/types"; +import { SimpleAdapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { getPrices } from "../utils/prices"; -import { getBlock } from "../helpers/getBlock"; import { getTxReceipts } from "../helpers/getTxReceipts"; -import { Chain, getProvider } from "@defillama/sdk/build/general"; +import { Chain } from "@defillama/sdk/build/general"; import * as sdk from "@defillama/sdk"; type TAddrress = { @@ -42,11 +40,8 @@ const gasTokenId: IGasTokenId = { } const fetchKeeper = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - const fromBlock = (await getBlock(fromTimestamp, chain, {})); - const toBlock = (await getBlock(toTimestamp, chain, {})); + return async ({ getFromBlock, getToBlock, toTimestamp }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) const logs: ITx[] = (await sdk.getEventLogs({ target: address_keeper[chain], fromBlock: fromBlock, @@ -67,7 +62,7 @@ const fetchKeeper = (chain: Chain) => { }); const linkAddress = "coingecko:chainlink"; const gasToken = gasTokenId[chain]; - const prices = (await getPrices([linkAddress, gasToken], timestamp)) + const prices = (await getPrices([linkAddress, gasToken], toTimestamp)) const linkPrice = prices[linkAddress].price const gagPrice = prices[gasToken].price const dailyFees = payAmount.reduce((a: number, b: number) => a + b, 0); @@ -78,12 +73,12 @@ const fetchKeeper = (chain: Chain) => { return { dailyFees: dailyFeesUsd.toString(), dailyRevenue: chain === CHAIN.OPTIMISM ? undefined : dailyRevenue.toString(), - timestamp } } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetchKeeper(CHAIN.ETHEREUM), diff --git a/fees/chainlink-requests.ts b/fees/chainlink-requests.ts index d83a232701..c814a1e4d2 100644 --- a/fees/chainlink-requests.ts +++ b/fees/chainlink-requests.ts @@ -1,4 +1,4 @@ -import { SimpleAdapter, ChainBlocks, FetchResultFees } from "../adapters/types"; +import { SimpleAdapter, ChainBlocks, FetchResultFees, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { getPrices } from "../utils/prices"; import { queryFlipside } from "../helpers/flipsidecrypto"; @@ -27,9 +27,7 @@ interface ILog { const chains: string[] = [...new Set([CHAIN.ETHEREUM, CHAIN.BSC, CHAIN.POLYGON, CHAIN.OPTIMISM, CHAIN.ARBITRUM, CHAIN.AVAX])]; -const build_gas_query = (timestamp: number): string => { - const now = new Date(timestamp * 1e3) - const dayAgo = new Date(now.getTime() - 1000 * 60 * 60 * 24) +const build_gas_query = (from: number, to: number): string => { return chains.map((chain: Chain) => ` SELECT SUM(TX_FEE), @@ -41,12 +39,10 @@ const build_gas_query = (timestamp: number): string => { txs.BLOCK_NUMBER > 1000000 and logs.BLOCK_NUMBER > 1000000 and logs.TOPICS[0] = '0x9e9bc7616d42c2835d05ae617e508454e63b30b934be8aa932ebc125e0e58a64' - AND logs.BLOCK_TIMESTAMP BETWEEN '${dayAgo.toISOString()}' AND '${now.toISOString()}'`).join(" union all ") + AND logs.BLOCK_TIMESTAMP BETWEEN '${from * 1000}' AND '${to * 1000}'`).join(" union all ") } -const build_link_query = (timestamp: number): string => { - const now = new Date(timestamp * 1e3) - const dayAgo = new Date(now.getTime() - 1000 * 60 * 60 * 24) +const build_link_query = (from: number, to: number): string => { return chains.map((chain: Chain) => ` SELECT data, @@ -57,13 +53,13 @@ const build_link_query = (timestamp: number): string => { ${chain === "avax" ? "avalanche" : chain}.core.fact_event_logs logs WHERE topics[0] = '0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65' - AND logs.BLOCK_TIMESTAMP BETWEEN '${dayAgo.toISOString()}' AND '${now.toISOString()}'`).join(" union all ") + AND logs.BLOCK_TIMESTAMP BETWEEN '${from * 1000}' AND '${to * 1000}'`).join(" union all ") } const fetchRequests = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks): Promise => { - const query_paid = build_link_query(timestamp) - const gas_query = build_gas_query(timestamp) + return async ({ fromTimestamp, toTimestamp }: FetchOptions) => { + const query_paid = build_link_query(fromTimestamp, toTimestamp) + const gas_query = build_gas_query(fromTimestamp, toTimestamp) const linkPaid_logs: ILog[] = (await queryFlipside(query_paid, 260)) .map(([data, topics, transactionHash, chain]: [string, string[], string, string]) => { @@ -90,7 +86,7 @@ const fetchRequests = (chain: Chain) => { const linkAddress = "coingecko:chainlink"; const gasToken = gasTokenId[chain]; - const prices = (await getPrices([linkAddress, gasToken], timestamp)) + const prices = (await getPrices([linkAddress, gasToken], fromTimestamp)) const linkPrice = prices[linkAddress].price const dailyFeesUsd = link_amount * linkPrice; const dailyGasUsd = gas_fees * prices[gasToken].price; @@ -98,7 +94,6 @@ const fetchRequests = (chain: Chain) => { return { dailyFees: dailyFeesUsd.toString(), dailyRevenue: (dailyFeesUsd - dailyGasUsd).toString(), - timestamp } } @@ -106,6 +101,7 @@ const fetchRequests = (chain: Chain) => { const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetchRequests(CHAIN.ETHEREUM), diff --git a/helpers/blockscoutFees.ts b/helpers/blockscoutFees.ts index e5f57da018..70028a19bc 100644 --- a/helpers/blockscoutFees.ts +++ b/helpers/blockscoutFees.ts @@ -3,6 +3,7 @@ import { httpGet } from '../utils/fetchURL'; export function blockscoutFeeAdapter(chain: string, url: string, CGToken?: string) { const adapter: Adapter = { + version: 1, adapter: { [chain]: { fetch: async (_timestamp: number, _: ChainBlocks, { createBalances, startOfDay, }: FetchOptions) => { diff --git a/helpers/etherscanFees.ts b/helpers/etherscanFees.ts index e82ad7272c..677aa1d498 100644 --- a/helpers/etherscanFees.ts +++ b/helpers/etherscanFees.ts @@ -1,4 +1,4 @@ -import { Adapter, ChainBlocks, FetchOptions, ProtocolType } from "../adapters/types"; +import { Adapter, FetchOptions, ProtocolType } from "../adapters/types"; import { httpPost } from '../utils/fetchURL'; @@ -17,9 +17,10 @@ export async function getEtherscanFees({ startOfDay, }: FetchOptions, url: strin export function etherscanFeeAdapter(chain: string, url: string, cgToken?: string) { const adapter: Adapter = { + version: 2, adapter: { [chain]: { - fetch: async (_timestamp: number, _: ChainBlocks, options: FetchOptions) => { + fetch: async (options: FetchOptions) => { const amount = await getEtherscanFees(options, url) const dailyFees = options.createBalances() if (cgToken) @@ -33,7 +34,7 @@ export function etherscanFeeAdapter(chain: string, url: string, cgToken?: string } return { - timestamp: options.startOfDay, dailyFees, + dailyFees, }; }, start: 1690761600 From d6dbfb66de8307fa92b4f8880e451976a159e9c8 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 6 Jun 2024 13:36:53 +0100 Subject: [PATCH 0721/1590] v2s --- fees/chainlink-vrf-v2.ts | 13 +++++-------- fees/chimpexchange.ts | 10 +++------- fees/clever.ts | 15 ++++----------- fees/clipper.ts | 11 ++++------- fees/compound.ts | 1 + fees/concentrator.ts | 1 + fees/convex.ts | 1 + fees/covo-finance.ts | 1 + fees/covo-v2.ts | 1 + fees/cow-protocol.ts | 7 ++++--- fees/cryptex-v2.ts | 23 ++++------------------- fees/curve.ts | 18 ++++++++---------- fees/defi-saver.ts | 7 ++++--- 13 files changed, 41 insertions(+), 68 deletions(-) diff --git a/fees/chainlink-vrf-v2.ts b/fees/chainlink-vrf-v2.ts index d8bcd2db0b..0421138957 100644 --- a/fees/chainlink-vrf-v2.ts +++ b/fees/chainlink-vrf-v2.ts @@ -1,4 +1,4 @@ -import { SimpleAdapter, ChainBlocks, FetchResultFees, IJSON } from "../adapters/types"; +import { SimpleAdapter, ChainBlocks, FetchResultFees, IJSON, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { getPrices } from "../utils/prices"; import { getBlock } from "../helpers/getBlock"; @@ -65,11 +65,8 @@ const gasTokenId: IGasTokenId = { const fetch = (chain: Chain, version: number) => { - return async (timestamp: number, _: ChainBlocks): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - const fromBlock = (await getBlock(fromTimestamp, chain, {})); - const toBlock = (await getBlock(toTimestamp, chain, {})); + return async ({ getFromBlock, getToBlock, toTimestamp }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) const logs_1: ITx[] = (await sdk.getEventLogs({ target: version === 1 ? address_v1[chain] : address_v2[chain], fromBlock: fromBlock, @@ -91,7 +88,7 @@ const fetch = (chain: Chain, version: number) => { }) const linkAddress = "coingecko:chainlink"; const gasToken = gasTokenId[chain]; - const prices = (await getPrices([linkAddress, gasToken], timestamp)); + const prices = (await getPrices([linkAddress, gasToken], toTimestamp)); const dailyGas = txReceipt.reduce((a: number, b: number) => a + b, 0); const linkPrice = prices[linkAddress].price const gagPrice = prices[gasToken].price @@ -103,7 +100,6 @@ const fetch = (chain: Chain, version: number) => { return { dailyFees: dailyFees.toString(), dailyRevenue: chain === CHAIN.OPTIMISM ? undefined : dailyRevenue.toString(), - timestamp } } @@ -111,6 +107,7 @@ const fetch = (chain: Chain, version: number) => { const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch(CHAIN.ETHEREUM, 2), diff --git a/fees/chimpexchange.ts b/fees/chimpexchange.ts index f2ab36e4fe..1f3cd7f960 100644 --- a/fees/chimpexchange.ts +++ b/fees/chimpexchange.ts @@ -1,10 +1,9 @@ import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainEndpoints } from "../adapters/types"; +import type { ChainEndpoints, FetchOptions } from "../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; import BigNumber from "bignumber.js"; -import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints = { [CHAIN.LINEA]: @@ -32,10 +31,7 @@ interface IPoolSnapshot { const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async (timestamp: number) => { - const startTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const fromTimestamp = startTimestamp - 60 * 60 * 24; - const toTimestamp = startTimestamp; + return async ({ fromTimestamp, toTimestamp }: FetchOptions) => { const graphQuery = gql`query fees { today:poolSnapshots(where: {timestamp:${toTimestamp}}, orderBy:swapFees, orderDirection: desc) { id @@ -85,7 +81,6 @@ const graphs = (graphUrls: ChainEndpoints) => { .reduce((a: BigNumber, b: BigNumber) => a.plus(b), new BigNumber("0")); return { - timestamp, totalUserFees: currentTotalSwapFees.toString(), dailyUserFees: dailyFee.toString(), totalFees: currentTotalSwapFees.toString(), @@ -115,6 +110,7 @@ const methodology = { }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.LINEA]: { fetch: graphs(endpoints)(CHAIN.LINEA), diff --git a/fees/clever.ts b/fees/clever.ts index 63e876f2a9..68e161fad4 100644 --- a/fees/clever.ts +++ b/fees/clever.ts @@ -1,11 +1,7 @@ import { Adapter } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; import { request } from "graphql-request"; -import type { - ChainBlocks, - ChainEndpoints, - FetchOptions, -} from "../adapters/types"; +import type { ChainEndpoints, FetchOptions } from "../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; const endpoints = { @@ -15,11 +11,7 @@ const endpoints = { const graph = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { - return async ( - _timestamp: number, - _: ChainBlocks, - { createBalances, startOfDay }: FetchOptions - ) => { + return async ({ createBalances, startOfDay }: FetchOptions) => { const dailyRevenue = createBalances(); const dateId = Math.floor(startOfDay); @@ -38,12 +30,13 @@ const graph = (graphUrls: ChainEndpoints) => { const revenue = (usd / 1e18).toFixed(0); const dailyFees = ((usd * 2) / 1e18).toFixed(0); - return { timestamp: startOfDay, dailyFees, dailyRevenue: revenue }; + return { dailyFees, dailyRevenue: revenue }; }; }; }; const adapter: Adapter = { + version: 2, adapter: { [ETHEREUM]: { fetch: graph(endpoints)(ETHEREUM), diff --git a/fees/clipper.ts b/fees/clipper.ts index 21b6cc7380..8c7c2f1e72 100644 --- a/fees/clipper.ts +++ b/fees/clipper.ts @@ -1,8 +1,7 @@ import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../helpers/chains"; -import { type } from "os"; import request, { gql } from "graphql-request"; -import { Fetch, FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; import { getBlock } from "../helpers/getBlock"; type TEndpoint = { @@ -49,11 +48,9 @@ const feesQuery = gql` ` const fetchFees = (chain: Chain) => { - return async (timestamp: number): Promise => { + return async ({ fromTimestamp, toTimestamp, getToBlock }: FetchOptions) => { const endpoint = endpoints[chain]; - const toTimestamp = timestamp; - const fromTimestamp = timestamp - 60 * 60 * 24; - const toBlock = await getBlock(timestamp, chain, {}); + const toBlock = await getToBlock(); const response: IResponse = (await request(endpoint, feesQuery, { fromTimestamp, @@ -81,12 +78,12 @@ const fetchFees = (chain: Chain) => { totalFees: `${totalFees}`, totalRevenue: `${totalRevenue}`, totalProtocolRevenue: `${totalRevenue}`, - timestamp } } } const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetchFees(CHAIN.ETHEREUM), diff --git a/fees/compound.ts b/fees/compound.ts index abc78ba144..c8f23e9fed 100644 --- a/fees/compound.ts +++ b/fees/compound.ts @@ -57,6 +57,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const adapter: Adapter = { + version: 1, adapter: { [ETHEREUM]: { fetch: graphs(endpoints)(ETHEREUM), diff --git a/fees/concentrator.ts b/fees/concentrator.ts index e492761975..ad63b6a8f0 100644 --- a/fees/concentrator.ts +++ b/fees/concentrator.ts @@ -50,6 +50,7 @@ const graph = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 1, adapter: { [ETHEREUM]: { fetch: graph(endpoints)(ETHEREUM), diff --git a/fees/convex.ts b/fees/convex.ts index 9859648b36..11eacffa8a 100644 --- a/fees/convex.ts +++ b/fees/convex.ts @@ -85,6 +85,7 @@ const graph = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 1, adapter: { [ETHEREUM]: { fetch: graph(endpoints)(ETHEREUM), diff --git a/fees/covo-finance.ts b/fees/covo-finance.ts index 7bf2a76a79..bb1f926757 100644 --- a/fees/covo-finance.ts +++ b/fees/covo-finance.ts @@ -64,6 +64,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const adapter: Adapter = { + version: 1, adapter: { [POLYGON]: { fetch: graphs(endpoints)(POLYGON), diff --git a/fees/covo-v2.ts b/fees/covo-v2.ts index 15a545d393..e22161c733 100644 --- a/fees/covo-v2.ts +++ b/fees/covo-v2.ts @@ -82,6 +82,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const adapter: Adapter = { + version: 1, adapter: { [POLYGON]: { fetch: graphs(endpoints)(POLYGON), diff --git a/fees/cow-protocol.ts b/fees/cow-protocol.ts index aa6856b068..b2aefd1254 100644 --- a/fees/cow-protocol.ts +++ b/fees/cow-protocol.ts @@ -1,4 +1,4 @@ -import { Adapter, FetchOptions, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { Chain, } from "@defillama/sdk/build/general"; @@ -12,7 +12,7 @@ const address: TAddress = { const fetch = (chain: Chain) => { - return async (timestamp: number, _: any, options: FetchOptions): Promise => { + return async (options: FetchOptions) => { const logs = await options.getLogs({ target: address[chain], eventAbi: "event Trade (address indexed owner, address sellToken, address buyToken, uint256 sellAmount, uint256 buyAmount, uint256 feeAmount, bytes orderUid)", @@ -22,7 +22,7 @@ const fetch = (chain: Chain) => { dailyFees.add(tx.sellToken, tx.feeAmount) }) const dailyRevenue = dailyFees.clone() - return { dailyUserFees: dailyFees, dailyFees, dailyRevenue, timestamp } + return { dailyUserFees: dailyFees, dailyFees, dailyRevenue } } } @@ -33,6 +33,7 @@ const methodology = { } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch(CHAIN.ETHEREUM) as any, diff --git a/fees/cryptex-v2.ts b/fees/cryptex-v2.ts index 12b9db9992..b831101ef8 100644 --- a/fees/cryptex-v2.ts +++ b/fees/cryptex-v2.ts @@ -1,10 +1,7 @@ -import { Adapter, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import * as sdk from "@defillama/sdk"; -import { getBlock } from "../helpers/getBlock"; import { ethers } from "ethers"; -import { getPrices } from "../utils/prices"; -import { type } from "os"; interface ILog { data: string; @@ -36,14 +33,6 @@ const contract_interface = new ethers.Interface([ take_opened_event ]); -type IMapCoin = { - [s: string]: string; -} -const coinsId: IMapCoin = { - '0x4243b34374cfb0a12f184b92f52035d03d4f7056': 'coingecko:total-crypto-market-cap-token', // TCAP - '0x1cd33f4e6edeee8263aa07924c2760cf2ec8aad0': 'coingecko:total-crypto-market-cap-token', // TCAP -} - const abis: any = { "makerFee": "uint256:makerFee", "takerFee": "uint256:takerFee", @@ -53,12 +42,8 @@ type IPrice = { [s: string]: number; } -const fetch = async (timestamp: number): Promise => { - - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - const fromBlock = (await getBlock(fromTimestamp, CHAIN.ARBITRUM, {})); - const toBlock = (await getBlock(toTimestamp, CHAIN.ARBITRUM, {})); +const fetch = async ({ getToBlock, getFromBlock }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) const make_closed_topic0_logs: ILog[] = (await Promise.all(products.map((address: string) => sdk.getEventLogs({ target: address, toBlock: toBlock, @@ -159,11 +144,11 @@ const fetch = async (timestamp: number): Promise => { return { dailyFees: `${dailyFees}`, dailyRevenue: `${dailyRevenue}`, - timestamp } } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: fetch, diff --git a/fees/curve.ts b/fees/curve.ts index b41c1380b1..94b36d8adc 100644 --- a/fees/curve.ts +++ b/fees/curve.ts @@ -1,7 +1,7 @@ -import { Adapter, FetchResult } from "../adapters/types"; +import { Adapter } from "../adapters/types"; import { ARBITRUM, ETHEREUM, OPTIMISM, POLYGON, AVAX, FANTOM, XDAI } from "../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainEndpoints } from "../adapters/types" +import type { ChainEndpoints, FetchOptions, FetchResultV2 } from "../adapters/types" import { Chain } from '@defillama/sdk/build/general'; import fetchURL from "../utils/fetchURL"; @@ -46,10 +46,7 @@ const graph = (graphUrls: ChainEndpoints) => { }`; return (chain: Chain) => { - return async (timestamp: number) => { - - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp + return async ({ fromTimestamp, toTimestamp }: FetchOptions) => { const graphRes = await request(graphUrls[chain], graphQuery, { timestampFrom: fromTimestamp, timestampTo: toTimestamp @@ -66,7 +63,7 @@ const graph = (graphUrls: ChainEndpoints) => { return parseFloat(vol.lpFeesUSD); }); - const res: FetchResult = { timestamp, dailyProtocolRevenue: "0", } + const res: FetchResultV2 = { dailyProtocolRevenue: "0", } if (feesPerPool.length > 0) { const dailyFee = feesPerPool.reduce((acc: number, curr: number) => acc + curr, 0.); res["dailyUserFees"] = dailyFee.toString() @@ -86,9 +83,9 @@ const graph = (graphUrls: ChainEndpoints) => { } }; -const fetch = (chain: string) => async (ts:number) => { - if(ts < Date.now()/1e3-36*3600){ - return graph(endpoints)(chain)(ts) +const fetch = (chain: string) => async (options: FetchOptions) => { + if(options.toTimestamp < Date.now()/1e3-36*3600){ + return graph(endpoints)(chain)(options) } const response = (await fetchURL(`https://prices.curve.fi/v1/chains/${chain}`)); const fees = (response.data as any[]).reduce((all, pool)=>{ @@ -135,6 +132,7 @@ const starts = { } const adapter: Adapter = { + version: 2, adapter: Object.keys(starts).reduce((all, chain)=>{ all[chain] = { fetch: fetch(chain), diff --git a/fees/defi-saver.ts b/fees/defi-saver.ts index 769cdd96b2..054dfe9753 100644 --- a/fees/defi-saver.ts +++ b/fees/defi-saver.ts @@ -1,7 +1,7 @@ -import { FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { queryIndexer } from "../helpers/indexer"; -const fetch = async (timestamp: number, _: any, options: FetchOptions): Promise => { +const fetch = async (options: FetchOptions) => { const dailyFees = options.createBalances(); const logsTranferERC20: any[] = await queryIndexer(` SELECT @@ -16,10 +16,11 @@ const fetch = async (timestamp: number, _: any, options: FetchOptions): Promise< AND block_time BETWEEN llama_replace_date_range; `, options); logsTranferERC20.map((p: any) => dailyFees.add(p.contract_address, p.value)) - return { dailyFees, dailyRevenue: dailyFees, timestamp } + return { dailyFees, dailyRevenue: dailyFees } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch as any, From bf3fb9e75a41f41843bd39e859252e3482fc23f1 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 6 Jun 2024 14:55:27 +0200 Subject: [PATCH 0722/1590] rug dogechain adapters --- adapters/utils/runAdapter.ts | 33 ++++++++++++++++++++++++++++++--- helpers/getBlock.ts | 1 + package-lock.json | 6 +++--- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/adapters/utils/runAdapter.ts b/adapters/utils/runAdapter.ts index 66074a4547..4ab8ba45e5 100644 --- a/adapters/utils/runAdapter.ts +++ b/adapters/utils/runAdapter.ts @@ -1,13 +1,18 @@ -import { Balances, ChainApi, getEventLogs, getProvider } from '@defillama/sdk' +import { Balances, ChainApi, getEventLogs, getProvider, elastic } from '@defillama/sdk' import { BaseAdapter, ChainBlocks, DISABLED_ADAPTER_KEY, Fetch, FetchGetLogsOptions, FetchOptions, FetchResultGeneric, FetchV2, } from '../types' import { getBlock } from "../../helpers/getBlock"; import { getUniqStartOfTodayTimestamp } from '../../helpers/getUniSubgraphFees'; const ONE_DAY_IN_SECONDS = 60 * 60 * 24 +function getUnixTimeNow() { + return Math.floor(Date.now() / 1000) +} + export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurrentDayTimestamp: number, chainBlocks: ChainBlocks, id?: string, version?: string, { adapterVersion = 1 }: any = {}) { + const closeToCurrentTime = Math.trunc(Date.now() / 1000) - cleanCurrentDayTimestamp < 24 * 60 * 60 // 12 hours const chains = Object.keys(volumeAdapter).filter(c => c !== DISABLED_ADAPTER_KEY) const validStart = {} as { @@ -18,9 +23,19 @@ export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurren } await Promise.all(chains.map(setChainValidStart)) - return Promise.all(chains.filter(chain => validStart[chain]?.canRun).map(getChainResult)) + const response = await Promise.all(chains.filter(chain => validStart[chain]?.canRun).map(getChainResult)) + return response async function getChainResult(chain: string) { + const startTime = getUnixTimeNow() + const metadata = { + application: "dimensions", + type: 'protocol-chain', + name: id, + chain, + version, + } + const fetchFunction = volumeAdapter[chain].customBackfill ?? volumeAdapter[chain].fetch try { const options = await getOptionsObject(cleanCurrentDayTimestamp, chain, chainBlocks) @@ -47,13 +62,25 @@ export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurren result[key] = +Number(result[key]).toFixed(0) if (isNaN(result[key] as number)) throw new Error(`[${chain}]Value: ${value} ${key} is NaN`) } + + const endTime = getUnixTimeNow() + await elastic.addRuntimeLog({ runtime: endTime - startTime, success: true, metadata, }) + return { chain, startTimestamp: validStart[chain].startTimestamp, ...result } } catch (error) { - try { (error as any).chain = chain } catch { } + + const endTime = getUnixTimeNow() + + try { + await elastic.addErrorLog({ error, metadata, errorString: error?.toString(), } as any) + await elastic.addRuntimeLog({ runtime: endTime - startTime, success: false, metadata, }); + + (error as any).chain = chain + } catch { } throw error } } diff --git a/helpers/getBlock.ts b/helpers/getBlock.ts index 30bcf91935..351048e52c 100644 --- a/helpers/getBlock.ts +++ b/helpers/getBlock.ts @@ -53,6 +53,7 @@ const blacklistedChains: string[] = [ ]; async function getBlock(timestamp: number, chain: Chain, chainBlocks = {} as ChainBlocks) { + if (chain === CHAIN.DOGECHAIN) throw new Error("DOGECHAIN not supported") if (blacklistedChains.includes(chain)) { return null } diff --git a/package-lock.json b/package-lock.json index e035e363f4..728f9fd72d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.60", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.60.tgz", - "integrity": "sha512-B7upEgd1Fad1duY0cRuPpcaLpTasIHjgqmQ73cJr189XmgEbsTUxQqPfD5mbsjdDgJMDSE5YjEPzjDIkLXBqfg==", + "version": "5.0.61", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.61.tgz", + "integrity": "sha512-t7nOMdpQ29y1eZmQothokRqsrfmGSTcu/ZHauvl/CvDEcUuWK+uNpdSAYG0cf93Z3XUXKH4eyRI7XLZcYR7/6w==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From 4e0cb7d37cb9e7ca9fdc513b0b42d93567f2e940 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 6 Jun 2024 14:28:19 +0100 Subject: [PATCH 0723/1590] dechainfees --- fees/beamswap.ts | 2 +- fees/defi-swap.ts | 1 + fees/jibswap/index.ts | 2 +- fees/mm-stableswap-polygon.ts | 1 + fees/mooniswap.ts | 1 + fees/nomiswap.ts | 1 + fees/radioshack.ts | 1 + fees/raydium.ts | 1 + fees/shibaswap.ts | 1 + fees/solarbeam.ts | 1 + fees/spiritswap.ts | 1 + fees/spookyswap.ts | 1 + fees/stellaswap.ts | 1 + fees/traderjoe.ts | 68 ++++++++++++++++++++--------------- fees/wombat-exchange.ts | 1 + helpers/getUniSubgraphFees.ts | 4 +-- 16 files changed, 56 insertions(+), 32 deletions(-) diff --git a/fees/beamswap.ts b/fees/beamswap.ts index 26ecbe85ff..88009d3e7b 100644 --- a/fees/beamswap.ts +++ b/fees/beamswap.ts @@ -33,7 +33,7 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { - version: 1, + version: 2, adapter: feeAdapter }; diff --git a/fees/defi-swap.ts b/fees/defi-swap.ts index ff06efbcef..1db13a7cbc 100644 --- a/fees/defi-swap.ts +++ b/fees/defi-swap.ts @@ -10,6 +10,7 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: feeAdapter }; diff --git a/fees/jibswap/index.ts b/fees/jibswap/index.ts index 1419900089..3290fa8adb 100644 --- a/fees/jibswap/index.ts +++ b/fees/jibswap/index.ts @@ -12,7 +12,7 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { - version: 1, + version: 2, adapter: feeAdapter }; diff --git a/fees/mm-stableswap-polygon.ts b/fees/mm-stableswap-polygon.ts index 8fac0669c3..9602fb1de6 100644 --- a/fees/mm-stableswap-polygon.ts +++ b/fees/mm-stableswap-polygon.ts @@ -12,6 +12,7 @@ const feeAdapter: BaseAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: feeAdapter }; diff --git a/fees/mooniswap.ts b/fees/mooniswap.ts index b1342cb084..14add2e3b6 100644 --- a/fees/mooniswap.ts +++ b/fees/mooniswap.ts @@ -10,6 +10,7 @@ const baseAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: baseAdapter }; diff --git a/fees/nomiswap.ts b/fees/nomiswap.ts index a9cc77bb7f..80f9bead80 100644 --- a/fees/nomiswap.ts +++ b/fees/nomiswap.ts @@ -12,6 +12,7 @@ const feeAdapter: BaseAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: feeAdapter }; diff --git a/fees/radioshack.ts b/fees/radioshack.ts index 2682730d36..226d65f917 100644 --- a/fees/radioshack.ts +++ b/fees/radioshack.ts @@ -12,6 +12,7 @@ const feeAdapter: BaseAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: feeAdapter }; diff --git a/fees/raydium.ts b/fees/raydium.ts index f5528a4d48..d79c1a608f 100644 --- a/fees/raydium.ts +++ b/fees/raydium.ts @@ -26,6 +26,7 @@ const feeAdapter: BaseAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: feeAdapter }; diff --git a/fees/shibaswap.ts b/fees/shibaswap.ts index 7b88b3a1c9..8db120bc9f 100644 --- a/fees/shibaswap.ts +++ b/fees/shibaswap.ts @@ -10,6 +10,7 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: feeAdapter }; diff --git a/fees/solarbeam.ts b/fees/solarbeam.ts index 020bd1088f..e833a4307d 100644 --- a/fees/solarbeam.ts +++ b/fees/solarbeam.ts @@ -13,6 +13,7 @@ const feeAdapter: BaseAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: { [CHAIN.MOONRIVER]: { fetch: feeAdapter.moonriver.fetch, diff --git a/fees/spiritswap.ts b/fees/spiritswap.ts index 0b52c82854..e4654e95fb 100644 --- a/fees/spiritswap.ts +++ b/fees/spiritswap.ts @@ -12,6 +12,7 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: feeAdapter }; diff --git a/fees/spookyswap.ts b/fees/spookyswap.ts index 2799a3288d..fe8894449e 100644 --- a/fees/spookyswap.ts +++ b/fees/spookyswap.ts @@ -16,6 +16,7 @@ const feeAdapter: BaseAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: feeAdapter }; diff --git a/fees/stellaswap.ts b/fees/stellaswap.ts index 143bee12b3..b84f5ae5a8 100644 --- a/fees/stellaswap.ts +++ b/fees/stellaswap.ts @@ -12,6 +12,7 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: feeAdapter }; diff --git a/fees/traderjoe.ts b/fees/traderjoe.ts index e295a63fb6..bce2c17ac7 100644 --- a/fees/traderjoe.ts +++ b/fees/traderjoe.ts @@ -1,11 +1,13 @@ -import { getDexChainFees, getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphFees"; +import { + getDexChainFees, + getUniqStartOfTodayTimestamp, +} from "../helpers/getUniSubgraphFees"; import volumeAdapter from "../dexs/traderjoe"; import { Adapter, FetchResultFees } from "../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../helpers/chains"; import fetchURL from "../utils/fetchURL"; - const TOTAL_FEES = 0.003; const LP_FEE = 0.0025; const PROTOCOL_FEES = 0.0005; @@ -19,13 +21,17 @@ interface IData { type TEndpoint = { [s: string | Chain]: string; -} +}; const endpointsV2: TEndpoint = { - [CHAIN.AVAX]: "https://barn.traderjoexyz.com/v1/dex/analytics/avalanche?startTime=1669420800&aggregateBy=daily", - [CHAIN.ARBITRUM]: "https://barn.traderjoexyz.com/v1/dex/analytics/arbitrum?startTime=1672012800&aggregateBy=daily", - [CHAIN.BSC]: "https://barn.traderjoexyz.com/v1/dex/analytics/binance?startTime=1677801600&aggregateBy=daily", - [CHAIN.ETHEREUM]: "https://barn.traderjoexyz.com/v1/dex/analytics/ethereum?startTime=1695513600&aggregateBy=daily" -} + [CHAIN.AVAX]: + "https://barn.traderjoexyz.com/v1/dex/analytics/avalanche?startTime=1669420800&aggregateBy=daily", + [CHAIN.ARBITRUM]: + "https://barn.traderjoexyz.com/v1/dex/analytics/arbitrum?startTime=1672012800&aggregateBy=daily", + [CHAIN.BSC]: + "https://barn.traderjoexyz.com/v1/dex/analytics/binance?startTime=1677801600&aggregateBy=daily", + [CHAIN.ETHEREUM]: + "https://barn.traderjoexyz.com/v1/dex/analytics/ethereum?startTime=1695513600&aggregateBy=daily", +}; const adapterV1 = getDexChainFees({ totalFees: TOTAL_FEES, @@ -33,52 +39,58 @@ const adapterV1 = getDexChainFees({ revenue: PROTOCOL_FEES, supplySideRevenue: LP_FEE, holdersRevenue: HOLDER_REV, - volumeAdapter: {adapter: volumeAdapter.breakdown.v1} + volumeAdapter: { adapter: volumeAdapter.breakdown.v1 }, }); const graph = (chain: Chain) => { return async (timestamp: number): Promise => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const historical: IData[] = (await fetchURL(endpointsV2[chain])); - const dailyFees = historical - .find(dayItem => dayItem.timestamp === dayTimestamp)?.feesUsd || 0 - const dailyRevenue = historical - .find(dayItem => dayItem.timestamp === dayTimestamp)?.protocolFeesUsd || 0 + const dayTimestamp = getUniqStartOfTodayTimestamp( + new Date(timestamp * 1000), + ); + const historical: IData[] = await fetchURL(endpointsV2[chain]); + const dailyFees = + historical.find((dayItem) => dayItem.timestamp === dayTimestamp) + ?.feesUsd || 0; + const dailyRevenue = + historical.find((dayItem) => dayItem.timestamp === dayTimestamp) + ?.protocolFeesUsd || 0; return { dailyUserFees: `${dailyFees}`, dailyFees: `${dailyFees}`, dailyRevenue: `${dailyRevenue}`, dailyHoldersRevenue: `${dailyRevenue}`, - dailySupplySideRevenue: dailyFees ? `${(dailyFees || 0) - (dailyRevenue || 0)}` : undefined, + dailySupplySideRevenue: dailyFees + ? `${(dailyFees || 0) - (dailyRevenue || 0)}` + : undefined, dailyProtocolRevenue: `${dailyRevenue}`, - timestamp - } - } -} + timestamp, + }; + }; +}; const adapter: Adapter = { + version: 2, ///// THIS IS MIXED VERSION AND NEEDS ATTENTION breakdown: { v1: adapterV1, v2: { [CHAIN.AVAX]: { fetch: graph(CHAIN.AVAX), - start: 1669420800 + start: 1669420800, }, [CHAIN.ARBITRUM]: { fetch: graph(CHAIN.ARBITRUM), - start: 1672012800 + start: 1672012800, }, [CHAIN.BSC]: { fetch: graph(CHAIN.BSC), - start: 1678147200 + start: 1678147200, }, [CHAIN.ETHEREUM]: { fetch: graph(CHAIN.ETHEREUM), - start: 1695513600 - } - } - } + start: 1695513600, + }, + }, + }, }; - export default adapter; diff --git a/fees/wombat-exchange.ts b/fees/wombat-exchange.ts index 891558873d..78665cda3a 100644 --- a/fees/wombat-exchange.ts +++ b/fees/wombat-exchange.ts @@ -10,6 +10,7 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { + version: 2, adapter: feeAdapter }; diff --git a/helpers/getUniSubgraphFees.ts b/helpers/getUniSubgraphFees.ts index 4e6a8af773..dd286bccc2 100644 --- a/helpers/getUniSubgraphFees.ts +++ b/helpers/getUniSubgraphFees.ts @@ -138,11 +138,11 @@ const getDexChainFees = ({ volumeAdapter, totalFees = 0, protocolFees = 0, ...pa const adapterObj = volumeAdapter.adapter Object.keys(adapterObj).map(chain => { - const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { + const fetchFees = async (options: FetchOptions) => { const fetchedResult: FetchResultV2 = await (adapterObj[chain].fetch as FetchV2)(options) const chainDailyVolume = fetchedResult.dailyVolume as number; const chainTotalVolume = fetchedResult.totalVolume as number; - const response: FetchResultGeneric = { timestamp } + const response: FetchResultV2 = { } if (chainDailyVolume !== undefined) { if (totalFees) response["dailyFees"] = new BigNumber(chainDailyVolume).multipliedBy(totalFees).toString() From c77d5bf70825ab6610f327bdf66007d4b121d60e Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 6 Jun 2024 14:37:58 +0100 Subject: [PATCH 0724/1590] more v2s --- fees/doge.ts | 1 + fees/dydx.ts | 1 + fees/e3.ts | 4 ++-- fees/edebase.ts | 1 + fees/ekubo.ts | 4 ++-- fees/el-dorado-exchange.ts | 2 +- fees/emdx.ts | 1 + fees/firebird-finance.ts | 1 + fees/forge.ts | 1 + fees/foundation.ts | 5 +++-- fees/frax-ether.ts | 6 +++--- fees/frax-fpi.ts | 1 + fees/frax-swap.ts | 2 +- fees/fulcrom-finance.ts | 1 + fees/fvm-exchange.ts | 6 +++--- 15 files changed, 23 insertions(+), 14 deletions(-) diff --git a/fees/doge.ts b/fees/doge.ts index 3fba6ebf71..158375d8fe 100644 --- a/fees/doge.ts +++ b/fees/doge.ts @@ -5,6 +5,7 @@ import { chainAdapter } from "../helpers/getChainFees"; const feeAdapter = chainAdapter(DOGE, "doge", 1386478800); const adapter: Adapter = { + version: 1, adapter: feeAdapter, protocolType: ProtocolType.CHAIN } diff --git a/fees/dydx.ts b/fees/dydx.ts index eb659f050a..9e1b3bec1d 100644 --- a/fees/dydx.ts +++ b/fees/dydx.ts @@ -22,6 +22,7 @@ const fetch = async (timestamp: number): Promise => { }; const adapter: SimpleAdapter = { + version: 1, adapter: { [CHAIN.ETHEREUM]: { fetch, diff --git a/fees/e3.ts b/fees/e3.ts index 9e0df3bfe9..b8165f0f90 100644 --- a/fees/e3.ts +++ b/fees/e3.ts @@ -15,7 +15,7 @@ const ABIs: TABI = { } const graph = (_chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { createBalances, api, getLogs, }: FetchOptions) => { + return async ({ createBalances, api, getLogs, }: FetchOptions) => { const lpTokens = await api.fetchList({ lengthAbi: ABIs.getNumberOfLBPairs, itemAbi: ABIs.getLBPairAtIndex, target: FACTORY_ADDRESS }) const dailyFees = createBalances(); @@ -65,7 +65,6 @@ const graph = (_chain: Chain) => { dailyProtocolRevenue: dailyRevenue, dailyHoldersRevenue: dailyRevenue, dailySupplySideRevenue, - timestamp, }; } } @@ -80,6 +79,7 @@ const methodology = { } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.FANTOM]: { fetch: graph(CHAIN.FANTOM), diff --git a/fees/edebase.ts b/fees/edebase.ts index abc142dadb..d816af943f 100644 --- a/fees/edebase.ts +++ b/fees/edebase.ts @@ -47,6 +47,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.BASE]: { fetch: graphs(endpoints)(CHAIN.BASE), diff --git a/fees/ekubo.ts b/fees/ekubo.ts index 1ef36fcf86..188a05a296 100644 --- a/fees/ekubo.ts +++ b/fees/ekubo.ts @@ -13,17 +13,17 @@ function getDimension(responseRaw: any[], key: string, balances: any) { return balances } -const fetch = async (timestamp: number, _: ChainBlocks, { createBalances }: FetchOptions) => { +const fetch = async ({ createBalances }: FetchOptions) => { const dailyFees = getDimension((await fetchURL("https://mainnet-api.ekubo.org/overview")).volumeByToken_24h, "fees", createBalances()) const dailyRevenue = getDimension((await fetchURL("https://mainnet-api.ekubo.org/overview")).revenueByToken_24h, "revenue", createBalances()) return { dailyFees, dailyRevenue, - timestamp, } } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.STARKNET]: { fetch: fetch, diff --git a/fees/el-dorado-exchange.ts b/fees/el-dorado-exchange.ts index 1ccfe44db9..d788a42fd9 100644 --- a/fees/el-dorado-exchange.ts +++ b/fees/el-dorado-exchange.ts @@ -49,7 +49,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { - + version: 1, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, // [BSC]: { diff --git a/fees/emdx.ts b/fees/emdx.ts index 18aaddf461..42d7517d84 100644 --- a/fees/emdx.ts +++ b/fees/emdx.ts @@ -36,6 +36,7 @@ const fetch = async (timestamp: number): Promise => { } const adapter: Adapter = { + version: 1, adapter: { [CHAIN.AVAX]: { fetch: fetch, diff --git a/fees/firebird-finance.ts b/fees/firebird-finance.ts index b8669404f5..4c1bddc956 100644 --- a/fees/firebird-finance.ts +++ b/fees/firebird-finance.ts @@ -34,6 +34,7 @@ const methodology = { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.AVAX]: { fetch: fetch(43114), diff --git a/fees/forge.ts b/fees/forge.ts index 1bf8ae82f9..0961fe2fc8 100644 --- a/fees/forge.ts +++ b/fees/forge.ts @@ -46,6 +46,7 @@ const fetch = (chain: Chain) => { } const adapter: Adapter = { + version: 1, adapter: { [CHAIN.EVMOS]: { fetch: fetch(CHAIN.EVMOS), diff --git a/fees/foundation.ts b/fees/foundation.ts index 38d99eb7c2..b405cbd1a5 100644 --- a/fees/foundation.ts +++ b/fees/foundation.ts @@ -11,7 +11,7 @@ const topic_0_mint_from_fixed_price_drop = '0x05ebbb6b0ce7d564230ba625dd7a0e5108 const topic_0_withdraw_creator_revenue_from_dutch_auction = '0x5e16e96b4ba4fe46f3be73d54d1fa0da481494ab74c2d6e33328366d6437693c' // todo: track new events -const fetch = async (timestamp: number , _: ChainBlocks, { createBalances, getLogs, }: FetchOptions): Promise => { +const fetch = async ({ createBalances, getLogs, }: FetchOptions) => { const dailyFees = createBalances(); (await getLogs({ target: market_address, @@ -62,12 +62,13 @@ const fetch = async (timestamp: number , _: ChainBlocks, { createBalances, getLo }); return { - dailyFees, dailyRevenue: dailyFees, timestamp + dailyFees, dailyRevenue: dailyFees } } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch, diff --git a/fees/frax-ether.ts b/fees/frax-ether.ts index 1beef4a638..9e20fd914f 100644 --- a/fees/frax-ether.ts +++ b/fees/frax-ether.ts @@ -1,9 +1,9 @@ -import { Adapter, FetchOptions, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { queryIndexer } from "../helpers/indexer"; const fetch = (): any => { - return async (timestamp: number, _: any, options: FetchOptions): Promise => { + return async (options: FetchOptions) => { const dailyFees = options.createBalances(); const logs = await queryIndexer(` @@ -32,7 +32,6 @@ const fetch = (): any => { return { - timestamp, dailyFees, dailySupplySideRevenue: dailySupplySideRevenue, dailyRevenue: dailyRevenue, @@ -44,6 +43,7 @@ const fetch = (): any => { } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch(), diff --git a/fees/frax-fpi.ts b/fees/frax-fpi.ts index eececda1d9..8d5f0eb779 100644 --- a/fees/frax-fpi.ts +++ b/fees/frax-fpi.ts @@ -37,6 +37,7 @@ const fetch = async (timestamp: number) => { } const adapter: Adapter = { + version: 1, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch, diff --git a/fees/frax-swap.ts b/fees/frax-swap.ts index 662e102815..31bba23f77 100644 --- a/fees/frax-swap.ts +++ b/fees/frax-swap.ts @@ -1,6 +1,5 @@ import { CHAIN } from "../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; -import type { ChainEndpoints } from "../adapters/types" import fetchURL from "../utils/fetchURL"; import { Adapter } from "../adapters/types"; import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphFees"; @@ -68,6 +67,7 @@ const methodology = { } const adapter: Adapter = { + version: 1, adapter: { [CHAIN.ARBITRUM]: { fetch: graphs()(CHAIN.ARBITRUM), diff --git a/fees/fulcrom-finance.ts b/fees/fulcrom-finance.ts index 9ac49a5cea..eda0a42544 100644 --- a/fees/fulcrom-finance.ts +++ b/fees/fulcrom-finance.ts @@ -83,6 +83,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; const adapter: Adapter = { + version: 1, adapter: { [CHAIN.CRONOS]: { fetch: graphs(endpoints)(CHAIN.CRONOS), diff --git a/fees/fvm-exchange.ts b/fees/fvm-exchange.ts index c878c87c51..ffc61b8436 100644 --- a/fees/fvm-exchange.ts +++ b/fees/fvm-exchange.ts @@ -1,4 +1,4 @@ -import { ChainBlocks, FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; const FACTORY_ADDRESS = "0x472f3C3c9608fe0aE8d702f3f8A2d12c410C881A"; @@ -10,7 +10,7 @@ const ABIs: TABI = { "allPairs": "function allPairs(uint256) view returns (address)" } -const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, api }: FetchOptions): Promise => { +const fetch = async ({ createBalances, getLogs, api }: FetchOptions) => { const dailyFees = createBalances() const lpTokens = await api.fetchList({ lengthAbi: ABIs.allPairsLength, itemAbi: ABIs.allPairs, target: FACTORY_ADDRESS }); @@ -23,11 +23,11 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLog dailyFees: dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees, - timestamp, }; }; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.FANTOM]: { fetch, From 4d1df689ecba52a410c4a75e31982e81b80dbc81 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 6 Jun 2024 17:03:25 +0000 Subject: [PATCH 0725/1590] update sdk --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 728f9fd72d..b87fc6254e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.61", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.61.tgz", - "integrity": "sha512-t7nOMdpQ29y1eZmQothokRqsrfmGSTcu/ZHauvl/CvDEcUuWK+uNpdSAYG0cf93Z3XUXKH4eyRI7XLZcYR7/6w==", + "version": "5.0.64", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.64.tgz", + "integrity": "sha512-QQaqekANToxgWryU+2esEHaQqVdP09ds1QR3nmIQUxlxwfMpTNCM4/09kRJAiFFEpwC8fOzxWOP63tcRgA96QQ==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From b0c4166e6b74c2326299650593a9fad0207ee6d1 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 6 Jun 2024 18:06:54 +0100 Subject: [PATCH 0726/1590] tj patch --- fees/traderjoe.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/fees/traderjoe.ts b/fees/traderjoe.ts index bce2c17ac7..5acdb47319 100644 --- a/fees/traderjoe.ts +++ b/fees/traderjoe.ts @@ -3,7 +3,7 @@ import { getUniqStartOfTodayTimestamp, } from "../helpers/getUniSubgraphFees"; import volumeAdapter from "../dexs/traderjoe"; -import { Adapter, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions, FetchResultFees } from "../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../helpers/chains"; import fetchURL from "../utils/fetchURL"; @@ -43,10 +43,8 @@ const adapterV1 = getDexChainFees({ }); const graph = (chain: Chain) => { - return async (timestamp: number): Promise => { - const dayTimestamp = getUniqStartOfTodayTimestamp( - new Date(timestamp * 1000), - ); + return async ({ startOfDay }: FetchOptions) => { + const dayTimestamp = startOfDay * 1000 const historical: IData[] = await fetchURL(endpointsV2[chain]); const dailyFees = historical.find((dayItem) => dayItem.timestamp === dayTimestamp) @@ -63,13 +61,12 @@ const graph = (chain: Chain) => { ? `${(dailyFees || 0) - (dailyRevenue || 0)}` : undefined, dailyProtocolRevenue: `${dailyRevenue}`, - timestamp, }; }; }; const adapter: Adapter = { - version: 2, ///// THIS IS MIXED VERSION AND NEEDS ATTENTION + version: 2, breakdown: { v1: adapterV1, v2: { From e43f4b251a71ec8b4ca3368c0015e8fe3f8583fb Mon Sep 17 00:00:00 2001 From: Soil King <157099073+soilking@users.noreply.github.com> Date: Thu, 6 Jun 2024 10:41:19 -0700 Subject: [PATCH 0727/1590] set runAtCurrTime --- dexs/basin/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/basin/index.ts b/dexs/basin/index.ts index 15198b1e52..778e43e21b 100644 --- a/dexs/basin/index.ts +++ b/dexs/basin/index.ts @@ -74,6 +74,7 @@ function volumeForCategory(chain: CHAIN, type: WellType) { return await getVolumeStats(chain, type, block); }, start: async () => chains[chain].startTime, + runAtCurrTime: false, // Backfill is allowed meta: { methodology }, From 29d11eaa594837f15bd9f49ed6200a377ce425d9 Mon Sep 17 00:00:00 2001 From: igorshelkovenkov Date: Thu, 6 Jun 2024 21:01:02 +0200 Subject: [PATCH 0728/1590] add vanilla swap --- protocols/vanillaswap-v2.ts | 7 +++++++ protocols/vanillaswap-v3.ts | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 protocols/vanillaswap-v2.ts create mode 100644 protocols/vanillaswap-v3.ts diff --git a/protocols/vanillaswap-v2.ts b/protocols/vanillaswap-v2.ts new file mode 100644 index 0000000000..92c8d6fb21 --- /dev/null +++ b/protocols/vanillaswap-v2.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + defichain_evm: { + factory: '0x79Ea1b897deeF37e3e42cDB66ca35DaA799E93a3', + } +}) diff --git a/protocols/vanillaswap-v3.ts b/protocols/vanillaswap-v3.ts new file mode 100644 index 0000000000..9da5e9d359 --- /dev/null +++ b/protocols/vanillaswap-v3.ts @@ -0,0 +1,7 @@ +import { uniV3Exports } from "../helpers/uniswap"; + +export default uniV3Exports({ + defichain_evm: { + factory: '0x9C444DD15Fb0Ac0bA8E9fbB9dA7b9015F43b4Dc1', + } +}) From a580e81a204061fdc1241a3c8424b07d34b3b53e Mon Sep 17 00:00:00 2001 From: stabble-devops Date: Thu, 6 Jun 2024 16:43:06 -0400 Subject: [PATCH 0729/1590] add stabble DEX --- dexs/stabble/index.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 dexs/stabble/index.ts diff --git a/dexs/stabble/index.ts b/dexs/stabble/index.ts new file mode 100644 index 0000000000..181337dc14 --- /dev/null +++ b/dexs/stabble/index.ts @@ -0,0 +1,25 @@ +import { CHAIN } from '../../helpers/chains'; +import { httpGet } from '../../utils/fetchURL'; + +const REGISTRY_API = 'https://app.stabble.org/api/registry'; + +async function fetch(timestamp: number) { + const registry = await httpGet(REGISTRY_API); + const vol24h = registry.pools + .filter((pool: any) => pool.chainId === 101) + .reduce((sum: number, pool: any) => sum + (pool?.stats?.volume_24h || 0), 0); + return { + dailyVolume: vol24h, + timestamp: timestamp + } +} + +export default { + adapter: { + [CHAIN.SOLANA]: { + fetch: fetch, + runAtCurrTime: true, + start: 1719579600, + } + } +} From f4c174045915608daea42ecfab214c16b58ed7d2 Mon Sep 17 00:00:00 2001 From: stabble-devops Date: Thu, 6 Jun 2024 16:51:22 -0400 Subject: [PATCH 0730/1590] chore: use adapter version 2 --- dexs/stabble/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/stabble/index.ts b/dexs/stabble/index.ts index 181337dc14..4ca75b2711 100644 --- a/dexs/stabble/index.ts +++ b/dexs/stabble/index.ts @@ -15,6 +15,7 @@ async function fetch(timestamp: number) { } export default { + version: 2, adapter: { [CHAIN.SOLANA]: { fetch: fetch, From 02f9a73543d8b9c287e6e42489b546d742fc0281 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 6 Jun 2024 21:52:02 +0100 Subject: [PATCH 0731/1590] add coinbase commerce --- fees/coinbase-commerce.ts | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 fees/coinbase-commerce.ts diff --git a/fees/coinbase-commerce.ts b/fees/coinbase-commerce.ts new file mode 100644 index 0000000000..c0919b8aba --- /dev/null +++ b/fees/coinbase-commerce.ts @@ -0,0 +1,44 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +type TContract = { + [s: string | Chain]: string[]; +} +const contracts: TContract = { + [CHAIN.ETHEREUM]: ['0x3263bc4976C8c180bd5EB90a57ED1A2f1CFcAC67', '0x7915f087685fffD71608E5d118f3B70c27D9eF4e', "0x131642c019AF815Ae5F9926272A70C84AE5C37ab"], + [CHAIN.POLYGON]: ["0x551c6791c2f01c3Cd48CD35291Ac4339F206430d", "0xe63fb3a3cd48df6a336560a91f78ac6013557f7d", "0x7f52269092F2a5EF06C36C91e46F9196deb90336", "0x48073112c8C48e2550Bd42E4CD0aA483a416c5af"], + [CHAIN.BASE]: ["0xeF0D482Daa16fa86776Bc582Aff3dFce8d9b8396", "0x131642c019AF815Ae5F9926272A70C84AE5C37ab", "0x9Bb4D44e6963260A1850926E8f6bEB8d5803836F", "0x30E95edE0b3C7Ef147EE97A5e88FdE06311EA11f"], +} + +const fetchFees = (chain: Chain) => { + return async ({ createBalances, getLogs }: FetchOptions) => { + const dailyFees = createBalances() + await Promise.all(contracts[chain].map(async contract => { + const logs = await getLogs({ target: contract, eventAbi: 'event Transferred (address indexed operator, bytes16 id, address recipient, address sender, uint256 spentAmount, address spentCurrency)' }) + logs.forEach((i: any) => dailyFees.add(i.spentCurrency, i.spentAmount / BigInt(100))) + })) + + return { dailyFees, dailyRevenue: dailyFees } + } +} + +const start = 1700053261 +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: fetchFees(CHAIN.ETHEREUM), + start + }, + [CHAIN.BASE]: { + fetch: fetchFees(CHAIN.BASE), + start + }, + [CHAIN.POLYGON]: { + fetch: fetchFees(CHAIN.POLYGON), + start + } + }, + version: 2 +} +export default adapters; From 0232cdf2b4c0f7c6fab44d03c4c105d284877231 Mon Sep 17 00:00:00 2001 From: stabble-devops Date: Thu, 6 Jun 2024 16:57:08 -0400 Subject: [PATCH 0732/1590] chore: change start time --- dexs/stabble/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/stabble/index.ts b/dexs/stabble/index.ts index 4ca75b2711..43ae3fc0bc 100644 --- a/dexs/stabble/index.ts +++ b/dexs/stabble/index.ts @@ -20,7 +20,8 @@ export default { [CHAIN.SOLANA]: { fetch: fetch, runAtCurrTime: true, - start: 1719579600, + // start: 1719579600, + start: 1717707389, } } } From 55d26ac274d917724c179f76c5e8ef49bc8aabad Mon Sep 17 00:00:00 2001 From: stabble-devops Date: Thu, 6 Jun 2024 17:00:29 -0400 Subject: [PATCH 0733/1590] change start time --- dexs/stabble/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/stabble/index.ts b/dexs/stabble/index.ts index 43ae3fc0bc..9a1f544749 100644 --- a/dexs/stabble/index.ts +++ b/dexs/stabble/index.ts @@ -21,7 +21,7 @@ export default { fetch: fetch, runAtCurrTime: true, // start: 1719579600, - start: 1717707389, + start: 1717568215, } } } From 27b73b507a48017a602a9763b71fc6a085f6f1ed Mon Sep 17 00:00:00 2001 From: stabble-devops Date: Thu, 6 Jun 2024 17:16:45 -0400 Subject: [PATCH 0734/1590] chore: update start time --- dexs/stabble/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/dexs/stabble/index.ts b/dexs/stabble/index.ts index 9a1f544749..bc0c51cfe8 100644 --- a/dexs/stabble/index.ts +++ b/dexs/stabble/index.ts @@ -20,7 +20,6 @@ export default { [CHAIN.SOLANA]: { fetch: fetch, runAtCurrTime: true, - // start: 1719579600, start: 1717568215, } } From 5f901f7bebe3c7c9c72e4ac1e5aad898abfdc6e8 Mon Sep 17 00:00:00 2001 From: stabble-devops Date: Thu, 6 Jun 2024 17:33:47 -0400 Subject: [PATCH 0735/1590] chore: change start time to genesis block time of the contract deployment --- dexs/stabble/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/stabble/index.ts b/dexs/stabble/index.ts index bc0c51cfe8..29a33f824b 100644 --- a/dexs/stabble/index.ts +++ b/dexs/stabble/index.ts @@ -20,7 +20,7 @@ export default { [CHAIN.SOLANA]: { fetch: fetch, runAtCurrTime: true, - start: 1717568215, + start: 1717563162, } } } From a25c6cbd0affcc302cc57ea9bd45d7e2e1bacde9 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Fri, 7 Jun 2024 01:49:01 +0100 Subject: [PATCH 0736/1590] add sui + pumpup --- fees/pumpup.ts | 22 ++++++++++++++++++++++ helpers/env.ts | 1 + helpers/sui.ts | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 fees/pumpup.ts create mode 100644 helpers/sui.ts diff --git a/fees/pumpup.ts b/fees/pumpup.ts new file mode 100644 index 0000000000..e8b620f506 --- /dev/null +++ b/fees/pumpup.ts @@ -0,0 +1,22 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import {queryEvents} from "../helpers/sui" + +const fetchFees = async (options: FetchOptions) => { + const dailyFees = options.createBalances() + const events = await queryEvents({eventType:"0x3f2a0baf78f98087a04431f848008bad050cb5f4427059fa08eeefaa94d56cca::curve::Points", options}) + events.map(ev=>dailyFees.addCGToken("sui", ev.amount/1e9)) + + return { dailyFees, dailyRevenue: dailyFees } + } + +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.SUI]: { + fetch: fetchFees, + start: 0 + }, + }, + version: 2 +} +export default adapters; diff --git a/helpers/env.ts b/helpers/env.ts index cfce9e4cfd..64396dde32 100644 --- a/helpers/env.ts +++ b/helpers/env.ts @@ -27,6 +27,7 @@ export const ENV_KEYS = new Set([ 'ZEROx_API_KEY', 'ZEROX_API_KEY', 'AGGREGATOR_0X_API_KEY', + 'SUI_RPC' ]) // This is done to support both ZEROx_API_KEY and ZEROX_API_KEY diff --git a/helpers/sui.ts b/helpers/sui.ts new file mode 100644 index 0000000000..6c664b3015 --- /dev/null +++ b/helpers/sui.ts @@ -0,0 +1,43 @@ +const http = require('axios') +const { getEnv } = require('./env') + +const endpoint = () => getEnv('SUI_RPC') + +async function getObject(objectId:string) { + return (await call('sui_getObject', [objectId, { + "showType": true, + "showOwner": true, + "showContent": true, + }])).content +} + +export async function queryEvents({ eventType, options, transform = (i:any) => i }:any):Promise { + let filter:any = {} + if (eventType) filter.MoveEventType = eventType + const items:any[] = [] + let cursor = null + do { + const { data , nextCursor, hasNextPage } = await call('suix_queryEvents', [filter, cursor, 100, true], { withMetadata: true, }) + cursor = hasNextPage ? nextCursor : null + items.push(...data.filter((ev:any)=>{ + const ts = Number(ev.timestampMs)/1e3 + return options.startTimestamp < ts && ts < options.endTimestamp + })) + if(Number(data[data.length-1].timestampMs)/1e3 < options.startTimestamp){ + cursor = null + } + } while (cursor) + return items.map(i => i.parsedJson).map(transform) +} + +async function call(method:string, params:any, { withMetadata = false} = {}) { + if (!Array.isArray(params)) params = [params] + const { + data: {result} + } = await http.post(endpoint(), { jsonrpc: "2.0", id: 1, method, params, }) + return withMetadata ? result : result.data +} + +async function multiCall(calls:any[]) { + return Promise.all(calls.map(i => call(...(i as [any,any,any])))) +} \ No newline at end of file From b833510905a84ff1c252f5be8c48f51633887fa5 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Fri, 7 Jun 2024 03:30:54 +0100 Subject: [PATCH 0737/1590] maestro solana --- fees/bonk-bot/index.ts | 3 ++- fees/maestro.ts | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/fees/bonk-bot/index.ts b/fees/bonk-bot/index.ts index bb93f7b90a..f77c102f91 100644 --- a/fees/bonk-bot/index.ts +++ b/fees/bonk-bot/index.ts @@ -26,7 +26,8 @@ const adapter: SimpleAdapter = { start: 1692748800, runAtCurrTime: true, } - } + }, + isExpensiveAdapter: true } export default adapter; diff --git a/fees/maestro.ts b/fees/maestro.ts index ca70371b58..ec903238db 100644 --- a/fees/maestro.ts +++ b/fees/maestro.ts @@ -33,12 +33,33 @@ async function fetch(timestamp: number, _1: any, options: FetchOptions) { const chainAdapter = { fetch: fetch as any, start: 1656633600, } +import { queryDune } from "../helpers/dune"; + +const fetchSolana: any = async (_timestamp: number, _1: any, options: FetchOptions) => { + const dailyFees = options.createBalances(); + const value = (await queryDune("3521814", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: 'FRMxAnZgkW58zbYcE7Bxqsg99VWpJh6sMP5xLzAWNabN' + })); + dailyFees.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); + + return { dailyFees, dailyRevenue: dailyFees } + +} + + const adapter: Adapter = { adapter: { [CHAIN.ETHEREUM]: chainAdapter, [CHAIN.BSC]: chainAdapter, [CHAIN.ARBITRUM]: chainAdapter, - } + [CHAIN.SOLANA]: { + fetch: fetchSolana, + start: 1656633600, // wrong? + }, + }, + isExpensiveAdapter: true } export default adapter; From cd10fae900aaf3b3782e87548cb2580f94f3ea01 Mon Sep 17 00:00:00 2001 From: "bryan.y" Date: Fri, 7 Jun 2024 17:17:45 +0800 Subject: [PATCH 0738/1590] feat: fetchTotalVolume for apx --- dexs/apollox/index.ts | 49 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/dexs/apollox/index.ts b/dexs/apollox/index.ts index e6a57cb77d..96d1ca796e 100644 --- a/dexs/apollox/index.ts +++ b/dexs/apollox/index.ts @@ -35,6 +35,20 @@ type V1TickerItem = { count: number; }; +type TotalVolumeItem = { + "alpFeeVOFor24Hour": { + "fee": number + "revenue": number + }, + "allAlpFeeVO": { + "fee": number + "revenue": number + }, + "cumVol": number +} + +const TotalVolumeAPI = "https://www.apollox.finance/bapi/futures/v1/public/future/apx/fee/all" + const v2VolumeAPI = "https://www.apollox.finance/bapi/future/v1/public/future/apx/pair"; @@ -56,17 +70,26 @@ const fetchV1Volume = async () => { return dailyVolume }; +const fetchTotalVolume = async (chain: Chain) => { + const { data } = ( + await httpGet(TotalVolumeAPI, { params: { chain, } }) + ) as { data: TotalVolumeItem } + + return data.cumVol +}; const adapter: SimpleAdapter = { adapter: { [CHAIN.BSC]: { runAtCurrTime: true, fetch: async (timestamp) => { - const [v1, v2] = await Promise.all([ + const [v1, v2, totalVolume] = await Promise.all([ fetchV2Volume(CHAIN.BSC), fetchV1Volume(), + fetchTotalVolume(CHAIN.BSC), ]); return { dailyVolume: v1 + v2, + totalVolume, timestamp, }; }, @@ -75,10 +98,14 @@ const adapter: SimpleAdapter = { [CHAIN.ARBITRUM]: { runAtCurrTime: true, fetch: async (timestamp) => { - const dailyVolume = await fetchV2Volume(CHAIN.ARBITRUM); + const [v2, totalVolume] = await Promise.all([ + fetchV2Volume(CHAIN.ARBITRUM), + fetchTotalVolume(CHAIN.ARBITRUM), + ]); return { timestamp, - dailyVolume: dailyVolume, + dailyVolume: v2, + totalVolume, }; }, start: 1682035200, @@ -86,10 +113,14 @@ const adapter: SimpleAdapter = { [CHAIN.OP_BNB]: { runAtCurrTime: true, fetch: async (timestamp) => { - const dailyVolume = await fetchV2Volume('opbnb'); + const [v2, totalVolume] = await Promise.all([ + fetchV2Volume('opbnb'), + fetchTotalVolume('opbnb'), + ]); return { timestamp, - dailyVolume: dailyVolume, + dailyVolume: v2, + totalVolume, }; }, start: 1682035200, @@ -97,10 +128,14 @@ const adapter: SimpleAdapter = { [CHAIN.BASE]: { runAtCurrTime: true, fetch: async (timestamp) => { - const dailyVolume = await fetchV2Volume(CHAIN.BASE); + const [v2, totalVolume] = await Promise.all([ + fetchV2Volume(CHAIN.BASE), + fetchTotalVolume(CHAIN.BASE), + ]); return { timestamp, - dailyVolume: dailyVolume, + dailyVolume: v2, + totalVolume, }; }, start: 1682035200, From 7ae607ac4b81ce5debe4ea11bf1f75a842828f83 Mon Sep 17 00:00:00 2001 From: madjarevicn Date: Fri, 7 Jun 2024 11:18:45 +0200 Subject: [PATCH 0739/1590] Add DragonSwap adapter. --- dexs/dragonswap-sei/index.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 dexs/dragonswap-sei/index.ts diff --git a/dexs/dragonswap-sei/index.ts b/dexs/dragonswap-sei/index.ts new file mode 100644 index 0000000000..362234e445 --- /dev/null +++ b/dexs/dragonswap-sei/index.ts @@ -0,0 +1,11 @@ +// https://api.thegraph.com/subgraphs/name/camelotlabs/camelot-amm-2 +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter({ + [CHAIN.SEI]: "https://api.goldsky.com/api/public/project_clu1fg6ajhsho01x7ajld3f5a/subgraphs/dragonswap-prod/1.0.0/gn" +}, {}); + +adapters.adapter.sei.start = 1716837350; + +export default adapters; From e7e9807335498b8ac287f5848088920ea47b1850 Mon Sep 17 00:00:00 2001 From: 0scallion <150413244+0scallion@users.noreply.github.com> Date: Fri, 7 Jun 2024 17:28:10 +0800 Subject: [PATCH 0740/1590] add volume on zetachain --- dexs/SubstanceX/index.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/dexs/SubstanceX/index.ts b/dexs/SubstanceX/index.ts index 96bbefe2ae..76801a6308 100644 --- a/dexs/SubstanceX/index.ts +++ b/dexs/SubstanceX/index.ts @@ -7,17 +7,20 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints = { [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/substanceexchangedevelop/coreprod", + [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta" }; const blockNumberGraph = { [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks", + [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta-blocks" } +const headers = { 'sex-dev': 'ServerDev'} + const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { return async (timestamp: number) => { - if (chain === CHAIN.ARBITRUM) { // Get blockNumers const blockNumerQuery = gql` { @@ -46,8 +49,12 @@ const graphs = (graphUrls: ChainEndpoints) => { } `; - const blockNumberGraphQLClient = new GraphQLClient(blockNumberGraph[chain]); - const graphQLClient = new GraphQLClient(graphUrls[chain]); + const blockNumberGraphQLClient = new GraphQLClient(blockNumberGraph[chain], { + headers: chain === CHAIN.ZETA ? headers: null, + }); + const graphQLClient = new GraphQLClient(graphUrls[chain], { + headers: chain === CHAIN.ZETA ? headers: null, + }); const blockNumber = ( @@ -103,7 +110,7 @@ const graphs = (graphUrls: ChainEndpoints) => { }; }; }; -}; + const adapter: Adapter = { adapter: { @@ -111,6 +118,10 @@ const adapter: Adapter = { fetch: graphs(endpoints)(CHAIN.ARBITRUM), start: 1700323200, }, + [CHAIN.ZETA]: { + fetch: graphs(endpoints)(CHAIN.ZETA), + start: 2631301, + }, }, }; From 24241d6c09cea21835d4169c00770ea75212f759 Mon Sep 17 00:00:00 2001 From: 0scallion <150413244+0scallion@users.noreply.github.com> Date: Fri, 7 Jun 2024 17:29:15 +0800 Subject: [PATCH 0741/1590] add fees on zetachain --- fees/substanceX/index.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/fees/substanceX/index.ts b/fees/substanceX/index.ts index a43affcb4b..d6e6ca6d33 100644 --- a/fees/substanceX/index.ts +++ b/fees/substanceX/index.ts @@ -7,17 +7,20 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints = { [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/substanceexchangedevelop/coreprod", + [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta" }; const blockNumberGraph = { [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks", + [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta-blocks" } +const headers = { 'sex-dev': 'ServerDev'} + const graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { return async ({ toTimestamp }: FetchOptions) => { - if (chain === CHAIN.ARBITRUM) { // Get blockNumers const blockNumerQuery = gql` { @@ -46,8 +49,12 @@ const graphs = (graphUrls: ChainEndpoints) => { } `; - const blockNumberGraphQLClient = new GraphQLClient(blockNumberGraph[chain]); - const graphQLClient = new GraphQLClient(graphUrls[chain]); + const blockNumberGraphQLClient = new GraphQLClient(blockNumberGraph[chain], { + headers: chain === CHAIN.ZETA ? headers: null, + }); + const graphQLClient = new GraphQLClient(graphUrls[chain], { + headers: chain === CHAIN.ZETA ? headers: null, + }); const blockNumber = ( @@ -99,7 +106,6 @@ const graphs = (graphUrls: ChainEndpoints) => { totalFees: "0", }; }; - }; }; const adapter: Adapter = { @@ -109,6 +115,10 @@ const adapter: Adapter = { fetch: graphs(endpoints)(CHAIN.ARBITRUM), start: 1700323200, }, + [CHAIN.ZETA]: { + fetch: graphs(endpoints)(CHAIN.ZETA), + start: 2631301, + }, }, }; From 0069b4cfa3242c31b3dd7e4c588fb516a33c5a80 Mon Sep 17 00:00:00 2001 From: amedrontadora Date: Fri, 7 Jun 2024 20:16:57 +0800 Subject: [PATCH 0742/1590] update SyncSwap subgraph endpoint --- dexs/syncswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/syncswap/index.ts b/dexs/syncswap/index.ts index e3333d2b5c..e1c2805b7d 100644 --- a/dexs/syncswap/index.ts +++ b/dexs/syncswap/index.ts @@ -2,7 +2,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ERA]: "https://api.studio.thegraph.com/query/30365/zksync-blocks/v0.0.9", + [CHAIN.ERA]: "https://api.studio.thegraph.com/query/30365/syncswap-graph/1.4.0", }; const adapter = univ2Adapter(endpoints, { From e35f59cb3219adfb794b17cd5bc7c8707417ccec Mon Sep 17 00:00:00 2001 From: markolazic01 Date: Fri, 7 Jun 2024 15:03:22 +0200 Subject: [PATCH 0743/1590] Enable dragonswap dex adapter --- dexs/dragonswap-sei/index.ts | 2 +- helpers/getBlock.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dexs/dragonswap-sei/index.ts b/dexs/dragonswap-sei/index.ts index 362234e445..1cbd55f671 100644 --- a/dexs/dragonswap-sei/index.ts +++ b/dexs/dragonswap-sei/index.ts @@ -6,6 +6,6 @@ const adapters = univ2Adapter({ [CHAIN.SEI]: "https://api.goldsky.com/api/public/project_clu1fg6ajhsho01x7ajld3f5a/subgraphs/dragonswap-prod/1.0.0/gn" }, {}); -adapters.adapter.sei.start = 1716837350; +adapters.adapter.sei.start = 1716854400; export default adapters; diff --git a/helpers/getBlock.ts b/helpers/getBlock.ts index 351048e52c..783bc86ce8 100644 --- a/helpers/getBlock.ts +++ b/helpers/getBlock.ts @@ -42,7 +42,6 @@ const blacklistedChains: string[] = [ "icp", "hydradx", "osmosis", - "sei", "ergo", "radixdlt", "near", From c4aadfca383120a59ff84997bb083453d72dfe5d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 7 Jun 2024 13:55:03 +0000 Subject: [PATCH 0744/1590] fix logic check date --- helpers/sui.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/helpers/sui.ts b/helpers/sui.ts index 6c664b3015..fb76d55ac6 100644 --- a/helpers/sui.ts +++ b/helpers/sui.ts @@ -13,17 +13,19 @@ async function getObject(objectId:string) { export async function queryEvents({ eventType, options, transform = (i:any) => i }:any):Promise { let filter:any = {} - if (eventType) filter.MoveEventType = eventType + if (eventType) filter.MoveEventType = eventType const items:any[] = [] let cursor = null + const fromTimestamp = options.endTimestamp - 86400; + const toTimestamp = options.endTimestamp; do { const { data , nextCursor, hasNextPage } = await call('suix_queryEvents', [filter, cursor, 100, true], { withMetadata: true, }) cursor = hasNextPage ? nextCursor : null items.push(...data.filter((ev:any)=>{ const ts = Number(ev.timestampMs)/1e3 - return options.startTimestamp < ts && ts < options.endTimestamp + return fromTimestamp > ts && ts < toTimestamp })) - if(Number(data[data.length-1].timestampMs)/1e3 < options.startTimestamp){ + if(Number(data[data.length-1].timestampMs)/1e3 < fromTimestamp){ cursor = null } } while (cursor) @@ -40,4 +42,4 @@ async function call(method:string, params:any, { withMetadata = false} = {}) { async function multiCall(calls:any[]) { return Promise.all(calls.map(i => call(...(i as [any,any,any])))) -} \ No newline at end of file +} From c0105ca787fecd3029faa3f3557d6d0511aae014 Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Fri, 7 Jun 2024 17:31:30 +0100 Subject: [PATCH 0745/1590] set start --- fees/pumpup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/pumpup.ts b/fees/pumpup.ts index e8b620f506..319080abd6 100644 --- a/fees/pumpup.ts +++ b/fees/pumpup.ts @@ -14,7 +14,7 @@ const adapters: SimpleAdapter = { adapter: { [CHAIN.SUI]: { fetch: fetchFees, - start: 0 + start: 1717290061 }, }, version: 2 From aa1c25e3f6f69183e75b9c905277debf87cb0fa0 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 7 Jun 2024 18:37:45 +0200 Subject: [PATCH 0746/1590] code refactor --- fees/geodnet.ts | 61 ++++++++++++++----------------------------------- 1 file changed, 17 insertions(+), 44 deletions(-) diff --git a/fees/geodnet.ts b/fees/geodnet.ts index 258f84ca5f..0d11debb67 100644 --- a/fees/geodnet.ts +++ b/fees/geodnet.ts @@ -1,12 +1,7 @@ -import * as sdk from '@defillama/sdk'; -import { FetchResultFees, SimpleAdapter } from '../adapters/types'; +import { FetchOptions, SimpleAdapter } from '../adapters/types'; import { CHAIN } from '../helpers/chains'; -import { getBlock } from '../helpers/getBlock'; -import { getPrices } from '../utils/prices'; const GEODNET_TOKEN_ADDRESS = '0xAC0F66379A6d7801D7726d5a943356A172549Adb'; -const GEODNET_NUM_DECIMALS = 18; -const GEODNET_COIN_ID = 'coingecko:geodnet'; const TOPIC_0_EVT_TRANSFER = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'; const PADDED_BURN_ADDRESS = @@ -19,54 +14,32 @@ interface ILog { address: string; } -const fetchFees = async (timestamp: number): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24; - const toTimestamp = timestamp; - const fromBlock = await getBlock(fromTimestamp, CHAIN.POLYGON, {}); - const toBlock = await getBlock(toTimestamp, CHAIN.POLYGON, {}); +const fetchFees = async ({ getLogs, createBalances }: FetchOptions)=> { + const balances = createBalances(); - const batchSize = 4500; - const batches = Math.ceil((toBlock - fromBlock) / batchSize); + const burnedEventLogs: ILog[] = await getLogs({ + target: GEODNET_TOKEN_ADDRESS, + topics: [TOPIC_0_EVT_TRANSFER, null, PADDED_BURN_ADDRESS] as any, + }) - const erc20transferLog: ILog[] = await Promise.all( - Array.from({ length: batches }, (_, index) => - sdk.getEventLogs({ - target: GEODNET_TOKEN_ADDRESS, - topic: TOPIC_0_EVT_TRANSFER, - toBlock: fromBlock + (index + 1) * batchSize, - fromBlock: fromBlock + index * batchSize, - chain: CHAIN.POLYGON, - }) - ) - ).then((responses) => responses.flatMap((response) => response as ILog[])); + burnedEventLogs.forEach((log: ILog) => { + balances.add(GEODNET_TOKEN_ADDRESS, Number(log.data)); + }) + - const burnedEventLogs = erc20transferLog.filter( - (log) => log.topics[2].toLowerCase() === PADDED_BURN_ADDRESS.toLowerCase() - ); - const totalBurnsInNativeToken = burnedEventLogs.reduce( - (acc: number, log: ILog) => { - const amount = Number(log.data) / 10 ** GEODNET_NUM_DECIMALS; - return acc + amount; - }, - 0 - ); - - const prices = await getPrices([GEODNET_COIN_ID], timestamp); - - const dailyHoldersRevenue = - prices[GEODNET_COIN_ID].price * totalBurnsInNativeToken; - const dailyFees = dailyHoldersRevenue / 0.8; + const dailyHoldersRevenue = balances + const dailyFees = balances.clone(1/0.8) const dailyRevenue = dailyFees; return { - dailyFees: `${dailyFees}`, - dailyRevenue: `${dailyRevenue}`, - dailyHoldersRevenue: `${dailyHoldersRevenue}`, - timestamp, + dailyFees, + dailyRevenue, + dailyHoldersRevenue, }; }; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.POLYGON]: { fetch: fetchFees, From 8a74bd92687f1e34bb4d1fc067b14775c63ff17e Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Fri, 7 Jun 2024 18:00:42 +0100 Subject: [PATCH 0747/1590] Revert "fix logic check date" This reverts commit c4aadfca383120a59ff84997bb083453d72dfe5d. --- helpers/sui.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/helpers/sui.ts b/helpers/sui.ts index fb76d55ac6..6c664b3015 100644 --- a/helpers/sui.ts +++ b/helpers/sui.ts @@ -13,19 +13,17 @@ async function getObject(objectId:string) { export async function queryEvents({ eventType, options, transform = (i:any) => i }:any):Promise { let filter:any = {} - if (eventType) filter.MoveEventType = eventType + if (eventType) filter.MoveEventType = eventType const items:any[] = [] let cursor = null - const fromTimestamp = options.endTimestamp - 86400; - const toTimestamp = options.endTimestamp; do { const { data , nextCursor, hasNextPage } = await call('suix_queryEvents', [filter, cursor, 100, true], { withMetadata: true, }) cursor = hasNextPage ? nextCursor : null items.push(...data.filter((ev:any)=>{ const ts = Number(ev.timestampMs)/1e3 - return fromTimestamp > ts && ts < toTimestamp + return options.startTimestamp < ts && ts < options.endTimestamp })) - if(Number(data[data.length-1].timestampMs)/1e3 < fromTimestamp){ + if(Number(data[data.length-1].timestampMs)/1e3 < options.startTimestamp){ cursor = null } } while (cursor) @@ -42,4 +40,4 @@ async function call(method:string, params:any, { withMetadata = false} = {}) { async function multiCall(calls:any[]) { return Promise.all(calls.map(i => call(...(i as [any,any,any])))) -} +} \ No newline at end of file From fa45aebd4753a79a9dde15222ec2941a20a2b516 Mon Sep 17 00:00:00 2001 From: stabble-devops Date: Fri, 7 Jun 2024 17:54:32 -0400 Subject: [PATCH 0748/1590] chore: fetch registry by mainnet only --- dexs/stabble/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dexs/stabble/index.ts b/dexs/stabble/index.ts index 29a33f824b..6eda57cac4 100644 --- a/dexs/stabble/index.ts +++ b/dexs/stabble/index.ts @@ -1,13 +1,11 @@ import { CHAIN } from '../../helpers/chains'; import { httpGet } from '../../utils/fetchURL'; -const REGISTRY_API = 'https://app.stabble.org/api/registry'; +const REGISTRY_API = 'https://app.stabble.org/api/registry?cluster=mainnet-beta'; async function fetch(timestamp: number) { const registry = await httpGet(REGISTRY_API); - const vol24h = registry.pools - .filter((pool: any) => pool.chainId === 101) - .reduce((sum: number, pool: any) => sum + (pool?.stats?.volume_24h || 0), 0); + const vol24h = registry.pools.reduce((sum: number, pool: any) => sum + (pool?.stats?.volume_24h || 0), 0); return { dailyVolume: vol24h, timestamp: timestamp From ce04a5a19f8fe8b257d33adbfc22ceaf3869cfb6 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 8 Jun 2024 02:49:03 +0100 Subject: [PATCH 0749/1590] fix raydium vol --- dexs/raydium/index.ts | 31 ++++++------------------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/dexs/raydium/index.ts b/dexs/raydium/index.ts index 3071b57556..d972d7319d 100644 --- a/dexs/raydium/index.ts +++ b/dexs/raydium/index.ts @@ -1,32 +1,15 @@ import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; - import fetchURL from "../../utils/fetchURL" -const urlAmmPool = "https://api.raydium.io/v2/main/info"; -const urlAmmPoolStandard = "https://api.raydium.io/v2/ammV3/ammPools" - -interface IAmmPoool { - totalvolume: string; - volume24h: number; -} - -interface IAmmPooolStandar { - volume: number; - tvl: number; -} - const graphs = async (timestamp: number): Promise => { - const ammPool: IAmmPoool = (await fetchURL(urlAmmPool)); - const ammPoolStandard: any[] = (await fetchURL(urlAmmPoolStandard)).data;; - const ammPoolStandardVolume: IAmmPooolStandar[] = ammPoolStandard.map((e: any) => e.day); - const dailyVolumeAmmPool = ammPoolStandardVolume - .filter((e: IAmmPooolStandar) => e.tvl > 100_000) - .reduce((a: number, b: IAmmPooolStandar) => a + b.volume, 0) - const dailyVolume = ammPool?.volume24h ? ammPool?.volume24h + dailyVolumeAmmPool: undefined; + const ammPoolStandard: any[] = (await fetchURL("https://api-v3.raydium.io/pools/info/list?poolType=all&poolSortField=default&sortType=desc&pageSize=100&page=1")).data.data; + const dailyVolumeAmmPool = ammPoolStandard + .filter((e) => e.tvl > 100_000) + .reduce((a: number, b) => a + b.day.volume, 0) const fiveBill = 3_000_000_000; // set the threshold to 3B return { - dailyVolume: dailyVolume ? `${dailyVolume < fiveBill ? dailyVolume : undefined}`: undefined, + dailyVolume: `${dailyVolumeAmmPool < fiveBill ? dailyVolumeAmmPool : undefined}`, timestamp: timestamp, }; }; @@ -35,11 +18,9 @@ const adapter: SimpleAdapter = { adapter: { solana: { fetch: graphs, - // runAtCurrTime: true, - customBackfill: undefined, + runAtCurrTime: true, start: 1660521600, }, - // TODO custom backfill }, }; From a6149f9cd6dd1bc1d6ec72bcb6d4d3499d6f6ed5 Mon Sep 17 00:00:00 2001 From: markolazic01 Date: Sat, 8 Jun 2024 12:47:50 +0200 Subject: [PATCH 0750/1590] Add dragonswap fees adapter --- fees/dragonswap-sei.ts | 55 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 fees/dragonswap-sei.ts diff --git a/fees/dragonswap-sei.ts b/fees/dragonswap-sei.ts new file mode 100644 index 0000000000..f8929db5c4 --- /dev/null +++ b/fees/dragonswap-sei.ts @@ -0,0 +1,55 @@ +import { Adapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { request, gql } from "graphql-request"; +import type { ChainEndpoints, FetchV2 } from "../adapters/types" +import { getTimestampAtStartOfDayUTC } from "../utils/date"; + +const endpoints = { + [CHAIN.SEI]: "https://api.goldsky.com/api/public/project_clu1fg6ajhsho01x7ajld3f5a/subgraphs/dragonswap-prod/1.0.0/gn" +} + +const methodology = { + Fees: "DragonSwap protocol swap fee (0.3% per swap).", + LPProvidersRevenue: "Fees distributed to the LP providers (70% of total accumulated fees).", + ProtocolAccumulation: "Fees sent to the protocol wallet (30% of total accumulated fees), is used to provide benefits to users in custom ways." +} + +const graphs = (graphUrls: ChainEndpoints) => { + const fetch: FetchV2 = async ({ chain, startTimestamp }) => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(startTimestamp) + + const graphQuery = gql + `{ + uniswapDayDatas(where: {date: ${todaysTimestamp}}) { + dailyFeesUSD + } + }`; + + const graphRes = await request(graphUrls[chain], graphQuery); + + const dailyFee = graphRes.uniswapDayDatas[0].dailyFeesUSD; + + return { + dailyFees: dailyFee.toString(), + dailyLPProvidersRevenue: (dailyFee * 0.7).toString(), + dailyProtocolAccumulation: (dailyFee * 0.3).toString(), + }; + }; + return fetch +}; + + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.SEI]: { + fetch: graphs(endpoints), + start: 79157663, + meta: { + methodology + } + } + } +} + +export default adapter; From 9d8225a019c760fbd6661738429a833fa5912811 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 8 Jun 2024 16:49:07 +0000 Subject: [PATCH 0751/1590] fix spike --- options/smilee-finance/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/options/smilee-finance/index.ts b/options/smilee-finance/index.ts index 00e824a003..f5be64e458 100644 --- a/options/smilee-finance/index.ts +++ b/options/smilee-finance/index.ts @@ -48,7 +48,11 @@ const fetch: Fetch = async (timestamp) => { timestampTo: timestamp, }) as { trades: Trade[] }; - tradeResponse.trades.forEach((trade: Trade) => { + tradeResponse.trades + .filter((i) => Number(i.notionalUp)/1e6 < 100_000_000) + .filter((i) => Number(i.notionalDown)/1e6 < 100_000_000) + .filter((i) => Number(i.premium)/1e6 < 100_000_000) + .forEach((trade: Trade) => { tradedNotional.add('usd', (Number(trade.notionalUp) + Number(trade.notionalDown)) / 1e6, { skipChain: true }); tradedPremium.add('usd', Number(trade.premium) / 1e6, { skipChain: true }); }); From 64084a8ad5817ab4ef101a7a09080bc06585d935 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 8 Jun 2024 17:03:39 +0000 Subject: [PATCH 0752/1590] fix spkie --- options/smilee-finance/index.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/options/smilee-finance/index.ts b/options/smilee-finance/index.ts index f5be64e458..779ec4cb99 100644 --- a/options/smilee-finance/index.ts +++ b/options/smilee-finance/index.ts @@ -1,5 +1,5 @@ import { gql, request } from "graphql-request"; -import { Fetch, FetchResultOptions } from "../../adapters/types"; +import { Fetch, FetchOptions, FetchResultOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import * as sdk from "@defillama/sdk"; @@ -34,8 +34,7 @@ const cumulativeStatsQuery = gql` } }`; -const fetch: Fetch = async (timestamp) => { - const timestampFrom = timestamp - 60 * 60 * 24; +const fetch: Fetch = async (timestamp, _: any, options: FetchOptions) => { const tradedNotional = new sdk.Balances({ chain: CHAIN.ARBITRUM, timestamp }); const tradedPremium = new sdk.Balances({ chain: CHAIN.ARBITRUM, timestamp }); @@ -44,14 +43,14 @@ const fetch: Fetch = async (timestamp) => { // Fetching daily trades const tradeResponse = await request(SUBGRAPH_URL, tradeQuery, { - timestampFrom, - timestampTo: timestamp, + timestampFrom: options.fromTimestamp, + timestampTo: options.toTimestamp, }) as { trades: Trade[] }; tradeResponse.trades - .filter((i) => Number(i.notionalUp)/1e6 < 100_000_000) - .filter((i) => Number(i.notionalDown)/1e6 < 100_000_000) - .filter((i) => Number(i.premium)/1e6 < 100_000_000) + .filter((i) => Number(i.notionalUp)/1e6 < 10_000_000) + .filter((i) => Number(i.notionalDown)/1e6 < 10_000_000) + .filter((i) => Number(i.premium)/1e6 < 10_000_000) .forEach((trade: Trade) => { tradedNotional.add('usd', (Number(trade.notionalUp) + Number(trade.notionalDown)) / 1e6, { skipChain: true }); tradedPremium.add('usd', Number(trade.premium) / 1e6, { skipChain: true }); @@ -64,7 +63,7 @@ const fetch: Fetch = async (timestamp) => { // Building fetch result const fetchResult: FetchResultOptions = { - timestamp: timestampFrom, + timestamp: options.toTimestamp, dailyNotionalVolume: await tradedNotional.getUSDString(), dailyPremiumVolume: await tradedPremium.getUSDString(), // totalNotionalVolume: BigInt.(statsResponse.protocolStatistics.cumulativeVolume) / 1e6, From 4c430cab1b8d334051d1866b2346eb30c61d819a Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 9 Jun 2024 03:05:52 +0100 Subject: [PATCH 0753/1590] kyberswap agg --- fees/kyberswap-aggregator.ts | 27 ++++++++++++++++++++++++++ helpers/token.ts | 37 +++++++++++++++++++++++++++++------- 2 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 fees/kyberswap-aggregator.ts diff --git a/fees/kyberswap-aggregator.ts b/fees/kyberswap-aggregator.ts new file mode 100644 index 0000000000..7996b0ed1a --- /dev/null +++ b/fees/kyberswap-aggregator.ts @@ -0,0 +1,27 @@ +import { CHAIN } from "../helpers/chains" +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { addTokensReceived } from "../helpers/token"; + +const chains = [CHAIN.ETHEREUM, CHAIN.ARBITRUM, CHAIN.OPTIMISM, CHAIN.ERA, CHAIN.POLYGON, CHAIN.BASE, CHAIN.BSC, CHAIN.LINEA, CHAIN.SCROLL, CHAIN.AVAX, CHAIN.FANTOM, +// disabled chains: CHAIN.MANTLE, CHAIN.BLAST, CHAIN.CRONOS, CHAIN.POLYGON_ZKEVM, +] + +const feeCollector = "0x4f82e73edb06d29ff62c91ec8f5ff06571bdeb29" +async function fetch(options:FetchOptions){ + // MISSING INTERNAL ETH TRANSFERS! + const dailyFees = await addTokensReceived({target: feeCollector, options}) + return {dailyFees, dailyRevenue: dailyFees } +} + +export default { + adapter: + chains.reduce((acc, curr)=>({ + ...acc, + [curr]:{ + fetch: fetch, + start: 1683893231 + } + }), {}) + , + version: 2 +} as SimpleAdapter; diff --git a/helpers/token.ts b/helpers/token.ts index e98aa7a73b..0600a58814 100644 --- a/helpers/token.ts +++ b/helpers/token.ts @@ -66,19 +66,23 @@ export async function addTokensReceived(params: { throw new Error('target/fromAddressFilter or targets required') } - - if (!tokens && target && fetchTokenList) { - if (!ankrChainMapping[chain]) throw new Error('Chain Not supported: ' + chain) - const ankrTokens = await ankrGetTokens(target, { onlyWhitelisted: true }) - tokens = ankrTokens[ankrChainMapping[chain]] ?? [] + const toAddressFilter = target ? ethers.zeroPadValue(target, 32) : null + if (fromAddressFilter) fromAddressFilter = ethers.zeroPadValue(fromAddressFilter, 32) + + if (!tokens && target) { + if(fetchTokenList){ + if (!ankrChainMapping[chain]) throw new Error('Chain Not supported: ' + chain) + const ankrTokens = await ankrGetTokens(target, { onlyWhitelisted: true }) + tokens = ankrTokens[ankrChainMapping[chain]] ?? [] + } else { + return getAllTransfers(fromAddressFilter, toAddressFilter, balances, tokenTransform, options) + } } if (!tokens?.length) return balances tokens = getUniqueAddresses(tokens.filter(i => !!i), options.chain) - const toAddressFilter = target ? ethers.zeroPadValue(target, 32) : null - if (fromAddressFilter) fromAddressFilter = ethers.zeroPadValue(fromAddressFilter, 32) const logs = await getLogs({ targets: tokens, flatten: false, @@ -174,6 +178,25 @@ async function ankrGetTokens(address: string, { onlyWhitelisted = true }: { } } +async function getAllTransfers(fromAddressFilter: string|null, toAddressFilter: string|null, + balances:sdk.Balances, tokenTransform: (token:string)=>string, options: FetchOptions) { + const hexlify = (n: number) => "0x" + n.toString(16) + const filter = { + fromBlock: hexlify(await options.getFromBlock()), + toBlock: hexlify(await options.getToBlock()), + topics: [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", // Transfer(address,address,uint256) + fromAddressFilter, + toAddressFilter + ] + }; + const transfers = await options.api.provider.getLogs(filter) + transfers.forEach((log) => { + balances.add(tokenTransform(log.address), BigInt(log.data)) + }) + return balances +} + export async function getTokenDiff(params: { target?: string; targets?: string[]; From e2b65742060168608fd20b20bf747a763aa93f51 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 9 Jun 2024 03:23:40 +0100 Subject: [PATCH 0754/1590] fix kyber agg --- aggregators/kyberswap/index.ts | 117 ++++++++++++++++----------------- 1 file changed, 58 insertions(+), 59 deletions(-) diff --git a/aggregators/kyberswap/index.ts b/aggregators/kyberswap/index.ts index 421663a2a2..10f0dffed5 100644 --- a/aggregators/kyberswap/index.ts +++ b/aggregators/kyberswap/index.ts @@ -1,7 +1,6 @@ import { httpGet } from "../../utils/fetchURL"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; -import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; const chainToId: Record = { [CHAIN.ETHEREUM]: 1, @@ -37,65 +36,65 @@ const fetch = async (_a: any, _b: any, options: FetchOptions) => { }; }; -const adapter: SimpleAdapter = { +const adapter = { version: 1, adapter: { - // [CHAIN.BASE]: { - // fetch: fetch, - // start: 1622544000, - // }, - // [CHAIN.MANTLE]: { - // fetch: fetch, - // start: 1622544000, - // }, - // [CHAIN.BLAST]: { - // fetch: fetch, - // start: 1622544000, - // }, - // [CHAIN.POLYGON_ZKEVM]: { - // fetch: fetch, - // start: 1622544000, - // }, - // // [CHAIN.BITTORRENT]: { - // // fetch: fetch, - // // start: 1622544000, - // // }, - // [CHAIN.ETHEREUM]: { - // fetch: fetch, - // start: 1622544000, - // }, - // [CHAIN.ARBITRUM]: { - // fetch: fetch, - // start: 1632268800, - // }, - // [CHAIN.AVAX]: { - // fetch: fetch, - // start: 1622544000, - // }, - // [CHAIN.BSC]: { - // fetch: fetch, - // start: 1622544000, - // }, - // [CHAIN.FANTOM]: { - // fetch: fetch, - // start: 1622544000, - // }, - // [CHAIN.OPTIMISM]: { - // fetch: fetch, - // start: 1632268800, - // }, - // [CHAIN.POLYGON]: { - // fetch: fetch, - // start: 1622544000, - // }, - // [CHAIN.LINEA]: { - // fetch: fetch, - // start: 1632268800, - // }, - // [CHAIN.SCROLL]: { - // fetch: fetch, - // start: 1632268800, - // }, + [CHAIN.BASE]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.MANTLE]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.BLAST]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.POLYGON_ZKEVM]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.BITTORRENT]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.ETHEREUM]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.ARBITRUM]: { + fetch: fetch, + start: 1632268800, + }, + [CHAIN.AVAX]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.BSC]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.FANTOM]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.OPTIMISM]: { + fetch: fetch, + start: 1632268800, + }, + [CHAIN.POLYGON]: { + fetch: fetch, + start: 1622544000, + }, + [CHAIN.LINEA]: { + fetch: fetch, + start: 1632268800, + }, + [CHAIN.SCROLL]: { + fetch: fetch, + start: 1632268800, + }, [CHAIN.ERA]: { fetch: fetch, start: 1632268800, From ff5364ea7b3ceab597ac48b0699c7929908c9a0f Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 9 Jun 2024 04:28:49 +0100 Subject: [PATCH 0755/1590] disable bittorrent --- aggregators/kyberswap/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aggregators/kyberswap/index.ts b/aggregators/kyberswap/index.ts index 10f0dffed5..73255f892f 100644 --- a/aggregators/kyberswap/index.ts +++ b/aggregators/kyberswap/index.ts @@ -55,10 +55,10 @@ const adapter = { fetch: fetch, start: 1622544000, }, - [CHAIN.BITTORRENT]: { + /*[CHAIN.BITTORRENT]: { fetch: fetch, start: 1622544000, - }, + },*/ [CHAIN.ETHEREUM]: { fetch: fetch, start: 1622544000, From a1b61b7919109947d0ec30891e48fb98417d7e78 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 9 Jun 2024 12:36:38 +0200 Subject: [PATCH 0756/1590] update fetch all token transfers method --- fees/summer.fi/index.ts | 1 - fees/zerion-wallet.ts | 2 +- helpers/token.ts | 21 ++++++++++----------- package-lock.json | 6 +++--- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/fees/summer.fi/index.ts b/fees/summer.fi/index.ts index 3a9ac8281f..5aa46cb316 100644 --- a/fees/summer.fi/index.ts +++ b/fees/summer.fi/index.ts @@ -28,7 +28,6 @@ const fetch: FetchV2 = async (options) => { const dailyFees = await addTokensReceived({ options, target: contracts[options.chain].address, - fetchTokenList: true, }); return { diff --git a/fees/zerion-wallet.ts b/fees/zerion-wallet.ts index 6df1d94404..470c92cab2 100644 --- a/fees/zerion-wallet.ts +++ b/fees/zerion-wallet.ts @@ -19,7 +19,7 @@ const multisigs: TMulitsig = { const fetch: any = async (timestamp: number, _: any, options: FetchOptions): Promise => { const dailyFees = await addGasTokensReceived({ multisigs: multisigs[options.chain], options }) - await addTokensReceived({ targets: multisigs[options.chain], options, balances: dailyFees, fetchTokenList: true, }) + await addTokensReceived({ targets: multisigs[options.chain], options, balances: dailyFees,}) return { timestamp, dailyFees, dailyRevenue: dailyFees, dailyProtocolRevenue: dailyFees, } } diff --git a/helpers/token.ts b/helpers/token.ts index 0600a58814..c7bf258997 100644 --- a/helpers/token.ts +++ b/helpers/token.ts @@ -180,19 +180,18 @@ async function ankrGetTokens(address: string, { onlyWhitelisted = true }: { async function getAllTransfers(fromAddressFilter: string|null, toAddressFilter: string|null, balances:sdk.Balances, tokenTransform: (token:string)=>string, options: FetchOptions) { - const hexlify = (n: number) => "0x" + n.toString(16) - const filter = { - fromBlock: hexlify(await options.getFromBlock()), - toBlock: hexlify(await options.getToBlock()), + const logs = await options.getLogs({ topics: [ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", // Transfer(address,address,uint256) - fromAddressFilter, - toAddressFilter - ] - }; - const transfers = await options.api.provider.getLogs(filter) - transfers.forEach((log) => { - balances.add(tokenTransform(log.address), BigInt(log.data)) + fromAddressFilter as any, + toAddressFilter as any + ], + eventAbi: 'event Transfer (address indexed from, address indexed to, uint256 value)', + entireLog: true, + }) + + logs.forEach((log) => { + balances!.add(tokenTransform(log.address), log.data) }) return balances } diff --git a/package-lock.json b/package-lock.json index b87fc6254e..1d350f409c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.64", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.64.tgz", - "integrity": "sha512-QQaqekANToxgWryU+2esEHaQqVdP09ds1QR3nmIQUxlxwfMpTNCM4/09kRJAiFFEpwC8fOzxWOP63tcRgA96QQ==", + "version": "5.0.65", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.65.tgz", + "integrity": "sha512-/0NQ8lyWqRWfjG7mEkVvl3zyoTRsKC3KzdKBDWm0Y+rHeHX5SpGSSnm9JsclVDCzhXov9MTUAhiijNqf++HkZg==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From e18720a52d4a2d60b649793b6fb5794f5dd1c80c Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 10 Jun 2024 08:14:47 +0100 Subject: [PATCH 0757/1590] add chains to bebop --- aggregators/bebop/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/aggregators/bebop/index.ts b/aggregators/bebop/index.ts index ea98ed16a4..b2da38f483 100644 --- a/aggregators/bebop/index.ts +++ b/aggregators/bebop/index.ts @@ -117,6 +117,10 @@ const adapter: any = { blast: { fetch, start: 1685491200, }, era: { fetch, start: 1685491200, }, optimism: { fetch, start: 1685491200, }, + mode: { fetch, start: 1685491200, }, + base: { fetch, start: 1685491200, }, + scroll: { fetch, start: 1685491200, }, + taiko: { fetch, start: 1685491200, }, }, }; From d2145715b25e2a23a99fb8ef03f6bf924d0ae00d Mon Sep 17 00:00:00 2001 From: MrJeleika Date: Mon, 10 Jun 2024 10:21:38 +0300 Subject: [PATCH 0758/1590] feat: injex finance --- aggregators/injex/index.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 aggregators/injex/index.ts diff --git a/aggregators/injex/index.ts b/aggregators/injex/index.ts new file mode 100644 index 0000000000..6f876f988b --- /dev/null +++ b/aggregators/injex/index.ts @@ -0,0 +1,22 @@ +import { httpGet } from '../../utils/fetchURL'; + +const fetchLogs = async (timestamp: any) => { + const res = await httpGet(`https://injex-api-cb4a9db30875.herokuapp.com/api/volume-stats/usd?timestamp=${timestamp.startOfDay}`); + return { + dailyVolume: res.dailyVolume, + totalVolume: res.totalVolume, + timestamp: timestamp.startOfDay, + }; +}; + +const adapter: any = { + version: 2, + adapter: { + injective: { + fetch: fetchLogs, + start: 1716411599, + }, + }, +}; + +export default adapter; From 891226e9cc88600c16be1d6114357f854b96d594 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 10 Jun 2024 09:07:52 +0000 Subject: [PATCH 0759/1590] fix v2 --- dexs/keller/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/keller/index.ts b/dexs/keller/index.ts index 47fc4d981c..ee270f17e0 100644 --- a/dexs/keller/index.ts +++ b/dexs/keller/index.ts @@ -1,4 +1,4 @@ -import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, Fetch, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getDexVolumeExports, getDexVolumeExportsV3 } from "../../helpers/dexVolumeLogs"; @@ -8,7 +8,7 @@ const adapter: SimpleAdapter = { version: 2, adapter: { [CHAIN.SCROLL]: { - fetch: getDexVolumeExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS }), + fetch: async (options: FetchOptions) => getDexVolumeExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS })(options.toTimestamp, null, options), start: 1710806400, } } From 4cbe737d76eb6371087dbd5f2cb86c22b393908b Mon Sep 17 00:00:00 2001 From: Reppelin Tom Date: Mon, 10 Jun 2024 13:28:28 +0200 Subject: [PATCH 0760/1590] feat(morpho-blue): adding base network into morpho blue --- fees/morpho/index.ts | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/fees/morpho/index.ts b/fees/morpho/index.ts index 9a2c1d3607..736f17fb98 100644 --- a/fees/morpho/index.ts +++ b/fees/morpho/index.ts @@ -12,9 +12,11 @@ type Market = { }; }; +const BLUE_API_ENDPOINT = "https://blue-api.morpho.org/graphql"; + const query = gql` - query { - markets { + query GetMarketsData($chainId: Int!) { + markets(where: { chainId_in: [$chainId] }) { items { loanAsset { address @@ -33,17 +35,18 @@ const query = gql` const apyToDaily = (apy: number): number => (((apy / 100 + 1) ** (1 / 365) - 1) * 365) / (0.01 * 365); -const fetch: FetchV2 = async (options) => { - const chain = "ethereum"; - const res = await request("https://blue-api.morpho.org/graphql", query); +const fetchMarkets = async (chainId: number, url: string) => { + const res = await request(url, query, { chainId }); let marketData: { dailySupplySideRevenue: Balances; dailyUserFees: Balances; dailyFees?: Balances; } = { - dailySupplySideRevenue: new Balances({ chain }), - dailyUserFees: new Balances({ chain }), + dailySupplySideRevenue: new Balances({ + chain: chainId === 1 ? "ethereum" : "base", + }), + dailyUserFees: new Balances({ chain: chainId === 1 ? "ethereum" : "base" }), }; res.markets.items.map((m: Market) => { @@ -62,12 +65,24 @@ const fetch: FetchV2 = async (options) => { return marketData; }; +const fetchEthereum: FetchV2 = async (options) => { + return fetchMarkets(1, BLUE_API_ENDPOINT); +}; + +const fetchBase: FetchV2 = async (options) => { + return fetchMarkets(8453, BLUE_API_ENDPOINT); +}; + const adapter: SimpleAdapter = { adapter: { ethereum: { - fetch, + fetch: fetchEthereum, start: 1704197610, }, + base: { + fetch: fetchBase, + start: 1714743643, + }, }, version: 2, }; From cca81c3f2a89224d028c6793a6adf8578f3fea25 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 10 Jun 2024 14:34:54 +0000 Subject: [PATCH 0761/1590] remove not use --- fees/capybara-exchange.ts | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 fees/capybara-exchange.ts diff --git a/fees/capybara-exchange.ts b/fees/capybara-exchange.ts deleted file mode 100644 index 79f6133587..0000000000 --- a/fees/capybara-exchange.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Adapter } from "../adapters/types"; -import volumeAdapter from "../dexs/capybara-exchange"; -import { getDexChainFees } from "../helpers/getUniSubgraphFees"; - -export default volumeAdapter; From a9ed2db1058e96562dfd58c333888181abc63988 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 10 Jun 2024 16:12:31 +0000 Subject: [PATCH 0762/1590] add wen-markets --- fees/wen-markets.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 fees/wen-markets.ts diff --git a/fees/wen-markets.ts b/fees/wen-markets.ts new file mode 100644 index 0000000000..4e355b1f41 --- /dev/null +++ b/fees/wen-markets.ts @@ -0,0 +1,36 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const wenFoundry: any = { + [CHAIN.POLYGON]: "0x3bb94837a91e22a134053b9f38728e27055ec3d1" +} +const event_buy = "event Buy(address indexed token,address indexed sender,uint256 amountIn,uint256 amountOut,address indexed to)" +const fetchFees = async (options: FetchOptions) => { + const amountIn = options.createBalances() + const logs = await options.getLogs({ + target: wenFoundry[options.chain], + eventAbi: event_buy, + flatten: false, + }) + logs.forEach((log: any) => { + amountIn.addGasToken(log.amountIn) + }) + const dailyFees = amountIn.clone() + dailyFees.resizeBy(0.01) // 1% of trading volume + + return { + dailyFees, + dailyRevenue: dailyFees, + dailyProtocolRevenue: dailyFees + } +} +const adapters: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.POLYGON]: { + fetch: fetchFees, + start: 1630000000 + }, + } +} +export default adapters; From d76372565c50e70db9457db78148d7ce83de45f3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 10 Jun 2024 16:29:04 +0000 Subject: [PATCH 0763/1590] add bootstrapped --- fees/wen-markets.ts | 65 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 10 deletions(-) diff --git a/fees/wen-markets.ts b/fees/wen-markets.ts index 4e355b1f41..40d7fd886f 100644 --- a/fees/wen-markets.ts +++ b/fees/wen-markets.ts @@ -1,23 +1,68 @@ import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -const wenFoundry: any = { - [CHAIN.POLYGON]: "0x3bb94837a91e22a134053b9f38728e27055ec3d1" +const wenLedger: any = { + [CHAIN.POLYGON]: "0x5574d1e44eFcc5530409fbE1568f335DaF83951c" +} +const abis: any = { + getStats: { + "inputs": [], + "name": "getStats", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "totalVolume", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalLiquidityBootstrapped", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalTokensCreated", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalTokensGraduated", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalTrades", + "type": "uint256" + } + ], + "internalType": "struct WenLedger.Stats", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } } -const event_buy = "event Buy(address indexed token,address indexed sender,uint256 amountIn,uint256 amountOut,address indexed to)" const fetchFees = async (options: FetchOptions) => { const amountIn = options.createBalances() - const logs = await options.getLogs({ - target: wenFoundry[options.chain], - eventAbi: event_buy, - flatten: false, + const bootstrapped = options.createBalances() + const fromStats = await options.fromApi.call({ + target: wenLedger[options.chain], + abi: abis.getStats, }) - logs.forEach((log: any) => { - amountIn.addGasToken(log.amountIn) + const toStats = await options.toApi.call({ + target: wenLedger[options.chain], + abi: abis.getStats, }) + bootstrapped.addGasToken(toStats.totalLiquidityBootstrapped - fromStats.totalLiquidityBootstrapped) + bootstrapped.resizeBy(0.07) // 7% of liquidity bootstrapped + amountIn.addGasToken(toStats.totalVolume - fromStats.totalVolume) const dailyFees = amountIn.clone() dailyFees.resizeBy(0.01) // 1% of trading volume - + dailyFees.addBalances(bootstrapped) return { dailyFees, dailyRevenue: dailyFees, From 04dcebab4a4c2b0898c1d7a8ed7d9d7f87e514e0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 10 Jun 2024 16:45:18 +0000 Subject: [PATCH 0764/1590] fix bootstrapped --- fees/wen-markets.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/wen-markets.ts b/fees/wen-markets.ts index 40d7fd886f..33c9bd2448 100644 --- a/fees/wen-markets.ts +++ b/fees/wen-markets.ts @@ -57,7 +57,7 @@ const fetchFees = async (options: FetchOptions) => { target: wenLedger[options.chain], abi: abis.getStats, }) - bootstrapped.addGasToken(toStats.totalLiquidityBootstrapped - fromStats.totalLiquidityBootstrapped) + bootstrapped.addGasToken((toStats.totalLiquidityBootstrapped - fromStats.totalLiquidityBootstrapped)/0.93) bootstrapped.resizeBy(0.07) // 7% of liquidity bootstrapped amountIn.addGasToken(toStats.totalVolume - fromStats.totalVolume) const dailyFees = amountIn.clone() From 285e40af3e261d3941e621e89712f77e173264b3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 10 Jun 2024 16:45:54 +0000 Subject: [PATCH 0765/1590] fix starttime; --- fees/wen-markets.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/wen-markets.ts b/fees/wen-markets.ts index 33c9bd2448..979afa5b2b 100644 --- a/fees/wen-markets.ts +++ b/fees/wen-markets.ts @@ -74,7 +74,7 @@ const adapters: SimpleAdapter = { adapter: { [CHAIN.POLYGON]: { fetch: fetchFees, - start: 1630000000 + start: 1716854400 }, } } From d9bb101d9ffa4b28f773d2622fa89c37846eedf6 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 10 Jun 2024 16:49:03 +0000 Subject: [PATCH 0766/1590] typo --- fees/wen-markets.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/wen-markets.ts b/fees/wen-markets.ts index 979afa5b2b..525f9141ad 100644 --- a/fees/wen-markets.ts +++ b/fees/wen-markets.ts @@ -47,7 +47,7 @@ const abis: any = { } } const fetchFees = async (options: FetchOptions) => { - const amountIn = options.createBalances() + const tradeVolume = options.createBalances() const bootstrapped = options.createBalances() const fromStats = await options.fromApi.call({ target: wenLedger[options.chain], @@ -59,8 +59,8 @@ const fetchFees = async (options: FetchOptions) => { }) bootstrapped.addGasToken((toStats.totalLiquidityBootstrapped - fromStats.totalLiquidityBootstrapped)/0.93) bootstrapped.resizeBy(0.07) // 7% of liquidity bootstrapped - amountIn.addGasToken(toStats.totalVolume - fromStats.totalVolume) - const dailyFees = amountIn.clone() + tradeVolume.addGasToken(toStats.totalVolume - fromStats.totalVolume) + const dailyFees = tradeVolume.clone() dailyFees.resizeBy(0.01) // 1% of trading volume dailyFees.addBalances(bootstrapped) return { From 9c0ad9e44cdf4be405546ec30211d940d2a92176 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 10 Jun 2024 22:23:46 +0100 Subject: [PATCH 0767/1590] format dates better --- cli/testAdapter.ts | 8 ++++---- cli/utils.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index 1c0c06a30b..6a257d081a 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -42,7 +42,7 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ const cleanDayTimestamp = process.argv[4] ? Number(process.argv[4]) : getUniqStartOfTodayTimestamp(new Date()) let endCleanDayTimestamp = cleanDayTimestamp; console.info(`🦙 Running ${process.argv[3].toUpperCase()} adapter 🦙`) - console.info(`_______________________________________`) + console.info(`---------------------------------------------------`) // Import module to test let module: Adapter = (await import(passedFile)).default const adapterVersion = module.version @@ -53,9 +53,9 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ checkIfFileExistsInMasterBranch(file) } - const runAt = adapterVersion === 2 ? endTimestamp : process.argv[4] ? Number(process.argv[4]) : endTimestamp - 1; - console.info(`${upperCaseFirst(adapterType)} for ${formatTimestampAsDate(String(getUniqStartOfTodayTimestamp(new Date((runAt * 1000)))))}`) - console.info(`_______________________________________\n`) + console.info(`Start Date:\t${new Date((endTimestamp - 3600*24)*1e3).toUTCString()}`) + console.info(`End Date:\t${new Date(endTimestamp*1e3).toUTCString()}`) + console.info(`---------------------------------------------------\n`) // Get closest block to clean day. Only for EVM compatible ones. const allChains = getChainsFromDexAdapter(module).filter(canGetBlock) diff --git a/cli/utils.ts b/cli/utils.ts index 95feec5748..13a90f147d 100644 --- a/cli/utils.ts +++ b/cli/utils.ts @@ -36,7 +36,7 @@ export function printVolumes(volumes: any[], baseAdapter?: BaseAdapter) { Object.entries(element).forEach(([attribute, value]) => { if (!exclude2Print.includes(attribute)) { const valueFormatted = typeof value === 'object' ? JSON.stringify(value, null, 2) : attribute === "timestamp" ? value + ` (${new Date((value as any) * 1e3).toISOString()})` : humanizeNumber(Number(value)) - console.info(`${camelCaseToSpaces(attribute)}: ${valueFormatted}`) + console.info(`${camelCaseToSpaces(attribute === "timestamp"?"endTimestamp":attribute)}: ${valueFormatted}`) if (valueFormatted !== undefined && typeof methodology === 'object' && methodology[attribute.slice(5)]) console.log("└─ Methodology:", methodology?.[attribute.slice(5)]) } From 57417df7c8ac703b5ed6e839aeed4da026f786c6 Mon Sep 17 00:00:00 2001 From: Bob Baxley Date: Tue, 11 Jun 2024 01:29:34 -0400 Subject: [PATCH 0768/1590] add maverick v2 and move maverick v1 away from subgraph data --- dexs/maverick/index.ts | 62 ++++++++++++----- dexs/maverick/maverick-v1.ts | 110 ++++++++++++++++++++++++++++++ dexs/maverick/maverick-v2.ts | 128 +++++++++++++++++++++++++++++++++++ dexs/maverick/maverick.ts | 119 -------------------------------- fees/maverick.ts | 66 +++++++++++------- 5 files changed, 322 insertions(+), 163 deletions(-) create mode 100644 dexs/maverick/maverick-v1.ts create mode 100644 dexs/maverick/maverick-v2.ts delete mode 100644 dexs/maverick/maverick.ts diff --git a/dexs/maverick/index.ts b/dexs/maverick/index.ts index d2cf308802..3e8ed2f8e8 100644 --- a/dexs/maverick/index.ts +++ b/dexs/maverick/index.ts @@ -1,25 +1,51 @@ // Maverick v1 volume -import { SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { fetchVolume } from "./maverick"; +import { fetchVolumeV1, maverickV1Factories } from "./maverick-v1"; +import { fetchVolumeV2, maverickV2Factories } from "./maverick-v2"; -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.ETHEREUM]: { - fetch: fetchVolume(CHAIN.ETHEREUM), - start: 1676851200, +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + v1: { + [CHAIN.BSC]: { + fetch: fetchVolumeV1(), + start: maverickV1Factories[CHAIN.BSC].startTimestamp, + }, + [CHAIN.BASE]: { + fetch: fetchVolumeV1(), + start: maverickV1Factories[CHAIN.BASE].startTimestamp, + }, + [CHAIN.ERA]: { + fetch: fetchVolumeV1(), + start: maverickV1Factories[CHAIN.ERA].startTimestamp, + }, + [CHAIN.ETHEREUM]: { + fetch: fetchVolumeV1(), + start: maverickV1Factories[CHAIN.ETHEREUM].startTimestamp, + }, }, - [CHAIN.ERA]: { - fetch: fetchVolume(CHAIN.ERA), - start: 1681257600, - }, - [CHAIN.BSC]: { - fetch: fetchVolume(CHAIN.BSC), - start: 29241049, - }, - [CHAIN.BASE]: { - fetch: fetchVolume(CHAIN.BASE), - start: 1489614, + v2: { + [CHAIN.BSC]: { + fetch: fetchVolumeV2(), + start: maverickV2Factories[CHAIN.BSC].startTimestamp, + }, + [CHAIN.BASE]: { + fetch: fetchVolumeV2(), + start: maverickV2Factories[CHAIN.BASE].startTimestamp, + }, + [CHAIN.ERA]: { + fetch: fetchVolumeV2(), + start: maverickV2Factories[CHAIN.ERA].startTimestamp, + }, + [CHAIN.ETHEREUM]: { + fetch: fetchVolumeV2(), + start: maverickV2Factories[CHAIN.ETHEREUM].startTimestamp, + }, + [CHAIN.ARBITRUM]: { + fetch: fetchVolumeV2(), + start: maverickV2Factories[CHAIN.ARBITRUM].startTimestamp, + }, }, }, }; diff --git a/dexs/maverick/maverick-v1.ts b/dexs/maverick/maverick-v1.ts new file mode 100644 index 0000000000..32eeff98ef --- /dev/null +++ b/dexs/maverick/maverick-v1.ts @@ -0,0 +1,110 @@ +import { CHAIN } from "../../helpers/chains"; +import { ChainBlocks, FetchOptions } from "../../adapters/types"; + +export const maverickV1Factories: { [key: string]: any } = { + [CHAIN.ETHEREUM]: { + factory: "0xEb6625D65a0553c9dBc64449e56abFe519bd9c9B", + startBlock: 17210220, + startTimestamp: 1683417601, + }, + [CHAIN.ERA]: { + factory: "0x2C1a605f843A2E18b7d7772f0Ce23c236acCF7f5", + startBlock: 3002730, + startTimestamp: 1683417601, + }, + [CHAIN.BSC]: { + factory: "0x76311728FF86054Ad4Ac52D2E9Ca005BC702f589", + startBlock: 29241049, + startTimestamp: 1687132801, + }, + [CHAIN.BASE]: { + factory: "0xB2855783a346735e4AAe0c1eb894DEf861Fa9b45", + startBlock: 1489614, + startTimestamp: 1689724801, + }, +}; + +const mavV2PoolCreated = + "event PoolCreated(address poolAddress,uint256 fee,uint256 tickSpacing,int32 activeTick,int256 lookback,uint64 protocolFeeRatio,address tokenA,address tokenB)"; + +const mavV2SwapEvent = + "event Swap(address sender,address recipient,bool tokenAIn,bool exactOutput,uint256 amountIn,uint256 amountOut,int32 activeTick)"; + +const getData = async (options: any, dataType: "volume" | "fee") => { + const factory = maverickV1Factories[options.chain].factory; + const factoryFromBlock = maverickV1Factories[options.chain].startBlock; + + let pools: string[]; + const logs = await options.getLogs({ + target: factory, + fromBlock: factoryFromBlock, + eventAbi: mavV2PoolCreated, + }); + + pools = logs.map((log: any) => log.poolAddress); + const tokenAs = await options.api.multiCall({ + abi: "address:tokenA", + calls: pools!, + }); + const tokenBs = await options.api.multiCall({ + abi: "address:tokenB", + calls: pools!, + }); + + const swapLogs = await options.getLogs({ + targets: pools, + eventAbi: mavV2SwapEvent, + flatten: false, + }); + + let fees = [] as any; + if (dataType == "fee") { + fees = await options.api.multiCall({ + abi: "function fee() view returns (uint256)", + calls: pools!, + }); + } + + swapLogs.forEach((log: any[], index: number) => { + const tokenA = tokenAs[index]; + const tokenB = tokenBs[index]; + if (!log.length) return; + log.forEach((i: any) => { + let amount = Number(i.amountIn); + let tokenAIn = Boolean(i.tokenAIn); + + if (dataType == "fee") { + let fee = fees[index]; + options.api.add(tokenAIn ? tokenA : tokenB, (amount * fee) / 1e18); + } else { + options.api.add(tokenAIn ? tokenA : tokenB, amount); + } + }); + }); + + let amount = await options.api.getBalancesV2(); + if (dataType == "fee") { + return { + timestamp: options.startOfDay, + dailyFees: amount, + dailyUserFees: amount, + }; + } else { + return { + timestamp: options.startOfDay, + dailyVolume: amount, + }; + } +}; + +export const fetchVolumeV1 = () => { + return async (options: FetchOptions) => { + return await getData(options, "volume"); + }; +}; + +export const fetchFeeV1 = () => { + return async (options: FetchOptions) => { + return await getData(options, "fee"); + }; +}; diff --git a/dexs/maverick/maverick-v2.ts b/dexs/maverick/maverick-v2.ts new file mode 100644 index 0000000000..49295d3acc --- /dev/null +++ b/dexs/maverick/maverick-v2.ts @@ -0,0 +1,128 @@ +import { CHAIN } from "../../helpers/chains"; +import { ChainBlocks, FetchOptions } from "../../adapters/types"; + +export const maverickV2Factories: { [key: string]: any } = { + [CHAIN.ETHEREUM]: { + factory: "0x0A7e848Aca42d879EF06507Fca0E7b33A0a63c1e", + startBlock: 20027236, + startTimestamp: 1717372801, + }, + [CHAIN.ARBITRUM]: { + factory: "0x0A7e848Aca42d879EF06507Fca0E7b33A0a63c1e", + startBlock: 219205177, + startTimestamp: 1717372801, + }, + [CHAIN.ERA]: { + factory: "0x7A6902af768a06bdfAb4F076552036bf68D1dc56", + startBlock: 35938167, + startTimestamp: 1717372801, + }, + [CHAIN.BSC]: { + factory: "0x0A7e848Aca42d879EF06507Fca0E7b33A0a63c1e", + startBlock: 39421941, + startTimestamp: 1717372801, + }, + [CHAIN.BASE]: { + factory: "0x0A7e848Aca42d879EF06507Fca0E7b33A0a63c1e", + startBlock: 15321281, + startTimestamp: 1717372801, + }, +}; + +const mavV2PoolCreated = `event PoolCreated(address poolAddress,uint8 protocolFeeRatio,uint256 feeAIn,uint256 feeBIn,uint256 tickSpacing,uint256 lookback,int32 activeTick,address tokenA,address tokenB,uint8 kinds,address accessor)`; + +const mavV2SwapEvent = + "event PoolSwap(address sender,address recipient,(uint256 amount,bool tokenAIn,bool exactOutput,int32 tickLimit) params,uint256 amountIn,uint256 amountOut)"; + +const getData = async (options: any, dataType: "volume" | "fee") => { + const factory = maverickV2Factories[options.chain].factory; + const factoryFromBlock = maverickV2Factories[options.chain].startBlock; + + let pools: string[]; + const logs = await options.getLogs({ + target: factory, + fromBlock: factoryFromBlock, + eventAbi: mavV2PoolCreated, + }); + + pools = logs.map((log: any) => log.poolAddress); + const tokenAs = await options.api.multiCall({ + abi: "address:tokenA", + calls: pools!, + }); + const tokenBs = await options.api.multiCall({ + abi: "address:tokenB", + calls: pools!, + }); + + const swapLogs = await options.getLogs({ + targets: pools, + eventAbi: mavV2SwapEvent, + topic: "0x103ed084e94a44c8f5f6ba8e3011507c41063177e29949083c439777d8d63f60", + flatten: false, + }); + + let feesA = [] as any; + let feesB = [] as any; + if (dataType == "fee") { + feesA = await options.api.multiCall({ + abi: "function fee(bool tokenAIn) view returns (uint256)", + calls: pools!.map((address: string) => ({ + target: address, + params: [true], + })), + }); + feesB = await options.api.multiCall({ + abi: "function fee(bool tokenAIn) view returns (uint256)", + calls: pools!.map((address: string) => ({ + target: address, + params: [false], + })), + }); + } + + swapLogs.forEach((log: any[], index: number) => { + const tokenA = tokenAs[index]; + const tokenB = tokenBs[index]; + if (!log.length) return; + log.forEach((i: any) => { + // element 3 is amount in + let amount = Number(i[3]); + // element 2,1 is tokenAIn + let tokenAIn = Boolean(i[2][1]); + + if (dataType == "fee") { + let fee = tokenAIn ? feesA[index] : feesB[index]; + options.api.add(tokenAIn ? tokenA : tokenB, (amount * fee) / 1e18); + } else { + options.api.add(tokenAIn ? tokenA : tokenB, amount); + } + }); + }); + + if (dataType == "fee") { + let totalFee = await options.api.getBalancesV2(); + return { + timestamp: options.startOfDay, + dailyFees: totalFee, + dailyUserFees: totalFee, + }; + } else { + return { + timestamp: options.startOfDay, + dailyVolume: await options.api.getBalancesV2(), + }; + } +}; + +export const fetchVolumeV2 = () => { + return async (options: FetchOptions) => { + return await getData(options, "volume"); + }; +}; + +export const fetchFeeV2 = () => { + return async (options: FetchOptions) => { + return await getData(options, "fee"); + }; +}; diff --git a/dexs/maverick/maverick.ts b/dexs/maverick/maverick.ts deleted file mode 100644 index 05cb3ba04b..0000000000 --- a/dexs/maverick/maverick.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { CHAIN } from "../../helpers/chains"; -import { ChainBlocks, FetchOptions } from "../../adapters/types"; -const { request, } = require("graphql-request"); - -const info: { [key: string]: any } = { - [CHAIN.ETHEREUM]: { - subgraph: "https://api.thegraph.com/subgraphs/name/maverick-protocol/maverick-mainnet-data", - }, - [CHAIN.ERA]: { - subgraph: - "https://api.studio.thegraph.com/query/36330/mav-zksync/version/latest", - }, - [CHAIN.BSC]: { - subgraph: - "https://api.thegraph.com/subgraphs/name/maverick-protocol/maverick-bnb-app", - }, - [CHAIN.BASE]: { - subgraph: - "https://api.studio.thegraph.com/query/42519/maverick-base/version/latest", - }, -}; - -const getData = async ({ chain, createBalances, startOfDay }: FetchOptions) => { - const dailyFees = createBalances(); - const totalFees = createBalances(); - const dailyUserFees = createBalances(); - const totalUserFees = createBalances(); - const dailyVolume = createBalances(); - const totalVolume = createBalances(); - - let returnCount = 1000; - let step = 0; - while (returnCount == 1000) { - const graphQL = `{ - poolDayStats( - orderBy: id - orderDirection: desc - first: 1000 - skip: ${step * 1000} - where: {timestamp: "${startOfDay}"} - ) { - id - pool { - id - tokenB { - id - decimals - } - tokenA { - id - decimals - } - tokenAVolume - tokenBVolume - fee - } - tokenAVolume - tokenBVolume - timestamp - } - }`; - - const data = await request(info[chain].subgraph, graphQL); - returnCount = data.poolDayStats.length; - step++; - - for (const dailyData of data.poolDayStats) { - const tokenAId = dailyData.pool.tokenA.id; - const tokenBId = dailyData.pool.tokenB.id; - const multiplierA = 10 ** dailyData.pool.tokenA.decimals; - const multiplierB = 10 ** dailyData.pool.tokenB.decimals; - dailyVolume.add(tokenAId, dailyData.tokenAVolume * multiplierA); - dailyVolume.add(tokenBId, dailyData.tokenBVolume * multiplierB); - dailyFees.add(tokenAId, dailyData.tokenAVolume * multiplierA * dailyData.pool.fee); - dailyFees.add(tokenBId, dailyData.tokenBVolume * multiplierB * dailyData.pool.fee); - - totalVolume.add(tokenAId, dailyData.pool.tokenAVolume * multiplierA); - totalVolume.add(tokenBId, dailyData.pool.tokenBVolume * multiplierB); - totalFees.add(tokenAId, dailyData.pool.tokenAVolume * multiplierA * dailyData.pool.fee); - totalFees.add(tokenBId, dailyData.pool.tokenBVolume * multiplierB * dailyData.pool.fee); - } - } - - return { - dailyFees, - totalFees, - dailyUserFees: dailyFees, - totalUserFees: totalFees, - totalVolume, - dailyVolume, - timestamp: startOfDay, - }; -}; - -export const fetchVolume = (_chain: string) => { - return async (_timestamp: number, _: ChainBlocks, options: FetchOptions) => { - const data = await getData(options); - - return { - // totalVolume: data.totalVolume, - dailyVolume: data.dailyVolume, - timestamp: data.timestamp, - }; - }; -}; - -export const fetchFee = (_chain: string) => { - return async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { - const data = await getData(options); - - return { - timestamp, - dailyFees: data.dailyFees, - // totalFees: data.totalFees, - dailyUserFees: data.dailyUserFees, - // totalUserFees: data.totalUserFees, - }; - }; -}; diff --git a/fees/maverick.ts b/fees/maverick.ts index e6f12f76b6..b4239cec08 100644 --- a/fees/maverick.ts +++ b/fees/maverick.ts @@ -1,7 +1,8 @@ // Maverick v1 fee -import { SimpleAdapter } from "../adapters/types"; +import { BreakdownAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { fetchFee } from "../dexs/maverick/maverick"; +import { fetchFeeV1, maverickV1Factories } from "../dexs/maverick/maverick-v1"; +import { fetchFeeV2, maverickV2Factories } from "../dexs/maverick/maverick-v2"; const methodology = { UserFees: "LPs collect 100% of the fee generated in a pool", @@ -10,34 +11,47 @@ const methodology = { TotalFees: "Cumulative all-time Fees", }; -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.ETHEREUM]: { - fetch: fetchFee(CHAIN.ETHEREUM), - start: 1676851200, - meta: { - methodology, +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + v1: { + [CHAIN.BSC]: { + fetch: fetchFeeV1(), + start: maverickV1Factories[CHAIN.BSC].startTimestamp, }, - }, - [CHAIN.ERA]: { - fetch: fetchFee(CHAIN.ERA), - start: 1681257600, - meta: { - methodology, + [CHAIN.BASE]: { + fetch: fetchFeeV1(), + start: maverickV1Factories[CHAIN.BASE].startTimestamp, }, - }, - [CHAIN.BSC]: { - fetch: fetchFee(CHAIN.BSC), - start: 29241049, - meta: { - methodology, + [CHAIN.ERA]: { + fetch: fetchFeeV1(), + start: maverickV1Factories[CHAIN.ERA].startTimestamp, + }, + [CHAIN.ETHEREUM]: { + fetch: fetchFeeV1(), + start: maverickV1Factories[CHAIN.ETHEREUM].startTimestamp, }, }, - [CHAIN.BASE]: { - fetch: fetchFee(CHAIN.BASE), - start: 1489614, - meta: { - methodology, + v2: { + [CHAIN.BSC]: { + fetch: fetchFeeV2(), + start: maverickV2Factories[CHAIN.BSC].startTimestamp, + }, + [CHAIN.BASE]: { + fetch: fetchFeeV2(), + start: maverickV2Factories[CHAIN.BASE].startTimestamp, + }, + [CHAIN.ERA]: { + fetch: fetchFeeV2(), + start: maverickV2Factories[CHAIN.ERA].startTimestamp, + }, + [CHAIN.ETHEREUM]: { + fetch: fetchFeeV2(), + start: maverickV2Factories[CHAIN.ETHEREUM].startTimestamp, + }, + [CHAIN.ARBITRUM]: { + fetch: fetchFeeV2(), + start: maverickV2Factories[CHAIN.ARBITRUM].startTimestamp, }, }, }, From 24da896b71f583c106d6209f457b824939f5526d Mon Sep 17 00:00:00 2001 From: Xavier Date: Tue, 11 Jun 2024 16:17:40 +0900 Subject: [PATCH 0769/1590] feat: add clober-v2 dex --- dexs/clober-v2/const.ts | 26 ++++++++++++ dexs/clober-v2/index.ts | 93 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 dexs/clober-v2/const.ts create mode 100644 dexs/clober-v2/index.ts diff --git a/dexs/clober-v2/const.ts b/dexs/clober-v2/const.ts new file mode 100644 index 0000000000..32c30a88c6 --- /dev/null +++ b/dexs/clober-v2/const.ts @@ -0,0 +1,26 @@ +import {CHAIN} from "../../helpers/chains"; + +export const CONTRACT_INFOS: Record = { + [CHAIN.BASE]: { + bookManagerContract: { + address: '0x382CCccbD3b142D7DA063bF68cd0c89634767F76', + fromBlock: 14528050, + abi: { + openEvent: 'event Open(uint192 indexed id, address indexed base, address indexed quote, uint64 unitSize, uint24 makerPolicy, uint24 takerPolicy, address hooks)', + takeEvent: 'event Take(uint192 indexed bookId, address indexed user, int24 tick, uint64 unit)' + } + } + }, + [CHAIN.ERA]: { + bookManagerContract: { + address: '0xAaA0e933e1EcC812fc075A81c116Aa0a82A5bbb8', + fromBlock: 34448160, + abi: { + openEvent: 'event Open(uint192 indexed id, address indexed base, address indexed quote, uint64 unitSize, uint24 makerPolicy, uint24 takerPolicy, address hooks)', + takeEvent: 'event Take(uint192 indexed bookId, address indexed user, int24 tick, uint64 unit)' + } + } + }, +} + +export const zeroAddress = '0x0000000000000000000000000000000000000000' diff --git a/dexs/clober-v2/index.ts b/dexs/clober-v2/index.ts new file mode 100644 index 0000000000..5308c9967f --- /dev/null +++ b/dexs/clober-v2/index.ts @@ -0,0 +1,93 @@ +import type {SimpleAdapter} from "../../adapters/types"; +import {FetchOptions, FetchResultV2, FetchV2} from "../../adapters/types"; +import {getTimestampAtStartOfDayUTC} from "../../utils/date" +import {CHAIN} from "../../helpers/chains"; +import {CONTRACT_INFOS} from "./const"; + +const fetch: FetchV2 = async (options: FetchOptions): Promise => { + const dayTimestamp = getTimestampAtStartOfDayUTC(options.toTimestamp) + + const dailyVolume = options.createBalances() + const totalVolume = options.createBalances() + + const bookInfos: any = {} + + const fromBlock = await options.getFromBlock(); + const toBlock = await options.getToBlock(); + const CONTRACT_INFO = CONTRACT_INFOS[options.chain]; + + const openEvents = await options.getLogs({ + target: CONTRACT_INFO.bookManagerContract.address, + fromBlock: CONTRACT_INFO.bookManagerContract.fromBlock, + eventAbi: CONTRACT_INFO.bookManagerContract.abi.openEvent, + onlyArgs: true, + }) + for (const open of openEvents) { + const bookId = open.id; + bookInfos[bookId] = { + quote: open.quote, + unitSize: open.unitSize, + } + } + + const totalTakeEvents = await options.getLogs({ + target: CONTRACT_INFO.bookManagerContract.address, + fromBlock: CONTRACT_INFO.bookManagerContract.fromBlock, + toBlock: toBlock, + eventAbi: CONTRACT_INFO.bookManagerContract.abi.takeEvent, + onlyArgs: true, + }) + const dailyTakeEvents = await options.getLogs({ + target: CONTRACT_INFO.bookManagerContract.address, + fromBlock: fromBlock, + toBlock: toBlock, + eventAbi: CONTRACT_INFO.bookManagerContract.abi.takeEvent, + onlyArgs: true, + }) + const takeEvents = [ + { + events: totalTakeEvents, + volume: totalVolume, + }, + { + events: dailyTakeEvents, + volume: dailyVolume, + }, + ] + for (const {events, volume} of takeEvents) { + for (const take of events) { + const bookId = take.bookId; + const bookInfo = bookInfos[bookId]; + if (!bookInfo) { + continue; + } + const quote = bookInfo.quote; + const quoteVolume = take.unit * bookInfo.unitSize; + volume.add(quote, quoteVolume); + } + } + + return { + dailyVolume: dailyVolume, + totalVolume: totalVolume, + timestamp: dayTimestamp, + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.BASE]: { + fetch: fetch, + runAtCurrTime: true, + start: 1717167600, + }, + [CHAIN.ERA]: { + fetch: fetch, + runAtCurrTime: true, + start: 1717167600, + }, + } +}; + +export default adapter; From 1b8f28e5a65a8639c24bb8a983614061382ebb5e Mon Sep 17 00:00:00 2001 From: Xavier Date: Tue, 11 Jun 2024 16:29:41 +0900 Subject: [PATCH 0770/1590] docs: add methodology to clober-v2 dex --- dexs/clober-v2/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dexs/clober-v2/index.ts b/dexs/clober-v2/index.ts index 5308c9967f..1d6f2d6a7d 100644 --- a/dexs/clober-v2/index.ts +++ b/dexs/clober-v2/index.ts @@ -81,11 +81,17 @@ const adapter: SimpleAdapter = { fetch: fetch, runAtCurrTime: true, start: 1717167600, + meta: { + methodology: 'Volume is calculated by summing the quote token volume of all trades on the protocol.', + } }, [CHAIN.ERA]: { fetch: fetch, runAtCurrTime: true, start: 1717167600, + meta: { + methodology: 'Volume is calculated by summing the quote token volume of all trades on the protocol.', + } }, } }; From bb6bf0198da1f5e2fe46fdc36a40769682e6dd3e Mon Sep 17 00:00:00 2001 From: Ishaan Singhal Date: Tue, 11 Jun 2024 02:12:57 -0700 Subject: [PATCH 0771/1590] update volume methodology --- dexs/shell-protocol/constants.ts | 1070 ++++++++++++++++++++++++++++++ dexs/shell-protocol/helpers.ts | 479 +++++++++++++ dexs/shell-protocol/index.ts | 21 +- 3 files changed, 1555 insertions(+), 15 deletions(-) create mode 100644 dexs/shell-protocol/constants.ts create mode 100644 dexs/shell-protocol/helpers.ts diff --git a/dexs/shell-protocol/constants.ts b/dexs/shell-protocol/constants.ts new file mode 100644 index 0000000000..f05194ab8b --- /dev/null +++ b/dexs/shell-protocol/constants.ts @@ -0,0 +1,1070 @@ +const POOL_DATA = { + "arbitrum-one": { + "DAI+USDC": { + address: "0x96c7dc9d473e621a1e3968cb862803eaede21888", + oceanId: "86270164020279270457882504196273935359968493071668180156634591477940032783414", + init_block: "36636559", + init_timestamp: 1668003543, + tokens: { + "6035551758411270646474335658514335349674717801108451006051182668568832578004": { + name: "DAI", + type: "ERC-20", + }, + "67271412857715135027962267816154255654502207397591045005455032686546771069218": { + name: "USDC.e", + type: "ERC-20", + }, + }, + type: "Shell" + }, + "USDT+USDC": { + address: "0x0cb736ea2ad425221c368407caafdd323b7bdc83", + oceanId: "79083523100770850082743952656854591086173719343826704660418696417194860926059", + init_block: "42075614", + init_timestamp: 1669702987, + tokens: { + "94403927151183364591870487470764120937216882736599114675039888021977646377740": { + name: "USDT", + type: "ERC-20", + }, + "67271412857715135027962267816154255654502207397591045005455032686546771069218": { + name: "USDC.e", + type: "ERC-20", + }, + }, + type: "Shell" + }, + Stablepool: { + address: "0x4f9d367636d5d2056f848803c11872fdbc2afc47", + oceanId: "50499815543108572175104934225903567768471344593830008376869981553060268559849", + init_block: "47423825", + init_timestamp: 1671494873, + tokens: { + "86270164020279270457882504196273935359968493071668180156634591477940032783414": { + name: "DAI+USDC", + type: "LP-TOKEN", + }, + "79083523100770850082743952656854591086173719343826704660418696417194860926059": { + name: "USDT+USDC", + type: "LP-TOKEN", + }, + }, + type: "Shell" + }, + "ETH+USD": { + address: "0xa2db39e781a5eee0eaa625dace6f097c17dff7ea", + oceanId: "27693504145523314218894589300395733675161932643753970852158242624431218756354", + init_block: "53417512", + init_timestamp: 1673855382, + tokens: { + "68598205499637732940393479723998335974150219832588297998851264911405221787060": { + name: "ETH", + type: "ERC-20", + }, + "50499815543108572175104934225903567768471344593830008376869981553060268559849": { + name: "Stablepool", + type: "LP-TOKEN", + }, + }, + type: "Shell" + }, + "WBTC+USD": { + address: "0x3402d87df0817b2a96b210b8873d33dd979c8d19", + oceanId: "6480478799218559580732937919612426141340033633546174499046941101679426262163", + init_block: "53417512", + init_timestamp: 1673855382, + tokens: { + "59141285909977308443388272935459943129132961051990188111045082080537753428204": { + name: "WBTC", + type: "ERC-20", + }, + "50499815543108572175104934225903567768471344593830008376869981553060268559849": { + name: "Stablepool", + type: "LP-TOKEN", + }, + }, + type: "Shell" + }, + "wstETH+ETH": { + address: "0x2eab95a938d1fabb1b62132bdb0c5a2405a57887", + oceanId: "26161836847743413948413034628704721503292768718421569713619308421179160924635", + init_block: "66475550", + init_timestamp: 1677873600, + tokens: { + "32724548576318001670556591985246081159609078531619344196326067264614400219953": { + name: "wstETH", + type: "ERC-20", + }, + "68598205499637732940393479723998335974150219832588297998851264911405221787060": { + name: "ETH", + type: "ERC-20", + }, + }, + type: "Shell" + }, + "ARB+ETH": { + address: "0xa16f40437213020a167c230e4667ff8f13640f75", + oceanId: "68515004581702575971665429209434508064197021588557669913848091771465963043386", + init_block: "78137705", + init_timestamp: 1680912000, + tokens: { + "15289338637746492243507508172075284374606272498339755847074708978610947567249": { + name: "ARB", + type: "ERC-20", + }, + "68598205499637732940393479723998335974150219832588297998851264911405221787060": { + name: "ETH", + type: "ERC-20", + }, + }, + type: "Shell" + }, + "TOUCOIN+ETH": { + address: "0x81f6f6664e8ece1e81bc9097084373c1dddb8daa", + oceanId: "70238467452623058468527174827445810334914491155089699502631234539680221277556", + init_block: "82253134", + init_timestamp: 1681948800, + tokens: { + "15808556184875223810048460736501637507395435268298861084424311766206176811454": { + name: "TOUCOIN", + type: "ERC-20", + }, + "68598205499637732940393479723998335974150219832588297998851264911405221787060": { + name: "ETH", + type: "ERC-20", + }, + }, + type: "Shell" + }, + "MAGIC+ETH": { + address: "0x0699645f2fd448398272ae07f82eee8d0388de1c", + oceanId: "108582900101494590745798316052054643639067348767864236727953179211932209525623", + init_block: "89077571", + init_timestamp: 1683676800, + tokens: { + "32579059836797942647105779116600635779018130912142677201118367918170517694627": { + name: "MAGIC", + type: "ERC-20", + }, + "68598205499637732940393479723998335974150219832588297998851264911405221787060": { + name: "ETH", + type: "ERC-20", + }, + }, + type: "Shell" + }, + "REUNI+ETH": { + address: "0x3917c74fdec42071e29461c849bceb81cbc3059c", + oceanId: "7453518040095615866313620376139838305458784864962987054364257726153447971877", + init_block: "106539130", + init_timestamp: 1688149532, + tokens: { + "5159943940022542831786931686149875617997271331367331992406615704720154440846": { + name: "REUNI", + type: "ERC-20", + }, + "68598205499637732940393479723998335974150219832588297998851264911405221787060": { + name: "ETH", + type: "ERC-20", + }, + }, + type: "Shell" + }, + "STG+ETH": { + address: "0xe043eb17cc12c3fd4f5eac765d0f1b965975f470", + oceanId: "25942847557684497966353865858489468088339168695395774319392946098495635065854", + init_block: "106544285", + init_timestamp: 1688150836, + tokens: { + "25188701624367602286863586734041950338476366818463077389075015866458016215753": { + name: "STG", + type: "ERC-20", + }, + "68598205499637732940393479723998335974150219832588297998851264911405221787060": { + name: "ETH", + type: "ERC-20", + }, + }, + type: "Shell" + }, + "COLLAB+ETH": { + address: "0x6d0f58fdd73a34cb012b0ba10695440cbf3f7476", + oceanId: "12019623494817756380437074616714970021545559996320236667034221720319302215223", + init_block: "", + init_timestamp: "", + tokens: { + "47031892645123413813452285580465101509871002082298663714739686269575691564264": { + name: "COLLAB", + type: "ERC-20", + }, + "68598205499637732940393479723998335974150219832588297998851264911405221787060": { + name: "ETH", + type: "ERC-20", + }, + }, + type: "Shell" + }, + }, +}; + +const POOL_DATA_V3 = { + "arbitrum-one": { + "SHELL+ETH": { + address: "0xc32a9fc5665affce85cf043472f718029577f7e0", + oceanId: "46864527747283260416172465674867187053251418815143623071567044305059723246874", + init_block: "174647445", + init_timestamp: 1706343578, + tokens: { + "55775470912842449128362975021839710091330191047929748450380616189704765485120": { + name: "SHELL", + type: "ERC-20", + }, + "68598205499637732940393479723998335974150219832588297998851264911405221787060": { + name: "ETH", + type: "ERC-20", + }, + }, + type: "Shell" + }, + "2CRV": { + address: "0x02b4ab3b517371d0bd71d325dbe7dfc0320742e4", + oceanId: "56805135409275017365251878438063985963672982213118458131256538763459274364291", + init_block: "174445053", + init_timestamp: 1706290849, + tokens: { + "67271412857715135027962267816154255654502207397591045005455032686546771069218": { + name: "USDC.e", + type: "ERC-20", + }, + "94403927151183364591870487470764120937216882736599114675039888021977646377740": { + name: "USDT", + type: "ERC-20", + }, + }, + type: "Curve", + externalPoolData: { + address: "0x7f90122BF0700F9E7e1F688fe926940E8839F353", + registryId: "main", + }, + }, + MIM3CRV: { + address: "0xc77030692f296bc53b7995f85e6d54cb679e1115", + oceanId: "56247553860588029018853451520286591218739793556013904791066477425992761504445", + init_block: "178790598", + init_timestamp: 1707425630, + tokens: { + "91722490995000427636075218300093964528492897954739277896713301331071869717571": { + name: "MIM", + type: "ERC-20", + }, + "56805135409275017365251878438063985963672982213118458131256538763459274364291": { + name: "2CRV", + type: "LP-TOKEN", + }, + }, + type: "Curve", + externalPoolData: { + address: "0x30dF229cefa463e991e29D42DB0bae2e122B2AC7", + registryId: "factory", + }, + }, + "crvUSD-USDC": { + address: "0xe428f7c5f9dc057fdcad4c5ff11301c10f78f6ed", + oceanId: "96830010867471238027255154228872174108968894109842904899653760555726997952563", + init_block: "191519727", + init_timestamp: 1710732841, + tokens: { + "67532563260917598181951841572684814967773477625354614038586498409914688218745": { + name: "crvUSD", + type: "ERC-20", + }, + "65497510402545399551520058037845653596132436094743325967104100149253253417279": { + name: "USDC", + type: "ERC-20", + }, + }, + type: "Curve", + externalPoolData: { + address: "0xec090cf6DD891D2d014beA6edAda6e05E025D93d", + registryId: "factory-stable-ng", + }, + }, + "crvUSD-USDT": { + address: "0x5c4826cba1cf3daa1a06a11d46070fc258d2645e", + oceanId: "21630455680440541917048860910544197139742439661378217401115488980888935043791", + init_block: "183277999", + init_timestamp: 1708590044, + tokens: { + "67532563260917598181951841572684814967773477625354614038586498409914688218745": { + name: "crvUSD", + type: "ERC-20", + }, + "94403927151183364591870487470764120937216882736599114675039888021977646377740": { + name: "USDT", + type: "ERC-20", + }, + }, + type: "Curve", + externalPoolData: { + address: "0x73aF1150F265419Ef8a5DB41908B700C32D49135", + registryId: "factory-stable-ng", + }, + }, + "crvUSD-FRAX": { + address: "0x7cdf1b25c74fc6562a75c86127a9ba4a650bfb9a", + oceanId: "87746299629492763459531514658987151891436814966645430819196234486961790363555", + init_block: "194179596", + init_timestamp: 1711400494, + tokens: { + "67532563260917598181951841572684814967773477625354614038586498409914688218745": { + name: "crvUSD", + type: "ERC-20", + }, + "5086067331732638080193725315844452957031597417411157230007610310066989168100": { + name: "FRAX", + type: "ERC-20", + }, + }, + type: "Curve", + externalPoolData: { + address: "0x2FE7AE43591E534C256A1594D326e5779E302Ff4", + registryId: "factory-stable-ng", + }, + }, + "crvUSD-USDC.e": { + address: "0x67f868b76a47fdc02540e9d977be95924a164bd5", + oceanId: "9903511510347662909465582287155028979434242292704913609635879322827229695658", + init_block: "193827209", + init_timestamp: 1711312231, + tokens: { + "67532563260917598181951841572684814967773477625354614038586498409914688218745": { + name: "crvUSD", + type: "ERC-20", + }, + "67271412857715135027962267816154255654502207397591045005455032686546771069218": { + name: "USDC.e", + type: "ERC-20", + }, + }, + type: "Curve", + externalPoolData: { + address: "0x3aDf984c937FA6846E5a24E0A68521Bdaf767cE1", + registryId: "factory-stable-ng", + }, + }, + "crvUSD-MIM": { + address: "0x0fd3eaac40225621390c7df6b8339af7fce31b12", + oceanId: "92867757628956361952024008281824550507023392228551477883673021304280118213833", + init_block: "181219935", + init_timestamp: 1708057546, + tokens: { + "67532563260917598181951841572684814967773477625354614038586498409914688218745": { + name: "crvUSD", + type: "ERC-20", + }, + "91722490995000427636075218300093964528492897954739277896713301331071869717571": { + name: "MIM", + type: "ERC-20", + }, + }, + type: "Curve", + externalPoolData: { + address: "0x4070C044ABc8d9d22447DFE4B032405970878d06", + registryId: "factory-stable-ng", + }, + }, + "wstETH-WETH-BPT": { + address: "0xa8cb454449143912159e066760c1cf3b92415b4a", + oceanId: "6221326419901973194768243650192682495765194747438031992552468391261990689817", + init_block: "176415505", + init_timestamp: 1706798102, + tokens: { + "32724548576318001670556591985246081159609078531619344196326067264614400219953": { + name: "wstETH", + type: "ERC-20", + }, + "107389195714870137694742846735951097405173041024247631974378186743297911362693": { + name: "WETH", + type: "ERC-20", + }, + }, + type: "Balancer", + externalPoolData: { + poolId: "0x9791d590788598535278552eecd4b211bfc790cb000000000000000000000498", + }, + }, + "rETH-WETH-BPT": { + address: "0x85482fec354e3959c7b7fb6d99b658db9b53a39c", + oceanId: "33230866528760364324509366705651160917859056531104451573851701352566795107079", + init_block: "176631118", + init_timestamp: 1706855971, + tokens: { + "107389195714870137694742846735951097405173041024247631974378186743297911362693": { + name: "WETH", + type: "ERC-20", + }, + "65697692034218081496653529939460146670386632488974804976166733454285361435508": { + name: "rETH", + type: "ERC-20", + }, + }, + type: "Balancer", + externalPoolData: { + poolId: "0xade4a71bb62bec25154cfc7e6ff49a513b491e81000000000000000000000497", + }, + }, + "ezETH-wstETH-BPT": { + address: "0x9f2b52085e0d17e3d1b299052ac99df5ba206fd8", + oceanId: "87583293452612841250520025267213631461697157069859304510018702462959608349510", + init_block: "197253965", + init_timestamp: 1712172613, + tokens: { + "97521216940859396985929621458628180000488672900711906345789006892556331338006": { + name: "ezETH", + type: "ERC-20", + }, + "32724548576318001670556591985246081159609078531619344196326067264614400219953": { + name: "wstETH", + type: "ERC-20", + }, + }, + type: "Balancer", + externalPoolData: { + poolId: "0xb61371ab661b1acec81c699854d2f911070c059e000000000000000000000516", + }, + }, + aArbWETH: { + address: "0xdef2a2572fd3cfc6e862ddf856ce5b51b1231e85", + oceanId: "", + init_block: "187440773", + init_timestamp: 1709668557, + tokens: { + "107389195714870137694742846735951097405173041024247631974378186743297911362693": { + name: "WETH", + type: "ERC-20", + }, + "32287189094433887732495178397695981907519138049525202807442741595969650957993": { + name: "aArbWETH", + type: "ERC-20", + }, + }, + type: "Aave", + }, + aArbDAI: { + address: "0x9cc9ce741b99392f592cee49ffc0a954f835120c", + oceanId: "", + init_block: "187436581", + init_timestamp: 1709667508, + tokens: { + "6035551758411270646474335658514335349674717801108451006051182668568832578004": { + name: "DAI", + type: "ERC-20", + }, + "46293440179860815442846138074669145181176812637822851616989775372005575298739": { + name: "aArbDAI", + type: "ERC-20", + }, + }, + type: "Aave", + }, + aArbUSDC: { + address: "0xe03bc2c0d75e3f759be67e5afba8c9242a7be8b1", + oceanId: "", + init_block: "187439714", + init_timestamp: 1709668294, + tokens: { + "67271412857715135027962267816154255654502207397591045005455032686546771069218": { + name: "USDC.e", + type: "ERC-20", + }, + "11173402814424780680347648560776202508592609406370572977719758819269100936273": { + name: "aArbUSDC", + type: "ERC-20", + }, + }, + type: "Aave", + }, + aArbUSDCn: { + address: "0x6428bb8d0e12bd3f8524f433c5cdaff8f2cbeb5f", + oceanId: "", + init_block: "185790043", + init_timestamp: 1709238983, + tokens: { + "65497510402545399551520058037845653596132436094743325967104100149253253417279": { + name: "USDC", + type: "ERC-20", + }, + "93035257646780654601219673806882269003567010963386764840663764243117029370673": { + name: "aArbUSDCn", + type: "ERC-20", + }, + }, + type: "Aave", + }, + aArbUSDT: { + address: "0x218406574f04fb7586583b86e253135acf56baef", + oceanId: "", + init_block: "186135366", + init_timestamp: 1709327720, + tokens: { + "94403927151183364591870487470764120937216882736599114675039888021977646377740": { + name: "USDT", + type: "ERC-20", + }, + "19486903687061128366226641069427279349272927175035037794030688853165107404828": { + name: "aArbUSDT", + type: "ERC-20", + }, + }, + type: "Aave", + }, + aArbWBTC: { + address: "0xa6485d25c44eb97d01369de7781e8614a4200c4e", + oceanId: "", + init_block: "187437125", + init_timestamp: 1709667641, + tokens: { + "59141285909977308443388272935459943129132961051990188111045082080537753428204": { + name: "WBTC", + type: "ERC-20", + }, + "101767238015240620684475239083233401505187715881293698502492037160064700768141": { + name: "aArbWBTC", + type: "ERC-20", + }, + }, + type: "Aave", + }, + aArbARB: { + address: "0xc44f80f509c73b463e3097a8ad308cdde9aa511b", + oceanId: "", + init_block: "187137201", + init_timestamp: 1709589936, + tokens: { + "15289338637746492243507508172075284374606272498339755847074708978610947567249": { + name: "ARB", + type: "ERC-20", + }, + "67113731696707448389784391517895044843361327522484211880606533823229502330722": { + name: "aArbARB", + type: "ERC-20", + }, + }, + type: "Aave", + }, + aArbwstETH: { + address: "0x51f29cac3ca66c80eb1e6f873c5dfb4116466d22", + oceanId: "", + init_block: "186135683", + init_timestamp: 1709327800, + tokens: { + "32724548576318001670556591985246081159609078531619344196326067264614400219953": { + name: "wstETH", + type: "ERC-20", + }, + "91093229841157604626313271672108285548592177277249487722925924721050955646824": { + name: "aArbwstETH", + type: "ERC-20", + }, + }, + type: "Aave", + }, + aArbrETH: { + address: "0xa31fc8119dc3df0ad89e8da57e5b3b5941cfb49b", + oceanId: "", + init_block: "187146467", + init_timestamp: 1709592516, + tokens: { + "65697692034218081496653529939460146670386632488974804976166733454285361435508": { + name: "rETH", + type: "ERC-20", + }, + "40177552568766901594577503394188203447699328835588919744826273671507118837490": { + name: "aArbrETH", + type: "ERC-20", + }, + }, + type: "Aave", + }, + aArbFRAX: { + address: "0xee7102828895a02f63633871f7ac796286fe670c", + oceanId: "", + init_block: "187146467", + init_timestamp: 1709592516, + tokens: { + "50860673317326380801937253158444529570315974174111572300076103100669891681007": { + name: "FRAX", + type: "ERC-20", + }, + "62737710164857693093828292272408067305395809108851898088764058485588468616985": { + name: "aArbFRAX", + type: "ERC-20", + }, + }, + type: "Aave", + }, + "PT-aUSDC-27JUN2024": { + address: "0x2535ef127dc6b5d478b805db58277d626d64f255", + oceanId: "", + init_block: "193153536", + init_timestamp: 1711143403, + tokens: { + "93035257646780654601219673806882269003567010963386764840663764243117029370673": { + name: "aArbUSDCn", + type: "ERC-20", + }, + "22158479876455523465132052222114921573855771147771930222773162206588024770301": { + name: "PT-aUSDC-27JUN2024", + type: "ERC-20", + }, + }, + type: "Pendle", + externalPoolData: { + metadata: "0xBa4A858d664Ddb052158168DB04AFA3cFF5CFCC8", + }, + }, + "YT-aUSDC-27JUN2024": { + address: "0x9a45bbd515121a5dd330891428165fff0ebe6533", + oceanId: "", + init_block: "193228848", + init_timestamp: 1711162272, + tokens: { + "93035257646780654601219673806882269003567010963386764840663764243117029370673": { + name: "aArbUSDCn", + type: "ERC-20", + }, + "34575906478927623152359410103621233312172185882077148157990762477739834035682": { + name: "YT-aUSDC-27JUN2024", + type: "ERC-20", + }, + }, + type: "Pendle", + externalPoolData: { + metadata: "0xBa4A858d664Ddb052158168DB04AFA3cFF5CFCC8", + }, + }, + "PT-rETH-26JUN2025": { + address: "0x90988aba8be06f4993df20dc95a50c71a12b74b8", + oceanId: "", + init_block: "195211129", + init_timestamp: 1711659187, + tokens: { + "65697692034218081496653529939460146670386632488974804976166733454285361435508": { + name: "rETH", + type: "ERC-20", + }, + "113984486213754292433428245469825086541760714876178679167623315101209615376248": { + name: "PT-rETH-26JUN2025", + type: "ERC-20", + }, + }, + type: "Pendle", + externalPoolData: { + metadata: "0x14FbC760eFaF36781cB0eb3Cb255aD976117B9Bd", + }, + }, + "YT-rETH-26JUN2025": { + address: "0x4873144dd892bba5b196f5ca14c091b35fabe14f", + oceanId: "", + init_block: "196977325", + init_timestamp: 1712102988, + tokens: { + "65697692034218081496653529939460146670386632488974804976166733454285361435508": { + name: "rETH", + type: "ERC-20", + }, + "15496211073448363950298098790681985432267884346172851336910641790557779081466": { + name: "YT-rETH-26JUN2025", + type: "ERC-20", + }, + }, + type: "Pendle", + externalPoolData: { + metadata: "0x14FbC760eFaF36781cB0eb3Cb255aD976117B9Bd", + }, + }, + "PT-ezETH-27JUN2024": { + address: "0x75e2b2b5290c47db74596ad634b019a0fa658ee9", + oceanId: "", + init_block: "196982923", + init_timestamp: 1712104399, + tokens: { + "97521216940859396985929621458628180000488672900711906345789006892556331338006": { + name: "ezETH", + type: "ERC-20", + }, + "21255544990739897682581236116373986414601870233534299979116490105453819368742": { + name: "PT-ezETH-27JUN2024", + type: "ERC-20", + }, + }, + type: "Pendle", + externalPoolData: { + metadata: "0x5e03c94fc5fb2e21882000a96df0b63d2c4312e2", + }, + }, + "YT-ezETH-27JUN2024": { + address: "0x7184f6bbe5e0d57ec8122560413668e1c7428cb0", + oceanId: "", + init_block: "199430087", + init_timestamp: 1712719119, + tokens: { + "97521216940859396985929621458628180000488672900711906345789006892556331338006": { + name: "ezETH", + type: "ERC-20", + }, + "55639919809206193568500842344773620127854206653949340632711507458136603356588": { + name: "YT-ezETH-27JUN2024", + type: "ERC-20", + }, + }, + type: "Pendle", + externalPoolData: { + metadata: "0x5e03c94fc5fb2e21882000a96df0b63d2c4312e2", + }, + }, + "PT-USDe-29AUG2024": { + address: "0xa8f37e857d0de88d3f13239e9229bcdac8786053", + oceanId: "", + init_block: "208736435", + init_timestamp: 1715074793, + tokens: { + "43097216419243339615480683813881147729783086182653928934910040896291310829654": { + name: "USDe", + type: "ERC-20", + }, + "108743081410830411492925255391025370276650592677553877715994729540596987151073": { + name: "PT-USDe-29AUG2024", + type: "ERC-20", + }, + }, + type: "Pendle", + externalPoolData: { + metadata: "0x2dfaf9a5e4f293bceede49f2dba29aacdd88e0c4", + }, + }, + "YT-USDe-29AUG2024": { + address: "0x0d8c8346e32dcd4083cf7434b5a5fa3d639f5fa5", + oceanId: "", + init_block: "208736435", + init_timestamp: 1715074793, + tokens: { + "43097216419243339615480683813881147729783086182653928934910040896291310829654": { + name: "USDe", + type: "ERC-20", + }, + "3218810948409087489564911893595970494325069414091822510566943926871605465391": { + name: "YT-USDe-29AUG2024", + type: "ERC-20", + }, + }, + type: "Pendle", + externalPoolData: { + metadata: "0x2dfaf9a5e4f293bceede49f2dba29aacdd88e0c4", + }, + }, + UNI: { + address: "0xc98675da140b7493448b986019933483400536ce", + oceanId: "", + init_block: "197623247", + init_timestamp: 1712265339, + tokens: {}, + type: "Uniswap", + }, + mooCurve2Pool: { + address: "0xe9fcbe88c96a56f0a32477406bdc27f80f4ef8d2", + oceanId: "", + init_block: "206170508", + init_timestamp: 1714427516, + tokens: { + "56805135409275017365251878438063985963672982213118458131256538763459274364291": { + name: "2CRV", + type: "LP-TOKEN", + }, + "67519689751198590455268252479366259960152206660586074518480803469592084720220": { + name: "mooCurve2Pool", + type: "ERC-20", + }, + }, + type: "Beefy", + externalPoolData: { + metadata: "curve-arb-2pool", + }, + }, + "mooCurveCrvUSD-USDC.e": { + address: "0xe9fcbe88c96a56f0a32477406bdc27f80f4ef8d2", + oceanId: "", + init_block: "206170508", + init_timestamp: 1714427516, + tokens: { + "9903511510347662909465582287155028979434242292704913609635879322827229695658": { + name: "crvUSD-USDC.e", + type: "LP-TOKEN", + }, + "75475707189745957832787429007302824076198891026655832860297822459514410408344": { + name: "mooCurveCrvUSD-USDC.e", + type: "ERC-20", + }, + }, + type: "Beefy", + externalPoolData: { + metadata: "curve-arb-crvusd-usdc.e", + }, + }, + "mooCurveCrvUSD-USDC": { + address: "0xe9fcbe88c96a56f0a32477406bdc27f80f4ef8d2", + oceanId: "", + init_block: "206170508", + init_timestamp: 1714427516, + tokens: { + "96830010867471238027255154228872174108968894109842904899653760555726997952563": { + name: "crvUSD-USDC", + type: "LP-TOKEN", + }, + "96335577909249586215342316106422069904464397103443552349219756345211174634729": { + name: "mooCurveCrvUSD-USDC", + type: "ERC-20", + }, + }, + type: "Beefy", + externalPoolData: { + metadata: "curve-arb-crvusd-usdc", + }, + }, + "mooCurveCrvUSD-USDT": { + address: "0xe9fcbe88c96a56f0a32477406bdc27f80f4ef8d2", + oceanId: "", + init_block: "206170508", + init_timestamp: 1714427516, + tokens: { + "21630455680440541917048860910544197139742439661378217401115488980888935043791": { + name: "crvUSD-USDT", + type: "LP-TOKEN", + }, + "114422817501810387655747963160637095180954150612499739306071997181890983272998": { + name: "mooCurveCrvUSD-USDT", + type: "ERC-20", + }, + }, + type: "Beefy", + externalPoolData: { + metadata: "curve-arb-crvusd-usdt", + }, + }, + "mooCurveCrvUSD-MIM": { + address: "0xe9fcbe88c96a56f0a32477406bdc27f80f4ef8d2", + oceanId: "", + init_block: "206170508", + init_timestamp: 1714427516, + tokens: { + "92867757628956361952024008281824550507023392228551477883673021304280118213833": { + name: "crvUSD-MIM", + type: "LP-TOKEN", + }, + "94456099924753924649148702377209899224932903322609952317520644765118077292344": { + name: "mooCurveCrvUSD-MIM", + type: "ERC-20", + }, + }, + type: "Beefy", + externalPoolData: { + metadata: "curve-arb-crvusd-mim", + }, + }, + "mooAbrcdbrMIM-2CRV": { + address: "0xe9fcbe88c96a56f0a32477406bdc27f80f4ef8d2", + oceanId: "", + init_block: "206170508", + init_timestamp: 1714427516, + tokens: { + "56247553860588029018853451520286591218739793556013904791066477425992761504445": { + name: "MIM3CRV", + type: "LP-TOKEN", + }, + "15576440120825720136006100386482497723566960296306656902679358379492901724876": { + name: "mooAbrcdbrMIM-2CRV", + type: "ERC-20", + }, + }, + type: "Beefy", + externalPoolData: { + metadata: "spell-mim-crv", + }, + }, + "mooBalancerArbwstETH-ETH": { + address: "0xe9fcbe88c96a56f0a32477406bdc27f80f4ef8d2", + oceanId: "", + init_block: "206170508", + init_timestamp: 1714427516, + tokens: { + "6221326419901973194768243650192682495765194747438031992552468391261990689817": { + name: "wstETH-WETH-BPT", + type: "LP-TOKEN", + }, + "44605810225174412184533351979235793773152336376173914031105481599543834119907": { + name: "mooBalancerArbwstETH-ETH", + type: "ERC-20", + }, + }, + type: "Beefy", + externalPoolData: { + metadata: "balancer-wsteth-weth-v3", + }, + }, + "mooBalancerArbETH-rETH": { + address: "0xe9fcbe88c96a56f0a32477406bdc27f80f4ef8d2", + oceanId: "", + init_block: "206170508", + init_timestamp: 1714427516, + tokens: { + "33230866528760364324509366705651160917859056531104451573851701352566795107079": { + name: "rETH-WETH-BPT", + type: "LP-TOKEN", + }, + "11673284798174487886367517892461860847832521034306076171090731998049164031862": { + name: "mooBalancerArbETH-rETH", + type: "ERC-20", + }, + }, + type: "Beefy", + externalPoolData: { + metadata: "balancer-weth-reth", + }, + }, + "mooAuraArbezETH-wstETH": { + address: "0xe9fcbe88c96a56f0a32477406bdc27f80f4ef8d2", + oceanId: "", + init_block: "206170508", + init_timestamp: 1714427516, + tokens: { + "87583293452612841250520025267213631461697157069859304510018702462959608349510": { + name: "ezETH-wstETH-BPT", + type: "LP-TOKEN", + }, + "13906327766104167821603618133457906999489435155916468837741767231750622296813": { + name: "mooAuraArbezETH-wstETH", + type: "ERC-20", + }, + }, + type: "Beefy", + externalPoolData: { + metadata: "aura-arb-ezeth-wsteth", + }, + }, + }, +}; + +const TOKEN_NAMES = { + "arbitrum-one": { + DAI: "6035551758411270646474335658514335349674717801108451006051182668568832578004", + "USDC.e": "67271412857715135027962267816154255654502207397591045005455032686546771069218", + USDT: "94403927151183364591870487470764120937216882736599114675039888021977646377740", + ETH: "68598205499637732940393479723998335974150219832588297998851264911405221787060", + WBTC: "59141285909977308443388272935459943129132961051990188111045082080537753428204", + wstETH: "32724548576318001670556591985246081159609078531619344196326067264614400219953", + ARB: "15289338637746492243507508172075284374606272498339755847074708978610947567249", + TOUCOIN: "15808556184875223810048460736501637507395435268298861084424311766206176811454", + COLLAB: "47031892645123413813452285580465101509871002082298663714739686269575691564264", + MAGIC: "32579059836797942647105779116600635779018130912142677201118367918170517694627", + "DAI+USDC": "86270164020279270457882504196273935359968493071668180156634591477940032783414", + "USDT+USDC": "79083523100770850082743952656854591086173719343826704660418696417194860926059", + Stablepool: "50499815543108572175104934225903567768471344593830008376869981553060268559849", + "ETH+USD": "27693504145523314218894589300395733675161932643753970852158242624431218756354", + "WBTC+USD": "6480478799218559580732937919612426141340033633546174499046941101679426262163", + "wstETH+ETH": "26161836847743413948413034628704721503292768718421569713619308421179160924635", + "ARB+ETH": "68515004581702575971665429209434508064197021588557669913848091771465963043386", + "TOUCOIN+ETH": "70238467452623058468527174827445810334914491155089699502631234539680221277556", + "MAGIC+ETH": "108582900101494590745798316052054643639067348767864236727953179211932209525623", + "REUNI+ETH": "7453518040095615866313620376139838305458784864962987054364257726153447971877", + REUNI: "5159943940022542831786931686149875617997271331367331992406615704720154440846", + "STG+ETH": "25942847557684497966353865858489468088339168695395774319392946098495635065854", + STG: "25188701624367602286863586734041950338476366818463077389075015866458016215753", + "COLLAB+ETH": "12019623494817756380437074616714970021545559996320236667034221720319302215223", + USDC: "65497510402545399551520058037845653596132436094743325967104100149253253417279", + "SHELL+ETH": "46864527747283260416172465674867187053251418815143623071567044305059723246874", + SHELL: "55775470912842449128362975021839710091330191047929748450380616189704765485120", + crvUSD: "67532563260917598181951841572684814967773477625354614038586498409914688218745", + FRAX: "50860673317326380801937253158444529570315974174111572300076103100669891681007", + MIM: "91722490995000427636075218300093964528492897954739277896713301331071869717571", + WETH: "107389195714870137694742846735951097405173041024247631974378186743297911362693", + rETH: "65697692034218081496653529939460146670386632488974804976166733454285361435508", + MIM3CRV: "56247553860588029018853451520286591218739793556013904791066477425992761504445", + aArbWETH: "32287189094433887732495178397695981907519138049525202807442741595969650957993", + aArbDAI: "46293440179860815442846138074669145181176812637822851616989775372005575298739", + aArbUSDC: "11173402814424780680347648560776202508592609406370572977719758819269100936273", + aArbUSDCn: "93035257646780654601219673806882269003567010963386764840663764243117029370673", + aArbUSDT: "19486903687061128366226641069427279349272927175035037794030688853165107404828", + aArbWBTC: "101767238015240620684475239083233401505187715881293698502492037160064700768141", + aArbARB: "67113731696707448389784391517895044843361327522484211880606533823229502330722", + aArbwstETH: "91093229841157604626313271672108285548592177277249487722925924721050955646824", + aArbrETH: "40177552568766901594577503394188203447699328835588919744826273671507118837490", + aArbFRAX: "62737710164857693093828292272408067305395809108851898088764058485588468616985", + "PT-aUSDC-27JUN2024": "22158479876455523465132052222114921573855771147771930222773162206588024770301", + "YT-aUSDC-27JUN2024": "34575906478927623152359410103621233312172185882077148157990762477739834035682", + "PT-rETH-26JUN2025": "113984486213754292433428245469825086541760714876178679167623315101209615376248", + "YT-rETH-26JUN2025": "15496211073448363950298098790681985432267884346172851336910641790557779081466", + "PT-ezETH-27JUN2024": "21255544990739897682581236116373986414601870233534299979116490105453819368742", + "YT-ezETH-27JUN2024": "55639919809206193568500842344773620127854206653949340632711507458136603356588", + ezETH: "97521216940859396985929621458628180000488672900711906345789006892556331338006", + mooCurve2Pool: "67519689751198590455268252479366259960152206660586074518480803469592084720220", + "mooCurveCrvUSD-USDC.e": "75475707189745957832787429007302824076198891026655832860297822459514410408344", + "mooCurveCrvUSD-USDC": "96335577909249586215342316106422069904464397103443552349219756345211174634729", + "mooCurveCrvUSD-USDT": "114422817501810387655747963160637095180954150612499739306071997181890983272998", + "mooCurveCrvUSD-MIM": "94456099924753924649148702377209899224932903322609952317520644765118077292344", + "mooAbrcdbrMIM-2CRV": "15576440120825720136006100386482497723566960296306656902679358379492901724876", + "mooBalancerArbwstETH-ETH": "44605810225174412184533351979235793773152336376173914031105481599543834119907", + "mooBalancerArbETH-rETH": "11673284798174487886367517892461860847832521034306076171090731998049164031862", + "mooAuraArbezETH-wstETH": "13906327766104167821603618133457906999489435155916468837741767231750622296813", + USDe: "43097216419243339615480683813881147729783086182653928934910040896291310829654", + "PT-USDe-29AUG2024": "108743081410830411492925255391025370276650592677553877715994729540596987151073", + "YT-USDe-29AUG2024": "3218810948409087489564911893595970494325069414091822510566943926871605465391", + }, +}; + +const MAINNET_SUBGRAPH_URL = "https://api.thegraph.com/subgraphs/name/kfeng22/shell-v2-arbitrum-one"; +const MAINNET_V3_SUBGRAPH_URL = "https://api.studio.thegraph.com/query/42384/shell-v3-arbitrum-one-rl/version/latest"; +const MAINNET_BLOCKS_URL = "https://api.thegraph.com/subgraphs/name/sushiswap/arbitrum-blocks"; + +const COIN_GECKO_IDS = { + DAI: "dai", + "USDC.e": "usd-coin-ethereum-bridged", + USDT: "tether", + ETH: "ethereum", + WBTC: "bitcoin", + wstETH: "wrapped-steth", + ARB: "arbitrum", + TOUCOIN: "government-toucans", + MAGIC: "magic", + COLLAB: "collab-land", + REUNI: "reunit-wallet", + STG: "stargate-finance", + USDC: "usd-coin", + SHELL: "shSHELL", + tUSDC: "true-usd", + tBTC: "tbtc", + crvUSD: "crvusd", + FRAX: "frax", + MIM: "magic-internet-money", + WETH: "weth", + rETH: "rocket-pool-eth", + MIM3CRV: "MIM3CRV", + aArbWETH: "aave-v3-weth", + aArbDAI: "aave-v3-dai", + aArbUSDC: "aave-v3-usdc-e", + aArbUSDCn: "aave-v3-usdc", + aArbUSDT: "aave-v3-usdt", + aArbWBTC: "aave-v3-wbtc", + aArbARB: "aave-v3-arb", + aArbwstETH: "aave-v3-wsteth", + aArbrETH: "aave-v3-reth", + aArbFRAX: "aave-v3-frax", + ezETH: "renzo-restaked-eth", + USDe: "ethena-usde", + USDbC: "bridged-usd-coin-base", + weETH: "wrapped-eeth", + cbETH: "coinbase-wrapped-staked-eth", + DEGEN: "degen-base", + AERO: "aerodrome-finance", +}; + +export { POOL_DATA, POOL_DATA_V3, TOKEN_NAMES, MAINNET_SUBGRAPH_URL, MAINNET_V3_SUBGRAPH_URL, MAINNET_BLOCKS_URL, COIN_GECKO_IDS }; diff --git a/dexs/shell-protocol/helpers.ts b/dexs/shell-protocol/helpers.ts new file mode 100644 index 0000000000..5797dcd24a --- /dev/null +++ b/dexs/shell-protocol/helpers.ts @@ -0,0 +1,479 @@ +import { POOL_DATA, POOL_DATA_V3, TOKEN_NAMES, MAINNET_SUBGRAPH_URL, MAINNET_V3_SUBGRAPH_URL, COIN_GECKO_IDS, MAINNET_BLOCKS_URL } from "./constants.ts"; + +function defineComputesQuery(poolAddress: string, timestamp: number, endTimestamp: number, inputLastId: string, outputLastId: string): string { + let computesQuery = ""; + if (inputLastId !== "-1") { + computesQuery += `computeInputAmounts (where:{externalContract: "${poolAddress}", timestamp_gte: ${timestamp}, timestamp_lte: ${endTimestamp}, id_gt: ${inputLastId}}, first: 1000){ id inputToken inputAmount outputToken outputAmount timestamp}`; + } + if (outputLastId !== "-1") { + computesQuery += `computeOutputAmounts (where:{externalContract: "${poolAddress}", timestamp_gte: ${timestamp}, timestamp_lte: ${endTimestamp}, id_gt: ${outputLastId}}, first: 1000){ id inputToken inputAmount outputToken outputAmount timestamp}`; + } + return `{${computesQuery}}`; +} + +function definePoolBalancesQuery(poolAddress: string, oceanId: string, blockNumber: number): string { + return ` + { + user (id: "${poolAddress}", block: {number: ${blockNumber}}){ + id + userBalances { + oceanId + balance + } + } + oceanToken (id: "${oceanId}", block: {number: ${blockNumber}}){ + supply + } + } + `; +} + +async function getPrices(chain: string): Promise<{ [key: string]: { usd: number } }> { + let prices: { [key: string]: { usd: number } } = {}; + + try { + const options = { + method: "GET", + headers: { + accept: "application/json", + "x-cg-demo-api-key": "CG-DfuTtr6HEjL8t2eD6MpyeLp5", + }, + }; + + prices = await fetch(`https://api.coingecko.com/api/v3/simple/price?ids=${Object.values(COIN_GECKO_IDS)}&vs_currencies=usd`, options).then((response) => + response.json() + ); + + const tokenBalancesTOUCOIN = await getTokenBalance(chain, "TOUCOIN+ETH"); + if (tokenBalancesTOUCOIN) { + prices["government-toucans"] = { + usd: (tokenBalancesTOUCOIN["ETH"] / tokenBalancesTOUCOIN["TOUCOIN"]) * prices.ethereum.usd, + }; + } + + const tokenBalancesSHELL = await getTokenBalance(chain, "SHELL+ETH", "v3"); + if (tokenBalancesSHELL) { + prices["shSHELL"] = { + usd: (tokenBalancesSHELL["ETH"] / tokenBalancesSHELL["SHELL"]) * prices.ethereum.usd, + }; + } + } catch (error) { + console.error("Error fetching prices:", error); + } + + return prices; +} + +async function getCurveAnalytics(chain: string, prices: { [key: string]: { usd: number } }, externalPoolData: { registryId: string; address: string }) { + const output: any = {}; + + const curveApiCallData = await fetch(`https://api.curve.fi/api/getPools/arbitrum/${externalPoolData.registryId}`).then((response) => response.json()); + const curveApiCall = curveApiCallData.data.poolData; + + for (const pool of curveApiCall) { + if (pool.address === externalPoolData.address) { + output.totalValueLocked = parseFloat(pool.usdTotal); + output.LPTokenPrice = parseFloat(pool.virtualPrice) / 1e18; + output.LPTokenBalance = parseFloat(pool.totalSupply) / 1e18; + + output.balances = {}; + output.breakdown = {}; + + for (const coin of pool.coins) { + const balance = parseFloat(coin.poolBalance) / Math.pow(10, parseInt(coin.decimals)); + const breakdown = Math.round(((balance * coin.usdPrice) / parseFloat(pool.usdTotal)) * 100); + + if (POOL_DATA_V3[chain][coin.symbol]) { + const poolTokenBalance = await getCurveAnalytics(chain, prices, POOL_DATA_V3[chain][coin.symbol].externalPoolData); + prices[coin.symbol] = { usd: poolTokenBalance.LPTokenPrice }; + for (const token in poolTokenBalance.breakdown) { + output.balances[token] = (balance * poolTokenBalance.breakdown[token]) / 100; + output.breakdown[token] = Math.round((breakdown * poolTokenBalance.breakdown[token]) / 100); + } + } else { + output.balances[coin.symbol] = balance; + output.breakdown[coin.symbol] = breakdown; + } + } + } + } + + return output; +} + +async function getBalancerAnalytics(chain: string, poolName: string, externalPoolData: { poolId: string }, ethPrice: number) { + const output: any = {}; + const apiCallData = await fetch(`https://api.balancer.fi/pools/42161/${externalPoolData.poolId}`).then((response) => response.json()); + + output.totalValueLocked = parseFloat(apiCallData.totalLiquidity); + output.LPTokenPrice = 0; + output.LPTokenBalance = parseFloat(apiCallData.totalShares); + output.breakdown = {}; + output.balances = {}; + + for (const token of apiCallData.tokens) { + if (poolName === token.symbol || token.token.pool) { + output.LPTokenPrice = parseFloat(token.token.latestUSDPrice); + continue; + } + output.balances[token.symbol] = parseFloat(token.balance); + output.breakdown[token.symbol] = Math.round(((output.balances[token.symbol] * parseFloat(token.priceRate) * ethPrice) / output.totalValueLocked) * 100); + } + + return output; +} + +async function getPoolData( + chain: string, + poolName: string, + prices: { [key: string]: { usd: number } }, + version: string, + startTime: number, + endTime: number +): Promise<{ + totalValueLocked: number; + LPTokenPrice: number; + LPTokenBalance: number; + breakdown: { [key: string]: number }; + balances: { [key: string]: number }; + "24HrVolume": number; +}> { + let pool = version === "v3" ? POOL_DATA_V3[chain][poolName] : POOL_DATA[chain][poolName]; + + let totalValueLocked: number = 0; + let LPTokenPrice: number = 0; + let LPTokenBalance: number = 0; + let breakdown: { [key: string]: number } = {}; + let balances: { [key: string]: number } = {}; + let volume: number = 0; + + let subTokenPrices: { [key: string]: number } = {}; + let fractalPoolData: { [key: string]: any } = {}; + + if (pool.type !== "Shell") { + if (pool.type == "Curve") { + const output = await getCurveAnalytics(chain, prices, pool.externalPoolData); + + totalValueLocked = output.totalValueLocked; + LPTokenPrice = output.LPTokenPrice; + LPTokenBalance = output.LPTokenBalance; + breakdown = output.breakdown; + balances = output.balances; + } else if (pool.type == "Balancer") { + const output = await getBalancerAnalytics(chain, poolName, pool.externalPoolData, prices[COIN_GECKO_IDS["ETH"]]["usd"]); + + totalValueLocked = output.totalValueLocked; + LPTokenPrice = output.LPTokenPrice; + LPTokenBalance = output.LPTokenBalance; + breakdown = output.breakdown; + balances = output.balances; + } else if (pool.type == "Aave") { + prices[poolName] = prices[(Object.values(pool.tokens)[0] as any).name]; + } else if (pool.type == "Pendle") { + const marketData = await fetch(`https://api-v2.pendle.finance/core/v1/42161/markets/${pool.externalPoolData.metadata}`).then((response) => + response.json() + ); + prices[poolName] = poolName.startsWith("PT-") ? marketData.pt.price.usd : marketData.yt.price.usd; + } else if (pool.type == "Beefy") { + const data = await fetch("https://api.beefy.finance/vaults").then((response) => response.json()); + prices[poolName] = { usd: parseFloat(data.find((obj) => obj.id == pool.externalPoolData.metadata).pricePerFullShare) / 1e18 }; + for (const token of Object.values(pool.tokens) as any[]) { + if (token.type == "LP-TOKEN") { + const subPoolName = token.name; + const subPoolData = await getPoolData(chain, subPoolName, prices, version, startTime, endTime); + subTokenPrices[subPoolName] = subPoolData.LPTokenPrice; + } + } + } + } else { + let tokenBalances: { [key: string]: number } = {}; + let userBalances: { [key: string]: string } = {}; + + let currentBalances = await queryPoolBalances(chain, poolName, version, startTime, endTime); + + currentBalances["user"]["userBalances"].forEach((userBalance: { [key: string]: string }) => { + userBalances[userBalance["oceanId"]] = userBalance["balance"]; + }); + + Object.keys(pool["tokens"]).forEach((token: string) => { + let tokenName = pool["tokens"][token]["name"]; + tokenBalances[tokenName] = parseInt(userBalances[token]) / 1e18; + }); + + LPTokenBalance = parseInt(currentBalances["oceanToken"]["supply"]) / 1e18; + + let sub_token_volume: number = 0; + + for (const token of Object.keys(pool.tokens)) { + let tokenType = pool["tokens"][token]["type"]; + let tokenName = pool["tokens"][token]["name"]; + + if (tokenType === "LP-TOKEN") { + let subTokenPoolData = await getPoolData(chain, tokenName, prices, version, startTime, endTime); + subTokenPrices[tokenName] = subTokenPoolData["LPTokenPrice"]; + Object.keys(subTokenPoolData["breakdown"]).forEach((subToken: string) => { + fractalPoolData[tokenName] = { + balanceInPool: tokenBalances[tokenName], + totalBalance: subTokenPoolData["LPTokenBalance"], + balancesBreakdown: subTokenPoolData["balances"], + "24HrVolume": subTokenPoolData["24HrVolume"], + }; + }); + } + } + + Object.keys(tokenBalances).forEach((token: string) => { + let tokenData = pool["tokens"][TOKEN_NAMES[chain][token]]; + + if (tokenData["type"] === "ERC-20" || tokenData["type"] === "ERC-1155") { + balances[token] = tokenBalances[token]; + } else if (tokenData["type"] === "LP-TOKEN") { + let tokenPercentage = fractalPoolData[token]["balanceInPool"] / fractalPoolData[token]["totalBalance"]; + sub_token_volume += tokenPercentage * fractalPoolData[token]["24HrVolume"]; + + Object.keys(fractalPoolData[token]["balancesBreakdown"]).forEach((subToken: string) => { + let tokenBalance = fractalPoolData[token]["balancesBreakdown"][subToken] * tokenPercentage; + if (balances[subToken]) { + balances[subToken] += tokenBalance; + } else { + balances[subToken] = tokenBalance; + } + }); + } + }); + + volume = sub_token_volume; + + Object.keys(balances).forEach((token: string) => { + totalValueLocked += balances[token] * prices[COIN_GECKO_IDS[token]]["usd"]; + }); + + Object.keys(balances).forEach((token: string) => { + breakdown[token] = Math.round(((balances[token] * prices[COIN_GECKO_IDS[token]]["usd"]) / totalValueLocked) * 100); + }); + + LPTokenPrice = totalValueLocked / LPTokenBalance; + } + + let namesToId = Object.fromEntries(Object.entries(TOKEN_NAMES[chain]).map(([k, v]) => [v, k])); + + let setOfTokens = [...Object.keys(pool["tokens"]), pool["oceanId"]]; + + let interactions = await queryPoolInteractions(chain, poolName, version, startTime, endTime); + + Object.keys(interactions).forEach((interactionType: string) => { + interactions[interactionType].forEach((interaction: { [key: string]: string }) => { + if ( + poolName == "UNI" || + (setOfTokens.includes(interaction["inputToken"]) && (interaction["outputToken"] === setOfTokens[0] || interaction["outputToken"] === setOfTokens[1])) + ) { + let price: number; + if (namesToId[interaction["inputToken"]] in subTokenPrices) { + price = subTokenPrices[namesToId[interaction["inputToken"]]]; + } else if (namesToId[interaction["inputToken"]] === poolName) { + price = LPTokenPrice; + } else { + price = prices[COIN_GECKO_IDS[namesToId[interaction["inputToken"]]]]["usd"]; + } + + volume += (parseInt(interaction["inputAmount"]) / 1e18) * price; + } + }); + }); + + return { + totalValueLocked, + LPTokenPrice, + LPTokenBalance, + breakdown, + balances, + "24HrVolume": volume, + }; +} + +// Function that defines the query to get the previous block before the start of a given date +function blockQuery(timestamp: number): string { + return ` + { + blocks(first: 1, where: {timestamp_lt: ${timestamp}}, orderBy: timestamp, orderDirection: desc) { + number + timestamp + } + }`; +} + +// Function that queries a subgraph and gets the last block before a given date +async function getBlocks(date: number, chain: string): Promise { + const url: string = chain === "arbitrum-one" ? MAINNET_BLOCKS_URL : ""; + const query: string = blockQuery(date); + + try { + const response = await fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ query }), + }); + + const data = await response.json(); + const endBlock: number = data.data.blocks[0].number; + return endBlock; + } catch (error) { + console.error("Error fetching block data:", error); + throw error; + } +} + +async function queryPoolBalances( + chain: string, + poolName: string, + version: string, + startTime: number | null = null, + endTime: number | null = null +): Promise { + let url: string = ""; + if (chain === "arbitrum-one") { + url = version === "v3" ? MAINNET_V3_SUBGRAPH_URL : MAINNET_SUBGRAPH_URL; + } + + let pool: any = version === "v3" ? POOL_DATA_V3[chain][poolName] : POOL_DATA[chain][poolName]; + let poolAddress: string = `${pool["address"]}`; + let oceanId: string = `${pool["oceanId"]}`; + let endTimeStamp: number = endTime || Math.floor(Date.now() / 1000); + let blockNumber: number = (await getBlocks(endTimeStamp, chain)) - 100; + + let query: string = definePoolBalancesQuery(poolAddress, oceanId, blockNumber); + const currentBalancesData: any = ( + await fetch(url, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ query }), + }).then((response) => response.json()) + ).data; + + return currentBalancesData; +} + +async function queryPoolInteractions(chain: string, poolName: string, version: string, startTime: number, endTime: number): Promise { + let url: string = ""; + if (chain === "arbitrum-one") { + url = version === "v3" ? MAINNET_V3_SUBGRAPH_URL : MAINNET_SUBGRAPH_URL; + } + + let pool: any = version === "v3" ? POOL_DATA_V3[chain][poolName] : POOL_DATA[chain][poolName]; + let poolAddress: string = `${pool["address"]}`; + let interactionsData: any = {}; + + let computeInputAmountsList: any[] = []; + let computeOutputAmountsList: any[] = []; + let inputAmountsLastId: string = '""'; + let outputAmountsLastId: string = '""'; + + while (true) { + const query = defineComputesQuery(poolAddress, startTime, endTime, inputAmountsLastId, outputAmountsLastId); + const computesResponse = await fetch(url, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ query }), + }); + const computes: any = (await computesResponse.json()).data; + + const computeOutputAmounts: any[] = computes.computeOutputAmounts || []; + const computeInputAmounts: any[] = computes.computeInputAmounts || []; + + if (computeInputAmounts.length === 0 && computeOutputAmounts.length === 0) { + break; + } else if (computeInputAmounts.length === 0) { + outputAmountsLastId = `"${computeOutputAmounts[computeOutputAmounts.length - 1].id}"`; + inputAmountsLastId = "-1"; + } else if (computeOutputAmounts.length === 0) { + inputAmountsLastId = `"${computeInputAmounts[computeInputAmounts.length - 1].id}"`; + outputAmountsLastId = "-1"; + } else { + inputAmountsLastId = `"${computeInputAmounts[computeInputAmounts.length - 1].id}"`; + outputAmountsLastId = `"${computeOutputAmounts[computeOutputAmounts.length - 1].id}"`; + } + + computeInputAmountsList = computeInputAmountsList.concat(computeInputAmounts); + computeOutputAmountsList = computeOutputAmountsList.concat(computeOutputAmounts); + } + + interactionsData["computeInputAmounts"] = computeInputAmountsList; + interactionsData["computeOutputAmounts"] = computeOutputAmountsList; + + return interactionsData; +} + +async function getTokenBalance(chain: string, pool: string, version: string = "v2"): Promise<{ [key: string]: number }> { + const url: string = chain === "arbitrum-one" ? (version === "v3" ? MAINNET_V3_SUBGRAPH_URL : MAINNET_SUBGRAPH_URL) : ""; + + const poolData: any = version === "v3" ? POOL_DATA_V3[chain][pool] : POOL_DATA[chain][pool]; + const poolAddress: string = `${poolData.address}`; + const oceanId: string = `${poolData.oceanId}`; + const endTime: number = Math.floor(Date.now() / 1000); + const blockNumber: number = (await getBlocks(endTime, chain)) - 150; + const query: string = definePoolBalancesQuery(poolAddress, oceanId, blockNumber); + + const response: Response = await fetch(url, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ query }), + }); + const currentBalances: any = await response.json(); + + const tokenBalances: { [key: string]: number } = {}; + const userBalances: { [key: string]: string } = {}; + + currentBalances.data.user.userBalances.forEach((userBalance: any) => { + userBalances[userBalance.oceanId] = userBalance.balance; + }); + + Object.keys(poolData.tokens).forEach((token: string) => { + const tokenName: string = poolData.tokens[token].name; + tokenBalances[tokenName] = parseInt(userBalances[token]) / 1e18; + }); + + tokenBalances["supply"] = parseFloat(currentBalances.data.oceanToken.supply) / 1e18; + + return tokenBalances; +} + + +// Volume is derived by summing up the token dollar values of all the Ocean interactions that went through all the pools +export async function getVolume(timestamp: number): Promise { + const chain: string = "arbitrum-one"; + const prices: { [key: string]: { usd: number } } = await getPrices(chain); + const endTime: number = timestamp; + const startTime: number = endTime - 24 * 60 * 60; + + const poolKeys: string[] = Object.keys(POOL_DATA["arbitrum-one"]).concat(Object.keys(POOL_DATA_V3["arbitrum-one"])); + + const poolDataPromises: Promise<{ + totalValueLocked: number; + LPTokenPrice: number; + LPTokenBalance: number; + breakdown: { [key: string]: number }; + balances: { [key: string]: number }; + "24HrVolume": number; + }>[] = []; + for (const poolKey of poolKeys) { + const version: string = POOL_DATA["arbitrum-one"][poolKey] ? "v2" : "v3"; + poolDataPromises.push(getPoolData(chain, poolKey, prices, version, startTime, endTime)); + } + + const poolDataResults: { + totalValueLocked: number; + LPTokenPrice: number; + LPTokenBalance: number; + breakdown: { [key: string]: number }; + balances: { [key: string]: number }; + "24HrVolume": number; + }[] = await Promise.all(poolDataPromises); + + const total24HrVolume: number = poolDataResults.reduce((sum: number, poolData: any) => { + return sum + (poolData["24HrVolume"] || 0); + }, 0); + + return total24HrVolume; +} diff --git a/dexs/shell-protocol/index.ts b/dexs/shell-protocol/index.ts index 8016e9f6a8..8469cf90a8 100644 --- a/dexs/shell-protocol/index.ts +++ b/dexs/shell-protocol/index.ts @@ -1,28 +1,19 @@ -import ADDRESSES from '../../helpers/coreAssets.json' import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { addTokensReceived } from "../../helpers/token"; - +import { getVolume } from "./helpers"; const fetch = async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { - const tokens = [ - ADDRESSES.arbitrum.DAI, - ADDRESSES.arbitrum.USDC, - ADDRESSES.arbitrum.USDT, - ADDRESSES.arbitrum.WBTC, - ] - const dailyVolume = await addTokensReceived({ tokens, options, fromAddressFilter: '0xC32eB36f886F638fffD836DF44C124074cFe3584' }) - return { timestamp, dailyVolume } -} - + const dailyVolume = await getVolume(timestamp); + return { timestamp, dailyVolume }; +}; const adapter: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM]: { fetch, - start: 1667260800, + start: 1705968000, }, - } + }, }; export default adapter; From 2952fc0c708eb651a176be3cf98e5471357bf3ac Mon Sep 17 00:00:00 2001 From: stepollo Date: Tue, 11 Jun 2024 14:17:42 +0200 Subject: [PATCH 0772/1590] add all chains and new event log --- fees/vfat/index.ts | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/fees/vfat/index.ts b/fees/vfat/index.ts index 86999a58e0..184e1322bb 100644 --- a/fees/vfat/index.ts +++ b/fees/vfat/index.ts @@ -12,6 +12,41 @@ const chainSettings: any = { fromBlock: 117753454, chainName: 'optimism', }, + arbitrum: { + factory: '0x53d9780DbD3831E3A797Fd215be4131636cD5FDf', + fromBlockSickle: 197499243, + chainName: 'arbitrum', + }, + linea: { + factory: '0x0F6aBc6B808B377d6AeD8dA1FAD5E135C99C81a3', + fromBlockSickle: 4949355, + chainName: 'linea', + }, + ethereum: { + factory: '0x9D70B9E5ac2862C405D64A0193b4A4757Aab7F95', + chainName: 'ethereum', + fromBlockSickle: 19580798, + }, + mode: { + factory: '0x53d9780DbD3831E3A797Fd215be4131636cD5FDf', + chainName: 'mode', + fromBlockSickle: 7464171, + }, + fantom: { + factory: '0x53d9780DbD3831E3A797Fd215be4131636cD5FDf', + chainName: 'fantom', + fromBlockSickle: 79166260, + }, + mantle: { + factory: '0xB4C31b0f0B76b351395D4aCC94A54dD4e6fbA1E8', + chainName: 'mantle', + fromBlockSickle: 62383980, + }, + bsc: { + factory: '0x53d9780DbD3831E3A797Fd215be4131636cD5FDf', + chainName: 'bsc', + fromBlockSickle: 37565801 + }, }; const fetchFees = async ({ createBalances, getLogs, chain }: FetchOptions) => { @@ -33,10 +68,19 @@ const chainSettings: any = { eventAbi: 'event FeeCharged(bytes32 feesHash, uint256 amount, address token)', }); + const logs2 = await getLogs({ + targets: sickleContracts, + eventAbi: 'event FeeCharged(address strategy, bytes4 feeDescriptor, uint256 amount, address token)', + }); + logs.forEach((log: any) => { dailyFees.add(log.token, log.amount); }); + logs2.forEach((log: any) => { + dailyFees.add(log.token, log.amount); + }); + return { dailyFees, dailyRevenue: dailyFees, @@ -54,6 +98,34 @@ const chainSettings: any = { fetch: fetchFees, start: 1710979200, }, + [CHAIN.ARBITRUM]: { + fetch: fetchFees, + start: 1710979200, + }, + [CHAIN.LINEA]: { + fetch: fetchFees, + start: 1710979200, + }, + [CHAIN.ETHEREUM]: { + fetch: fetchFees, + start: 1710979200, + }, + [CHAIN.MODE]: { + fetch: fetchFees, + start: 1710979200, + }, + [CHAIN.FANTOM]: { + fetch: fetchFees, + start: 1710979200, + }, + [CHAIN.MANTLE]: { + fetch: fetchFees, + start: 1710979200, + }, + [CHAIN.BSC]: { + fetch: fetchFees, + start: 1710979200, + }, } } From f5663574fa044b52ba94a8750094d5429c3e172f Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 11 Jun 2024 17:03:15 +0200 Subject: [PATCH 0773/1590] revert default SUI rpc --- helpers/sui.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/helpers/sui.ts b/helpers/sui.ts index 6c664b3015..00dfee928a 100644 --- a/helpers/sui.ts +++ b/helpers/sui.ts @@ -1,7 +1,8 @@ const http = require('axios') const { getEnv } = require('./env') -const endpoint = () => getEnv('SUI_RPC') +// const endpoint = () => getEnv('SUI_RPC') +const endpoint = () => 'https://fullnode.mainnet.sui.io/' async function getObject(objectId:string) { return (await call('sui_getObject', [objectId, { From 8088a44b97c89f5a7d218ecfd30b50b769d32db8 Mon Sep 17 00:00:00 2001 From: Bob Baxley Date: Tue, 11 Jun 2024 11:59:20 -0400 Subject: [PATCH 0774/1590] break out v1 and v2 --- dexs/maverick-v2/index.ts | 32 ++++++++++ dexs/{maverick => maverick-v2}/maverick-v2.ts | 0 dexs/maverick/index.ts | 59 ++++++------------- fees/maverick-v2.ts | 42 +++++++++++++ fees/maverick.ts | 59 ++++++------------- 5 files changed, 108 insertions(+), 84 deletions(-) create mode 100644 dexs/maverick-v2/index.ts rename dexs/{maverick => maverick-v2}/maverick-v2.ts (100%) create mode 100644 fees/maverick-v2.ts diff --git a/dexs/maverick-v2/index.ts b/dexs/maverick-v2/index.ts new file mode 100644 index 0000000000..05e73792f3 --- /dev/null +++ b/dexs/maverick-v2/index.ts @@ -0,0 +1,32 @@ +// Maverick v2 volume +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { fetchVolumeV2, maverickV2Factories } from "./maverick-v2"; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.BSC]: { + fetch: fetchVolumeV2(), + start: maverickV2Factories[CHAIN.BSC].startTimestamp, + }, + [CHAIN.BASE]: { + fetch: fetchVolumeV2(), + start: maverickV2Factories[CHAIN.BASE].startTimestamp, + }, + [CHAIN.ERA]: { + fetch: fetchVolumeV2(), + start: maverickV2Factories[CHAIN.ERA].startTimestamp, + }, + [CHAIN.ETHEREUM]: { + fetch: fetchVolumeV2(), + start: maverickV2Factories[CHAIN.ETHEREUM].startTimestamp, + }, + [CHAIN.ARBITRUM]: { + fetch: fetchVolumeV2(), + start: maverickV2Factories[CHAIN.ARBITRUM].startTimestamp, + }, + }, +}; + +export default adapter; diff --git a/dexs/maverick/maverick-v2.ts b/dexs/maverick-v2/maverick-v2.ts similarity index 100% rename from dexs/maverick/maverick-v2.ts rename to dexs/maverick-v2/maverick-v2.ts diff --git a/dexs/maverick/index.ts b/dexs/maverick/index.ts index 3e8ed2f8e8..79f51909d5 100644 --- a/dexs/maverick/index.ts +++ b/dexs/maverick/index.ts @@ -1,51 +1,26 @@ // Maverick v1 volume -import { BreakdownAdapter } from "../../adapters/types"; +import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { fetchVolumeV1, maverickV1Factories } from "./maverick-v1"; -import { fetchVolumeV2, maverickV2Factories } from "./maverick-v2"; -const adapter: BreakdownAdapter = { +const adapter: SimpleAdapter = { version: 2, - breakdown: { - v1: { - [CHAIN.BSC]: { - fetch: fetchVolumeV1(), - start: maverickV1Factories[CHAIN.BSC].startTimestamp, - }, - [CHAIN.BASE]: { - fetch: fetchVolumeV1(), - start: maverickV1Factories[CHAIN.BASE].startTimestamp, - }, - [CHAIN.ERA]: { - fetch: fetchVolumeV1(), - start: maverickV1Factories[CHAIN.ERA].startTimestamp, - }, - [CHAIN.ETHEREUM]: { - fetch: fetchVolumeV1(), - start: maverickV1Factories[CHAIN.ETHEREUM].startTimestamp, - }, + adapter: { + [CHAIN.BSC]: { + fetch: fetchVolumeV1(), + start: maverickV1Factories[CHAIN.BSC].startTimestamp, }, - v2: { - [CHAIN.BSC]: { - fetch: fetchVolumeV2(), - start: maverickV2Factories[CHAIN.BSC].startTimestamp, - }, - [CHAIN.BASE]: { - fetch: fetchVolumeV2(), - start: maverickV2Factories[CHAIN.BASE].startTimestamp, - }, - [CHAIN.ERA]: { - fetch: fetchVolumeV2(), - start: maverickV2Factories[CHAIN.ERA].startTimestamp, - }, - [CHAIN.ETHEREUM]: { - fetch: fetchVolumeV2(), - start: maverickV2Factories[CHAIN.ETHEREUM].startTimestamp, - }, - [CHAIN.ARBITRUM]: { - fetch: fetchVolumeV2(), - start: maverickV2Factories[CHAIN.ARBITRUM].startTimestamp, - }, + [CHAIN.BASE]: { + fetch: fetchVolumeV1(), + start: maverickV1Factories[CHAIN.BASE].startTimestamp, + }, + [CHAIN.ERA]: { + fetch: fetchVolumeV1(), + start: maverickV1Factories[CHAIN.ERA].startTimestamp, + }, + [CHAIN.ETHEREUM]: { + fetch: fetchVolumeV1(), + start: maverickV1Factories[CHAIN.ETHEREUM].startTimestamp, }, }, }; diff --git a/fees/maverick-v2.ts b/fees/maverick-v2.ts new file mode 100644 index 0000000000..1e01e7c137 --- /dev/null +++ b/fees/maverick-v2.ts @@ -0,0 +1,42 @@ +// Maverick v2 fee +import { SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { + fetchFeeV2, + maverickV2Factories, +} from "../dexs/maverick-v2/maverick-v2"; + +const methodology = { + UserFees: "LPs collect 100% of the fee generated in a pool", + Fees: "Fees generated on each swap at a rate set by the pool.", + TotalUserFees: "Cumulative all-time Fees", + TotalFees: "Cumulative all-time Fees", +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.BSC]: { + fetch: fetchFeeV2(), + start: maverickV2Factories[CHAIN.BSC].startTimestamp, + }, + [CHAIN.BASE]: { + fetch: fetchFeeV2(), + start: maverickV2Factories[CHAIN.BASE].startTimestamp, + }, + [CHAIN.ERA]: { + fetch: fetchFeeV2(), + start: maverickV2Factories[CHAIN.ERA].startTimestamp, + }, + [CHAIN.ETHEREUM]: { + fetch: fetchFeeV2(), + start: maverickV2Factories[CHAIN.ETHEREUM].startTimestamp, + }, + [CHAIN.ARBITRUM]: { + fetch: fetchFeeV2(), + start: maverickV2Factories[CHAIN.ARBITRUM].startTimestamp, + }, + }, +}; + +export default adapter; diff --git a/fees/maverick.ts b/fees/maverick.ts index b4239cec08..38cea7fd06 100644 --- a/fees/maverick.ts +++ b/fees/maverick.ts @@ -1,8 +1,7 @@ // Maverick v1 fee -import { BreakdownAdapter } from "../adapters/types"; +import { SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { fetchFeeV1, maverickV1Factories } from "../dexs/maverick/maverick-v1"; -import { fetchFeeV2, maverickV2Factories } from "../dexs/maverick/maverick-v2"; const methodology = { UserFees: "LPs collect 100% of the fee generated in a pool", @@ -11,48 +10,24 @@ const methodology = { TotalFees: "Cumulative all-time Fees", }; -const adapter: BreakdownAdapter = { +const adapter: SimpleAdapter = { version: 2, - breakdown: { - v1: { - [CHAIN.BSC]: { - fetch: fetchFeeV1(), - start: maverickV1Factories[CHAIN.BSC].startTimestamp, - }, - [CHAIN.BASE]: { - fetch: fetchFeeV1(), - start: maverickV1Factories[CHAIN.BASE].startTimestamp, - }, - [CHAIN.ERA]: { - fetch: fetchFeeV1(), - start: maverickV1Factories[CHAIN.ERA].startTimestamp, - }, - [CHAIN.ETHEREUM]: { - fetch: fetchFeeV1(), - start: maverickV1Factories[CHAIN.ETHEREUM].startTimestamp, - }, + adapter: { + [CHAIN.BSC]: { + fetch: fetchFeeV1(), + start: maverickV1Factories[CHAIN.BSC].startTimestamp, }, - v2: { - [CHAIN.BSC]: { - fetch: fetchFeeV2(), - start: maverickV2Factories[CHAIN.BSC].startTimestamp, - }, - [CHAIN.BASE]: { - fetch: fetchFeeV2(), - start: maverickV2Factories[CHAIN.BASE].startTimestamp, - }, - [CHAIN.ERA]: { - fetch: fetchFeeV2(), - start: maverickV2Factories[CHAIN.ERA].startTimestamp, - }, - [CHAIN.ETHEREUM]: { - fetch: fetchFeeV2(), - start: maverickV2Factories[CHAIN.ETHEREUM].startTimestamp, - }, - [CHAIN.ARBITRUM]: { - fetch: fetchFeeV2(), - start: maverickV2Factories[CHAIN.ARBITRUM].startTimestamp, - }, + [CHAIN.BASE]: { + fetch: fetchFeeV1(), + start: maverickV1Factories[CHAIN.BASE].startTimestamp, + }, + [CHAIN.ERA]: { + fetch: fetchFeeV1(), + start: maverickV1Factories[CHAIN.ERA].startTimestamp, + }, + [CHAIN.ETHEREUM]: { + fetch: fetchFeeV1(), + start: maverickV1Factories[CHAIN.ETHEREUM].startTimestamp, }, }, }; From 825bea5f4975f51cfee8a923d09fd341023c8d81 Mon Sep 17 00:00:00 2001 From: Xavier Date: Wed, 12 Jun 2024 14:20:59 +0900 Subject: [PATCH 0775/1590] feat: update clober v2 start time --- dexs/clober-v2/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/clober-v2/index.ts b/dexs/clober-v2/index.ts index 1d6f2d6a7d..09561cf98f 100644 --- a/dexs/clober-v2/index.ts +++ b/dexs/clober-v2/index.ts @@ -80,7 +80,7 @@ const adapter: SimpleAdapter = { [CHAIN.BASE]: { fetch: fetch, runAtCurrTime: true, - start: 1717167600, + start: 1718169619, meta: { methodology: 'Volume is calculated by summing the quote token volume of all trades on the protocol.', } @@ -88,7 +88,7 @@ const adapter: SimpleAdapter = { [CHAIN.ERA]: { fetch: fetch, runAtCurrTime: true, - start: 1717167600, + start: 1718169619, meta: { methodology: 'Volume is calculated by summing the quote token volume of all trades on the protocol.', } From e1a418468e83265d18ae350344407ddc9527ddb8 Mon Sep 17 00:00:00 2001 From: Define101 Date: Wed, 12 Jun 2024 09:40:01 +0100 Subject: [PATCH 0776/1590] add assets to coreAssets --- helpers/coreAssets.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/helpers/coreAssets.json b/helpers/coreAssets.json index 7e2aea66b5..9bd74315cc 100644 --- a/helpers/coreAssets.json +++ b/helpers/coreAssets.json @@ -44,8 +44,7 @@ "SUSHI": "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2", "cbETH": "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704", "FDUSD": "0xc5f0f7b66764f6ec8c8dff7ba683102295e16409", - "EETH": "0x35fa164735182de50811e8e2e824cfb9b6118ac2", - "WETH": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" + "EETH": "0x35fa164735182de50811e8e2e824cfb9b6118ac2" }, "fantom": { "WFTM": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", @@ -1571,5 +1570,14 @@ }, "zora": { "USDzC": "0xcccccccc7021b32ebb4e8c08314bd62f7c653ec4" + }, + "defichain_evm": { + "DUSD": "0xFf0000000000000000000000000000000000000F", + "JAV": "0x66F3Cf265D2D146A0348F6fC67E3Da0835e0968E", + "WDFI": "0x49febbF9626B2D39aBa11C01d83Ef59b3D56d2A4", + "VAN": "0x870c765f8aF9b189C324BE88B99884e5bAe4514b", + "MUSD": "0x80b6897Ba629d6C42584eC162CCA29F1E34783bE", + "USDT": "0xFF00000000000000000000000000000000000003", + "USDC": "0xFF0000000000000000000000000000000000000d" } } From d85a6b77c0dbe750ceaeaaeba4e6112f6390e1a5 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 12 Jun 2024 11:15:31 +0000 Subject: [PATCH 0777/1590] fix add rev --- fees/flashtrade.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fees/flashtrade.ts b/fees/flashtrade.ts index 579caf61ce..88b1a1fd8c 100644 --- a/fees/flashtrade.ts +++ b/fees/flashtrade.ts @@ -39,8 +39,10 @@ const fetchFlashStats = async (timestamp: number): Promise => { timestamp, dailyFees: dailyAccrued.toString(), totalFees: totalAccrued.toString(), + dailyRevenue: dailyProtocolRevenue.toString(), dailyProtocolRevenue: dailyProtocolRevenue.toString(), totalProtocolRevenue: totalProtocolRevenue.toString(), + totalRevenue: totalProtocolRevenue.toString(), }; }; From f9cb95ca2f13b3652d49f83c0c8ebee25f3e7118 Mon Sep 17 00:00:00 2001 From: slasher125 Date: Wed, 12 Jun 2024 17:02:02 +0400 Subject: [PATCH 0778/1590] ic --- dexs/ArbitrumExchange/index.ts | 2 +- dexs/SubstanceX/index.ts | 2 +- dexs/ampleswap/index.ts | 2 +- dexs/auragi/index.ts | 2 +- dexs/balancer/index.ts | 10 +++++----- dexs/camelot-v3/index.ts | 2 +- dexs/clipper/index.ts | 2 +- dexs/cometh/index.ts | 2 +- dexs/defi-swap/index.ts | 2 +- dexs/dodo/index.ts | 6 +++--- dexs/equity-spot/index.ts | 2 +- dexs/huckleberry/index.ts | 2 +- dexs/morpheus-swap/index.ts | 2 +- dexs/pika-protocol-v4/index.ts | 2 +- dexs/pika-protocol/index.ts | 2 +- dexs/quickswap/index.ts | 4 ++-- dexs/solidly-v3/index.ts | 2 +- dexs/spookyswap/index.ts | 2 +- dexs/sushiswap/classic.ts | 22 +++++++++++----------- dexs/templedao-trade/index.ts | 2 +- dexs/thena-perp/index.ts | 2 +- dexs/thena-v3/index.ts | 2 +- dexs/thena/index.ts | 2 +- dexs/traderjoe/index.ts | 2 +- dexs/wagmi/wagmi.ts | 2 +- dexs/wombat-exchange/index.ts | 10 +++++----- fees/aave/index.ts | 6 +++--- fees/auragi.ts | 2 +- fees/balancer.ts | 10 +++++----- fees/betswirl/index.ts | 2 +- fees/camelot-v3.ts | 2 +- fees/clever.ts | 2 +- fees/clipper.ts | 2 +- fees/concentrator.ts | 2 +- fees/curve.ts | 4 ++-- fees/equity/index.ts | 2 +- fees/fx-protocol.ts | 2 +- fees/moonwell-artemis.ts | 2 +- fees/pika-protocol-v4.ts | 2 +- fees/pika-protocol.ts | 2 +- fees/quickswap.ts | 4 ++-- fees/solidly-v3.ts | 2 +- fees/substanceX/index.ts | 2 +- fees/thena-v1.ts | 2 +- fees/thena-v3.ts | 2 +- protocols/pancakeswap/index.ts | 14 +++++++------- protocols/smbswap/index.ts | 6 +++--- protocols/uniswap/index.ts | 12 ++++++------ 48 files changed, 90 insertions(+), 90 deletions(-) diff --git a/dexs/ArbitrumExchange/index.ts b/dexs/ArbitrumExchange/index.ts index 7c72ca2016..6caca5f0a2 100644 --- a/dexs/ArbitrumExchange/index.ts +++ b/dexs/ArbitrumExchange/index.ts @@ -14,7 +14,7 @@ const v2Endpoints = { }; const v3Endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/hekman-eth/arbidex-v3", + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/AQPMJVpukYUo96WvuKqn7aPZn3m8BHckYs82ZLSMKyeu", }; const VOLUME_USD = "volumeUSD"; diff --git a/dexs/SubstanceX/index.ts b/dexs/SubstanceX/index.ts index 76801a6308..9745a62af4 100644 --- a/dexs/SubstanceX/index.ts +++ b/dexs/SubstanceX/index.ts @@ -11,7 +11,7 @@ const endpoints = { }; const blockNumberGraph = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks", + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/64DCU8nq48qdDABnobpDafsg7RF75Rx5soKrHiGA8mqp", [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta-blocks" } diff --git a/dexs/ampleswap/index.ts b/dexs/ampleswap/index.ts index 2619b7451f..db333f765b 100644 --- a/dexs/ampleswap/index.ts +++ b/dexs/ampleswap/index.ts @@ -2,7 +2,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/shrinivasmani/ampleswapgraph", + [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2MF3GHhPgvCk8ZHBso8uxTkcT97zjmoEPfxkbeH4D7Jb", }; const adapter = univ2Adapter(endpoints, {}); diff --git a/dexs/auragi/index.ts b/dexs/auragi/index.ts index 26ee709ebc..82366d7dde 100644 --- a/dexs/auragi/index.ts +++ b/dexs/auragi/index.ts @@ -4,7 +4,7 @@ import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/oxbill/auragi", + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DtNQcRXx82k4azEb5QvUjRbmXSNLTUsUePzPY6PtryEc", }; const graphs = getChainVolume({ diff --git a/dexs/balancer/index.ts b/dexs/balancer/index.ts index b363a07ed2..e8328cbce8 100644 --- a/dexs/balancer/index.ts +++ b/dexs/balancer/index.ts @@ -8,14 +8,14 @@ import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getU import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints: ChainEndpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2", + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/C4ayEZP2yTXRAB8vSaTrgN4m9anTe9Mdm2ViyiAuV9TV", [CHAIN.POLYGON]: - "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-polygon-v2", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN", [CHAIN.ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-arbitrum-v2", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc", [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gnosis-chain-v2", [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest", - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-avalanche-v2", + [CHAIN.AVAX]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu", [CHAIN.BASE]: "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest" }; @@ -69,7 +69,7 @@ const v2Graphs = (chain: Chain) => { const v1graphs = getChainVolume({ graphUrls: { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer" + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB" }, ...graphParams }); diff --git a/dexs/camelot-v3/index.ts b/dexs/camelot-v3/index.ts index ad8895505e..98f6566256 100644 --- a/dexs/camelot-v3/index.ts +++ b/dexs/camelot-v3/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/camelotlabs/camelot-amm-v3" + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7mPnp1UqmefcCycB8umy4uUkTkFxMoHn1Y7ncBUscePp" }, { factoriesName: "factories", dayData: "algebraDayData", diff --git a/dexs/clipper/index.ts b/dexs/clipper/index.ts index 3fc78d5b04..16c1552506 100644 --- a/dexs/clipper/index.ts +++ b/dexs/clipper/index.ts @@ -9,7 +9,7 @@ const endpoints = { [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-optimism", [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-polygon", [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-moonbeam", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-arbitrum", + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W", }; diff --git a/dexs/cometh/index.ts b/dexs/cometh/index.ts index 90547d5bc3..014a58d2ac 100644 --- a/dexs/cometh/index.ts +++ b/dexs/cometh/index.ts @@ -2,6 +2,6 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/cometh-game/comethswap" + [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/GcokW8RfC9YJeZF4CPoLUwJwZRcQ8kbDR7WziCMus7LF" }, { }); diff --git a/dexs/defi-swap/index.ts b/dexs/defi-swap/index.ts index 78b5557ad7..cc7d81e671 100644 --- a/dexs/defi-swap/index.ts +++ b/dexs/defi-swap/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapter = univ2Adapter({ - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/crypto-com/swap-subgraph" + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G7W3G1JGcFbWseucNkHHvQorxyjQLEQt7vt9yPN97hri" }, { factoriesName: "factories", dayData: "dayData", diff --git a/dexs/dodo/index.ts b/dexs/dodo/index.ts index e6dfdf8728..2c3214038b 100644 --- a/dexs/dodo/index.ts +++ b/dexs/dodo/index.ts @@ -10,9 +10,9 @@ import dailyVolumePayload from "./dailyVolumePayload"; [CHAIN.BSC]: "https://api.dodoex.io/graphql?opname=FetchDashboardDailyData", [CHAIN.ETHEREUM]: "https://api.dodoex.io/graphql?opname=FetchDashboardDailyData", [CHAIN.POLYGON]: "https://api.dodoex.io/graphql?opname=FetchDashboardDailyData", - // [MOONRIVER]: "https://api.thegraph.com/subgraphs/name/dodoex/dodoex-v2-moonriver", - // [AVAX]: "https://api.thegraph.com/subgraphs/name/dodoex/dodoex-v2-avax", - // [BOBA]: "https://api.thegraph.com/subgraphs/name/dodoex/dodoex-v2-boba" + // [MOONRIVER]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G4HFPFJue7zf2BktJuKETh72DscimLJRybVA6iD6A7yM", + // [AVAX]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8GUXi8PNrW4ACf968KCWxH9AkeNt8YEQin7MDa7RuULW", + // [BOBA]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6PVfSucTfTimvx3aMgWsatmRDBNxW7yQKayyZ7Mxrf73" // [HECO]: "https://n10.hg.network/subgraphs/name/dodoex-mine-v3-heco/heco", // [OKEXCHAIN]: "https://graph.kkt.one/subgraphs/name/dodoex/dodoex-v2-okchain", } as ChainEndpoints */ diff --git a/dexs/equity-spot/index.ts b/dexs/equity-spot/index.ts index d8e1cb81a7..2b30f13afe 100644 --- a/dexs/equity-spot/index.ts +++ b/dexs/equity-spot/index.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/chimpydev/equity-core2", + [CHAIN.FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9USQeMVzzBbxsXhQUmCk5fZursvL9Vj3cv8joYNXeKt9", } const historicalData = gql` diff --git a/dexs/huckleberry/index.ts b/dexs/huckleberry/index.ts index 5d0b7be501..2aed4e17e4 100644 --- a/dexs/huckleberry/index.ts +++ b/dexs/huckleberry/index.ts @@ -2,6 +2,6 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.MOONRIVER]: "https://api.thegraph.com/subgraphs/name/huckleberrydex/huckleberry-subgraph", + [CHAIN.MOONRIVER]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EMTH8qnNbMGgjoFxE8YZh4qGMMxTQu44WDbn2xKexzwb", // [CHAIN.CLV]: "https://clover-graph-node.huckleberry.finance/subgraphs/name/huckleberry/clv-parachain-subgraph" }, {}); diff --git a/dexs/morpheus-swap/index.ts b/dexs/morpheus-swap/index.ts index 6e2145f448..d92c13f894 100644 --- a/dexs/morpheus-swap/index.ts +++ b/dexs/morpheus-swap/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/daedboi/morpheus-swap" + [CHAIN.FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/C5XUzYLrDHiiKL7zGjLLyiQueJkQfeUyMZCcgwnVWcNr" }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData", diff --git a/dexs/pika-protocol-v4/index.ts b/dexs/pika-protocol-v4/index.ts index a859d98e9f..343c4fe100 100644 --- a/dexs/pika-protocol-v4/index.ts +++ b/dexs/pika-protocol-v4/index.ts @@ -22,7 +22,7 @@ interface IValume { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/ethandev0/pikaperpv4_optimism" + [CHAIN.OPTIMISM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5dP9FpbXxmNPRaERfzyKEGuRKh2NRQuwPBWfMLGoSRX5" } const fetch = (chain: Chain) => { diff --git a/dexs/pika-protocol/index.ts b/dexs/pika-protocol/index.ts index 51cc6f48c1..cee5f14b6a 100644 --- a/dexs/pika-protocol/index.ts +++ b/dexs/pika-protocol/index.ts @@ -22,7 +22,7 @@ interface IValume { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/ethandev0/pikaperpv3_optimism" + [CHAIN.OPTIMISM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DUcxevdqV8kBQdHWcdUcaEctaoVyqYZTtCftojL23NbA" } const fetch = (chain: Chain) => { diff --git a/dexs/quickswap/index.ts b/dexs/quickswap/index.ts index 21062fe13b..53c3c8514d 100644 --- a/dexs/quickswap/index.ts +++ b/dexs/quickswap/index.ts @@ -5,7 +5,7 @@ import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL import fetchURL from "../../utils/fetchURL" const endpoints = { - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/sameepsi/quickswap06", + [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd", }; const graphs = getChainVolume({ @@ -22,7 +22,7 @@ const graphs = getChainVolume({ }); const endpointsAlgebraV3 = { - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/sameepsi/quickswap-v3", + [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7", // [CHAIN.DOGECHAIN]: "https://graph-node.dogechain.dog/subgraphs/name/quickswap/dogechain-info", [CHAIN.POLYGON_ZKEVM]:"https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7", [CHAIN.MANTA]:"https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn" diff --git a/dexs/solidly-v3/index.ts b/dexs/solidly-v3/index.ts index b08d32a69c..fff21d0c5d 100644 --- a/dexs/solidly-v3/index.ts +++ b/dexs/solidly-v3/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3", + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t", // [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-optimism", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-arbitrum", diff --git a/dexs/spookyswap/index.ts b/dexs/spookyswap/index.ts index 2975c6f059..eb4f89c64c 100644 --- a/dexs/spookyswap/index.ts +++ b/dexs/spookyswap/index.ts @@ -6,7 +6,7 @@ import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume const { getChainVolumeWithGasToken } = require("../../helpers/getUniSubgraphVolume"); const { FANTOM } = require("../../helpers/chains"); const endpoints = { - [FANTOM]: "https://api.thegraph.com/subgraphs/name/eerieeight/spookyswap", + [FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/HyhMfT7gehNHMBmFiExqeg3pDtop9UikjvBPfAXT3b21", [CHAIN.EON]: "https://eon-graph.horizenlabs.io/subgraphs/name/0xALUKARD/spookyswap-eon", // [CHAIN.BITTORRENT]: "https://subgraph.spook.fi/subgraphs/name/eerieeight/spooky-swap-new" }; diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index a3a10c411a..7bec4d7452 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -53,16 +53,16 @@ const blacklistTokens = { } const endpointsClassic = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/sushiswap/exchange", - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/sushiswap/bsc-exchange", - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/sushiswap/matic-exchange", - //[CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/sushiswap/fantom-exchange", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/sushiswap/arbitrum-exchange", - [CHAIN.CELO]: "https://api.thegraph.com/subgraphs/name/sushiswap/celo-exchange", - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/sushiswap/avalanche-exchange", - [CHAIN.HARMONY]: "https://api.thegraph.com/subgraphs/name/sushiswap/harmony-exchange", - // [CHAIN.MOONRIVER]: "https://api.thegraph.com/subgraphs/name/sushiswap/moonriver-exchange", - [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/sushiswap/xdai-exchange", + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6NUtT5mGjZ1tSshKLf5Q3uEEJtjBZJo1TpL5MXsUBqrT", + [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/GPRigpbNuPkxkwpSbDuYXbikodNJfurc1LCENLzboWer", + [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8NiXkxLRT3R22vpwLB4DXttpEf3X1LrKhe4T1tQ3jjbP", + //[CHAIN.FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK", + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8nFDCAhdnJQEhQF3ZRnfWkJ6FkRsfAiiVabVn4eGoAZH", + [CHAIN.CELO]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8roCC7H2tsGYGvxD52QQbUoHXXx77H9tPhNn1qcjB5yj", + [CHAIN.AVAX]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6VAhbtW5u2sPYkJKAcMsxgqTBu4a1rqmbiVQWgtNjrvT", + [CHAIN.HARMONY]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FrcJBCCKCYGTLLXJmhppXfPKsNoyod4zqNLjHfXj1KHg", + // [CHAIN.MOONRIVER]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5skUrJzgVm6vXAmdKN7gw4CjYx3pgLDeUeUqVzqLXkWT", + [CHAIN.XDAI]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4a8hcsttqsmycmmeFcpffGMZhBDU4NhHfyHH6YNcnu7b", // [CHAIN.MOONBEAM]: 'https://api.thegraph.com/subgraphs/name/sushiswap/exchange-moonbeam', [CHAIN.BOBA]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/sushiswap-boba', [CHAIN.FUSE]: 'https://api.thegraph.com/subgraphs/name/sushiswap/exchange-fuse', @@ -139,7 +139,7 @@ const classic = Object.keys(endpointsClassic).reduce( const fantomGraphs = getChainVolumeWithGasToken({ graphUrls: { - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/sushiswap/fantom-exchange" + [CHAIN.FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK" }, totalVolume: { factory: "factories", diff --git a/dexs/templedao-trade/index.ts b/dexs/templedao-trade/index.ts index ba0d01019a..793606de6a 100644 --- a/dexs/templedao-trade/index.ts +++ b/dexs/templedao-trade/index.ts @@ -7,7 +7,7 @@ const { getChainVolume, } = require("../../helpers/getUniSubgraphVolume"); const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/templedao/templedao-core" + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6No9vpT4V56r2c4y4TxHsKs7hEbAWu66u19wNGAX8nxL" }; const VOLUME_FIELD = "volumeUSD"; diff --git a/dexs/thena-perp/index.ts b/dexs/thena-perp/index.ts index 4d9e3939e9..548ecbe9a0 100644 --- a/dexs/thena-perp/index.ts +++ b/dexs/thena-perp/index.ts @@ -6,7 +6,7 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume const ONE_DAY_IN_SECONDS = 60 * 60 * 24 -const endpoint = "https://api.thegraph.com/subgraphs/name/symmiograph/symmioanalytics_bnb_8_2" +const endpoint = "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DYHqLcjXMBC9c7AGvrYSBfQ6fQS723PJHF2usA9JX8NN" const query = gql` query stats($from: String!, $to: String!) { diff --git a/dexs/thena-v3/index.ts b/dexs/thena-v3/index.ts index e4512d2271..7eaaf05701 100644 --- a/dexs/thena-v3/index.ts +++ b/dexs/thena-v3/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/thenaursa/thena-fusion" + [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Hnjf3ipVMCkQze3jmHp8tpSMgPmtPnXBR38iM4ix1cLt" }, { factoriesName: "factories", dayData: "fusionDayData", diff --git a/dexs/thena/index.ts b/dexs/thena/index.ts index 1f29106611..434dca8024 100644 --- a/dexs/thena/index.ts +++ b/dexs/thena/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/thenaursa/thena-v1" + [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FKEt2N5VmSdEYcz7fYLPvvnyEUkReQ7rvmXzs6tiKCz1" }, { factoriesName: "factories", totalVolume: "totalVolumeUSD", diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index 5c8723f4a4..933e7a1d0c 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -7,7 +7,7 @@ import fetchURL from "../../utils/fetchURL"; const endpoints = { [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/exchange", [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/joe-v1-bnb", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/joe-v1-arbitrum", + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3jFnXqk6UXZyciPu5jfUuPR7kzGXPSndsLNrWXQ6xAxk", }; type TEndpoint = { [s: string | Chain]: string; diff --git a/dexs/wagmi/wagmi.ts b/dexs/wagmi/wagmi.ts index 8777e75c6b..d98afbe9a4 100644 --- a/dexs/wagmi/wagmi.ts +++ b/dexs/wagmi/wagmi.ts @@ -26,7 +26,7 @@ export const LINKS: { [key: string]: any } = { [CHAIN.ETHEREUM]: { subgraph: "https://api.studio.thegraph.com/query/53494/v3/version/latest", blocks: - "https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9A6bkprqEG2XsZUYJ5B2XXp6ymz9fNcn4tVPxMWDztYC", }, [CHAIN.METIS]: { subgraph: "https://metis.graph.wagmi.com/subgraphs/name/v3", diff --git a/dexs/wombat-exchange/index.ts b/dexs/wombat-exchange/index.ts index 58bce99796..4d833bf303 100644 --- a/dexs/wombat-exchange/index.ts +++ b/dexs/wombat-exchange/index.ts @@ -25,19 +25,19 @@ type TEndpoint = { // Updated using studio const endpoints: TEndpoint = { [CHAIN.BSC]: - "https://api.thegraph.com/subgraphs/name/wombat-exchange/wombat-exchange-bsc", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DPuFUNkRpW5AG2HBWyRhzvYCodocb1H8vjVLijyEJyGE", [CHAIN.ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/wombat-exchange/wombat-exchange-arbone", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/HADLg9LFYHJupr3xvWdmp7piPpwjGEwjbCknkSVrfyDQ", [CHAIN.ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/wombat-exchange/wombat-exchange-eth", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3S2iHctknomx91fcAcyqrPvCcGfnuhKdEKBs2xThoCvJ", [CHAIN.SCROLL]: "https://api.studio.thegraph.com/query/56564/wombat-exchange-scroll/version/latest", [CHAIN.AVAX]: - "https://api.thegraph.com/subgraphs/name/wombat-exchange/wombat-exchange-avax", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6PbnpSVfrWgVeRiTbbM4yFNAiYacLjGLg1ztzasxqxGf", [CHAIN.BASE]: "https://api.studio.thegraph.com/query/56564/wombat-exchange-base/version/latest", [CHAIN.OPTIMISM]: - "https://api.thegraph.com/subgraphs/name/wombat-exchange/wombat-exchange-op", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4phYPx7RdkSSKFuoFBRZFFbPMkRCnYLfi8bENyQf4NA6", }; const fetchVolume = (chain: Chain) => { diff --git a/fees/aave/index.ts b/fees/aave/index.ts index 4ccfc4105e..910938ac4c 100644 --- a/fees/aave/index.ts +++ b/fees/aave/index.ts @@ -32,13 +32,13 @@ const headers: THeader = { const ONE_DAY = 24 * 60 * 60; const v1Endpoints = { - [ETHEREUM]: "https://api.thegraph.com/subgraphs/name/aave/protocol-multy-raw", + [ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/GJfRcmN4YAzKW3VH2ZKzTcWXjgtvkpAYSwFh1LfHsEuh", } const v2Endpoints = { - [ETHEREUM]: "https://api.thegraph.com/subgraphs/name/aave/protocol-v2", + [ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8wR23o1zkS4gpLqLNU4kG3JHYVucqGyopL5utGxP2q1N", [AVAX]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v2-avalanche', - [POLYGON]: "https://api.thegraph.com/subgraphs/name/aave/aave-v2-matic" + [POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/H1Et77RZh3XEf27vkAmJyzgCME2RSFLtDS2f4PPW6CGp" }; //V3 endpoints avilable here: https://github.com/aave/protocol-subgraphs diff --git a/fees/auragi.ts b/fees/auragi.ts index 030d6e2004..a1717aefd7 100644 --- a/fees/auragi.ts +++ b/fees/auragi.ts @@ -5,7 +5,7 @@ import { CHAIN } from "../helpers/chains"; const STABLE_FEES = 0.0001; const VOLATILE_FEES = 0.0005; -const endpoint = "https://api.thegraph.com/subgraphs/name/oxbill/auragi"; +const endpoint = "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DtNQcRXx82k4azEb5QvUjRbmXSNLTUsUePzPY6PtryEc"; const getFees = () => { return async ({ getFromBlock, getToBlock}: FetchOptions) => { diff --git a/fees/balancer.ts b/fees/balancer.ts index 11c1fc8aa4..df5be89d9d 100644 --- a/fees/balancer.ts +++ b/fees/balancer.ts @@ -7,18 +7,18 @@ import BigNumber from "bignumber.js"; const v1Endpoints = { [CHAIN.ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB", } const v2Endpoints = { [CHAIN.ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2-beta", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Fog6Z9z7DXvWy4bx36c7ETQftdtr4Ppxn7Mjpxkzka2i", [CHAIN.ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-arbitrum-v2", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc", [CHAIN.POLYGON]: - "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-polygon-v2", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN", [CHAIN.AVAX]: - "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-avalanche-v2", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu", [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gnosis-chain-v2", [CHAIN.BASE]: diff --git a/fees/betswirl/index.ts b/fees/betswirl/index.ts index 2e805184d6..149963c0c8 100644 --- a/fees/betswirl/index.ts +++ b/fees/betswirl/index.ts @@ -6,7 +6,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints: any = { [BSC]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-bnb", [POLYGON]: - "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-polygon", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FL3ePDCBbShPvfRJTaSCNnehiqxsPHzpLud6CpbHoeKW", [AVAX]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-avalanche", [ARBITRUM]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-arbitrum", }; diff --git a/fees/camelot-v3.ts b/fees/camelot-v3.ts index 7975ebb325..f3483bfb0d 100644 --- a/fees/camelot-v3.ts +++ b/fees/camelot-v3.ts @@ -16,7 +16,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/camelotlabs/camelot-amm-v3" + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7mPnp1UqmefcCycB8umy4uUkTkFxMoHn1Y7ncBUscePp" } const fetch = (chain: Chain) => { diff --git a/fees/clever.ts b/fees/clever.ts index 68e161fad4..15fd6b253d 100644 --- a/fees/clever.ts +++ b/fees/clever.ts @@ -6,7 +6,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints = { [ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/aladdindaogroup/aladdin-fees", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo", }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/clipper.ts b/fees/clipper.ts index 8c7c2f1e72..68c2929706 100644 --- a/fees/clipper.ts +++ b/fees/clipper.ts @@ -13,7 +13,7 @@ const endpoints: TEndpoint = { [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-optimism", [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-polygon", // [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-moonbeam", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-arbitrum", + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W", }; interface IPool { diff --git a/fees/concentrator.ts b/fees/concentrator.ts index ad63b6a8f0..ab5c31a5de 100644 --- a/fees/concentrator.ts +++ b/fees/concentrator.ts @@ -13,7 +13,7 @@ const priceUrl = "https://api.aladdin.club/api/coingecko/price"; const endpoints = { [ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/aladdindaogroup/aladdin-fees", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo", }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/curve.ts b/fees/curve.ts index 91a7431171..e9385bf339 100644 --- a/fees/curve.ts +++ b/fees/curve.ts @@ -7,13 +7,13 @@ import fetchURL from "../utils/fetchURL"; const endpoints = { [ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/convex-community/volume-mainnet", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7FpNAjYhdo41FSdEro5P55uviKw69yhfPgxiWzPkr9au", [OPTIMISM]: "https://api.thegraph.com/subgraphs/name/convex-community/volume-optimism", [ARBITRUM]: "https://api.thegraph.com/subgraphs/name/convex-community/volume-arbitrum", [POLYGON]: - "https://api.thegraph.com/subgraphs/name/convex-community/volume-matic", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EXzFgeWbfgcLgUFEa9rHcQtTy2EcdvJnosTVkPvKe7EU", [AVAX]: "https://api.thegraph.com/subgraphs/name/convex-community/volume-avalanche", [FANTOM]: diff --git a/fees/equity/index.ts b/fees/equity/index.ts index 4fc7a72624..a12ab15449 100644 --- a/fees/equity/index.ts +++ b/fees/equity/index.ts @@ -6,7 +6,7 @@ import { FANTOM } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints = { - [FANTOM]: "https://api.thegraph.com/subgraphs/name/chimpydev/equity-core2", + [FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9USQeMVzzBbxsXhQUmCk5fZursvL9Vj3cv8joYNXeKt9", }; const graphs = (graphUrls: ChainEndpoints) => { diff --git a/fees/fx-protocol.ts b/fees/fx-protocol.ts index 2f941a4f25..e0b0df7e02 100644 --- a/fees/fx-protocol.ts +++ b/fees/fx-protocol.ts @@ -10,7 +10,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints = { [ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/aladdindaogroup/aladdin-fees", + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo", }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/moonwell-artemis.ts b/fees/moonwell-artemis.ts index 181ad64323..6576dd8471 100644 --- a/fees/moonwell-artemis.ts +++ b/fees/moonwell-artemis.ts @@ -7,7 +7,7 @@ import BigNumber from "bignumber.js"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints = { - [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/messari/moonwell-moonbeam" + [CHAIN.MOONBEAN]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DQhrdUHwspQf3hSjDtyfS6uqq9YiKoLF3Ut3U9os2HK" } diff --git a/fees/pika-protocol-v4.ts b/fees/pika-protocol-v4.ts index 99242e67f6..e4a1812c96 100644 --- a/fees/pika-protocol-v4.ts +++ b/fees/pika-protocol-v4.ts @@ -37,7 +37,7 @@ interface ILiquidations { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/ethandev0/pikaperpv4_optimism" + [CHAIN.OPTIMISM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5dP9FpbXxmNPRaERfzyKEGuRKh2NRQuwPBWfMLGoSRX5" } const fetch = (chain: Chain) => { diff --git a/fees/pika-protocol.ts b/fees/pika-protocol.ts index 5a4ef6a146..ec8ae435cb 100644 --- a/fees/pika-protocol.ts +++ b/fees/pika-protocol.ts @@ -37,7 +37,7 @@ interface ILiquidations { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/ethandev0/pikaperpv3_optimism" + [CHAIN.OPTIMISM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DUcxevdqV8kBQdHWcdUcaEctaoVyqYZTtCftojL23NbA" } const fetch = (chain: Chain) => { diff --git a/fees/quickswap.ts b/fees/quickswap.ts index bafac82a51..f8aab53233 100644 --- a/fees/quickswap.ts +++ b/fees/quickswap.ts @@ -8,7 +8,7 @@ import { } from "../helpers/getUniSubgraph" const v2Endpoints = { - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/sameepsi/quickswap06", + [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd", } const v2Graph = getGraphDimensions({ graphUrls: v2Endpoints, @@ -24,7 +24,7 @@ const v2Graph = getGraphDimensions({ }); const v3Endpoints = { - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/sameepsi/quickswap-v3", + [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7", // [CHAIN.DOGECHAIN]: "https://graph-node.dogechain.dog/subgraphs/name/quickswap/dogechain-info", [CHAIN.POLYGON_ZKEVM]:"https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7" } diff --git a/fees/solidly-v3.ts b/fees/solidly-v3.ts index 6ebf071fe9..2d9c6360f8 100644 --- a/fees/solidly-v3.ts +++ b/fees/solidly-v3.ts @@ -16,7 +16,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3", + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t", // [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-optimism", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-arbitrum", diff --git a/fees/substanceX/index.ts b/fees/substanceX/index.ts index d6e6ca6d33..d34fe47703 100644 --- a/fees/substanceX/index.ts +++ b/fees/substanceX/index.ts @@ -11,7 +11,7 @@ const endpoints = { }; const blockNumberGraph = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks", + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/64DCU8nq48qdDABnobpDafsg7RF75Rx5soKrHiGA8mqp", [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta-blocks" } diff --git a/fees/thena-v1.ts b/fees/thena-v1.ts index f763f00b12..9f9e00aec5 100644 --- a/fees/thena-v1.ts +++ b/fees/thena-v1.ts @@ -11,7 +11,7 @@ import { CHAIN } from "../helpers/chains"; const STABLE_FEES = 0.0001; const VOLATILE_FEES = 0.002; const endpoint = - "https://api.thegraph.com/subgraphs/name/thenaursa/thena-v1"; + "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FKEt2N5VmSdEYcz7fYLPvvnyEUkReQ7rvmXzs6tiKCz1"; const getFees = () => { return async (timestamp: number): Promise => { diff --git a/fees/thena-v3.ts b/fees/thena-v3.ts index 7c0224307e..2d0179675c 100644 --- a/fees/thena-v3.ts +++ b/fees/thena-v3.ts @@ -16,7 +16,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/thenaursa/thena-fusion" + [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Hnjf3ipVMCkQze3jmHp8tpSMgPmtPnXBR38iM4ix1cLt" } const fetch = (chain: Chain) => { diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index 1cf59ed5b4..4e01c71a48 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -9,26 +9,26 @@ import { getEnv } from "../../helpers/env"; const endpoints = { [CHAIN.BSC]: "https://proxy-worker.pancake-swap.workers.dev/bsc-exchange", - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/pancakeswap/exhange-eth", + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9opY17WnEPD4REcC43yHycQthSeUMQE26wyoeMjZTLEx", [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45376/exchange-v2-polygon-zkevm/version/latest", [CHAIN.ERA]: "https://api.studio.thegraph.com/query/45376/exchange-v2-zksync/version/latest", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-v2-arb", + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EsL7geTRcA3LaLLM9EcMFzYbUgnvf8RixoEEGErrodB3", [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/pancakeswap/exhange-v2", [CHAIN.BASE]: "https://api.studio.thegraph.com/query/45376/exchange-v2-base/version/latest", [CHAIN.OP_BNB]: `${getEnv('PANCAKESWAP_OPBNB_SUBGRAPH')}/subgraphs/name/pancakeswap/exchange-v2` }; const stablesSwapEndpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-stableswap", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-stableswap-arb" + [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/C5EuiZwWkCge7edveeMcvDmdr7jjc1zG4vgn8uucLdfz", + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/y7G5NUSq5ngsLH2jBGQajjxuLgW1bcqWiBqKmBk3MWM" } const v3Endpoint = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-v3-bsc", - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-v3-eth", + [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Hv1GncLY5docZoGtXjo4kwbTvxm3MAhVZqBZE4sUT9eZ", + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CJYGNhb7RvnhfBDjqpRnD3oxgyhibzc7fkAMa38YV3oS", [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45376/exchange-v3-polygon-zkevm/version/latest", [CHAIN.ERA]: "https://api.studio.thegraph.com/query/45376/exchange-v3-zksync/version/latest", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-v3-arb", + [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/251MHFNN1rwjErXD2efWMpNS73SANZN8Ua192zw6iXve", [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/pancakeswap/exchange-v3-linea", [CHAIN.BASE]: "https://api.studio.thegraph.com/query/45376/exchange-v3-base/version/latest", [CHAIN.OP_BNB]: `${getEnv('PANCAKESWAP_OPBNB_SUBGRAPH')}/subgraphs/name/pancakeswap/exchange-v3` diff --git a/protocols/smbswap/index.ts b/protocols/smbswap/index.ts index 3e0c0b4201..2d2009694e 100644 --- a/protocols/smbswap/index.ts +++ b/protocols/smbswap/index.ts @@ -6,15 +6,15 @@ import disabledAdapter from "../../helpers/disabledAdapter"; import { getGraphDimensions } from "../../helpers/getUniSubgraph" const endpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/cr3k/exchange" + [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9BtGwsWynjj21VyrAtNfeKG5kMhcZ7Z12T53wo7PBTLj" }; const stablesSwapEndpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/cr3k/exchange-stableswap" + [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8o2ZdXbsnHapQvT9Jh8NXLivnLSYVGQXsgVfBzfckLiW" } const v3Endpoint = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/cr3k/exchange-v3-bsc" + [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8XiGZs3G3dDL3YQJx7CsMGXdn3CUBBC9CVpCe1xrsSA7" } const VOLUME_USD = "volumeUSD"; diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 522e4641ba..b255599435 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -14,11 +14,11 @@ import { import request, { gql } from 'graphql-request'; const v1Endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap", + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/ESnjgAG9NjfmHypk4Huu4PVvz55fUwpyrRqHF21thoLJ", }; const v2Endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v2-dev", + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/A3Np3RQbaBA6oKJgiwDJeo5T3zrYfGHPWFYayMwtNDum", }; const blacklisted = { @@ -65,14 +65,14 @@ const blacklisted = { const KEY = 'a265c39f5a123ab2d40b25dc352adc22' const v3Endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3", + [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5AXe97hGLfjgFAc6Xvg6uDpsD5hqpxrxcma9MoxG7j7h", [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optmism-regen", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/id/QmZ5uwhnwsJXAQGYEF8qKPQ85iVhYAcVZcZAPfrF7ZNb9z", // [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/"+KEY+"/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm", - // [CHAIN.CELO]: "https://api.thegraph.com/subgraphs/name/jesse-sawa/uniswap-celo", - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-bsc", + // [CHAIN.CELO]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4", + [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/F85MNzUGYqgSHSHRGgeVMNsdnW1KtZSVgFULumXRZTw2", // [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-avax", - [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-base", + [CHAIN.BASE]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG", [CHAIN.ERA]: "https://api.thegraph.com/subgraphs/name/freakyfractal/uniswap-v3-zksync-era" }; From 08e9f33ee2f3e9235aefe504497648f5b922f9f9 Mon Sep 17 00:00:00 2001 From: slasher125 Date: Wed, 12 Jun 2024 18:32:50 +0400 Subject: [PATCH 0779/1590] missing changes --- dexs/sushiswap/classic.ts | 4 ++-- fees/aave/index.ts | 20 ++++++++++---------- fees/liquity.ts | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index 7bec4d7452..0df8750cc1 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -63,9 +63,9 @@ const endpointsClassic = { [CHAIN.HARMONY]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FrcJBCCKCYGTLLXJmhppXfPKsNoyod4zqNLjHfXj1KHg", // [CHAIN.MOONRIVER]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5skUrJzgVm6vXAmdKN7gw4CjYx3pgLDeUeUqVzqLXkWT", [CHAIN.XDAI]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4a8hcsttqsmycmmeFcpffGMZhBDU4NhHfyHH6YNcnu7b", - // [CHAIN.MOONBEAM]: 'https://api.thegraph.com/subgraphs/name/sushiswap/exchange-moonbeam', + // [CHAIN.MOONBEAM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3tNHz9aTBa2KUthYZiZZxayYYpxXACverKRrkafhoBru', [CHAIN.BOBA]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/sushiswap-boba', - [CHAIN.FUSE]: 'https://api.thegraph.com/subgraphs/name/sushiswap/exchange-fuse', + [CHAIN.FUSE]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DcaAUrnx2mWKVQNsVJiuz7zhjoLkvtDUcoq73NdBvbTo', [CHAIN.CORE]: 'https://thegraph.coredao.org/subgraphs/name/sushi-v2/sushiswap-core', [CHAIN.BLAST]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/sushiswap-blast/gn', }; diff --git a/fees/aave/index.ts b/fees/aave/index.ts index 910938ac4c..ac863bb57f 100644 --- a/fees/aave/index.ts +++ b/fees/aave/index.ts @@ -37,21 +37,21 @@ const v1Endpoints = { const v2Endpoints = { [ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8wR23o1zkS4gpLqLNU4kG3JHYVucqGyopL5utGxP2q1N", - [AVAX]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v2-avalanche', + [AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EZvK18pMhwiCjxwesRLTg81fP33WnR6BnZe5Cvma3H1C', [POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/H1Et77RZh3XEf27vkAmJyzgCME2RSFLtDS2f4PPW6CGp" }; //V3 endpoints avilable here: https://github.com/aave/protocol-subgraphs const v3Endpoints = { - [POLYGON]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-polygon', - [AVAX]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-avalanche', - [ARBITRUM]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-arbitrum', - [OPTIMISM]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-optimism', - [FANTOM]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-fantom', - [HARMONY]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-harmony', - [CHAIN.ETHEREUM]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3', - [CHAIN.BSC]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-bnb', - [CHAIN.XDAI]: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v3-gnosis', + [POLYGON]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Co2URyXjnxaw8WqxKyVHdirq9Ahhm5vcTs4dMedAq211', + [AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2h9woxy8RTjHu1HJsCEnmzpPHFArU33avmUh4f71JpVn', + [ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DLuE98kEb5pQNXAcKFQGQgfSQ57Xdou4jnVbAEqMfy3B', + [OPTIMISM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DSfLz8oQBUeU5atALgUFQKMTSYV9mZAVYp4noLSXAfvb', + [FANTOM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6L1vPqyE3xvkzkWjh6wUKc1ABWYYps5HJahoxhrv2PJn', + [HARMONY]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FifJapBdCqT9vgNqJ5axmr6eNyUpUSaRAbbZTfsViNsT', + [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Cd2gEDVeqnjBn1hSeqFMitw8Q1iiyV9FYUZkLNRcL87g', + [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7Jk85XgkV1MQ7u56hD8rr65rfASbayJXopugWkUoBMnZ', + [CHAIN.XDAI]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/HtcDaL8L8iZ2KQNNS44EBVmLruzxuNAz1RkBYdui1QUT', [CHAIN.METIS]: 'https://metisapi.0xgraph.xyz/subgraphs/name/aave/protocol-v3-metis', [CHAIN.BASE]: 'https://api.goldsky.com/api/public/project_clk74pd7lueg738tw9sjh79d6/subgraphs/aave-v3-base/1.0.0/gn', [CHAIN.SCROLL]: 'https://api.goldsky.com/api/public/project_clk74pd7lueg738tw9sjh79d6/subgraphs/aave-v3-scroll/1.0.0/gn', diff --git a/fees/liquity.ts b/fees/liquity.ts index 9a800950e9..71f947e557 100644 --- a/fees/liquity.ts +++ b/fees/liquity.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../helpers/chains"; const { request, gql } = require("graphql-request"); -const URL = 'https://api.thegraph.com/subgraphs/name/liquity/liquity' +const URL = 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8wump5sEYBV7vG1sKaNrvbqhTAV4EPKCdPw4ygms3Dmd' interface IValue { totalBorrowingFeesPaid: string; totalRedemptionFeesPaid: string; From 3b37ae588e2ceeb6e87781aa2b709b1c0c267128 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 12 Jun 2024 15:31:54 +0000 Subject: [PATCH 0780/1590] fix jito not support version 2 --- fees/jito.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fees/jito.ts b/fees/jito.ts index 14907beddf..0775d9546f 100644 --- a/fees/jito.ts +++ b/fees/jito.ts @@ -3,7 +3,7 @@ import { FetchOptions, SimpleAdapter } from "../adapters/types" import { CHAIN } from "../helpers/chains" import { queryDune } from "../helpers/dune" -const fetchFees = async (options: FetchOptions) => { +const fetchFees = async (_a:any, _: any,options: FetchOptions) => { const dailyFees = options.createBalances() const dailyRevenue = options.createBalances() const result = await queryDune("3740661"); @@ -14,13 +14,14 @@ const fetchFees = async (options: FetchOptions) => { dailyRevenue.resizeBy(0.04) return { + timestamp: options.startOfDay, dailyFees: dailyFees, dailyRevenue: dailyRevenue, } } const adapter: SimpleAdapter = { - version: 2, + // version: 2, adapter: { [CHAIN.SOLANA]: { fetch: fetchFees, From 3b29ade15605dd31ee3f6152ab7da9060370425a Mon Sep 17 00:00:00 2001 From: slasher125 Date: Wed, 12 Jun 2024 20:40:30 +0400 Subject: [PATCH 0781/1590] missing upgrades --- dexs/3xcalibur/index.ts | 2 +- dexs/apeswap/index.ts | 2 +- dexs/balancer/index.ts | 2 +- dexs/baseswap/index.ts | 2 +- dexs/biswap/index.ts | 2 +- dexs/camelot/index.ts | 2 +- dexs/champagneswap/index.ts | 2 +- dexs/defiplaza/index.ts | 2 +- dexs/elk/index.ts | 16 ++++++++-------- dexs/kyberswap/index.ts | 2 +- dexs/pangolin/index.ts | 2 +- dexs/ramses-exchange-v2/index.ts | 2 +- dexs/saddle-finance/index.ts | 2 +- dexs/stellaswap/index.ts | 2 +- dexs/sushiswap/trident.ts | 8 ++++---- dexs/swapr/index.ts | 2 +- dexs/traderjoe/index.ts | 2 +- dexs/verse/index.ts | 2 +- dexs/zipswap/index.ts | 2 +- dexs/zyberswap/index.ts | 2 +- fees/balancer.ts | 2 +- fees/biswap.ts | 2 +- fees/bsc.ts | 2 +- fees/camelot-v2.ts | 2 +- fees/curve.ts | 10 +++++----- fees/defiplaza/index.ts | 2 +- fees/elk.ts | 16 ++++++++-------- fees/hono.ts | 2 +- fees/kyberswap.ts | 2 +- fees/pangolin.ts | 2 +- fees/premia/index.ts | 8 ++++---- fees/ramses-exchange-v1/bribes.ts | 2 +- fees/ramses-exchange-v2/bribes.ts | 2 +- fees/ramses-exchange-v2/index.ts | 2 +- fees/zyberswap.ts | 2 +- options/premia/index.ts | 8 ++++---- 36 files changed, 63 insertions(+), 63 deletions(-) diff --git a/dexs/3xcalibur/index.ts b/dexs/3xcalibur/index.ts index df7b06c750..31cfb121ab 100644 --- a/dexs/3xcalibur/index.ts +++ b/dexs/3xcalibur/index.ts @@ -4,7 +4,7 @@ import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/0xleez/xcali-arbitrum", + [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/J9xPBr2XdBxWvLi2HSiz8hW76HUU91WQ9ztkicCRccDS', }; const graphs = getChainVolume({ diff --git a/dexs/apeswap/index.ts b/dexs/apeswap/index.ts index 28ba8ff6b7..fa637e0533 100644 --- a/dexs/apeswap/index.ts +++ b/dexs/apeswap/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/apeswapfinance/bsc-dex", + [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/GH4Zt29mCApHwMfavNFw5ZdQDH3owc2Wq8DdU4hGPXYe', [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/prof-sd/as-matic-graft", [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/apeswapfinance/ethereum-dex", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/prof-sd/arbitrum-dex" diff --git a/dexs/balancer/index.ts b/dexs/balancer/index.ts index e8328cbce8..5628a2bafe 100644 --- a/dexs/balancer/index.ts +++ b/dexs/balancer/index.ts @@ -13,7 +13,7 @@ const endpoints: ChainEndpoints = { "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN", [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc", - [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gnosis-chain-v2", + [CHAIN.XDAI]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg', [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest", [CHAIN.AVAX]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu", [CHAIN.BASE]: "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest" diff --git a/dexs/baseswap/index.ts b/dexs/baseswap/index.ts index b52df5505e..b0a6277d40 100644 --- a/dexs/baseswap/index.ts +++ b/dexs/baseswap/index.ts @@ -14,7 +14,7 @@ const v2Endpoints: ChainEndpoints = { [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/harleen-m/baseswap", }; const v3Endpoints = { - [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/baseswapfi/v3-base", + [CHAIN.BASE]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/39pzQzH5r3vmovd9fTs7rVDVFCj1xJye3dTMNHcSkSfL', }; // Fetch function to query the subgraphs diff --git a/dexs/biswap/index.ts b/dexs/biswap/index.ts index 3d29e62b1c..2abaa62669 100644 --- a/dexs/biswap/index.ts +++ b/dexs/biswap/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/biswapcom/exchange5" + [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd' }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData", diff --git a/dexs/camelot/index.ts b/dexs/camelot/index.ts index 8e2852e493..19d115b81f 100644 --- a/dexs/camelot/index.ts +++ b/dexs/camelot/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/camelotlabs/camelot-amm-2" + [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv' }, {}); adapters.adapter.arbitrum.start = 1668124800; diff --git a/dexs/champagneswap/index.ts b/dexs/champagneswap/index.ts index 9e432d3f78..c87a3db687 100644 --- a/dexs/champagneswap/index.ts +++ b/dexs/champagneswap/index.ts @@ -9,7 +9,7 @@ const { const { BSC } = require("../../helpers/chains"); const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); const endpoints = { - [BSC]: "https://api.thegraph.com/subgraphs/name/champagneswap/exchangev3", + [BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9gXThrkBPCRnK5ncBGySQJZoFUUSC5RDAYYciEZ323Pj', }; const DAILY_VOLUME_FACTORY = "champagneDayData"; diff --git a/dexs/defiplaza/index.ts b/dexs/defiplaza/index.ts index 3e0ee47f27..c941a64ea0 100644 --- a/dexs/defiplaza/index.ts +++ b/dexs/defiplaza/index.ts @@ -14,7 +14,7 @@ type RadixPlazaResponse = { swaps: number } -const thegraph_endpoints = "https://api.thegraph.com/subgraphs/name/omegasyndicate/defiplaza"; +const thegraph_endpoints = 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4z9FBF12CrfoQJhAkWicqzY2fKYN9QRmuzSsizVXhjKa'; const radix_endpoint = "https://radix.defiplaza.net/api/defillama/volume"; const adapter: SimpleAdapter = { diff --git a/dexs/elk/index.ts b/dexs/elk/index.ts index 361ac43fea..73c09b13b0 100644 --- a/dexs/elk/index.ts +++ b/dexs/elk/index.ts @@ -2,19 +2,19 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const adapter = univ2Adapter({ - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-arbitrum", - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-avax", - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-bsc", - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-ftm", - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-matic", + [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/B8TGNwQ8xMoeFCdsv9dPkciRBpEYAy1UxmXDr7nc9fpE', + [CHAIN.AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2dyce92CewvhV17C8BMFoMCgaXdPTtwBzaz8AReQR3YV', + [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5tRz9anigEVND48Gx1mUpNNM4YSm3NpzG9XRB8dYAMhb', + [CHAIN.FANTOM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/pmqe2dQvH4PK7aaFh4GXrr49wpKRr3GjPCnNEgEb6U2', + [CHAIN.POLYGON]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8jzpT6nnKgmqcdGocys97YWkuqwDbHBxpozsKcxH1KUP', // [CHAIN.HECO]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-heco" - [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-xdai", + [CHAIN.XDAI]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/kD9njskfB9xv7gDnsU2sz4X4sXfEimBv8xMJ6votFND', // [CHAIN.MOONRIVER]: "https://moonriver-graph.elk.finance/subgraphs/name/elkfinance/elkdex-moonriver", // [CHAIN.ELASTOS]: "https://elastos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-elastos", // [CHAIN.OKEXCHAIN]: "https://okex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-okex", // [CHAIN.KCC]: "https://kcc-graph.elk.finance/subgraphs/name/elkfinance/elkdex-kcc", - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-eth", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-optimism", + [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/59tcH5BPyXj41XZgn1ZYy4pE8iDdzaZpR9MRhmuPW4Lr', + [CHAIN.OPTIMISM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/H7UcKWuAqQPqWKcnNLn2Jamy9zE7wVgsLSRQpPwXo2Ag', // [CHAIN.CRONOS]: "https://cronos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-cronos", // [CHAIN.FUSE]: "https://fuse-graph.elk.finance/subgraphs/name/elkfinance/elkdex-fuse", // [CHAIN.IOTEX]: "https://iotex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-iotex", diff --git a/dexs/kyberswap/index.ts b/dexs/kyberswap/index.ts index 439030221b..e68f35be6a 100644 --- a/dexs/kyberswap/index.ts +++ b/dexs/kyberswap/index.ts @@ -56,7 +56,7 @@ const elasticEndpoints = elasticChains.reduce((acc, chain)=>({ //cronos: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-cronos", // missing -> almost no volume and stale ethereum: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-mainnet", arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum", - polygon: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-matic", + polygon: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT', [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", [CHAIN.BASE]: "https://base-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-base", [CHAIN.SCROLL]: "https://scroll-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-scroll" diff --git a/dexs/pangolin/index.ts b/dexs/pangolin/index.ts index 6826f96abd..32db9409d8 100644 --- a/dexs/pangolin/index.ts +++ b/dexs/pangolin/index.ts @@ -1,7 +1,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - "avax": "https://api.thegraph.com/subgraphs/name/pangolindex/exchange" + "avax": 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq' }, { factoriesName: "pangolinFactories", dayData: "pangolinDayData", diff --git a/dexs/ramses-exchange-v2/index.ts b/dexs/ramses-exchange-v2/index.ts index 16d81e682c..4643a6a1da 100644 --- a/dexs/ramses-exchange-v2/index.ts +++ b/dexs/ramses-exchange-v2/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/ramsesexchange/concentrated-liquidity-graph" + [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea' }, { factoriesName: "factories", dayData: "uniswapDayData", diff --git a/dexs/saddle-finance/index.ts b/dexs/saddle-finance/index.ts index 70634220cd..d454f51562 100644 --- a/dexs/saddle-finance/index.ts +++ b/dexs/saddle-finance/index.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/saddle-finance/saddle", + [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/79UL5SaLLsbXqC8Ks6v3fwWHR1FRs636FFRHn55o5SWq', [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/saddle-finance/saddle-arbitrum" }; diff --git a/dexs/stellaswap/index.ts b/dexs/stellaswap/index.ts index b4bf383148..99cd016075 100644 --- a/dexs/stellaswap/index.ts +++ b/dexs/stellaswap/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/stellaswap/stella-swap" + [CHAIN.MOONBEAN]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/HgSAfZvHEDbAVuZciPUYEqFzhAUnjJWmyix5C1R2tmTp' }, {}); adapters.adapter.moonbeam.start = 1641960253; export default adapters; diff --git a/dexs/sushiswap/trident.ts b/dexs/sushiswap/trident.ts index 9ba77ad98e..6c58dd8761 100644 --- a/dexs/sushiswap/trident.ts +++ b/dexs/sushiswap/trident.ts @@ -7,13 +7,13 @@ import { FetchOptions } from "../../adapters/types"; const endpointsTrident: Record = { [CHAIN.POLYGON]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-polygon', - [CHAIN.OPTIMISM]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-optimism', + [CHAIN.OPTIMISM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FEgRuH9zeTRMZgpVv5YavoFEcisoK6KHk3zgQRRBqt51', //[CHAIN.KAVA]: 'https://pvt.graph.kava.io/subgraphs/name/sushi-v2/trident-kava', // [CHAIN.METIS]: 'https://andromeda.thegraph.metis.io/subgraphs/name/sushi-v2/trident-metis', // [CHAIN.BITTORRENT]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v2/trident-bttc', - [CHAIN.ARBITRUM]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-arbitrum', - [CHAIN.BSC]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-bsc', - [CHAIN.AVAX]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-avalanche', + [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4x8H6ZoGfJykyZqAe2Kx2g5afsp17S9pn8GroRkpezhx', + [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9TQaBw1sU3wi2kdevuygKhfhjP3STnwBe1jUnKxmNhmn', + [CHAIN.AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/NNTV3MgqSGtHMBGdMVLXzzDbKDKmsY87k3PsQ2knmC1', } const VOLUME_FIELD = "volumeUSD"; diff --git a/dexs/swapr/index.ts b/dexs/swapr/index.ts index 0b8d93e2dd..f3b3f6e45d 100644 --- a/dexs/swapr/index.ts +++ b/dexs/swapr/index.ts @@ -3,7 +3,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/dxgraphs/swapr-mainnet-v2", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/dxgraphs/swapr-arbitrum-one-v3", + [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8CtcD8EzHq6YyQrnb4XFz2pnwXVx3nHruj4pcDjHRKpt', [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/dxgraphs/swapr-xdai-v2" }; diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index 933e7a1d0c..5ef194ecbe 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -5,7 +5,7 @@ import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getU import fetchURL from "../../utils/fetchURL"; const endpoints = { - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/exchange", + [CHAIN.AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9ZjERoA7jGANYNz1YNuFMBt11fK44krveEhzssJTWokM', [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/joe-v1-bnb", [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3jFnXqk6UXZyciPu5jfUuPR7kzGXPSndsLNrWXQ6xAxk", }; diff --git a/dexs/verse/index.ts b/dexs/verse/index.ts index eaa5dc7887..30e5c44e0e 100644 --- a/dexs/verse/index.ts +++ b/dexs/verse/index.ts @@ -3,7 +3,7 @@ import { ChainEndpoints, SimpleAdapter, BaseAdapter } from "../../adapters/types import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; const endpoints: ChainEndpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/arnkthr/ethv1", + [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CvSasxLYUvFbYyi7VXGhXL6PNgkZPoVDo2bo66ftEA2V', [CHAIN.SMARTBCH]: "https://analytics-dex.api.bitcoin.com/subgraphs/name/verse/exchange", }; diff --git a/dexs/zipswap/index.ts b/dexs/zipswap/index.ts index c6114ab178..100b6e8295 100644 --- a/dexs/zipswap/index.ts +++ b/dexs/zipswap/index.ts @@ -2,5 +2,5 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/nonamefits/zipswap" + [CHAIN.OPTIMISM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5tAUjmnM9iE4aADZwKhk3fobY8fMFbb1VMsrSKvo4kFr' }, {}); diff --git a/dexs/zyberswap/index.ts b/dexs/zyberswap/index.ts index c5297cec94..a6f1c9cdfc 100644 --- a/dexs/zyberswap/index.ts +++ b/dexs/zyberswap/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; const endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/zyberswap-arbitrum/zyber-amm", + [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R', }; const graphs = getChainVolume({ diff --git a/fees/balancer.ts b/fees/balancer.ts index df5be89d9d..e3f8b7228c 100644 --- a/fees/balancer.ts +++ b/fees/balancer.ts @@ -20,7 +20,7 @@ const v2Endpoints = { [CHAIN.AVAX]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu", [CHAIN.XDAI]: - "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gnosis-chain-v2", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg', [CHAIN.BASE]: "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest", [CHAIN.POLYGON_ZKEVM]: diff --git a/fees/biswap.ts b/fees/biswap.ts index 441568f39c..af39512644 100644 --- a/fees/biswap.ts +++ b/fees/biswap.ts @@ -3,7 +3,7 @@ import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; const adapters = univ2DimensionAdapter({ graphUrls: { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/biswapcom/exchange5" + [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd' }, dailyVolume: { factory: "pancakeDayData" diff --git a/fees/bsc.ts b/fees/bsc.ts index e3f1a2bf1f..b33a93e0eb 100644 --- a/fees/bsc.ts +++ b/fees/bsc.ts @@ -6,7 +6,7 @@ import { Chain } from '@defillama/sdk/build/general'; const endpoints = { [BSC]: - "https://api.thegraph.com/subgraphs/name/dmihal/bsc-validator-rewards" + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3a3f5kp31kutZzjmQoE2NKBSr6Ady5rgxRxD2nygYcQo' } diff --git a/fees/camelot-v2.ts b/fees/camelot-v2.ts index 9a31568e58..f97d069fe9 100644 --- a/fees/camelot-v2.ts +++ b/fees/camelot-v2.ts @@ -16,7 +16,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/camelotlabs/camelot-amm-2" + [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv' } const fetch = (chain: Chain) => { diff --git a/fees/curve.ts b/fees/curve.ts index e9385bf339..36a73d9596 100644 --- a/fees/curve.ts +++ b/fees/curve.ts @@ -9,17 +9,17 @@ const endpoints = { [ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7FpNAjYhdo41FSdEro5P55uviKw69yhfPgxiWzPkr9au", [OPTIMISM]: - "https://api.thegraph.com/subgraphs/name/convex-community/volume-optimism", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7cXBpS75ThtbYwtCD8B277vUfWptmz6vbhk9BKgYrEvQ', [ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/convex-community/volume-arbitrum", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6okUrfq2HYokFytJd2JDhXW2kdyViy5gXWWpZkTnSL8w', [POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EXzFgeWbfgcLgUFEa9rHcQtTy2EcdvJnosTVkPvKe7EU", [AVAX]: - "https://api.thegraph.com/subgraphs/name/convex-community/volume-avalanche", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4m6FwSHYnkQRUBSKdhh5heGd1ojTAXwEiacUyFix2Ygx', [FANTOM]: - "https://api.thegraph.com/subgraphs/name/convex-community/volume-fantom", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7ZnKrxY26bDHZPSqJ3MNkDNjaRXLoc1ZiATDLbVjWa7H', [XDAI]: - "https://api.thegraph.com/subgraphs/name/convex-community/volume-xdai", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/i82AxuGMFX7bqGNpXGrUvXqFMWZjLeRTNpJFvc3aW8L', }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/defiplaza/index.ts b/fees/defiplaza/index.ts index 3ded2083ae..1b8e586d78 100644 --- a/fees/defiplaza/index.ts +++ b/fees/defiplaza/index.ts @@ -13,7 +13,7 @@ type RadixPlazaResponse = { swaps: number } -const thegraph_endpoints = "https://api.thegraph.com/subgraphs/name/omegasyndicate/defiplaza"; +const thegraph_endpoints = 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4z9FBF12CrfoQJhAkWicqzY2fKYN9QRmuzSsizVXhjKa'; const radix_endpoint = "https://radix.defiplaza.net/api/defillama/volume"; const adapter: SimpleAdapter = { diff --git a/fees/elk.ts b/fees/elk.ts index 2e39e107ee..f24fcef195 100644 --- a/fees/elk.ts +++ b/fees/elk.ts @@ -3,19 +3,19 @@ import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; const adapter = univ2DimensionAdapter({ graphUrls: { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-arbitrum", - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-avax", - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-bsc", - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-ftm", - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-matic", + [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/B8TGNwQ8xMoeFCdsv9dPkciRBpEYAy1UxmXDr7nc9fpE', + [CHAIN.AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2dyce92CewvhV17C8BMFoMCgaXdPTtwBzaz8AReQR3YV', + [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5tRz9anigEVND48Gx1mUpNNM4YSm3NpzG9XRB8dYAMhb', + [CHAIN.FANTOM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/pmqe2dQvH4PK7aaFh4GXrr49wpKRr3GjPCnNEgEb6U2', + [CHAIN.POLYGON]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8jzpT6nnKgmqcdGocys97YWkuqwDbHBxpozsKcxH1KUP', // [CHAIN.HECO]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-heco" - [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-xdai", + [CHAIN.XDAI]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/kD9njskfB9xv7gDnsU2sz4X4sXfEimBv8xMJ6votFND', // [CHAIN.MOONRIVER]: "https://moonriver-graph.elk.finance/subgraphs/name/elkfinance/elkdex-moonriver", // [CHAIN.ELASTOS]: "https://elastos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-elastos", // [CHAIN.OKEXCHAIN]: "https://okex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-okex", // [CHAIN.KCC]: "https://kcc-graph.elk.finance/subgraphs/name/elkfinance/elkdex-kcc", - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-eth", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-optimism", + [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/59tcH5BPyXj41XZgn1ZYy4pE8iDdzaZpR9MRhmuPW4Lr', + [CHAIN.OPTIMISM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/H7UcKWuAqQPqWKcnNLn2Jamy9zE7wVgsLSRQpPwXo2Ag', // [CHAIN.CRONOS]: "https://cronos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-cronos", // [CHAIN.FUSE]: "https://fuse-graph.elk.finance/subgraphs/name/elkfinance/elkdex-fuse", // [CHAIN.IOTEX]: "https://iotex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-iotex", diff --git a/fees/hono.ts b/fees/hono.ts index 390f39b632..db67ff5aab 100644 --- a/fees/hono.ts +++ b/fees/hono.ts @@ -10,7 +10,7 @@ interface IData { } const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/nuoanunu/defilahma-revenue-hono" + [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7Trkrt6hPzhLXUH2x4Xt9cSnSmAFKDmKNWuUHEwzgCYJ' }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/kyberswap.ts b/fees/kyberswap.ts index d3182b1b67..0fa0e05e9b 100644 --- a/fees/kyberswap.ts +++ b/fees/kyberswap.ts @@ -29,7 +29,7 @@ const elasticEndpoints: TEndpoint = elasticChains.reduce((acc, chain) => ({ }), { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-mainnet", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum-one", - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-matic", + [CHAIN.POLYGON]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT', [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", [CHAIN.BITTORRENT]: "https://bttc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bttc", [CHAIN.BASE]: "https://base-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-base", diff --git a/fees/pangolin.ts b/fees/pangolin.ts index a4f0355ae6..f5ba6407e6 100644 --- a/fees/pangolin.ts +++ b/fees/pangolin.ts @@ -3,7 +3,7 @@ import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; const adapter = univ2DimensionAdapter({ graphUrls: { - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/pangolindex/exchange" + [CHAIN.AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq' }, dailyVolume: { factory: "pangolinDayData" diff --git a/fees/premia/index.ts b/fees/premia/index.ts index 5f6c1b58a5..bc490aab6c 100644 --- a/fees/premia/index.ts +++ b/fees/premia/index.ts @@ -6,13 +6,13 @@ import getV3Data from "./v3" const v2Endpoints: ChainEndpoints = { [CHAIN.ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/premiafinance/premiav2", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CqWfkgRsJRrQ5vWq9tkEr68F5nvbAg63ati5SVJQLjK8', [CHAIN.ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/premiafinance/premia-arbitrum", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3o6rxHKuXZdy8jFifV99gMUe8FaVUL8w8bDTNdc4zyYg', [CHAIN.FANTOM]: - "https://api.thegraph.com/subgraphs/name/premiafinance/premia-fantom", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5ahtXN7DVTwnPuDhWqgJWvEeAEP3JD7h2kD1Kpe67VuW', [CHAIN.OPTIMISM]: - "https://api.thegraph.com/subgraphs/name/premiafinance/premia-optimism", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8wMexS8BB1cXWYu2V8cPHURGXSRGDBhshnU9nTiSkXQ7', } const v2StartTimes: { [chain: string]: number } = { diff --git a/fees/ramses-exchange-v1/bribes.ts b/fees/ramses-exchange-v1/bribes.ts index 29e01279c5..3918a85535 100644 --- a/fees/ramses-exchange-v1/bribes.ts +++ b/fees/ramses-exchange-v1/bribes.ts @@ -10,7 +10,7 @@ interface IBribes { } export const fees_bribes = async (fromBlock: number, timestamp: number, balances: Balances) => { - const endpoint = 'https://api.thegraph.com/subgraphs/name/ramsesexchange/concentrated-liquidity-graph'; + const endpoint = 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea'; const graphQuery = ` query GetBribes($fromBlock: Int!) { bribes( diff --git a/fees/ramses-exchange-v2/bribes.ts b/fees/ramses-exchange-v2/bribes.ts index 29e01279c5..3918a85535 100644 --- a/fees/ramses-exchange-v2/bribes.ts +++ b/fees/ramses-exchange-v2/bribes.ts @@ -10,7 +10,7 @@ interface IBribes { } export const fees_bribes = async (fromBlock: number, timestamp: number, balances: Balances) => { - const endpoint = 'https://api.thegraph.com/subgraphs/name/ramsesexchange/concentrated-liquidity-graph'; + const endpoint = 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea'; const graphQuery = ` query GetBribes($fromBlock: Int!) { bribes( diff --git a/fees/ramses-exchange-v2/index.ts b/fees/ramses-exchange-v2/index.ts index 523d7fdcbb..06db02d95c 100644 --- a/fees/ramses-exchange-v2/index.ts +++ b/fees/ramses-exchange-v2/index.ts @@ -28,7 +28,7 @@ const getBribes = async ({ fromTimestamp, toTimestamp, createBalances, getFromBl }; const v2Endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/ramsesexchange/concentrated-liquidity-graph", + [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea', }; const VOLUME_USD = "volumeUSD"; diff --git a/fees/zyberswap.ts b/fees/zyberswap.ts index 722c284641..9dce5ceb4a 100644 --- a/fees/zyberswap.ts +++ b/fees/zyberswap.ts @@ -8,7 +8,7 @@ import { } from "../helpers/getUniSubgraph" const v2Endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/zyberswap-arbitrum/zyber-amm", + [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R', } const v2Graph = getGraphDimensions({ graphUrls: v2Endpoints, diff --git a/options/premia/index.ts b/options/premia/index.ts index 965db7ce59..ecd30ebab5 100644 --- a/options/premia/index.ts +++ b/options/premia/index.ts @@ -6,13 +6,13 @@ import getV3Data from "./v3" const v2Endpoints: ChainEndpoints = { [CHAIN.ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/premiafinance/premiav2", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CqWfkgRsJRrQ5vWq9tkEr68F5nvbAg63ati5SVJQLjK8', [CHAIN.ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/premiafinance/premia-arbitrum", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3o6rxHKuXZdy8jFifV99gMUe8FaVUL8w8bDTNdc4zyYg', [CHAIN.FANTOM]: - "https://api.thegraph.com/subgraphs/name/premiafinance/premia-fantom", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5ahtXN7DVTwnPuDhWqgJWvEeAEP3JD7h2kD1Kpe67VuW', [CHAIN.OPTIMISM]: - "https://api.thegraph.com/subgraphs/name/premiafinance/premia-optimism", + 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8wMexS8BB1cXWYu2V8cPHURGXSRGDBhshnU9nTiSkXQ7', } const v2StartTimes: { [chain: string]: number } = { From abbb758ad17e2583b52463e9b53c722e4d0982b8 Mon Sep 17 00:00:00 2001 From: slasher125 Date: Wed, 12 Jun 2024 21:56:21 +0400 Subject: [PATCH 0782/1590] replace placeholder --- dexs/3xcalibur/index.ts | 2 +- dexs/ArbitrumExchange/index.ts | 2 +- dexs/SubstanceX/index.ts | 2 +- dexs/ampleswap/index.ts | 2 +- dexs/apeswap/index.ts | 2 +- dexs/auragi/index.ts | 2 +- dexs/balancer/index.ts | 12 ++++++------ dexs/baseswap/index.ts | 2 +- dexs/biswap/index.ts | 2 +- dexs/camelot-v3/index.ts | 2 +- dexs/camelot/index.ts | 2 +- dexs/champagneswap/index.ts | 2 +- dexs/clipper/index.ts | 2 +- dexs/cometh/index.ts | 2 +- dexs/defi-swap/index.ts | 2 +- dexs/defiplaza/index.ts | 2 +- dexs/dodo/index.ts | 6 +++--- dexs/elk/index.ts | 16 ++++++++-------- dexs/equity-spot/index.ts | 2 +- dexs/huckleberry/index.ts | 2 +- dexs/kyberswap/index.ts | 2 +- dexs/morpheus-swap/index.ts | 2 +- dexs/pangolin/index.ts | 2 +- dexs/pika-protocol-v4/index.ts | 2 +- dexs/pika-protocol/index.ts | 2 +- dexs/quickswap/index.ts | 4 ++-- dexs/ramses-exchange-v2/index.ts | 2 +- dexs/saddle-finance/index.ts | 2 +- dexs/solidly-v3/index.ts | 2 +- dexs/spookyswap/index.ts | 2 +- dexs/stellaswap/index.ts | 2 +- dexs/sushiswap/classic.ts | 26 +++++++++++++------------- dexs/sushiswap/trident.ts | 8 ++++---- dexs/swapr/index.ts | 2 +- dexs/templedao-trade/index.ts | 2 +- dexs/thena-perp/index.ts | 2 +- dexs/thena-v3/index.ts | 2 +- dexs/thena/index.ts | 2 +- dexs/traderjoe/index.ts | 4 ++-- dexs/verse/index.ts | 2 +- dexs/wagmi/wagmi.ts | 2 +- dexs/wombat-exchange/index.ts | 10 +++++----- dexs/zipswap/index.ts | 2 +- dexs/zyberswap/index.ts | 2 +- fees/aave/index.ts | 26 +++++++++++++------------- fees/auragi.ts | 2 +- fees/balancer.ts | 12 ++++++------ fees/betswirl/index.ts | 2 +- fees/biswap.ts | 2 +- fees/bsc.ts | 2 +- fees/camelot-v2.ts | 2 +- fees/camelot-v3.ts | 2 +- fees/clever.ts | 2 +- fees/clipper.ts | 2 +- fees/concentrator.ts | 2 +- fees/curve.ts | 14 +++++++------- fees/defiplaza/index.ts | 2 +- fees/elk.ts | 16 ++++++++-------- fees/equity/index.ts | 2 +- fees/fx-protocol.ts | 2 +- fees/hono.ts | 2 +- fees/kyberswap.ts | 2 +- fees/liquity.ts | 2 +- fees/moonwell-artemis.ts | 2 +- fees/pangolin.ts | 2 +- fees/pika-protocol-v4.ts | 2 +- fees/pika-protocol.ts | 2 +- fees/premia/index.ts | 8 ++++---- fees/quickswap.ts | 4 ++-- fees/ramses-exchange-v1/bribes.ts | 2 +- fees/ramses-exchange-v2/bribes.ts | 2 +- fees/ramses-exchange-v2/index.ts | 2 +- fees/solidly-v3.ts | 2 +- fees/substanceX/index.ts | 2 +- fees/thena-v1.ts | 2 +- fees/thena-v3.ts | 2 +- fees/zyberswap.ts | 2 +- options/premia/index.ts | 8 ++++---- protocols/pancakeswap/index.ts | 14 +++++++------- protocols/smbswap/index.ts | 6 +++--- protocols/uniswap/index.ts | 12 ++++++------ 81 files changed, 166 insertions(+), 166 deletions(-) diff --git a/dexs/3xcalibur/index.ts b/dexs/3xcalibur/index.ts index 31cfb121ab..d27ec7a1a8 100644 --- a/dexs/3xcalibur/index.ts +++ b/dexs/3xcalibur/index.ts @@ -4,7 +4,7 @@ import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/J9xPBr2XdBxWvLi2HSiz8hW76HUU91WQ9ztkicCRccDS', + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/J9xPBr2XdBxWvLi2HSiz8hW76HUU91WQ9ztkicCRccDS`, }; const graphs = getChainVolume({ diff --git a/dexs/ArbitrumExchange/index.ts b/dexs/ArbitrumExchange/index.ts index 6caca5f0a2..08606c51c9 100644 --- a/dexs/ArbitrumExchange/index.ts +++ b/dexs/ArbitrumExchange/index.ts @@ -14,7 +14,7 @@ const v2Endpoints = { }; const v3Endpoints = { - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/AQPMJVpukYUo96WvuKqn7aPZn3m8BHckYs82ZLSMKyeu", + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/AQPMJVpukYUo96WvuKqn7aPZn3m8BHckYs82ZLSMKyeu`, }; const VOLUME_USD = "volumeUSD"; diff --git a/dexs/SubstanceX/index.ts b/dexs/SubstanceX/index.ts index 9745a62af4..347a14cad6 100644 --- a/dexs/SubstanceX/index.ts +++ b/dexs/SubstanceX/index.ts @@ -11,7 +11,7 @@ const endpoints = { }; const blockNumberGraph = { - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/64DCU8nq48qdDABnobpDafsg7RF75Rx5soKrHiGA8mqp", + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/64DCU8nq48qdDABnobpDafsg7RF75Rx5soKrHiGA8mqp`, [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta-blocks" } diff --git a/dexs/ampleswap/index.ts b/dexs/ampleswap/index.ts index db333f765b..30f578c2ce 100644 --- a/dexs/ampleswap/index.ts +++ b/dexs/ampleswap/index.ts @@ -2,7 +2,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2MF3GHhPgvCk8ZHBso8uxTkcT97zjmoEPfxkbeH4D7Jb", + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2MF3GHhPgvCk8ZHBso8uxTkcT97zjmoEPfxkbeH4D7Jb`, }; const adapter = univ2Adapter(endpoints, {}); diff --git a/dexs/apeswap/index.ts b/dexs/apeswap/index.ts index fa637e0533..b5179a661b 100644 --- a/dexs/apeswap/index.ts +++ b/dexs/apeswap/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/GH4Zt29mCApHwMfavNFw5ZdQDH3owc2Wq8DdU4hGPXYe', + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/GH4Zt29mCApHwMfavNFw5ZdQDH3owc2Wq8DdU4hGPXYe`, [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/prof-sd/as-matic-graft", [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/apeswapfinance/ethereum-dex", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/prof-sd/arbitrum-dex" diff --git a/dexs/auragi/index.ts b/dexs/auragi/index.ts index 82366d7dde..a816f21aab 100644 --- a/dexs/auragi/index.ts +++ b/dexs/auragi/index.ts @@ -4,7 +4,7 @@ import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DtNQcRXx82k4azEb5QvUjRbmXSNLTUsUePzPY6PtryEc", + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DtNQcRXx82k4azEb5QvUjRbmXSNLTUsUePzPY6PtryEc`, }; const graphs = getChainVolume({ diff --git a/dexs/balancer/index.ts b/dexs/balancer/index.ts index 5628a2bafe..9db62d533f 100644 --- a/dexs/balancer/index.ts +++ b/dexs/balancer/index.ts @@ -8,14 +8,14 @@ import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getU import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints: ChainEndpoints = { - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/C4ayEZP2yTXRAB8vSaTrgN4m9anTe9Mdm2ViyiAuV9TV", + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/C4ayEZP2yTXRAB8vSaTrgN4m9anTe9Mdm2ViyiAuV9TV`, [CHAIN.POLYGON]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN`, [CHAIN.ARBITRUM]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc", - [CHAIN.XDAI]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc`, + [CHAIN.XDAI]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg`, [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest", - [CHAIN.AVAX]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu", + [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu`, [CHAIN.BASE]: "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest" }; @@ -69,7 +69,7 @@ const v2Graphs = (chain: Chain) => { const v1graphs = getChainVolume({ graphUrls: { - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB" + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB` }, ...graphParams }); diff --git a/dexs/baseswap/index.ts b/dexs/baseswap/index.ts index b0a6277d40..1b38fb2ef6 100644 --- a/dexs/baseswap/index.ts +++ b/dexs/baseswap/index.ts @@ -14,7 +14,7 @@ const v2Endpoints: ChainEndpoints = { [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/harleen-m/baseswap", }; const v3Endpoints = { - [CHAIN.BASE]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/39pzQzH5r3vmovd9fTs7rVDVFCj1xJye3dTMNHcSkSfL', + [CHAIN.BASE]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/39pzQzH5r3vmovd9fTs7rVDVFCj1xJye3dTMNHcSkSfL`, }; // Fetch function to query the subgraphs diff --git a/dexs/biswap/index.ts b/dexs/biswap/index.ts index 2abaa62669..b8b6eb28b4 100644 --- a/dexs/biswap/index.ts +++ b/dexs/biswap/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd' + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd` }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData", diff --git a/dexs/camelot-v3/index.ts b/dexs/camelot-v3/index.ts index 98f6566256..c96b73bf7c 100644 --- a/dexs/camelot-v3/index.ts +++ b/dexs/camelot-v3/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7mPnp1UqmefcCycB8umy4uUkTkFxMoHn1Y7ncBUscePp" + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7mPnp1UqmefcCycB8umy4uUkTkFxMoHn1Y7ncBUscePp` }, { factoriesName: "factories", dayData: "algebraDayData", diff --git a/dexs/camelot/index.ts b/dexs/camelot/index.ts index 19d115b81f..ab0328c511 100644 --- a/dexs/camelot/index.ts +++ b/dexs/camelot/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv' + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv` }, {}); adapters.adapter.arbitrum.start = 1668124800; diff --git a/dexs/champagneswap/index.ts b/dexs/champagneswap/index.ts index c87a3db687..c3443d0773 100644 --- a/dexs/champagneswap/index.ts +++ b/dexs/champagneswap/index.ts @@ -9,7 +9,7 @@ const { const { BSC } = require("../../helpers/chains"); const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); const endpoints = { - [BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9gXThrkBPCRnK5ncBGySQJZoFUUSC5RDAYYciEZ323Pj', + [BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9gXThrkBPCRnK5ncBGySQJZoFUUSC5RDAYYciEZ323Pj`, }; const DAILY_VOLUME_FACTORY = "champagneDayData"; diff --git a/dexs/clipper/index.ts b/dexs/clipper/index.ts index 16c1552506..6b23ae5287 100644 --- a/dexs/clipper/index.ts +++ b/dexs/clipper/index.ts @@ -9,7 +9,7 @@ const endpoints = { [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-optimism", [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-polygon", [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-moonbeam", - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W", + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W`, }; diff --git a/dexs/cometh/index.ts b/dexs/cometh/index.ts index 014a58d2ac..2db17a053e 100644 --- a/dexs/cometh/index.ts +++ b/dexs/cometh/index.ts @@ -2,6 +2,6 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/GcokW8RfC9YJeZF4CPoLUwJwZRcQ8kbDR7WziCMus7LF" + [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/GcokW8RfC9YJeZF4CPoLUwJwZRcQ8kbDR7WziCMus7LF` }, { }); diff --git a/dexs/defi-swap/index.ts b/dexs/defi-swap/index.ts index cc7d81e671..39c68133e1 100644 --- a/dexs/defi-swap/index.ts +++ b/dexs/defi-swap/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapter = univ2Adapter({ - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G7W3G1JGcFbWseucNkHHvQorxyjQLEQt7vt9yPN97hri" + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G7W3G1JGcFbWseucNkHHvQorxyjQLEQt7vt9yPN97hri` }, { factoriesName: "factories", dayData: "dayData", diff --git a/dexs/defiplaza/index.ts b/dexs/defiplaza/index.ts index c941a64ea0..81933761b7 100644 --- a/dexs/defiplaza/index.ts +++ b/dexs/defiplaza/index.ts @@ -14,7 +14,7 @@ type RadixPlazaResponse = { swaps: number } -const thegraph_endpoints = 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4z9FBF12CrfoQJhAkWicqzY2fKYN9QRmuzSsizVXhjKa'; +const thegraph_endpoints = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4z9FBF12CrfoQJhAkWicqzY2fKYN9QRmuzSsizVXhjKa`; const radix_endpoint = "https://radix.defiplaza.net/api/defillama/volume"; const adapter: SimpleAdapter = { diff --git a/dexs/dodo/index.ts b/dexs/dodo/index.ts index 2c3214038b..7f57e13c80 100644 --- a/dexs/dodo/index.ts +++ b/dexs/dodo/index.ts @@ -10,9 +10,9 @@ import dailyVolumePayload from "./dailyVolumePayload"; [CHAIN.BSC]: "https://api.dodoex.io/graphql?opname=FetchDashboardDailyData", [CHAIN.ETHEREUM]: "https://api.dodoex.io/graphql?opname=FetchDashboardDailyData", [CHAIN.POLYGON]: "https://api.dodoex.io/graphql?opname=FetchDashboardDailyData", - // [MOONRIVER]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G4HFPFJue7zf2BktJuKETh72DscimLJRybVA6iD6A7yM", - // [AVAX]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8GUXi8PNrW4ACf968KCWxH9AkeNt8YEQin7MDa7RuULW", - // [BOBA]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6PVfSucTfTimvx3aMgWsatmRDBNxW7yQKayyZ7Mxrf73" + // [MOONRIVER]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G4HFPFJue7zf2BktJuKETh72DscimLJRybVA6iD6A7yM`, + // [AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8GUXi8PNrW4ACf968KCWxH9AkeNt8YEQin7MDa7RuULW`, + // [BOBA]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6PVfSucTfTimvx3aMgWsatmRDBNxW7yQKayyZ7Mxrf73` // [HECO]: "https://n10.hg.network/subgraphs/name/dodoex-mine-v3-heco/heco", // [OKEXCHAIN]: "https://graph.kkt.one/subgraphs/name/dodoex/dodoex-v2-okchain", } as ChainEndpoints */ diff --git a/dexs/elk/index.ts b/dexs/elk/index.ts index 73c09b13b0..ad37c97945 100644 --- a/dexs/elk/index.ts +++ b/dexs/elk/index.ts @@ -2,19 +2,19 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const adapter = univ2Adapter({ - [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/B8TGNwQ8xMoeFCdsv9dPkciRBpEYAy1UxmXDr7nc9fpE', - [CHAIN.AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2dyce92CewvhV17C8BMFoMCgaXdPTtwBzaz8AReQR3YV', - [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5tRz9anigEVND48Gx1mUpNNM4YSm3NpzG9XRB8dYAMhb', - [CHAIN.FANTOM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/pmqe2dQvH4PK7aaFh4GXrr49wpKRr3GjPCnNEgEb6U2', - [CHAIN.POLYGON]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8jzpT6nnKgmqcdGocys97YWkuqwDbHBxpozsKcxH1KUP', + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/B8TGNwQ8xMoeFCdsv9dPkciRBpEYAy1UxmXDr7nc9fpE`, + [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2dyce92CewvhV17C8BMFoMCgaXdPTtwBzaz8AReQR3YV`, + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5tRz9anigEVND48Gx1mUpNNM4YSm3NpzG9XRB8dYAMhb`, + [CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/pmqe2dQvH4PK7aaFh4GXrr49wpKRr3GjPCnNEgEb6U2`, + [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8jzpT6nnKgmqcdGocys97YWkuqwDbHBxpozsKcxH1KUP`, // [CHAIN.HECO]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-heco" - [CHAIN.XDAI]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/kD9njskfB9xv7gDnsU2sz4X4sXfEimBv8xMJ6votFND', + [CHAIN.XDAI]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/kD9njskfB9xv7gDnsU2sz4X4sXfEimBv8xMJ6votFND`, // [CHAIN.MOONRIVER]: "https://moonriver-graph.elk.finance/subgraphs/name/elkfinance/elkdex-moonriver", // [CHAIN.ELASTOS]: "https://elastos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-elastos", // [CHAIN.OKEXCHAIN]: "https://okex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-okex", // [CHAIN.KCC]: "https://kcc-graph.elk.finance/subgraphs/name/elkfinance/elkdex-kcc", - [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/59tcH5BPyXj41XZgn1ZYy4pE8iDdzaZpR9MRhmuPW4Lr', - [CHAIN.OPTIMISM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/H7UcKWuAqQPqWKcnNLn2Jamy9zE7wVgsLSRQpPwXo2Ag', + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/59tcH5BPyXj41XZgn1ZYy4pE8iDdzaZpR9MRhmuPW4Lr`, + [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/H7UcKWuAqQPqWKcnNLn2Jamy9zE7wVgsLSRQpPwXo2Ag`, // [CHAIN.CRONOS]: "https://cronos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-cronos", // [CHAIN.FUSE]: "https://fuse-graph.elk.finance/subgraphs/name/elkfinance/elkdex-fuse", // [CHAIN.IOTEX]: "https://iotex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-iotex", diff --git a/dexs/equity-spot/index.ts b/dexs/equity-spot/index.ts index 2b30f13afe..6b4b1d5d56 100644 --- a/dexs/equity-spot/index.ts +++ b/dexs/equity-spot/index.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - [CHAIN.FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9USQeMVzzBbxsXhQUmCk5fZursvL9Vj3cv8joYNXeKt9", + [CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9USQeMVzzBbxsXhQUmCk5fZursvL9Vj3cv8joYNXeKt9`, } const historicalData = gql` diff --git a/dexs/huckleberry/index.ts b/dexs/huckleberry/index.ts index 2aed4e17e4..19887e100d 100644 --- a/dexs/huckleberry/index.ts +++ b/dexs/huckleberry/index.ts @@ -2,6 +2,6 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.MOONRIVER]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EMTH8qnNbMGgjoFxE8YZh4qGMMxTQu44WDbn2xKexzwb", + [CHAIN.MOONRIVER]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EMTH8qnNbMGgjoFxE8YZh4qGMMxTQu44WDbn2xKexzwb`, // [CHAIN.CLV]: "https://clover-graph-node.huckleberry.finance/subgraphs/name/huckleberry/clv-parachain-subgraph" }, {}); diff --git a/dexs/kyberswap/index.ts b/dexs/kyberswap/index.ts index e68f35be6a..d3ac75788f 100644 --- a/dexs/kyberswap/index.ts +++ b/dexs/kyberswap/index.ts @@ -56,7 +56,7 @@ const elasticEndpoints = elasticChains.reduce((acc, chain)=>({ //cronos: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-cronos", // missing -> almost no volume and stale ethereum: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-mainnet", arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum", - polygon: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT', + polygon: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT`, [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", [CHAIN.BASE]: "https://base-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-base", [CHAIN.SCROLL]: "https://scroll-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-scroll" diff --git a/dexs/morpheus-swap/index.ts b/dexs/morpheus-swap/index.ts index d92c13f894..e28d56f557 100644 --- a/dexs/morpheus-swap/index.ts +++ b/dexs/morpheus-swap/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/C5XUzYLrDHiiKL7zGjLLyiQueJkQfeUyMZCcgwnVWcNr" + [CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/C5XUzYLrDHiiKL7zGjLLyiQueJkQfeUyMZCcgwnVWcNr` }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData", diff --git a/dexs/pangolin/index.ts b/dexs/pangolin/index.ts index 32db9409d8..fe6f4643aa 100644 --- a/dexs/pangolin/index.ts +++ b/dexs/pangolin/index.ts @@ -1,7 +1,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - "avax": 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq' + "avax": `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq` }, { factoriesName: "pangolinFactories", dayData: "pangolinDayData", diff --git a/dexs/pika-protocol-v4/index.ts b/dexs/pika-protocol-v4/index.ts index 343c4fe100..181a2a2dbc 100644 --- a/dexs/pika-protocol-v4/index.ts +++ b/dexs/pika-protocol-v4/index.ts @@ -22,7 +22,7 @@ interface IValume { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5dP9FpbXxmNPRaERfzyKEGuRKh2NRQuwPBWfMLGoSRX5" + [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5dP9FpbXxmNPRaERfzyKEGuRKh2NRQuwPBWfMLGoSRX5` } const fetch = (chain: Chain) => { diff --git a/dexs/pika-protocol/index.ts b/dexs/pika-protocol/index.ts index cee5f14b6a..071cb9f222 100644 --- a/dexs/pika-protocol/index.ts +++ b/dexs/pika-protocol/index.ts @@ -22,7 +22,7 @@ interface IValume { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DUcxevdqV8kBQdHWcdUcaEctaoVyqYZTtCftojL23NbA" + [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DUcxevdqV8kBQdHWcdUcaEctaoVyqYZTtCftojL23NbA` } const fetch = (chain: Chain) => { diff --git a/dexs/quickswap/index.ts b/dexs/quickswap/index.ts index 53c3c8514d..ed3a386a22 100644 --- a/dexs/quickswap/index.ts +++ b/dexs/quickswap/index.ts @@ -5,7 +5,7 @@ import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL import fetchURL from "../../utils/fetchURL" const endpoints = { - [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd", + [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd`, }; const graphs = getChainVolume({ @@ -22,7 +22,7 @@ const graphs = getChainVolume({ }); const endpointsAlgebraV3 = { - [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7", + [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7`, // [CHAIN.DOGECHAIN]: "https://graph-node.dogechain.dog/subgraphs/name/quickswap/dogechain-info", [CHAIN.POLYGON_ZKEVM]:"https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7", [CHAIN.MANTA]:"https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn" diff --git a/dexs/ramses-exchange-v2/index.ts b/dexs/ramses-exchange-v2/index.ts index 4643a6a1da..8b8bfcae4c 100644 --- a/dexs/ramses-exchange-v2/index.ts +++ b/dexs/ramses-exchange-v2/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea' + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea` }, { factoriesName: "factories", dayData: "uniswapDayData", diff --git a/dexs/saddle-finance/index.ts b/dexs/saddle-finance/index.ts index d454f51562..893f1896ff 100644 --- a/dexs/saddle-finance/index.ts +++ b/dexs/saddle-finance/index.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/79UL5SaLLsbXqC8Ks6v3fwWHR1FRs636FFRHn55o5SWq', + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/79UL5SaLLsbXqC8Ks6v3fwWHR1FRs636FFRHn55o5SWq`, [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/saddle-finance/saddle-arbitrum" }; diff --git a/dexs/solidly-v3/index.ts b/dexs/solidly-v3/index.ts index fff21d0c5d..661ed84fd0 100644 --- a/dexs/solidly-v3/index.ts +++ b/dexs/solidly-v3/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t", + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t`, // [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-optimism", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-arbitrum", diff --git a/dexs/spookyswap/index.ts b/dexs/spookyswap/index.ts index eb4f89c64c..7782a4cded 100644 --- a/dexs/spookyswap/index.ts +++ b/dexs/spookyswap/index.ts @@ -6,7 +6,7 @@ import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume const { getChainVolumeWithGasToken } = require("../../helpers/getUniSubgraphVolume"); const { FANTOM } = require("../../helpers/chains"); const endpoints = { - [FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/HyhMfT7gehNHMBmFiExqeg3pDtop9UikjvBPfAXT3b21", + [FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/HyhMfT7gehNHMBmFiExqeg3pDtop9UikjvBPfAXT3b21`, [CHAIN.EON]: "https://eon-graph.horizenlabs.io/subgraphs/name/0xALUKARD/spookyswap-eon", // [CHAIN.BITTORRENT]: "https://subgraph.spook.fi/subgraphs/name/eerieeight/spooky-swap-new" }; diff --git a/dexs/stellaswap/index.ts b/dexs/stellaswap/index.ts index 99cd016075..e5f31aad6d 100644 --- a/dexs/stellaswap/index.ts +++ b/dexs/stellaswap/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.MOONBEAN]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/HgSAfZvHEDbAVuZciPUYEqFzhAUnjJWmyix5C1R2tmTp' + [CHAIN.MOONBEAN]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/HgSAfZvHEDbAVuZciPUYEqFzhAUnjJWmyix5C1R2tmTp` }, {}); adapters.adapter.moonbeam.start = 1641960253; export default adapters; diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index 0df8750cc1..c91a0dd2f7 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -53,19 +53,19 @@ const blacklistTokens = { } const endpointsClassic = { - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6NUtT5mGjZ1tSshKLf5Q3uEEJtjBZJo1TpL5MXsUBqrT", - [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/GPRigpbNuPkxkwpSbDuYXbikodNJfurc1LCENLzboWer", - [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8NiXkxLRT3R22vpwLB4DXttpEf3X1LrKhe4T1tQ3jjbP", - //[CHAIN.FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK", - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8nFDCAhdnJQEhQF3ZRnfWkJ6FkRsfAiiVabVn4eGoAZH", - [CHAIN.CELO]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8roCC7H2tsGYGvxD52QQbUoHXXx77H9tPhNn1qcjB5yj", - [CHAIN.AVAX]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6VAhbtW5u2sPYkJKAcMsxgqTBu4a1rqmbiVQWgtNjrvT", - [CHAIN.HARMONY]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FrcJBCCKCYGTLLXJmhppXfPKsNoyod4zqNLjHfXj1KHg", - // [CHAIN.MOONRIVER]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5skUrJzgVm6vXAmdKN7gw4CjYx3pgLDeUeUqVzqLXkWT", - [CHAIN.XDAI]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4a8hcsttqsmycmmeFcpffGMZhBDU4NhHfyHH6YNcnu7b", - // [CHAIN.MOONBEAM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3tNHz9aTBa2KUthYZiZZxayYYpxXACverKRrkafhoBru', + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6NUtT5mGjZ1tSshKLf5Q3uEEJtjBZJo1TpL5MXsUBqrT`, + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/GPRigpbNuPkxkwpSbDuYXbikodNJfurc1LCENLzboWer`, + [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8NiXkxLRT3R22vpwLB4DXttpEf3X1LrKhe4T1tQ3jjbP`, + //[CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK`, + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8nFDCAhdnJQEhQF3ZRnfWkJ6FkRsfAiiVabVn4eGoAZH`, + [CHAIN.CELO]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8roCC7H2tsGYGvxD52QQbUoHXXx77H9tPhNn1qcjB5yj`, + [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6VAhbtW5u2sPYkJKAcMsxgqTBu4a1rqmbiVQWgtNjrvT`, + [CHAIN.HARMONY]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FrcJBCCKCYGTLLXJmhppXfPKsNoyod4zqNLjHfXj1KHg`, + // [CHAIN.MOONRIVER]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5skUrJzgVm6vXAmdKN7gw4CjYx3pgLDeUeUqVzqLXkWT`, + [CHAIN.XDAI]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4a8hcsttqsmycmmeFcpffGMZhBDU4NhHfyHH6YNcnu7b`, + // [CHAIN.MOONBEAM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3tNHz9aTBa2KUthYZiZZxayYYpxXACverKRrkafhoBru`, [CHAIN.BOBA]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/sushiswap-boba', - [CHAIN.FUSE]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DcaAUrnx2mWKVQNsVJiuz7zhjoLkvtDUcoq73NdBvbTo', + [CHAIN.FUSE]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DcaAUrnx2mWKVQNsVJiuz7zhjoLkvtDUcoq73NdBvbTo`, [CHAIN.CORE]: 'https://thegraph.coredao.org/subgraphs/name/sushi-v2/sushiswap-core', [CHAIN.BLAST]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/sushiswap-blast/gn', }; @@ -139,7 +139,7 @@ const classic = Object.keys(endpointsClassic).reduce( const fantomGraphs = getChainVolumeWithGasToken({ graphUrls: { - [CHAIN.FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK" + [CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK` }, totalVolume: { factory: "factories", diff --git a/dexs/sushiswap/trident.ts b/dexs/sushiswap/trident.ts index 6c58dd8761..0eb1f33494 100644 --- a/dexs/sushiswap/trident.ts +++ b/dexs/sushiswap/trident.ts @@ -7,13 +7,13 @@ import { FetchOptions } from "../../adapters/types"; const endpointsTrident: Record = { [CHAIN.POLYGON]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-polygon', - [CHAIN.OPTIMISM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FEgRuH9zeTRMZgpVv5YavoFEcisoK6KHk3zgQRRBqt51', + [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FEgRuH9zeTRMZgpVv5YavoFEcisoK6KHk3zgQRRBqt51`, //[CHAIN.KAVA]: 'https://pvt.graph.kava.io/subgraphs/name/sushi-v2/trident-kava', // [CHAIN.METIS]: 'https://andromeda.thegraph.metis.io/subgraphs/name/sushi-v2/trident-metis', // [CHAIN.BITTORRENT]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v2/trident-bttc', - [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4x8H6ZoGfJykyZqAe2Kx2g5afsp17S9pn8GroRkpezhx', - [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9TQaBw1sU3wi2kdevuygKhfhjP3STnwBe1jUnKxmNhmn', - [CHAIN.AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/NNTV3MgqSGtHMBGdMVLXzzDbKDKmsY87k3PsQ2knmC1', + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4x8H6ZoGfJykyZqAe2Kx2g5afsp17S9pn8GroRkpezhx`, + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9TQaBw1sU3wi2kdevuygKhfhjP3STnwBe1jUnKxmNhmn`, + [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/NNTV3MgqSGtHMBGdMVLXzzDbKDKmsY87k3PsQ2knmC1`, } const VOLUME_FIELD = "volumeUSD"; diff --git a/dexs/swapr/index.ts b/dexs/swapr/index.ts index f3b3f6e45d..82b2d677a7 100644 --- a/dexs/swapr/index.ts +++ b/dexs/swapr/index.ts @@ -3,7 +3,7 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/dxgraphs/swapr-mainnet-v2", - [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8CtcD8EzHq6YyQrnb4XFz2pnwXVx3nHruj4pcDjHRKpt', + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8CtcD8EzHq6YyQrnb4XFz2pnwXVx3nHruj4pcDjHRKpt`, [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/dxgraphs/swapr-xdai-v2" }; diff --git a/dexs/templedao-trade/index.ts b/dexs/templedao-trade/index.ts index 793606de6a..4f806ccce3 100644 --- a/dexs/templedao-trade/index.ts +++ b/dexs/templedao-trade/index.ts @@ -7,7 +7,7 @@ const { getChainVolume, } = require("../../helpers/getUniSubgraphVolume"); const endpoints = { - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6No9vpT4V56r2c4y4TxHsKs7hEbAWu66u19wNGAX8nxL" + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6No9vpT4V56r2c4y4TxHsKs7hEbAWu66u19wNGAX8nxL` }; const VOLUME_FIELD = "volumeUSD"; diff --git a/dexs/thena-perp/index.ts b/dexs/thena-perp/index.ts index 548ecbe9a0..dd17f96713 100644 --- a/dexs/thena-perp/index.ts +++ b/dexs/thena-perp/index.ts @@ -6,7 +6,7 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume const ONE_DAY_IN_SECONDS = 60 * 60 * 24 -const endpoint = "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DYHqLcjXMBC9c7AGvrYSBfQ6fQS723PJHF2usA9JX8NN" +const endpoint = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DYHqLcjXMBC9c7AGvrYSBfQ6fQS723PJHF2usA9JX8NN` const query = gql` query stats($from: String!, $to: String!) { diff --git a/dexs/thena-v3/index.ts b/dexs/thena-v3/index.ts index 7eaaf05701..528def994e 100644 --- a/dexs/thena-v3/index.ts +++ b/dexs/thena-v3/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Hnjf3ipVMCkQze3jmHp8tpSMgPmtPnXBR38iM4ix1cLt" + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Hnjf3ipVMCkQze3jmHp8tpSMgPmtPnXBR38iM4ix1cLt` }, { factoriesName: "factories", dayData: "fusionDayData", diff --git a/dexs/thena/index.ts b/dexs/thena/index.ts index 434dca8024..e42b0323eb 100644 --- a/dexs/thena/index.ts +++ b/dexs/thena/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FKEt2N5VmSdEYcz7fYLPvvnyEUkReQ7rvmXzs6tiKCz1" + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FKEt2N5VmSdEYcz7fYLPvvnyEUkReQ7rvmXzs6tiKCz1` }, { factoriesName: "factories", totalVolume: "totalVolumeUSD", diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index 5ef194ecbe..b169b77770 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -5,9 +5,9 @@ import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getU import fetchURL from "../../utils/fetchURL"; const endpoints = { - [CHAIN.AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9ZjERoA7jGANYNz1YNuFMBt11fK44krveEhzssJTWokM', + [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9ZjERoA7jGANYNz1YNuFMBt11fK44krveEhzssJTWokM`, [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/joe-v1-bnb", - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3jFnXqk6UXZyciPu5jfUuPR7kzGXPSndsLNrWXQ6xAxk", + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3jFnXqk6UXZyciPu5jfUuPR7kzGXPSndsLNrWXQ6xAxk`, }; type TEndpoint = { [s: string | Chain]: string; diff --git a/dexs/verse/index.ts b/dexs/verse/index.ts index 30e5c44e0e..35e7c5a651 100644 --- a/dexs/verse/index.ts +++ b/dexs/verse/index.ts @@ -3,7 +3,7 @@ import { ChainEndpoints, SimpleAdapter, BaseAdapter } from "../../adapters/types import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; const endpoints: ChainEndpoints = { - [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CvSasxLYUvFbYyi7VXGhXL6PNgkZPoVDo2bo66ftEA2V', + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CvSasxLYUvFbYyi7VXGhXL6PNgkZPoVDo2bo66ftEA2V`, [CHAIN.SMARTBCH]: "https://analytics-dex.api.bitcoin.com/subgraphs/name/verse/exchange", }; diff --git a/dexs/wagmi/wagmi.ts b/dexs/wagmi/wagmi.ts index d98afbe9a4..3c02174329 100644 --- a/dexs/wagmi/wagmi.ts +++ b/dexs/wagmi/wagmi.ts @@ -26,7 +26,7 @@ export const LINKS: { [key: string]: any } = { [CHAIN.ETHEREUM]: { subgraph: "https://api.studio.thegraph.com/query/53494/v3/version/latest", blocks: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9A6bkprqEG2XsZUYJ5B2XXp6ymz9fNcn4tVPxMWDztYC", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9A6bkprqEG2XsZUYJ5B2XXp6ymz9fNcn4tVPxMWDztYC`, }, [CHAIN.METIS]: { subgraph: "https://metis.graph.wagmi.com/subgraphs/name/v3", diff --git a/dexs/wombat-exchange/index.ts b/dexs/wombat-exchange/index.ts index 4d833bf303..e4c93ef228 100644 --- a/dexs/wombat-exchange/index.ts +++ b/dexs/wombat-exchange/index.ts @@ -25,19 +25,19 @@ type TEndpoint = { // Updated using studio const endpoints: TEndpoint = { [CHAIN.BSC]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DPuFUNkRpW5AG2HBWyRhzvYCodocb1H8vjVLijyEJyGE", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DPuFUNkRpW5AG2HBWyRhzvYCodocb1H8vjVLijyEJyGE`, [CHAIN.ARBITRUM]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/HADLg9LFYHJupr3xvWdmp7piPpwjGEwjbCknkSVrfyDQ", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/HADLg9LFYHJupr3xvWdmp7piPpwjGEwjbCknkSVrfyDQ`, [CHAIN.ETHEREUM]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3S2iHctknomx91fcAcyqrPvCcGfnuhKdEKBs2xThoCvJ", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3S2iHctknomx91fcAcyqrPvCcGfnuhKdEKBs2xThoCvJ`, [CHAIN.SCROLL]: "https://api.studio.thegraph.com/query/56564/wombat-exchange-scroll/version/latest", [CHAIN.AVAX]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6PbnpSVfrWgVeRiTbbM4yFNAiYacLjGLg1ztzasxqxGf", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6PbnpSVfrWgVeRiTbbM4yFNAiYacLjGLg1ztzasxqxGf`, [CHAIN.BASE]: "https://api.studio.thegraph.com/query/56564/wombat-exchange-base/version/latest", [CHAIN.OPTIMISM]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4phYPx7RdkSSKFuoFBRZFFbPMkRCnYLfi8bENyQf4NA6", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4phYPx7RdkSSKFuoFBRZFFbPMkRCnYLfi8bENyQf4NA6`, }; const fetchVolume = (chain: Chain) => { diff --git a/dexs/zipswap/index.ts b/dexs/zipswap/index.ts index 100b6e8295..8e1624285b 100644 --- a/dexs/zipswap/index.ts +++ b/dexs/zipswap/index.ts @@ -2,5 +2,5 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.OPTIMISM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5tAUjmnM9iE4aADZwKhk3fobY8fMFbb1VMsrSKvo4kFr' + [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5tAUjmnM9iE4aADZwKhk3fobY8fMFbb1VMsrSKvo4kFr` }, {}); diff --git a/dexs/zyberswap/index.ts b/dexs/zyberswap/index.ts index a6f1c9cdfc..c2c255f4d8 100644 --- a/dexs/zyberswap/index.ts +++ b/dexs/zyberswap/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; const endpoints = { - [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R', + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R`, }; const graphs = getChainVolume({ diff --git a/fees/aave/index.ts b/fees/aave/index.ts index ac863bb57f..5dae9e9b04 100644 --- a/fees/aave/index.ts +++ b/fees/aave/index.ts @@ -32,26 +32,26 @@ const headers: THeader = { const ONE_DAY = 24 * 60 * 60; const v1Endpoints = { - [ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/GJfRcmN4YAzKW3VH2ZKzTcWXjgtvkpAYSwFh1LfHsEuh", + [ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/GJfRcmN4YAzKW3VH2ZKzTcWXjgtvkpAYSwFh1LfHsEuh`, } const v2Endpoints = { - [ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8wR23o1zkS4gpLqLNU4kG3JHYVucqGyopL5utGxP2q1N", - [AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EZvK18pMhwiCjxwesRLTg81fP33WnR6BnZe5Cvma3H1C', - [POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/H1Et77RZh3XEf27vkAmJyzgCME2RSFLtDS2f4PPW6CGp" + [ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8wR23o1zkS4gpLqLNU4kG3JHYVucqGyopL5utGxP2q1N`, + [AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EZvK18pMhwiCjxwesRLTg81fP33WnR6BnZe5Cvma3H1C`, + [POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/H1Et77RZh3XEf27vkAmJyzgCME2RSFLtDS2f4PPW6CGp` }; //V3 endpoints avilable here: https://github.com/aave/protocol-subgraphs const v3Endpoints = { - [POLYGON]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Co2URyXjnxaw8WqxKyVHdirq9Ahhm5vcTs4dMedAq211', - [AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2h9woxy8RTjHu1HJsCEnmzpPHFArU33avmUh4f71JpVn', - [ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DLuE98kEb5pQNXAcKFQGQgfSQ57Xdou4jnVbAEqMfy3B', - [OPTIMISM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DSfLz8oQBUeU5atALgUFQKMTSYV9mZAVYp4noLSXAfvb', - [FANTOM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6L1vPqyE3xvkzkWjh6wUKc1ABWYYps5HJahoxhrv2PJn', - [HARMONY]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FifJapBdCqT9vgNqJ5axmr6eNyUpUSaRAbbZTfsViNsT', - [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Cd2gEDVeqnjBn1hSeqFMitw8Q1iiyV9FYUZkLNRcL87g', - [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7Jk85XgkV1MQ7u56hD8rr65rfASbayJXopugWkUoBMnZ', - [CHAIN.XDAI]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/HtcDaL8L8iZ2KQNNS44EBVmLruzxuNAz1RkBYdui1QUT', + [POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Co2URyXjnxaw8WqxKyVHdirq9Ahhm5vcTs4dMedAq211`, + [AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2h9woxy8RTjHu1HJsCEnmzpPHFArU33avmUh4f71JpVn`, + [ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DLuE98kEb5pQNXAcKFQGQgfSQ57Xdou4jnVbAEqMfy3B`, + [OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DSfLz8oQBUeU5atALgUFQKMTSYV9mZAVYp4noLSXAfvb`, + [FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6L1vPqyE3xvkzkWjh6wUKc1ABWYYps5HJahoxhrv2PJn`, + [HARMONY]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FifJapBdCqT9vgNqJ5axmr6eNyUpUSaRAbbZTfsViNsT`, + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Cd2gEDVeqnjBn1hSeqFMitw8Q1iiyV9FYUZkLNRcL87g`, + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7Jk85XgkV1MQ7u56hD8rr65rfASbayJXopugWkUoBMnZ`, + [CHAIN.XDAI]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/HtcDaL8L8iZ2KQNNS44EBVmLruzxuNAz1RkBYdui1QUT`, [CHAIN.METIS]: 'https://metisapi.0xgraph.xyz/subgraphs/name/aave/protocol-v3-metis', [CHAIN.BASE]: 'https://api.goldsky.com/api/public/project_clk74pd7lueg738tw9sjh79d6/subgraphs/aave-v3-base/1.0.0/gn', [CHAIN.SCROLL]: 'https://api.goldsky.com/api/public/project_clk74pd7lueg738tw9sjh79d6/subgraphs/aave-v3-scroll/1.0.0/gn', diff --git a/fees/auragi.ts b/fees/auragi.ts index a1717aefd7..b824de404f 100644 --- a/fees/auragi.ts +++ b/fees/auragi.ts @@ -5,7 +5,7 @@ import { CHAIN } from "../helpers/chains"; const STABLE_FEES = 0.0001; const VOLATILE_FEES = 0.0005; -const endpoint = "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DtNQcRXx82k4azEb5QvUjRbmXSNLTUsUePzPY6PtryEc"; +const endpoint = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DtNQcRXx82k4azEb5QvUjRbmXSNLTUsUePzPY6PtryEc`; const getFees = () => { return async ({ getFromBlock, getToBlock}: FetchOptions) => { diff --git a/fees/balancer.ts b/fees/balancer.ts index e3f8b7228c..688268ad1a 100644 --- a/fees/balancer.ts +++ b/fees/balancer.ts @@ -7,20 +7,20 @@ import BigNumber from "bignumber.js"; const v1Endpoints = { [CHAIN.ETHEREUM]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB`, } const v2Endpoints = { [CHAIN.ETHEREUM]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Fog6Z9z7DXvWy4bx36c7ETQftdtr4Ppxn7Mjpxkzka2i", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Fog6Z9z7DXvWy4bx36c7ETQftdtr4Ppxn7Mjpxkzka2i`, [CHAIN.ARBITRUM]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc`, [CHAIN.POLYGON]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN`, [CHAIN.AVAX]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu`, [CHAIN.XDAI]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg`, [CHAIN.BASE]: "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest", [CHAIN.POLYGON_ZKEVM]: diff --git a/fees/betswirl/index.ts b/fees/betswirl/index.ts index 149963c0c8..73f6113054 100644 --- a/fees/betswirl/index.ts +++ b/fees/betswirl/index.ts @@ -6,7 +6,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints: any = { [BSC]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-bnb", [POLYGON]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FL3ePDCBbShPvfRJTaSCNnehiqxsPHzpLud6CpbHoeKW", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FL3ePDCBbShPvfRJTaSCNnehiqxsPHzpLud6CpbHoeKW`, [AVAX]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-avalanche", [ARBITRUM]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-arbitrum", }; diff --git a/fees/biswap.ts b/fees/biswap.ts index af39512644..1200fc1b12 100644 --- a/fees/biswap.ts +++ b/fees/biswap.ts @@ -3,7 +3,7 @@ import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; const adapters = univ2DimensionAdapter({ graphUrls: { - [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd' + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd` }, dailyVolume: { factory: "pancakeDayData" diff --git a/fees/bsc.ts b/fees/bsc.ts index b33a93e0eb..d768756c3a 100644 --- a/fees/bsc.ts +++ b/fees/bsc.ts @@ -6,7 +6,7 @@ import { Chain } from '@defillama/sdk/build/general'; const endpoints = { [BSC]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3a3f5kp31kutZzjmQoE2NKBSr6Ady5rgxRxD2nygYcQo' + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3a3f5kp31kutZzjmQoE2NKBSr6Ady5rgxRxD2nygYcQo` } diff --git a/fees/camelot-v2.ts b/fees/camelot-v2.ts index f97d069fe9..5bd139c40a 100644 --- a/fees/camelot-v2.ts +++ b/fees/camelot-v2.ts @@ -16,7 +16,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv' + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv` } const fetch = (chain: Chain) => { diff --git a/fees/camelot-v3.ts b/fees/camelot-v3.ts index f3483bfb0d..9297426df4 100644 --- a/fees/camelot-v3.ts +++ b/fees/camelot-v3.ts @@ -16,7 +16,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7mPnp1UqmefcCycB8umy4uUkTkFxMoHn1Y7ncBUscePp" + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7mPnp1UqmefcCycB8umy4uUkTkFxMoHn1Y7ncBUscePp` } const fetch = (chain: Chain) => { diff --git a/fees/clever.ts b/fees/clever.ts index 15fd6b253d..0d5cf62df6 100644 --- a/fees/clever.ts +++ b/fees/clever.ts @@ -6,7 +6,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints = { [ETHEREUM]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo`, }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/clipper.ts b/fees/clipper.ts index 68c2929706..0a5ab72200 100644 --- a/fees/clipper.ts +++ b/fees/clipper.ts @@ -13,7 +13,7 @@ const endpoints: TEndpoint = { [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-optimism", [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-polygon", // [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-moonbeam", - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W", + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W`, }; interface IPool { diff --git a/fees/concentrator.ts b/fees/concentrator.ts index ab5c31a5de..a739c68d53 100644 --- a/fees/concentrator.ts +++ b/fees/concentrator.ts @@ -13,7 +13,7 @@ const priceUrl = "https://api.aladdin.club/api/coingecko/price"; const endpoints = { [ETHEREUM]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo`, }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/curve.ts b/fees/curve.ts index 36a73d9596..e8a7da2bf1 100644 --- a/fees/curve.ts +++ b/fees/curve.ts @@ -7,19 +7,19 @@ import fetchURL from "../utils/fetchURL"; const endpoints = { [ETHEREUM]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7FpNAjYhdo41FSdEro5P55uviKw69yhfPgxiWzPkr9au", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7FpNAjYhdo41FSdEro5P55uviKw69yhfPgxiWzPkr9au`, [OPTIMISM]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7cXBpS75ThtbYwtCD8B277vUfWptmz6vbhk9BKgYrEvQ', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7cXBpS75ThtbYwtCD8B277vUfWptmz6vbhk9BKgYrEvQ`, [ARBITRUM]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/6okUrfq2HYokFytJd2JDhXW2kdyViy5gXWWpZkTnSL8w', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6okUrfq2HYokFytJd2JDhXW2kdyViy5gXWWpZkTnSL8w`, [POLYGON]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EXzFgeWbfgcLgUFEa9rHcQtTy2EcdvJnosTVkPvKe7EU", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EXzFgeWbfgcLgUFEa9rHcQtTy2EcdvJnosTVkPvKe7EU`, [AVAX]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4m6FwSHYnkQRUBSKdhh5heGd1ojTAXwEiacUyFix2Ygx', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4m6FwSHYnkQRUBSKdhh5heGd1ojTAXwEiacUyFix2Ygx`, [FANTOM]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7ZnKrxY26bDHZPSqJ3MNkDNjaRXLoc1ZiATDLbVjWa7H', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7ZnKrxY26bDHZPSqJ3MNkDNjaRXLoc1ZiATDLbVjWa7H`, [XDAI]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/i82AxuGMFX7bqGNpXGrUvXqFMWZjLeRTNpJFvc3aW8L', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/i82AxuGMFX7bqGNpXGrUvXqFMWZjLeRTNpJFvc3aW8L`, }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/defiplaza/index.ts b/fees/defiplaza/index.ts index 1b8e586d78..f6db81b230 100644 --- a/fees/defiplaza/index.ts +++ b/fees/defiplaza/index.ts @@ -13,7 +13,7 @@ type RadixPlazaResponse = { swaps: number } -const thegraph_endpoints = 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/4z9FBF12CrfoQJhAkWicqzY2fKYN9QRmuzSsizVXhjKa'; +const thegraph_endpoints = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4z9FBF12CrfoQJhAkWicqzY2fKYN9QRmuzSsizVXhjKa`; const radix_endpoint = "https://radix.defiplaza.net/api/defillama/volume"; const adapter: SimpleAdapter = { diff --git a/fees/elk.ts b/fees/elk.ts index f24fcef195..0ffbf8afff 100644 --- a/fees/elk.ts +++ b/fees/elk.ts @@ -3,19 +3,19 @@ import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; const adapter = univ2DimensionAdapter({ graphUrls: { - [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/B8TGNwQ8xMoeFCdsv9dPkciRBpEYAy1UxmXDr7nc9fpE', - [CHAIN.AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2dyce92CewvhV17C8BMFoMCgaXdPTtwBzaz8AReQR3YV', - [CHAIN.BSC]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5tRz9anigEVND48Gx1mUpNNM4YSm3NpzG9XRB8dYAMhb', - [CHAIN.FANTOM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/pmqe2dQvH4PK7aaFh4GXrr49wpKRr3GjPCnNEgEb6U2', - [CHAIN.POLYGON]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8jzpT6nnKgmqcdGocys97YWkuqwDbHBxpozsKcxH1KUP', + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/B8TGNwQ8xMoeFCdsv9dPkciRBpEYAy1UxmXDr7nc9fpE`, + [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2dyce92CewvhV17C8BMFoMCgaXdPTtwBzaz8AReQR3YV`, + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5tRz9anigEVND48Gx1mUpNNM4YSm3NpzG9XRB8dYAMhb`, + [CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/pmqe2dQvH4PK7aaFh4GXrr49wpKRr3GjPCnNEgEb6U2`, + [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8jzpT6nnKgmqcdGocys97YWkuqwDbHBxpozsKcxH1KUP`, // [CHAIN.HECO]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-heco" - [CHAIN.XDAI]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/kD9njskfB9xv7gDnsU2sz4X4sXfEimBv8xMJ6votFND', + [CHAIN.XDAI]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/kD9njskfB9xv7gDnsU2sz4X4sXfEimBv8xMJ6votFND`, // [CHAIN.MOONRIVER]: "https://moonriver-graph.elk.finance/subgraphs/name/elkfinance/elkdex-moonriver", // [CHAIN.ELASTOS]: "https://elastos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-elastos", // [CHAIN.OKEXCHAIN]: "https://okex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-okex", // [CHAIN.KCC]: "https://kcc-graph.elk.finance/subgraphs/name/elkfinance/elkdex-kcc", - [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/59tcH5BPyXj41XZgn1ZYy4pE8iDdzaZpR9MRhmuPW4Lr', - [CHAIN.OPTIMISM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/H7UcKWuAqQPqWKcnNLn2Jamy9zE7wVgsLSRQpPwXo2Ag', + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/59tcH5BPyXj41XZgn1ZYy4pE8iDdzaZpR9MRhmuPW4Lr`, + [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/H7UcKWuAqQPqWKcnNLn2Jamy9zE7wVgsLSRQpPwXo2Ag`, // [CHAIN.CRONOS]: "https://cronos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-cronos", // [CHAIN.FUSE]: "https://fuse-graph.elk.finance/subgraphs/name/elkfinance/elkdex-fuse", // [CHAIN.IOTEX]: "https://iotex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-iotex", diff --git a/fees/equity/index.ts b/fees/equity/index.ts index a12ab15449..46b4dae489 100644 --- a/fees/equity/index.ts +++ b/fees/equity/index.ts @@ -6,7 +6,7 @@ import { FANTOM } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints = { - [FANTOM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9USQeMVzzBbxsXhQUmCk5fZursvL9Vj3cv8joYNXeKt9", + [FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9USQeMVzzBbxsXhQUmCk5fZursvL9Vj3cv8joYNXeKt9`, }; const graphs = (graphUrls: ChainEndpoints) => { diff --git a/fees/fx-protocol.ts b/fees/fx-protocol.ts index e0b0df7e02..1923a6b605 100644 --- a/fees/fx-protocol.ts +++ b/fees/fx-protocol.ts @@ -10,7 +10,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints = { [ETHEREUM]: - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo", + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo`, }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/hono.ts b/fees/hono.ts index db67ff5aab..f07cad1583 100644 --- a/fees/hono.ts +++ b/fees/hono.ts @@ -10,7 +10,7 @@ interface IData { } const endpoints = { - [CHAIN.ETHEREUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7Trkrt6hPzhLXUH2x4Xt9cSnSmAFKDmKNWuUHEwzgCYJ' + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7Trkrt6hPzhLXUH2x4Xt9cSnSmAFKDmKNWuUHEwzgCYJ` }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/kyberswap.ts b/fees/kyberswap.ts index 0fa0e05e9b..6ad2dca6c1 100644 --- a/fees/kyberswap.ts +++ b/fees/kyberswap.ts @@ -29,7 +29,7 @@ const elasticEndpoints: TEndpoint = elasticChains.reduce((acc, chain) => ({ }), { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-mainnet", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum-one", - [CHAIN.POLYGON]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT', + [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT`, [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", [CHAIN.BITTORRENT]: "https://bttc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bttc", [CHAIN.BASE]: "https://base-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-base", diff --git a/fees/liquity.ts b/fees/liquity.ts index 71f947e557..4371c4af07 100644 --- a/fees/liquity.ts +++ b/fees/liquity.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../helpers/chains"; const { request, gql } = require("graphql-request"); -const URL = 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8wump5sEYBV7vG1sKaNrvbqhTAV4EPKCdPw4ygms3Dmd' +const URL = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8wump5sEYBV7vG1sKaNrvbqhTAV4EPKCdPw4ygms3Dmd` interface IValue { totalBorrowingFeesPaid: string; totalRedemptionFeesPaid: string; diff --git a/fees/moonwell-artemis.ts b/fees/moonwell-artemis.ts index 6576dd8471..320bd31534 100644 --- a/fees/moonwell-artemis.ts +++ b/fees/moonwell-artemis.ts @@ -7,7 +7,7 @@ import BigNumber from "bignumber.js"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints = { - [CHAIN.MOONBEAN]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DQhrdUHwspQf3hSjDtyfS6uqq9YiKoLF3Ut3U9os2HK" + [CHAIN.MOONBEAN]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DQhrdUHwspQf3hSjDtyfS6uqq9YiKoLF3Ut3U9os2HK` } diff --git a/fees/pangolin.ts b/fees/pangolin.ts index f5ba6407e6..058c6aa142 100644 --- a/fees/pangolin.ts +++ b/fees/pangolin.ts @@ -3,7 +3,7 @@ import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; const adapter = univ2DimensionAdapter({ graphUrls: { - [CHAIN.AVAX]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq' + [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq` }, dailyVolume: { factory: "pangolinDayData" diff --git a/fees/pika-protocol-v4.ts b/fees/pika-protocol-v4.ts index e4a1812c96..b699656e4c 100644 --- a/fees/pika-protocol-v4.ts +++ b/fees/pika-protocol-v4.ts @@ -37,7 +37,7 @@ interface ILiquidations { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5dP9FpbXxmNPRaERfzyKEGuRKh2NRQuwPBWfMLGoSRX5" + [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5dP9FpbXxmNPRaERfzyKEGuRKh2NRQuwPBWfMLGoSRX5` } const fetch = (chain: Chain) => { diff --git a/fees/pika-protocol.ts b/fees/pika-protocol.ts index ec8ae435cb..d6cdcd9334 100644 --- a/fees/pika-protocol.ts +++ b/fees/pika-protocol.ts @@ -37,7 +37,7 @@ interface ILiquidations { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/DUcxevdqV8kBQdHWcdUcaEctaoVyqYZTtCftojL23NbA" + [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DUcxevdqV8kBQdHWcdUcaEctaoVyqYZTtCftojL23NbA` } const fetch = (chain: Chain) => { diff --git a/fees/premia/index.ts b/fees/premia/index.ts index bc490aab6c..c3170faed1 100644 --- a/fees/premia/index.ts +++ b/fees/premia/index.ts @@ -6,13 +6,13 @@ import getV3Data from "./v3" const v2Endpoints: ChainEndpoints = { [CHAIN.ETHEREUM]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CqWfkgRsJRrQ5vWq9tkEr68F5nvbAg63ati5SVJQLjK8', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CqWfkgRsJRrQ5vWq9tkEr68F5nvbAg63ati5SVJQLjK8`, [CHAIN.ARBITRUM]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3o6rxHKuXZdy8jFifV99gMUe8FaVUL8w8bDTNdc4zyYg', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3o6rxHKuXZdy8jFifV99gMUe8FaVUL8w8bDTNdc4zyYg`, [CHAIN.FANTOM]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5ahtXN7DVTwnPuDhWqgJWvEeAEP3JD7h2kD1Kpe67VuW', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5ahtXN7DVTwnPuDhWqgJWvEeAEP3JD7h2kD1Kpe67VuW`, [CHAIN.OPTIMISM]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8wMexS8BB1cXWYu2V8cPHURGXSRGDBhshnU9nTiSkXQ7', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8wMexS8BB1cXWYu2V8cPHURGXSRGDBhshnU9nTiSkXQ7`, } const v2StartTimes: { [chain: string]: number } = { diff --git a/fees/quickswap.ts b/fees/quickswap.ts index f8aab53233..977c3da55b 100644 --- a/fees/quickswap.ts +++ b/fees/quickswap.ts @@ -8,7 +8,7 @@ import { } from "../helpers/getUniSubgraph" const v2Endpoints = { - [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd", + [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd`, } const v2Graph = getGraphDimensions({ graphUrls: v2Endpoints, @@ -24,7 +24,7 @@ const v2Graph = getGraphDimensions({ }); const v3Endpoints = { - [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7", + [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7`, // [CHAIN.DOGECHAIN]: "https://graph-node.dogechain.dog/subgraphs/name/quickswap/dogechain-info", [CHAIN.POLYGON_ZKEVM]:"https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7" } diff --git a/fees/ramses-exchange-v1/bribes.ts b/fees/ramses-exchange-v1/bribes.ts index 3918a85535..24abab33c7 100644 --- a/fees/ramses-exchange-v1/bribes.ts +++ b/fees/ramses-exchange-v1/bribes.ts @@ -10,7 +10,7 @@ interface IBribes { } export const fees_bribes = async (fromBlock: number, timestamp: number, balances: Balances) => { - const endpoint = 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea'; + const endpoint = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea`; const graphQuery = ` query GetBribes($fromBlock: Int!) { bribes( diff --git a/fees/ramses-exchange-v2/bribes.ts b/fees/ramses-exchange-v2/bribes.ts index 3918a85535..24abab33c7 100644 --- a/fees/ramses-exchange-v2/bribes.ts +++ b/fees/ramses-exchange-v2/bribes.ts @@ -10,7 +10,7 @@ interface IBribes { } export const fees_bribes = async (fromBlock: number, timestamp: number, balances: Balances) => { - const endpoint = 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea'; + const endpoint = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea`; const graphQuery = ` query GetBribes($fromBlock: Int!) { bribes( diff --git a/fees/ramses-exchange-v2/index.ts b/fees/ramses-exchange-v2/index.ts index 06db02d95c..0b262744b2 100644 --- a/fees/ramses-exchange-v2/index.ts +++ b/fees/ramses-exchange-v2/index.ts @@ -28,7 +28,7 @@ const getBribes = async ({ fromTimestamp, toTimestamp, createBalances, getFromBl }; const v2Endpoints = { - [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea', + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea`, }; const VOLUME_USD = "volumeUSD"; diff --git a/fees/solidly-v3.ts b/fees/solidly-v3.ts index 2d9c6360f8..527d8f4811 100644 --- a/fees/solidly-v3.ts +++ b/fees/solidly-v3.ts @@ -16,7 +16,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t", + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t`, // [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-optimism", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-arbitrum", diff --git a/fees/substanceX/index.ts b/fees/substanceX/index.ts index d34fe47703..ce36657cf5 100644 --- a/fees/substanceX/index.ts +++ b/fees/substanceX/index.ts @@ -11,7 +11,7 @@ const endpoints = { }; const blockNumberGraph = { - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/64DCU8nq48qdDABnobpDafsg7RF75Rx5soKrHiGA8mqp", + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/64DCU8nq48qdDABnobpDafsg7RF75Rx5soKrHiGA8mqp`, [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta-blocks" } diff --git a/fees/thena-v1.ts b/fees/thena-v1.ts index 9f9e00aec5..6f70d7b883 100644 --- a/fees/thena-v1.ts +++ b/fees/thena-v1.ts @@ -11,7 +11,7 @@ import { CHAIN } from "../helpers/chains"; const STABLE_FEES = 0.0001; const VOLATILE_FEES = 0.002; const endpoint = - "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/FKEt2N5VmSdEYcz7fYLPvvnyEUkReQ7rvmXzs6tiKCz1"; + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FKEt2N5VmSdEYcz7fYLPvvnyEUkReQ7rvmXzs6tiKCz1`; const getFees = () => { return async (timestamp: number): Promise => { diff --git a/fees/thena-v3.ts b/fees/thena-v3.ts index 2d0179675c..ed4dc4131f 100644 --- a/fees/thena-v3.ts +++ b/fees/thena-v3.ts @@ -16,7 +16,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Hnjf3ipVMCkQze3jmHp8tpSMgPmtPnXBR38iM4ix1cLt" + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Hnjf3ipVMCkQze3jmHp8tpSMgPmtPnXBR38iM4ix1cLt` } const fetch = (chain: Chain) => { diff --git a/fees/zyberswap.ts b/fees/zyberswap.ts index 9dce5ceb4a..00c9898c8b 100644 --- a/fees/zyberswap.ts +++ b/fees/zyberswap.ts @@ -8,7 +8,7 @@ import { } from "../helpers/getUniSubgraph" const v2Endpoints = { - [CHAIN.ARBITRUM]: 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R', + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R`, } const v2Graph = getGraphDimensions({ graphUrls: v2Endpoints, diff --git a/options/premia/index.ts b/options/premia/index.ts index ecd30ebab5..196f2d179a 100644 --- a/options/premia/index.ts +++ b/options/premia/index.ts @@ -6,13 +6,13 @@ import getV3Data from "./v3" const v2Endpoints: ChainEndpoints = { [CHAIN.ETHEREUM]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CqWfkgRsJRrQ5vWq9tkEr68F5nvbAg63ati5SVJQLjK8', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CqWfkgRsJRrQ5vWq9tkEr68F5nvbAg63ati5SVJQLjK8`, [CHAIN.ARBITRUM]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/3o6rxHKuXZdy8jFifV99gMUe8FaVUL8w8bDTNdc4zyYg', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3o6rxHKuXZdy8jFifV99gMUe8FaVUL8w8bDTNdc4zyYg`, [CHAIN.FANTOM]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5ahtXN7DVTwnPuDhWqgJWvEeAEP3JD7h2kD1Kpe67VuW', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5ahtXN7DVTwnPuDhWqgJWvEeAEP3JD7h2kD1Kpe67VuW`, [CHAIN.OPTIMISM]: - 'https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8wMexS8BB1cXWYu2V8cPHURGXSRGDBhshnU9nTiSkXQ7', + `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8wMexS8BB1cXWYu2V8cPHURGXSRGDBhshnU9nTiSkXQ7`, } const v2StartTimes: { [chain: string]: number } = { diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index 4e01c71a48..907704f23f 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -9,26 +9,26 @@ import { getEnv } from "../../helpers/env"; const endpoints = { [CHAIN.BSC]: "https://proxy-worker.pancake-swap.workers.dev/bsc-exchange", - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9opY17WnEPD4REcC43yHycQthSeUMQE26wyoeMjZTLEx", + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9opY17WnEPD4REcC43yHycQthSeUMQE26wyoeMjZTLEx`, [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45376/exchange-v2-polygon-zkevm/version/latest", [CHAIN.ERA]: "https://api.studio.thegraph.com/query/45376/exchange-v2-zksync/version/latest", - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/EsL7geTRcA3LaLLM9EcMFzYbUgnvf8RixoEEGErrodB3", + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EsL7geTRcA3LaLLM9EcMFzYbUgnvf8RixoEEGErrodB3`, [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/pancakeswap/exhange-v2", [CHAIN.BASE]: "https://api.studio.thegraph.com/query/45376/exchange-v2-base/version/latest", [CHAIN.OP_BNB]: `${getEnv('PANCAKESWAP_OPBNB_SUBGRAPH')}/subgraphs/name/pancakeswap/exchange-v2` }; const stablesSwapEndpoints = { - [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/C5EuiZwWkCge7edveeMcvDmdr7jjc1zG4vgn8uucLdfz", - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/y7G5NUSq5ngsLH2jBGQajjxuLgW1bcqWiBqKmBk3MWM" + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/C5EuiZwWkCge7edveeMcvDmdr7jjc1zG4vgn8uucLdfz`, + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/y7G5NUSq5ngsLH2jBGQajjxuLgW1bcqWiBqKmBk3MWM` } const v3Endpoint = { - [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/Hv1GncLY5docZoGtXjo4kwbTvxm3MAhVZqBZE4sUT9eZ", - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/CJYGNhb7RvnhfBDjqpRnD3oxgyhibzc7fkAMa38YV3oS", + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Hv1GncLY5docZoGtXjo4kwbTvxm3MAhVZqBZE4sUT9eZ`, + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CJYGNhb7RvnhfBDjqpRnD3oxgyhibzc7fkAMa38YV3oS`, [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45376/exchange-v3-polygon-zkevm/version/latest", [CHAIN.ERA]: "https://api.studio.thegraph.com/query/45376/exchange-v3-zksync/version/latest", - [CHAIN.ARBITRUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/251MHFNN1rwjErXD2efWMpNS73SANZN8Ua192zw6iXve", + [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/251MHFNN1rwjErXD2efWMpNS73SANZN8Ua192zw6iXve`, [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/pancakeswap/exchange-v3-linea", [CHAIN.BASE]: "https://api.studio.thegraph.com/query/45376/exchange-v3-base/version/latest", [CHAIN.OP_BNB]: `${getEnv('PANCAKESWAP_OPBNB_SUBGRAPH')}/subgraphs/name/pancakeswap/exchange-v3` diff --git a/protocols/smbswap/index.ts b/protocols/smbswap/index.ts index 2d2009694e..06d87d7011 100644 --- a/protocols/smbswap/index.ts +++ b/protocols/smbswap/index.ts @@ -6,15 +6,15 @@ import disabledAdapter from "../../helpers/disabledAdapter"; import { getGraphDimensions } from "../../helpers/getUniSubgraph" const endpoints = { - [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/9BtGwsWynjj21VyrAtNfeKG5kMhcZ7Z12T53wo7PBTLj" + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9BtGwsWynjj21VyrAtNfeKG5kMhcZ7Z12T53wo7PBTLj` }; const stablesSwapEndpoints = { - [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8o2ZdXbsnHapQvT9Jh8NXLivnLSYVGQXsgVfBzfckLiW" + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8o2ZdXbsnHapQvT9Jh8NXLivnLSYVGQXsgVfBzfckLiW` } const v3Endpoint = { - [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/8XiGZs3G3dDL3YQJx7CsMGXdn3CUBBC9CVpCe1xrsSA7" + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8XiGZs3G3dDL3YQJx7CsMGXdn3CUBBC9CVpCe1xrsSA7` } const VOLUME_USD = "volumeUSD"; diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index b255599435..3db714e3b1 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -14,11 +14,11 @@ import { import request, { gql } from 'graphql-request'; const v1Endpoints = { - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/ESnjgAG9NjfmHypk4Huu4PVvz55fUwpyrRqHF21thoLJ", + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/ESnjgAG9NjfmHypk4Huu4PVvz55fUwpyrRqHF21thoLJ`, }; const v2Endpoints = { - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/A3Np3RQbaBA6oKJgiwDJeo5T3zrYfGHPWFYayMwtNDum", + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/A3Np3RQbaBA6oKJgiwDJeo5T3zrYfGHPWFYayMwtNDum`, }; const blacklisted = { @@ -65,14 +65,14 @@ const blacklisted = { const KEY = 'a265c39f5a123ab2d40b25dc352adc22' const v3Endpoints = { - [CHAIN.ETHEREUM]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/5AXe97hGLfjgFAc6Xvg6uDpsD5hqpxrxcma9MoxG7j7h", + [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5AXe97hGLfjgFAc6Xvg6uDpsD5hqpxrxcma9MoxG7j7h`, [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optmism-regen", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/id/QmZ5uwhnwsJXAQGYEF8qKPQ85iVhYAcVZcZAPfrF7ZNb9z", // [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/"+KEY+"/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm", - // [CHAIN.CELO]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4", - [CHAIN.BSC]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/F85MNzUGYqgSHSHRGgeVMNsdnW1KtZSVgFULumXRZTw2", + // [CHAIN.CELO]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4`, + [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/F85MNzUGYqgSHSHRGgeVMNsdnW1KtZSVgFULumXRZTw2`, // [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-avax", - [CHAIN.BASE]: "https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG", + [CHAIN.BASE]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG`, [CHAIN.ERA]: "https://api.thegraph.com/subgraphs/name/freakyfractal/uniswap-v3-zksync-era" }; From db1975f0d60edcabde4159c9e54b31ce3aa7fbdd Mon Sep 17 00:00:00 2001 From: mul53 Date: Wed, 12 Jun 2024 20:00:04 +0200 Subject: [PATCH 0783/1590] add voltage-v3 volume --- dexs/voltage-v3/index.ts | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 dexs/voltage-v3/index.ts diff --git a/dexs/voltage-v3/index.ts b/dexs/voltage-v3/index.ts new file mode 100644 index 0000000000..69b432aedf --- /dev/null +++ b/dexs/voltage-v3/index.ts @@ -0,0 +1,40 @@ +import { SimpleAdapter } from "../../adapters/types"; +import {CHAIN} from "../../helpers/chains"; +import { getGraphDimensions } from "../../helpers/getUniSubgraph"; + +const endpoint = { + [CHAIN.FUSE]: "https://api.studio.thegraph.com/query/78455/exchange-v3/version/latest", +}; + +const v3Graph = getGraphDimensions({ + graphUrls: endpoint, + totalVolume: { + factory: "factories" + }, + dailyVolume: { + factory: "pancakeDayData", + field: 'volumeUSD' + }, + totalFees: { + factory: "factories" + }, + dailyFees: { + factory: "pancakeDayData", + field: "feesUSD" + } +}) + +const v3StartTimes = { + [CHAIN.FUSE]: 1703725380, +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.FUSE]: { + fetch: v3Graph(CHAIN.FUSE), + start: v3StartTimes[CHAIN.FUSE] + } + } +} + +export default adapter From 5c1087de07a24a16ef18db4c08df39bc3afa2545 Mon Sep 17 00:00:00 2001 From: Justin Deible Date: Wed, 12 Jun 2024 11:37:46 -0700 Subject: [PATCH 0784/1590] add Odos scroll deployment --- aggregators/odos/index.ts | 1 + fees/odos.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/aggregators/odos/index.ts b/aggregators/odos/index.ts index b98161a6b5..e78b7096b4 100644 --- a/aggregators/odos/index.ts +++ b/aggregators/odos/index.ts @@ -21,6 +21,7 @@ const FEE_COLLECTORS: TPool = { [CHAIN.MODE]: ['0x7E15EB462cdc67Cf92Af1f7102465a8F8c784874',], [CHAIN.LINEA]: ['0x2d8879046f1559E53eb052E949e9544bCB72f414',], [CHAIN.MANTLE]: ['0xD9F4e85489aDCD0bAF0Cd63b4231c6af58c26745',], + [CHAIN.SCROLL]: ['0xbFe03C9E20a9Fc0b37de01A172F207004935E0b1',], } async function fetch({ getLogs, createBalances, chain }: FetchOptions) { diff --git a/fees/odos.ts b/fees/odos.ts index 5120d022dd..813fba5427 100644 --- a/fees/odos.ts +++ b/fees/odos.ts @@ -53,6 +53,7 @@ const FEE_COLLECTORS: TPool = { [CHAIN.MODE]: ['0x7E15EB462cdc67Cf92Af1f7102465a8F8c784874',], [CHAIN.LINEA]: ['0x2d8879046f1559E53eb052E949e9544bCB72f414',], [CHAIN.MANTLE]: ['0xD9F4e85489aDCD0bAF0Cd63b4231c6af58c26745',], + [CHAIN.SCROLL]: ['0xbFe03C9E20a9Fc0b37de01A172F207004935E0b1',], } const graph = (chain: Chain): any => { @@ -90,6 +91,7 @@ const adapter: SimpleAdapter = { [CHAIN.MODE]: { fetch: graph(CHAIN.MODE), start: 1689292800 }, [CHAIN.LINEA]: { fetch: graph(CHAIN.LINEA), start: 1689292800 }, [CHAIN.MANTLE]: { fetch: graph(CHAIN.MANTLE), start: 1689292800 }, + [CHAIN.SCROLL]: { fetch: graph(CHAIN.SCROLL), start: 1689292800 }, } }; From 00db5d11231ec11d5b03e819ea85b401750022a5 Mon Sep 17 00:00:00 2001 From: slasher125 Date: Thu, 13 Jun 2024 10:28:21 +0400 Subject: [PATCH 0785/1590] use new sdk func to get full url --- dexs/3xcalibur/index.ts | 3 ++- dexs/ArbitrumExchange/index.ts | 3 ++- dexs/SubstanceX/index.ts | 3 ++- dexs/ampleswap/index.ts | 3 ++- dexs/apeswap/index.ts | 3 ++- dexs/auragi/index.ts | 3 ++- dexs/balancer/index.ts | 13 +++++++------ dexs/baseswap/index.ts | 3 ++- dexs/biswap/index.ts | 3 ++- dexs/camelot-v3/index.ts | 3 ++- dexs/camelot/index.ts | 3 ++- dexs/champagneswap/index.ts | 3 ++- dexs/clipper/index.ts | 3 ++- dexs/cometh/index.ts | 3 ++- dexs/defi-swap/index.ts | 3 ++- dexs/defiplaza/index.ts | 3 ++- dexs/dodo/index.ts | 7 ++++--- dexs/elk/index.ts | 17 +++++++++-------- dexs/equity-spot/index.ts | 3 ++- dexs/huckleberry/index.ts | 3 ++- dexs/kyberswap/index.ts | 3 ++- dexs/morpheus-swap/index.ts | 3 ++- dexs/pangolin/index.ts | 3 ++- dexs/pika-protocol-v4/index.ts | 3 ++- dexs/pika-protocol/index.ts | 3 ++- dexs/quickswap/index.ts | 5 +++-- dexs/ramses-exchange-v2/index.ts | 3 ++- dexs/saddle-finance/index.ts | 3 ++- dexs/solidly-v3/index.ts | 3 ++- dexs/spookyswap/index.ts | 3 ++- dexs/stellaswap/index.ts | 3 ++- dexs/sushiswap/classic.ts | 27 ++++++++++++++------------- dexs/sushiswap/trident.ts | 9 +++++---- dexs/swapr/index.ts | 3 ++- dexs/templedao-trade/index.ts | 3 ++- dexs/thena-perp/index.ts | 3 ++- dexs/thena-v3/index.ts | 3 ++- dexs/thena/index.ts | 3 ++- dexs/traderjoe/index.ts | 5 +++-- dexs/verse/index.ts | 3 ++- dexs/wagmi/wagmi.ts | 3 ++- dexs/wombat-exchange/index.ts | 11 ++++++----- dexs/zipswap/index.ts | 3 ++- dexs/zyberswap/index.ts | 3 ++- fees/aave/index.ts | 27 ++++++++++++++------------- fees/auragi.ts | 3 ++- fees/balancer.ts | 13 +++++++------ fees/betswirl/index.ts | 3 ++- fees/biswap.ts | 3 ++- fees/bsc.ts | 3 ++- fees/camelot-v2.ts | 3 ++- fees/camelot-v3.ts | 3 ++- fees/clever.ts | 3 ++- fees/clipper.ts | 3 ++- fees/concentrator.ts | 3 ++- fees/curve.ts | 15 ++++++++------- fees/defiplaza/index.ts | 3 ++- fees/elk.ts | 17 +++++++++-------- fees/equity/index.ts | 3 ++- fees/fx-protocol.ts | 3 ++- fees/hono.ts | 3 ++- fees/kyberswap.ts | 3 ++- fees/liquity.ts | 3 ++- fees/moonwell-artemis.ts | 3 ++- fees/pangolin.ts | 3 ++- fees/pika-protocol-v4.ts | 3 ++- fees/pika-protocol.ts | 3 ++- fees/premia/index.ts | 9 +++++---- fees/quickswap.ts | 5 +++-- fees/ramses-exchange-v1/bribes.ts | 3 ++- fees/ramses-exchange-v2/bribes.ts | 3 ++- fees/ramses-exchange-v2/index.ts | 3 ++- fees/solidly-v3.ts | 3 ++- fees/substanceX/index.ts | 3 ++- fees/thena-v1.ts | 3 ++- fees/thena-v3.ts | 3 ++- fees/zyberswap.ts | 3 ++- options/premia/index.ts | 9 +++++---- protocols/pancakeswap/index.ts | 14 +++++++------- protocols/smbswap/index.ts | 7 ++++--- protocols/uniswap/index.ts | 12 ++++++------ 81 files changed, 245 insertions(+), 166 deletions(-) diff --git a/dexs/3xcalibur/index.ts b/dexs/3xcalibur/index.ts index d27ec7a1a8..265468e4eb 100644 --- a/dexs/3xcalibur/index.ts +++ b/dexs/3xcalibur/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/J9xPBr2XdBxWvLi2HSiz8hW76HUU91WQ9ztkicCRccDS`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('J9xPBr2XdBxWvLi2HSiz8hW76HUU91WQ9ztkicCRccDS'), }; const graphs = getChainVolume({ diff --git a/dexs/ArbitrumExchange/index.ts b/dexs/ArbitrumExchange/index.ts index 08606c51c9..61f35625cd 100644 --- a/dexs/ArbitrumExchange/index.ts +++ b/dexs/ArbitrumExchange/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { BreakdownAdapter, BaseAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -14,7 +15,7 @@ const v2Endpoints = { }; const v3Endpoints = { - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/AQPMJVpukYUo96WvuKqn7aPZn3m8BHckYs82ZLSMKyeu`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('AQPMJVpukYUo96WvuKqn7aPZn3m8BHckYs82ZLSMKyeu'), }; const VOLUME_USD = "volumeUSD"; diff --git a/dexs/SubstanceX/index.ts b/dexs/SubstanceX/index.ts index 347a14cad6..0c9d6f0485 100644 --- a/dexs/SubstanceX/index.ts +++ b/dexs/SubstanceX/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { request, gql, GraphQLClient } from "graphql-request"; @@ -11,7 +12,7 @@ const endpoints = { }; const blockNumberGraph = { - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/64DCU8nq48qdDABnobpDafsg7RF75Rx5soKrHiGA8mqp`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('64DCU8nq48qdDABnobpDafsg7RF75Rx5soKrHiGA8mqp'), [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta-blocks" } diff --git a/dexs/ampleswap/index.ts b/dexs/ampleswap/index.ts index 30f578c2ce..27890e9b0a 100644 --- a/dexs/ampleswap/index.ts +++ b/dexs/ampleswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2MF3GHhPgvCk8ZHBso8uxTkcT97zjmoEPfxkbeH4D7Jb`, + [CHAIN.BSC]: sdk.graph.modifyEndpoint('2MF3GHhPgvCk8ZHBso8uxTkcT97zjmoEPfxkbeH4D7Jb'), }; const adapter = univ2Adapter(endpoints, {}); diff --git a/dexs/apeswap/index.ts b/dexs/apeswap/index.ts index b5179a661b..7f4b71a967 100644 --- a/dexs/apeswap/index.ts +++ b/dexs/apeswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/GH4Zt29mCApHwMfavNFw5ZdQDH3owc2Wq8DdU4hGPXYe`, + [CHAIN.BSC]: sdk.graph.modifyEndpoint('GH4Zt29mCApHwMfavNFw5ZdQDH3owc2Wq8DdU4hGPXYe'), [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/prof-sd/as-matic-graft", [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/apeswapfinance/ethereum-dex", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/prof-sd/arbitrum-dex" diff --git a/dexs/auragi/index.ts b/dexs/auragi/index.ts index a816f21aab..32b9bf2845 100644 --- a/dexs/auragi/index.ts +++ b/dexs/auragi/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DtNQcRXx82k4azEb5QvUjRbmXSNLTUsUePzPY6PtryEc`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('DtNQcRXx82k4azEb5QvUjRbmXSNLTUsUePzPY6PtryEc'), }; const graphs = getChainVolume({ diff --git a/dexs/balancer/index.ts b/dexs/balancer/index.ts index 9db62d533f..b4641489cc 100644 --- a/dexs/balancer/index.ts +++ b/dexs/balancer/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; import { BaseAdapter, BreakdownAdapter, ChainEndpoints, FetchResultV2, FetchResultVolume, FetchV2 } from "../../adapters/types"; @@ -8,14 +9,14 @@ import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getU import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints: ChainEndpoints = { - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/C4ayEZP2yTXRAB8vSaTrgN4m9anTe9Mdm2ViyiAuV9TV`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('C4ayEZP2yTXRAB8vSaTrgN4m9anTe9Mdm2ViyiAuV9TV'), [CHAIN.POLYGON]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN`, + sdk.graph.modifyEndpoint('78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN'), [CHAIN.ARBITRUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc`, - [CHAIN.XDAI]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg`, + sdk.graph.modifyEndpoint('itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc'), + [CHAIN.XDAI]: sdk.graph.modifyEndpoint('EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg'), [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest", - [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu`, + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu'), [CHAIN.BASE]: "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest" }; @@ -69,7 +70,7 @@ const v2Graphs = (chain: Chain) => { const v1graphs = getChainVolume({ graphUrls: { - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB` + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB') }, ...graphParams }); diff --git a/dexs/baseswap/index.ts b/dexs/baseswap/index.ts index 1b38fb2ef6..4341e6b87c 100644 --- a/dexs/baseswap/index.ts +++ b/dexs/baseswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import customBackfill from "../../helpers/customBackfill"; import { DEFAULT_TOTAL_VOLUME_FACTORY, @@ -14,7 +15,7 @@ const v2Endpoints: ChainEndpoints = { [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/harleen-m/baseswap", }; const v3Endpoints = { - [CHAIN.BASE]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/39pzQzH5r3vmovd9fTs7rVDVFCj1xJye3dTMNHcSkSfL`, + [CHAIN.BASE]: sdk.graph.modifyEndpoint('39pzQzH5r3vmovd9fTs7rVDVFCj1xJye3dTMNHcSkSfL'), }; // Fetch function to query the subgraphs diff --git a/dexs/biswap/index.ts b/dexs/biswap/index.ts index b8b6eb28b4..7e24d4c895 100644 --- a/dexs/biswap/index.ts +++ b/dexs/biswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd` + [CHAIN.BSC]: sdk.graph.modifyEndpoint('2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd') }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData", diff --git a/dexs/camelot-v3/index.ts b/dexs/camelot-v3/index.ts index c96b73bf7c..46fad542d0 100644 --- a/dexs/camelot-v3/index.ts +++ b/dexs/camelot-v3/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; // https://api.thegraph.com/subgraphs/name/camelotlabs/camelot-amm-2 import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7mPnp1UqmefcCycB8umy4uUkTkFxMoHn1Y7ncBUscePp` + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('7mPnp1UqmefcCycB8umy4uUkTkFxMoHn1Y7ncBUscePp') }, { factoriesName: "factories", dayData: "algebraDayData", diff --git a/dexs/camelot/index.ts b/dexs/camelot/index.ts index ab0328c511..f1a7553d37 100644 --- a/dexs/camelot/index.ts +++ b/dexs/camelot/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; // https://api.thegraph.com/subgraphs/name/camelotlabs/camelot-amm-2 import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv` + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv') }, {}); adapters.adapter.arbitrum.start = 1668124800; diff --git a/dexs/champagneswap/index.ts b/dexs/champagneswap/index.ts index c3443d0773..72debaafb7 100644 --- a/dexs/champagneswap/index.ts +++ b/dexs/champagneswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { DISABLED_ADAPTER_KEY, SimpleAdapter } from "../../adapters/types"; import disabledAdapter from "../../helpers/disabledAdapter"; @@ -9,7 +10,7 @@ const { const { BSC } = require("../../helpers/chains"); const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); const endpoints = { - [BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9gXThrkBPCRnK5ncBGySQJZoFUUSC5RDAYYciEZ323Pj`, + [BSC]: sdk.graph.modifyEndpoint('9gXThrkBPCRnK5ncBGySQJZoFUUSC5RDAYYciEZ323Pj'), }; const DAILY_VOLUME_FACTORY = "champagneDayData"; diff --git a/dexs/clipper/index.ts b/dexs/clipper/index.ts index 6b23ae5287..27a2b15706 100644 --- a/dexs/clipper/index.ts +++ b/dexs/clipper/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -9,7 +10,7 @@ const endpoints = { [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-optimism", [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-polygon", [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-moonbeam", - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W'), }; diff --git a/dexs/cometh/index.ts b/dexs/cometh/index.ts index 2db17a053e..2e7d759d79 100644 --- a/dexs/cometh/index.ts +++ b/dexs/cometh/index.ts @@ -1,7 +1,8 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/GcokW8RfC9YJeZF4CPoLUwJwZRcQ8kbDR7WziCMus7LF` + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('GcokW8RfC9YJeZF4CPoLUwJwZRcQ8kbDR7WziCMus7LF') }, { }); diff --git a/dexs/defi-swap/index.ts b/dexs/defi-swap/index.ts index 39c68133e1..eb11352c98 100644 --- a/dexs/defi-swap/index.ts +++ b/dexs/defi-swap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapter = univ2Adapter({ - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G7W3G1JGcFbWseucNkHHvQorxyjQLEQt7vt9yPN97hri` + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('G7W3G1JGcFbWseucNkHHvQorxyjQLEQt7vt9yPN97hri') }, { factoriesName: "factories", dayData: "dayData", diff --git a/dexs/defiplaza/index.ts b/dexs/defiplaza/index.ts index 81933761b7..9e3e2357b5 100644 --- a/dexs/defiplaza/index.ts +++ b/dexs/defiplaza/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { FetchResultGeneric, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -14,7 +15,7 @@ type RadixPlazaResponse = { swaps: number } -const thegraph_endpoints = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4z9FBF12CrfoQJhAkWicqzY2fKYN9QRmuzSsizVXhjKa`; +const thegraph_endpoints = sdk.graph.modifyEndpoint('4z9FBF12CrfoQJhAkWicqzY2fKYN9QRmuzSsizVXhjKa'); const radix_endpoint = "https://radix.defiplaza.net/api/defillama/volume"; const adapter: SimpleAdapter = { diff --git a/dexs/dodo/index.ts b/dexs/dodo/index.ts index 7f57e13c80..31c9158844 100644 --- a/dexs/dodo/index.ts +++ b/dexs/dodo/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { BreakdownAdapter, ChainBlocks, Fetch, FetchOptions, IStartTimestamp } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; @@ -10,9 +11,9 @@ import dailyVolumePayload from "./dailyVolumePayload"; [CHAIN.BSC]: "https://api.dodoex.io/graphql?opname=FetchDashboardDailyData", [CHAIN.ETHEREUM]: "https://api.dodoex.io/graphql?opname=FetchDashboardDailyData", [CHAIN.POLYGON]: "https://api.dodoex.io/graphql?opname=FetchDashboardDailyData", - // [MOONRIVER]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G4HFPFJue7zf2BktJuKETh72DscimLJRybVA6iD6A7yM`, - // [AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8GUXi8PNrW4ACf968KCWxH9AkeNt8YEQin7MDa7RuULW`, - // [BOBA]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6PVfSucTfTimvx3aMgWsatmRDBNxW7yQKayyZ7Mxrf73` + // [MOONRIVER]: sdk.graph.modifyEndpoint('G4HFPFJue7zf2BktJuKETh72DscimLJRybVA6iD6A7yM'), + // [AVAX]: sdk.graph.modifyEndpoint('8GUXi8PNrW4ACf968KCWxH9AkeNt8YEQin7MDa7RuULW'), + // [BOBA]: sdk.graph.modifyEndpoint('6PVfSucTfTimvx3aMgWsatmRDBNxW7yQKayyZ7Mxrf73') // [HECO]: "https://n10.hg.network/subgraphs/name/dodoex-mine-v3-heco/heco", // [OKEXCHAIN]: "https://graph.kkt.one/subgraphs/name/dodoex/dodoex-v2-okchain", } as ChainEndpoints */ diff --git a/dexs/elk/index.ts b/dexs/elk/index.ts index ad37c97945..92d2f906b6 100644 --- a/dexs/elk/index.ts +++ b/dexs/elk/index.ts @@ -1,20 +1,21 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const adapter = univ2Adapter({ - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/B8TGNwQ8xMoeFCdsv9dPkciRBpEYAy1UxmXDr7nc9fpE`, - [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2dyce92CewvhV17C8BMFoMCgaXdPTtwBzaz8AReQR3YV`, - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5tRz9anigEVND48Gx1mUpNNM4YSm3NpzG9XRB8dYAMhb`, - [CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/pmqe2dQvH4PK7aaFh4GXrr49wpKRr3GjPCnNEgEb6U2`, - [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8jzpT6nnKgmqcdGocys97YWkuqwDbHBxpozsKcxH1KUP`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('B8TGNwQ8xMoeFCdsv9dPkciRBpEYAy1UxmXDr7nc9fpE'), + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('2dyce92CewvhV17C8BMFoMCgaXdPTtwBzaz8AReQR3YV'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('5tRz9anigEVND48Gx1mUpNNM4YSm3NpzG9XRB8dYAMhb'), + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('pmqe2dQvH4PK7aaFh4GXrr49wpKRr3GjPCnNEgEb6U2'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('8jzpT6nnKgmqcdGocys97YWkuqwDbHBxpozsKcxH1KUP'), // [CHAIN.HECO]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-heco" - [CHAIN.XDAI]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/kD9njskfB9xv7gDnsU2sz4X4sXfEimBv8xMJ6votFND`, + [CHAIN.XDAI]: sdk.graph.modifyEndpoint('kD9njskfB9xv7gDnsU2sz4X4sXfEimBv8xMJ6votFND'), // [CHAIN.MOONRIVER]: "https://moonriver-graph.elk.finance/subgraphs/name/elkfinance/elkdex-moonriver", // [CHAIN.ELASTOS]: "https://elastos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-elastos", // [CHAIN.OKEXCHAIN]: "https://okex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-okex", // [CHAIN.KCC]: "https://kcc-graph.elk.finance/subgraphs/name/elkfinance/elkdex-kcc", - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/59tcH5BPyXj41XZgn1ZYy4pE8iDdzaZpR9MRhmuPW4Lr`, - [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/H7UcKWuAqQPqWKcnNLn2Jamy9zE7wVgsLSRQpPwXo2Ag`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('59tcH5BPyXj41XZgn1ZYy4pE8iDdzaZpR9MRhmuPW4Lr'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('H7UcKWuAqQPqWKcnNLn2Jamy9zE7wVgsLSRQpPwXo2Ag'), // [CHAIN.CRONOS]: "https://cronos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-cronos", // [CHAIN.FUSE]: "https://fuse-graph.elk.finance/subgraphs/name/elkfinance/elkdex-fuse", // [CHAIN.IOTEX]: "https://iotex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-iotex", diff --git a/dexs/equity-spot/index.ts b/dexs/equity-spot/index.ts index 6b4b1d5d56..489a0b176d 100644 --- a/dexs/equity-spot/index.ts +++ b/dexs/equity-spot/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - [CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9USQeMVzzBbxsXhQUmCk5fZursvL9Vj3cv8joYNXeKt9`, + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('9USQeMVzzBbxsXhQUmCk5fZursvL9Vj3cv8joYNXeKt9'), } const historicalData = gql` diff --git a/dexs/huckleberry/index.ts b/dexs/huckleberry/index.ts index 19887e100d..0669fa0729 100644 --- a/dexs/huckleberry/index.ts +++ b/dexs/huckleberry/index.ts @@ -1,7 +1,8 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.MOONRIVER]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EMTH8qnNbMGgjoFxE8YZh4qGMMxTQu44WDbn2xKexzwb`, + [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('EMTH8qnNbMGgjoFxE8YZh4qGMMxTQu44WDbn2xKexzwb'), // [CHAIN.CLV]: "https://clover-graph-node.huckleberry.finance/subgraphs/name/huckleberry/clv-parachain-subgraph" }, {}); diff --git a/dexs/kyberswap/index.ts b/dexs/kyberswap/index.ts index d3ac75788f..174f292c4a 100644 --- a/dexs/kyberswap/index.ts +++ b/dexs/kyberswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import ADDRESSES from '../../helpers/coreAssets.json' import request from "graphql-request"; import { BaseAdapter, BreakdownAdapter, FetchOptions, FetchResultVolume } from "../../adapters/types"; @@ -56,7 +57,7 @@ const elasticEndpoints = elasticChains.reduce((acc, chain)=>({ //cronos: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-cronos", // missing -> almost no volume and stale ethereum: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-mainnet", arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum", - polygon: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT`, + polygon: sdk.graph.modifyEndpoint('8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT'), [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", [CHAIN.BASE]: "https://base-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-base", [CHAIN.SCROLL]: "https://scroll-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-scroll" diff --git a/dexs/morpheus-swap/index.ts b/dexs/morpheus-swap/index.ts index e28d56f557..fe9e2b7603 100644 --- a/dexs/morpheus-swap/index.ts +++ b/dexs/morpheus-swap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/C5XUzYLrDHiiKL7zGjLLyiQueJkQfeUyMZCcgwnVWcNr` + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('C5XUzYLrDHiiKL7zGjLLyiQueJkQfeUyMZCcgwnVWcNr') }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData", diff --git a/dexs/pangolin/index.ts b/dexs/pangolin/index.ts index fe6f4643aa..f4e0fb0195 100644 --- a/dexs/pangolin/index.ts +++ b/dexs/pangolin/index.ts @@ -1,7 +1,8 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - "avax": `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq` + "avax": sdk.graph.modifyEndpoint('CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq') }, { factoriesName: "pangolinFactories", dayData: "pangolinDayData", diff --git a/dexs/pika-protocol-v4/index.ts b/dexs/pika-protocol-v4/index.ts index 181a2a2dbc..0a56e0b9a4 100644 --- a/dexs/pika-protocol-v4/index.ts +++ b/dexs/pika-protocol-v4/index.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"; @@ -22,7 +23,7 @@ interface IValume { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5dP9FpbXxmNPRaERfzyKEGuRKh2NRQuwPBWfMLGoSRX5` + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('5dP9FpbXxmNPRaERfzyKEGuRKh2NRQuwPBWfMLGoSRX5') } const fetch = (chain: Chain) => { diff --git a/dexs/pika-protocol/index.ts b/dexs/pika-protocol/index.ts index 071cb9f222..7c6f9dca69 100644 --- a/dexs/pika-protocol/index.ts +++ b/dexs/pika-protocol/index.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"; @@ -22,7 +23,7 @@ interface IValume { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DUcxevdqV8kBQdHWcdUcaEctaoVyqYZTtCftojL23NbA` + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('DUcxevdqV8kBQdHWcdUcaEctaoVyqYZTtCftojL23NbA') } const fetch = (chain: Chain) => { diff --git a/dexs/quickswap/index.ts b/dexs/quickswap/index.ts index ed3a386a22..df845cb1f8 100644 --- a/dexs/quickswap/index.ts +++ b/dexs/quickswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; @@ -5,7 +6,7 @@ import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL import fetchURL from "../../utils/fetchURL" const endpoints = { - [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd`, + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd'), }; const graphs = getChainVolume({ @@ -22,7 +23,7 @@ const graphs = getChainVolume({ }); const endpointsAlgebraV3 = { - [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7`, + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7'), // [CHAIN.DOGECHAIN]: "https://graph-node.dogechain.dog/subgraphs/name/quickswap/dogechain-info", [CHAIN.POLYGON_ZKEVM]:"https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7", [CHAIN.MANTA]:"https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn" diff --git a/dexs/ramses-exchange-v2/index.ts b/dexs/ramses-exchange-v2/index.ts index 8b8bfcae4c..ec13885eb6 100644 --- a/dexs/ramses-exchange-v2/index.ts +++ b/dexs/ramses-exchange-v2/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea` + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea') }, { factoriesName: "factories", dayData: "uniswapDayData", diff --git a/dexs/saddle-finance/index.ts b/dexs/saddle-finance/index.ts index 893f1896ff..b6f9c956cd 100644 --- a/dexs/saddle-finance/index.ts +++ b/dexs/saddle-finance/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/79UL5SaLLsbXqC8Ks6v3fwWHR1FRs636FFRHn55o5SWq`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('79UL5SaLLsbXqC8Ks6v3fwWHR1FRs636FFRHn55o5SWq'), [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/saddle-finance/saddle-arbitrum" }; diff --git a/dexs/solidly-v3/index.ts b/dexs/solidly-v3/index.ts index 661ed84fd0..cc7a4a182f 100644 --- a/dexs/solidly-v3/index.ts +++ b/dexs/solidly-v3/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t'), // [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-optimism", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-arbitrum", diff --git a/dexs/spookyswap/index.ts b/dexs/spookyswap/index.ts index 7782a4cded..31bdf4afdd 100644 --- a/dexs/spookyswap/index.ts +++ b/dexs/spookyswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; @@ -6,7 +7,7 @@ import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume const { getChainVolumeWithGasToken } = require("../../helpers/getUniSubgraphVolume"); const { FANTOM } = require("../../helpers/chains"); const endpoints = { - [FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/HyhMfT7gehNHMBmFiExqeg3pDtop9UikjvBPfAXT3b21`, + [FANTOM]: sdk.graph.modifyEndpoint('HyhMfT7gehNHMBmFiExqeg3pDtop9UikjvBPfAXT3b21'), [CHAIN.EON]: "https://eon-graph.horizenlabs.io/subgraphs/name/0xALUKARD/spookyswap-eon", // [CHAIN.BITTORRENT]: "https://subgraph.spook.fi/subgraphs/name/eerieeight/spooky-swap-new" }; diff --git a/dexs/stellaswap/index.ts b/dexs/stellaswap/index.ts index e5f31aad6d..5b3f9b743b 100644 --- a/dexs/stellaswap/index.ts +++ b/dexs/stellaswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.MOONBEAN]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/HgSAfZvHEDbAVuZciPUYEqFzhAUnjJWmyix5C1R2tmTp` + [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint('HgSAfZvHEDbAVuZciPUYEqFzhAUnjJWmyix5C1R2tmTp') }, {}); adapters.adapter.moonbeam.start = 1641960253; export default adapters; diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index c91a0dd2f7..e62f398aff 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { @@ -53,19 +54,19 @@ const blacklistTokens = { } const endpointsClassic = { - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6NUtT5mGjZ1tSshKLf5Q3uEEJtjBZJo1TpL5MXsUBqrT`, - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/GPRigpbNuPkxkwpSbDuYXbikodNJfurc1LCENLzboWer`, - [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8NiXkxLRT3R22vpwLB4DXttpEf3X1LrKhe4T1tQ3jjbP`, - //[CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK`, - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8nFDCAhdnJQEhQF3ZRnfWkJ6FkRsfAiiVabVn4eGoAZH`, - [CHAIN.CELO]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8roCC7H2tsGYGvxD52QQbUoHXXx77H9tPhNn1qcjB5yj`, - [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6VAhbtW5u2sPYkJKAcMsxgqTBu4a1rqmbiVQWgtNjrvT`, - [CHAIN.HARMONY]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FrcJBCCKCYGTLLXJmhppXfPKsNoyod4zqNLjHfXj1KHg`, - // [CHAIN.MOONRIVER]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5skUrJzgVm6vXAmdKN7gw4CjYx3pgLDeUeUqVzqLXkWT`, - [CHAIN.XDAI]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4a8hcsttqsmycmmeFcpffGMZhBDU4NhHfyHH6YNcnu7b`, - // [CHAIN.MOONBEAM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3tNHz9aTBa2KUthYZiZZxayYYpxXACverKRrkafhoBru`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('6NUtT5mGjZ1tSshKLf5Q3uEEJtjBZJo1TpL5MXsUBqrT'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('GPRigpbNuPkxkwpSbDuYXbikodNJfurc1LCENLzboWer'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('8NiXkxLRT3R22vpwLB4DXttpEf3X1LrKhe4T1tQ3jjbP'), + //[CHAIN.FANTOM]: sdk.graph.modifyEndpoint('3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('8nFDCAhdnJQEhQF3ZRnfWkJ6FkRsfAiiVabVn4eGoAZH'), + [CHAIN.CELO]: sdk.graph.modifyEndpoint('8roCC7H2tsGYGvxD52QQbUoHXXx77H9tPhNn1qcjB5yj'), + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('6VAhbtW5u2sPYkJKAcMsxgqTBu4a1rqmbiVQWgtNjrvT'), + [CHAIN.HARMONY]: sdk.graph.modifyEndpoint('FrcJBCCKCYGTLLXJmhppXfPKsNoyod4zqNLjHfXj1KHg'), + // [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('5skUrJzgVm6vXAmdKN7gw4CjYx3pgLDeUeUqVzqLXkWT'), + [CHAIN.XDAI]: sdk.graph.modifyEndpoint('4a8hcsttqsmycmmeFcpffGMZhBDU4NhHfyHH6YNcnu7b'), + // [CHAIN.MOONBEAM]: sdk.graph.modifyEndpoint('3tNHz9aTBa2KUthYZiZZxayYYpxXACverKRrkafhoBru'), [CHAIN.BOBA]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/sushiswap-boba', - [CHAIN.FUSE]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DcaAUrnx2mWKVQNsVJiuz7zhjoLkvtDUcoq73NdBvbTo`, + [CHAIN.FUSE]: sdk.graph.modifyEndpoint('DcaAUrnx2mWKVQNsVJiuz7zhjoLkvtDUcoq73NdBvbTo'), [CHAIN.CORE]: 'https://thegraph.coredao.org/subgraphs/name/sushi-v2/sushiswap-core', [CHAIN.BLAST]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/sushiswap-blast/gn', }; @@ -139,7 +140,7 @@ const classic = Object.keys(endpointsClassic).reduce( const fantomGraphs = getChainVolumeWithGasToken({ graphUrls: { - [CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK` + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK') }, totalVolume: { factory: "factories", diff --git a/dexs/sushiswap/trident.ts b/dexs/sushiswap/trident.ts index 0eb1f33494..6e219e9290 100644 --- a/dexs/sushiswap/trident.ts +++ b/dexs/sushiswap/trident.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { CHAIN, @@ -7,13 +8,13 @@ import { FetchOptions } from "../../adapters/types"; const endpointsTrident: Record = { [CHAIN.POLYGON]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-polygon', - [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FEgRuH9zeTRMZgpVv5YavoFEcisoK6KHk3zgQRRBqt51`, + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('FEgRuH9zeTRMZgpVv5YavoFEcisoK6KHk3zgQRRBqt51'), //[CHAIN.KAVA]: 'https://pvt.graph.kava.io/subgraphs/name/sushi-v2/trident-kava', // [CHAIN.METIS]: 'https://andromeda.thegraph.metis.io/subgraphs/name/sushi-v2/trident-metis', // [CHAIN.BITTORRENT]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v2/trident-bttc', - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4x8H6ZoGfJykyZqAe2Kx2g5afsp17S9pn8GroRkpezhx`, - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9TQaBw1sU3wi2kdevuygKhfhjP3STnwBe1jUnKxmNhmn`, - [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/NNTV3MgqSGtHMBGdMVLXzzDbKDKmsY87k3PsQ2knmC1`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('4x8H6ZoGfJykyZqAe2Kx2g5afsp17S9pn8GroRkpezhx'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('9TQaBw1sU3wi2kdevuygKhfhjP3STnwBe1jUnKxmNhmn'), + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('NNTV3MgqSGtHMBGdMVLXzzDbKDKmsY87k3PsQ2knmC1'), } const VOLUME_FIELD = "volumeUSD"; diff --git a/dexs/swapr/index.ts b/dexs/swapr/index.ts index 82b2d677a7..d4db5d74fe 100644 --- a/dexs/swapr/index.ts +++ b/dexs/swapr/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/dxgraphs/swapr-mainnet-v2", - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8CtcD8EzHq6YyQrnb4XFz2pnwXVx3nHruj4pcDjHRKpt`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('8CtcD8EzHq6YyQrnb4XFz2pnwXVx3nHruj4pcDjHRKpt'), [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/dxgraphs/swapr-xdai-v2" }; diff --git a/dexs/templedao-trade/index.ts b/dexs/templedao-trade/index.ts index 4f806ccce3..f913785c74 100644 --- a/dexs/templedao-trade/index.ts +++ b/dexs/templedao-trade/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -7,7 +8,7 @@ const { getChainVolume, } = require("../../helpers/getUniSubgraphVolume"); const endpoints = { - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6No9vpT4V56r2c4y4TxHsKs7hEbAWu66u19wNGAX8nxL` + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('6No9vpT4V56r2c4y4TxHsKs7hEbAWu66u19wNGAX8nxL') }; const VOLUME_FIELD = "volumeUSD"; diff --git a/dexs/thena-perp/index.ts b/dexs/thena-perp/index.ts index dd17f96713..03bdce385e 100644 --- a/dexs/thena-perp/index.ts +++ b/dexs/thena-perp/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -6,7 +7,7 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume const ONE_DAY_IN_SECONDS = 60 * 60 * 24 -const endpoint = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DYHqLcjXMBC9c7AGvrYSBfQ6fQS723PJHF2usA9JX8NN` +const endpoint = sdk.graph.modifyEndpoint('DYHqLcjXMBC9c7AGvrYSBfQ6fQS723PJHF2usA9JX8NN') const query = gql` query stats($from: String!, $to: String!) { diff --git a/dexs/thena-v3/index.ts b/dexs/thena-v3/index.ts index 528def994e..541fd01446 100644 --- a/dexs/thena-v3/index.ts +++ b/dexs/thena-v3/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Hnjf3ipVMCkQze3jmHp8tpSMgPmtPnXBR38iM4ix1cLt` + [CHAIN.BSC]: sdk.graph.modifyEndpoint('Hnjf3ipVMCkQze3jmHp8tpSMgPmtPnXBR38iM4ix1cLt') }, { factoriesName: "factories", dayData: "fusionDayData", diff --git a/dexs/thena/index.ts b/dexs/thena/index.ts index e42b0323eb..e51d98382f 100644 --- a/dexs/thena/index.ts +++ b/dexs/thena/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FKEt2N5VmSdEYcz7fYLPvvnyEUkReQ7rvmXzs6tiKCz1` + [CHAIN.BSC]: sdk.graph.modifyEndpoint('FKEt2N5VmSdEYcz7fYLPvvnyEUkReQ7rvmXzs6tiKCz1') }, { factoriesName: "factories", totalVolume: "totalVolumeUSD", diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index b169b77770..fc72e08fe5 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { BreakdownAdapter, FetchOptions, FetchResultVolume } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,9 +6,9 @@ import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getU import fetchURL from "../../utils/fetchURL"; const endpoints = { - [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9ZjERoA7jGANYNz1YNuFMBt11fK44krveEhzssJTWokM`, + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('9ZjERoA7jGANYNz1YNuFMBt11fK44krveEhzssJTWokM'), [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/joe-v1-bnb", - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3jFnXqk6UXZyciPu5jfUuPR7kzGXPSndsLNrWXQ6xAxk`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('3jFnXqk6UXZyciPu5jfUuPR7kzGXPSndsLNrWXQ6xAxk'), }; type TEndpoint = { [s: string | Chain]: string; diff --git a/dexs/verse/index.ts b/dexs/verse/index.ts index 35e7c5a651..eabf456a19 100644 --- a/dexs/verse/index.ts +++ b/dexs/verse/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { ChainEndpoints, SimpleAdapter, BaseAdapter } from "../../adapters/types"; import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; const endpoints: ChainEndpoints = { - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CvSasxLYUvFbYyi7VXGhXL6PNgkZPoVDo2bo66ftEA2V`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('CvSasxLYUvFbYyi7VXGhXL6PNgkZPoVDo2bo66ftEA2V'), [CHAIN.SMARTBCH]: "https://analytics-dex.api.bitcoin.com/subgraphs/name/verse/exchange", }; diff --git a/dexs/wagmi/wagmi.ts b/dexs/wagmi/wagmi.ts index 3c02174329..4101835228 100644 --- a/dexs/wagmi/wagmi.ts +++ b/dexs/wagmi/wagmi.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; // Wagmi data import { CHAIN } from "../../helpers/chains"; const { request, gql } = require("graphql-request"); @@ -26,7 +27,7 @@ export const LINKS: { [key: string]: any } = { [CHAIN.ETHEREUM]: { subgraph: "https://api.studio.thegraph.com/query/53494/v3/version/latest", blocks: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9A6bkprqEG2XsZUYJ5B2XXp6ymz9fNcn4tVPxMWDztYC`, + sdk.graph.modifyEndpoint('9A6bkprqEG2XsZUYJ5B2XXp6ymz9fNcn4tVPxMWDztYC'), }, [CHAIN.METIS]: { subgraph: "https://metis.graph.wagmi.com/subgraphs/name/v3", diff --git a/dexs/wombat-exchange/index.ts b/dexs/wombat-exchange/index.ts index e4c93ef228..b430961fd7 100644 --- a/dexs/wombat-exchange/index.ts +++ b/dexs/wombat-exchange/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import {FetchOptions, FetchResultV2, SimpleAdapter} from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, request } from "graphql-request"; @@ -25,19 +26,19 @@ type TEndpoint = { // Updated using studio const endpoints: TEndpoint = { [CHAIN.BSC]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DPuFUNkRpW5AG2HBWyRhzvYCodocb1H8vjVLijyEJyGE`, + sdk.graph.modifyEndpoint('DPuFUNkRpW5AG2HBWyRhzvYCodocb1H8vjVLijyEJyGE'), [CHAIN.ARBITRUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/HADLg9LFYHJupr3xvWdmp7piPpwjGEwjbCknkSVrfyDQ`, + sdk.graph.modifyEndpoint('HADLg9LFYHJupr3xvWdmp7piPpwjGEwjbCknkSVrfyDQ'), [CHAIN.ETHEREUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3S2iHctknomx91fcAcyqrPvCcGfnuhKdEKBs2xThoCvJ`, + sdk.graph.modifyEndpoint('3S2iHctknomx91fcAcyqrPvCcGfnuhKdEKBs2xThoCvJ'), [CHAIN.SCROLL]: "https://api.studio.thegraph.com/query/56564/wombat-exchange-scroll/version/latest", [CHAIN.AVAX]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6PbnpSVfrWgVeRiTbbM4yFNAiYacLjGLg1ztzasxqxGf`, + sdk.graph.modifyEndpoint('6PbnpSVfrWgVeRiTbbM4yFNAiYacLjGLg1ztzasxqxGf'), [CHAIN.BASE]: "https://api.studio.thegraph.com/query/56564/wombat-exchange-base/version/latest", [CHAIN.OPTIMISM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4phYPx7RdkSSKFuoFBRZFFbPMkRCnYLfi8bENyQf4NA6`, + sdk.graph.modifyEndpoint('4phYPx7RdkSSKFuoFBRZFFbPMkRCnYLfi8bENyQf4NA6'), }; const fetchVolume = (chain: Chain) => { diff --git a/dexs/zipswap/index.ts b/dexs/zipswap/index.ts index 8e1624285b..ba782aaa9c 100644 --- a/dexs/zipswap/index.ts +++ b/dexs/zipswap/index.ts @@ -1,6 +1,7 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5tAUjmnM9iE4aADZwKhk3fobY8fMFbb1VMsrSKvo4kFr` + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('5tAUjmnM9iE4aADZwKhk3fobY8fMFbb1VMsrSKvo4kFr') }, {}); diff --git a/dexs/zyberswap/index.ts b/dexs/zyberswap/index.ts index c2c255f4d8..e8cce5584c 100644 --- a/dexs/zyberswap/index.ts +++ b/dexs/zyberswap/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; const endpoints = { - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R'), }; const graphs = getChainVolume({ diff --git a/fees/aave/index.ts b/fees/aave/index.ts index 5dae9e9b04..e082e2e3ef 100644 --- a/fees/aave/index.ts +++ b/fees/aave/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { AVAX, OPTIMISM, FANTOM, HARMONY, ARBITRUM, ETHEREUM, POLYGON, CHAIN } from "../../helpers/chains"; import { request, gql } from "graphql-request"; import type { ChainEndpoints, FetchOptions } from "../../adapters/types"; @@ -32,26 +33,26 @@ const headers: THeader = { const ONE_DAY = 24 * 60 * 60; const v1Endpoints = { - [ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/GJfRcmN4YAzKW3VH2ZKzTcWXjgtvkpAYSwFh1LfHsEuh`, + [ETHEREUM]: sdk.graph.modifyEndpoint('GJfRcmN4YAzKW3VH2ZKzTcWXjgtvkpAYSwFh1LfHsEuh'), } const v2Endpoints = { - [ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8wR23o1zkS4gpLqLNU4kG3JHYVucqGyopL5utGxP2q1N`, - [AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EZvK18pMhwiCjxwesRLTg81fP33WnR6BnZe5Cvma3H1C`, - [POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/H1Et77RZh3XEf27vkAmJyzgCME2RSFLtDS2f4PPW6CGp` + [ETHEREUM]: sdk.graph.modifyEndpoint('8wR23o1zkS4gpLqLNU4kG3JHYVucqGyopL5utGxP2q1N'), + [AVAX]: sdk.graph.modifyEndpoint('EZvK18pMhwiCjxwesRLTg81fP33WnR6BnZe5Cvma3H1C'), + [POLYGON]: sdk.graph.modifyEndpoint('H1Et77RZh3XEf27vkAmJyzgCME2RSFLtDS2f4PPW6CGp') }; //V3 endpoints avilable here: https://github.com/aave/protocol-subgraphs const v3Endpoints = { - [POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Co2URyXjnxaw8WqxKyVHdirq9Ahhm5vcTs4dMedAq211`, - [AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2h9woxy8RTjHu1HJsCEnmzpPHFArU33avmUh4f71JpVn`, - [ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DLuE98kEb5pQNXAcKFQGQgfSQ57Xdou4jnVbAEqMfy3B`, - [OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DSfLz8oQBUeU5atALgUFQKMTSYV9mZAVYp4noLSXAfvb`, - [FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6L1vPqyE3xvkzkWjh6wUKc1ABWYYps5HJahoxhrv2PJn`, - [HARMONY]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FifJapBdCqT9vgNqJ5axmr6eNyUpUSaRAbbZTfsViNsT`, - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Cd2gEDVeqnjBn1hSeqFMitw8Q1iiyV9FYUZkLNRcL87g`, - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7Jk85XgkV1MQ7u56hD8rr65rfASbayJXopugWkUoBMnZ`, - [CHAIN.XDAI]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/HtcDaL8L8iZ2KQNNS44EBVmLruzxuNAz1RkBYdui1QUT`, + [POLYGON]: sdk.graph.modifyEndpoint('Co2URyXjnxaw8WqxKyVHdirq9Ahhm5vcTs4dMedAq211'), + [AVAX]: sdk.graph.modifyEndpoint('2h9woxy8RTjHu1HJsCEnmzpPHFArU33avmUh4f71JpVn'), + [ARBITRUM]: sdk.graph.modifyEndpoint('DLuE98kEb5pQNXAcKFQGQgfSQ57Xdou4jnVbAEqMfy3B'), + [OPTIMISM]: sdk.graph.modifyEndpoint('DSfLz8oQBUeU5atALgUFQKMTSYV9mZAVYp4noLSXAfvb'), + [FANTOM]: sdk.graph.modifyEndpoint('6L1vPqyE3xvkzkWjh6wUKc1ABWYYps5HJahoxhrv2PJn'), + [HARMONY]: sdk.graph.modifyEndpoint('FifJapBdCqT9vgNqJ5axmr6eNyUpUSaRAbbZTfsViNsT'), + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('Cd2gEDVeqnjBn1hSeqFMitw8Q1iiyV9FYUZkLNRcL87g'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('7Jk85XgkV1MQ7u56hD8rr65rfASbayJXopugWkUoBMnZ'), + [CHAIN.XDAI]: sdk.graph.modifyEndpoint('HtcDaL8L8iZ2KQNNS44EBVmLruzxuNAz1RkBYdui1QUT'), [CHAIN.METIS]: 'https://metisapi.0xgraph.xyz/subgraphs/name/aave/protocol-v3-metis', [CHAIN.BASE]: 'https://api.goldsky.com/api/public/project_clk74pd7lueg738tw9sjh79d6/subgraphs/aave-v3-base/1.0.0/gn', [CHAIN.SCROLL]: 'https://api.goldsky.com/api/public/project_clk74pd7lueg738tw9sjh79d6/subgraphs/aave-v3-scroll/1.0.0/gn', diff --git a/fees/auragi.ts b/fees/auragi.ts index b824de404f..bf79192214 100644 --- a/fees/auragi.ts +++ b/fees/auragi.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { Adapter, FetchOptions } from "../adapters/types"; import BigNumber from "bignumber.js"; @@ -5,7 +6,7 @@ import { CHAIN } from "../helpers/chains"; const STABLE_FEES = 0.0001; const VOLATILE_FEES = 0.0005; -const endpoint = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DtNQcRXx82k4azEb5QvUjRbmXSNLTUsUePzPY6PtryEc`; +const endpoint = sdk.graph.modifyEndpoint('DtNQcRXx82k4azEb5QvUjRbmXSNLTUsUePzPY6PtryEc'); const getFees = () => { return async ({ getFromBlock, getToBlock}: FetchOptions) => { diff --git a/fees/balancer.ts b/fees/balancer.ts index 688268ad1a..257fa6164d 100644 --- a/fees/balancer.ts +++ b/fees/balancer.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { CHAIN }from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -7,20 +8,20 @@ import BigNumber from "bignumber.js"; const v1Endpoints = { [CHAIN.ETHEREUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB`, + sdk.graph.modifyEndpoint('93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB'), } const v2Endpoints = { [CHAIN.ETHEREUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Fog6Z9z7DXvWy4bx36c7ETQftdtr4Ppxn7Mjpxkzka2i`, + sdk.graph.modifyEndpoint('Fog6Z9z7DXvWy4bx36c7ETQftdtr4Ppxn7Mjpxkzka2i'), [CHAIN.ARBITRUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc`, + sdk.graph.modifyEndpoint('itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc'), [CHAIN.POLYGON]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN`, + sdk.graph.modifyEndpoint('78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN'), [CHAIN.AVAX]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu`, + sdk.graph.modifyEndpoint('7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu'), [CHAIN.XDAI]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg`, + sdk.graph.modifyEndpoint('EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg'), [CHAIN.BASE]: "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest", [CHAIN.POLYGON_ZKEVM]: diff --git a/fees/betswirl/index.ts b/fees/betswirl/index.ts index 73f6113054..f6616c9117 100644 --- a/fees/betswirl/index.ts +++ b/fees/betswirl/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { request } from "graphql-request"; import { Adapter, FetchOptions } from "../../adapters/types"; import { BSC, POLYGON, AVAX, ARBITRUM } from "../../helpers/chains"; @@ -6,7 +7,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints: any = { [BSC]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-bnb", [POLYGON]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FL3ePDCBbShPvfRJTaSCNnehiqxsPHzpLud6CpbHoeKW`, + sdk.graph.modifyEndpoint('FL3ePDCBbShPvfRJTaSCNnehiqxsPHzpLud6CpbHoeKW'), [AVAX]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-avalanche", [ARBITRUM]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-arbitrum", }; diff --git a/fees/biswap.ts b/fees/biswap.ts index 1200fc1b12..9203e1f8bf 100644 --- a/fees/biswap.ts +++ b/fees/biswap.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../helpers/chains"; import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; const adapters = univ2DimensionAdapter({ graphUrls: { - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd` + [CHAIN.BSC]: sdk.graph.modifyEndpoint('2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd') }, dailyVolume: { factory: "pancakeDayData" diff --git a/fees/bsc.ts b/fees/bsc.ts index d768756c3a..eac92f0bdf 100644 --- a/fees/bsc.ts +++ b/fees/bsc.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter, ProtocolType } from "../adapters/types"; import { BSC } from "../helpers/chains"; import { request, } from "graphql-request"; @@ -6,7 +7,7 @@ import { Chain } from '@defillama/sdk/build/general'; const endpoints = { [BSC]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3a3f5kp31kutZzjmQoE2NKBSr6Ady5rgxRxD2nygYcQo` + sdk.graph.modifyEndpoint('3a3f5kp31kutZzjmQoE2NKBSr6Ady5rgxRxD2nygYcQo') } diff --git a/fees/camelot-v2.ts b/fees/camelot-v2.ts index 5bd139c40a..2578e0d22d 100644 --- a/fees/camelot-v2.ts +++ b/fees/camelot-v2.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"; @@ -16,7 +17,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv` + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv') } const fetch = (chain: Chain) => { diff --git a/fees/camelot-v3.ts b/fees/camelot-v3.ts index 9297426df4..cca490566f 100644 --- a/fees/camelot-v3.ts +++ b/fees/camelot-v3.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"; @@ -16,7 +17,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7mPnp1UqmefcCycB8umy4uUkTkFxMoHn1Y7ncBUscePp` + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('7mPnp1UqmefcCycB8umy4uUkTkFxMoHn1Y7ncBUscePp') } const fetch = (chain: Chain) => { diff --git a/fees/clever.ts b/fees/clever.ts index 0d5cf62df6..abcea2560b 100644 --- a/fees/clever.ts +++ b/fees/clever.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; import { request } from "graphql-request"; @@ -6,7 +7,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints = { [ETHEREUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo`, + sdk.graph.modifyEndpoint('CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo'), }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/clipper.ts b/fees/clipper.ts index 0a5ab72200..a91ef74017 100644 --- a/fees/clipper.ts +++ b/fees/clipper.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../helpers/chains"; import request, { gql } from "graphql-request"; @@ -13,7 +14,7 @@ const endpoints: TEndpoint = { [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-optimism", [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-polygon", // [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-moonbeam", - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W'), }; interface IPool { diff --git a/fees/concentrator.ts b/fees/concentrator.ts index a739c68d53..f9918634bd 100644 --- a/fees/concentrator.ts +++ b/fees/concentrator.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -13,7 +14,7 @@ const priceUrl = "https://api.aladdin.club/api/coingecko/price"; const endpoints = { [ETHEREUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo`, + sdk.graph.modifyEndpoint('CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo'), }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/curve.ts b/fees/curve.ts index e8a7da2bf1..55a8469537 100644 --- a/fees/curve.ts +++ b/fees/curve.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { ARBITRUM, ETHEREUM, OPTIMISM, POLYGON, AVAX, FANTOM, XDAI } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -7,19 +8,19 @@ import fetchURL from "../utils/fetchURL"; const endpoints = { [ETHEREUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7FpNAjYhdo41FSdEro5P55uviKw69yhfPgxiWzPkr9au`, + sdk.graph.modifyEndpoint('7FpNAjYhdo41FSdEro5P55uviKw69yhfPgxiWzPkr9au'), [OPTIMISM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7cXBpS75ThtbYwtCD8B277vUfWptmz6vbhk9BKgYrEvQ`, + sdk.graph.modifyEndpoint('7cXBpS75ThtbYwtCD8B277vUfWptmz6vbhk9BKgYrEvQ'), [ARBITRUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/6okUrfq2HYokFytJd2JDhXW2kdyViy5gXWWpZkTnSL8w`, + sdk.graph.modifyEndpoint('6okUrfq2HYokFytJd2JDhXW2kdyViy5gXWWpZkTnSL8w'), [POLYGON]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EXzFgeWbfgcLgUFEa9rHcQtTy2EcdvJnosTVkPvKe7EU`, + sdk.graph.modifyEndpoint('EXzFgeWbfgcLgUFEa9rHcQtTy2EcdvJnosTVkPvKe7EU'), [AVAX]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4m6FwSHYnkQRUBSKdhh5heGd1ojTAXwEiacUyFix2Ygx`, + sdk.graph.modifyEndpoint('4m6FwSHYnkQRUBSKdhh5heGd1ojTAXwEiacUyFix2Ygx'), [FANTOM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7ZnKrxY26bDHZPSqJ3MNkDNjaRXLoc1ZiATDLbVjWa7H`, + sdk.graph.modifyEndpoint('7ZnKrxY26bDHZPSqJ3MNkDNjaRXLoc1ZiATDLbVjWa7H'), [XDAI]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/i82AxuGMFX7bqGNpXGrUvXqFMWZjLeRTNpJFvc3aW8L`, + sdk.graph.modifyEndpoint('i82AxuGMFX7bqGNpXGrUvXqFMWZjLeRTNpJFvc3aW8L'), }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/defiplaza/index.ts b/fees/defiplaza/index.ts index f6db81b230..fd17515f24 100644 --- a/fees/defiplaza/index.ts +++ b/fees/defiplaza/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -13,7 +14,7 @@ type RadixPlazaResponse = { swaps: number } -const thegraph_endpoints = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/4z9FBF12CrfoQJhAkWicqzY2fKYN9QRmuzSsizVXhjKa`; +const thegraph_endpoints = sdk.graph.modifyEndpoint('4z9FBF12CrfoQJhAkWicqzY2fKYN9QRmuzSsizVXhjKa'); const radix_endpoint = "https://radix.defiplaza.net/api/defillama/volume"; const adapter: SimpleAdapter = { diff --git a/fees/elk.ts b/fees/elk.ts index 0ffbf8afff..124022095b 100644 --- a/fees/elk.ts +++ b/fees/elk.ts @@ -1,21 +1,22 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../helpers/chains"; import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; const adapter = univ2DimensionAdapter({ graphUrls: { - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/B8TGNwQ8xMoeFCdsv9dPkciRBpEYAy1UxmXDr7nc9fpE`, - [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/2dyce92CewvhV17C8BMFoMCgaXdPTtwBzaz8AReQR3YV`, - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5tRz9anigEVND48Gx1mUpNNM4YSm3NpzG9XRB8dYAMhb`, - [CHAIN.FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/pmqe2dQvH4PK7aaFh4GXrr49wpKRr3GjPCnNEgEb6U2`, - [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8jzpT6nnKgmqcdGocys97YWkuqwDbHBxpozsKcxH1KUP`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('B8TGNwQ8xMoeFCdsv9dPkciRBpEYAy1UxmXDr7nc9fpE'), + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('2dyce92CewvhV17C8BMFoMCgaXdPTtwBzaz8AReQR3YV'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('5tRz9anigEVND48Gx1mUpNNM4YSm3NpzG9XRB8dYAMhb'), + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('pmqe2dQvH4PK7aaFh4GXrr49wpKRr3GjPCnNEgEb6U2'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('8jzpT6nnKgmqcdGocys97YWkuqwDbHBxpozsKcxH1KUP'), // [CHAIN.HECO]: "https://api.thegraph.com/subgraphs/name/elkfinance/elkdex-heco" - [CHAIN.XDAI]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/kD9njskfB9xv7gDnsU2sz4X4sXfEimBv8xMJ6votFND`, + [CHAIN.XDAI]: sdk.graph.modifyEndpoint('kD9njskfB9xv7gDnsU2sz4X4sXfEimBv8xMJ6votFND'), // [CHAIN.MOONRIVER]: "https://moonriver-graph.elk.finance/subgraphs/name/elkfinance/elkdex-moonriver", // [CHAIN.ELASTOS]: "https://elastos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-elastos", // [CHAIN.OKEXCHAIN]: "https://okex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-okex", // [CHAIN.KCC]: "https://kcc-graph.elk.finance/subgraphs/name/elkfinance/elkdex-kcc", - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/59tcH5BPyXj41XZgn1ZYy4pE8iDdzaZpR9MRhmuPW4Lr`, - [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/H7UcKWuAqQPqWKcnNLn2Jamy9zE7wVgsLSRQpPwXo2Ag`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('59tcH5BPyXj41XZgn1ZYy4pE8iDdzaZpR9MRhmuPW4Lr'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('H7UcKWuAqQPqWKcnNLn2Jamy9zE7wVgsLSRQpPwXo2Ag'), // [CHAIN.CRONOS]: "https://cronos-graph.elk.finance/subgraphs/name/elkfinance/elkdex-cronos", // [CHAIN.FUSE]: "https://fuse-graph.elk.finance/subgraphs/name/elkfinance/elkdex-fuse", // [CHAIN.IOTEX]: "https://iotex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-iotex", diff --git a/fees/equity/index.ts b/fees/equity/index.ts index 46b4dae489..5fe96df0e8 100644 --- a/fees/equity/index.ts +++ b/fees/equity/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { gql, request } from "graphql-request"; import type { ChainEndpoints } from "../../adapters/types"; @@ -6,7 +7,7 @@ import { FANTOM } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints = { - [FANTOM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9USQeMVzzBbxsXhQUmCk5fZursvL9Vj3cv8joYNXeKt9`, + [FANTOM]: sdk.graph.modifyEndpoint('9USQeMVzzBbxsXhQUmCk5fZursvL9Vj3cv8joYNXeKt9'), }; const graphs = (graphUrls: ChainEndpoints) => { diff --git a/fees/fx-protocol.ts b/fees/fx-protocol.ts index 1923a6b605..fa3a88bb3f 100644 --- a/fees/fx-protocol.ts +++ b/fees/fx-protocol.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; import { request } from "graphql-request"; @@ -10,7 +11,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints = { [ETHEREUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo`, + sdk.graph.modifyEndpoint('CCaEZU1PJyNaFmEjpyc4AXUiANB6M6DGDCJuWa48JWTo'), }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/hono.ts b/fees/hono.ts index f07cad1583..210b2934f6 100644 --- a/fees/hono.ts +++ b/fees/hono.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter, FetchResultFees } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -10,7 +11,7 @@ interface IData { } const endpoints = { - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7Trkrt6hPzhLXUH2x4Xt9cSnSmAFKDmKNWuUHEwzgCYJ` + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('7Trkrt6hPzhLXUH2x4Xt9cSnSmAFKDmKNWuUHEwzgCYJ') }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/kyberswap.ts b/fees/kyberswap.ts index 6ad2dca6c1..3fb5abc7a6 100644 --- a/fees/kyberswap.ts +++ b/fees/kyberswap.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { BaseAdapter, BreakdownAdapter, FetchResultFees } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -29,7 +30,7 @@ const elasticEndpoints: TEndpoint = elasticChains.reduce((acc, chain) => ({ }), { [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-mainnet", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum-one", - [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT`, + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT'), [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", [CHAIN.BITTORRENT]: "https://bttc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bttc", [CHAIN.BASE]: "https://base-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-base", diff --git a/fees/liquity.ts b/fees/liquity.ts index 4371c4af07..9f19dc0bc1 100644 --- a/fees/liquity.ts +++ b/fees/liquity.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { Adapter, ChainBlocks, FetchOptions, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; const { request, gql } = require("graphql-request"); -const URL = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8wump5sEYBV7vG1sKaNrvbqhTAV4EPKCdPw4ygms3Dmd` +const URL = sdk.graph.modifyEndpoint('8wump5sEYBV7vG1sKaNrvbqhTAV4EPKCdPw4ygms3Dmd') interface IValue { totalBorrowingFeesPaid: string; totalRedemptionFeesPaid: string; diff --git a/fees/moonwell-artemis.ts b/fees/moonwell-artemis.ts index 320bd31534..dd7c71c0fd 100644 --- a/fees/moonwell-artemis.ts +++ b/fees/moonwell-artemis.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -7,7 +8,7 @@ import BigNumber from "bignumber.js"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints = { - [CHAIN.MOONBEAN]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DQhrdUHwspQf3hSjDtyfS6uqq9YiKoLF3Ut3U9os2HK` + [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint('DQhrdUHwspQf3hSjDtyfS6uqq9YiKoLF3Ut3U9os2HK') } diff --git a/fees/pangolin.ts b/fees/pangolin.ts index 058c6aa142..769333f713 100644 --- a/fees/pangolin.ts +++ b/fees/pangolin.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../helpers/chains"; import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; const adapter = univ2DimensionAdapter({ graphUrls: { - [CHAIN.AVAX]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq` + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq') }, dailyVolume: { factory: "pangolinDayData" diff --git a/fees/pika-protocol-v4.ts b/fees/pika-protocol-v4.ts index b699656e4c..29af4ef8df 100644 --- a/fees/pika-protocol-v4.ts +++ b/fees/pika-protocol-v4.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"; @@ -37,7 +38,7 @@ interface ILiquidations { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5dP9FpbXxmNPRaERfzyKEGuRKh2NRQuwPBWfMLGoSRX5` + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('5dP9FpbXxmNPRaERfzyKEGuRKh2NRQuwPBWfMLGoSRX5') } const fetch = (chain: Chain) => { diff --git a/fees/pika-protocol.ts b/fees/pika-protocol.ts index d6cdcd9334..57b65a3e17 100644 --- a/fees/pika-protocol.ts +++ b/fees/pika-protocol.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"; @@ -37,7 +38,7 @@ interface ILiquidations { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/DUcxevdqV8kBQdHWcdUcaEctaoVyqYZTtCftojL23NbA` + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('DUcxevdqV8kBQdHWcdUcaEctaoVyqYZTtCftojL23NbA') } const fetch = (chain: Chain) => { diff --git a/fees/premia/index.ts b/fees/premia/index.ts index c3170faed1..93589b1a7e 100644 --- a/fees/premia/index.ts +++ b/fees/premia/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains" import { BreakdownAdapter, ChainEndpoints } from "../../adapters/types" @@ -6,13 +7,13 @@ import getV3Data from "./v3" const v2Endpoints: ChainEndpoints = { [CHAIN.ETHEREUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CqWfkgRsJRrQ5vWq9tkEr68F5nvbAg63ati5SVJQLjK8`, + sdk.graph.modifyEndpoint('CqWfkgRsJRrQ5vWq9tkEr68F5nvbAg63ati5SVJQLjK8'), [CHAIN.ARBITRUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3o6rxHKuXZdy8jFifV99gMUe8FaVUL8w8bDTNdc4zyYg`, + sdk.graph.modifyEndpoint('3o6rxHKuXZdy8jFifV99gMUe8FaVUL8w8bDTNdc4zyYg'), [CHAIN.FANTOM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5ahtXN7DVTwnPuDhWqgJWvEeAEP3JD7h2kD1Kpe67VuW`, + sdk.graph.modifyEndpoint('5ahtXN7DVTwnPuDhWqgJWvEeAEP3JD7h2kD1Kpe67VuW'), [CHAIN.OPTIMISM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8wMexS8BB1cXWYu2V8cPHURGXSRGDBhshnU9nTiSkXQ7`, + sdk.graph.modifyEndpoint('8wMexS8BB1cXWYu2V8cPHURGXSRGDBhshnU9nTiSkXQ7'), } const v2StartTimes: { [chain: string]: number } = { diff --git a/fees/quickswap.ts b/fees/quickswap.ts index 977c3da55b..006bb0dfd5 100644 --- a/fees/quickswap.ts +++ b/fees/quickswap.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { BreakdownAdapter, BaseAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; @@ -8,7 +9,7 @@ import { } from "../helpers/getUniSubgraph" const v2Endpoints = { - [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd`, + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd'), } const v2Graph = getGraphDimensions({ graphUrls: v2Endpoints, @@ -24,7 +25,7 @@ const v2Graph = getGraphDimensions({ }); const v3Endpoints = { - [CHAIN.POLYGON]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7`, + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7'), // [CHAIN.DOGECHAIN]: "https://graph-node.dogechain.dog/subgraphs/name/quickswap/dogechain-info", [CHAIN.POLYGON_ZKEVM]:"https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7" } diff --git a/fees/ramses-exchange-v1/bribes.ts b/fees/ramses-exchange-v1/bribes.ts index 24abab33c7..7df14464db 100644 --- a/fees/ramses-exchange-v1/bribes.ts +++ b/fees/ramses-exchange-v1/bribes.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request from "graphql-request"; import { Balances } from "@defillama/sdk"; @@ -10,7 +11,7 @@ interface IBribes { } export const fees_bribes = async (fromBlock: number, timestamp: number, balances: Balances) => { - const endpoint = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea`; + const endpoint = sdk.graph.modifyEndpoint('G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea'); const graphQuery = ` query GetBribes($fromBlock: Int!) { bribes( diff --git a/fees/ramses-exchange-v2/bribes.ts b/fees/ramses-exchange-v2/bribes.ts index 24abab33c7..7df14464db 100644 --- a/fees/ramses-exchange-v2/bribes.ts +++ b/fees/ramses-exchange-v2/bribes.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request from "graphql-request"; import { Balances } from "@defillama/sdk"; @@ -10,7 +11,7 @@ interface IBribes { } export const fees_bribes = async (fromBlock: number, timestamp: number, balances: Balances) => { - const endpoint = `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea`; + const endpoint = sdk.graph.modifyEndpoint('G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea'); const graphQuery = ` query GetBribes($fromBlock: Int!) { bribes( diff --git a/fees/ramses-exchange-v2/index.ts b/fees/ramses-exchange-v2/index.ts index 0b262744b2..00eab7052f 100644 --- a/fees/ramses-exchange-v2/index.ts +++ b/fees/ramses-exchange-v2/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter, FetchOptions } from "../../adapters/types"; import { ARBITRUM, CHAIN } from "../../helpers/chains"; import { fees_bribes } from './bribes'; @@ -28,7 +29,7 @@ const getBribes = async ({ fromTimestamp, toTimestamp, createBalances, getFromBl }; const v2Endpoints = { - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea'), }; const VOLUME_USD = "volumeUSD"; diff --git a/fees/solidly-v3.ts b/fees/solidly-v3.ts index 527d8f4811..6c59f60801 100644 --- a/fees/solidly-v3.ts +++ b/fees/solidly-v3.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"; @@ -16,7 +17,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t'), // [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-optimism", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-arbitrum", diff --git a/fees/substanceX/index.ts b/fees/substanceX/index.ts index ce36657cf5..09c1a84cdf 100644 --- a/fees/substanceX/index.ts +++ b/fees/substanceX/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, GraphQLClient } from "graphql-request"; @@ -11,7 +12,7 @@ const endpoints = { }; const blockNumberGraph = { - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/64DCU8nq48qdDABnobpDafsg7RF75Rx5soKrHiGA8mqp`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('64DCU8nq48qdDABnobpDafsg7RF75Rx5soKrHiGA8mqp'), [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta-blocks" } diff --git a/fees/thena-v1.ts b/fees/thena-v1.ts index 6f70d7b883..455a58a5c4 100644 --- a/fees/thena-v1.ts +++ b/fees/thena-v1.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { Adapter, FetchResultFees } from "../adapters/types"; import { getBlock } from "../helpers/getBlock"; @@ -11,7 +12,7 @@ import { CHAIN } from "../helpers/chains"; const STABLE_FEES = 0.0001; const VOLATILE_FEES = 0.002; const endpoint = - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/FKEt2N5VmSdEYcz7fYLPvvnyEUkReQ7rvmXzs6tiKCz1`; + sdk.graph.modifyEndpoint('FKEt2N5VmSdEYcz7fYLPvvnyEUkReQ7rvmXzs6tiKCz1'); const getFees = () => { return async (timestamp: number): Promise => { diff --git a/fees/thena-v3.ts b/fees/thena-v3.ts index ed4dc4131f..8aa7903695 100644 --- a/fees/thena-v3.ts +++ b/fees/thena-v3.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"; @@ -16,7 +17,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Hnjf3ipVMCkQze3jmHp8tpSMgPmtPnXBR38iM4ix1cLt` + [CHAIN.BSC]: sdk.graph.modifyEndpoint('Hnjf3ipVMCkQze3jmHp8tpSMgPmtPnXBR38iM4ix1cLt') } const fetch = (chain: Chain) => { diff --git a/fees/zyberswap.ts b/fees/zyberswap.ts index 00c9898c8b..ae683412f2 100644 --- a/fees/zyberswap.ts +++ b/fees/zyberswap.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { BreakdownAdapter, BaseAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; @@ -8,7 +9,7 @@ import { } from "../helpers/getUniSubgraph" const v2Endpoints = { - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R'), } const v2Graph = getGraphDimensions({ graphUrls: v2Endpoints, diff --git a/options/premia/index.ts b/options/premia/index.ts index 196f2d179a..e664006145 100644 --- a/options/premia/index.ts +++ b/options/premia/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains" import { BreakdownAdapter, ChainEndpoints } from "../../adapters/types" @@ -6,13 +7,13 @@ import getV3Data from "./v3" const v2Endpoints: ChainEndpoints = { [CHAIN.ETHEREUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CqWfkgRsJRrQ5vWq9tkEr68F5nvbAg63ati5SVJQLjK8`, + sdk.graph.modifyEndpoint('CqWfkgRsJRrQ5vWq9tkEr68F5nvbAg63ati5SVJQLjK8'), [CHAIN.ARBITRUM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/3o6rxHKuXZdy8jFifV99gMUe8FaVUL8w8bDTNdc4zyYg`, + sdk.graph.modifyEndpoint('3o6rxHKuXZdy8jFifV99gMUe8FaVUL8w8bDTNdc4zyYg'), [CHAIN.FANTOM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5ahtXN7DVTwnPuDhWqgJWvEeAEP3JD7h2kD1Kpe67VuW`, + sdk.graph.modifyEndpoint('5ahtXN7DVTwnPuDhWqgJWvEeAEP3JD7h2kD1Kpe67VuW'), [CHAIN.OPTIMISM]: - `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8wMexS8BB1cXWYu2V8cPHURGXSRGDBhshnU9nTiSkXQ7`, + sdk.graph.modifyEndpoint('8wMexS8BB1cXWYu2V8cPHURGXSRGDBhshnU9nTiSkXQ7'), } const v2StartTimes: { [chain: string]: number } = { diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index 907704f23f..df3848e389 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -9,26 +9,26 @@ import { getEnv } from "../../helpers/env"; const endpoints = { [CHAIN.BSC]: "https://proxy-worker.pancake-swap.workers.dev/bsc-exchange", - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9opY17WnEPD4REcC43yHycQthSeUMQE26wyoeMjZTLEx`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('9opY17WnEPD4REcC43yHycQthSeUMQE26wyoeMjZTLEx'), [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45376/exchange-v2-polygon-zkevm/version/latest", [CHAIN.ERA]: "https://api.studio.thegraph.com/query/45376/exchange-v2-zksync/version/latest", - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/EsL7geTRcA3LaLLM9EcMFzYbUgnvf8RixoEEGErrodB3`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('EsL7geTRcA3LaLLM9EcMFzYbUgnvf8RixoEEGErrodB3'), [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/pancakeswap/exhange-v2", [CHAIN.BASE]: "https://api.studio.thegraph.com/query/45376/exchange-v2-base/version/latest", [CHAIN.OP_BNB]: `${getEnv('PANCAKESWAP_OPBNB_SUBGRAPH')}/subgraphs/name/pancakeswap/exchange-v2` }; const stablesSwapEndpoints = { - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/C5EuiZwWkCge7edveeMcvDmdr7jjc1zG4vgn8uucLdfz`, - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/y7G5NUSq5ngsLH2jBGQajjxuLgW1bcqWiBqKmBk3MWM` + [CHAIN.BSC]: sdk.graph.modifyEndpoint('C5EuiZwWkCge7edveeMcvDmdr7jjc1zG4vgn8uucLdfz'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('y7G5NUSq5ngsLH2jBGQajjxuLgW1bcqWiBqKmBk3MWM') } const v3Endpoint = { - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/Hv1GncLY5docZoGtXjo4kwbTvxm3MAhVZqBZE4sUT9eZ`, - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/CJYGNhb7RvnhfBDjqpRnD3oxgyhibzc7fkAMa38YV3oS`, + [CHAIN.BSC]: sdk.graph.modifyEndpoint('Hv1GncLY5docZoGtXjo4kwbTvxm3MAhVZqBZE4sUT9eZ'), + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('CJYGNhb7RvnhfBDjqpRnD3oxgyhibzc7fkAMa38YV3oS'), [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45376/exchange-v3-polygon-zkevm/version/latest", [CHAIN.ERA]: "https://api.studio.thegraph.com/query/45376/exchange-v3-zksync/version/latest", - [CHAIN.ARBITRUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/251MHFNN1rwjErXD2efWMpNS73SANZN8Ua192zw6iXve`, + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('251MHFNN1rwjErXD2efWMpNS73SANZN8Ua192zw6iXve'), [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/pancakeswap/exchange-v3-linea", [CHAIN.BASE]: "https://api.studio.thegraph.com/query/45376/exchange-v3-base/version/latest", [CHAIN.OP_BNB]: `${getEnv('PANCAKESWAP_OPBNB_SUBGRAPH')}/subgraphs/name/pancakeswap/exchange-v3` diff --git a/protocols/smbswap/index.ts b/protocols/smbswap/index.ts index 06d87d7011..770fbf195b 100644 --- a/protocols/smbswap/index.ts +++ b/protocols/smbswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { BaseAdapter, BreakdownAdapter, DISABLED_ADAPTER_KEY, FetchOptions, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -6,15 +7,15 @@ import disabledAdapter from "../../helpers/disabledAdapter"; import { getGraphDimensions } from "../../helpers/getUniSubgraph" const endpoints = { - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/9BtGwsWynjj21VyrAtNfeKG5kMhcZ7Z12T53wo7PBTLj` + [CHAIN.BSC]: sdk.graph.modifyEndpoint('9BtGwsWynjj21VyrAtNfeKG5kMhcZ7Z12T53wo7PBTLj') }; const stablesSwapEndpoints = { - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8o2ZdXbsnHapQvT9Jh8NXLivnLSYVGQXsgVfBzfckLiW` + [CHAIN.BSC]: sdk.graph.modifyEndpoint('8o2ZdXbsnHapQvT9Jh8NXLivnLSYVGQXsgVfBzfckLiW') } const v3Endpoint = { - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/8XiGZs3G3dDL3YQJx7CsMGXdn3CUBBC9CVpCe1xrsSA7` + [CHAIN.BSC]: sdk.graph.modifyEndpoint('8XiGZs3G3dDL3YQJx7CsMGXdn3CUBBC9CVpCe1xrsSA7') } const VOLUME_USD = "volumeUSD"; diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 3db714e3b1..f79135beee 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -14,11 +14,11 @@ import { import request, { gql } from 'graphql-request'; const v1Endpoints = { - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/ESnjgAG9NjfmHypk4Huu4PVvz55fUwpyrRqHF21thoLJ`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('ESnjgAG9NjfmHypk4Huu4PVvz55fUwpyrRqHF21thoLJ'), }; const v2Endpoints = { - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/A3Np3RQbaBA6oKJgiwDJeo5T3zrYfGHPWFYayMwtNDum`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('A3Np3RQbaBA6oKJgiwDJeo5T3zrYfGHPWFYayMwtNDum'), }; const blacklisted = { @@ -65,14 +65,14 @@ const blacklisted = { const KEY = 'a265c39f5a123ab2d40b25dc352adc22' const v3Endpoints = { - [CHAIN.ETHEREUM]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/5AXe97hGLfjgFAc6Xvg6uDpsD5hqpxrxcma9MoxG7j7h`, + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('5AXe97hGLfjgFAc6Xvg6uDpsD5hqpxrxcma9MoxG7j7h'), [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optmism-regen", [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/id/QmZ5uwhnwsJXAQGYEF8qKPQ85iVhYAcVZcZAPfrF7ZNb9z", // [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/"+KEY+"/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm", - // [CHAIN.CELO]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4`, - [CHAIN.BSC]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/F85MNzUGYqgSHSHRGgeVMNsdnW1KtZSVgFULumXRZTw2`, + // [CHAIN.CELO]: sdk.graph.modifyEndpoint('ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('F85MNzUGYqgSHSHRGgeVMNsdnW1KtZSVgFULumXRZTw2'), // [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-avax", - [CHAIN.BASE]: `https://gateway-arbitrum.network.thegraph.com/api/${process.env.GRAPH_PROTOCOL}/subgraphs/id/43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG`, + [CHAIN.BASE]: sdk.graph.modifyEndpoint('43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG'), [CHAIN.ERA]: "https://api.thegraph.com/subgraphs/name/freakyfractal/uniswap-v3-zksync-era" }; From 7b64bc843bc18ae7ea8c970131481147500ebe04 Mon Sep 17 00:00:00 2001 From: slasher125 Date: Thu, 13 Jun 2024 11:16:07 +0400 Subject: [PATCH 0786/1590] more changesg --- aggregators/arcane-dex/index.ts | 3 ++- dexs/ArbitrumExchange/index.ts | 2 +- dexs/DerpDEX/index.ts | 3 ++- dexs/SubstanceX/index.ts | 2 +- dexs/alienfi/index.ts | 3 ++- dexs/apeswap/index.ts | 6 ++--- dexs/auraswap/index.ts | 3 ++- dexs/autoshark/index.ts | 3 ++- dexs/babyswap/index.ts | 3 ++- dexs/based-markets/index.ts | 3 ++- dexs/baseswap/index.ts | 2 +- dexs/beamex/index.ts | 3 ++- dexs/beamswap-v3/index.ts | 3 ++- dexs/beamswap/index.ts | 5 ++-- dexs/beethoven-x/index.ts | 5 ++-- dexs/blex/index.ts | 3 ++- dexs/blue-planet/index.ts | 3 ++- dexs/bxh/index.ts | 7 +++--- dexs/canary/index.ts | 3 ++- dexs/clipper/index.ts | 8 +++---- dexs/complus-network/index.ts | 5 ++-- dexs/cone/index.ts | 3 ++- dexs/covo-v2/index.ts | 3 ++- dexs/crescent-swap/index.ts | 3 ++- dexs/cryptoswap/index.ts | 3 ++- dexs/dao-swap/index.ts | 3 ++- dexs/dfyn/index.ts | 3 ++- dexs/dinosaur-eggs/index.ts | 3 ++- dexs/dpex/index.ts | 3 ++- dexs/el-dorado-exchange/index.ts | 5 ++-- dexs/empiredex/index.ts | 7 +++--- dexs/fxdx/index.ts | 5 ++-- dexs/gin-finance/index.ts | 3 ++- dexs/gravis/index.ts | 5 ++-- dexs/gravity-finance/index.ts | 3 ++- dexs/grizzly-trade/index.ts | 3 ++- dexs/hakuswap/index.ts | 3 ++- dexs/holdr/index.ts | 3 ++- dexs/hyperjump/index.ts | 3 ++- dexs/immortalx/index.ts | 3 ++- dexs/integral/index.ts | 5 ++-- dexs/jetswap/index.ts | 3 ++- dexs/knightswap-finance/index.ts | 5 ++-- dexs/koyo/index.ts | 3 ++- dexs/kyberswap/index.ts | 6 ++--- dexs/kyotoswap/index.ts | 3 ++- dexs/leonicornswap/index.ts | 3 ++- dexs/level-finance/index.ts | 5 ++-- .../level-finance-derivative/index.ts | 5 ++-- dexs/levinswap/index.ts | 3 ++- dexs/litx/index.ts | 3 ++- dexs/luaswap/index.ts | 3 ++- dexs/metavault-derivatives-v2/index.ts | 3 ++- dexs/metavault.trade/index.ts | 3 ++- dexs/metropolis/index.ts | 3 ++- dexs/mm-finance-arbitrum/index.ts | 3 ++- dexs/mm-stableswap-polygon/index.ts | 3 ++- dexs/mobius-money/index.ts | 3 ++- dexs/morphex-old/index.ts | 3 ++- dexs/morphex/index.ts | 5 ++-- dexs/mu-exchange/index.ts | 3 ++- dexs/mummy-finance/index.ts | 5 ++-- dexs/nomiswap/index.ts | 3 ++- dexs/onepunch/index.ts | 3 ++- dexs/oolongswap/index.ts | 3 ++- dexs/opx-finance/index.ts | 3 ++- dexs/padswap/index.ts | 7 +++--- dexs/palmswap/index.ts | 3 ++- dexs/pharaoh-exchange/index.ts | 3 ++- dexs/pinkswap/index.ts | 3 ++- dexs/platypus/index.ts | 3 ++- dexs/polycat/index.ts | 3 ++- dexs/protofi/index.ts | 3 ++- dexs/pyeswap/index.ts | 3 ++- dexs/radioshack/index.ts | 11 +++++---- dexs/retro/index.ts | 3 ++- dexs/rubicon/index.ts | 5 ++-- dexs/ryze/index.ts | 3 ++- dexs/saddle-finance/index.ts | 2 +- dexs/shell-protocol/constants.ts | 5 ++-- dexs/smartdex/index.ts | 3 ++- dexs/solarbeam/index.ts | 3 ++- dexs/solarflare/index.ts | 3 ++- dexs/solidly-v3/index.ts | 6 ++--- dexs/solidlydex/index.ts | 3 ++- dexs/soulswap/index.ts | 5 ++-- dexs/spacedex/index.ts | 5 ++-- dexs/spartacus-exchange/index.ts | 3 ++- dexs/spartan/index.ts | 3 ++- dexs/sphynx/index.ts | 3 ++- dexs/squadswap-v2/index.ts | 3 ++- dexs/squadswap-v3/index.ts | 3 ++- dexs/stellaswap-v3/index.ts | 3 ++- dexs/subzero-zswap/index.ts | 3 ++- dexs/sushiswap/classic.ts | 2 +- dexs/sushiswap/v3.ts | 23 ++++++++++--------- dexs/swaap/index.ts | 9 ++++---- dexs/swapr/index.ts | 2 +- dexs/swapsicle/index.ts | 3 ++- dexs/swych/index.ts | 3 ++- dexs/symmetric/index.ts | 5 ++-- dexs/synfutures-v1/index.ts | 9 ++++---- dexs/syrup-finance/index.ts | 3 ++- dexs/tegro/index.ts | 11 +++++---- dexs/tetu/index.ts | 3 ++- dexs/throne-v3/index.ts | 3 ++- dexs/titano-swych/index.ts | 3 ++- dexs/tokenlon/index.ts | 3 ++- dexs/traderjoe/index.ts | 2 +- dexs/ubeswap/index.ts | 3 ++- dexs/unidex/unidex-agg-perp/index.ts | 9 ++++---- dexs/vapordex/v1.ts | 3 ++- dexs/vela/index.ts | 5 ++-- dexs/velodrome/index.ts | 3 ++- dexs/voltage/index.ts | 3 ++- dexs/voodoo-trade/index.ts | 3 ++- dexs/wagmi/wagmi.ts | 4 ++-- dexs/wardenswap/index.ts | 11 +++++---- dexs/whaleswap/index.ts | 5 ++-- dexs/wigoswap/index.ts | 3 ++- dexs/wingswap/index.ts | 3 ++- dexs/woofi/index.ts | 13 ++++++----- dexs/yieldfields/index.ts | 3 ++- dexs/yoshi-exchange/index.ts | 7 +++--- dexs/zyberswap/index.ts | 4 ++-- fees/0vix.ts | 3 ++- fees/abracadabra.ts | 11 +++++---- fees/alchemix.ts | 7 +++--- fees/based-markets.ts | 3 ++- fees/beamex.ts | 3 ++- fees/beamswap-v3.ts | 3 ++- fees/beamswap.ts | 5 ++-- fees/betswirl/index.ts | 6 ++--- fees/clipper.ts | 8 +++---- fees/compound.ts | 3 ++- fees/convex.ts | 3 ++- fees/covo-finance.ts | 3 ++- fees/covo-v2.ts | 3 ++- fees/el-dorado-exchange.ts | 5 ++-- fees/frax-amo.ts | 5 ++-- fees/get-protocol.ts | 7 +++--- fees/grizzly-trade.ts | 3 ++- fees/immortalx/index.ts | 3 ++- fees/keller-cl/index.ts | 3 ++- fees/kyberswap.ts | 4 ++-- fees/kyotoswap.ts | 3 ++- fees/level-finance.ts | 5 ++-- fees/lido.ts | 3 ++- fees/liondex/index.ts | 2 +- fees/llamalend.ts | 3 ++- fees/makerdao.ts | 3 ++- fees/metavault-derivatives-v2/index.ts | 3 ++- fees/metavault.trade/index.ts | 3 ++- fees/moonwell-apollo.ts | 3 ++- fees/morphex-old.ts | 3 ++- fees/morphex.ts | 5 ++-- fees/mummy-finance.ts | 5 ++-- fees/opensea/index.ts | 3 ++- fees/optionBlitz/index.ts | 2 +- fees/pharaoh-exchange.ts | 3 ++- fees/predy-finance/index.ts | 7 +++--- fees/reserve/index.ts | 3 ++- fees/solidly-v3.ts | 6 ++--- fees/solidlydex.ts | 3 ++- fees/substanceX/index.ts | 2 +- fees/swych/index.ts | 3 ++- fees/thena-perp.ts | 3 ++- fees/valorem/constants.ts | 3 ++- fees/vela/index.ts | 3 ++- fees/velodrome/velodrome.ts | 3 ++- fees/voodoo-trade.ts | 3 ++- fees/wigoswap.ts | 3 ++- fees/zyberswap.ts | 4 ++-- options/optionBlitz/index.ts | 2 +- options/opyn/index.ts | 2 +- options/thales/getChainData.ts | 3 ++- options/thales/index.ts | 7 +++--- protocols/alita-finance/index.ts | 3 ++- protocols/uniswap/index.ts | 4 ++-- 179 files changed, 436 insertions(+), 281 deletions(-) diff --git a/aggregators/arcane-dex/index.ts b/aggregators/arcane-dex/index.ts index abbcce6c8e..b4ecf8a7b2 100644 --- a/aggregators/arcane-dex/index.ts +++ b/aggregators/arcane-dex/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import ADDRESSES from '../../helpers/coreAssets.json' import request from "graphql-request" @@ -38,7 +39,7 @@ const fetchVolume = async (timestamp: number): Promise => { } } ` - const result: IResponse = await request("https://api.thegraph.com/subgraphs/name/0xandee/arcanedex", query) + const result: IResponse = await request(sdk.graph.modifyEndpoint('BocqFij8hqUaDGmR1FpSuAYJmtqafZrFmBtHknP7kVd'), query) const ethAddress = "ethereum:" + ADDRESSES.null; const dailyVolumeInEth = Number(result.today.totalVolumeInEth) - Number(result.yesterday.totalVolumeInEth) diff --git a/dexs/ArbitrumExchange/index.ts b/dexs/ArbitrumExchange/index.ts index 61f35625cd..53c1042e64 100644 --- a/dexs/ArbitrumExchange/index.ts +++ b/dexs/ArbitrumExchange/index.ts @@ -11,7 +11,7 @@ import { } from "../../helpers/getUniSubgraph" const v2Endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/hekman-eth/arbidex", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('DsZsQrDp7VswGGm6PburYZ91AM3E9vwH45nwLCj3kXHA'), }; const v3Endpoints = { diff --git a/dexs/DerpDEX/index.ts b/dexs/DerpDEX/index.ts index b7dfda7c52..f4dc81e508 100644 --- a/dexs/DerpDEX/index.ts +++ b/dexs/DerpDEX/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; @@ -6,7 +7,7 @@ const endpoints = { [CHAIN.ERA]: "https://api.studio.thegraph.com/query/49147/derpdex-v3-amm/v0.0.10", [CHAIN.BASE]: - "https://api.thegraph.com/subgraphs/name/geckocoding/derpdex-amm-base", + sdk.graph.modifyEndpoint('6WLn1VLCtCYHNMPLT3AfKCCrKrq91qs1wCFcULWQUX96'), // [CHAIN.OP_BNB]: // "https://opbnb.subgraph.derpdex.com/subgraphs/name/geckocoding/derpdex-opbnb", }; diff --git a/dexs/SubstanceX/index.ts b/dexs/SubstanceX/index.ts index 0c9d6f0485..6f3ed1002c 100644 --- a/dexs/SubstanceX/index.ts +++ b/dexs/SubstanceX/index.ts @@ -7,7 +7,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/substanceexchangedevelop/coreprod", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('HETFHppem3dz1Yjjv53D7K98dm5t5TErgYAMPBFPHVpi'), [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta" }; diff --git a/dexs/alienfi/index.ts b/dexs/alienfi/index.ts index 86814554a7..2f95fcdea7 100644 --- a/dexs/alienfi/index.ts +++ b/dexs/alienfi/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/spearminttechnolgies/alien-exchange-test", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('E6A4mHKkMhiNeoiwDU8PME7btMt6xGGSHAZR6ccJsLJe'), }; const adapter = univ2Adapter(endpoints, { diff --git a/dexs/apeswap/index.ts b/dexs/apeswap/index.ts index 7f4b71a967..74b85b7614 100644 --- a/dexs/apeswap/index.ts +++ b/dexs/apeswap/index.ts @@ -4,9 +4,9 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ [CHAIN.BSC]: sdk.graph.modifyEndpoint('GH4Zt29mCApHwMfavNFw5ZdQDH3owc2Wq8DdU4hGPXYe'), - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/prof-sd/as-matic-graft", - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/apeswapfinance/ethereum-dex", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/prof-sd/arbitrum-dex" + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('EcLNjgAFADeXVopmhv3HY79fayzXRtK8R9imZNopRBpE'), + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('6J4fEY6pSRsqaqDbHn17HJY1viPzrGc1pjCqBKrrQXPC'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('AGyZUDiBcG9GkW9GX6vXPkuTj5kjf1S6aznEks6PVpi') // [CHAIN.TELOS]: "https://telos.apeswapgraphs.com/subgraphs/name/ape-swap/apeswap-graph" }, {}); diff --git a/dexs/auraswap/index.ts b/dexs/auraswap/index.ts index e892c438ef..f6b21388bd 100644 --- a/dexs/auraswap/index.ts +++ b/dexs/auraswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/auraswap-dex/exchange", + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('HimtcQxxRnR2Uj4pq7EZQ3nUnhz8f5UJu7uax6WuYCGt'), }, { factoriesName: "factories", dayData: "dayData", diff --git a/dexs/autoshark/index.ts b/dexs/autoshark/index.ts index bdd284318d..316336247f 100644 --- a/dexs/autoshark/index.ts +++ b/dexs/autoshark/index.ts @@ -1,6 +1,7 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/autoshark-finance/exchange-v1" + [CHAIN.BSC]: sdk.graph.modifyEndpoint('4NDG5dRjJX9BcWaHxKNwTZ1u4jwYP836QX4rgBdeGowD') }, {}); diff --git a/dexs/babyswap/index.ts b/dexs/babyswap/index.ts index 2da2b37f83..36c18f7de9 100644 --- a/dexs/babyswap/index.ts +++ b/dexs/babyswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/babyswapgraph/exchange4" + [CHAIN.BSC]: sdk.graph.modifyEndpoint('CfeVCTevsVCZrmsrYEcpVzPYgxGmMihASYirpWP7r228') }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData", diff --git a/dexs/based-markets/index.ts b/dexs/based-markets/index.ts index f462385898..5588d4c518 100644 --- a/dexs/based-markets/index.ts +++ b/dexs/based-markets/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -6,7 +7,7 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume const ONE_DAY_IN_SECONDS = 60 * 60 * 24 -const endpoint = "https://api.thegraph.com/subgraphs/name/symmiograph/symmioanalytics_base_8_2" +const endpoint = sdk.graph.modifyEndpoint('3E7EJF1zWHD3LHTKV5L6dspCno2ghxZ3WYe9MN7QVnEE') const query = gql` query stats($from: String!, $to: String!) { diff --git a/dexs/baseswap/index.ts b/dexs/baseswap/index.ts index 4341e6b87c..fa6b8f4175 100644 --- a/dexs/baseswap/index.ts +++ b/dexs/baseswap/index.ts @@ -12,7 +12,7 @@ import type { Chain } from "@defillama/sdk/build/general"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; const v2Endpoints: ChainEndpoints = { - [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/harleen-m/baseswap", + [CHAIN.BASE]: sdk.graph.modifyEndpoint('BWHCfpXMHFDx3u4E14hEwv4ST7SUyN89FKJ2RjzWKgA9'), }; const v3Endpoints = { [CHAIN.BASE]: sdk.graph.modifyEndpoint('39pzQzH5r3vmovd9fTs7rVDVFCj1xJye3dTMNHcSkSfL'), diff --git a/dexs/beamex/index.ts b/dexs/beamex/index.ts index 0844c75608..bb1b669106 100644 --- a/dexs/beamex/index.ts +++ b/dexs/beamex/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { gql, request } from "graphql-request"; import { BreakdownAdapter, ChainEndpoints, Fetch } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,7 +6,7 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume const endpointsBeamex: ChainEndpoints = { [CHAIN.MOONBEAN]: - "https://api.thegraph.com/subgraphs/name/flisko/stats-moonbeam", + sdk.graph.modifyEndpoint('4qhrYgYvHTHTjWN6NFr2UfBz1HaUAAgoqx52nN2MyG3K'), }; const historicalDataSwap = gql` query get_volume($period: String!, $id: String!) { diff --git a/dexs/beamswap-v3/index.ts b/dexs/beamswap-v3/index.ts index 7fd34e6a12..08d290d39e 100644 --- a/dexs/beamswap-v3/index.ts +++ b/dexs/beamswap-v3/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; @@ -9,7 +10,7 @@ import { const endpointV3 = { [CHAIN.MOONBEAM]: - "https://api.thegraph.com/subgraphs/name/beamswap/beamswap-v3", + sdk.graph.modifyEndpoint('2YnTZfQmenjvJ3bihewLGgAKnyqjrMWrStux8ZFE7ee6'), }; const VOLUME_USD = "volumeUSD"; const v3Graphs = getGraphDimensions({ diff --git a/dexs/beamswap/index.ts b/dexs/beamswap/index.ts index 715308ab6a..bbcd4fbc74 100644 --- a/dexs/beamswap/index.ts +++ b/dexs/beamswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { BreakdownAdapter, ChainEndpoints } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; @@ -6,7 +7,7 @@ import { getGraphDimensions } from "../../helpers/getUniSubgraph"; const endpoints: ChainEndpoints = { [CHAIN.MOONBEAN]: - "https://api.thegraph.com/subgraphs/name/beamswap/beamswap-dex-v2", + sdk.graph.modifyEndpoint('9CwTvN5R8sztZSBZqbDZWcHZjM41RRiz63QmRMsJBn6X'), }; @@ -35,7 +36,7 @@ const graphs = getGraphDimensions({ const v1graphs = getGraphDimensions({ graphUrls: { [CHAIN.MOONBEAN]: - "https://api.thegraph.com/subgraphs/name/beamswap/beamswap-stable-amm", + sdk.graph.modifyEndpoint('3tyEjzmxReXkLb9CB8LCBSDWWrV8dxNCzbcMHxU9n7nJ'), }, totalVolume: { factory: "tradeVolumes", diff --git a/dexs/beethoven-x/index.ts b/dexs/beethoven-x/index.ts index 7368b07523..9d37b1424b 100644 --- a/dexs/beethoven-x/index.ts +++ b/dexs/beethoven-x/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { ChainEndpoints, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; @@ -5,8 +6,8 @@ import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import request, { gql } from "graphql-request"; const endpoints: ChainEndpoints = { - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-optimism", + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('4XKeW12D2RAhqefPYT3MLoT64p1JnT5TBLnYaNeSLA8k'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('F5jeL2nMXZt5LU6kSway7Vi2PTUcqDbw1gMQEbrmiVdJ'), }; interface IPool { diff --git a/dexs/blex/index.ts b/dexs/blex/index.ts index 4ff51e9cb4..99e352c67c 100644 --- a/dexs/blex/index.ts +++ b/dexs/blex/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/blex-dex/arbitrum_42161", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('FZz1rRe9kEd3FG6ZiX2tdoryxYiSFH4RnzKjMwny3mFH'), } const allData=gql` diff --git a/dexs/blue-planet/index.ts b/dexs/blue-planet/index.ts index 3d324e9120..ff8aafe6c7 100644 --- a/dexs/blue-planet/index.ts +++ b/dexs/blue-planet/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/makemyideatech/planet-finance" + [CHAIN.BSC]: sdk.graph.modifyEndpoint('5Jo2jtiEVnVhSxHqzp24RUAjJrfeFPaZExxVwubTVBQ3') }, { factoriesName: "planetFinanceFactories", dayData: "planetFinanceDayData" diff --git a/dexs/bxh/index.ts b/dexs/bxh/index.ts index 1b312395c7..e2c1929381 100644 --- a/dexs/bxh/index.ts +++ b/dexs/bxh/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/privatelabs-chainx/bxhbnb", - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/privatelabs-chainx/bxheth", - // [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/privatelabs-chainx/bxhavax", not current daily volume + [CHAIN.BSC]: sdk.graph.modifyEndpoint('HvbSoSSDp99Pe9U7gjDhmXUzTbAKTcj77SnV3XKLVChn'), + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('9vZWBdQwCE7oi29YzBrQND5BLnS2iqPhosdG8jr6Rp9R'), + // [CHAIN.AVAX]: sdk.graph.modifyEndpoint('6dJhWGdrAgYXzky2EFFYw8GZsmZbrwdPMTq69CEqJEFD'), not current daily volume }, {}); adapters.adapter.bsc.start = 1627172051; diff --git a/dexs/canary/index.ts b/dexs/canary/index.ts index 4272a3c5fd..fe27ae7305 100644 --- a/dexs/canary/index.ts +++ b/dexs/canary/index.ts @@ -1,7 +1,8 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - "avax": "https://api.thegraph.com/subgraphs/name/canarydeveloper/canarydex" + "avax": sdk.graph.modifyEndpoint('An3x5Mz4YXEERomXYC4AhGgNhRthPFXNYDnrMCjrAJe') }, { factoriesName: "canaryFactories", dayData: "canaryDayData", diff --git a/dexs/clipper/index.ts b/dexs/clipper/index.ts index 27a2b15706..7457ac5325 100644 --- a/dexs/clipper/index.ts +++ b/dexs/clipper/index.ts @@ -6,10 +6,10 @@ const { getChainVolume, } = require("../../helpers/getUniSubgraphVolume"); const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-mainnet", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-optimism", - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-polygon", - [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-moonbeam", + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('2BhN8mygHMmRkceMmod7CEEsGkcxh91ExRbEfRVkpVGM'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('Cu6atAfi6uR9mLMEBBjkhKSUUXHCobbB83ctdooexQ9f'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('Brmf2gRdpLFsEF6YjSAMVrXqSfbhsaaWaWzdCYjE7iYY'), + [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint('8zRk4WV9vUU79is2tYGWq9GKh97f93LsZ8V9wy1jSMvA'), [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W'), }; diff --git a/dexs/complus-network/index.ts b/dexs/complus-network/index.ts index 6325b4333b..6470b501d9 100644 --- a/dexs/complus-network/index.ts +++ b/dexs/complus-network/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.AVAX]: 'https://api.thegraph.com/subgraphs/name/complusnetwork/subgraph-ava', - [CHAIN.BSC]: 'https://api.thegraph.com/subgraphs/name/complusnetwork/bsc-subgraph', + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('JAcTKhMyEmiz467QXnt9W1cJXBpZqVmVJbPycEJ7f7nR'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('C4gWYKo4aKh993B1GNVuoeApQGj18dJShm2wMf6viihH'), // [CHAIN.POLYGON]: 'https://api.thegraph.com/subgraphs/name/complusnetwork/subgraph-matic', // [CHAIN.HECO]: 'https://hg2.bitcv.net/subgraphs/name/complusnetwork/subgraph-heco' }, { diff --git a/dexs/cone/index.ts b/dexs/cone/index.ts index 715fe1c32c..9dd2a6e443 100644 --- a/dexs/cone/index.ts +++ b/dexs/cone/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const endpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/cone-exchange/cone", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('CeXrZ218JFm5S7iD6sGusqSSQgyFM6wuYoUk7iVygq1c'), }; const adapter = univ2Adapter(endpoints, {}); adapter.adapter.bsc.start = 1626677527; diff --git a/dexs/covo-v2/index.ts b/dexs/covo-v2/index.ts index 1220462f9a..b307b00849 100644 --- a/dexs/covo-v2/index.ts +++ b/dexs/covo-v2/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { BreakdownAdapter, DISABLED_ADAPTER_KEY, Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,7 +6,7 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume import disabledAdapter from "../../helpers/disabledAdapter"; const endpoints: { [key: string]: string } = { - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/defi-techz/covo-v2-2", + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('GmEspRRKwqTj7tfazuAxwNwqeXajJq4NnZoGaiNyx3tq'), } const historicalDataSwap = gql` diff --git a/dexs/crescent-swap/index.ts b/dexs/crescent-swap/index.ts index 200a407275..9529856e85 100644 --- a/dexs/crescent-swap/index.ts +++ b/dexs/crescent-swap/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/hangpiece/crescentswap-arb", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('8kFH5we1wSUT75VDWWyCB2Nqivawf6QaCE8L5k56nrfy'), }; const graphs = getChainVolume({ diff --git a/dexs/cryptoswap/index.ts b/dexs/cryptoswap/index.ts index de8f4963ee..925b5dc7f7 100644 --- a/dexs/cryptoswap/index.ts +++ b/dexs/cryptoswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; const { getChainVolume, DEFAULT_TOTAL_VOLUME_FIELD, @@ -9,7 +10,7 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/cryptolover705/cryptoswap", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('46UXg1gyUFk7q8WrmNEMp7qoc2paiDqy5HpMvF4UQBze'), }; const DAILY_VOLUME_FACTORY = "cstdayData"; diff --git a/dexs/dao-swap/index.ts b/dexs/dao-swap/index.ts index f78bdcaf51..934e9ab844 100644 --- a/dexs/dao-swap/index.ts +++ b/dexs/dao-swap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adpters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/daomaker/bsc-amm" + [CHAIN.BSC]: sdk.graph.modifyEndpoint('7APt1aJ4g5VJqcKF47if3kDjsNSG8mHPGv9YSt8Qf39i') }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData", diff --git a/dexs/dfyn/index.ts b/dexs/dfyn/index.ts index d2e680ffb1..ccf9181bb8 100644 --- a/dexs/dfyn/index.ts +++ b/dexs/dfyn/index.ts @@ -1,7 +1,8 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; // Not complete! Missing older versions export default univ2Adapter({ - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/ss-sonic/dfyn-v4", + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('Dizc6HBJZWB276wcyycYMxN8FMKeKb7RpSvwu83F4gTc'), }, {}); \ No newline at end of file diff --git a/dexs/dinosaur-eggs/index.ts b/dexs/dinosaur-eggs/index.ts index 6715a45d2a..9577be2031 100644 --- a/dexs/dinosaur-eggs/index.ts +++ b/dexs/dinosaur-eggs/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/dinosaur-eggs/swap" + [CHAIN.BSC]: sdk.graph.modifyEndpoint('63auEwyBju1rZWUNZ32k2qwrBQZSEU4XetvKh3ZCwHLA') }, { factoriesName: "swapFactories", dayData: "swapDayData" diff --git a/dexs/dpex/index.ts b/dexs/dpex/index.ts index 89cd0f967a..063985de84 100644 --- a/dexs/dpex/index.ts +++ b/dexs/dpex/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,7 +6,7 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume import customBackfill from "../../helpers/customBackfill"; const endpoints: { [key: string]: string } = { - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/dpex-io/core", + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('2k6i4iv8DHfp7ZdimWZvc4jGY3NR5oPeAaDx43zszuUj'), } const historicalDataSwap = gql` diff --git a/dexs/el-dorado-exchange/index.ts b/dexs/el-dorado-exchange/index.ts index 2b4192b806..79da73b86d 100644 --- a/dexs/el-dorado-exchange/index.ts +++ b/dexs/el-dorado-exchange/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import {BreakdownAdapter, DISABLED_ADAPTER_KEY, Fetch, SimpleAdapter} from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,8 +6,8 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume import disabledAdapter from "../../helpers/disabledAdapter"; const endpoints: { [key: string]: string } = { - // [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/metaverseblock/ede_stats_elpall_test", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/metaverseblock/ede_state_elp1_arbitrimone", + // [CHAIN.BSC]: sdk.graph.modifyEndpoint('FiegiatdkorjPCvK72UyHvmJHvWtS3oQS6zwnR94Xe7c'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('G3wquxtaw68uX5GAZ7XBPWK8Fa7Buf66Y27uT8erqQZ4'), } const historicalDataSwap = gql` diff --git a/dexs/empiredex/index.ts b/dexs/empiredex/index.ts index 3bc4ec8bce..a795b4f047 100644 --- a/dexs/empiredex/index.ts +++ b/dexs/empiredex/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/trnhgquan/empiredexbsc", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('6YsqBAMACpzsx2GktPSfCcfAs1C4WZzqcUk1mBWwFxtN'), [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/zikyfranky/empire-xdai", - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/zikyfranky/empire-polygon", - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/zikyfranky/empire-subgraph-avax", + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('57ZPKjowRMAcH4j4pTz6Aig2wm4LyjUStuUiETVRTmdF'), + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('BpubdJRtMZpkrodAbbkm43m8d3AeT5tBkTxShb6Eu8hc'), }, { }); diff --git a/dexs/fxdx/index.ts b/dexs/fxdx/index.ts index 66af991d6f..0dc0571eb8 100644 --- a/dexs/fxdx/index.ts +++ b/dexs/fxdx/index.ts @@ -1,11 +1,12 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - // [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/danielsmith0630/fxdx-optimism-stats", - [CHAIN.BASE]: "https://api.thegraph.com/subgraphs/name/danielsmith0630/fxdx-base-stats" + // [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('Ey9sNQbCAa12m5f89moJrjPxXb5X7rUnGujsfbnSAs48'), + [CHAIN.BASE]: sdk.graph.modifyEndpoint('61tpLfrdoEor2ep2WctQSpGDSMetmMBc3Bb7zz7iyqsH') } const historicalDataSwap = gql` diff --git a/dexs/gin-finance/index.ts b/dexs/gin-finance/index.ts index 190adabb61..55c7f22ed9 100644 --- a/dexs/gin-finance/index.ts +++ b/dexs/gin-finance/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BOBA]: "https://api.thegraph.com/subgraphs/name/gindev2/gin-subgraph" + [CHAIN.BOBA]: sdk.graph.modifyEndpoint('BicQZ5AsMXGPC1YZbm2SW3F2EqMA6zNSJiH6g338Hnrv') }, { }); diff --git a/dexs/gravis/index.ts b/dexs/gravis/index.ts index 05e791244d..4b8dc23906 100644 --- a/dexs/gravis/index.ts +++ b/dexs/gravis/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/darth-crypto/gravis-finance", - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/vkolerts/bsc-main" + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('YyFnnb7YkVbrxti9TP7pdUdCbY7fD58LxTAYdjRmTwi'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('CLMjk3GaCwWCXqz8jFR28YnazCxgXxQmg976JxJoeGtD') }, { }); diff --git a/dexs/gravity-finance/index.ts b/dexs/gravity-finance/index.ts index cdf8f9323a..7a4cdb1e8e 100644 --- a/dexs/gravity-finance/index.ts +++ b/dexs/gravity-finance/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/agelesszeal/gravity-analytics", + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('82hBGNdZXvp3JbJbHvRptFanP4q5RszxYWndRact8qzD'), }, { }); diff --git a/dexs/grizzly-trade/index.ts b/dexs/grizzly-trade/index.ts index 8807cc3a67..5f74fbc3ec 100644 --- a/dexs/grizzly-trade/index.ts +++ b/dexs/grizzly-trade/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { BreakdownAdapter, DISABLED_ADAPTER_KEY, Fetch } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,7 +6,7 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume import disabledAdapter from "../../helpers/disabledAdapter"; const endpoints: { [key: string]: string } = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/metavault-trade/grizzly-bnb-subgraph", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('3CUU9roJ9PsMdijcBdaCBRHhTUBobLeDLyMW4QF2XNmn'), } const historicalDataSwap = gql` diff --git a/dexs/hakuswap/index.ts b/dexs/hakuswap/index.ts index 8d5a09ef47..2e613422b7 100644 --- a/dexs/hakuswap/index.ts +++ b/dexs/hakuswap/index.ts @@ -1,7 +1,8 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/smartcookie0501/hakuswap-subgraph" + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('7TYvKnsZnaihZ1x5V8LgMRuvv7N8VuaM21GVRXPK6WR6') }, { }); diff --git a/dexs/holdr/index.ts b/dexs/holdr/index.ts index 87f32a937a..52c79d0fb7 100644 --- a/dexs/holdr/index.ts +++ b/dexs/holdr/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { ChainEndpoints, SimpleAdapter } from "../../adapters/types"; import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; @@ -5,7 +6,7 @@ import { Chain } from "@defillama/sdk/build/general"; import customBackfill from "../../helpers/customBackfill"; const endpoints: ChainEndpoints = { - [CHAIN.AURORA]: "https://api.thegraph.com/subgraphs/name/kyzooghost/balancer_aurora_fork", + [CHAIN.AURORA]: sdk.graph.modifyEndpoint('5Yn3qgjM8y6KnN1jZd8TjcDLPRioVpiTC46XYgEwK56S'), }; const graphParams = { diff --git a/dexs/hyperjump/index.ts b/dexs/hyperjump/index.ts index 9cb50847cd..71647baf14 100644 --- a/dexs/hyperjump/index.ts +++ b/dexs/hyperjump/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/angry-mech/hyperjump-bsc-main", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('5fWfhux2ZJbU33j7Z1sn6m4vj7N7vapTj9hBKeZ5uyaU'), }; const adapter = univ2Adapter(endpoints, { diff --git a/dexs/immortalx/index.ts b/dexs/immortalx/index.ts index 2a030470e9..f0a3d5930b 100644 --- a/dexs/immortalx/index.ts +++ b/dexs/immortalx/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; import { Adapter, FetchResultVolume } from "../../adapters/types"; @@ -18,7 +19,7 @@ type IURL = { }; const endpoints: IURL = { - [CHAIN.CELO]: "https://api.thegraph.com/subgraphs/name/immortalx-io/immortalx", + [CHAIN.CELO]: sdk.graph.modifyEndpoint('DGN3dMffNnXZRAHFyCAq3csJbe2o7g9Jdg2XHe2mzVdG'), }; const fetch = (chain: Chain) => { diff --git a/dexs/integral/index.ts b/dexs/integral/index.ts index 0cdcf0eaa7..9e1b3410d3 100644 --- a/dexs/integral/index.ts +++ b/dexs/integral/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { BaseAdapter, SimpleAdapter } from "../../adapters/types"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { @@ -14,9 +15,9 @@ export const chains = [ ]; export const endpoints = { [CHAIN.ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/integralhq/integral-size", + sdk.graph.modifyEndpoint('ANd5QJuYtyfngmXvBMu9kZAv935vhcqp4xAGBkmCADN3'), [CHAIN.ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/integralhq/integral-size-arbitrum", + sdk.graph.modifyEndpoint('HXeVedRK7VgogXwbK5Sc4mjyLkhBAS5akskRvbSYnkHU'), }; const graphs = getChainVolume({ diff --git a/dexs/jetswap/index.ts b/dexs/jetswap/index.ts index 9c2f228277..152edd129e 100644 --- a/dexs/jetswap/index.ts +++ b/dexs/jetswap/index.ts @@ -1,6 +1,7 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/smartcookie0501/jetswap-subgraph" + [CHAIN.BSC]: sdk.graph.modifyEndpoint('5PoznNdqBAVSxsGv7MQMrVabVrYBbLobrFpWEnNcC6Xw') }, {}); diff --git a/dexs/knightswap-finance/index.ts b/dexs/knightswap-finance/index.ts index 97fa01d267..10f85113cf 100644 --- a/dexs/knightswap-finance/index.ts +++ b/dexs/knightswap-finance/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const { @@ -5,8 +6,8 @@ const { } = require("../../helpers/getUniSubgraphVolume"); const endpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/shahzeb8285/knight-new-graph", - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/shahzeb8285/thedarkknightanalytics", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('GknVfnDT8h7aFsdS6Y6CeWTx3bHFnUnGxNgAUSSCQPz1'), + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('GhBfNocNJJCjS4norsp6Cpiw2vJompiURM9frjgsnVdW'), }; const v2Graph = getChainVolume({ diff --git a/dexs/koyo/index.ts b/dexs/koyo/index.ts index fa6b8d074a..78e9f90d32 100644 --- a/dexs/koyo/index.ts +++ b/dexs/koyo/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; @@ -5,7 +6,7 @@ import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.BOBA]: - "https://api.thegraph.com/subgraphs/name/koyo-finance/exchange-subgraph-boba", + sdk.graph.modifyEndpoint('3CdxAdbTrVDhM6WQCr5TN4y4zxAodMAmcZwFFWRnEKz3'), }; const graphs = getChainVolume({ diff --git a/dexs/kyberswap/index.ts b/dexs/kyberswap/index.ts index 174f292c4a..81d8d00821 100644 --- a/dexs/kyberswap/index.ts +++ b/dexs/kyberswap/index.ts @@ -55,7 +55,7 @@ const elasticEndpoints = elasticChains.reduce((acc, chain)=>({ ...acc, }), { //cronos: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-cronos", // missing -> almost no volume and stale - ethereum: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-mainnet", + ethereum: sdk.graph.modifyEndpoint('4U9PxDR4asVvfXyoVy18fhuj6NHnQhLzZkjZ5Bmuc5xk'), arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum", polygon: sdk.graph.modifyEndpoint('8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT'), [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", @@ -96,7 +96,7 @@ interface IPoolDayData { const optimismElastic = async (timestamp: number) => { const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - const url = "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-optimism"; + const url = sdk.graph.modifyEndpoint('3Kpd8i7U94pTz3Mgdb8hyvT5o26fpwT7SUHAbTa6JzfZ'); const blacklisted = [ '0xa00e3a3511aac35ca78530c85007afcd31753819', ADDRESSES.optimism.sUSD, @@ -142,7 +142,7 @@ const optimismElastic = async (timestamp: number) => { const ethereumElasicVolume = async (timestamp: number) => { const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - const url = "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-mainnet"; + const url = sdk.graph.modifyEndpoint('4U9PxDR4asVvfXyoVy18fhuj6NHnQhLzZkjZ5Bmuc5xk'); const blacklisted = [ '0xdefa4e8a7bcba345f687a2f1456f5edd9ce97202', diff --git a/dexs/kyotoswap/index.ts b/dexs/kyotoswap/index.ts index b9d753b521..7651f9c0d6 100644 --- a/dexs/kyotoswap/index.ts +++ b/dexs/kyotoswap/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter( { [CHAIN.BSC]: - "https://api.thegraph.com/subgraphs/name/miguelangelrm/kyotoswap-exchange", + sdk.graph.modifyEndpoint('B1VWKexyptT1ixDdHsxj3EJnAxvuje7ANT39rnfq9rRG'), }, { factoriesName: "pancakeFactories", diff --git a/dexs/leonicornswap/index.ts b/dexs/leonicornswap/index.ts index 71ae184e1b..a59dfe1738 100644 --- a/dexs/leonicornswap/index.ts +++ b/dexs/leonicornswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/leonicornswap/exchange" + [CHAIN.BSC]: sdk.graph.modifyEndpoint('ttjEWD8FZJecTZrHHhtiYnQtWhSmgtqqABU4pgAttaC') }, { factoriesName: "leonicornFactories", dayData: "leonicornDayData", diff --git a/dexs/level-finance/index.ts b/dexs/level-finance/index.ts index b005f08690..2da3b659cf 100644 --- a/dexs/level-finance/index.ts +++ b/dexs/level-finance/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,8 +6,8 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume import { adapter_derivative } from "./level-finance-derivative"; const endpoints: { [key: string]: string } = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/level-fi/levelfinanceanalytics", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/level-fi/analytics-arb", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('AFaRssJTqNReTtU2XdTGPhN38YVPNBc7faMNKA1mU54h'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('AV58XWaZUZPJ2w1x2wYmGEivVZmDojGW3fAYggUAujtD'), } const historicalDataSwap = gql` diff --git a/dexs/level-finance/level-finance-derivative/index.ts b/dexs/level-finance/level-finance-derivative/index.ts index 8452b1b111..4e90f9d57a 100644 --- a/dexs/level-finance/level-finance-derivative/index.ts +++ b/dexs/level-finance/level-finance-derivative/index.ts @@ -1,11 +1,12 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { Fetch, SimpleAdapter } from "../../../adapters/types"; import { CHAIN } from "../../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/level-fi/levelfinanceanalytics", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/level-fi/analytics-arb", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('AFaRssJTqNReTtU2XdTGPhN38YVPNBc7faMNKA1mU54h'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('AV58XWaZUZPJ2w1x2wYmGEivVZmDojGW3fAYggUAujtD'), } const historicalDataDerivatives = gql` diff --git a/dexs/levinswap/index.ts b/dexs/levinswap/index.ts index deb16b80fd..50d1ec552d 100644 --- a/dexs/levinswap/index.ts +++ b/dexs/levinswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/levinswap/uniswap-v2" + [CHAIN.XDAI]: sdk.graph.modifyEndpoint('2gNP6y1kTvg6aAhus8DU8DyGS1cn5TvGD3S6VjjXCZZC') }, {}); adapters.adapter.xdai.start = 1610767793; diff --git a/dexs/litx/index.ts b/dexs/litx/index.ts index b40364adcb..633f4efc1b 100644 --- a/dexs/litx/index.ts +++ b/dexs/litx/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { DISABLED_ADAPTER_KEY } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/iliaazhel/litx-v1-1", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('4b9bf8yyMfQBkjD94wmxFc4zf9ewhhQHhHfPqJrsSiq1'), [CHAIN.PULSECHAIN]: "https://api.algebra.finance/pulse-graph/subgraphs/name/cryptoalgebra/litx-analytics" }, { factoriesName: "factories", diff --git a/dexs/luaswap/index.ts b/dexs/luaswap/index.ts index 330b972744..0236b15fb0 100644 --- a/dexs/luaswap/index.ts +++ b/dexs/luaswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; // process.env.NODE_TLS_REJECT_UNAUTHORIZED='0' // TODO: disable TLS check only for this adapter, above line disables it for all adapters which is not ok export default univ2Adapter({ // [CHAIN.TOMOCHAIN]: "https://api.luaswap.org/subgraphs/name/phucngh/Luaswap3", - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/phucngh/luaswap" + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('DuiyRWD7SNu5rMGtM1MMP25VN57NcRGynCLJR7pah2E4') }, {}); diff --git a/dexs/metavault-derivatives-v2/index.ts b/dexs/metavault-derivatives-v2/index.ts index 88036e706b..2741ed774f 100644 --- a/dexs/metavault-derivatives-v2/index.ts +++ b/dexs/metavault-derivatives-v2/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter, FetchResultVolume, @@ -12,7 +13,7 @@ const endpoints: ChainEndpoints = { [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/55804/linea-trade/version/latest", [CHAIN.POLYGON]: - "https://api.thegraph.com/subgraphs/name/sdcrypt0/polygon-trade", + sdk.graph.modifyEndpoint('GAvL1WKMAVDdnSk96qvmSCMwL6pxfhAVYkQw6AgZU3td'), }; interface IReferralRecord { diff --git a/dexs/metavault.trade/index.ts b/dexs/metavault.trade/index.ts index 943a9fcc34..e2c0061d10 100644 --- a/dexs/metavault.trade/index.ts +++ b/dexs/metavault.trade/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/sdcrypt0/metavault-mvx-subgraph", + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('BMn9XsegbLxw9TL6uyw5NntoiGRyMqRpF2vShkKzusJ3'), } const historicalData = gql` diff --git a/dexs/metropolis/index.ts b/dexs/metropolis/index.ts index 3f24a1dd6b..754565adde 100644 --- a/dexs/metropolis/index.ts +++ b/dexs/metropolis/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; import { DISABLED_ADAPTER_KEY } from "../../adapters/types"; const endpoints = { - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/0xhans1/metropolis-v2", + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('C9pjtfL9qqoHoCbLenWiztCBdT2YoG6rk3bHLaCMBS3H'), }; const adapter = univ2Adapter(endpoints, { diff --git a/dexs/mm-finance-arbitrum/index.ts b/dexs/mm-finance-arbitrum/index.ts index fe45da6eea..d886400e61 100644 --- a/dexs/mm-finance-arbitrum/index.ts +++ b/dexs/mm-finance-arbitrum/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/polymmfinance/arbitrum-exchange", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('7DHMSRfftzCDjRVYSGTt65PagbTF61ACg4XUCP7JQKJG'), }; const adapter = univ2Adapter(endpoints, { diff --git a/dexs/mm-stableswap-polygon/index.ts b/dexs/mm-stableswap-polygon/index.ts index 424c0a8bfd..64e58b781b 100644 --- a/dexs/mm-stableswap-polygon/index.ts +++ b/dexs/mm-stableswap-polygon/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; export default univ2Adapter({ - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/polymmfinance/exchang" + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('HTJcrXUUtrVFKyNHZH99ywRx3TQm5ChSFVbn3oBiqGq6') }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData" diff --git a/dexs/mobius-money/index.ts b/dexs/mobius-money/index.ts index b82ecc5107..36935cadfd 100644 --- a/dexs/mobius-money/index.ts +++ b/dexs/mobius-money/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; @@ -5,7 +6,7 @@ import { Chain } from "@defillama/sdk/build/general"; import customBackfill from "../../helpers/customBackfill"; const endpoints = { - [CHAIN.CELO]: "https://api.thegraph.com/subgraphs/name/d-mooers/mobius", + [CHAIN.CELO]: sdk.graph.modifyEndpoint('CcSNm5hBSGYk3WT1faPGDKBxHCdHkyyXYFujHC9DPtmY'), }; const graphs = getChainVolume({ diff --git a/dexs/morphex-old/index.ts b/dexs/morphex-old/index.ts index 147ea673fb..7567b3a163 100644 --- a/dexs/morphex-old/index.ts +++ b/dexs/morphex-old/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { BreakdownAdapter, DISABLED_ADAPTER_KEY, Fetch } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -6,7 +7,7 @@ import disabledAdapter from "../../helpers/disabledAdapter"; const endpoints: { [key: string]: string } = { [CHAIN.FANTOM]: - "https://api.thegraph.com/subgraphs/name/morphex-labs/morphex-fantom-stats", + sdk.graph.modifyEndpoint('EH6ZfhnYQd7Kv1SdnUAp96vMUWKCTfPrctwududH5cmG'), }; const historicalDataSwap = gql` diff --git a/dexs/morphex/index.ts b/dexs/morphex/index.ts index 6e14a4b88b..650e1f7d59 100644 --- a/dexs/morphex/index.ts +++ b/dexs/morphex/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { BreakdownAdapter, Fetch } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,9 +6,9 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume const endpoints: { [key: string]: string } = { [CHAIN.FANTOM]: - "https://api.thegraph.com/subgraphs/name/morphex-labs/morphex-fantom-stats-new", + sdk.graph.modifyEndpoint('6GjHurahqYLUUYkqfCgrWfcH2pfTEFPtPvCPvQ1BHLed'), [CHAIN.BSC]: - "https://api.thegraph.com/subgraphs/name/morphex-labs/morphex-bsc-stats", + sdk.graph.modifyEndpoint('4Zdyx9D4oYLGSm1C26jpTU7Ho7ecswEuTPg3WANGkMTx'), }; const historicalDataSwap = gql` diff --git a/dexs/mu-exchange/index.ts b/dexs/mu-exchange/index.ts index 9d57e03418..9f56912769 100644 --- a/dexs/mu-exchange/index.ts +++ b/dexs/mu-exchange/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from 'graphql-request'; import { Fetch, SimpleAdapter } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains'; @@ -6,7 +7,7 @@ import { } from '../../helpers/getUniSubgraphVolume'; const ENDPOINTS: { [key: string]: string } = { - [CHAIN.XDAI]: 'https://api.thegraph.com/subgraphs/name/bryant11112/mu-beta', + [CHAIN.XDAI]: sdk.graph.modifyEndpoint('7LkMoW2UtUVauMkexF75bowQp2DE6bNB3jUXySYtBp9x'), }; const SDAI_DECIMALS: { [key: string]: number } = { [CHAIN.XDAI]: 18, diff --git a/dexs/mummy-finance/index.ts b/dexs/mummy-finance/index.ts index 51ebd2f824..62cb66799f 100644 --- a/dexs/mummy-finance/index.ts +++ b/dexs/mummy-finance/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,8 +6,8 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume import customBackfill from "../../helpers/customBackfill"; const endpoints: { [key: string]: string } = { - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/mummyfinance/fantom-stats-v2", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/mummyfinance/op-stats", + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('8LdLE9Aan39FQCcHX3x1HdnNzoZzPvxskhj1utLb2SA9'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('6dZD4zDx9bGZfRdgoUBsZjWBygYVXAe4G41LjTLNJWk1'), } const historicalDataSwap = gql` diff --git a/dexs/nomiswap/index.ts b/dexs/nomiswap/index.ts index bfed4ade50..ff3424bb28 100644 --- a/dexs/nomiswap/index.ts +++ b/dexs/nomiswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; @@ -5,7 +6,7 @@ import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { time } from "console"; const endpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/chopachom/nomiswap-subgraph-exchange", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('9ggB4DiKGyXfiS4vh1xqQJMcTQEvxxt715HVm8S3r27G'), }; const VOLUME_FIELD = "dailyVolumeUSD"; diff --git a/dexs/onepunch/index.ts b/dexs/onepunch/index.ts index 0bdfee5cd1..8279de33b8 100644 --- a/dexs/onepunch/index.ts +++ b/dexs/onepunch/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter( { [CHAIN.BSC]: - "https://api.thegraph.com/subgraphs/name/one-punch-team/onepunch-subgraph-bsc", + sdk.graph.modifyEndpoint('GQJoTmGyx4SGL1iVRBvyxA8jLNgcV8YMHcbLjf6DrUbv'), }, { factoriesName: "onePunchDatas", diff --git a/dexs/oolongswap/index.ts b/dexs/oolongswap/index.ts index 96f993bbe7..febc34b921 100644 --- a/dexs/oolongswap/index.ts +++ b/dexs/oolongswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const endpoints = { - [CHAIN.BOBA]: "https://api.thegraph.com/subgraphs/name/oolongswap/oolongswap-mainnet", + [CHAIN.BOBA]: sdk.graph.modifyEndpoint('opoNLKkoTJtLzbPv5pf6XDzQp4XUk9pJfqvgHCUyzqo'), }; const adapter = univ2Adapter(endpoints, {}); diff --git a/dexs/opx-finance/index.ts b/dexs/opx-finance/index.ts index a5be41d27f..e474d35417 100644 --- a/dexs/opx-finance/index.ts +++ b/dexs/opx-finance/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/opx-finance/opx-op-stats", + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('B8ZSq8gQJGk3C8hduPokgkr4PVcfe4Ydy5jDBk8siPe4'), } const historicalDataSwap = gql` diff --git a/dexs/padswap/index.ts b/dexs/padswap/index.ts index 3e36bf7737..240b67d84f 100644 --- a/dexs/padswap/index.ts +++ b/dexs/padswap/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - // [CHAIN.MOONRIVER]: 'https://api.thegraph.com/subgraphs/name/toadguy/padswap-subgraph-moonriver', - [CHAIN.BSC]: 'https://api.thegraph.com/subgraphs/name/d1stsys/padswap-backup-2', - [CHAIN.MOONBEAN]: 'https://api.thegraph.com/subgraphs/name/toadguy/padswap-subgraph-moonbeam', + // [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('2Mi1JF6Rq5ZSBhrcomyXnCady3Fuwy8eyEPT95qitT9U'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('85ZjqMyuYVWcWWW7Ei8ptMyVRhwYwxGBHo83TmNJkw2U'), + [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint('HZrJDqzqR12BBUfmxaaPNbnSB9JunWzdzkpQaGYSHNcv'), }, {}); adapters.adapter.bsc.start = 1620518400; diff --git a/dexs/palmswap/index.ts b/dexs/palmswap/index.ts index 933554af41..df1f391dc5 100644 --- a/dexs/palmswap/index.ts +++ b/dexs/palmswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { BigNumberish, ethers } from "ethers"; @@ -34,7 +35,7 @@ const formatAmount = ( const info: { [key: string]: any } = { bsc: { subgraph: - "https://api.thegraph.com/subgraphs/name/palmswap/synthetic-stats-mainnet", + sdk.graph.modifyEndpoint('DdLtKxzUi6ExMok8dNWh9B2HN5WeTWcQsfSSZMKH1trQ'), }, }; diff --git a/dexs/pharaoh-exchange/index.ts b/dexs/pharaoh-exchange/index.ts index 58485e68cb..7119c974f2 100644 --- a/dexs/pharaoh-exchange/index.ts +++ b/dexs/pharaoh-exchange/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/ramsesexchange/pharaoh-cl-subgraph" + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('oM4WnuyAbSwPpjk6niUkp88AZg1hSTi9aC1ZM4RcsqR') }, { factoriesName: "factories", dayData: "uniswapDayData", diff --git a/dexs/pinkswap/index.ts b/dexs/pinkswap/index.ts index 15ab383287..7b754e6eea 100644 --- a/dexs/pinkswap/index.ts +++ b/dexs/pinkswap/index.ts @@ -1,6 +1,7 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/pinkmoonfinance/pinkswap" + [CHAIN.BSC]: sdk.graph.modifyEndpoint('CwTzDabgebYMipjh9gqP4Kyrbi3HGQSabBuR4ngorXUt') }, {}); diff --git a/dexs/platypus/index.ts b/dexs/platypus/index.ts index 7ba10753df..3c6c86c15c 100644 --- a/dexs/platypus/index.ts +++ b/dexs/platypus/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { DISABLED_ADAPTER_KEY, FetchResult, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, request } from "graphql-request"; @@ -10,7 +11,7 @@ interface IGraph { dayID: string; } -const URL = 'https://api.thegraph.com/subgraphs/name/platypus-finance/platypus-dashboard'; +const URL = sdk.graph.modifyEndpoint('Bu5QPRWGnZB6NxU4S7kAKQZJpY4pHmAq3TV69V1W2Qqw'); const fetch = async (timestamp: number): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); const dayID = (dayTimestamp / 86400); diff --git a/dexs/polycat/index.ts b/dexs/polycat/index.ts index 2d24130c89..64123b0348 100644 --- a/dexs/polycat/index.ts +++ b/dexs/polycat/index.ts @@ -1,7 +1,8 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/polycatfi/polycat-finance-amm" + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('9xwmkrJTk5s5e8QoBnQG1yTN8seLwzLWwACaqTgq2U9x') }, { }); diff --git a/dexs/protofi/index.ts b/dexs/protofi/index.ts index 010e856593..688dada2b7 100644 --- a/dexs/protofi/index.ts +++ b/dexs/protofi/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/theothercrypto/protofi-dex-fantom", + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('6D3HgYNegniVRGGF1cceiZ6Kg3KWGNzQCqjWMtZu7wTQ'), }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData", diff --git a/dexs/pyeswap/index.ts b/dexs/pyeswap/index.ts index 9327367f8d..f508764c30 100644 --- a/dexs/pyeswap/index.ts +++ b/dexs/pyeswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapter = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/officialdevteamsix/pyeswap" + [CHAIN.BSC]: sdk.graph.modifyEndpoint('56dMe6VDoxCisTvkgXw8an3aQbGR8oGhR292hSu6Rh3K') }, { factoriesName: "pyeFactories", dayData: "pyeDayData", diff --git a/dexs/radioshack/index.ts b/dexs/radioshack/index.ts index 9b7ef01513..08fd11db05 100644 --- a/dexs/radioshack/index.ts +++ b/dexs/radioshack/index.ts @@ -1,14 +1,15 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; const endpoints = { - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/radioshackcreator/unigraph-polygon", - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/radioshackcreator/unigraph-bsc", - // [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/radioshackcreator/unigraph-ethereum", - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/radioshackcreator/unigraph-avalanche", - // [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/radioshackcreator/unigraph-fantom", + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('743VoDTGxZ1m3QHC3BCnTkKcvXqo8PfyTSs6QGHgcQKd'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('xw8NYXanrWADWixeXQ8DBViHtEQvr85eAFcSADEmeDz'), + // [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('EduCYTCLoqd93219xiiVLFmpWbv8T7CXKtQMRNKKEeTY'), + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('ChLQrP8tJHHuFVHmKWoKfgUVNtYcbA7YAV1Y75Qjy6Sv'), + // [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('CK42aJEkVpr5kS3wygQrpmDegNcRDbdqtkzNhzRLfW21'), }; const graphs = getChainVolume({ diff --git a/dexs/retro/index.ts b/dexs/retro/index.ts index 103a65b215..b3f140b2fc 100644 --- a/dexs/retro/index.ts +++ b/dexs/retro/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; const endpointV3 = { - [CHAIN.POLYGON]: 'https://api.thegraph.com/subgraphs/name/ruvlol/univ3-test' + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('DZyDuvUHNThtJJQAEbYGr32xYc93BZAdfqatpYUNMZbe') } const VOLUME_USD = 'volumeUSD' const v3Graphs = getGraphDimensions({ diff --git a/dexs/rubicon/index.ts b/dexs/rubicon/index.ts index 72f077d461..86f9ab62a7 100644 --- a/dexs/rubicon/index.ts +++ b/dexs/rubicon/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/jossduff/rubiconmetricsarbitrum", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/denverbaumgartner/rubiconmetricsoptimism" + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('B4cTJXyWHMLkxAcpLGK7dJfArJdrbyWukCoCLPDT1f7n'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('AUcAkUd4sJutFD3hYQfvB6uvXrEdYP26qiZwZ5qyrgTw') }, { factoriesName: "rubicons", totalVolume: "total_volume_usd", diff --git a/dexs/ryze/index.ts b/dexs/ryze/index.ts index ab9c868604..76ee52ed26 100644 --- a/dexs/ryze/index.ts +++ b/dexs/ryze/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { ChainEndpoints, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; @@ -6,7 +7,7 @@ import request, { gql } from "graphql-request"; import { getBlock } from "../../helpers/getBlock"; const endpoints: ChainEndpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/chinu-dev/ryze-dashboard-subgraph-prod", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('3MwM7j7s5EMrXE3uA5WUKU9GR4pfegirg4tSWTVMLwTK'), }; interface IPoolSnapshot { diff --git a/dexs/saddle-finance/index.ts b/dexs/saddle-finance/index.ts index b6f9c956cd..2420ef2446 100644 --- a/dexs/saddle-finance/index.ts +++ b/dexs/saddle-finance/index.ts @@ -6,7 +6,7 @@ import { CHAIN } from "../../helpers/chains"; const endpoints = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('79UL5SaLLsbXqC8Ks6v3fwWHR1FRs636FFRHn55o5SWq'), - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/saddle-finance/saddle-arbitrum" + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('AB2t32R1htdcguMQVVGt4biKGFeQ2HfXkEgJNkKi1dJa') }; const graphs = getChainVolume({ diff --git a/dexs/shell-protocol/constants.ts b/dexs/shell-protocol/constants.ts index f05194ab8b..a9682f1537 100644 --- a/dexs/shell-protocol/constants.ts +++ b/dexs/shell-protocol/constants.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; const POOL_DATA = { "arbitrum-one": { "DAI+USDC": { @@ -1021,9 +1022,9 @@ const TOKEN_NAMES = { }, }; -const MAINNET_SUBGRAPH_URL = "https://api.thegraph.com/subgraphs/name/kfeng22/shell-v2-arbitrum-one"; +const MAINNET_SUBGRAPH_URL = sdk.graph.modifyEndpoint('H6vTCuujLYzXdgGDbB9UzwLjbGc4gXPttx6ULtBJBxdX'); const MAINNET_V3_SUBGRAPH_URL = "https://api.studio.thegraph.com/query/42384/shell-v3-arbitrum-one-rl/version/latest"; -const MAINNET_BLOCKS_URL = "https://api.thegraph.com/subgraphs/name/sushiswap/arbitrum-blocks"; +const MAINNET_BLOCKS_URL = sdk.graph.modifyEndpoint('3mQwWddUyzqxqMkb1HMPxoHGSLg3fKfmLawMtyUoDxmD'); const COIN_GECKO_IDS = { DAI: "dai", diff --git a/dexs/smartdex/index.ts b/dexs/smartdex/index.ts index 99722f3f01..2878886de9 100644 --- a/dexs/smartdex/index.ts +++ b/dexs/smartdex/index.ts @@ -1,7 +1,8 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/akashzeromile/smartdex-subgraph" + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('8Lw1rRcKYgi4qfdLuk4gRubLVR48RpGuBCJiB7hLtupt') }, { }); diff --git a/dexs/solarbeam/index.ts b/dexs/solarbeam/index.ts index be229ca2ed..c657c8fc69 100644 --- a/dexs/solarbeam/index.ts +++ b/dexs/solarbeam/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapter = univ2Adapter({ - [CHAIN.MOONRIVER]: "https://api.thegraph.com/subgraphs/name/solarbeamio/amm-v2" + [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('71vx2Ph76RyX8y7RRqzNKToMm4w6now3YBJjAWpGyUCP') },{ hasTotalVolume: false, }); diff --git a/dexs/solarflare/index.ts b/dexs/solarflare/index.ts index 9c2c0167fc..b436304c4a 100644 --- a/dexs/solarflare/index.ts +++ b/dexs/solarflare/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapter = univ2Adapter({ - [CHAIN.MOONBEAM]: "https://api.thegraph.com/subgraphs/name/solarbeamio/solarflare-subgraph" + [CHAIN.MOONBEAM]: sdk.graph.modifyEndpoint('Cg4bWziUWqtUZrvZ6QZihsgUukAh6r8o5KZQzJRVkA31') },{}); adapter.adapter.moonbeam.start = 1642032000; export default adapter; diff --git a/dexs/solidly-v3/index.ts b/dexs/solidly-v3/index.ts index cc7a4a182f..26fb5f464f 100644 --- a/dexs/solidly-v3/index.ts +++ b/dexs/solidly-v3/index.ts @@ -5,9 +5,9 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t'), // [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-optimism", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-arbitrum", - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-fantom" + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('HCThb3gJC45qUYmNEaYmZZTqJW3pSq7X6tb4MqNHEvZf'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('ALCsbp7jWC6EQjwgicvZkG6dDEFGMV32QUZJvJGqL9Kx'), + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('HDNu25S2uqr13BHrQdPv2PfTpwxJgPB7QEnC8fsgKcM9') }, { factoriesName: "factories", dayData: "solidlyDayData", diff --git a/dexs/solidlydex/index.ts b/dexs/solidlydex/index.ts index 329e8ac946..fda7139ee2 100644 --- a/dexs/solidlydex/index.ts +++ b/dexs/solidlydex/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/0xc30/solidly", + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('4GX8RE9TzEWormbkayeGj4NQmmhYE46izVVUvXv8WPDh'), }; const adapter = univ2Adapter(endpoints, {}); diff --git a/dexs/soulswap/index.ts b/dexs/soulswap/index.ts index 19838476a9..e432402073 100644 --- a/dexs/soulswap/index.ts +++ b/dexs/soulswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { getChainVolumeWithGasToken } from "../../helpers/getUniSubgraphVolume"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { /*AVAX,*/ FANTOM } from "../../helpers/chains"; @@ -5,8 +6,8 @@ import { SimpleAdapter } from "../../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; const endpoints = { - //[AVAX]: "https://api.thegraph.com/subgraphs/name/soulswapfinance/avalanche-exchange", - [FANTOM]: "https://api.thegraph.com/subgraphs/name/soulswapfinance/fantom-exchange", + //[AVAX]: sdk.graph.modifyEndpoint('Ao7hF1zBTZ6pkotKPguC536KkU9Gi4DQLBZFkLR5NafN'), + [FANTOM]: sdk.graph.modifyEndpoint('DftDSxq9ud7icPSKcEThpFLCgXd7Kx94ns8dK4Js63Fy'), }; const VOLUME_FIELD = "volumeUSD"; diff --git a/dexs/spacedex/index.ts b/dexs/spacedex/index.ts index 173bb443fc..8e27d91ade 100644 --- a/dexs/spacedex/index.ts +++ b/dexs/spacedex/index.ts @@ -1,11 +1,12 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/spcdex-io/arbitrum-stats", - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/spcdex-io/bsc-stats", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('9ob9R8ufkfEXnqp1s3izXjwQgXEnkSi9KXazYC9LdBC4'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('EMyH7BU8sp2sBCAtfDCqfnXyiKDUf3NbPpU6bg6vdAaH'), } const historicalDataSwap = gql` diff --git a/dexs/spartacus-exchange/index.ts b/dexs/spartacus-exchange/index.ts index d252541a60..cbb707d4f9 100644 --- a/dexs/spartacus-exchange/index.ts +++ b/dexs/spartacus-exchange/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const endpoints = { - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/spartacus-finance/spadexinfo", + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('3kxULFsyJPAqbtCQUtQBH4Hktd6EboqCF22cVtkZg1eY'), }; const adapter = univ2Adapter(endpoints, {"gasToken" : "coingecko:fantom"}); adapter.adapter.fantom.start = 1650883041; diff --git a/dexs/spartan/index.ts b/dexs/spartan/index.ts index f40f303357..1a77f0e1b6 100644 --- a/dexs/spartan/index.ts +++ b/dexs/spartan/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { gql, GraphQLClient } from "graphql-request"; import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; @@ -14,7 +15,7 @@ const getDailyVolume = () => { }` } -const graphQLClient = new GraphQLClient("https://api.thegraph.com/subgraphs/name/spartan-protocol/pool-factory"); +const graphQLClient = new GraphQLClient(sdk.graph.modifyEndpoint('9vN1kRac6B224oTjNnFe9vYnJXj5fxaa3ivDfg1hh3v5')); const getGQLClient = () => { return graphQLClient } diff --git a/dexs/sphynx/index.ts b/dexs/sphynx/index.ts index fcb28fdc13..8dc5d1c3ba 100644 --- a/dexs/sphynx/index.ts +++ b/dexs/sphynx/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/sphynxswap/exchange", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('C4bw9Bt2Ewbx1pB6uYwduNXpWQAc4HRSayc6KeNy2n1b'), // [CHAIN.CRONOS]: "https://crnode.thesphynx.co/graph/subgraphs/name/exchange/cronos", [CHAIN.BITGERT]: "https://brgraph.thesphynx.co/subgraphs/name/exchange/brise" }, { diff --git a/dexs/squadswap-v2/index.ts b/dexs/squadswap-v2/index.ts index cfad7ffd19..55579b1da3 100644 --- a/dexs/squadswap-v2/index.ts +++ b/dexs/squadswap-v2/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { DEFAULT_TOTAL_VOLUME_FIELD, univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import { DEFAULT_DAILY_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; import { SimpleAdapter } from "../../adapters/types"; const endpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/q1q0/squad-exchange", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('FDn5m4S3bFqd8TV97P61i3dhZLpSigFwpRQEan2mrjTE'), }; const v2Graph = getGraphDimensions({ diff --git a/dexs/squadswap-v3/index.ts b/dexs/squadswap-v3/index.ts index 4598f8920f..0ea3735659 100644 --- a/dexs/squadswap-v3/index.ts +++ b/dexs/squadswap-v3/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; @@ -5,7 +6,7 @@ import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; const endpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/carlos53093/exchange-v3", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('CTCJRpNgyiCMaQhPsKTWfsCfFBSPkzaQKKi2EjMyidCt'), }; const v3Graphs = getGraphDimensions({ diff --git a/dexs/stellaswap-v3/index.ts b/dexs/stellaswap-v3/index.ts index 75d2ec79f4..b1404ecab7 100644 --- a/dexs/stellaswap-v3/index.ts +++ b/dexs/stellaswap-v3/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; // https://api.thegraph.com/subgraphs/name/stellaswap/pulsar import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/stellaswap/pulsar" + [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint('85R1ZetugVABa7BiqKFqE2MewRuJ8b2SaLHffyTHDAht') }, { factoriesName: "factories", dayData: "algebraDayData", diff --git a/dexs/subzero-zswap/index.ts b/dexs/subzero-zswap/index.ts index 74e36393f0..2d79428209 100644 --- a/dexs/subzero-zswap/index.ts +++ b/dexs/subzero-zswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/mkrman/exchange", + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('7L3pXgL3sBVDkCjZjautaRjPr5u4dcUsG1KK6vj4XCec'), }; const adapter = univ2Adapter(endpoints, { diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index e62f398aff..df4c746801 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -65,7 +65,7 @@ const endpointsClassic = { // [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('5skUrJzgVm6vXAmdKN7gw4CjYx3pgLDeUeUqVzqLXkWT'), [CHAIN.XDAI]: sdk.graph.modifyEndpoint('4a8hcsttqsmycmmeFcpffGMZhBDU4NhHfyHH6YNcnu7b'), // [CHAIN.MOONBEAM]: sdk.graph.modifyEndpoint('3tNHz9aTBa2KUthYZiZZxayYYpxXACverKRrkafhoBru'), - [CHAIN.BOBA]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/sushiswap-boba', + [CHAIN.BOBA]: sdk.graph.modifyEndpoint('EC3ZtCpCaV5GyyhyPNHs584wdGA72nud7qcuxWNTfPr4'), [CHAIN.FUSE]: sdk.graph.modifyEndpoint('DcaAUrnx2mWKVQNsVJiuz7zhjoLkvtDUcoq73NdBvbTo'), [CHAIN.CORE]: 'https://thegraph.coredao.org/subgraphs/name/sushi-v2/sushiswap-core', [CHAIN.BLAST]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/sushiswap-blast/gn', diff --git a/dexs/sushiswap/v3.ts b/dexs/sushiswap/v3.ts index 6edb1bd3e5..cd50e8375b 100644 --- a/dexs/sushiswap/v3.ts +++ b/dexs/sushiswap/v3.ts @@ -1,20 +1,21 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; const endpointsV3 = { // [CHAIN.ARBITRUM_NOVA]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v3/v3-arbitrum-nova', - [CHAIN.ARBITRUM]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-arbitrum', - [CHAIN.AVAX]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-avalanche', - [CHAIN.BSC]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-bsc', - [CHAIN.BOBA]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-boba', - [CHAIN.ETHEREUM]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-ethereum', - [CHAIN.FANTOM]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-fantom', - [CHAIN.FUSE]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-fuse', - [CHAIN.XDAI]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-gnosis', - // [CHAIN.MOONRIVER]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-moonriver', - [CHAIN.OPTIMISM]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-optimism', - [CHAIN.POLYGON]: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-polygon', + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('4vRhyrcGqN63T7FXvL9W5X72iQN8H9fDNfLcUQBG91Wi'), + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('HE31GSTGpXsRnuT4sAJoFayGBZX2xBQqWq4db48YuKmD'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('GtUp5iLfjfYXtX76wF1yyteSSC5WqnYV8br5ixHZgFmW'), + [CHAIN.BOBA]: sdk.graph.modifyEndpoint('Du43Wz3rZ5ajzScgsTnuPv5NvRmQLTDPPkBxYEmFBmWM'), + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('7okunX6MGm2pdFK7WJSwm9o82okpBLEzfGrqHDDMWYvq'), + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('6z2W9fLTVmhpCecSMTMpRNeSBTRPJLmKsSXrtdkpeJDz'), + [CHAIN.FUSE]: sdk.graph.modifyEndpoint('7E265DKJJiTn8bVF1nqmBr6C2tmo5MVQFNb9sm4cxng5'), + [CHAIN.XDAI]: sdk.graph.modifyEndpoint('hS35uHcFDVSxJQV1XWht7yMdGTRNVa9poYTpcEZ9uAQ'), + // [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('5WabfuUgF5k4CE9snB22HNcUHQVkUStvet76qjovKdm6'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('Hc3vTLxWmtyrn59t2Yv3MiXJVxjfNyZi41iKE3rXXHMf'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('G1Q6dviDfMm6hVLvCqbfeB19kLmvs7qrnBvXeFndjhaU'), [CHAIN.POLYGON_ZKEVM]: 'https://api.studio.thegraph.com/query/32073/v3-polygon-zkevm/v0.0.2', [CHAIN.THUNDERCORE]: 'https://graph-node.thundercore.com/subgraphs/name/sushi-v3/v3-thundercore', [CHAIN.BASE]: "https://api.studio.thegraph.com/query/32073/v3-base/v0.0.1", diff --git a/dexs/swaap/index.ts b/dexs/swaap/index.ts index 037a480ff3..20b42ec173 100644 --- a/dexs/swaap/index.ts +++ b/dexs/swaap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { BreakdownAdapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, GraphQLClient } from "graphql-request"; @@ -12,20 +13,20 @@ interface ChainConfig{ const config:Record = { [CHAIN.ETHEREUM]: { - api: "https://api.thegraph.com/subgraphs/name/swaap-labs/swaapv2-ethereum", + api: sdk.graph.modifyEndpoint('6ZxFsA2sR62j3Hepprkeu5co3aVupg4YZXCsHyM8SFZs'), start: 1688169600, id: '2', firstDayVolume: 0 }, [CHAIN.POLYGON]: { - api: "https://api.thegraph.com/subgraphs/name/swaap-labs/swaapv2-polygon", + api: sdk.graph.modifyEndpoint('AqeDaXDjW3ttvYDGtdK1LC2igJ2usukrcbYmM2rBwesT'), start: 1688083200, id: '2', firstDayVolume: 240.41984714755376 }, [CHAIN.ARBITRUM]: { - api: "https://api.thegraph.com/subgraphs/name/swaap-labs/swaapv2-arbitrum", + api: sdk.graph.modifyEndpoint('5EPpDeMUhrYgm91MJCidUgvraS41y9eCRasfjFY6gnYe'), start: 1696464000, id: '2', firstDayVolume: 0 @@ -91,7 +92,7 @@ const graphParams = { const v1graphs = getChainVolume({ graphUrls: { - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/swaap-labs/swaapv1" + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('A1ibaGVUkqdLeBG7VeeSB8jm9QNmS8phSz8iooXR8puv') }, ...graphParams, }); diff --git a/dexs/swapr/index.ts b/dexs/swapr/index.ts index d4db5d74fe..43279f38ba 100644 --- a/dexs/swapr/index.ts +++ b/dexs/swapr/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/dxgraphs/swapr-mainnet-v2", + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('CfBvQzwWyg41ceiR3XM64KzJiAKVPML4iztwEaHYdCFw'), [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('8CtcD8EzHq6YyQrnb4XFz2pnwXVx3nHruj4pcDjHRKpt'), [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/dxgraphs/swapr-xdai-v2" }; diff --git a/dexs/swapsicle/index.ts b/dexs/swapsicle/index.ts index 4ad599ec86..668f652f73 100644 --- a/dexs/swapsicle/index.ts +++ b/dexs/swapsicle/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; export default univ2Adapter({ - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/billy93/swapsicleexc2", + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('3CpYKjaYzYk34muKEjBkDmWJLUMdAL6FEeKtLvYUbAuH'), }, { factoriesName: "factories", totalVolume: "volumeUSD", diff --git a/dexs/swych/index.ts b/dexs/swych/index.ts index 9b350c0f74..9f868f3319 100644 --- a/dexs/swych/index.ts +++ b/dexs/swych/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import axios from "axios"; import {CHAIN} from "../../helpers/chains"; import {getTimestampAtStartOfDayUTC} from "../../utils/date"; @@ -7,7 +8,7 @@ const STATUS = { }; const SUBGRAPHS = { - pdex: "https://api.thegraph.com/subgraphs/name/crypnosis/swych-pdex-v1", + pdex: sdk.graph.modifyEndpoint('6tn8tNYxKCEM5bTceMfA5jeGm3gtCrUGDwbKN7QGGat4'), }; const toBigInt = (value: string | number) => { diff --git a/dexs/symmetric/index.ts b/dexs/symmetric/index.ts index df73ac8fed..2f5ffb350c 100644 --- a/dexs/symmetric/index.ts +++ b/dexs/symmetric/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; import { BaseAdapter, BreakdownAdapter, ChainEndpoints, FetchResultVolume } from "../../adapters/types"; @@ -8,8 +9,8 @@ import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getU import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints: ChainEndpoints = { - [CHAIN.XDAI]:'https://api.thegraph.com/subgraphs/name/centfinance/symmetric-v2-gnosis', - [CHAIN.CELO]: 'https://api.thegraph.com/subgraphs/name/centfinance/symmetric-v2-celo', + [CHAIN.XDAI]:sdk.graph.modifyEndpoint('9kdgh1tW36E8MKthUmZ2FJbe2KCuvkibz984SxbQSdJw'), + [CHAIN.CELO]: sdk.graph.modifyEndpoint('2iS1nCtSKbJT7MZ2xH9hMej3CjJDRRGuv25cAt6kbEwj'), [CHAIN.TELOS]:'https://api.goldsky.com/api/public/project_clnbo3e3c16lj33xva5r2aqk7/subgraphs/symmetric-telos/prod/gn', }; diff --git a/dexs/synfutures-v1/index.ts b/dexs/synfutures-v1/index.ts index 85a3bb12d7..3ecc11ed55 100644 --- a/dexs/synfutures-v1/index.ts +++ b/dexs/synfutures-v1/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; // SynFutures v1 volume import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -6,16 +7,16 @@ const { request, } = require("graphql-request"); const info: {[key: string]: any} = { polygon: { - subgraph: 'https://api.thegraph.com/subgraphs/name/synfutures/polygon-v1', + subgraph: sdk.graph.modifyEndpoint('AoQ1npLLN7fTJc96XjnL8MgwHAvzxFDuE27kWfdrVATD'), }, ethereum: { - subgraph: 'https://api.thegraph.com/subgraphs/name/synfutures/ethereum-v1', + subgraph: sdk.graph.modifyEndpoint('HLqiPUB5pYH8VztXAcvMW6VTq6avHkW77mYnKe8ov44r'), }, bsc: { - subgraph: 'https://api.thegraph.com/subgraphs/name/synfutures/bsc-v1', + subgraph: sdk.graph.modifyEndpoint('9AuL6Mga3pzjYDoLEJHncC3rQMCHibaW8syCwJv1QMNW'), }, arbitrum: { - subgraph: 'https://api.thegraph.com/subgraphs/name/synfutures/arbitrum-one-v1', + subgraph: sdk.graph.modifyEndpoint('HktZa8SikfXFpjjGZML578RTrsieQdVENJviucpokLwH'), }, } diff --git a/dexs/syrup-finance/index.ts b/dexs/syrup-finance/index.ts index 35e633ea7b..353182de2d 100644 --- a/dexs/syrup-finance/index.ts +++ b/dexs/syrup-finance/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { DISABLED_ADAPTER_KEY, Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,7 +6,7 @@ import disabledAdapter from "../../helpers/disabledAdapter"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/syrupmaker/srx-stats-bsc", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('FxC8dAGA6jXCN4EUoPqDeoUWM9XE1VrttiEVT7LEGyxw'), } const historicalDataSwap = gql` diff --git a/dexs/tegro/index.ts b/dexs/tegro/index.ts index beaff8935f..871717a4be 100644 --- a/dexs/tegro/index.ts +++ b/dexs/tegro/index.ts @@ -1,12 +1,13 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ETHEREUM]: 'https://api.thegraph.com/subgraphs/name/ashtegro/tegro', - [CHAIN.POLYGON]: 'https://api.thegraph.com/subgraphs/name/ashtegro/tegro-polygon', - [CHAIN.AVAX]: 'https://api.thegraph.com/subgraphs/name/ashtegro/tegro-avax', - [CHAIN.BSC]: 'https://api.thegraph.com/subgraphs/name/ashtegro/tegro-bnb', - [CHAIN.ARBITRUM]: 'https://api.thegraph.com/subgraphs/name/ashtegro/tegro-arbitrum', + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('Cypy2AGAgWwBUjBtQc6GeoGmibLH75v3eVhC9UPXHcHP'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('793XgZSYH8fTiZUMLYAE7mVkGgh9KGQufQhVjRvEdHn3'), + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('N56YWKqnNPcruU72KM2rxtdFhAAKx2BWgCjZ1gxFokj'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('ExjMBMGp5EDeBBD9Yt43PeZJtKpP29wRs45JXkeCd712'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('7xPJ5PFAhXmqacuRQmftnYYixhqhfMvARZ6onXtbX3nQ'), }, { factoriesName: "totalVolumes", dailyVolume: "volume", diff --git a/dexs/tetu/index.ts b/dexs/tetu/index.ts index 4dcf6815dd..d7935178ce 100644 --- a/dexs/tetu/index.ts +++ b/dexs/tetu/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/tetu-io/tetu-swap" + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('D1aLXNYC1pZocgumq9yyKQMjFwZ14Gum3NUbZUA35Gty') }, { }); diff --git a/dexs/throne-v3/index.ts b/dexs/throne-v3/index.ts index 87d959a8b3..619672e576 100644 --- a/dexs/throne-v3/index.ts +++ b/dexs/throne-v3/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { IJSON, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,7 +6,7 @@ import { getGraphDimensions } from "../../helpers/getUniSubgraph"; const v3Endpoint = { [CHAIN.BASE]: - "https://api.thegraph.com/subgraphs/name/somberload/throne-exchange-v3", + sdk.graph.modifyEndpoint('HRaFknkbRxB17ziZoMcT7EJuT42BKRYeYvKyQvJrQWJf'), }; const VOLUME_USD = "volumeUSD"; diff --git a/dexs/titano-swych/index.ts b/dexs/titano-swych/index.ts index 68a383a124..de085d7213 100644 --- a/dexs/titano-swych/index.ts +++ b/dexs/titano-swych/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/swychfinance/exchange" + [CHAIN.BSC]: sdk.graph.modifyEndpoint('FyXg4ty4DFtijG9wF9VzRpBPW21vNwuqVVYYap5mayy7') }, { factoriesName: "pancakeFactories", dayData: "pancakeDayData", diff --git a/dexs/tokenlon/index.ts b/dexs/tokenlon/index.ts index 8d350bb62a..ff99be8816 100644 --- a/dexs/tokenlon/index.ts +++ b/dexs/tokenlon/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import ADDRESSES from "../../helpers/coreAssets.json"; import { BreakdownAdapter, ChainBlocks, FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -133,7 +134,7 @@ const config = { } const endpoints: TEndpoint = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/consenlabs/tokenlon-v5-exchange", + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('5JhweAV1Y3k3GbbEssfetBaoyDNWz1Y72zscRrYsAgVT'), }; const rfqV2Endpoint = "https://satsuma-subgraph.token.im/subgraph/rfqv2/api" diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index fc72e08fe5..05ef89dfb9 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -7,7 +7,7 @@ import fetchURL from "../../utils/fetchURL"; const endpoints = { [CHAIN.AVAX]: sdk.graph.modifyEndpoint('9ZjERoA7jGANYNz1YNuFMBt11fK44krveEhzssJTWokM'), - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/joe-v1-bnb", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('3VgCBQh13PseR81hPNAbKua3gD8b8r33LauKjVnMbSAs'), [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('3jFnXqk6UXZyciPu5jfUuPR7kzGXPSndsLNrWXQ6xAxk'), }; type TEndpoint = { diff --git a/dexs/ubeswap/index.ts b/dexs/ubeswap/index.ts index c8c6fdf4ed..d60ea16812 100644 --- a/dexs/ubeswap/index.ts +++ b/dexs/ubeswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.CELO]: "https://api.thegraph.com/subgraphs/name/ubeswap/ubeswap" + [CHAIN.CELO]: sdk.graph.modifyEndpoint('JWDRLCwj4H945xEkbB6eocBSZcYnibqcJPJ8h9davFi') }, { factoriesName: "ubeswapFactories", dayData: "ubeswapDayData", diff --git a/dexs/unidex/unidex-agg-perp/index.ts b/dexs/unidex/unidex-agg-perp/index.ts index 3fa5fbec14..4ddf61dc20 100644 --- a/dexs/unidex/unidex-agg-perp/index.ts +++ b/dexs/unidex/unidex-agg-perp/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter, FetchResultVolume } from "../../../adapters/types"; import { CHAIN } from "../../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../../utils/date"; @@ -41,7 +42,7 @@ const fetchReferralVolume = async (timestamp: number): Promise => { } `; - const referralEndpoint = 'https://api.thegraph.com/subgraphs/name/gmx-io/gmx-arbitrum-referrals'; + const referralEndpoint = sdk.graph.modifyEndpoint('Hww5kAfumpAbMm5iGWqEe83vJJCEE98kccmBBcMRy5fU'); const referralRes = await request(referralEndpoint, referralQuery); // If there's no volume data, return 0 @@ -81,13 +82,13 @@ const fetchMuxReferralVolume = async (chain: Chain, timestamp: number): Promise< switch (chain) { case CHAIN.ARBITRUM: - referralEndpoint = 'https://api.thegraph.com/subgraphs/name/mux-world/mux-referral-arb'; + referralEndpoint = sdk.graph.modifyEndpoint('GbsdbMy5X2xHoj8qrRKKTs3LhMgma3CzZ8nZCqo9T97v'); break; case CHAIN.OPTIMISM: - referralEndpoint = 'https://api.thegraph.com/subgraphs/name/mux-world/mux-referral-op'; + referralEndpoint = sdk.graph.modifyEndpoint('7CmYmJd9mghA17EP8NXqrLZPqT3vjw4B8PLAbA1K4PdJ'); break; case CHAIN.FANTOM: - referralEndpoint = 'https://api.thegraph.com/subgraphs/name/mux-world/mux-referral-ftm'; + referralEndpoint = sdk.graph.modifyEndpoint('2KNaZgvAu9zjn1oAomgoMgiafQHNBbsS3Eu4UwucPUC6'); break; default: return 0; // Return 0 for unsupported chains diff --git a/dexs/vapordex/v1.ts b/dexs/vapordex/v1.ts index 9c33b448a8..a287076366 100644 --- a/dexs/vapordex/v1.ts +++ b/dexs/vapordex/v1.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const v1 = univ2Adapter( { [CHAIN.AVAX]: - "https://api.thegraph.com/subgraphs/name/mejiasd3v/vapordex-avalanche", + sdk.graph.modifyEndpoint('B6Tur5gXGCcswG8rEtmwfjBqeyDXCDUQSwM9wUXHoui5'), }, { factoriesName: "dexAmmProtocols", diff --git a/dexs/vela/index.ts b/dexs/vela/index.ts index cd0d7885ab..158818fc72 100644 --- a/dexs/vela/index.ts +++ b/dexs/vela/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { request, gql } from "graphql-request"; @@ -7,9 +8,9 @@ import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints = { [CHAIN.ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/velaexchange/vela-exchange-official", + sdk.graph.modifyEndpoint('6H9PEiNPZgwXfpbijjesZh96LFBzUvkHmEutMoYQ9fvp'), [CHAIN.BASE]: - "https://api.thegraph.com/subgraphs/name/velaexchange/vela-exchange-official-base" + sdk.graph.modifyEndpoint('2qsbZ4X5TJM7NupC2eRJv167kBDFCDBd37KnK7PQtdga') }; const graphs = (graphUrls: ChainEndpoints) => { diff --git a/dexs/velodrome/index.ts b/dexs/velodrome/index.ts index 920c4f2fae..6799744c16 100644 --- a/dexs/velodrome/index.ts +++ b/dexs/velodrome/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; @@ -5,7 +6,7 @@ import { Chain } from "@defillama/sdk/build/general"; import { fetchV2Volume } from "./v2" const endpoints = { - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/dmihal/velodrome", + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('2bam2XEb91cFqABFPSKj3RiSjpop9HvDt1MnYq5cDX5E'), }; const graphs = getChainVolume({ diff --git a/dexs/voltage/index.ts b/dexs/voltage/index.ts index 5703d33ba4..d3e6ed9a5a 100644 --- a/dexs/voltage/index.ts +++ b/dexs/voltage/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.FUSE]: "https://api.thegraph.com/subgraphs/name/voltfinance/voltage-exchange" + [CHAIN.FUSE]: sdk.graph.modifyEndpoint('4buFyoUT8Lay3T1DK9ctdMdcpkZMdi5EpCBWZCBTKvQd') }, { }); diff --git a/dexs/voodoo-trade/index.ts b/dexs/voodoo-trade/index.ts index d74147fdb1..58b9a851a6 100644 --- a/dexs/voodoo-trade/index.ts +++ b/dexs/voodoo-trade/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; /// Project URL: https://voodoo.trade /// Contact: chickenjuju@proton.me /// @@ -14,7 +15,7 @@ import { BreakdownAdapter, Fetch } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -const endpoint = "https://api.thegraph.com/subgraphs/name/chicken-juju/voodoo-base-stats" +const endpoint = sdk.graph.modifyEndpoint('6eeKiwCJQECCwhE7doeoKCAqSK7VatCsv3piHomYzi6o') const historicalDataSwap = gql` query get_volume($period: String!, $id: String!) { diff --git a/dexs/wagmi/wagmi.ts b/dexs/wagmi/wagmi.ts index 4101835228..94038d2aca 100644 --- a/dexs/wagmi/wagmi.ts +++ b/dexs/wagmi/wagmi.ts @@ -16,9 +16,9 @@ export const LINKS: { [key: string]: any } = { }, [CHAIN.FANTOM]: { subgraph: - "https://api.thegraph.com/subgraphs/name/0xfantaholic/wagmi-fantom", + sdk.graph.modifyEndpoint('BtyzJrSwED7QFDBhC68myEJ851KJ47vRD11vkenPwgQz'), blocks: - "https://api.thegraph.com/subgraphs/name/beethovenxfi/fantom-blocks", + sdk.graph.modifyEndpoint('BjhETUnXsKV77w7P6GWNxWik762YDmV54nkMRG4ekk2W'), }, [CHAIN.KAVA]: { subgraph: "https://kava.graph.wagmi.com/subgraphs/name/v3", diff --git a/dexs/wardenswap/index.ts b/dexs/wardenswap/index.ts index 4dd2cc7a67..03381c7732 100644 --- a/dexs/wardenswap/index.ts +++ b/dexs/wardenswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -6,11 +7,11 @@ const { getChainVolume, } = require("../../helpers/getUniSubgraphVolume"); const endpoints = { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/wardenluna/wardenswap", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/wardenluna/wardenswap-optimism", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/wardenluna/wardenswap-arbitrum", - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/wardenluna/wardenswap-ethereum", - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/wardenluna/wardenswap-polygon", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('DFn2ZaLXK4tJkXZ6AhfLF22pNobtTC88f3Ff3bC8by3r'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('BEKfdhcWBQQuZP5vz8jDZ8ZKRRqAeNYEGfuzdDPzzwnQ'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('B3L4WgKQ6kc6XyMiZqxQivb7VAQxAntUZcDjUuMHsWuF'), + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('AC7En34fgba7xJaoziBZtQLc5HgYD53K6YLzKnZy2cai'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('9NEeTNdvHDVvLxtzqSGVTiyZ2WqaKWfsv1cDksQbC917'), }; diff --git a/dexs/whaleswap/index.ts b/dexs/whaleswap/index.ts index 7598c16549..4d540b4c53 100644 --- a/dexs/whaleswap/index.ts +++ b/dexs/whaleswap/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; const { @@ -8,8 +9,8 @@ const { const { BSC, FANTOM } = require("../../helpers/chains"); const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); const endpoints = { - [BSC]: "https://api.thegraph.com/subgraphs/name/whale-swap/exchange-bsc", - [FANTOM]: "https://api.thegraph.com/subgraphs/name/whale-swap/exchange-ftm", + [BSC]: sdk.graph.modifyEndpoint('6GFVtwE9cc6Rs5N4zh3WE4HxppKkaHyuetwPLutjRqZw'), + [FANTOM]: sdk.graph.modifyEndpoint('GVz2cRMu62ePnd3dXq42SDdTMds7koaJ1w4X5cxfdrco'), }; const DAILY_VOLUME_FACTORY = "dayData"; diff --git a/dexs/wigoswap/index.ts b/dexs/wigoswap/index.ts index 9ae91ed5fa..3d8c01b1b2 100644 --- a/dexs/wigoswap/index.ts +++ b/dexs/wigoswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/wigoswap/exchange2" + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('71os49womDk3DFcNRCAFYzATxxMgWpSMKhRn5ih6aWF1') }, { factoriesName: "wigoswapFactories", dayData: "wigoDayData", diff --git a/dexs/wingswap/index.ts b/dexs/wingswap/index.ts index 2311d6b911..cfc7ee0ce5 100644 --- a/dexs/wingswap/index.ts +++ b/dexs/wingswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/wingswap/wingswap-exchange", + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('FQXGq9b1cWfrZVU4VVZyyRAgaLRQjUULE6YS26rkB1WM'), }; const adapter = univ2Adapter(endpoints, { diff --git a/dexs/woofi/index.ts b/dexs/woofi/index.ts index f6b3429281..29aa751603 100644 --- a/dexs/woofi/index.ts +++ b/dexs/woofi/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { ChainBlocks, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -5,12 +6,12 @@ import { CHAIN } from "../../helpers/chains"; const { getChainVolume } = require("../../helpers/getUniSubgraphVolume"); const endpoints = { - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/woonetwork/woofi-avax", - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/woonetwork/woofi-bsc", - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/woonetwork/woofi-fantom", - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/woonetwork/woofi-polygon", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/woonetwork/woofi-arbitrum", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/woonetwork/woofi-optimism", + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('BL45YVVLVkCRGaAtyTjvuRt1yHnUt4QbZg8bWcZtLvLm'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('CxWDreK8yXVX9qxLTNoyTrcNT2uojrPiseC7mBqRENem'), + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('B1TxafnDavup8z9rwi5TKDwZxCBR24tw8sFeyLSShhiP'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('Bn68xGN5mLu9cAVgCNrACxXWf5FR1dDQ6JxvXzimd7eZ'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('9wYUKdu85CGGwiV8mawEUwMhj4go7dx6ezfSkh9DUrFa'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('F7nNhkyaR53fs14vhfJmsUAotN1aJiyMbVc677ngFHWU'), [CHAIN.ERA]: "https://api.studio.thegraph.com/query/45576/woofi-zksync/version/latest", [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45576/woofi-polygon-zkevm/version/latest", [CHAIN.LINEA]: "https://woofi-subgraph.mer1in.com/subgraphs/name/woonetwork/woofi-linea", diff --git a/dexs/yieldfields/index.ts b/dexs/yieldfields/index.ts index e82c815f8d..df900ab833 100644 --- a/dexs/yieldfields/index.ts +++ b/dexs/yieldfields/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; const { getChainVolume, DEFAULT_TOTAL_VOLUME_FIELD, @@ -9,7 +10,7 @@ const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); import { SimpleAdapter } from "../../adapters/types"; const endpoints = { - [BSC]: "https://api.thegraph.com/subgraphs/name/sotblad/yieldfieldsexchange", + [BSC]: sdk.graph.modifyEndpoint('6PGfw9826xTB8JNN9HuMyY5eaFZLq6uqUcBwH7YEytsZ'), }; const DAILY_VOLUME_FACTORY = "yieldFieldsDayData"; diff --git a/dexs/yoshi-exchange/index.ts b/dexs/yoshi-exchange/index.ts index b3321375c7..064722c296 100644 --- a/dexs/yoshi-exchange/index.ts +++ b/dexs/yoshi-exchange/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/yoshiexchange/yoshi-exchange", - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/yoshiexchange/yoshi-exchange-bsc", - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/yoshiexchange/yoshi-exchange-eth", + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('EWBFCUSAd8eGb735UtAfsW99fNaEDAPnE2bbKWsRQLNt'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('Ap2c45H9tD4DqqcUYDACkv1zks7GC2WmoGq8QUgSVD81'), + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('CbpyZn3XuTwDtiWqw33cTxM4SQFB1vmtpYqyrkJ6v52S'), }; export default univ2Adapter(endpoints, { diff --git a/dexs/zyberswap/index.ts b/dexs/zyberswap/index.ts index e8cce5584c..25d228111d 100644 --- a/dexs/zyberswap/index.ts +++ b/dexs/zyberswap/index.ts @@ -21,7 +21,7 @@ const graphs = getChainVolume({ }); const endpointsV3 = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/iliaazhel/zyberswap-info", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('7ZP9MeeuXno2y9pWR5LzA96UtYuZYWTA4WYZDZR7ghbN'), }; const graphsV3 = getChainVolume({ graphUrls: endpointsV3, @@ -37,7 +37,7 @@ const graphsV3 = getChainVolume({ }); const endpointsStable = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/zyberswap-arbitrum/zyber-stableamm" + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('H7QEsa69B3bbXZVtmqGaRZVUV8PCUqsKfqXGRb69LHa6') }; const graphsStable = getChainVolume({ diff --git a/fees/0vix.ts b/fees/0vix.ts index e58ffe6ea6..420a3998fc 100644 --- a/fees/0vix.ts +++ b/fees/0vix.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter, DISABLED_ADAPTER_KEY } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -9,7 +10,7 @@ import disabledAdapter from "../helpers/disabledAdapter"; const endpoints = { [CHAIN.POLYGON]: - "https://api.thegraph.com/subgraphs/name/0vix/ovix-lending-subgraph", + sdk.graph.modifyEndpoint('DRe1wuJiBQK3SWBQwah7sovvTRqBeqNrkzWNjjoWinh9'), [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/30443/0vix-zkevm/v0.0.1", }; diff --git a/fees/abracadabra.ts b/fees/abracadabra.ts index e629f878c1..b176b123e3 100644 --- a/fees/abracadabra.ts +++ b/fees/abracadabra.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -6,11 +7,11 @@ import { Chain } from '@defillama/sdk/build/general'; const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/ap0calyp/abracadabra-mainnet-fees", - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/ap0calyp/abracadabra-fantom-fees", - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/ap0calyp/abracadabra-avalanche-fees", - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/ap0calyp/abracadabra-binancesmartchain-fees", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/ap0calyp/abracadabra-arbitrum-fees" + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('ktva51TWWq7t1hLnTGb88toXYtpxFo6gZfUC5NRnd9m'), + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('CnY2wTox8Pxh5t1UskQahPhMQdmuTmTAgwU62scUA8uM'), + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('Ak8GFBj7XruiuMd4nV3vfNzButNsj3pF7ogSBq6qdKcq'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('2RsqpTn7JBLs2sU775C7ZcM7oUrcZmpDhTnUbFCJWLfV'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('ASL3E8FZLN5AKxFoagSb7i3kFkDkMfoRovmDDLZAY8t4') } type DataResponse = { diff --git a/fees/alchemix.ts b/fees/alchemix.ts index 7d3925add1..07f9c8daef 100644 --- a/fees/alchemix.ts +++ b/fees/alchemix.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -11,9 +12,9 @@ interface IData { } const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/alchemix-finance/alchemix_v2", - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/alchemix-finance/alchemix_v2_ftm", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/alchemix-finance/alchemix_v2_optimisim" + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('GJ9CJ66TgbJnXcXGuZiSYAdGNkJBAwqMcKHEvfVmCkdG'), + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('DezAiEADYFdotrBqB8BqXFMfzCczg7eXMLowvcBvwm9X'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('GYBJ8wsQFkSwcgCqhaxnz5RU2VbgedAkWUk2qx9gTnzr') }; const graph = (graphUrls: ChainEndpoints) => { diff --git a/fees/based-markets.ts b/fees/based-markets.ts index 4ca2883086..32ee0a695f 100644 --- a/fees/based-markets.ts +++ b/fees/based-markets.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { CHAIN } from "../helpers/chains"; import BigNumber from "bignumber.js"; import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; import { FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; -const endpoint = "https://api.thegraph.com/subgraphs/name/symmiograph/base_analytics_8" +const endpoint = sdk.graph.modifyEndpoint('9rrUvLtMMDLkSQeFdFza8pxea64hEaV3D8hxZYie1jpZ') const query = gql` query stats($from: String!, $to: String!) { diff --git a/fees/beamex.ts b/fees/beamex.ts index 851df70372..1baf18eef8 100644 --- a/fees/beamex.ts +++ b/fees/beamex.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { gql, request } from "graphql-request"; import { Adapter, ChainEndpoints } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; @@ -5,7 +6,7 @@ import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpointsBeamex: ChainEndpoints = { [CHAIN.MOONBEAN]: - "https://api.thegraph.com/subgraphs/name/flisko/stats-moonbeam", + sdk.graph.modifyEndpoint('4qhrYgYvHTHTjWN6NFr2UfBz1HaUAAgoqx52nN2MyG3K'), }; const methodologyBeamex = { diff --git a/fees/beamswap-v3.ts b/fees/beamswap-v3.ts index 6a42674b77..433c190b57 100644 --- a/fees/beamswap-v3.ts +++ b/fees/beamswap-v3.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"; @@ -20,7 +21,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.MOONBEAM]: "https://api.thegraph.com/subgraphs/name/beamswap/beamswap-v3", + [CHAIN.MOONBEAM]: sdk.graph.modifyEndpoint('2YnTZfQmenjvJ3bihewLGgAKnyqjrMWrStux8ZFE7ee6'), } const fetch = (chain: Chain) => { diff --git a/fees/beamswap.ts b/fees/beamswap.ts index 88009d3e7b..47d0f43f17 100644 --- a/fees/beamswap.ts +++ b/fees/beamswap.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter, ChainEndpoints } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; @@ -10,12 +11,12 @@ const PROTOCOL_FEES = 0.0013; const endpoints: ChainEndpoints = { [CHAIN.MOONBEAN]: - "https://api.thegraph.com/subgraphs/name/beamswap/beamswap-dex-v2", + sdk.graph.modifyEndpoint('9CwTvN5R8sztZSBZqbDZWcHZjM41RRiz63QmRMsJBn6X'), }; const volumeAdapter = univ2Adapter({ - [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/beamswap/beamswap-dex-v2", + [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint('9CwTvN5R8sztZSBZqbDZWcHZjM41RRiz63QmRMsJBn6X'), }, {}); volumeAdapter.adapter.moonbeam.start = getStartTimestamp({ diff --git a/fees/betswirl/index.ts b/fees/betswirl/index.ts index f6616c9117..d57a2eaf5e 100644 --- a/fees/betswirl/index.ts +++ b/fees/betswirl/index.ts @@ -5,11 +5,11 @@ import { BSC, POLYGON, AVAX, ARBITRUM } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; const endpoints: any = { - [BSC]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-bnb", + [BSC]: sdk.graph.modifyEndpoint('DhivnGkd3FnqgEDpBi8xP2QeqdBB1LWjakwdL7W6KJoE'), [POLYGON]: sdk.graph.modifyEndpoint('FL3ePDCBbShPvfRJTaSCNnehiqxsPHzpLud6CpbHoeKW'), - [AVAX]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-avalanche", - [ARBITRUM]: "https://api.thegraph.com/subgraphs/name/betswirl/betswirl-arbitrum", + [AVAX]: sdk.graph.modifyEndpoint('WicBtHWBzT58U45mCh9QEBRib1ieqt86yiNkXvPdkEN'), + [ARBITRUM]: sdk.graph.modifyEndpoint('8awdcK7DwcmmamNBHxobxpxMyRFkoQpF678rHsqB1yJq'), }; interface IToken { diff --git a/fees/clipper.ts b/fees/clipper.ts index a91ef74017..7d3cc9e30f 100644 --- a/fees/clipper.ts +++ b/fees/clipper.ts @@ -10,10 +10,10 @@ type TEndpoint = { } const endpoints: TEndpoint = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-mainnet", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-optimism", - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-polygon", - // [CHAIN.MOONBEAN]: "https://api.thegraph.com/subgraphs/name/edoapp/clipper-moonbeam", + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('2BhN8mygHMmRkceMmod7CEEsGkcxh91ExRbEfRVkpVGM'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('Cu6atAfi6uR9mLMEBBjkhKSUUXHCobbB83ctdooexQ9f'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('Brmf2gRdpLFsEF6YjSAMVrXqSfbhsaaWaWzdCYjE7iYY'), + // [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint('8zRk4WV9vUU79is2tYGWq9GKh97f93LsZ8V9wy1jSMvA'), [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W'), }; diff --git a/fees/compound.ts b/fees/compound.ts index c8f23e9fed..662a9c8f04 100644 --- a/fees/compound.ts +++ b/fees/compound.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -10,7 +11,7 @@ import { getTimestampAtStartOfPreviousDayUTC, getTimestampAtStartOfDayUTC } from const endpoints = { [ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/messari/compound-v2-ethereum" + sdk.graph.modifyEndpoint('Rh7h4KeZCnJZoBv3nZ4K8occAXEnwxRkR6pTKDsN3Fj') } diff --git a/fees/convex.ts b/fees/convex.ts index 11eacffa8a..d9ab9a5edf 100644 --- a/fees/convex.ts +++ b/fees/convex.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import {Adapter} from "../adapters/types"; import {ETHEREUM} from "../helpers/chains"; import {request, gql} from "graphql-request"; @@ -8,7 +9,7 @@ import BigNumber from "bignumber.js"; const endpoints = { [ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/convex-community/convex", + sdk.graph.modifyEndpoint('2jMwDRmUtTRAw9w3nMuZZPQtC97Ro28nLdJFWnFQnJdz'), }; diff --git a/fees/covo-finance.ts b/fees/covo-finance.ts index bb1f926757..5b3dcaede0 100644 --- a/fees/covo-finance.ts +++ b/fees/covo-finance.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { POLYGON, AVAX } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -6,7 +7,7 @@ import { Chain } from '@defillama/sdk/build/general'; import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints = { - [POLYGON]: "https://api.thegraph.com/subgraphs/name/defi-techz/graphordertst", + [POLYGON]: sdk.graph.modifyEndpoint('CvqFU9sqzqpdNJMyJri2J9LjUjkzdjQZDGwdvzf1naXH'), } let dailyFee= 0; diff --git a/fees/covo-v2.ts b/fees/covo-v2.ts index e22161c733..6b6ebeb8cd 100644 --- a/fees/covo-v2.ts +++ b/fees/covo-v2.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { POLYGON, AVAX } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -6,7 +7,7 @@ import { Chain } from '@defillama/sdk/build/general'; import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints = { - [POLYGON]: "https://api.thegraph.com/subgraphs/name/defi-techz/covo-v2", + [POLYGON]: sdk.graph.modifyEndpoint('B8469Fs5athX6XeADT1LUYLKpcupEpWumfRuMbQw6cXs'), } let dailyFee= 0; diff --git a/fees/el-dorado-exchange.ts b/fees/el-dorado-exchange.ts index d788a42fd9..460416e99f 100644 --- a/fees/el-dorado-exchange.ts +++ b/fees/el-dorado-exchange.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { gql, request } from "graphql-request"; import type { ChainEndpoints } from "../adapters/types"; @@ -7,8 +8,8 @@ import { getTimestampAtStartOfDayUTC } from "../utils/date"; import disabledAdapter from "../helpers/disabledAdapter"; const endpoints = { - // [BSC]: "https://api.thegraph.com/subgraphs/name/metaverseblock/ede_stats_elpall_test", - [ARBITRUM]: "https://api.thegraph.com/subgraphs/name/metaverseblock/ede_state_elp1_arbitrimone", + // [BSC]: sdk.graph.modifyEndpoint('FiegiatdkorjPCvK72UyHvmJHvWtS3oQS6zwnR94Xe7c'), + [ARBITRUM]: sdk.graph.modifyEndpoint('G3wquxtaw68uX5GAZ7XBPWK8Fa7Buf66Y27uT8erqQZ4'), }; const graphs = (graphUrls: ChainEndpoints) => { diff --git a/fees/frax-amo.ts b/fees/frax-amo.ts index a3090bfb1a..2c5dac76ae 100644 --- a/fees/frax-amo.ts +++ b/fees/frax-amo.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { gql, GraphQLClient } from "graphql-request"; import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; @@ -70,7 +71,7 @@ const config: { [CHAIN.ETHEREUM]: { FRAX: "0x853d955aCEf822Db058eb8505911ED77F175b99e", graph: - "https://api.thegraph.com/subgraphs/name/frax-finance-data/amo-subgraph---mainnet", + sdk.graph.modifyEndpoint('5pkNZTvdKuik24p8xtHctfaHcmNghNqb4ANo2BfQVefZ'), amos: [ // '0x49ee75278820f409ecd67063D8D717B38d66bd71', // curve // '0x629C473e0E698FD101496E5fbDA4bcB58DA78dC4', // twaamm @@ -82,7 +83,7 @@ const config: { [CHAIN.ARBITRUM]: { FRAX: "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F", graph: - "https://api.thegraph.com/subgraphs/name/frax-finance-data/amo-subgraph---arbitrum", + sdk.graph.modifyEndpoint('4zJMfZFyGvqbKyyyeVs4qE15BaEuwr5DLLZiSLhJzBNs'), amos: [ "0xCDeE1B853AD2E96921250775b7A60D6ff78fD8B4", // v3 ], diff --git a/fees/get-protocol.ts b/fees/get-protocol.ts index 793fd1cdd2..79df0cb7db 100644 --- a/fees/get-protocol.ts +++ b/fees/get-protocol.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { Adapter, ChainBlocks, FetchOptions } from "../adapters/types"; import { POLYGON } from "../helpers/chains"; import { request, gql } from "graphql-request"; -const PROTOCOL_SUBGRAPH = "https://api.thegraph.com/subgraphs/name/getprotocol/get-protocol-subgraph"; -const TOKEN_SUBGRAPH_POLYGON = "https://api.thegraph.com/subgraphs/name/getprotocol/get-token-polygon"; -const TOKEN_SUBGRAPH_ETHEREUM = "https://api.thegraph.com/subgraphs/name/getprotocol/get-token-ethereum"; +const PROTOCOL_SUBGRAPH = sdk.graph.modifyEndpoint('5CW9dVhyCBHhhxpaEwqtZrfGms3gSYnGQKpqULsu4qSU'); +const TOKEN_SUBGRAPH_POLYGON = sdk.graph.modifyEndpoint('EjxRk3KsW58veQVZaeKNFk9G7qo56hTJh98bcFJEY5HS'); +const TOKEN_SUBGRAPH_ETHEREUM = sdk.graph.modifyEndpoint('HGzbNN7tVyE3eT3uJbZuyMo9Vtf59uAGieLcNXvp94pA'); const PRICE_ID = "get-token"; const sumKeys = (keys: string[], obj: any) => keys.reduce((tally: number, key: string) => tally + (obj[key] || 0), 0); diff --git a/fees/grizzly-trade.ts b/fees/grizzly-trade.ts index ca8faf7b29..cb9d8fa9ec 100644 --- a/fees/grizzly-trade.ts +++ b/fees/grizzly-trade.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter, DISABLED_ADAPTER_KEY } from "../adapters/types"; import { ARBITRUM, AVAX, BSC } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -7,7 +8,7 @@ import { getTimestampAtStartOfDayUTC } from "../utils/date"; import disabledAdapter from "../helpers/disabledAdapter"; const endpoints = { - [BSC]: "https://api.thegraph.com/subgraphs/name/metavault-trade/grizzly-bnb-subgraph" + [BSC]: sdk.graph.modifyEndpoint('3CUU9roJ9PsMdijcBdaCBRHhTUBobLeDLyMW4QF2XNmn') } const methodology = { diff --git a/fees/immortalx/index.ts b/fees/immortalx/index.ts index 53e4fd4c41..d61388cd97 100644 --- a/fees/immortalx/index.ts +++ b/fees/immortalx/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; import { Adapter, FetchOptions } from "../../adapters/types"; @@ -17,7 +18,7 @@ type IURL = { }; const endpoints: IURL = { - [CHAIN.CELO]: "https://api.thegraph.com/subgraphs/name/immortalx-io/immortalx", + [CHAIN.CELO]: sdk.graph.modifyEndpoint('DGN3dMffNnXZRAHFyCAq3csJbe2o7g9Jdg2XHe2mzVdG'), }; const fetch = (chain: Chain) => { diff --git a/fees/keller-cl/index.ts b/fees/keller-cl/index.ts index b62db9b29b..d55fe5cf4f 100644 --- a/fees/keller-cl/index.ts +++ b/fees/keller-cl/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter, FetchOptions, FetchResultFees, SimpleAdapter } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains'; import { Chain } from "@defillama/sdk/build/general"; @@ -16,7 +17,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.SCROLL]: "https://api.thegraph.com/subgraphs/name/bitdeep/keller-cl", + [CHAIN.SCROLL]: sdk.graph.modifyEndpoint('Fc28kX4ZY93J1hx4zv6JJSg1d3auz1j2HWHEvbkAZ9Qc'), } const fetch = (chain: Chain) => { return async (timestamp: any): Promise => { diff --git a/fees/kyberswap.ts b/fees/kyberswap.ts index 3fb5abc7a6..d70c610e1f 100644 --- a/fees/kyberswap.ts +++ b/fees/kyberswap.ts @@ -28,8 +28,8 @@ const elasticEndpoints: TEndpoint = elasticChains.reduce((acc, chain) => ({ [chain]: `https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-${normalizeChain[chain] ?? chain}`, ...acc, }), { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-mainnet", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum-one", + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('4U9PxDR4asVvfXyoVy18fhuj6NHnQhLzZkjZ5Bmuc5xk'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('C36tj8jSpEHxcNbjM3z7ayUZHVjrk4HRqnpGMFuRgXs6'), [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT'), [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", [CHAIN.BITTORRENT]: "https://bttc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bttc", diff --git a/fees/kyotoswap.ts b/fees/kyotoswap.ts index 1f597c37f7..15ef9b3f38 100644 --- a/fees/kyotoswap.ts +++ b/fees/kyotoswap.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { getDexChainFees } from "../helpers/getUniSubgraphFees"; import volumeAdapter from "../dexs/spookyswap"; import { @@ -12,7 +13,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints = { [CHAIN.BSC]: - "https://api.thegraph.com/subgraphs/name/miguelangelrm/kyotoswap-exchange", + sdk.graph.modifyEndpoint('B1VWKexyptT1ixDdHsxj3EJnAxvuje7ANT39rnfq9rRG'), }; const graphs = getGraphDimensions({ diff --git a/fees/level-finance.ts b/fees/level-finance.ts index feb215d280..5fcae3b9cd 100644 --- a/fees/level-finance.ts +++ b/fees/level-finance.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import BigNumber from 'bignumber.js' import { Chain } from '@defillama/sdk/build/general' import { gql, GraphQLClient } from 'graphql-request' @@ -7,8 +8,8 @@ import { BSC, ARBITRUM } from '../helpers/chains' import { getBlock } from '../helpers/getBlock' const endpoints = { - [BSC]: 'https://api.thegraph.com/subgraphs/name/level-fi/levelfinanceanalytics', - [ARBITRUM]: 'https://api.thegraph.com/subgraphs/name/level-fi/analytics-arb', + [BSC]: sdk.graph.modifyEndpoint('AFaRssJTqNReTtU2XdTGPhN38YVPNBc7faMNKA1mU54h'), + [ARBITRUM]: sdk.graph.modifyEndpoint('AV58XWaZUZPJ2w1x2wYmGEivVZmDojGW3fAYggUAujtD'), } const graphs = (graphUrls: ChainEndpoints) => { diff --git a/fees/lido.ts b/fees/lido.ts index 9f7e76ef82..3c81250cc7 100644 --- a/fees/lido.ts +++ b/fees/lido.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -7,7 +8,7 @@ import { getTimestampAtStartOfDayUTC } from "../utils/date"; import BigNumber from "bignumber.js"; const endpoints = { - [ETHEREUM]: "https://api.thegraph.com/subgraphs/name/messari/lido-ethereum", + [ETHEREUM]: sdk.graph.modifyEndpoint('C3ahLtmwYjrPsxgJpKtRieLFyT33FWSxfPcUFXFBo6KW'), } const graphs = (graphUrls: ChainEndpoints) => { diff --git a/fees/liondex/index.ts b/fees/liondex/index.ts index 9fc4d8870e..27b4273dfa 100644 --- a/fees/liondex/index.ts +++ b/fees/liondex/index.ts @@ -8,7 +8,7 @@ import disabledAdapter from "../../helpers/disabledAdapter"; const endpoints = { [ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/liondextrade/finance", + sdk.graph.modifyEndpoint('EDnnTmgZVXAywK9ujCbwhi2hNhuaLAgeSvRL7dPAsV13'), }; const methodology = { diff --git a/fees/llamalend.ts b/fees/llamalend.ts index 6c07ac9ad0..aa2f149f7c 100644 --- a/fees/llamalend.ts +++ b/fees/llamalend.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, } from "graphql-request"; @@ -5,7 +6,7 @@ import type { ChainBlocks, ChainEndpoints, FetchOptions } from "../adapters/type import { Chain } from '@defillama/sdk/build/general'; const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/0xngmi/llamalend", + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('7cG6NVPRm4CQmfVsh4d1bYGqaWNazRyVTn3xuvdDRNPi'), } const ONE_DAY_IN_SECONDS = 60 * 60 * 24 diff --git a/fees/makerdao.ts b/fees/makerdao.ts index 357809a4e4..2b3dbdba69 100644 --- a/fees/makerdao.ts +++ b/fees/makerdao.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -9,7 +10,7 @@ const RAY = new BigNumber(10).pow(27); const endpoints = { [ETHEREUM]: - "https://api.thegraph.com/subgraphs/name/protofire/maker-protocol" + sdk.graph.modifyEndpoint('CLddaQxuXLjpzyyA67FMmNjmyX74yQDQZEAsytoQTtCD') } // Source: https://makerburn.com/#/rundown diff --git a/fees/metavault-derivatives-v2/index.ts b/fees/metavault-derivatives-v2/index.ts index f7a61670b4..9dc50a70cd 100644 --- a/fees/metavault-derivatives-v2/index.ts +++ b/fees/metavault-derivatives-v2/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { gql, request } from "graphql-request"; import type { ChainEndpoints } from "../../adapters/types"; @@ -10,7 +11,7 @@ const endpoints: ChainEndpoints = { [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/55804/linea-trade/version/latest", [CHAIN.POLYGON]: - "https://api.thegraph.com/subgraphs/name/sdcrypt0/polygon-trade", + sdk.graph.modifyEndpoint('GAvL1WKMAVDdnSk96qvmSCMwL6pxfhAVYkQw6AgZU3td'), }; interface IFeeStat { cumulativeFeeUsd: string; diff --git a/fees/metavault.trade/index.ts b/fees/metavault.trade/index.ts index 15422e423a..ab4dcb855d 100644 --- a/fees/metavault.trade/index.ts +++ b/fees/metavault.trade/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { gql, request } from "graphql-request"; import type { ChainEndpoints } from "../../adapters/types"; @@ -6,7 +7,7 @@ import { POLYGON } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints = { - [POLYGON]: "https://api.thegraph.com/subgraphs/name/sdcrypt0/metavault-mvx-subgraph", + [POLYGON]: sdk.graph.modifyEndpoint('BMn9XsegbLxw9TL6uyw5NntoiGRyMqRpF2vShkKzusJ3'), }; const graphs = (graphUrls: ChainEndpoints) => { diff --git a/fees/moonwell-apollo.ts b/fees/moonwell-apollo.ts index fad4431927..028a11e624 100644 --- a/fees/moonwell-apollo.ts +++ b/fees/moonwell-apollo.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -7,7 +8,7 @@ import BigNumber from "bignumber.js"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints = { - [CHAIN.MOONRIVER]: "https://api.thegraph.com/subgraphs/name/messari/moonwell-moonriver" + [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('9JAn68UTLzUqkyXSqifMbeQH7pkHQ6hmpeuqsnSgKxLE') } diff --git a/fees/morphex-old.ts b/fees/morphex-old.ts index 7415b911fe..a16dce32b0 100644 --- a/fees/morphex-old.ts +++ b/fees/morphex-old.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -5,7 +6,7 @@ import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints: { [key: string]: string } = { [CHAIN.FANTOM]: - "https://api.thegraph.com/subgraphs/name/morphex-labs/morphex-fantom-stats", + sdk.graph.modifyEndpoint('EH6ZfhnYQd7Kv1SdnUAp96vMUWKCTfPrctwududH5cmG'), }; const methodology = { diff --git a/fees/morphex.ts b/fees/morphex.ts index 1e61ece73b..3d90bcd7c3 100644 --- a/fees/morphex.ts +++ b/fees/morphex.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; @@ -5,9 +6,9 @@ import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints: { [key: string]: string } = { [CHAIN.FANTOM]: - "https://api.thegraph.com/subgraphs/name/morphex-labs/morphex-fantom-stats-new", + sdk.graph.modifyEndpoint('6GjHurahqYLUUYkqfCgrWfcH2pfTEFPtPvCPvQ1BHLed'), [CHAIN.BSC]: - "https://api.thegraph.com/subgraphs/name/morphex-labs/morphex-bsc-stats", + sdk.graph.modifyEndpoint('4Zdyx9D4oYLGSm1C26jpTU7Ho7ecswEuTPg3WANGkMTx'), }; const methodology = { diff --git a/fees/mummy-finance.ts b/fees/mummy-finance.ts index b85232639b..0cd0eed89b 100644 --- a/fees/mummy-finance.ts +++ b/fees/mummy-finance.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { Fetch, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; @@ -7,8 +8,8 @@ import { Chain } from "@defillama/sdk/build/general"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints: { [key: string]: string } = { - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/mummyfinance/fantom-stats-v2", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/mummyfinance/op-stats", + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('8LdLE9Aan39FQCcHX3x1HdnNzoZzPvxskhj1utLb2SA9'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('6dZD4zDx9bGZfRdgoUBsZjWBygYVXAe4G41LjTLNJWk1'), }; const historicalDataSwap = gql` diff --git a/fees/opensea/index.ts b/fees/opensea/index.ts index ce1d971d6d..c939966ed6 100644 --- a/fees/opensea/index.ts +++ b/fees/opensea/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter, DISABLED_ADAPTER_KEY } from "../../adapters/types"; import type { ChainEndpoints } from "../../adapters/types" import { Chain } from '@defillama/sdk/build/general'; @@ -7,7 +8,7 @@ import { fetch } from "./seaport"; import disabledAdapter from "../../helpers/disabledAdapter"; const seaportEndpoints = { - [CHAIN.ETHEREUM]: 'https://api.thegraph.com/subgraphs/name/messari/opensea-seaport-ethereum', + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('kGCuz7xhxMuyRSk8QdnUgijUEqgvhGwkzAVHkbYedCk'), } const graphs = (_: ChainEndpoints) => { diff --git a/fees/optionBlitz/index.ts b/fees/optionBlitz/index.ts index 62ed0d4d41..37a70b2bc5 100644 --- a/fees/optionBlitz/index.ts +++ b/fees/optionBlitz/index.ts @@ -17,7 +17,7 @@ interface ITotalDataGraph { timestamp: string; } -const URL = "https://api.thegraph.com/subgraphs/name/web3dev00/optionblitz"; +const URL = sdk.graph.modifyEndpoint('5m8N5qAkDWTf2hhMFhJJJDsWWF5b9J7bzFbXwPnZHJQQ'); const fetch = async (timestamp: number): Promise => { const dayTimestamp = getTimestampAtStartOfDay(timestamp); diff --git a/fees/pharaoh-exchange.ts b/fees/pharaoh-exchange.ts index bffdda48ec..5c3330ea85 100644 --- a/fees/pharaoh-exchange.ts +++ b/fees/pharaoh-exchange.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { SimpleAdapter, FetchResultFees, BaseAdapter } from "../adapters/types"; import { AVAX, CHAIN } from "../helpers/chains"; @@ -16,7 +17,7 @@ const startTimeV2: TStartTime = { const v2Endpoints = { [CHAIN.AVAX]: - "https://api.thegraph.com/subgraphs/name/ramsesexchange/pharaoh-cl-subgraph", + sdk.graph.modifyEndpoint('oM4WnuyAbSwPpjk6niUkp88AZg1hSTi9aC1ZM4RcsqR'), }; const VOLUME_USD = "volumeUSD"; diff --git a/fees/predy-finance/index.ts b/fees/predy-finance/index.ts index a0a6ff0b35..58b513214f 100644 --- a/fees/predy-finance/index.ts +++ b/fees/predy-finance/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import ADDRESSES from '../../helpers/coreAssets.json' import { Chain } from "@defillama/sdk/build/general"; import BigNumber from "bignumber.js"; @@ -11,17 +12,17 @@ import disabledAdapter from "../../helpers/disabledAdapter"; const v3endpoints = { [CHAIN.ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/predy-dev/predyv3arbitrum", + sdk.graph.modifyEndpoint('4ZDgpHaNhFWKFvUZ9ND4hsWjsz3vR2osCZyrkun3GghM'), }; const v320endpoints = { [CHAIN.ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/predy-dev/predy-v320-arbitrum", + sdk.graph.modifyEndpoint('5icuXT29ipuwqJBF1qux8eA1zskVazyYNq9NzQvoB6eS'), }; const v5endpoints = { [CHAIN.ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/predy-dev/predy-v4-arbitrum", + sdk.graph.modifyEndpoint('GxfTCbMfhaBSJaXHj88Ja1iVG9CXwGWhVQsQ8YA7oLdo'), }; const USDC_DECIMAL = 1e6; diff --git a/fees/reserve/index.ts b/fees/reserve/index.ts index ed5c69a3d7..c9a0d66494 100644 --- a/fees/reserve/index.ts +++ b/fees/reserve/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import request from "graphql-request"; @@ -11,7 +12,7 @@ const rtokenCreationAbi = "event RTokenCreated(address indexed main, address indexed rToken, address stRSR, address indexed owner, string version)"; const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/lcamargof/reserve", + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('BT7YCEWL7JHbEBD9WXWmtMSzCuW6YXisWTqHPVb4u6uC'), }; const graphQuery = ` diff --git a/fees/solidly-v3.ts b/fees/solidly-v3.ts index 6c59f60801..ba0b6f7903 100644 --- a/fees/solidly-v3.ts +++ b/fees/solidly-v3.ts @@ -19,9 +19,9 @@ type IURL = { const endpoints: IURL = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t'), // [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-optimism", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-arbitrum", - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/solidlylabs/solidly-v3-fantom" + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('HCThb3gJC45qUYmNEaYmZZTqJW3pSq7X6tb4MqNHEvZf'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('ALCsbp7jWC6EQjwgicvZkG6dDEFGMV32QUZJvJGqL9Kx'), + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('HDNu25S2uqr13BHrQdPv2PfTpwxJgPB7QEnC8fsgKcM9') } const fetch = (chain: Chain) => { diff --git a/fees/solidlydex.ts b/fees/solidlydex.ts index 62da349ea6..3da775c230 100644 --- a/fees/solidlydex.ts +++ b/fees/solidlydex.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { Adapter, FetchResultFees } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; @@ -5,7 +6,7 @@ import { getBlock } from "../helpers/getBlock"; import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../utils/date"; -const URL = "https://api.thegraph.com/subgraphs/name/0xc30/solidly"; +const URL = sdk.graph.modifyEndpoint('4GX8RE9TzEWormbkayeGj4NQmmhYE46izVVUvXv8WPDh'); interface IPair { id: string; fee: string; diff --git a/fees/substanceX/index.ts b/fees/substanceX/index.ts index 09c1a84cdf..eee8bc78b7 100644 --- a/fees/substanceX/index.ts +++ b/fees/substanceX/index.ts @@ -7,7 +7,7 @@ import { Chain } from "@defillama/sdk/build/general"; const endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/substanceexchangedevelop/coreprod", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('HETFHppem3dz1Yjjv53D7K98dm5t5TErgYAMPBFPHVpi'), [CHAIN.ZETA]: "https://gql-zeta.substancex.io/subgraphs/name/substanceexchangedevelop/zeta" }; diff --git a/fees/swych/index.ts b/fees/swych/index.ts index 0cc08b7f2b..4fdb7ffc55 100644 --- a/fees/swych/index.ts +++ b/fees/swych/index.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import {Adapter, FetchOptions, FetchResultFees} from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import axios from "axios"; export const SUBGRAPHS = { - pdex: "https://api.thegraph.com/subgraphs/name/crypnosis/swych-pdex-v1", + pdex: sdk.graph.modifyEndpoint('6tn8tNYxKCEM5bTceMfA5jeGm3gtCrUGDwbKN7QGGat4'), }; const contractAddresses = { diff --git a/fees/thena-perp.ts b/fees/thena-perp.ts index cdde02246d..2224e2dfdf 100644 --- a/fees/thena-perp.ts +++ b/fees/thena-perp.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { CHAIN } from "../helpers/chains"; import BigNumber from "bignumber.js"; @@ -6,7 +7,7 @@ import { FetchResultFees, SimpleAdapter } from "../adapters/types"; const ONE_DAY_IN_SECONDS = 60 * 60 * 24 -const endpoint = "https://api.thegraph.com/subgraphs/name/navid-fkh/symmetrical_bsc" +const endpoint = sdk.graph.modifyEndpoint('79T7bT3tnBWmFPukyDdEY4mqHWrYTaJtzgoz6ufzC9xN') const query = gql` query stats($from: String!, $to: String!) { diff --git a/fees/valorem/constants.ts b/fees/valorem/constants.ts index 2d4d7b2b3f..08c87eee7a 100644 --- a/fees/valorem/constants.ts +++ b/fees/valorem/constants.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { ChainEndpoints } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; export const endpoints: ChainEndpoints = { [CHAIN.ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/valorem-labs-inc/valorem-v1-arbitrum", + sdk.graph.modifyEndpoint('2cwenw6DXZBaSAQWvDVGqxrjbpnGR3JShhgySEvMJtBJ'), }; export const methodology = { diff --git a/fees/vela/index.ts b/fees/vela/index.ts index 8b21413a11..9a45bd692b 100644 --- a/fees/vela/index.ts +++ b/fees/vela/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Adapter } from "../../adapters/types"; import { ARBITRUM, AVAX } from "../../helpers/chains"; import { request, gql } from "graphql-request"; @@ -7,7 +8,7 @@ import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints = { [ARBITRUM]: - "https://api.thegraph.com/subgraphs/name/velaexchange/vela-exchange-official", + sdk.graph.modifyEndpoint('6H9PEiNPZgwXfpbijjesZh96LFBzUvkHmEutMoYQ9fvp'), }; const methodology = { diff --git a/fees/velodrome/velodrome.ts b/fees/velodrome/velodrome.ts index 056c914382..3c2a772870 100644 --- a/fees/velodrome/velodrome.ts +++ b/fees/velodrome/velodrome.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; import { FetchOptions } from "../../adapters/types"; import BigNumber from "bignumber.js"; @@ -5,7 +6,7 @@ import BigNumber from "bignumber.js"; const STABLE_FEES = 0.0002; const VOLATILE_FEES = 0.0005; const endpoint = - "https://api.thegraph.com/subgraphs/name/dmihal/velodrome"; + sdk.graph.modifyEndpoint('2bam2XEb91cFqABFPSKj3RiSjpop9HvDt1MnYq5cDX5E'); export const fetchV1 = () => { return async ({ getToBlock, getFromBlock }: FetchOptions) => { diff --git a/fees/voodoo-trade.ts b/fees/voodoo-trade.ts index 1f495b4e98..324b3d9fe2 100644 --- a/fees/voodoo-trade.ts +++ b/fees/voodoo-trade.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; /// Project URL: https://voodoo.trade /// Contact: chickenjuju@proton.me /// @@ -17,7 +18,7 @@ import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; // Smart contract pads values with 10^30. I.e. 10 USD is stored as 10 * 10^30 const DECIMAL_PLACES = BigInt(10)**BigInt(30); -const graphQLClient = new GraphQLClient("https://api.thegraph.com/subgraphs/name/chicken-juju/voodoo-base-stats"); +const graphQLClient = new GraphQLClient(sdk.graph.modifyEndpoint('6eeKiwCJQECCwhE7doeoKCAqSK7VatCsv3piHomYzi6o')); const GET_FEE_BY_ID = gql`query getFeeById($id: ID!) { feeStat(id: $id) { diff --git a/fees/wigoswap.ts b/fees/wigoswap.ts index d7abea453e..557a55c46b 100644 --- a/fees/wigoswap.ts +++ b/fees/wigoswap.ts @@ -1,9 +1,10 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../helpers/chains"; import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; const adapters = univ2DimensionAdapter({ graphUrls: { - [CHAIN.FANTOM]: "https://api.thegraph.com/subgraphs/name/wigoswap/exchange2" + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('71os49womDk3DFcNRCAFYzATxxMgWpSMKhRn5ih6aWF1') }, dailyVolume: { factory: "wigoDayData" diff --git a/fees/zyberswap.ts b/fees/zyberswap.ts index ae683412f2..f693284f26 100644 --- a/fees/zyberswap.ts +++ b/fees/zyberswap.ts @@ -25,7 +25,7 @@ const v2Graph = getGraphDimensions({ }); const v3Endpoints = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/iliaazhel/zyberswap-info", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('7ZP9MeeuXno2y9pWR5LzA96UtYuZYWTA4WYZDZR7ghbN'), } const v3Graphs = getGraphDimensions({ graphUrls: v3Endpoints, @@ -54,7 +54,7 @@ const v3Graphs = getGraphDimensions({ }); const endpointsStable = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/zyberswap-arbitrum/zyber-stableamm" + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('H7QEsa69B3bbXZVtmqGaRZVUV8PCUqsKfqXGRb69LHa6') }; const stableGraph = getGraphDimensions({ diff --git a/options/optionBlitz/index.ts b/options/optionBlitz/index.ts index 82db7c7421..5bde00e5af 100644 --- a/options/optionBlitz/index.ts +++ b/options/optionBlitz/index.ts @@ -16,7 +16,7 @@ interface ITotalDataGraph { timestamp: string; } -const URL = "https://api.thegraph.com/subgraphs/name/web3dev00/optionblitz"; +const URL = sdk.graph.modifyEndpoint('5m8N5qAkDWTf2hhMFhJJJDsWWF5b9J7bzFbXwPnZHJQQ'); const fetch = async (timestamp: number): Promise => { const dayTimestamp = getTimestampAtStartOfDay(timestamp); diff --git a/options/opyn/index.ts b/options/opyn/index.ts index eab6ce4954..fa58a9496a 100644 --- a/options/opyn/index.ts +++ b/options/opyn/index.ts @@ -55,7 +55,7 @@ query trades($timestampFrom: Int!, $timestampTo: Int!) { ` const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/opynfinance/gamma-mainnet", + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('6CYUucsekksXD3BRvwz9MPgLcytmrJEKFi9bhRT3trnt'), }; const fetch: Fetch = async (timestamp) => { diff --git a/options/thales/getChainData.ts b/options/thales/getChainData.ts index 340b8912e9..ca4a729c03 100644 --- a/options/thales/getChainData.ts +++ b/options/thales/getChainData.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { request, gql } from "graphql-request"; export const MIN_TIMESTAMP = 1640217600; const SPORT_MIN_TIMESTAMP = 1659312000; -const SPORT_ENDPOINT = "https://api.thegraph.com/subgraphs/name/thales-markets/sport-markets-optimism"; +const SPORT_ENDPOINT = sdk.graph.modifyEndpoint('GNVg7vqPeoaqDARvssvwCUaLfizACsrmeFFCpZd4VBDq'); type Volume = { timestamp: number diff --git a/options/thales/index.ts b/options/thales/index.ts index 353385672a..a92420069f 100644 --- a/options/thales/index.ts +++ b/options/thales/index.ts @@ -1,11 +1,12 @@ +import * as sdk from "@defillama/sdk"; import { ChainEndpoints, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import getChainData, { MIN_TIMESTAMP } from "./getChainData"; const endpoints: ChainEndpoints = { - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/thales-markets/thales-markets", - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/thales-markets/thales-polygon", - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/thales-markets/thales-arbitrum", + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('GADfDRePpbqyjK2Y3JkQTBPBVQj98imhgKo7oRWW7RqQ'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('G7wi71W3PdtYYidKy5pEmJvJ1Xpop25ogynstRjPdyPG'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('FZH9ySiLCdqKrwefaospe6seSqV1ZoW4FvPQUGP7MFob'), [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/thales-markets/thales-bsc", }; diff --git a/protocols/alita-finance/index.ts b/protocols/alita-finance/index.ts index e254015c94..f9711cf497 100644 --- a/protocols/alita-finance/index.ts +++ b/protocols/alita-finance/index.ts @@ -1,10 +1,11 @@ +import * as sdk from "@defillama/sdk"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import { univ2DimensionAdapter } from "../../helpers/getUniSubgraph"; const adapter = univ2DimensionAdapter({ graphUrls: { - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/alita-finance/exchangev2" + [CHAIN.BSC]: sdk.graph.modifyEndpoint('FBPHPJNE1jX18Lz8rgscvsigfxAUXakUC8w9KMid4dDz') }, feesPercent: { type: "volume", diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index f79135beee..5f11a5b704 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -66,12 +66,12 @@ const KEY = 'a265c39f5a123ab2d40b25dc352adc22' const v3Endpoints = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('5AXe97hGLfjgFAc6Xvg6uDpsD5hqpxrxcma9MoxG7j7h'), - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-optmism-regen", + [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]: "https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-avax", + // [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" }; From 3ab43b75ed0d176cfe53cd988445d858ebe2bc6d Mon Sep 17 00:00:00 2001 From: slasher125 Date: Thu, 13 Jun 2024 14:55:54 +0400 Subject: [PATCH 0787/1590] more changes --- dexs/camelot-v3/index.ts | 1 - dexs/camelot/index.ts | 1 - dexs/contango/index.ts | 11 ++++++----- dexs/dragonswap-sei/index.ts | 1 - dexs/shibaswap/index.ts | 3 ++- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/dexs/camelot-v3/index.ts b/dexs/camelot-v3/index.ts index 46fad542d0..8e417947d3 100644 --- a/dexs/camelot-v3/index.ts +++ b/dexs/camelot-v3/index.ts @@ -1,5 +1,4 @@ import * as sdk from "@defillama/sdk"; -// https://api.thegraph.com/subgraphs/name/camelotlabs/camelot-amm-2 import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; diff --git a/dexs/camelot/index.ts b/dexs/camelot/index.ts index f1a7553d37..f043d22569 100644 --- a/dexs/camelot/index.ts +++ b/dexs/camelot/index.ts @@ -1,5 +1,4 @@ import * as sdk from "@defillama/sdk"; -// https://api.thegraph.com/subgraphs/name/camelotlabs/camelot-amm-2 import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; diff --git a/dexs/contango/index.ts b/dexs/contango/index.ts index 1cf619c117..a3aab7af06 100644 --- a/dexs/contango/index.ts +++ b/dexs/contango/index.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import request from "graphql-request"; import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -10,12 +11,12 @@ type IEndpoint = { } const endpoint: IEndpoint = { - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/name/contango-xyz/v2-arbitrum", - [CHAIN.OPTIMISM]: "https://api.thegraph.com/subgraphs/name/contango-xyz/v2-optimism", - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/contango-xyz/v2-mainnet", - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/contango-xyz/v2-polygon", + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('BmHqxUxxLuMoDYgbbXU6YR8VHUTGPBf9ghD7XH6RYyTQ'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('PT2TcgYqhQmx713U3KVkdbdh7dJevgoDvmMwhDR29d5'), + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('FSn2gMoBKcDXEHPvshaXLPC1EJN7YsfCP78swEkXcntY'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('5t3rhrAYt79iyjm929hgwyiaPLk9uGxQRMiKEasGgeSP'), [CHAIN.BASE]: "https://graph.contango.xyz:18000/subgraphs/name/contango-xyz/v2-base", - [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/contango-xyz/v2-gnosis", + [CHAIN.XDAI]: sdk.graph.modifyEndpoint('9h1rHUKJK9CGqztdaBptbj4Q9e2zL9jABuu9LpRQ1XkC'), } interface IAssetTotals { diff --git a/dexs/dragonswap-sei/index.ts b/dexs/dragonswap-sei/index.ts index 1cbd55f671..0749418322 100644 --- a/dexs/dragonswap-sei/index.ts +++ b/dexs/dragonswap-sei/index.ts @@ -1,4 +1,3 @@ -// https://api.thegraph.com/subgraphs/name/camelotlabs/camelot-amm-2 import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; diff --git a/dexs/shibaswap/index.ts b/dexs/shibaswap/index.ts index c2d236b3c0..18d82f4df5 100644 --- a/dexs/shibaswap/index.ts +++ b/dexs/shibaswap/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const endpoints = { - [CHAIN.ETHEREUM]: "https://api.thegraph.com/subgraphs/name/shibaswaparmy/exchange", + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('FvP7tK71rX51wsb663j5GRx2YTtDRa1Adq8QSCi5akLS'), }; const adapter = univ2Adapter(endpoints, { From 813f65f6d8ebdaaf7b7f1a687a5d635e5d12bdce Mon Sep 17 00:00:00 2001 From: slasher125 Date: Thu, 13 Jun 2024 15:14:27 +0400 Subject: [PATCH 0788/1590] package-lock upgrade --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1d350f409c..03e4be76ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.65", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.65.tgz", - "integrity": "sha512-/0NQ8lyWqRWfjG7mEkVvl3zyoTRsKC3KzdKBDWm0Y+rHeHX5SpGSSnm9JsclVDCzhXov9MTUAhiijNqf++HkZg==", + "version": "5.0.69", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.69.tgz", + "integrity": "sha512-IYdT4P5vG9xt14tM9RuT1+uBUyD8oL6fdTWC3iwOlwATjWKA1kwOhucCXNFE8sc2KKugwTUfQuGp8Q3fHDxAfw==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From c43d744f8b54e0eae76c3f816fb2ee1572ead996 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vuka=C5=A1in=20Manojlovi=C4=87?= Date: Thu, 13 Jun 2024 15:36:37 +0200 Subject: [PATCH 0789/1590] Add Nostra Pools volume --- dexs/nostra-pools/index.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 dexs/nostra-pools/index.ts diff --git a/dexs/nostra-pools/index.ts b/dexs/nostra-pools/index.ts new file mode 100644 index 0000000000..0d7eb6257a --- /dev/null +++ b/dexs/nostra-pools/index.ts @@ -0,0 +1,26 @@ +import { CHAIN } from "../../helpers/chains"; +import fetchURL from "../../utils/fetchURL"; +import { SimpleAdapter } from "../../adapters/types"; + +async function fetch() { + const data = await fetchURL("https://api.nostra.finance/query/pool_aprs"); + const dailyVolume = Object.values(data).reduce((acc: number, pool: any) => { + return acc + Number(pool.volume); + }, 0); + + return { + dailyVolume, + }; +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.STARKNET]: { + fetch, + start: async () => 1718236800, + }, + }, +}; + +export default adapter; From 833efda52966d5292c88db39a0ac52d256eb7863 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 13 Jun 2024 16:16:52 +0200 Subject: [PATCH 0790/1590] update sdk version --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1d350f409c..03e4be76ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.65", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.65.tgz", - "integrity": "sha512-/0NQ8lyWqRWfjG7mEkVvl3zyoTRsKC3KzdKBDWm0Y+rHeHX5SpGSSnm9JsclVDCzhXov9MTUAhiijNqf++HkZg==", + "version": "5.0.69", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.69.tgz", + "integrity": "sha512-IYdT4P5vG9xt14tM9RuT1+uBUyD8oL6fdTWC3iwOlwATjWKA1kwOhucCXNFE8sc2KKugwTUfQuGp8Q3fHDxAfw==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From 20629dfc3aa0f7bd6e58633278467cbeb7bb7c9c Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 13 Jun 2024 16:28:11 +0200 Subject: [PATCH 0791/1590] update code assets --- helpers/coreAssets.json | 311 +++++++++++++++++++++++++++++++++++----- 1 file changed, 272 insertions(+), 39 deletions(-) diff --git a/helpers/coreAssets.json b/helpers/coreAssets.json index 9bd74315cc..59139d4120 100644 --- a/helpers/coreAssets.json +++ b/helpers/coreAssets.json @@ -41,10 +41,15 @@ "LUSD": "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0", "sUSD_OLD": "0x57ab1e02fee23774580c119740129eac7081e9d3", "sUSD": "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51", + "sUSDe": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", "SUSHI": "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2", "cbETH": "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704", "FDUSD": "0xc5f0f7b66764f6ec8c8dff7ba683102295e16409", - "EETH": "0x35fa164735182de50811e8e2e824cfb9b6118ac2" + "EETH": "0x35fa164735182de50811e8e2e824cfb9b6118ac2", + "AEVO": "0xB528edBef013aff855ac3c50b381f253aF13b997", + "STONE": "0x4d831e22f062b5327dfdb15f0b6a5df20e2e3dd0", + "USDM": "0x59D9356E565Ab3A36dD77763Fc0d87fEaf85508C", + "USDe": "0x4c9edd5852cd905f086c759e8383e09bff1e68b3" }, "fantom": { "WFTM": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", @@ -74,12 +79,14 @@ }, "avax": { "WAVAX": "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", + "SAVAX": "0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be", "USDC": "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e", "EURC": "0xc891eb4cbdeff6e073e859e987815ed1505c2acd", "DAI": "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", "USDT_e": "0xc7198437980c041c805a1edcba50c1ce5db95118", "USDt": "0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7", "BTC_b": "0x152b9d0fdc40c096757f570a51e494bd4b943e50", + "WBTC_e": "0x50b7545627a5162F82A992c33b87aDc75187B218", "USDC_e": "0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", "WETH_e": "0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab", "JOE": "0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd", @@ -196,6 +203,7 @@ "OP": "0x4200000000000000000000000000000000000042", "WETH": "0x121ab82b49b2bc4c7901ca46b8277962b4350204", "WETH_1": "0x4200000000000000000000000000000000000006", + "WSTETH": "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb", "BitANT": "0x5029c236320b8f15ef0a657054b84d90bfbeded3", "FEI": "0x35d48a789904e9b15705977192e5d95e2af7f1d3", "alUSD": "0xcb8fa9a76b8e203d8c3797bf438d8fb81ea3326a", @@ -216,7 +224,10 @@ "USDC": "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", "ETH": "0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c", "ELK": "0xe1c110e1b1b4a1ded0caf3e42bfbdbb7b5d7ce1c", - "BEPRO": "0xcb4a593ce512d78162c58384f0b2fd6e802c2c47" + "BEPRO": "0xcb4a593ce512d78162c58384f0b2fd6e802c2c47", + "MOVR": "0xffffffff98e37bf6a393504b5adc5b53b4d0ba11", + "BNC": "0xffffffff3646a00f78cadf8883c5a2791bfcddc4", + "KSM": "0xffffffffc6deec7fc8b11a2c8dde9a59f8c62efe" }, "moonbeam": { "WGLMR": "0x5f6c5c2fb289db2228d159c69621215e354218d7", @@ -232,7 +243,9 @@ "MOVR": "0x1d4c2a246311bb9f827f4c768e277ff5787b7d7e", "xcUSDT": "0xffffffffea09fb06d082fd1275cd48b191cbcd1d", "BEPRO": "0x4edf8e0778967012d46968ceadb75436d0426f88", - "stDOT": "0xfa36fe1da08c89ec72ea1f0143a35bfd5daea108" + "stDOT": "0xfa36fe1da08c89ec72ea1f0143a35bfd5daea108", + "VGLMR": "0xffffffff99dabe1a8de0ea22baa6fd48fde96f6c", + "FIL": "0xffffffffcd0ad0ea6576b7b285295c85e94cf4c1" }, "arbitrum": { "WETH": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", @@ -256,7 +269,8 @@ "fGLP": "0x4e971a87900b931ff39d1aad67697f49835400b6", "GMX": "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a", "WSTETH": "0x5979D7b546E38E414F7E9822514be443A4800529", - "plvGLP": "0x5326e71ff593ecc2cf7acae5fe57582d6e74cff1" + "plvGLP": "0x5326e71ff593ecc2cf7acae5fe57582d6e74cff1", + "USDe": "0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34" }, "fuse": { "WFUSE": "0x0be9e53fd7edac9f859882afdda116645287c629", @@ -267,7 +281,14 @@ "USDT": "0xfadbbf8ce7d5b7041be672561bba99f79c532e10", "KNC": "0x43b17749b246fd2a96de25d9e4184e27e09765b0", "BUSD": "0x6a5f6a8121592becd6747a38d67451b310f7f156", - "null": "0x0000000000000000000000000000000000000000" + "null": "0x0000000000000000000000000000000000000000", + "USDC_2": "0x28c3d1cd466ba22f6cae51b1a4692a831696391a", + "USDT_2": "0x68c9736781e9316ebf5c3d49fe0c1f45d2d104cd", + "VOLT": "0x34ef2cc892a88415e9f02b91bfa9c91fc0be6bd4", + "FUSD_3": "0xce86a1cf3cff48139598de6bf9b1df2e0f79f86f", + "WETH_2": "0x5622f6dc93e08a8b717b149677930c38d5d50682", + "BNB": "0x6acb34b1df86e254b544189ec32cf737e2482058", + "BNB_2": "0x117c0419352ddb6fe575a67faa70315bdc4a93f3" }, "evmos": { "WEVMOS": "0xd4949664cd82660aae99bedc034a0dea8a0bd517", @@ -486,6 +507,10 @@ "SWAPZ": "0x9b6fbf0ea23faf0d77b94d5699b44062e5e747ac", "DAI": "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", "SCAR": "0x8d9fb713587174ee97e91866050c383b5cee6209", + "sVLX": "0xaadbaa6758fc00dec9b43a0364a372605d8f1883", + "VLX": "0x2b1abeb48f875465bf0d3a262a2080ab1c7a3e39", + "ETH_1": "0x380f73bad5e7396b260f737291ae5a8100baabcd", + "USDT_1": "0x4b773e1ae1baa4894e51cc1d1faf485c91b1012f", "ADA": "0x3611fbfb06ffbcef9afb210f6ace86742e6c14a4" }, "telos": { @@ -496,7 +521,8 @@ "USDC": "0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b", "USDT": "0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73", "STLOS": "0xb4b01216a5bc8f1c8a33cd990a1239030e60c905", - "sBUSD": "0x017043607270ecbb440e20b0f0bc5e760818b3d8" + "sBUSD": "0x017043607270ecbb440e20b0f0bc5e760818b3d8", + "syUSDC": "0xe6E5f3d264117E030C21920356641DbD5B3d660c" }, "reichain": { "BNB": "0xf8ab4aaf70cef3f3659d3f466e35dc7ea10d4a5d", @@ -523,6 +549,7 @@ "BUSDbs": "5RpUwQ8wtdPCZHhu6MERp2RGrpobsbZ6MH5dDHkUjs2" }, "astar": { + "WASTR_1": "0xaeaaf0e2c81af264101b9129c00f4440ccf0f720", "WASTR": "0xecc867de9f5090f55908aaa1352950b9eed390cd", "WETH": "0x81ecac0d6be0550a00ff064a4f9dd2400585fe9c", "WBTC": "0xad543f18cff85c77e140e3e5e3c3392f6ba9d5ca", @@ -532,7 +559,6 @@ "USDC": "0x6a2d262d56735dba19dd70682b39f6be9a931d98", "USDT": "0x3795c36e7d12a8c252a20c5a7b455f7c57b60283", "nativeUSDT": "0xffffffff000000000000000000000001000007c0", - "ARSW": "0xde2578edec4669ba7f41c5d5d2386300bcea4678", "DOT": "0xffffffffffffffffffffffffffffffffffffffff", "DAI": "0x6de33698e9e9b787e09d3bd7771ef63557e148bb", "MUUU": "0xc5bcac31cf55806646017395ad119af2441aee37", @@ -554,7 +580,18 @@ "ATID": "0x5271d85ce4241b310c0b34b7c2f1f036686a6d7c", "JPYC": "0x431d5dff03120afa4bdf332c61a6e1766ef37bdb", "aUSD": "0xffffffff00000000000000010000000000000001", - "vDOT": "0xFfFfFfff00000000000000010000000000000008" + "vDOT": "0xFfFfFfff00000000000000010000000000000008", + "ASTR": "0xffffffff00000000000000010000000000000010" + }, + "astarzk": { + "WETH": "0xe9cc37904875b459fa5d0fe37680d36f1ed55e38", + "USDC": "0xa8ce8aee21bc2a48a5ef670afcc9274c7bbbc035", + "USDT": "0x1e4a5963abfd975d8c9021ce480b42188849d41d", + "WBTC": "0xea034fb02eb1808c2cc3adbc15f447b93cbe08e1", + "DAI": "0xc5015b9d9161dca7e18e32f6f25c4ad850731fd4", + "MATIC": "0xa2036f0538221a77a3937f1379699f44945018d0", + "wstETH": "0x5d8cff95d7a57c0bf50b30b43c7cc0d52825d4a9", + "weETH": "0xcd68dff4415358c35a28f96fd5bf7083b22de1d6" }, "cardano": { "ADA": "ADA" @@ -636,7 +673,8 @@ }, "kujira": { "KUJI": "ukuji", - "USK": "factory/kujira1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luase444a7/uusk" + "USK": "factory/kujira1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luase444a7/uusk", + "FUZION": "factory/kujira1sc6a0347cc5q3k890jj0pf3ylx2s38rh4sza4t/ufuzn" }, "injective": { "INJ": "inj", @@ -659,7 +697,12 @@ "USDC": "0xea1199d50ee09fa8062fd9da3d55c6f90c1babd2" }, "tomochain": { - "WTOMO": "0xb1f66997a5760428d3a87d68b90bfe0ae64121cc" + "WTOMO": "0xb1f66997a5760428d3a87d68b90bfe0ae64121cc", + "TOMO": "0xc054751bdbd24ae713ba3dc9bd9434abe2abc1ce", + "USDT": "0xbbbfab9dcc27771d21d027f37f36b67cc4a25db0", + "USDC": "0x20cc4574f263c54eb7ad630c9ac6d4d9068cf127", + "ETH": "0x9ede19ede2baf93d25fba4c8f58577e008b8f963", + "SAROS": "0xb786d9c8120d311b948cf1e5aa48d8fbacf477e2" }, "ethereumclassic": { "WETC": "0x82A618305706B14e7bcf2592D4B9324A366b6dAd" @@ -723,7 +766,8 @@ "rsk": { "WRBTC": "0x967f8799af07df1534d48a95a5c9febe92c53ae0", "WRBTC1": "0x542fDA317318eBF1d3DEAf76E0b632741A7e677d", - "ETHs": "0x1d931bf8656d795e50ef6d639562c5bd8ac2b78f" + "ETHs": "0x1d931bf8656d795e50ef6d639562c5bd8ac2b78f", + "rUSDT": "0xef213441a85df4d7acbdae0cf78004e1e486bb96" }, "polis": { "WPOLIS": "0x6fc851b8d66116627fb1137b9d5fe4e2e1bea978" @@ -923,7 +967,6 @@ "YFI": "BLRxWVJWaVuR2CsCoTvTw2bDZ3sQLeTbCofcJv7dP5J4", "APE": "2GBgdhqMjUPqreqPziXvZFSmDiQVrxNuGxR1z7ZVsm4Z", "CRV": "3KhNcHo4We1G5EWps7b1e5DTdLgWDzctc8S6ynu37KAb", - "USDC": "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ", "LINK": "2bbGhKo5C31iEiB4CwGuqMYwjD7gCA9eXmm51fe2v8vT", "AAVE": "7TMu26hAs7B2oW6c5sfx45KSZT7GQA3TZNYuCav8Dcqt", "NSBT": "6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g", @@ -943,7 +986,6 @@ "USDN": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", "UST": "2thtesXvnVMcCnih9iZbJL3d2NQZMfzENJo8YFj6r5jU", "LUNA": "6QUVF8nVVVvM7do7JT2eJ5o5ehnZgXUg13ysiB9JiQrZ", - "USDT": "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ", "WAVES": "WAVES" }, "songbird": { @@ -1108,9 +1150,7 @@ "XSP": "0x36726235dadbdb4658d33e62a249dca7c4b2bc68" }, "kardia": { - "WKAI": "0xaf984e23eaa3e7967f3c5e007fbe397d8566d23d", - "USDT": "0x551a5dcac57c66aa010940c2dcff5da9c53aa53b", - "KUSD_T": "0x92364ec610efa050d296f1eeb131f2139fb8810e" + "WKAI": "0xaf984e23eaa3e7967f3c5e007fbe397d8566d23d" }, "empire": { "USDC": "0xc61a71c75ed4742dcae74b8cac27a37d46fc6751" @@ -1126,7 +1166,8 @@ "AVAX": "0x4200000000000000000000000000000000000023" }, "omax": { - "WOMAX": "0xfebabc6a9b2ec46d6357879b8bf39b593f11a5b9" + "WOMAX": "0xfebabc6a9b2ec46d6357879b8bf39b593f11a5b9", + "OMAX": "0x373e4b4E4D328927bc398A9B50e0082C6f91B7bb" }, "wemix": { "WWEMIX": "0x7d72b22a74a216af4a002a1095c8c707d6ec1c5f", @@ -1217,6 +1258,7 @@ "EVMOS_boot": "4B322204B4F59D770680FE4D7A565DDC3F37BFF035474B717476C66A4F83DD72" }, "starknet": { + "STRK": "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", "DAI": "0x00da114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3", "USDC": "0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8", "USDT": "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8", @@ -1224,7 +1266,10 @@ "ETH": "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", "WSTETH": "0x042b8f0484674ca266ac5d08e4ac6a3fe65bd3129795def2dca5c34ecc5f96d2", "LUSD": "0x070a76fd48ca0ef910631754d77dd822147fe98a569b826ec85e3c33fde586ac", - "RETH": "0x0319111a5037cbec2b3e638cc34a3474e2d2608299f3e62866e9cc683208c610" + "RETH": "0x0319111a5037cbec2b3e638cc34a3474e2d2608299f3e62866e9cc683208c610", + "UNO": "0x0719b5092403233201aa822ce928bd4b551d0cdb071a724edd7dc5e5f57b7f34", + "NSTSTRK": "0x04619e9ce4109590219c5263787050726be63382148538f3f936c22aa87d2fc2", + "ZEND": "0x00585c32b625999e6e5e78645ff8df7a9001cf5cf3eb6b80ccdd16cb64bd3a34" }, "ton": { "TON": "0x0000000000000000000000000000000000000000", @@ -1233,12 +1278,14 @@ "TON_3": "EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c", "TON_4": "EQCajaUU1XXSAjTD-xOV7pE49fGtg4q8kF3ELCOJtGvQFQ2C", "USDC": "EQC61IQRl0_la95t27xhIpjxZt32vl1QQVF2UgTNuvD18W-4", - "USDT": "EQC_1YoM8RBixN95lz7odcF3Vrkc_N8Ne7gQi7Abtlet_Efi", + "oUSDT": "EQC_1YoM8RBixN95lz7odcF3Vrkc_N8Ne7gQi7Abtlet_Efi", "ETH": "EQAW42HutyDem98Be1f27PoXobghh81umTQ-cGgaKVmRLS7-", "MATIC": "EQBq4d4GPyBoh-Pjnf3wxUyQSS28WY2Yt-7cPAG8FHpWpNRX", "ORC": "EQDCIEo0HUUYsAV-lTMviOd-GkSXfVPsNZMGjRaNOA_6--FD", "MEGA": "EQBf6-YoR9xylol_NwjHrLkrTFAZJCX-bsd-Xx_902OaPaBf", - "WEMIX": "EQCf7Nb341dxOE3N0jimngRxGEV8T3zo-eU2EZVs_nchNhhZ" + "WEMIX": "EQCf7Nb341dxOE3N0jimngRxGEV8T3zo-eU2EZVs_nchNhhZ", + "jUSDT": "EQBynBO23ywHy_CgarY9NK9FTz0yDsG82PtcbSTQgGoXwiuA", + "USDT": "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs" }, "defichain": { "DFI": "DFI", @@ -1258,8 +1305,10 @@ }, "core": { "WCORE": "0x40375c92d9faf44d2f9db9bd9ba41a3317a2404f", + "WCORE_1": "0x191e94fa59739e188dce837f7f6978d84727ad01", "USDT": "0x900101d06a7426441ae63e9ab3b9b0f63be145f1", - "USDC": "0xa4151b2b3e269645181dccf2d426ce75fcbdeca9" + "USDC": "0xa4151b2b3e269645181dccf2d426ce75fcbdeca9", + "coreBTC": "0x8034aB88C3512246Bf7894f57C834DdDBd1De01F" }, "crab": { "WCRAB": "0x2d2b97ea380b0185e9fdf8271d1afb5d2bf18329" @@ -1278,7 +1327,18 @@ "BUSD": "0x35bf4004c3fc9f509259d4942da6bae3669e1db1", "WMAPO": "0x13cb04d4a5dfb6398fc5ab005a6c84337256ee23", "USDC": "0x9f722b2cb30093f766221fd0d37964949ed66918", - "ETH": "0x05ab928d446d8ce6761e368c8e7be03c3168a9ec" + "ETH": "0x05ab928d446d8ce6761e368c8e7be03c3168a9ec", + "ROUP": "0x3e76deF74d4187B5a01aBE4E011Bd94d9f057d94", + "WROUP": "0x5a1c3f3aaE616146C7b9bf9763E0ABA9bAFc5eaE", + "ORDI": "0xB719e46B6eB5b23E2759526CdE24589d87097733", + "WORDI": "0x9CA528368964cFb92cfFdd51dCcED25E27ACCef9", + "RATS": "0xcAF17cDdb80F72484e5A279921b98a0a9A2391ee", + "WRATS": "0x6369414F2b0e973c7E85A362141aA1430bc30056", + "CSAS": "0x640a4C0AaA4870BaDE2F646B7Da87b3D53819C4f", + "WSAS": "0x141b30Dd30FAFb87ec10312d52e5dbD86122FE14", + "BTCS": "0x0e2cA3e003f3c73C8cC18ec244d46DB9d4c4DCEB", + "WBTCS": "0xBE81B9390D894fEBf5e5D4Ea1486a003C1e8dc63", + "MMSS": "0x0fBb3B3Fb1e928f75B3Ed8b506bAb4503373fdca" }, "bone": { "WBONE": "0xcda1fa23ff3b9b7172be82237bf662efb69437e9" @@ -1324,6 +1384,7 @@ "USDC_SOL": "0xb231fcda8bbddb31f2ef02e6161444aec64a514e2c89279584ac9806ce9cf037::coin::COIN", "USDC_ARB": "0xe32d3ebafa42e6011b87ef1087bbc6053b499bf6f095807b9013aff5a6ecd7bb::coin::COIN", "USDC_BNB": "0x909cba62ce96d54de25bec9502de5ca7b4f28901747bbf96b76c2e63ec5f1cba::coin::COIN", + "BUCK": "0xce7ff77a83ea0cb6fd39bd8748e2ec89a3f41e8efdc3f4eb123e0ca37b184db2::buck::BUCK", "SUI": "0x2::sui::SUI" }, "grove": { @@ -1345,6 +1406,7 @@ }, "pulse": { "WPLS": "0xa1077a294dde1b09bb078844df40758a5d0f9a27", + "PLSX": "0x95B303987A60C71504D99Aa1b13B4DA07b0790ab", "ETH": "0x02dcdd04e3f455d838cd1249292c58f3b79e3c3c", "USDC": "0x15D38573d2feeb82e7ad5187aB8c1D52810B1f07", "USDT": "0x0Cb6F5a34ad42ec934882A05265A7d5F59b51A2f", @@ -1361,7 +1423,14 @@ }, "stacks": { "WSTX": "SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275.wstx-token-v4a", - "WBTC": "SP3DX3H4FEYZJZ586MFBS25ZW3HZDMEW92260R2PR.Wrapped-Bitcoin::wrapped-bitcoin" + "WSTX_1": "SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.wstx-token::wstx", + "WSTX_2": "SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx", + "ABTC": "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-abtc", + "WBTC": "SP3DX3H4FEYZJZ586MFBS25ZW3HZDMEW92260R2PR.Wrapped-Bitcoin::wrapped-bitcoin", + "stSTX": "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.ststx-token::ststx", + "USDT": "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-susdt::bridged-usdt", + "aeUSDC": "SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc", + "aBTC": "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-abtc::bridged-btc" }, "neon_evm": { "WNEON": "0xb14760c064a1b9eaf9ec5a8a421971e40a51b59c" @@ -1402,7 +1471,9 @@ "USDCar": "factory/sei189adguawugk3e55zn63z8r9ll29xrjwca636ra7v7gxuzn98sxyqwzt47l/7edDfnf4mku8So3t4Do215GNHwASEwCWrdhM5GqD51xZ", "USDTet": "factory/sei189adguawugk3e55zn63z8r9ll29xrjwca636ra7v7gxuzn98sxyqwzt47l/HktfLoADCk9mnjv7XJiN4YXK9ayE6xinLzt8wzcsR2rY", "USDTbs": "factory/sei189adguawugk3e55zn63z8r9ll29xrjwca636ra7v7gxuzn98sxyqwzt47l/871jbn9unTavWsAe83f2Ma9GJWSv6BKsyWYLiQ6z3Pva", - "WBTC": "factory/sei189adguawugk3e55zn63z8r9ll29xrjwca636ra7v7gxuzn98sxyqwzt47l/7omXa4gryZ5NiBmLep7JsTtTtANCVKXwT9vbN91aS1br" + "WBTC": "factory/sei189adguawugk3e55zn63z8r9ll29xrjwca636ra7v7gxuzn98sxyqwzt47l/7omXa4gryZ5NiBmLep7JsTtTtANCVKXwT9vbN91aS1br", + "USDC": "0x3894085Ef7Ff0f0aeDf52E2A2704928d1Ec074F1", + "USDT": "0xB75D0B03c06A926e488e2659DF1A861F860bD3d1" }, "op_bnb": { "WBNB": "0x4200000000000000000000000000000000000006", @@ -1446,6 +1517,7 @@ "BONE_2": "0x6c19a35875217b134e963ca9e61b005b855cad21", "BONE_3": "0x1b2f364032f12bd8a4c89e672e6272de03ae2680", "BONE_4": "0xa2899c776baaf9925d432f83c950d5054a6cf59c", + "BONE_5": "0x839FdB6cc98342B428E074C1573ADF6D48CA3bFd", "DAI": "0x50c5725949a6f0c72e6c4a641f24049a917db0cb" }, "nos": { @@ -1456,7 +1528,8 @@ "kroma": { "WETH": "0x4200000000000000000000000000000000000001", "USDC": "0x49A5010110a358d9069282873F3e7eCf6B41DC10", - "USDT": "0x0Cf7c2A584988871b654Bd79f96899e4cd6C41C0" + "USDT": "0x0Cf7c2A584988871b654Bd79f96899e4cd6C41C0", + "WEMIX": "0x3720b1dc2c8dde3bd6cfcf0b593d0a2bbcac856e" }, "radixdlt": { "XRD": "resource_rdx1tknxxxxxxxxxradxrdxxxxxxxxx009923554798xxxxxxxxxradxrd", @@ -1489,12 +1562,15 @@ "UnifiedDAI": "0xcDB9579Db96EB5C8298dF889D915D0FF668AfF2a", "WITCH": "0xB1f3A83597Bce2AD842c29bD750AE17afc474137", "SAT": "0x17102AC78a02a98fC78B0c29B7b0506f035A99E5", - "BIFI": "0x047938C3aD13c1eB821C8e310B2B6F889b6d0003" + "BIFI": "0x047938C3aD13c1eB821C8e310B2B6F889b6d0003", + "WBTC": "0x7b8FAC5F29E101BaaB33c5f9c39d4F85ba2cc7C1", + "BTCB": "0xd267F821F1b8344B5A63626c8c824697194A173E" }, "scroll": { "WETH": "0x5300000000000000000000000000000000000004", "USDT": "0xf55bec9cafdbe8730f096aa55dad6d22d44099df", - "USDC": "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4" + "USDC": "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4", + "STONE": "0x80137510979822322193FC997d400D5A6C747bf7" }, "darwinia": { "RING": "0xe7578598aac020abfb918f33a20fad5b71d670b4" @@ -1522,7 +1598,11 @@ "MEER_2": "0x457dE4e275A6b3C0D3750519221dD1dF19d54f01" }, "mode": { - "WETH": "0x4200000000000000000000000000000000000006" + "STONE": "0x80137510979822322193fc997d400d5a6c747bf7", + "WETH": "0x4200000000000000000000000000000000000006", + "USDC": "0xd988097fb8612cc24eeC14542bC03424c656005f", + "USDT": "0xf0F161fDA2712DB8b566946122a5af183995e2eD", + "WBTC": "0xcdd475325d6f564d27247d1dddbb0dac6fa0a5cf" }, "zilliqa": { "WZIL": "0x94e18ae7dd5ee57b55f30c4b63e2760c09efb192", @@ -1552,10 +1632,7 @@ }, "airdao": { "SAMB": "0x2b2d892c3fe2b4113dd7ac0d2c1882af202fb28f", - "USDC": "0xd8dd0273d31c1cd9dba104daca7c1dfee4f7b805", - "BUSD": "0x7a477aa8ed4884509387dba81ba6f2b7c97597e2", - "AINU": "0x618220b06e8e30a972ffbe66fe56588fe4d5044a", - "BOND": "0x096b5914c95c34df19500daff77470c845ec749d" + "BUSD": "0x7a477aa8ed4884509387dba81ba6f2b7c97597e2" }, "acala": { "DOT": "0x0000000000000000000100000000000000000002", @@ -1566,18 +1643,174 @@ "NEW": "0xf4905b9bc02ce21c98eac1803693a9357d5253bf" }, "zeta": { + "USDC": "0x05BA149A7bd6dC1F937fA9046A9e05C05f3b18b0", + "USDC_1": "0x0cbe0dF132a6c6B4a2974Fa1b7Fb953CF0Cc798a", + "USDT": "0x7c8dDa80bbBE1254a7aACf3219EBe1481c6E01d7", + "USDT_1": "0x91d4F0D54090Df2D81e834c3c8CE71C6c865e79F", + "ETH": "0xd97b1de3619ed2c6beb3860147e30ca8a7dc9891", + "BNB": "0x48f80608b672dc30dc7e3dbbd0343c5f02c738eb", + "BTC": "0x13A0c5930C028511Dc02665E7285134B6d11A5f4", "WZETA": "0x5f0b1a82749cb4e2278ec87f8bf6b618dc71a8bf" }, + "blast": { + "USDB": "0x4300000000000000000000000000000000000003", + "fwWETH": "0x66714db8f3397c767d0a602458b5b4e3c0fe7dd1", + "fwUSDB": "0x866f2c06b83df2ed7ca9c2d044940e7cd55a06d6", + "WETH": "0x4300000000000000000000000000000000000004", + "ezETH": "0x2416092f143378750bb29b79eD961ab195CcEea5", + "weETH": "0x04C0599Ae5A44757c0af6F9eC3b93da8976c150A" + }, + "chz": { + "WCHZ": "0x721ef6871f1c4efe730dce047d40d1743b886946" + }, + "bitrock": { + "WBR": "0x413f0e3a440aba7a15137f4278121450416882d5", + "BR": "0xde67d97b8770dc98c746a3fc0093c538666eb493" + }, + "btn": { + "BTN": "0x8148b71232162ea7a0b1c8bfe2b8f023934bfb58" + }, + "area": { + "AREA": "0x298b6a733cd34e41ca87b264d968c8ca7b0b9931", + "WAREA": "0x1d1bc800e71576a59f9ef88bb679fa13c2e10abf" + }, + "defiverse": { + "OAS": "0x5a89E11Cb554E00c2f51C4bb7F05bc7Ab0Fa6351", + "USDC": "0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2", + "WBTC": "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb", + "ETH": "0xE7798f023fC62146e8Aa1b36Da45fb70855a77Ea" + }, + "xai": { + "XAI": "0x36be1fd6ff2a6beb34b500a04f89103a524516d8", + "USDC": "0x300a7b57dc85b6a9776e249614abf0fe5c9905fb" + }, + "merlin": { + "SATS": "0x4dcb91cc19aadfe5a6672781eb09abad00c19e4c", + "RATS": "0x69181a1f082ea83a152621e4fa527c936abfa501", + "ORDI": "0x0726523eba12edad467c55a962842ef358865559", + "USDT": "0x967aec3276b63c5e2262da9641db9dbebb07dc0d", + "USDC": "0x6b4ecada640f1b30dbdb68f77821a03a5f282ebe", + "WBTC": "0xF6D226f9Dc15d9bB51182815b320D3fBE324e1bA", + "WBTC_1": "0xB880fd278198bd590252621d4CD071b1842E9Bcd" + }, + "ftn": { + "USDC": "0x4237e0A5b55233D5B6D6d1D9BF421723954130D8" + }, + "q": { + "WBTC": "0xde397e6C442A3E697367DecBF0d50733dc916b79", + "WDAI": "0xDeb87c37Dcf7F5197026f574cd40B3Fc8Aa126D1", + "WUSDC": "0x79Cb92a2806BF4f82B614A84b6805963b8b1D8BB", + "WETH": "0xd56F9ffF3fe3BD0C7B52afF9A42eb70E05A287Cc", + "ELK": "0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE" + }, + "zklink": { + "WBTC": "0xda4aaed3a53962c83b35697cd138cc6df43af71f", + "USDT": "0x2f8a25ac62179b31d62d7f80884ae57464699059", + "USDC": "0x1a1a3b2ff016332e866787b311fcb63928464509", + "WETH": "0x8280a4e7D5B3B658ec4580d3Bc30f5e50454F169" + }, + "kinto": { + "WETH": "0x7526B5318Cbe690FBd3eC8DD7ad122f4F1b1d76F" + }, + "bevm": { + "WBTC": "0xB5136FEba197f5fF4B765E5b50c74db717796dcD" + }, + "degen": { + "WDEGEN": "0xeb54dacb4c2ccb64f8074eceea33b5ebb38e5387" + }, + "imx": { + "WIMX": "0x3A0C2Ba54D6CBd3121F01b96dFd20e99D1696C9D", + "ETH": "0x52a6c53869ce09a731cd772f245b97a4401d3348", + "USDC": "0x6de8acc0d406837030ce4dd28e7c08c5a96a30d2" + }, + "sapphire": { + "WOAS": "0x1ffd8a218fdc5b38210d64cbb45f40dc55a4e019", + "USDT": "0x9ca066f00e55b90623efe323feb2a649686538b6" + }, + "rss3_vsl": { + "WRSS": "0xe27d019909738d98ab7f850c05ee07806c30c71d" + }, + "svm": { + "BTC": "0x5db252ead05C54B08A83414adCAbF46Eaa9E0337" + }, + "islm": { + "ISLM ": "0xeC8CC083787c6e5218D86f9FF5f28d4cC377Ac54", + "DAI": "0xc5e00d3b04563950941f7137b5afa3a534f0d6d6", + "ETH": "0xeceeefcee421d8062ef8d6b4d814efe4dc898265", + "WBTC": "0x5fd55a1b9fc24967c4db09c513c3ba0dfa7ff687", + "USDT": "0xd567b3d7b8fe3c79a1ad8da978812cfc4fa05e75", + "AXLUSDC": "0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd" + }, + "xlayer": { + "WOKB": "0xe538905cf8410324e03a5a23c1c177a474d59b2b", + "WBTC": "0xea034fb02eb1808c2cc3adbc15f447b93cbe08e1", + "WETH": "0x5A77f1443D16ee5761d310e38b62f77f726bC71c", + "USDT": "0x1E4a5963aBFD975d8c9021ce480b42188849D41d", + "USDC": "0x74b7f16337b8972027f6196a17a631ac6de26d22" + }, + "genesys": { + "WGSYS": "0xAa7aE83eb30DDdd14A017D4222121776317EA8Ba" + }, "zora": { "USDzC": "0xcccccccc7021b32ebb4e8c08314bd62f7c653ec4" }, + "ancient8": { + "WETH": "0x4200000000000000000000000000000000000006" + }, + "karak": { + "USDC": "0xa415021bc5c4c3b5b989116dc35ae95d9c962c8d", + "rsETH": "0xf948aacec00289fc33d8226391f7e04bb457ad49", + "WETH": "0x4200000000000000000000000000000000000006" + }, + "bsquared": { + "WBTC": "0x4200000000000000000000000000000000000006", + "USDT": "0x681202351a488040fa4fdcc24188afb582c9dd62", + "USDC": "0xe544e8a38add9b1abf21922090445ba93f74b9e5", + "ETH": "0xD48d3A551757ac47655fCe25BDE1B0B6b1Cb2a5A", + "MATIC": "0xc3ee2Df14B1Bc526c24ED802f1873d49664a0d5c", + "FDUSD": "0xC2Fe4f673455Ef92299770a09CDB5E8756A525D5", + "BSTONE": "0x7537C1F80c9E157ED7AFD93a494be3e1f04f1462", + "ORDI": "0xa0f4470B714677AEEcE0d20074c540b3Cf6a477E", + "SATS": "0x7eBFcE05E418C380a2b6EB0F65995cA04ef4bc00", + "UBTC": "0x796e4D53067FF374B89b2Ac101ce0c1f72ccaAc2" + }, + "planq": { + "WPLANQ": "0x5ebcdf1de1781e8b5d41c016b0574ad53e2f6e1a", + "USDC": "0xecEEEfCEE421D8062EF8d6b4D814efe4dc898265", + "USDC_1": "0x75E20C5d4aade76143b8b74d1C5E2865347f9d3B" + }, + "lac": { + "LAC": "0x2911a1ab18546cb501628be8625c7503a2a7db54" + }, + "bob": { + "WETH": "0x4200000000000000000000000000000000000006", + "WBTC": "0x03c7054bcb39f7b2e5b2c7acb37583e32d70cfa3", + "USDT": "0x05d032ac25d322df992303dca074ee7392c117b9", + "USDC": "0xe75d0fb2c24a55ca1e3f96781a2bcc7bdba058f0", + "STETH": "0x85008aE6198BC91aC0735CB5497CF125ddAAc528", + "STONE": "0x96147a9ae9a42d7da551fd2322ca15b71032f342", + "RETH": "0xb5686c4f60904ec2bda6277d6fe1f7caa8d1b41a", + "TBTC": "0xbba2ef945d523c4e2608c9e1214c2cc64d4fc2e2" + }, + "btr": { + "ETH": "0xef63d4e178b3180beec9b0e143e0f37f4c93f4c2" + }, + "taiko": { + "USDC": "0x07d83526730c7438048D55A4fc0b850e2aaB6f0b", + "WETH": "0xA51894664A773981C6C112C43ce576f315d5b1B6" + }, + "stellar": { + "XLM": "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA", + "USDC": "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75" + }, + "lukso": { + "WLYX": "0x2db41674f2b882889e5e1bd09a3f3613952bc472" + }, "defichain_evm": { - "DUSD": "0xFf0000000000000000000000000000000000000F", - "JAV": "0x66F3Cf265D2D146A0348F6fC67E3Da0835e0968E", - "WDFI": "0x49febbF9626B2D39aBa11C01d83Ef59b3D56d2A4", - "VAN": "0x870c765f8aF9b189C324BE88B99884e5bAe4514b", - "MUSD": "0x80b6897Ba629d6C42584eC162CCA29F1E34783bE", - "USDT": "0xFF00000000000000000000000000000000000003", - "USDC": "0xFF0000000000000000000000000000000000000d" + "DFI": "0x49febbf9626b2d39aba11c01d83ef59b3d56d2a4", + "USDT": "0xff0000000000000000000000000000000000000d", + "USDC": "0xff00000000000000000000000000000000000003", + "ETH": "0xff00000000000000000000000000000000000001", + "DUSD": "0xff0000000000000000000000000000000000000f" } } From d5ba05c11ac510669be07499bded24979abebe3f Mon Sep 17 00:00:00 2001 From: David <111794534+usr-icon-foundation@users.noreply.github.com> Date: Thu, 13 Jun 2024 16:48:14 +0200 Subject: [PATCH 0792/1590] Add Balanced fee + volume tracking --- dexs/balanced/balanced.ts | 151 ++++++++++++++++++++++++++++++++++++++ dexs/balanced/index.ts | 28 +++++++ 2 files changed, 179 insertions(+) create mode 100644 dexs/balanced/balanced.ts create mode 100644 dexs/balanced/index.ts diff --git a/dexs/balanced/balanced.ts b/dexs/balanced/balanced.ts new file mode 100644 index 0000000000..1f0a3b0485 --- /dev/null +++ b/dexs/balanced/balanced.ts @@ -0,0 +1,151 @@ +const apiUrl = 'https://balanced.icon.community/api/v1/pools'; +const SOLIDWALLET_ENDPOINT = 'https://ctz.solidwallet.io/api/v3'; + +// Helper function to fetch the real-time price of bnUSD from the Balanced Network Oracle, expressed in USD. +const fetchBnUsdPrice = async () => { + const GET_PRICES = { + jsonrpc: "2.0", + id: new Date().getTime(), + method: "icx_call", + params: { + to: "cx133c6015bb29f692b12e71c1792fddf8f7014652", + dataType: "call", + data: { + method: "getLastPriceInUSD", + params: { symbol: "bnUSD" } + } + } + }; + + const response = await fetch(SOLIDWALLET_ENDPOINT, { + method: "POST", + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(GET_PRICES) + }); + + if (!response.ok) { + throw new Error(`HTTP Error: ${response.status}`); + } + + const data = await response.json(); + + if (!data.result) { + throw new Error('No result found'); + } + + return (parseInt(data.result, 16) / 1e18).toFixed(5); +}; + +// Helper function to build a price map for conversion rates of all Balanced Network assets to USD. +const buildPriceMap = (data, bnUsdPrice) => { + const priceMap = { bnUSD: Number(bnUsdPrice) }; + + data.forEach(pool => { + if (pool.base_symbol === 'bnUSD' || pool.quote_symbol === 'bnUSD') { + if (pool.base_symbol !== 'bnUSD') { + priceMap[pool.base_symbol] = parseFloat(pool.price_24h) * bnUsdPrice || 0; + } + if (pool.quote_symbol !== 'bnUSD') { + priceMap[pool.quote_symbol] = 1 / (parseFloat(pool.price_24h) * bnUsdPrice || 1); + } + } + }); + + return priceMap; +}; + + + +// Helper function to calculate total Balanced DEX pool fees, expressed in pool base values. +const calculateTotalFeesInBase24h = (baseLpFees24h, baseBalnFees24h, quoteLpFees24h, quoteBalnFees24h, price24h, baseSymbol, priceMap) => { + if (price24h === 0 || isNaN(price24h)) { + return 0; + } + + let totalFeesInBase24h = (baseLpFees24h + baseBalnFees24h) + ((quoteLpFees24h + quoteBalnFees24h) / price24h); + + if (totalFeesInBase24h > 0) { + totalFeesInBase24h *= priceMap[baseSymbol] || 1; + } + + return totalFeesInBase24h; +}; + +// Helper function to calculate total Balanced DEX pool volumes, expressed in USD. +const calculateTotalVolumesInUSD24h = (baseVolume24h, quoteVolume24h, baseSymbol, priceMap) => { + const baseVolumeInUSD = baseVolume24h * (priceMap[baseSymbol] || 0); + const quoteVolumeInUSD = quoteVolume24h * (priceMap['bnUSD'] || 1); + + return baseVolumeInUSD + quoteVolumeInUSD; +}; + +// Main function to fetch the 24-hour LP fees from the Balanced API and convert them to USD value +export const getPoolFees_24h = async () => { + try { + const bnUsdPrice = await fetchBnUsdPrice(); + const response = await fetch(apiUrl); + const data = await response.json(); + + const priceMap = buildPriceMap(data, bnUsdPrice); + + const totalLpFeesInUSD24h = data.reduce((total, pool) => { + const baseLpFees24h = parseFloat(pool.base_lp_fees_24h) || 0; + const quoteLpFees24h = parseFloat(pool.quote_lp_fees_24h) || 0; + const baseBalnFees24h = parseFloat(pool.base_baln_fees_24h) || 0; + const quoteBalnFees24h = parseFloat(pool.quote_baln_fees_24h) || 0; + const baseSymbol = pool.base_symbol; + const price24h = parseFloat(pool.price_24h) || 0; + + const totalFeesInBase24h = calculateTotalFeesInBase24h( + baseLpFees24h, + baseBalnFees24h, + quoteLpFees24h, + quoteBalnFees24h, + price24h, + baseSymbol, + priceMap + ); + + return total + totalFeesInBase24h; + }, 0); + // console.log('totalLpFeesInBnUsd24h:', totalLpFeesInUSD24h) + return totalLpFeesInUSD24h; + } catch (error) { + console.error('Error fetching or processing data:', error); + throw error; + } +}; + +// Main function to fetch the 24-hour pool volumes from the Balanced API and convert them to USD value +export const getPoolVolumes_24h = async () => { + try { + const bnUsdPrice = await fetchBnUsdPrice(); + const response = await fetch(apiUrl); + const data = await response.json(); + + const priceMap = buildPriceMap(data, bnUsdPrice); + + const totalVolumeInUSD24h = data.reduce((total, pool) => { + const baseVolume24h = parseFloat(pool.base_volume_24h) || 0; + const quoteVolume24h = parseFloat(pool.quote_volume_24h) || 0; + const baseSymbol = pool.base_symbol; + + const totalVolumeInUSD = calculateTotalVolumesInUSD24h( + baseVolume24h, + quoteVolume24h, + baseSymbol, + priceMap + ); + + return total + totalVolumeInUSD; + }, 0); + + // console.log('totalVolumeInUSD24h:', totalVolumeInUSD24h); + return totalVolumeInUSD24h; + } catch (error) { + console.error('Error fetching or processing data:', error); + throw error; + } +}; + + diff --git a/dexs/balanced/index.ts b/dexs/balanced/index.ts new file mode 100644 index 0000000000..b53951db66 --- /dev/null +++ b/dexs/balanced/index.ts @@ -0,0 +1,28 @@ +import { getPoolFees_24h, getPoolVolumes_24h } from './balanced.ts' +import { CHAIN } from '../../helpers/chains' + +export default { + version: 1, + adapter: { + [CHAIN.ICON]: { + runAtCurrTime: true, + start: 1700000000, + meta: { + methodology: { + Fees: 'Users pay fees for trading on the Balanced DEX.', + DataSource: 'Data is sourced from the Balanced Network API and ICON Tracker RPC Node. It is processed to calculate trading fees and volume accrued over a 24-hour period. Stats can be verified at https://stats.balanced.network/' + }, + }, + fetch: async () => { + const volumeResponse = await getPoolVolumes_24h() + const feeResponse = await getPoolFees_24h() + + return { + dailyVolume: volumeResponse.toString(), + dailyFees: feeResponse.toString(), + timestamp: Date.now() + } + }, + }, + } +} \ No newline at end of file From ba19ef4e3702524662ff60a9df7cf811e0b06127 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 13 Jun 2024 16:21:22 +0000 Subject: [PATCH 0793/1590] fix adapter --- dexs/maverick-v2/index.ts | 12 ++-- dexs/maverick-v2/maverick-v2.ts | 118 ++++++++++---------------------- fees/maverick-v2.ts | 42 ------------ 3 files changed, 44 insertions(+), 128 deletions(-) delete mode 100644 fees/maverick-v2.ts diff --git a/dexs/maverick-v2/index.ts b/dexs/maverick-v2/index.ts index 05e73792f3..977cee241a 100644 --- a/dexs/maverick-v2/index.ts +++ b/dexs/maverick-v2/index.ts @@ -1,29 +1,29 @@ // Maverick v2 volume import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { fetchVolumeV2, maverickV2Factories } from "./maverick-v2"; +import { getData, maverickV2Factories } from "./maverick-v2"; const adapter: SimpleAdapter = { version: 2, adapter: { [CHAIN.BSC]: { - fetch: fetchVolumeV2(), + fetch: getData, start: maverickV2Factories[CHAIN.BSC].startTimestamp, }, [CHAIN.BASE]: { - fetch: fetchVolumeV2(), + fetch: getData, start: maverickV2Factories[CHAIN.BASE].startTimestamp, }, [CHAIN.ERA]: { - fetch: fetchVolumeV2(), + fetch: getData, start: maverickV2Factories[CHAIN.ERA].startTimestamp, }, [CHAIN.ETHEREUM]: { - fetch: fetchVolumeV2(), + fetch: getData, start: maverickV2Factories[CHAIN.ETHEREUM].startTimestamp, }, [CHAIN.ARBITRUM]: { - fetch: fetchVolumeV2(), + fetch: getData, start: maverickV2Factories[CHAIN.ARBITRUM].startTimestamp, }, }, diff --git a/dexs/maverick-v2/maverick-v2.ts b/dexs/maverick-v2/maverick-v2.ts index 49295d3acc..b2e968579b 100644 --- a/dexs/maverick-v2/maverick-v2.ts +++ b/dexs/maverick-v2/maverick-v2.ts @@ -1,5 +1,5 @@ import { CHAIN } from "../../helpers/chains"; -import { ChainBlocks, FetchOptions } from "../../adapters/types"; +import { FetchOptions } from "../../adapters/types"; export const maverickV2Factories: { [key: string]: any } = { [CHAIN.ETHEREUM]: { @@ -34,95 +34,53 @@ const mavV2PoolCreated = `event PoolCreated(address poolAddress,uint8 protocolFe const mavV2SwapEvent = "event PoolSwap(address sender,address recipient,(uint256 amount,bool tokenAIn,bool exactOutput,int32 tickLimit) params,uint256 amountIn,uint256 amountOut)"; -const getData = async (options: any, dataType: "volume" | "fee") => { +export const getData = async (options: FetchOptions) => { const factory = maverickV2Factories[options.chain].factory; const factoryFromBlock = maverickV2Factories[options.chain].startBlock; - - let pools: string[]; - const logs = await options.getLogs({ - target: factory, - fromBlock: factoryFromBlock, - eventAbi: mavV2PoolCreated, - }); - - pools = logs.map((log: any) => log.poolAddress); - const tokenAs = await options.api.multiCall({ - abi: "address:tokenA", - calls: pools!, - }); - const tokenBs = await options.api.multiCall({ - abi: "address:tokenB", - calls: pools!, - }); - - const swapLogs = await options.getLogs({ - targets: pools, - eventAbi: mavV2SwapEvent, - topic: "0x103ed084e94a44c8f5f6ba8e3011507c41063177e29949083c439777d8d63f60", - flatten: false, - }); - - let feesA = [] as any; - let feesB = [] as any; - if (dataType == "fee") { - feesA = await options.api.multiCall({ - abi: "function fee(bool tokenAIn) view returns (uint256)", - calls: pools!.map((address: string) => ({ - target: address, - params: [true], - })), + const dailyFees = options.createBalances(); + const dailyVolume = options.createBalances(); + try { + const logs = await options.getLogs({ + target: factory, + fromBlock: factoryFromBlock, + eventAbi: mavV2PoolCreated, }); - feesB = await options.api.multiCall({ - abi: "function fee(bool tokenAIn) view returns (uint256)", - calls: pools!.map((address: string) => ({ - target: address, - params: [false], - })), + const pools = [...new Set(logs.map((log: any) => log.poolAddress))]; + const tokenAs = await options.api.multiCall({ abi: "address:tokenA", calls: pools! }); + const tokenBs = await options.api.multiCall({ abi: "address:tokenB", calls: pools! }); + const swapLogs = await options.getLogs({ + targets: pools, + eventAbi: mavV2SwapEvent, + topic: "0x103ed084e94a44c8f5f6ba8e3011507c41063177e29949083c439777d8d63f60", + flatten: false, }); - } - swapLogs.forEach((log: any[], index: number) => { - const tokenA = tokenAs[index]; - const tokenB = tokenBs[index]; - if (!log.length) return; - log.forEach((i: any) => { - // element 3 is amount in - let amount = Number(i[3]); - // element 2,1 is tokenAIn - let tokenAIn = Boolean(i[2][1]); + const feesA = logs.map((log: any) => Number(log.feeAIn)); + const feesB = logs.map((log: any) => Number(log.feeBIn)); - if (dataType == "fee") { - let fee = tokenAIn ? feesA[index] : feesB[index]; - options.api.add(tokenAIn ? tokenA : tokenB, (amount * fee) / 1e18); - } else { - options.api.add(tokenAIn ? tokenA : tokenB, amount); - } + swapLogs.forEach((log: any[], index: number) => { + const tokenA = tokenAs[index]; + const tokenB = tokenBs[index]; + if (!log.length) return; + log.forEach((i: any) => { + // element 3 is amount in + const amount = Number(i[3]); + // element 2,1 is tokenAIn + const tokenAIn = Boolean(i[2][1]); + const fee = tokenAIn ? feesA[index] : feesB[index]; + dailyFees.add(tokenAIn ? tokenA : tokenB, (amount * fee) / 1e18); + dailyVolume.add(tokenAIn ? tokenA : tokenB, amount); + }); }); - }); - - if (dataType == "fee") { - let totalFee = await options.api.getBalancesV2(); return { - timestamp: options.startOfDay, - dailyFees: totalFee, - dailyUserFees: totalFee, + dailyVolume: dailyVolume, + dailyFees: dailyFees, }; - } else { + } catch (e) { + console.error(e); return { - timestamp: options.startOfDay, - dailyVolume: await options.api.getBalancesV2(), + dailyVolume: dailyVolume, + dailyFees: dailyFees, }; } }; - -export const fetchVolumeV2 = () => { - return async (options: FetchOptions) => { - return await getData(options, "volume"); - }; -}; - -export const fetchFeeV2 = () => { - return async (options: FetchOptions) => { - return await getData(options, "fee"); - }; -}; diff --git a/fees/maverick-v2.ts b/fees/maverick-v2.ts deleted file mode 100644 index 1e01e7c137..0000000000 --- a/fees/maverick-v2.ts +++ /dev/null @@ -1,42 +0,0 @@ -// Maverick v2 fee -import { SimpleAdapter } from "../adapters/types"; -import { CHAIN } from "../helpers/chains"; -import { - fetchFeeV2, - maverickV2Factories, -} from "../dexs/maverick-v2/maverick-v2"; - -const methodology = { - UserFees: "LPs collect 100% of the fee generated in a pool", - Fees: "Fees generated on each swap at a rate set by the pool.", - TotalUserFees: "Cumulative all-time Fees", - TotalFees: "Cumulative all-time Fees", -}; - -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.BSC]: { - fetch: fetchFeeV2(), - start: maverickV2Factories[CHAIN.BSC].startTimestamp, - }, - [CHAIN.BASE]: { - fetch: fetchFeeV2(), - start: maverickV2Factories[CHAIN.BASE].startTimestamp, - }, - [CHAIN.ERA]: { - fetch: fetchFeeV2(), - start: maverickV2Factories[CHAIN.ERA].startTimestamp, - }, - [CHAIN.ETHEREUM]: { - fetch: fetchFeeV2(), - start: maverickV2Factories[CHAIN.ETHEREUM].startTimestamp, - }, - [CHAIN.ARBITRUM]: { - fetch: fetchFeeV2(), - start: maverickV2Factories[CHAIN.ARBITRUM].startTimestamp, - }, - }, -}; - -export default adapter; From bc1e93c77f444c2a09f704b692e3c83bc4b3f76b Mon Sep 17 00:00:00 2001 From: jan-magpie <155635960+jan-magpie@users.noreply.github.com> Date: Fri, 14 Jun 2024 11:33:31 +0530 Subject: [PATCH 0794/1590] Create magpie.ts adding magpie revenue --- fees/magpie.ts | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 fees/magpie.ts diff --git a/fees/magpie.ts b/fees/magpie.ts new file mode 100644 index 0000000000..83d102ff21 --- /dev/null +++ b/fees/magpie.ts @@ -0,0 +1,63 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { Chain } from "@defillama/sdk/build/general"; + +const event_paid_stream = 'event RewardPaid (address indexed _user,address indexed _receiver,uint256 _reward,address indexed _rewardToken)'; +const event_paid_base = 'event RewardPaid (address indexed _user,address indexed _receiver,uint256 _reward,address indexed _token)'; + +type TAddress = { + [c: string]: string; +} +const address_stream: TAddress = { + + [CHAIN.BSC]: '0x924786bb8d6888bE49E5c27E6E2Df71D6077A2D3', + [CHAIN.ARBITRUM]: '0x2B5D9ADea07B590b638FFc165792b2C610EdA649' +} + +const address_base: TAddress = { + [CHAIN.BSC]: '0x94Eb0E6800F10E22550e104EC04f98F043B6b3ad', + [CHAIN.ARBITRUM]: '0x4E47d553FD423316094aBB07E42970A689E1f5f7' +} +//all revenue is from bribes and is given to governance token holders 100% + +const graph = (chain: Chain) => { + return async ({ createBalances, getLogs, getFromBlock, getToBlock }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + const dailyFees = createBalances(); + (await getLogs({ + target: address_stream[chain], + eventAbi: event_paid_stream, + fromBlock, + toBlock + })).map((e: any) => { + dailyFees.add(e._rewardToken, e._reward) + }), + (await getLogs({ + target: address_base[chain], + eventAbi: event_paid_base, + fromBlock, + toBlock + })).map((e: any) => { + dailyFees.add(e._token, e._reward) + }) + return { dailyFees, dailyRevenue: dailyFees,dailyUserFees:dailyFees }; + } +} + + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + + [CHAIN.BSC]: { + fetch: graph(CHAIN.BSC), + start: 77678653, + }, + [CHAIN.ARBITRUM]: { + fetch: graph(CHAIN.ARBITRUM), + start: 77678653, + }, + } +}; + +export default adapter; From 435dc28b035b2e0697b7b1cfc12b16fce49de25b Mon Sep 17 00:00:00 2001 From: slasher125 Date: Fri, 14 Jun 2024 15:34:51 +0400 Subject: [PATCH 0795/1590] missing tradejoe --- dexs/traderjoe/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index 05ef89dfb9..a8ac7b442d 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -14,7 +14,7 @@ type TEndpoint = { [s: string | Chain]: string; } const endpointsV2: TEndpoint = { - [CHAIN.AVAX]: "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/joe-v2", + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('6KD9JYCg2qa3TxNK3tLdhj5zuZTABoLLNcnUZXKG9vuH'), [CHAIN.ARBITRUM]: "https://barn.traderjoexyz.com/v1/dex/analytics/arbitrum?startTime=1672012800&aggregateBy=daily", [CHAIN.BSC]: "https://barn.traderjoexyz.com/v1/dex/analytics/binance?startTime=1677801600&aggregateBy=daily", [CHAIN.ETHEREUM]: "https://barn.traderjoexyz.com/v1/dex/analytics/ethereum?startTime=1695513600&aggregateBy=daily" From 5cc0a8e10870c5df79f9615a2ffd321c45016d97 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 14 Jun 2024 15:00:30 +0000 Subject: [PATCH 0796/1590] add fix fees --- dexs/maverick-v2/maverick-v2.ts | 2 +- fees/nuri-exchange-v1/index.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dexs/maverick-v2/maverick-v2.ts b/dexs/maverick-v2/maverick-v2.ts index b2e968579b..8a64bdce6c 100644 --- a/dexs/maverick-v2/maverick-v2.ts +++ b/dexs/maverick-v2/maverick-v2.ts @@ -68,7 +68,7 @@ export const getData = async (options: FetchOptions) => { // element 2,1 is tokenAIn const tokenAIn = Boolean(i[2][1]); const fee = tokenAIn ? feesA[index] : feesB[index]; - dailyFees.add(tokenAIn ? tokenA : tokenB, (amount * fee) / 1e18); + dailyFees.add(tokenAIn ? tokenA : tokenB, (amount) * (fee / 1e18)); dailyVolume.add(tokenAIn ? tokenA : tokenB, amount); }); }); diff --git a/fees/nuri-exchange-v1/index.ts b/fees/nuri-exchange-v1/index.ts index 162e22c943..3febcd91cf 100644 --- a/fees/nuri-exchange-v1/index.ts +++ b/fees/nuri-exchange-v1/index.ts @@ -1,6 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexFeesExports } from "../../helpers/dexVolumeLogs"; +import { exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; const FACTORY_ADDRESS = '0xAAA16c016BF556fcD620328f0759252E29b1AB57'; @@ -8,7 +8,7 @@ const adapter: SimpleAdapter = { version: 2, adapter: { [CHAIN.SCROLL]: { - fetch: getDexFeesExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS,}), + fetch: (options: FetchOptions) => exportDexVolumeAndFees({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS,})(options.endTimestamp, null, options), start: 1714608000, }, } From b279508184435dcea09383ade0653c6e30f51497 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 14 Jun 2024 15:41:41 +0000 Subject: [PATCH 0797/1590] disable run current --- dexs/clober-v2/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/clober-v2/index.ts b/dexs/clober-v2/index.ts index 09561cf98f..f2a6745755 100644 --- a/dexs/clober-v2/index.ts +++ b/dexs/clober-v2/index.ts @@ -79,7 +79,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.BASE]: { fetch: fetch, - runAtCurrTime: true, + // runAtCurrTime: true, start: 1718169619, meta: { methodology: 'Volume is calculated by summing the quote token volume of all trades on the protocol.', @@ -87,7 +87,7 @@ const adapter: SimpleAdapter = { }, [CHAIN.ERA]: { fetch: fetch, - runAtCurrTime: true, + // runAtCurrTime: true, start: 1718169619, meta: { methodology: 'Volume is calculated by summing the quote token volume of all trades on the protocol.', From c05340ad4feb8a131256b2774c99e684853bb5b3 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Fri, 14 Jun 2024 23:56:35 +0100 Subject: [PATCH 0798/1590] add fraxtal --- dexs/curve/index.ts | 1 + dexs/frax-swap/index.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/dexs/curve/index.ts b/dexs/curve/index.ts index 693b6a6a33..f162243a2a 100644 --- a/dexs/curve/index.ts +++ b/dexs/curve/index.ts @@ -11,6 +11,7 @@ const endpoints: { [chain: string]: string } = { [CHAIN.OPTIMISM]: "https://api.curve.fi/api/getSubgraphData/optimism", [CHAIN.XDAI]: "https://api.curve.fi/api/getSubgraphData/xdai", [CHAIN.CELO]: "https://api.curve.fi/api/getSubgraphData/celo", + [CHAIN.FRAXTAL]: "https://api.curve.fi/api/getSubgraphData/fraxtal", }; interface IAPIResponse { diff --git a/dexs/frax-swap/index.ts b/dexs/frax-swap/index.ts index 2f8705f1b5..0d1c6620d2 100644 --- a/dexs/frax-swap/index.ts +++ b/dexs/frax-swap/index.ts @@ -22,6 +22,7 @@ const chains: TChains = { [CHAIN.MOONBEAN]: 'Moonbeam', [CHAIN.MOONRIVER]: 'Moonriver', [CHAIN.POLYGON]: 'Polygon', + [CHAIN.FRAXTAL]: 'Fraxtal', }; interface IVolumeall { From 5ba14cff59370201da37352c60e1a1ec931d1cbe Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 15 Jun 2024 01:09:43 +0100 Subject: [PATCH 0799/1590] clusters rev --- fees/clusters.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 fees/clusters.ts diff --git a/fees/clusters.ts b/fees/clusters.ts new file mode 100644 index 0000000000..ce015e33e9 --- /dev/null +++ b/fees/clusters.ts @@ -0,0 +1,20 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types" +import { CHAIN } from "../helpers/chains" + +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: async ({ createBalances, getLogs }: FetchOptions) => { + const dailyFees = createBalances() + const logs = await getLogs({ target: "0x00000000000E1A99dDDd5610111884278BDBda1D", + eventAbi: 'event Bid(bytes32 from, uint256 amount, bytes32 name)' }) + logs.forEach((i: any) => dailyFees.add("0x0000000000000000000000000000000000000000", i.amount)) + + return { dailyFees, dailyRevenue: dailyFees } + }, + start: 1706746140 + }, + }, + version: 2 +} +export default adapters; \ No newline at end of file From 0f501e6e63e121e76ef9ab53dd49c00d6293c8ce Mon Sep 17 00:00:00 2001 From: Define101 Date: Sun, 16 Jun 2024 12:27:11 +0100 Subject: [PATCH 0800/1590] wen markets fix? --- fees/wen-markets.ts | 105 ++++++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 47 deletions(-) diff --git a/fees/wen-markets.ts b/fees/wen-markets.ts index 525f9141ad..1835780796 100644 --- a/fees/wen-markets.ts +++ b/fees/wen-markets.ts @@ -5,70 +5,80 @@ const wenLedger: any = { [CHAIN.POLYGON]: "0x5574d1e44eFcc5530409fbE1568f335DaF83951c" } const abis: any = { - getStats: { + getStats: { "inputs": [], "name": "getStats", "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "totalVolume", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalLiquidityBootstrapped", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalTokensCreated", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalTokensGraduated", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalTrades", - "type": "uint256" - } - ], - "internalType": "struct WenLedger.Stats", - "name": "", - "type": "tuple" - } + { + "components": [ + { + "internalType": "uint256", + "name": "totalVolume", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalLiquidityBootstrapped", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalTokensCreated", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalTokensGraduated", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalTrades", + "type": "uint256" + } + ], + "internalType": "struct WenLedger.Stats", + "name": "", + "type": "tuple" + } ], "stateMutability": "view", "type": "function" } -} +}; + const fetchFees = async (options: FetchOptions) => { - const tradeVolume = options.createBalances() - const bootstrapped = options.createBalances() + const tradeVolume = options.createBalances(); + const bootstrapped = options.createBalances(); + const fromStats = await options.fromApi.call({ target: wenLedger[options.chain], abi: abis.getStats, - }) + }); + const toStats = await options.toApi.call({ target: wenLedger[options.chain], abi: abis.getStats, - }) - bootstrapped.addGasToken((toStats.totalLiquidityBootstrapped - fromStats.totalLiquidityBootstrapped)/0.93) - bootstrapped.resizeBy(0.07) // 7% of liquidity bootstrapped - tradeVolume.addGasToken(toStats.totalVolume - fromStats.totalVolume) - const dailyFees = tradeVolume.clone() - dailyFees.resizeBy(0.01) // 1% of trading volume - dailyFees.addBalances(bootstrapped) + }); + + const dailyVolume = toStats.totalVolume - fromStats.totalVolume; + const dailyBootstrapped = toStats.totalLiquidityBootstrapped - fromStats.totalLiquidityBootstrapped; + + tradeVolume.addGasToken(dailyVolume); + bootstrapped.addGasToken(dailyBootstrapped / 0.93); + bootstrapped.resizeBy(0.07); // 7% of liquidity bootstrapped + + const dailyFees = tradeVolume.clone(); + dailyFees.resizeBy(0.01); // 1% of trading volume + dailyFees.addBalances(bootstrapped); + return { dailyFees, dailyRevenue: dailyFees, dailyProtocolRevenue: dailyFees - } -} + }; +}; + const adapters: SimpleAdapter = { version: 2, adapter: { @@ -77,5 +87,6 @@ const adapters: SimpleAdapter = { start: 1716854400 }, } -} +}; + export default adapters; From 111b59bdb94d2857192068b99efc7cd3f40dddf8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 16 Jun 2024 16:00:42 +0000 Subject: [PATCH 0801/1590] fix missing price --- fees/polter/index.ts | 51 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/fees/polter/index.ts b/fees/polter/index.ts index 64b643f2a8..63443e8231 100644 --- a/fees/polter/index.ts +++ b/fees/polter/index.ts @@ -17,6 +17,49 @@ const endpoints: any = { [CHAIN.FANTOM]: "https://api.studio.thegraph.com/query/71811/polter/version/latest", }; +const tokens: any = { + '0x5c725631fd299703d0a74c23f89a55c6b9a0c52f': { + gecko: 'polter-finance', + decimals: 18 + }, + '0xbbce4b1513d4285bd7a59c2c63835535151c8e7c': { + gecko: 'fantom', + decimals: 18 + }, + '0x5a75a5f3a637cc9394816efc553d102302d4cfcd': { + gecko: 'usd-coin', + decimals: 6 + }, + '0xa826b29d81caef8c9aa212f172ab3ef00566e91e': { + gecko: 'magic-internet-money', + decimals: 18 + }, + '0x4bf6f3210488091a0111daf7ab7cf840a3af8022': { + gecko: 'stader-sftmx', + decimals: 18 + }, + '0x0299553df0fa396c0f6f3456d293608e189c3cf3': { + gecko: 'solana', + decimals: 18 + }, + '0xb49da25f726451ba0e7c7e1c0b273322d2656514': { + gecko: 'layerzero-usdc', + decimals: 6 + }, + '0xc60f08059586849810d9c19c67919d2d99174ecf': { + gecko: 'axlusdc', + decimals: 6 + }, + '0xa37e0d5590436bd9abd2803c18c328a650b236ee': { + gecko: 'bitcoin', + decimals: 8 + }, + '0x328c7a684f160c089ebff07ff1b5a417f024979e': { + gecko: 'bridged-wrapped-ether-stargate', + decimals: 18 + } +} + type RewardsPaid = { id: number @@ -56,8 +99,12 @@ const fetch: FetchV2 = async ({ chain, startTimestamp, endTimestamp, createBalan rewardsPaids.push(...rewardsPaid) } rewardsPaids.forEach((reward: RewardsPaid) => { - dailyFees.add(reward.rewardsToken, reward.reward) - dailyRevenue.add(reward.rewardsToken, reward.reward) + const {gecko, decimals} = tokens[reward.rewardsToken] + if (!gecko) { + return + } + dailyFees.addCGToken(gecko, Number(reward.reward) / 10 ** decimals) + dailyRevenue.addCGToken(gecko,Number(reward.reward) / 10 ** decimals) }) dailyRevenue.resizeBy(0.5) return { From c9e9491d8ba6382278edfdf4089e0514c2974841 Mon Sep 17 00:00:00 2001 From: Define101 Date: Sun, 16 Jun 2024 21:24:36 +0100 Subject: [PATCH 0802/1590] thruster-v2 --- protocols/thruster-v2.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/thruster-v2.ts diff --git a/protocols/thruster-v2.ts b/protocols/thruster-v2.ts new file mode 100644 index 0000000000..172b72b764 --- /dev/null +++ b/protocols/thruster-v2.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + blast: { + factory: '0x37836821a2c03c171fB1a595767f4a16e2b93Fc4', + } +}) \ No newline at end of file From db57c6f7b647f27549d359fffbdcfee9606394e7 Mon Sep 17 00:00:00 2001 From: bladeswap Date: Mon, 17 Jun 2024 11:26:48 +0900 Subject: [PATCH 0803/1590] add BladeSwap dex --- dexs/bladeswap/index.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 dexs/bladeswap/index.ts diff --git a/dexs/bladeswap/index.ts b/dexs/bladeswap/index.ts new file mode 100644 index 0000000000..1e94cad280 --- /dev/null +++ b/dexs/bladeswap/index.ts @@ -0,0 +1,18 @@ +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter( + { + [CHAIN.BLAST]: + "https://graph-node.bladeswap.xyz/subgraphs/name/bladeswap/algebra-mainnet-info", + }, + { + factoriesName: "factories", + dayData: "algebraDayData", + dailyVolume: "volumeUSD", + totalVolume: "totalVolumeUSD", + } +); + +adapters.adapter.blast.start = 1717740000; +export default adapters; From 493cf2ad6bd3717b6b6d7f275a749e6ccad41128 Mon Sep 17 00:00:00 2001 From: beruf Date: Mon, 17 Jun 2024 15:10:43 +0200 Subject: [PATCH 0804/1590] feat: add aktionariat volume --- dexs/aktionariat/index.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 dexs/aktionariat/index.ts diff --git a/dexs/aktionariat/index.ts b/dexs/aktionariat/index.ts new file mode 100644 index 0000000000..a652aa3a92 --- /dev/null +++ b/dexs/aktionariat/index.ts @@ -0,0 +1,21 @@ +import * as sdk from "@defillama/sdk"; +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter({ + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('2ZoJCp4S7YP7gbYN2ndsYNjPeZBV1PMti7BBoPRRscNq'), + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('3QfEXbPfP23o3AUzcmjTfRtUUd4bfrFj3cJ4jET57CTX'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('7camBLZckE5TLKha372tqawpDs8Lkez6yYiri7PykRak'), +}, { + factoriesName: "registries", + totalVolume: "totalVolumeUSD", + dayData: "aktionariatDayDatas", + dailyVolume: "volumeUSD", + dailyVolumeTimestampField: "date" +}); + +adapters.adapter.ethereum.start = 14830096; +adapters.adapter.optimism.start = 4198027; +adapters.adapter.polygon.start = 58116009; + +export default adapters; \ No newline at end of file From c6b6c67c9b5ad2da3bd981a055ea4fbcdecbc34a Mon Sep 17 00:00:00 2001 From: Define101 Date: Mon, 17 Jun 2024 16:19:50 +0100 Subject: [PATCH 0805/1590] add daily rev field --- fees/dragonswap-sei.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/dragonswap-sei.ts b/fees/dragonswap-sei.ts index f8929db5c4..379aa1280e 100644 --- a/fees/dragonswap-sei.ts +++ b/fees/dragonswap-sei.ts @@ -32,7 +32,7 @@ const graphs = (graphUrls: ChainEndpoints) => { return { dailyFees: dailyFee.toString(), dailyLPProvidersRevenue: (dailyFee * 0.7).toString(), - dailyProtocolAccumulation: (dailyFee * 0.3).toString(), + dailyRevenue: (dailyFee * 0.3).toString(), }; }; return fetch From 4cbc52ae49357baca7658c96b832d85d7024bf99 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 17 Jun 2024 16:24:16 +0000 Subject: [PATCH 0806/1590] fix spike fees camelot-v2 --- fees/camelot-v2.ts | 58 +++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/fees/camelot-v2.ts b/fees/camelot-v2.ts index 2578e0d22d..535ef76a35 100644 --- a/fees/camelot-v2.ts +++ b/fees/camelot-v2.ts @@ -2,10 +2,8 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import BigNumber from "bignumber.js"; import request, { gql } from "graphql-request"; -import { Adapter, FetchResultFees } 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 IPoolData { date: number; @@ -20,41 +18,39 @@ const endpoints: IURL = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv') } -const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { - const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - const dateId = Math.floor(getTimestampAtStartOfDayUTC(todayTimestamp) / 86400) - const graphQuery = gql - ` - { - uniswapDayData(id: ${dateId}) { - id - dailyFeeUSD - } +const fetch = async (options: FetchOptions): Promise => { + const graphQuery = gql + ` + { + pairDayDatas(where:{date_gte:${options.fromTimestamp}, date_lte:${options.endTimestamp}, reserveUSD_gt:1000}, orderBy:dailyFeeUSD, orderDirection:desc) { + id + dailyFeeUSD + reserveUSD } - `; - - const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).uniswapDayData; - const dailyFeeUSD = graphRes; - const dailyFee = dailyFeeUSD?.dailyFeeUSD ? new BigNumber(dailyFeeUSD.dailyFeeUSD) : undefined - if (dailyFee === undefined) return { timestamp } - return { - timestamp, - dailyFees: dailyFee.toString(), - dailyUserFees: dailyFee.toString(), - dailyRevenue: dailyFee.multipliedBy(0.4).toString(), - dailyProtocolRevenue: dailyFee.multipliedBy(0.05).toString(), - dailyHoldersRevenue: dailyFee.multipliedBy(0.35).toString(), - dailySupplySideRevenue: dailyFee.multipliedBy(0.60).toString(), - }; + } + `; + + const graphRes: IPoolData[] = (await request(endpoints[options.chain], graphQuery)).pairDayDatas; + const dailyFeeUSD = graphRes; + const dailyFee = dailyFeeUSD.reduce((acc, pool) => { + return acc.plus(pool.dailyFeeUSD); + }, new BigNumber(0)); + return { + dailyFees: dailyFee.toString(), + dailyUserFees: dailyFee.toString(), + dailyRevenue: dailyFee.multipliedBy(0.4).toString(), + dailyProtocolRevenue: dailyFee.multipliedBy(0.05).toString(), + dailyHoldersRevenue: dailyFee.multipliedBy(0.35).toString(), + dailySupplySideRevenue: dailyFee.multipliedBy(0.60).toString(), }; + } const adapter: Adapter = { - version: 1, + version: 2, adapter: { [CHAIN.ARBITRUM]: { - fetch: fetch(CHAIN.ARBITRUM), + fetch: fetch, start: 1668124800, }, }, From 1c14f908d12df4a759ae3dc5adb7c1f30cbc9a73 Mon Sep 17 00:00:00 2001 From: stabble-devops Date: Mon, 17 Jun 2024 16:22:45 -0400 Subject: [PATCH 0807/1590] chore: update api endpoint --- dexs/stabble/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/stabble/index.ts b/dexs/stabble/index.ts index 6eda57cac4..4470eacce5 100644 --- a/dexs/stabble/index.ts +++ b/dexs/stabble/index.ts @@ -1,11 +1,11 @@ import { CHAIN } from '../../helpers/chains'; import { httpGet } from '../../utils/fetchURL'; -const REGISTRY_API = 'https://app.stabble.org/api/registry?cluster=mainnet-beta'; +const POOLS_API_ENDPOINT = 'https://pools-spn5wgvtfq-uc.a.run.app/'; async function fetch(timestamp: number) { - const registry = await httpGet(REGISTRY_API); - const vol24h = registry.pools.reduce((sum: number, pool: any) => sum + (pool?.stats?.volume_24h || 0), 0); + 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 From e6cbf96f5c4f950e0ffe696285a860174c040198 Mon Sep 17 00:00:00 2001 From: bladeswap Date: Tue, 18 Jun 2024 11:55:59 +0900 Subject: [PATCH 0808/1590] add bladeswap amm volume --- dexs/bladeswap/index.ts | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/dexs/bladeswap/index.ts b/dexs/bladeswap/index.ts index 1e94cad280..d3cdaca01f 100644 --- a/dexs/bladeswap/index.ts +++ b/dexs/bladeswap/index.ts @@ -1,6 +1,6 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; - +import { FetchOptions, BreakdownAdapter } from "../../adapters/types"; const adapters = univ2Adapter( { [CHAIN.BLAST]: @@ -14,5 +14,38 @@ const adapters = univ2Adapter( } ); +const fetch: any = async ({ getLogs, createBalances, }: FetchOptions) => { + const dailyVolume = createBalances() + let eventAbi = "event Swap(address indexed pool, address indexed user, bytes32[] tokenRef, int128[] delta)" + const logs = await getLogs({ target: "0x10F6b147D51f7578F760065DF7f174c3bc95382c", eventAbi, }) + logs.forEach((log: any) => { + const pool = log.pool.toLowerCase() + const hasPool = log.tokenRef.some((val: string) => '0x' + val.slice(2 + 24).toLowerCase() === pool) + // this is lp deposit/withdrawal, not swap + if (hasPool) return; + log.tokenRef.forEach((val: string, i: number) => { + const token = '0x' + val.slice(2 + 24).toLowerCase() + const volume = Number(log.delta[i]) + if (volume < 0) return; + dailyVolume.add(token, volume) + }) + }) + return { dailyVolume }; +} + adapters.adapter.blast.start = 1717740000; -export default adapters; + +const adapter: BreakdownAdapter = { + breakdown: { + v2: { + [CHAIN.BLAST]: { + fetch, + start: 1709208245, + } + }, + CL: adapters.adapter + }, + version: 2 +} + +export default adapter; From dc829ead9a6002fa948282930784ddb8a0321e83 Mon Sep 17 00:00:00 2001 From: jooleseth Date: Tue, 18 Jun 2024 12:29:40 +0800 Subject: [PATCH 0809/1590] use .3% address instead of 1% --- protocols/thruster-v2.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/thruster-v2.ts b/protocols/thruster-v2.ts index 172b72b764..6196692d8d 100644 --- a/protocols/thruster-v2.ts +++ b/protocols/thruster-v2.ts @@ -2,6 +2,6 @@ import { uniV2Exports } from "../helpers/uniswap"; export default uniV2Exports({ blast: { - factory: '0x37836821a2c03c171fB1a595767f4a16e2b93Fc4', + factory: '0xb4A7D971D0ADea1c73198C97d7ab3f9CE4aaFA13', } }) \ No newline at end of file From 2ffb6b5781816f215c64b629a7266121a37ae97c Mon Sep 17 00:00:00 2001 From: slasher125 Date: Tue, 18 Jun 2024 11:11:18 +0400 Subject: [PATCH 0810/1590] camelot-v2 change subgraph url --- dexs/camelot/index.ts | 2 +- fees/camelot-v2.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/camelot/index.ts b/dexs/camelot/index.ts index f043d22569..b98070897e 100644 --- a/dexs/camelot/index.ts +++ b/dexs/camelot/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv') + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('8zagLSufxk5cVhzkzai3tyABwJh53zxn9tmUYJcJxijG') }, {}); adapters.adapter.arbitrum.start = 1668124800; diff --git a/fees/camelot-v2.ts b/fees/camelot-v2.ts index 535ef76a35..41ed9d5a24 100644 --- a/fees/camelot-v2.ts +++ b/fees/camelot-v2.ts @@ -15,7 +15,7 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('CnzVKhPQizzxSpysSveSLt1XZqkBRSprFtFJv3RaBQPv') + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('8zagLSufxk5cVhzkzai3tyABwJh53zxn9tmUYJcJxijG') } const fetch = async (options: FetchOptions): Promise => { From 1557bba844641751d943c591592af0d7148bb1c4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 18 Jun 2024 11:36:29 +0000 Subject: [PATCH 0811/1590] fix version 2 --- dexs/voltage-v3/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/voltage-v3/index.ts b/dexs/voltage-v3/index.ts index 69b432aedf..2f31d17eff 100644 --- a/dexs/voltage-v3/index.ts +++ b/dexs/voltage-v3/index.ts @@ -29,6 +29,7 @@ const v3StartTimes = { } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.FUSE]: { fetch: v3Graph(CHAIN.FUSE), From baf661ee7f023d0d78e6cd82f3a2e6c7c35c8b78 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 18 Jun 2024 12:00:29 +0000 Subject: [PATCH 0812/1590] fix adapter --- dexs/sundaeswap/index.ts | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/dexs/sundaeswap/index.ts b/dexs/sundaeswap/index.ts index 28bf483299..c94e540f5c 100644 --- a/dexs/sundaeswap/index.ts +++ b/dexs/sundaeswap/index.ts @@ -1,8 +1,7 @@ -import fetchURL from "../../utils/fetchURL" -import { ChainBlocks, DISABLED_ADAPTER_KEY, FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { FetchOptions, FetchResultV2, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import disabledAdapter from "../../helpers/disabledAdapter"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const historicalVolumeEndpoint = "https://stats.sundaeswap.finance/api/defillama/v0/global-stats/2100" @@ -11,21 +10,24 @@ interface IVolumeall { day: string; } -const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, startOfDay }: FetchOptions): Promise => { +const fetch = async ({ createBalances, startOfDay }: FetchOptions): Promise => { const dailyVolume = createBalances() + const dayTimestamp = getTimestampAtStartOfDayUTC(startOfDay); + const dateStr = new Date(dayTimestamp * 1000).toISOString().split('T')[0]; const historicalVolume: IVolumeall[] = (await fetchURL(historicalVolumeEndpoint)).response; - - dailyVolume.addGasToken(historicalVolume - .find(dayItem => getUniqStartOfTodayTimestamp(new Date(dayItem.day)) === startOfDay)?.volumeLovelace as any) + const volume = historicalVolume.find(dayItem => dayItem.day === dateStr)?.volumeLovelace as any + if (!volume) { + return {} + } + dailyVolume.addGasToken(volume) return { dailyVolume, - timestamp: startOfDay, }; }; const adapter: SimpleAdapter = { + version: 2, adapter: { - [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.CARDANO]: { fetch, start: 1643673600, From 11774bffbf6ccf86776ea2e0d0dd7de1fb24678a Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 18 Jun 2024 19:55:37 +0200 Subject: [PATCH 0813/1590] track time.fun fees --- fees/time-fun.ts | 15 +++++++++++++++ helpers/time-fun.ts | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 fees/time-fun.ts create mode 100644 helpers/time-fun.ts diff --git a/fees/time-fun.ts b/fees/time-fun.ts new file mode 100644 index 0000000000..5df81eb1d4 --- /dev/null +++ b/fees/time-fun.ts @@ -0,0 +1,15 @@ +import { Adapter,} from "../adapters/types"; +import { getFeesExport } from "../helpers/time-fun"; +import { CHAIN } from "../helpers/chains"; + +const adapter: Adapter = { + adapter: { + [CHAIN.BASE]: { + fetch: getFeesExport('0x428aeF7fB31E4E86162D62d4530a4dd7232D953D'), + start: 1718288800, + }, + }, + version: 2, +} + +export default adapter; diff --git a/helpers/time-fun.ts b/helpers/time-fun.ts new file mode 100644 index 0000000000..af4e39ce70 --- /dev/null +++ b/helpers/time-fun.ts @@ -0,0 +1,35 @@ +import { FetchV2 } from "../adapters/types"; + +import ADDRESSES from "./coreAssets.json"; + +const abi = { + "SharesRedeemed": "event SharesRedeemed((address from, uint256 shares, uint256 totalCost, uint256 feeToApp, uint256 feeToCreator, uint256 feeToShareholders, uint256 feeToReferrer, address experienceCreator, uint256 totalSupplyExperience, address referrerAddress) event_)", + "SharesTraded": "event SharesTraded((address from, uint256 shares, bool isBuy, uint256 totalCost, uint256 feeToApp, uint256 feeToCreator, uint256 feeToShareholders, uint256 feeToReferrer, address experienceCreator, uint256 totalSupplyExperience, address referrerAddress) event_)", +} + +export function getFeesExport(contractAddress: string, { + token = ADDRESSES.null, +}: { token?: string } = {}) { + return (async ({ getLogs, createBalances, }) => { + const dailyFees = createBalances() + const dailyRevenue = createBalances() + const dailySupplySideRevenue = createBalances() + const tradeLogs = await getLogs({ target: contractAddress, eventAbi: abi.SharesTraded, topics: ['0x069a3131d4d72dbdcb40a0d8ff0aa58f71096c2726da05e3ed2608ddf1e93228'] }) + const redeemLogs = await getLogs({ target: contractAddress, eventAbi: abi.SharesRedeemed, topics: ['0x58d64bdf8bc9e2ab45691bd838283f536381da0d63e5370b131650a085f846c6'] }) + const addFees = ([e]: any) => { + + dailyFees.add(token, e.feeToApp) + dailyFees.add(token, e.feeToCreator) + dailyFees.add(token, e.feeToShareholders) + dailyFees.add(token, e.feeToReferrer) + + dailyRevenue.add(token, e.feeToApp) + dailySupplySideRevenue.add(token, e.feeToShareholders) + } + + tradeLogs.map(addFees) + redeemLogs.map(addFees) + + return { dailyFees, dailyRevenue, dailySupplySideRevenue, } + }) as FetchV2 +} \ No newline at end of file From cb352d969d73eb1891ab54911e55cd23cb0b2d6b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 18 Jun 2024 12:14:41 +0000 Subject: [PATCH 0814/1590] fix adapter their api does not support adapter v2 --- dexs/sundaeswap/index.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/dexs/sundaeswap/index.ts b/dexs/sundaeswap/index.ts index c94e540f5c..802e11fd04 100644 --- a/dexs/sundaeswap/index.ts +++ b/dexs/sundaeswap/index.ts @@ -1,5 +1,5 @@ import fetchURL from "../../utils/fetchURL"; -import { FetchOptions, FetchResultV2, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, FetchResult, FetchResultV2, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; @@ -10,23 +10,26 @@ interface IVolumeall { day: string; } -const fetch = async ({ createBalances, startOfDay }: FetchOptions): Promise => { +const fetch = async (_,_a:any,{ createBalances, startOfDay }: FetchOptions): Promise => { const dailyVolume = createBalances() const dayTimestamp = getTimestampAtStartOfDayUTC(startOfDay); const dateStr = new Date(dayTimestamp * 1000).toISOString().split('T')[0]; const historicalVolume: IVolumeall[] = (await fetchURL(historicalVolumeEndpoint)).response; const volume = historicalVolume.find(dayItem => dayItem.day === dateStr)?.volumeLovelace as any if (!volume) { - return {} + return { + timestamp: dayTimestamp, + } } dailyVolume.addGasToken(volume) return { + timestamp: dayTimestamp, dailyVolume, }; }; const adapter: SimpleAdapter = { - version: 2, + version: 1, adapter: { [CHAIN.CARDANO]: { fetch, From 0794c8d97fb52e85e1065652e38f3148b029ccb0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 19 Jun 2024 02:15:39 +0000 Subject: [PATCH 0815/1590] fix liquidswap --- dexs/liquidswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/liquidswap/index.ts b/dexs/liquidswap/index.ts index 13b189db72..518c3ed7ff 100644 --- a/dexs/liquidswap/index.ts +++ b/dexs/liquidswap/index.ts @@ -19,7 +19,7 @@ const fetch = async (timestamp: number) => { .reduce((acc, { value }) => acc + Number(value), 0) const dailyVolume = historicalVolume - .find(dayItem => Number(dayItem.timestamp) === dayTimestamp)?.value + .find(dayItem => getUniqStartOfTodayTimestamp(new Date(Number(dayItem.timestamp) * 1000)) === dayTimestamp)?.value return { totalVolume: `${totalVolume}`, From 1e073f6f5252d0c80c3bde27b6e6a4c74f65af1b Mon Sep 17 00:00:00 2001 From: slasher125 Date: Wed, 19 Jun 2024 10:28:01 +0400 Subject: [PATCH 0816/1590] update graph urls --- dexs/dystopia/index.ts | 3 ++- dexs/sushiswap/trident.ts | 2 +- options/thales/index.ts | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dexs/dystopia/index.ts b/dexs/dystopia/index.ts index 87a2d83321..68db3cc15c 100644 --- a/dexs/dystopia/index.ts +++ b/dexs/dystopia/index.ts @@ -1,8 +1,9 @@ +import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.POLYGON]: "https://api.thegraph.com/subgraphs/name/dystopia-exchange/dystopia" + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('A1pnYfdxjPz6WMTRtmhyFKYDvwSuAyAdckwsUVWvgd6F') }, {}); adapters.adapter.polygon.start = 1652932015; export default adapters; diff --git a/dexs/sushiswap/trident.ts b/dexs/sushiswap/trident.ts index 6e219e9290..d8312331b6 100644 --- a/dexs/sushiswap/trident.ts +++ b/dexs/sushiswap/trident.ts @@ -7,7 +7,7 @@ import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { FetchOptions } from "../../adapters/types"; const endpointsTrident: Record = { - [CHAIN.POLYGON]: 'https://api.thegraph.com/subgraphs/name/sushi-v2/trident-polygon', + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('BSdbRfU6PjWSdKjhpfUQ6EgUpzMxgpf5c1ugaVwBJFsQ'), [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('FEgRuH9zeTRMZgpVv5YavoFEcisoK6KHk3zgQRRBqt51'), //[CHAIN.KAVA]: 'https://pvt.graph.kava.io/subgraphs/name/sushi-v2/trident-kava', // [CHAIN.METIS]: 'https://andromeda.thegraph.metis.io/subgraphs/name/sushi-v2/trident-metis', diff --git a/options/thales/index.ts b/options/thales/index.ts index a92420069f..cad31f745c 100644 --- a/options/thales/index.ts +++ b/options/thales/index.ts @@ -7,7 +7,7 @@ const endpoints: ChainEndpoints = { [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('GADfDRePpbqyjK2Y3JkQTBPBVQj98imhgKo7oRWW7RqQ'), [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('G7wi71W3PdtYYidKy5pEmJvJ1Xpop25ogynstRjPdyPG'), [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('FZH9ySiLCdqKrwefaospe6seSqV1ZoW4FvPQUGP7MFob'), - [CHAIN.BSC]: "https://api.thegraph.com/subgraphs/name/thales-markets/thales-bsc", + [CHAIN.BSC]: sdk.graph.modifyEndpoint('FrSU8JkxyoGiLyj1b5X8jATrNBYPts7h64rd5HZSCqAb'), }; const adapter: SimpleAdapter = { From ed3933532311f6a9f80e8b865c8a7bc2f5724f4a Mon Sep 17 00:00:00 2001 From: aya Date: Wed, 19 Jun 2024 14:15:09 +0100 Subject: [PATCH 0817/1590] chore: volume adaptator ready for first PR --- .gitignore | 3 +- dexs/dusa/index.ts | 87 ++++++++++++----------------------------- dexs/ekubo/index.ts | 3 ++ dexs/traderjoe/index.ts | 1 + helpers/chains.ts | 3 +- 5 files changed, 34 insertions(+), 63 deletions(-) diff --git a/.gitignore b/.gitignore index 6aae246f22..fb2ebfc7d0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ node_modules .vscode .DS_store .env -.idea \ No newline at end of file +.idea +yarn.lock \ No newline at end of file diff --git a/dexs/dusa/index.ts b/dexs/dusa/index.ts index 857757c002..414173003c 100644 --- a/dexs/dusa/index.ts +++ b/dexs/dusa/index.ts @@ -1,73 +1,38 @@ import { Adapter } from "../../adapters/types"; -// import { Chain } from "@defillama/sdk/build/general"; -import { FetchOptions, FetchResultVolume } from "../../adapters/types"; -// import { CHAIN } from "../../helpers/chains"; -import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; import fetchURL from "../../utils/fetchURL"; -// type TEndpoint = { -// [s: string | Chain]: string; -// } -// const endpoints: TEndpoint = { -// [CHAIN.MASSA]: "https://api-mainnet-dusa.up.railway.app/volume" -// } +type TEndpoint = { + [s: string]: string; +}; - type TEndpoint = { - [s: string]: string; - } const endpoints: TEndpoint = { - ["massa"]: "https://api-mainnet-dusa.up.railway.app/volume" - } + ["massa"]: "https://api-mainnet-dusa.up.railway.app/api/volume", +}; -interface IVolume { - timestamp: number; - volumeUsd: number; - } - const fetchVolume = async (options: FetchOptions): Promise => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) - const historicalVolume: IVolume[] = (await fetchURL(endpoints[options.chain])); - const totalVolume = historicalVolume - .filter(volItem => volItem.timestamp <= dayTimestamp) - .reduce((acc, { volumeUsd }) => acc + Number(volumeUsd), 0) - - const dailyVolume = historicalVolume - .find(dayItem => dayItem.timestamp === dayTimestamp)?.volumeUsd - return { - totalVolume: `${totalVolume}`, - dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, - timestamp: dayTimestamp, - } - } +const fetchVolume = async (timestamp: number) => { + const historicalVolume = await fetchURL(endpoints["massa"]); -const graphs = getChainVolume({ - graphUrls: endpoints, - totalVolume: { - factory: "lbfactories", - field: "volumeUSD", - }, - dailyVolume: { - factory: "DusaDayData", - field: "volumeUSD", - dateField: "date" - }, - }); + const totalVolume = historicalVolume.totalVolume.volume; + const dailyVolume = historicalVolume.dailyVolume.volume; + + + return { + totalVolume: `${totalVolume}`, + dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, + timestamp: timestamp, + }; +}; -// const adapter: Adapter = { -// adapter: { -// massa: { -// fetch: graphs(CHAIN.MASSA), -// start: 1713170000, -// }, -// }, -// }; const adapter: Adapter = { - adapter: { - massa: { - fetch: graphs("massa"), - start: 1713170000, - }, + adapter: { + [CHAIN.MASSA]: { + fetch: fetchVolume, + runAtCurrTime: true, + start: 1713170000 }, -}; + } +} -export default adapter; +export default adapter; \ No newline at end of file diff --git a/dexs/ekubo/index.ts b/dexs/ekubo/index.ts index f3b9d8b1d5..84ec70c080 100644 --- a/dexs/ekubo/index.ts +++ b/dexs/ekubo/index.ts @@ -6,7 +6,9 @@ import * as sdk from "@defillama/sdk"; const toki = (n: any) => "starknet:0x" + BigInt(n).toString(16).padStart("049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7".length, "0") const fetch = async (timestamp: number) => { + console.log('fetching ekubo timestamps', timestamp) const balances = new sdk.Balances({ chain: CHAIN.STARKNET, timestamp }) + console.log('fetching ekubo balances', balances) const response = ((await fetchURL("https://mainnet-api.ekubo.org/overview")).volumeByToken_24h as any[]) .map(t => ({ token: toki(t.token), vol: t.volume })) response.map((token) => { @@ -27,5 +29,6 @@ const adapter: Adapter = { }, } } +console.log('adapter', adapter) export default adapter; diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index 5c8723f4a4..6aff725392 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -24,6 +24,7 @@ interface IVolume { volumeUsd: number; } const fetchV2 = async (options: FetchOptions): Promise => { + console.log('options', options) const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) const historicalVolume: IVolume[] = (await fetchURL(endpointsV2[options.chain])); const totalVolume = historicalVolume diff --git a/helpers/chains.ts b/helpers/chains.ts index 822813907c..9dbe30b884 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -141,7 +141,8 @@ export enum CHAIN { FILECOIN = "filecoin", FRAXTAL = "fraxtal", IMX = "imx", - KROMA = "kroma" + KROMA = "kroma", + MASSA = "massa" } // Don´t use From db67a42475f1016757861fa7d57f699c85057a9d Mon Sep 17 00:00:00 2001 From: aya Date: Wed, 19 Jun 2024 14:15:46 +0100 Subject: [PATCH 0818/1590] Revert "chore: volume adaptator ready for first PR" This reverts commit ed3933532311f6a9f80e8b865c8a7bc2f5724f4a. --- .gitignore | 3 +- dexs/dusa/index.ts | 87 +++++++++++++++++++++++++++++------------ dexs/ekubo/index.ts | 3 -- dexs/traderjoe/index.ts | 1 - helpers/chains.ts | 3 +- 5 files changed, 63 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index fb2ebfc7d0..6aae246f22 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,4 @@ node_modules .vscode .DS_store .env -.idea -yarn.lock \ No newline at end of file +.idea \ No newline at end of file diff --git a/dexs/dusa/index.ts b/dexs/dusa/index.ts index 414173003c..857757c002 100644 --- a/dexs/dusa/index.ts +++ b/dexs/dusa/index.ts @@ -1,38 +1,73 @@ import { Adapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; +// import { Chain } from "@defillama/sdk/build/general"; +import { FetchOptions, FetchResultVolume } from "../../adapters/types"; +// import { CHAIN } from "../../helpers/chains"; +import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import fetchURL from "../../utils/fetchURL"; -type TEndpoint = { - [s: string]: string; -}; +// type TEndpoint = { +// [s: string | Chain]: string; +// } +// const endpoints: TEndpoint = { +// [CHAIN.MASSA]: "https://api-mainnet-dusa.up.railway.app/volume" +// } + type TEndpoint = { + [s: string]: string; + } const endpoints: TEndpoint = { - ["massa"]: "https://api-mainnet-dusa.up.railway.app/api/volume", -}; - -const fetchVolume = async (timestamp: number) => { - const historicalVolume = await fetchURL(endpoints["massa"]); - - const totalVolume = historicalVolume.totalVolume.volume; - const dailyVolume = historicalVolume.dailyVolume.volume; + ["massa"]: "https://api-mainnet-dusa.up.railway.app/volume" + } +interface IVolume { + timestamp: number; + volumeUsd: number; + } + const fetchVolume = async (options: FetchOptions): Promise => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) + const historicalVolume: IVolume[] = (await fetchURL(endpoints[options.chain])); + const totalVolume = historicalVolume + .filter(volItem => volItem.timestamp <= dayTimestamp) + .reduce((acc, { volumeUsd }) => acc + Number(volumeUsd), 0) + + const dailyVolume = historicalVolume + .find(dayItem => dayItem.timestamp === dayTimestamp)?.volumeUsd + return { + totalVolume: `${totalVolume}`, + dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, + timestamp: dayTimestamp, + } + } - return { - totalVolume: `${totalVolume}`, - dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, - timestamp: timestamp, - }; -}; +const graphs = getChainVolume({ + graphUrls: endpoints, + totalVolume: { + factory: "lbfactories", + field: "volumeUSD", + }, + dailyVolume: { + factory: "DusaDayData", + field: "volumeUSD", + dateField: "date" + }, + }); +// const adapter: Adapter = { +// adapter: { +// massa: { +// fetch: graphs(CHAIN.MASSA), +// start: 1713170000, +// }, +// }, +// }; const adapter: Adapter = { - adapter: { - [CHAIN.MASSA]: { - fetch: fetchVolume, - runAtCurrTime: true, - start: 1713170000 + adapter: { + massa: { + fetch: graphs("massa"), + start: 1713170000, + }, }, - } -} +}; -export default adapter; \ No newline at end of file +export default adapter; diff --git a/dexs/ekubo/index.ts b/dexs/ekubo/index.ts index 84ec70c080..f3b9d8b1d5 100644 --- a/dexs/ekubo/index.ts +++ b/dexs/ekubo/index.ts @@ -6,9 +6,7 @@ import * as sdk from "@defillama/sdk"; const toki = (n: any) => "starknet:0x" + BigInt(n).toString(16).padStart("049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7".length, "0") const fetch = async (timestamp: number) => { - console.log('fetching ekubo timestamps', timestamp) const balances = new sdk.Balances({ chain: CHAIN.STARKNET, timestamp }) - console.log('fetching ekubo balances', balances) const response = ((await fetchURL("https://mainnet-api.ekubo.org/overview")).volumeByToken_24h as any[]) .map(t => ({ token: toki(t.token), vol: t.volume })) response.map((token) => { @@ -29,6 +27,5 @@ const adapter: Adapter = { }, } } -console.log('adapter', adapter) export default adapter; diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index 6aff725392..5c8723f4a4 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -24,7 +24,6 @@ interface IVolume { volumeUsd: number; } const fetchV2 = async (options: FetchOptions): Promise => { - console.log('options', options) const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) const historicalVolume: IVolume[] = (await fetchURL(endpointsV2[options.chain])); const totalVolume = historicalVolume diff --git a/helpers/chains.ts b/helpers/chains.ts index 9dbe30b884..822813907c 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -141,8 +141,7 @@ export enum CHAIN { FILECOIN = "filecoin", FRAXTAL = "fraxtal", IMX = "imx", - KROMA = "kroma", - MASSA = "massa" + KROMA = "kroma" } // Don´t use From 53fdaf8ddf5c9f9f70079645420f1ce624ec5601 Mon Sep 17 00:00:00 2001 From: aya Date: Wed, 19 Jun 2024 14:18:56 +0100 Subject: [PATCH 0819/1590] chore: volume adaptator ready for first PR --- dexs/dusa/index.ts | 87 ++++++++++++++-------------------------------- helpers/chains.ts | 3 +- 2 files changed, 28 insertions(+), 62 deletions(-) diff --git a/dexs/dusa/index.ts b/dexs/dusa/index.ts index 857757c002..414173003c 100644 --- a/dexs/dusa/index.ts +++ b/dexs/dusa/index.ts @@ -1,73 +1,38 @@ import { Adapter } from "../../adapters/types"; -// import { Chain } from "@defillama/sdk/build/general"; -import { FetchOptions, FetchResultVolume } from "../../adapters/types"; -// import { CHAIN } from "../../helpers/chains"; -import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; import fetchURL from "../../utils/fetchURL"; -// type TEndpoint = { -// [s: string | Chain]: string; -// } -// const endpoints: TEndpoint = { -// [CHAIN.MASSA]: "https://api-mainnet-dusa.up.railway.app/volume" -// } +type TEndpoint = { + [s: string]: string; +}; - type TEndpoint = { - [s: string]: string; - } const endpoints: TEndpoint = { - ["massa"]: "https://api-mainnet-dusa.up.railway.app/volume" - } + ["massa"]: "https://api-mainnet-dusa.up.railway.app/api/volume", +}; -interface IVolume { - timestamp: number; - volumeUsd: number; - } - const fetchVolume = async (options: FetchOptions): Promise => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) - const historicalVolume: IVolume[] = (await fetchURL(endpoints[options.chain])); - const totalVolume = historicalVolume - .filter(volItem => volItem.timestamp <= dayTimestamp) - .reduce((acc, { volumeUsd }) => acc + Number(volumeUsd), 0) - - const dailyVolume = historicalVolume - .find(dayItem => dayItem.timestamp === dayTimestamp)?.volumeUsd - return { - totalVolume: `${totalVolume}`, - dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, - timestamp: dayTimestamp, - } - } +const fetchVolume = async (timestamp: number) => { + const historicalVolume = await fetchURL(endpoints["massa"]); -const graphs = getChainVolume({ - graphUrls: endpoints, - totalVolume: { - factory: "lbfactories", - field: "volumeUSD", - }, - dailyVolume: { - factory: "DusaDayData", - field: "volumeUSD", - dateField: "date" - }, - }); + const totalVolume = historicalVolume.totalVolume.volume; + const dailyVolume = historicalVolume.dailyVolume.volume; + + + return { + totalVolume: `${totalVolume}`, + dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, + timestamp: timestamp, + }; +}; -// const adapter: Adapter = { -// adapter: { -// massa: { -// fetch: graphs(CHAIN.MASSA), -// start: 1713170000, -// }, -// }, -// }; const adapter: Adapter = { - adapter: { - massa: { - fetch: graphs("massa"), - start: 1713170000, - }, + adapter: { + [CHAIN.MASSA]: { + fetch: fetchVolume, + runAtCurrTime: true, + start: 1713170000 }, -}; + } +} -export default adapter; +export default adapter; \ No newline at end of file diff --git a/helpers/chains.ts b/helpers/chains.ts index 822813907c..68a7c5250b 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -141,7 +141,8 @@ export enum CHAIN { FILECOIN = "filecoin", FRAXTAL = "fraxtal", IMX = "imx", - KROMA = "kroma" + KROMA = "kroma", + MASSA = "massa", } // Don´t use From 635c8b9ebd04eeda105ccd51ec8c6a59b6913c6e Mon Sep 17 00:00:00 2001 From: aya Date: Wed, 19 Jun 2024 14:34:50 +0100 Subject: [PATCH 0820/1590] fix: resolving chains conflict --- helpers/chains.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/helpers/chains.ts b/helpers/chains.ts index 68a7c5250b..d7b7ad05aa 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -142,7 +142,17 @@ export enum CHAIN { FRAXTAL = "fraxtal", IMX = "imx", KROMA = "kroma", - MASSA = "massa", + ZORA = "zora", + SVM = "svm", + ASTRZK = "astrzk", + LYRA = "lyra", + BITLAYER = "bitlayer", + XLAYER = "xlayer", + MERLIN = "merlin", + CHILIZ = "chiliz", + PLANQ = "planq", + BOB = "bob", + MASSA = "massa" } // Don´t use From b0b4fd82876dda035972f7b079eccc6989f4c764 Mon Sep 17 00:00:00 2001 From: aya Date: Wed, 19 Jun 2024 14:37:37 +0100 Subject: [PATCH 0821/1590] fix: conflicts chains --- helpers/chains.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/chains.ts b/helpers/chains.ts index d7b7ad05aa..49748c1571 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -141,7 +141,7 @@ export enum CHAIN { FILECOIN = "filecoin", FRAXTAL = "fraxtal", IMX = "imx", - KROMA = "kroma", + KROMA = "kroma", ZORA = "zora", SVM = "svm", ASTRZK = "astrzk", From 2e942e22e0728549a2c2028e2e00aef6dfe9f433 Mon Sep 17 00:00:00 2001 From: mendesfabio Date: Wed, 19 Jun 2024 11:22:15 -0300 Subject: [PATCH 0822/1590] fix balancer fees --- fees/balancer.ts | 88 ++++++++++++++++++------------------------------ 1 file changed, 33 insertions(+), 55 deletions(-) diff --git a/fees/balancer.ts b/fees/balancer.ts index 257fa6164d..f9607398fb 100644 --- a/fees/balancer.ts +++ b/fees/balancer.ts @@ -5,6 +5,7 @@ import { request, gql } from "graphql-request"; import type { ChainEndpoints, FetchOptions } from "../adapters/types" import { Chain } from '@defillama/sdk/build/general'; import BigNumber from "bignumber.js"; +import { getTimestampAtStartOfDay, getTimestampAtStartOfDayUTC } from "../utils/date"; const v1Endpoints = { [CHAIN.ETHEREUM]: @@ -61,21 +62,23 @@ const v1Graphs = (graphUrls: ChainEndpoints) => { }; }; }; -interface IPool { +interface IBalancer { id: string; - swapFees: string; - protocolFee: string; + totalSwapFee: string; + totalProtocolFee: string; } -interface IPoolSnapshot { - today: IPool[]; - yesterday: IPool[]; +interface IBalancerSnapshot { + today: IBalancer[]; + yesterday: IBalancer[]; tenPcFeeChange: { totalSwapFee: string; + totalProtocolFee: string; timestamp: number; } fiftyPcFeeChange: { totalSwapFee: string; + totalProtocolFee: string; timestamp: number; } } @@ -83,76 +86,51 @@ interface IPoolSnapshot { const v2Graphs = (graphUrls: ChainEndpoints) => { return (chain: Chain) => { return async ({ fromTimestamp, toTimestamp}: FetchOptions) => { + const todayTimestamp = getTimestampAtStartOfDayUTC(toTimestamp); + const yesterdayTimestamp = getTimestampAtStartOfDayUTC(fromTimestamp); const graphQuery = gql `query fees { - today:poolSnapshots(where: {timestamp:${toTimestamp}, protocolFee_gt:0}, orderBy:swapFees, orderDirection: desc) { + today: balancerSnapshots(where: {timestamp:${todayTimestamp}, totalProtocolFee_gt:0}, orderBy: totalProtocolFee, orderDirection: desc) { id - swapFees - protocolFee + totalSwapFee + totalProtocolFee } - yesterday:poolSnapshots(where: {timestamp:${fromTimestamp}, protocolFee_gt:0}, orderBy:swapFees, orderDirection: desc) { + yesterday: balancerSnapshots(where: {timestamp:${yesterdayTimestamp}, totalProtocolFee_gt:0}, orderBy: totalProtocolFee, orderDirection: desc) { id - swapFees - protocolFee + totalSwapFee + totalProtocolFee } tenPcFeeChange: balancerSnapshot(id: "2-18972") { - totalSwapFee timestamp } fiftyPcFeeChange: balancerSnapshot(id: "2-19039") { - totalSwapFee timestamp } }`; - const graphRes: IPoolSnapshot = await request(graphUrls[chain], graphQuery); - const dailyFee = graphRes["today"].map((e: IPool) => { - const yesterdayValue = new BigNumber(graphRes["yesterday"].find((p: IPool) => p.id.split('-')[0] === e.id.split('-')[0])?.swapFees || 0); - if(yesterdayValue.toNumber()) return new BigNumber('0') - return new BigNumber(e.swapFees).minus(yesterdayValue); - }).filter(e => new BigNumber(e).toNumber() < 10000).reduce((a: BigNumber, b: BigNumber) => a.plus(b), new BigNumber('0')) - + const graphRes: IBalancerSnapshot = await request(graphUrls[chain], graphQuery); + const dailySwapFee = new BigNumber(graphRes["today"][0]["totalSwapFee"]).minus(new BigNumber(graphRes["yesterday"][0]["totalSwapFee"])); + const dailyProtocolFee = new BigNumber(graphRes["today"][0]["totalProtocolFee"]).minus(new BigNumber(graphRes["yesterday"][0]["totalProtocolFee"])); - const currentTotalSwapFees = graphRes["today"].map((e: IPool) => new BigNumber(e.swapFees)).reduce((a: BigNumber, b: BigNumber) => a.plus(b), new BigNumber('0')) - - - let tenPcFeeTimestamp = 0 - let fiftyPcFeeTimestamp = 0 - let tenPcTotalSwapFees = new BigNumber(0) - let fiftyPcTotalSwapFees = new BigNumber(0) + let tenPcFeeTimestamp = 0; + let fiftyPcFeeTimestamp = 0; if (chain === CHAIN.ETHEREUM || chain === CHAIN.POLYGON || chain === CHAIN.ARBITRUM) { tenPcFeeTimestamp = graphRes["tenPcFeeChange"]["timestamp"] fiftyPcFeeTimestamp = graphRes["fiftyPcFeeChange"]["timestamp"] - tenPcTotalSwapFees = new BigNumber(graphRes["tenPcFeeChange"]["totalSwapFee"]) - fiftyPcTotalSwapFees = new BigNumber(graphRes["fiftyPcFeeChange"]["totalSwapFee"]) } // 10% gov vote enabled: https://vote.balancer.fi/#/proposal/0xf6238d70f45f4dacfc39dd6c2d15d2505339b487bbfe014457eba1d7e4d603e3 // 50% gov vote change: https://vote.balancer.fi/#/proposal/0x03e64d35e21467841bab4847437d4064a8e4f42192ce6598d2d66770e5c51ace - const dailyRevenue = toTimestamp < tenPcFeeTimestamp ? "0" : ( - toTimestamp < fiftyPcFeeTimestamp ? dailyFee.multipliedBy(0.1) : dailyFee.multipliedBy(0.5)) - const totalRevenue = toTimestamp < tenPcFeeTimestamp ? "0" : ( - toTimestamp < fiftyPcFeeTimestamp ? currentTotalSwapFees.minus(tenPcTotalSwapFees).multipliedBy(0.1) : currentTotalSwapFees.minus(fiftyPcTotalSwapFees).multipliedBy(0.5)) - - const dailyProtocolFee = graphRes["today"].map((e: IPool) => { - const yesterdayValue = new BigNumber(graphRes["yesterday"].find((p: IPool) => p.id.split('-')[0] === e.id.split('-')[0])?.protocolFee || 0); - if (yesterdayValue.toNumber() === 0) return new BigNumber('0') - return new BigNumber(e.protocolFee).minus(yesterdayValue); - }).filter(e => new BigNumber(e).toNumber() < 10000) - .reduce((a: BigNumber, b: BigNumber) => a.plus(b), new BigNumber('0')) + const dailyFees = toTimestamp < tenPcFeeTimestamp ? "0" : ( + toTimestamp < fiftyPcFeeTimestamp ? dailyProtocolFee.multipliedBy(10) : dailyProtocolFee.multipliedBy(2)) return { - // totalUserFees: currentTotalSwapFees.toString(), - dailyUserFees: dailyFee.toString(), - // totalFees: currentTotalSwapFees.toString(), - dailyFees: dailyFee.toString(), - // totalRevenue: dailyProtocolFee.toString(), // balancer v2 subgraph does not flash loan fees yet - dailyRevenue: dailyProtocolFee.toString(), // balancer v2 subgraph does not flash loan fees yet - // totalProtocolRevenue: totalRevenue.toString(), - dailyProtocolRevenue: dailyRevenue.toString(), - // totalSupplySideRevenue: currentTotalSwapFees.minus(totalRevenue.toString()).toString(), - dailySupplySideRevenue: new BigNumber(dailyFee.toString()).minus(dailyRevenue.toString()).toString(), + dailyUserFees: dailySwapFee.toString(), + dailyFees: dailyFees.toString(), + dailyRevenue: dailyProtocolFee.toString(), + dailyProtocolRevenue: dailyProtocolFee.toString(), + dailySupplySideRevenue: dailySwapFee.toString(), }; }; }; @@ -160,10 +138,10 @@ const v2Graphs = (graphUrls: ChainEndpoints) => { const methodology = { UserFees: "Trading fees paid by users, ranging from 0.0001% to 10%", - Fees: "All trading fees collected (doesn't include withdrawal and flash loan fees)", + Fees: "All trading fees collected (includes swap and yield fee)", Revenue: "Protocol revenue from all fees collected", - ProtocolRevenue: "Set to 10% of collected fees by a governance vote", - SupplySideRevenue: "A small percentage of the trade paid by traders to pool LPs, set by the pool creator or dynamically optimized by Gauntlet", + ProtocolRevenue: "Balancer V2 protocol fees are set to 50%", + SupplySideRevenue: "A small percentage of the trade paid by traders to pool LPs", } const adapter: Adapter = { @@ -176,7 +154,7 @@ const adapter: Adapter = { meta: { methodology: { UserFees: "Trading fees paid by users, ranging from 0.0001% and 10%", - Fees: "All trading fees collected", + Fees: "All trading fees collected (includes swap and yield fee)", Revenue: "Balancer V1 protocol fees are set to 0%", ProtocolRevenue: "Balancer V1 protocol fees are set to 0%", SupplySideRevenue: "Trading fees are distributed among LPs", From 9128ba278e6456dab1dd9cb746169dab5deb95ab Mon Sep 17 00:00:00 2001 From: aya Date: Wed, 19 Jun 2024 16:02:15 +0100 Subject: [PATCH 0823/1590] fix: conflict --- dexs/dusa/index.ts | 4 +--- helpers/chains.ts | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/dexs/dusa/index.ts b/dexs/dusa/index.ts index 414173003c..424ccba6fe 100644 --- a/dexs/dusa/index.ts +++ b/dexs/dusa/index.ts @@ -1,5 +1,4 @@ import { Adapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; import fetchURL from "../../utils/fetchURL"; type TEndpoint = { @@ -24,10 +23,9 @@ const fetchVolume = async (timestamp: number) => { }; }; - const adapter: Adapter = { adapter: { - [CHAIN.MASSA]: { + massa: { fetch: fetchVolume, runAtCurrTime: true, start: 1713170000 diff --git a/helpers/chains.ts b/helpers/chains.ts index 49748c1571..cf2dad4184 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -152,7 +152,6 @@ export enum CHAIN { CHILIZ = "chiliz", PLANQ = "planq", BOB = "bob", - MASSA = "massa" } // Don´t use From 935901e16008f46a5d951aedfdfcfa6737023fbc Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 19 Jun 2024 15:06:55 +0000 Subject: [PATCH 0824/1590] fix adapter version --- dexs/dusa/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dexs/dusa/index.ts b/dexs/dusa/index.ts index 424ccba6fe..9d10bc3efb 100644 --- a/dexs/dusa/index.ts +++ b/dexs/dusa/index.ts @@ -12,7 +12,7 @@ const endpoints: TEndpoint = { const fetchVolume = async (timestamp: number) => { const historicalVolume = await fetchURL(endpoints["massa"]); - const totalVolume = historicalVolume.totalVolume.volume; + const totalVolume = historicalVolume.totalVolume.volume; const dailyVolume = historicalVolume.dailyVolume.volume; @@ -24,6 +24,7 @@ const fetchVolume = async (timestamp: number) => { }; const adapter: Adapter = { + version: 2, adapter: { massa: { fetch: fetchVolume, @@ -33,4 +34,4 @@ const adapter: Adapter = { } } -export default adapter; \ No newline at end of file +export default adapter; From 4e01de69fb798011ad9ee2d815c45684f8cbb45e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 19 Jun 2024 15:54:23 +0000 Subject: [PATCH 0825/1590] disable dogechain --- fees/synapse/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/synapse/index.ts b/fees/synapse/index.ts index e392a9f623..43ec3fb765 100644 --- a/fees/synapse/index.ts +++ b/fees/synapse/index.ts @@ -27,7 +27,7 @@ const chains: TChains = { [CHAIN.AURORA]:"aurora", [CHAIN.HARMONY]:"harmony", [CHAIN.CANTO]:"canto", - [CHAIN.DOGECHAIN]:"dogechain", + // [CHAIN.DOGECHAIN]:"dogechain", [CHAIN.BASE]: "base", }; From 60d1d90ea2894c3ea27b649dee4ef18596da567d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 19 Jun 2024 16:16:41 +0000 Subject: [PATCH 0826/1590] fix xoxno --- fees/xoxno/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fees/xoxno/index.ts b/fees/xoxno/index.ts index a4e1054ddb..41a4e6b77a 100644 --- a/fees/xoxno/index.ts +++ b/fees/xoxno/index.ts @@ -10,8 +10,9 @@ interface IRaw { const fetchFees = async ({ fromTimestamp, toTimestamp }: FetchOptions) => { const startTimeStr = new Date(fromTimestamp * 1000).toISOString().split("T")[0]; - const toDayTimeStr = new Date(toTimestamp * 1000).toISOString().split("T")[0]; - const url = `https://proxy-api.xoxno.com/getMarketplaceVolume?after=${startTimeStr}&before=${toDayTimeStr}&bin=1d`; + const toDayTimeStrNext = new Date((toTimestamp + 84000) * 1000).toISOString().split("T")[0]; + const toDayTimeStr = new Date((toTimestamp) * 1000).toISOString().split("T")[0]; + const url = `https://proxy-api.xoxno.com/getMarketplaceVolume?after=${startTimeStr}&before=${toDayTimeStrNext}&bin=1d`; const response: IRaw[] = (await httpGet(url, { headers: { origin: 'https://xoxno.com', From 84f8d3dccf2b55013076e5661865ca7830b423b0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 19 Jun 2024 17:58:16 +0000 Subject: [PATCH 0827/1590] fix woofi --- dexs/woofi/index.ts | 8 ++++---- fees/woofi.ts | 40 ++++++++++++++++++++++++++++++++++------ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/dexs/woofi/index.ts b/dexs/woofi/index.ts index 29aa751603..a704ed5778 100644 --- a/dexs/woofi/index.ts +++ b/dexs/woofi/index.ts @@ -13,10 +13,10 @@ const endpoints = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('9wYUKdu85CGGwiV8mawEUwMhj4go7dx6ezfSkh9DUrFa'), [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('F7nNhkyaR53fs14vhfJmsUAotN1aJiyMbVc677ngFHWU'), [CHAIN.ERA]: "https://api.studio.thegraph.com/query/45576/woofi-zksync/version/latest", - [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45576/woofi-polygon-zkevm/version/latest", - [CHAIN.LINEA]: "https://woofi-subgraph.mer1in.com/subgraphs/name/woonetwork/woofi-linea", - [CHAIN.BASE]: "https://api.studio.thegraph.com/query/45576/woofi-base/version/latest", - [CHAIN.MANTLE]: "https://woofi-subgraph.mer1in.com/subgraphs/name/woonetwork/woofi-mantle", + [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/71937/woofi-polygon-zkevm/version/latest", + [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/71937/woofi-linea/version/latest", + [CHAIN.BASE]: "https://api.studio.thegraph.com/query/71937/woofi-base/version/latest", + // [CHAIN.MANTLE]: "https://woofi-subgraph.mer1in.com/subgraphs/name/woonetwork/woofi-mantle", }; type TStartTime = { diff --git a/fees/woofi.ts b/fees/woofi.ts index f8c44b2008..bf9b819f2a 100644 --- a/fees/woofi.ts +++ b/fees/woofi.ts @@ -12,23 +12,35 @@ type TFeeDetail = { } const fee_detail: TFeeDetail = { [CHAIN.AVAX]: { - from: '0x6cb1bc6c8aabdae822a2bf8d83b36291cb70f169', + from: '0xc45b55032cafeaff3b8057d52758d8f8211da54d', }, [CHAIN.BSC]: { - from: '0xda5e1d3aaa93e8716f87b5ee39e5f514cc934d5e', + from: '0xc45b55032cafeaff3b8057d52758d8f8211da54d', }, [CHAIN.FANTOM]: { from: '0x0b5025d8d409a51615cb624b8ede132bb11a2550', }, [CHAIN.POLYGON]: { - from: '0x938021351425dbfa606ed2b81fc66952283e0dd5', + from: '0xc45b55032cafeaff3b8057d52758d8f8211da54d', }, [CHAIN.ARBITRUM]: { - from: '0x0ba6c34af9713d15141dcc91d2788c3f370ecb9e', + from: '0xc45b55032cafeaff3b8057d52758d8f8211da54d', }, [CHAIN.OPTIMISM]: { - from: '0xa058798cd293f5acb4e7757b08c960a79f527699', - } + from: '0xc45b55032cafeaff3b8057d52758d8f8211da54d', + }, + [CHAIN.ERA]: { + from: '0x01b50b57a3d3c1a54433813585e60713e75f3de9', + }, + [CHAIN.LINEA]: { + from: '0xc45b55032cafeaff3b8057d52758d8f8211da54d', + }, + [CHAIN.BASE]: { + from: '0xc45b55032cafeaff3b8057d52758d8f8211da54d', + }, + [CHAIN.MANTLE]: { + from: '0xc45b55032cafeaff3b8057d52758d8f8211da54d', + }, } const fetch = (chain: Chain) => { @@ -77,6 +89,22 @@ const adapter: Adapter = { fetch: fetch(CHAIN.OPTIMISM), start: 1673222400, }, + [CHAIN.ERA]: { + fetch: fetch(CHAIN.ERA), + start: 1673222400, + }, + [CHAIN.LINEA]: { + fetch: fetch(CHAIN.LINEA), + start: 1673222400, + }, + [CHAIN.BASE]: { + fetch: fetch(CHAIN.BASE), + start: 1673222400, + }, + [CHAIN.MANTLE]: { + fetch: fetch(CHAIN.MANTLE), + start: 1673222400, + } } } From 519802f89241152d1bf83c8d41072f37098705df Mon Sep 17 00:00:00 2001 From: bghughes Date: Wed, 19 Jun 2024 15:26:32 -0500 Subject: [PATCH 0828/1590] new one --- dexs/rubicon/index.ts | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/dexs/rubicon/index.ts b/dexs/rubicon/index.ts index 86f9ab62a7..0ca0b35112 100644 --- a/dexs/rubicon/index.ts +++ b/dexs/rubicon/index.ts @@ -2,7 +2,8 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +// *** How do I marry these two ***? +const adapterOld = univ2Adapter({ [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('B4cTJXyWHMLkxAcpLGK7dJfArJdrbyWukCoCLPDT1f7n'), [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('AUcAkUd4sJutFD3hYQfvB6uvXrEdYP26qiZwZ5qyrgTw') }, { @@ -13,6 +14,27 @@ const adapters = univ2Adapter({ dailyVolumeTimestampField: "dayStartUnix" }); -adapters.adapter.arbitrum.start = 1686345120; -adapters.adapter.optimism.start = 1637020800; -export default adapters; \ No newline at end of file +adapterOld.adapter.arbitrum.start = 1686345120; +adapterOld.adapter.optimism.start = 1637020800; + +// *** Picks up where the old leaves off *** +const adapterNew = univ2Adapter({ + [CHAIN.OPTIMISM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Gladius_Metrics_Optimism_V2', + [CHAIN.ARBITRUM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Gladius_Metrics_Arbitrum_V2', + [CHAIN.BASE]: 'https://graph-v2.rubicon.finance/subgraphs/name/Gladius_Metrics_Base_V2', + [CHAIN.ETHEREUM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Gladius_Metrics_Mainnet_V2', +}, { + factoriesName: "rubicons", + totalVolume: "total_volume_usd", + dayData: "dayVolume", + dailyVolume: "volume_usd", + dailyVolumeTimestampField: "dayStartUnix" +}); + +// TODO: Could be more accurate to true start time at the end of adaptersOld +adapterNew.adapter.arbitrum.start = 183178326; +adapterNew.adapter.optimism.start = 116354792; +adapterNew.adapter.base.start = 10029602; +adapterNew.adapter.ethereum.start = 19361393; + +export default adapterNew; \ No newline at end of file From 5cc06fb5800a9386d915c713480a5b1e2fd8245d Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 20 Jun 2024 14:50:11 +0300 Subject: [PATCH 0829/1590] add Core chain --- aggregators/rubic/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aggregators/rubic/index.ts b/aggregators/rubic/index.ts index a00f62697b..f60e09685f 100644 --- a/aggregators/rubic/index.ts +++ b/aggregators/rubic/index.ts @@ -34,7 +34,8 @@ const chains: Record = { [CHAIN.CELO]: 'celo', [CHAIN.OKEXCHAIN]: 'oke-x-chain', [CHAIN.CRONOS]: 'cronos', - [CHAIN.MODE]: 'mode' + [CHAIN.MODE]: 'mode', + [CHAIN.CORE]: 'core' }; interface ApiResponce { From 701bca72118012998f07fc391f986ced617581fa Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 20 Jun 2024 14:22:07 +0000 Subject: [PATCH 0830/1590] enable woofi mantle --- dexs/woofi/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/woofi/index.ts b/dexs/woofi/index.ts index a704ed5778..615283d2de 100644 --- a/dexs/woofi/index.ts +++ b/dexs/woofi/index.ts @@ -16,7 +16,7 @@ const endpoints = { [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/71937/woofi-polygon-zkevm/version/latest", [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/71937/woofi-linea/version/latest", [CHAIN.BASE]: "https://api.studio.thegraph.com/query/71937/woofi-base/version/latest", - // [CHAIN.MANTLE]: "https://woofi-subgraph.mer1in.com/subgraphs/name/woonetwork/woofi-mantle", + [CHAIN.MANTLE]: "https://woofi-subgraph.mer1in.com/subgraphs/name/woonetwork/woofi-mantle", }; type TStartTime = { From ef180ffc75e371e06d76eeaa316b1e4e6ce42e09 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 20 Jun 2024 21:22:23 +0100 Subject: [PATCH 0831/1590] fix typechecks --- dexs/0x/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/0x/index.ts b/dexs/0x/index.ts index fbc85ca214..69693deb80 100644 --- a/dexs/0x/index.ts +++ b/dexs/0x/index.ts @@ -12,7 +12,7 @@ const config = { [CHAIN.AVAX]: { exchange: '0xdef1c0ded9bec7f1a1670819833240f027b25eff' }, arbitrum: { exchange: '0xdef1c0ded9bec7f1a1670819833240f027b25eff' }, base: { exchange: '0xdef1c0ded9bec7f1a1670819833240f027b25eff' }, -} +} as {[chain:string]:{exchange:string}} // https://github.com/0xProject/protocol/blob/development/packages/contract-artifacts/artifacts/IZeroEx.json const abi = { From 9fd62765330cf0abd01a6edaad54e63f4e44a926 Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Thu, 20 Jun 2024 23:32:14 +0100 Subject: [PATCH 0832/1590] Update index.ts --- aggregators/rubic/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregators/rubic/index.ts b/aggregators/rubic/index.ts index a57f31f86a..61aa974872 100644 --- a/aggregators/rubic/index.ts +++ b/aggregators/rubic/index.ts @@ -35,7 +35,7 @@ const chains: Record = { [CHAIN.OKEXCHAIN]: 'oke-x-chain', [CHAIN.CRONOS]: 'cronos', [CHAIN.MODE]: 'mode', - [CHAIN.MERLIN]: 'merlin' + [CHAIN.MERLIN]: 'merlin', [CHAIN.CORE]: 'core' }; From e841ba6d4baa2b4a23bdbada447ae252ae7c89d9 Mon Sep 17 00:00:00 2001 From: Bonkman Date: Thu, 20 Jun 2024 22:49:50 -0400 Subject: [PATCH 0833/1590] updated url --- aggregators/hop-aggregator/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregators/hop-aggregator/index.ts b/aggregators/hop-aggregator/index.ts index 33c8c5437b..5412829bb9 100644 --- a/aggregators/hop-aggregator/index.ts +++ b/aggregators/hop-aggregator/index.ts @@ -5,7 +5,7 @@ import { FetchOptions } from "../../adapters/types"; const fetchVolume = async (options: FetchOptions) => { let timestamp = options.startOfDay * 1_000; - const res = await httpPost("http://35.153.229.202/api/volume", { timestamp }); + const res = await httpPost("https://d3axhvc6i89jmo.cloudfront.net/api/volume", { timestamp }); const record = res.record || {}; return { From 8cfdaecaec0a4e17c91412154a5f3829ac59334a Mon Sep 17 00:00:00 2001 From: jan-magpie <155635960+jan-magpie@users.noreply.github.com> Date: Fri, 21 Jun 2024 11:30:13 +0530 Subject: [PATCH 0834/1590] Create cakepie.ts --- fees/cakepie.ts | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 fees/cakepie.ts diff --git a/fees/cakepie.ts b/fees/cakepie.ts new file mode 100644 index 0000000000..374109ccae --- /dev/null +++ b/fees/cakepie.ts @@ -0,0 +1,74 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { Chain } from "@defillama/sdk/build/general"; + +const event_paid_stream = 'event V3PoolFeesPaidTo (address indexed _user, uint256 _positionId, address _token, uint256 _feeAmount)'; +const event_paid_bribe = 'event NewBribe ( address indexed _user, uint256 indexed _targetTime, address _pool, address _bribeToken, uint256 _amount)'; + +type TAddress = { + [c: string]: string; +} +const address_reward: TAddress = { + + [CHAIN.BSC]: '0xb47b790076050423888cde9EBB2D5Cb86544F327', + [CHAIN.ARBITRUM]: '0x6DB96BBEB081d2a85E0954C252f2c1dC108b3f81', + [CHAIN.ETHEREUM]: '0x6E799758CEE75DAe3d84e09D40dc416eCf713652' +} + +const address_bribe: TAddress = { + [CHAIN.BSC]: '0xD521BF2Fd3c625101feAE9717351EF1E1E702dDF', + [CHAIN.ARBITRUM]: '0xA08d8e0aEe5929BcD6D72323A2EaCde4Cc951b71', + [CHAIN.ETHEREUM]: '0xa346Bd80943Aa3042E6709d80Ce9C3b8fbeAc4Ab' +} + +//cake emissions and vote incentives for pools are the revenue +const graph = (chain: Chain) => { + return async ({ createBalances, getLogs, getFromBlock, getToBlock }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + const dailyFees = createBalances(); + if (chain=='BSC'){ + (await getLogs({ + target: address_reward[chain], + eventAbi: event_paid_stream, + fromBlock, + toBlock + })).map((e: any) => { + // check if it is cake address + if (e.token === '0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82') { + dailyFees.add(e._token, e._feeAmount); + } + }) + } + (await getLogs({ + target: address_bribe[chain], + eventAbi: event_paid_bribe, + fromBlock, + toBlock + })).map((e: any) => { + dailyFees.add(e._bribeToken, e._amount) + }) + return { dailyFees, dailyRevenue: dailyFees,dailyUserFees:dailyFees }; + } +} + + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + + [CHAIN.BSC]: { + fetch: graph(CHAIN.BSC), + start: 77678653, + }, + [CHAIN.ARBITRUM]: { + fetch: graph(CHAIN.ARBITRUM), + start: 77678653, + }, + [CHAIN.ETHEREUM]: { + fetch: graph(CHAIN.ETHEREUM), + start: 77678653, + }, + } +}; + +export default adapter; From 370dcda712dfbd1dbb6c56cd39861e14303f146e Mon Sep 17 00:00:00 2001 From: Nicolas Zozol Date: Mon, 17 Jun 2024 18:22:50 +0200 Subject: [PATCH 0835/1590] update: swaap switch from thegraph to goldsky, and adding some chains --- dexs/swaap/index.ts | 47 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/dexs/swaap/index.ts b/dexs/swaap/index.ts index 20b42ec173..87f2e7cc6f 100644 --- a/dexs/swaap/index.ts +++ b/dexs/swaap/index.ts @@ -13,24 +13,48 @@ interface ChainConfig{ const config:Record = { [CHAIN.ETHEREUM]: { - api: sdk.graph.modifyEndpoint('6ZxFsA2sR62j3Hepprkeu5co3aVupg4YZXCsHyM8SFZs'), + api: "https://api.goldsky.com/api/public/project_clws2t7g7ae9c01xsbnu80a51/subgraphs/swaapv2-ethereum/1.0.0/gn", start: 1688169600, id: '2', firstDayVolume: 0 }, [CHAIN.POLYGON]: { - api: sdk.graph.modifyEndpoint('AqeDaXDjW3ttvYDGtdK1LC2igJ2usukrcbYmM2rBwesT'), + api: "https://api.goldsky.com/api/public/project_clws2t7g7ae9c01xsbnu80a51/subgraphs/swaapv2-polygon/1.0.0/gn", start: 1688083200, id: '2', firstDayVolume: 240.41984714755376 }, [CHAIN.ARBITRUM]: { - api: sdk.graph.modifyEndpoint('5EPpDeMUhrYgm91MJCidUgvraS41y9eCRasfjFY6gnYe'), + api: "https://api.goldsky.com/api/public/project_clws2t7g7ae9c01xsbnu80a51/subgraphs/swaapv2-arbitrum/1.0.0/gn", start: 1696464000, id: '2', firstDayVolume: 0 }, + [CHAIN.OPTIMISM]: { + api: "https://api.goldsky.com/api/public/project_clws2t7g7ae9c01xsbnu80a51/subgraphs/swaapv2-optimism/1.0.0/gn", + start: 1716986361, + id: '2', + firstDayVolume: 0 + }, + [CHAIN.BSC]: { + api: "https://api.goldsky.com/api/public/project_clws2t7g7ae9c01xsbnu80a51/subgraphs/swaapv2-bsc/1.0.0/gn", + start: 1716994360, + id: '2', + firstDayVolume: 0 + }, + [CHAIN.BASE]: { + api: "https://api.goldsky.com/api/public/project_clws2t7g7ae9c01xsbnu80a51/subgraphs/swaapv2-base/1.0.0/gn", + start: 1715692069, + id: '2', + firstDayVolume: 0 + }, + [CHAIN.MODE]: { + api: "https://api.goldsky.com/api/public/project_clws2t7g7ae9c01xsbnu80a51/subgraphs/swaapv2-mode/1.0.1/gn", + start: 1714652681, + id: '2', + firstDayVolume: 0 + }, } interface Data { @@ -121,6 +145,23 @@ const adapter: BreakdownAdapter = { fetch: v2graphs, start: 1696464000, }, + [CHAIN.OPTIMISM]: { + fetch: v2graphs, + start: 1716986361, + }, + [CHAIN.BSC]: { + fetch: v2graphs, + start: 1716994360, + }, + [CHAIN.BASE]: { + fetch: v2graphs, + start: 1715692069, + }, + [CHAIN.MODE]: { + fetch: v2graphs, + start: 1714652681, + }, + } } } From 6f6f76a926aad8e0365ed11a3d4c60bb935501ce Mon Sep 17 00:00:00 2001 From: Manuel Date: Wed, 19 Jun 2024 22:48:35 +0200 Subject: [PATCH 0836/1590] feat: add milkyway fee adaper --- fees/milkyway.ts | 59 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 fees/milkyway.ts diff --git a/fees/milkyway.ts b/fees/milkyway.ts new file mode 100644 index 0000000000..7c11c392b4 --- /dev/null +++ b/fees/milkyway.ts @@ -0,0 +1,59 @@ +import { Adapter, FetchV2 } from "../adapters/types"; +import { httpGet } from "../utils/fetchURL"; +import { getPrices } from "../utils/prices"; + +interface FeeResponse { + staking_rewards: number; + fees: number; + supply_side_revenue: number; +} + + +const fetch: FetchV2 = async ({ startTimestamp, endTimestamp }) => { + const startDate = new Date(startTimestamp * 1000); + const endDate = new Date(endTimestamp * 1000); + const params = { + from: startDate.toISOString(), + to: endDate.toISOString(), + currency: 'tia' + } + const response: FeeResponse = await httpGet('https://apis.milkyway.zone/milktia/fees/range', { params }); + const prices = await getPrices(['coingecko:celestia'], endTimestamp); + const price = prices['coingecko:celestia']; + + const dailyUserFees = String(response.fees * price.price); + const dailyStakingRewards = String(response.staking_rewards * price.price); + const dailySupplySideRevenue = String(response.supply_side_revenue * price.price); + + return { + timestamp: startTimestamp, + dailyUserFees, + dailyFees: dailyStakingRewards, + dailyRevenue: dailyUserFees, + dailyProtocolRevenue: dailyUserFees, + dailySupplySideRevenue, + }; +}; + +const adapter: Adapter = { + adapter: { + celestia: { + fetch, + runAtCurrTime: false, + // 2024-04-30T17:55:14:00Z + start: 1714499714, + meta: { + methodology: { + UserFees: "MilkyWay takes 10% fee on users staking rewards", + Fees: "Staking rewards earned by all staked TIA", + Revenue: "MilkyWay takes 10% fee on users staking rewards", + ProtocolRevenue: "MilkyWay takes 10% fee on users staking rewards", + SuplySideRevenue: "Staking rewards earned by milkTIA holders", + }, + } + }, + }, + version: 2 +}; + +export default adapter; // yarn test fees milktia From b0dbfb99a6fc17283b88d8094f70555a6637768b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 21 Jun 2024 15:54:52 +0000 Subject: [PATCH 0837/1590] fix start --- aggregators/hop-aggregator/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aggregators/hop-aggregator/index.ts b/aggregators/hop-aggregator/index.ts index 5412829bb9..9223171a9d 100644 --- a/aggregators/hop-aggregator/index.ts +++ b/aggregators/hop-aggregator/index.ts @@ -22,9 +22,9 @@ const adapter: any = { adapter: { [CHAIN.SUI]: { fetch: fetchVolume, - start: () => 1714276800 + start: 1714276800 }, }, }; -export default adapter; \ No newline at end of file +export default adapter; From 23746f3ac713362305917e538f1c87590f4d9790 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 21 Jun 2024 16:28:30 +0000 Subject: [PATCH 0838/1590] fix adapter does not support v2 --- aggregators/hop-aggregator/index.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/aggregators/hop-aggregator/index.ts b/aggregators/hop-aggregator/index.ts index 9223171a9d..b0a73d03b7 100644 --- a/aggregators/hop-aggregator/index.ts +++ b/aggregators/hop-aggregator/index.ts @@ -1,9 +1,10 @@ import { CHAIN } from "../../helpers/chains"; import { httpPost } from "../../utils/fetchURL"; import { FetchOptions } from "../../adapters/types"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date" -const fetchVolume = async (options: FetchOptions) => { - let timestamp = options.startOfDay * 1_000; +const fetchVolume = async (_t: any, _b: any ,options: FetchOptions) => { + const timestamp = getTimestampAtStartOfDayUTC(options.startOfDay) * 1_000; const res = await httpPost("https://d3axhvc6i89jmo.cloudfront.net/api/volume", { timestamp }); const record = res.record || {}; @@ -11,14 +12,11 @@ const fetchVolume = async (options: FetchOptions) => { return { dailyVolume: record.total_volume_usd ? record.total_volume_usd.toFixed(2) : 0, totalVolume: res.total_volume_usd ? res.total_volume_usd.toFixed(2) : 0, - dailyFees: 0, - totalFees: 0, timestamp: timestamp, }; }; const adapter: any = { - version: 2, adapter: { [CHAIN.SUI]: { fetch: fetchVolume, From 13a16f8dba99549833a44d4daae4eca42451a429 Mon Sep 17 00:00:00 2001 From: perpie-papa <141109279+perpie-papa@users.noreply.github.com> Date: Sat, 22 Jun 2024 16:05:20 +0300 Subject: [PATCH 0839/1590] Add Perpie Volume & Fees --- aggregator-derivatives/perpie/index.ts | 111 +++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 aggregator-derivatives/perpie/index.ts diff --git a/aggregator-derivatives/perpie/index.ts b/aggregator-derivatives/perpie/index.ts new file mode 100644 index 0000000000..f0850b4ce1 --- /dev/null +++ b/aggregator-derivatives/perpie/index.ts @@ -0,0 +1,111 @@ +import { postURL } from "../../utils/fetchURL"; +import { + BreakdownAdapter, + FetchOptions, + FetchResult, + FetchResultV2, + FetchV2, + SimpleAdapter, +} from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { fetchURLWithRetry } from "../../helpers/duneRequest"; +import { queryDune } from "../../helpers/dune"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphFees"; + +const arbitrumStartTimestamp = 1696982400; // 2023-10-11 00:00:00 + +type VolumeRow = { volume_date: string; daily_volume: number }; +type FeeRow = { transfer_date: string; usd_total: number }; + +const chainsMap: Record = { + ARBITRUM: "arbitrum", +}; + +const fetchVolume: (chain: string) => FetchV2 = + (chain: string) => + async (options: FetchOptions): Promise => { + let data = (await queryDune("3289719")) as VolumeRow[]; + + const dayStartOfDayTimestamp = getUniqStartOfTodayTimestamp( + new Date(options.startOfDay * 1000) + ); + + const dayTimestamp = new Date(dayStartOfDayTimestamp * 1000); + + data = data.sort( + (a, b) => + new Date(b.volume_date).getTime() - new Date(a.volume_date).getTime() + ); + + console.log("Timestamps ser", dayTimestamp); + + const dailyVolume = + data.find( + row => new Date(row.volume_date).getTime() == dayTimestamp.getTime() + )?.daily_volume || 0; + const totalVolume = data.reduce((acc, val) => acc + val.daily_volume, 0); + + return { + dailyVolume: dailyVolume, + totalVolume: totalVolume, + timestamp: dayStartOfDayTimestamp, + }; + }; + +const fetchFees: (chain: string) => FetchV2 = + (chain: string) => + async (options: FetchOptions): Promise => { + let data = (await queryDune("3289650")) as FeeRow[]; + + const dayStartOfDayTimestamp = getUniqStartOfTodayTimestamp( + new Date(options.startOfDay * 1000) + ); + + const dayTimestamp = new Date(dayStartOfDayTimestamp * 1000); + + data = data.sort( + (a, b) => + new Date(b.transfer_date).getTime() - + new Date(a.transfer_date).getTime() + ); + + const dailyRevenue = + data.find( + row => new Date(row.transfer_date).getTime() == dayTimestamp.getTime() + )?.usd_total || 0; + const totalRevenue = data.reduce((acc, val) => acc + val.usd_total, 0); + + console.log("Data ser", data) + + return { + dailyRevenue, + totalRevenue, + timestamp: dayStartOfDayTimestamp, + }; + }; + +const fetchAll: (chain: string) => FetchV2 = + (chain: string) => + async (options: FetchOptions): Promise => { + const volume = await fetchVolume(chain)(options); + const fees = await fetchFees(chain)(options); + return { ...volume, ...fees } as FetchResultV2; + }; +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + derivatives: { + ...Object.values(chainsMap).reduce((acc, chain) => { + return { + ...acc, + [(chainsMap as any)[chain] || chain]: { + start: arbitrumStartTimestamp, + fetch: fetchAll(chain), + }, + }; + }, {}), + }, + }, +}; + +export default adapter; From 58a83adaa7e2b164fd6b5ad69dd6156c9d57e786 Mon Sep 17 00:00:00 2001 From: perpie-papa <141109279+perpie-papa@users.noreply.github.com> Date: Sun, 23 Jun 2024 14:47:21 +0300 Subject: [PATCH 0840/1590] Make more efficient query --- aggregator-derivatives/perpie/index.ts | 67 ++++++-------------------- 1 file changed, 16 insertions(+), 51 deletions(-) diff --git a/aggregator-derivatives/perpie/index.ts b/aggregator-derivatives/perpie/index.ts index f0850b4ce1..63879a9bf7 100644 --- a/aggregator-derivatives/perpie/index.ts +++ b/aggregator-derivatives/perpie/index.ts @@ -16,80 +16,45 @@ const arbitrumStartTimestamp = 1696982400; // 2023-10-11 00:00:00 type VolumeRow = { volume_date: string; daily_volume: number }; type FeeRow = { transfer_date: string; usd_total: number }; +type StatRow = { + volume_24hr: number; + fees_24hr: number; + total_volume: number; + total_fees: number; +}; const chainsMap: Record = { ARBITRUM: "arbitrum", }; -const fetchVolume: (chain: string) => FetchV2 = +const fetchVolumeAndFees: (chain: string) => FetchV2 = (chain: string) => async (options: FetchOptions): Promise => { - let data = (await queryDune("3289719")) as VolumeRow[]; + chain; + let data = (await queryDune("3855069"))[0] as StatRow const dayStartOfDayTimestamp = getUniqStartOfTodayTimestamp( new Date(options.startOfDay * 1000) ); - const dayTimestamp = new Date(dayStartOfDayTimestamp * 1000); - - data = data.sort( - (a, b) => - new Date(b.volume_date).getTime() - new Date(a.volume_date).getTime() - ); - - console.log("Timestamps ser", dayTimestamp); - - const dailyVolume = - data.find( - row => new Date(row.volume_date).getTime() == dayTimestamp.getTime() - )?.daily_volume || 0; - const totalVolume = data.reduce((acc, val) => acc + val.daily_volume, 0); + return { - dailyVolume: dailyVolume, - totalVolume: totalVolume, + dailyVolume: data.volume_24hr, + totalVolume: data.total_volume, + dailyRevenue: data.fees_24hr, + totalRevenue: data.total_fees, timestamp: dayStartOfDayTimestamp, }; }; -const fetchFees: (chain: string) => FetchV2 = - (chain: string) => - async (options: FetchOptions): Promise => { - let data = (await queryDune("3289650")) as FeeRow[]; - - const dayStartOfDayTimestamp = getUniqStartOfTodayTimestamp( - new Date(options.startOfDay * 1000) - ); - - const dayTimestamp = new Date(dayStartOfDayTimestamp * 1000); - - data = data.sort( - (a, b) => - new Date(b.transfer_date).getTime() - - new Date(a.transfer_date).getTime() - ); - - const dailyRevenue = - data.find( - row => new Date(row.transfer_date).getTime() == dayTimestamp.getTime() - )?.usd_total || 0; - const totalRevenue = data.reduce((acc, val) => acc + val.usd_total, 0); - console.log("Data ser", data) - - return { - dailyRevenue, - totalRevenue, - timestamp: dayStartOfDayTimestamp, - }; - }; const fetchAll: (chain: string) => FetchV2 = (chain: string) => async (options: FetchOptions): Promise => { - const volume = await fetchVolume(chain)(options); - const fees = await fetchFees(chain)(options); - return { ...volume, ...fees } as FetchResultV2; + const volumeAndFees = await fetchVolumeAndFees(chain)(options); + return { ...volumeAndFees } as FetchResultV2; }; const adapter: BreakdownAdapter = { version: 2, From bb65348137c730568fe4a0f56c4b0042045e5527 Mon Sep 17 00:00:00 2001 From: bghughes Date: Mon, 24 Jun 2024 00:05:54 -0500 Subject: [PATCH 0841/1590] example --- cli/testAdapter.ts | 2 + dexs/rubicon/index.ts | 45 +- yarn.lock | 2436 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2479 insertions(+), 4 deletions(-) create mode 100644 yarn.lock diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index 6a257d081a..90061bd492 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -44,6 +44,8 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ console.info(`🦙 Running ${process.argv[3].toUpperCase()} adapter 🦙`) console.info(`---------------------------------------------------`) // Import module to test + console.log(`File: ${passedFile}`); + let module: Adapter = (await import(passedFile)).default const adapterVersion = module.version let endTimestamp = endCleanDayTimestamp diff --git a/dexs/rubicon/index.ts b/dexs/rubicon/index.ts index 0ca0b35112..62c82ce8da 100644 --- a/dexs/rubicon/index.ts +++ b/dexs/rubicon/index.ts @@ -2,7 +2,7 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; -// *** How do I marry these two ***? +// Define the old and new adapters const adapterOld = univ2Adapter({ [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('B4cTJXyWHMLkxAcpLGK7dJfArJdrbyWukCoCLPDT1f7n'), [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('AUcAkUd4sJutFD3hYQfvB6uvXrEdYP26qiZwZ5qyrgTw') @@ -17,7 +17,6 @@ const adapterOld = univ2Adapter({ adapterOld.adapter.arbitrum.start = 1686345120; adapterOld.adapter.optimism.start = 1637020800; -// *** Picks up where the old leaves off *** const adapterNew = univ2Adapter({ [CHAIN.OPTIMISM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Gladius_Metrics_Optimism_V2', [CHAIN.ARBITRUM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Gladius_Metrics_Arbitrum_V2', @@ -31,10 +30,48 @@ const adapterNew = univ2Adapter({ dailyVolumeTimestampField: "dayStartUnix" }); -// TODO: Could be more accurate to true start time at the end of adaptersOld adapterNew.adapter.arbitrum.start = 183178326; adapterNew.adapter.optimism.start = 116354792; adapterNew.adapter.base.start = 10029602; adapterNew.adapter.ethereum.start = 19361393; -export default adapterNew; \ No newline at end of file +// Define the function to fetch and combine data from both adapters +async function combinedFetch(chain, timestamp, chainBlocks, options) { + const oldData = await adapterOld.adapter[chain].fetch(timestamp, chainBlocks, options).catch(() => null); + const newData = await adapterNew.adapter[chain].fetch(timestamp, chainBlocks, options).catch(() => null); + + if (!oldData) return newData; + if (!newData) return oldData; + + return { + timestamp: newData.timestamp, + totalVolume: (oldData.totalVolume || 0) + (newData.totalVolume || 0), + dailyVolume: (oldData.dailyVolume || 0) + (newData.dailyVolume || 0), + // Add any other fields that need to be combined here + }; +} + +// Create the combined adapter +const combinedAdapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: (timestamp, chainBlocks, options) => combinedFetch(CHAIN.ARBITRUM, timestamp, chainBlocks, options), + start: adapterOld.adapter.arbitrum.start, + }, + [CHAIN.OPTIMISM]: { + fetch: (timestamp, chainBlocks, options) => combinedFetch(CHAIN.OPTIMISM, timestamp, chainBlocks, options), + start: adapterOld.adapter.optimism.start, + }, + [CHAIN.BASE]: { + fetch: (timestamp, chainBlocks, options) => adapterNew.adapter.base.fetch(timestamp, chainBlocks, options), + start: adapterNew.adapter.base.start, + }, + [CHAIN.ETHEREUM]: { + fetch: (timestamp, chainBlocks, options) => adapterNew.adapter.ethereum.fetch(timestamp, chainBlocks, options), + start: adapterNew.adapter.ethereum.start, + }, + }, + version: 2, +}; + +export default combinedAdapter; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..7cf6575277 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2436 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@1.10.0": + version "1.10.0" + resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz" + integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== + +"@aws-crypto/crc32@3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@^3.0.0", "@aws-crypto/sha256-js@3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-s3@^3.400.0": + version "3.499.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.499.0.tgz" + integrity sha512-4ssQqde/iY5fTJbWuFPzPuECtihdCAA9tfluv6fXYCJS3wMLf9x21qp6b7fIbUf6vjOJ2edmYd+DXk+0CMnTFg== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.499.0" + "@aws-sdk/core" "3.496.0" + "@aws-sdk/credential-provider-node" "3.499.0" + "@aws-sdk/middleware-bucket-endpoint" "3.496.0" + "@aws-sdk/middleware-expect-continue" "3.496.0" + "@aws-sdk/middleware-flexible-checksums" "3.496.0" + "@aws-sdk/middleware-host-header" "3.496.0" + "@aws-sdk/middleware-location-constraint" "3.496.0" + "@aws-sdk/middleware-logger" "3.496.0" + "@aws-sdk/middleware-recursion-detection" "3.496.0" + "@aws-sdk/middleware-sdk-s3" "3.499.0" + "@aws-sdk/middleware-signing" "3.496.0" + "@aws-sdk/middleware-ssec" "3.498.0" + "@aws-sdk/middleware-user-agent" "3.496.0" + "@aws-sdk/region-config-resolver" "3.496.0" + "@aws-sdk/signature-v4-multi-region" "3.499.0" + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@aws-sdk/util-user-agent-browser" "3.496.0" + "@aws-sdk/util-user-agent-node" "3.496.0" + "@aws-sdk/xml-builder" "3.496.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/core" "^1.3.1" + "@smithy/eventstream-serde-browser" "^2.1.1" + "@smithy/eventstream-serde-config-resolver" "^2.1.1" + "@smithy/eventstream-serde-node" "^2.1.1" + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/hash-blob-browser" "^2.1.1" + "@smithy/hash-node" "^2.1.1" + "@smithy/hash-stream-node" "^2.1.1" + "@smithy/invalid-dependency" "^2.1.1" + "@smithy/md5-js" "^2.1.1" + "@smithy/middleware-content-length" "^2.1.1" + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.1" + "@smithy/util-defaults-mode-node" "^2.1.1" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-stream" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + "@smithy/util-waiter" "^2.1.1" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + +"@aws-sdk/client-sso@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.496.0.tgz" + integrity sha512-fuaMuxKg7CMUsP9l3kxYWCOxFsBjdA0xj5nlikaDm1661/gB4KkAiGqRY8LsQkpNXvXU8Nj+f7oCFADFyGYzyw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.496.0" + "@aws-sdk/middleware-host-header" "3.496.0" + "@aws-sdk/middleware-logger" "3.496.0" + "@aws-sdk/middleware-recursion-detection" "3.496.0" + "@aws-sdk/middleware-user-agent" "3.496.0" + "@aws-sdk/region-config-resolver" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@aws-sdk/util-user-agent-browser" "3.496.0" + "@aws-sdk/util-user-agent-node" "3.496.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/core" "^1.3.1" + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/hash-node" "^2.1.1" + "@smithy/invalid-dependency" "^2.1.1" + "@smithy/middleware-content-length" "^2.1.1" + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.1" + "@smithy/util-defaults-mode-node" "^2.1.1" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/client-sts@3.499.0": + version "3.499.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.499.0.tgz" + integrity sha512-Eyj9STw2DXMtXL5V/v0HYHO6+JjGPi257M5IYyxwqlvRchq6jbOsedobfxclB/gBUyBRtZdnyAIS8uCKjb4kpA== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.496.0" + "@aws-sdk/credential-provider-node" "3.499.0" + "@aws-sdk/middleware-host-header" "3.496.0" + "@aws-sdk/middleware-logger" "3.496.0" + "@aws-sdk/middleware-recursion-detection" "3.496.0" + "@aws-sdk/middleware-user-agent" "3.496.0" + "@aws-sdk/region-config-resolver" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@aws-sdk/util-user-agent-browser" "3.496.0" + "@aws-sdk/util-user-agent-node" "3.496.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/core" "^1.3.1" + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/hash-node" "^2.1.1" + "@smithy/invalid-dependency" "^2.1.1" + "@smithy/middleware-content-length" "^2.1.1" + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.1" + "@smithy/util-defaults-mode-node" "^2.1.1" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-middleware" "^2.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + +"@aws-sdk/core@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.496.0.tgz" + integrity sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A== + dependencies: + "@smithy/core" "^1.3.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/signature-v4" "^2.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-env@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.496.0.tgz" + integrity sha512-lukQMJ8SWWP5RqkRNOHi/H+WMhRvSWa3Fc5Jf/VP6xHiPLfF1XafcvthtV91e0VwPCiseI+HqChrcGq8pvnxHw== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-ini@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.496.0.tgz" + integrity sha512-2nD1jp1sIwcQaWK1y/9ruQOkW16RUxZpzgjbW/gnK3iiUXwx+/FNQWxshud+GTSx3Q4x6eIhqsbjtP4VVPPuUA== + dependencies: + "@aws-sdk/credential-provider-env" "3.496.0" + "@aws-sdk/credential-provider-process" "3.496.0" + "@aws-sdk/credential-provider-sso" "3.496.0" + "@aws-sdk/credential-provider-web-identity" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@smithy/credential-provider-imds" "^2.2.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-node@3.499.0": + version "3.499.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.499.0.tgz" + integrity sha512-EsiSevVmcVSMIq7D9siSH/XVc5I0vMntg1rx6KQdng1Fq8X/RBL5t9wSWEwOl7KFo5HlEsWrLWIpo1WHuzIL/w== + dependencies: + "@aws-sdk/credential-provider-env" "3.496.0" + "@aws-sdk/credential-provider-ini" "3.496.0" + "@aws-sdk/credential-provider-process" "3.496.0" + "@aws-sdk/credential-provider-sso" "3.496.0" + "@aws-sdk/credential-provider-web-identity" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@smithy/credential-provider-imds" "^2.2.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-process@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.496.0.tgz" + integrity sha512-/YZscCTGOKVmGr916Th4XF8Sz6JDtZ/n2loHG9exok9iy/qIbACsTRNLP9zexPxhPoue/oZqecY5xbVljfY34A== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-sso@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.496.0.tgz" + integrity sha512-eP7GxpT2QYubSDG7uk1GJW4eNymZCq65IxDyEFCXOP/kfqkxriCY+iVEFG6/Mo3LxvgrgHXU4jxrCAXMAWN43g== + dependencies: + "@aws-sdk/client-sso" "3.496.0" + "@aws-sdk/token-providers" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-web-identity@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.496.0.tgz" + integrity sha512-IbP+qLlvJSpNPj+zW6TtFuLRTK5Tf0hW+2pom4vFyi5YSH4pn8UOC136UdewX8vhXGS9BJQ5zBDMasIyl5VeGQ== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-bucket-endpoint@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.496.0.tgz" + integrity sha512-B+ilBMSs3+LJuo2bl2KB8GFdu+8PPVtYEWtwhNkmnaU8iMisgMBp5uuM8sUDvJX7I4iSF0WbgnhguX4cJqfAew== + dependencies: + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-arn-parser" "3.495.0" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-config-provider" "^2.2.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-expect-continue@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.496.0.tgz" + integrity sha512-+exo5DVc+BeDus2iI6Fz1thefHGDXxUhHZ+4VHQ6HkStMy3Y22HugyEGHSQZmtRL86Hjr7dFbEWFsC47a2ItGA== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-flexible-checksums@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.496.0.tgz" + integrity sha512-yQIWfjEMvgsAJ7ku224vXDjXPD+f9zfKZFialJva8VUlEr7hQp4CQ0rxV3YThSaixKEDDs5k6kOjWAd2BPGr2A== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.496.0" + "@smithy/is-array-buffer" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-host-header@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.496.0.tgz" + integrity sha512-jUdPpSJeqCYXf6hSjfwsfHway7peIV8Vz51w/BN91bF4vB/bYwAC5o9/iJiK/EoByp5asxA8fg9wFOyGjzdbLg== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-location-constraint@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.496.0.tgz" + integrity sha512-i4ocJ2Zs86OtPREbB18InFukhqg2qtBxb5gywv79IHDPVmpOYE4m/3v3yGUrkjfF2GTlUL0k5FskNNqw41yfng== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-logger@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.496.0.tgz" + integrity sha512-EwMVSY6iBMeGbVnvwdaFl/ClMS/YWtxCAo+bcEtgk8ltRuo7qgbJem8Km/fvWC1vdWvIbe4ArdJ8iGzq62ffAw== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-recursion-detection@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.496.0.tgz" + integrity sha512-+IuOcFsfqg2WAnaEzH6KhVbicqCxtOq9w3DH2jwTpddRlCx2Kqf6wCzg8luhHRGyjBZdsbIS+OXwyMevoppawA== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-sdk-s3@3.499.0": + version "3.499.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.499.0.tgz" + integrity sha512-thTb47U1hYHk5ei+yO0D0aehbgQXeAcgvyyxOID9/HDuRfWuTvKdclWh/goIeDfvSS87VBukEAjnCa5JYBwzug== + dependencies: + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-arn-parser" "3.495.0" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/signature-v4" "^2.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/util-config-provider" "^2.2.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-signing@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.496.0.tgz" + integrity sha512-Oq73Brs4IConvWnRlh8jM1V7LHoTw9SVQklu/QW2FPlNrB3B8fuTdWHHYIWv7ybw1bykXoCY99v865Mmq/Or/g== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/signature-v4" "^2.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-middleware" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-ssec@3.498.0": + version "3.498.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.498.0.tgz" + integrity sha512-sWujXgzeTqMZzj/pRYEnnEbSzhBosqw9DXHOY1Mg2igI9NEfGlB7lPARp6aKmCaYlP3Bcj2X86vKCqF53mbyig== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/middleware-user-agent@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.496.0.tgz" + integrity sha512-+iMtRxFk0GmFWNUF4ilxylOQd9PZdR4ZC9jkcPIh1PZlvKtpCyFywKlk5RRZKklSoJ/CttcqwhMvOXTNbWm/0w== + dependencies: + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/region-config-resolver@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.496.0.tgz" + integrity sha512-URrNVOPHPgEDm6QFu6lDC2cUFs+Jx23mA3jEwCvoKlXiEY/ZoWjH8wlX3OMUlLrF1qoUTuD03jjrJzF6zoCgug== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/types" "^2.9.1" + "@smithy/util-config-provider" "^2.2.1" + "@smithy/util-middleware" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/signature-v4-multi-region@3.499.0": + version "3.499.0" + resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.499.0.tgz" + integrity sha512-8HSFnZErRm7lAfk+Epxrf4QNdQEamg1CnbLybtKQQEjmvxLuXYvj16KlpYEZIwEENOMEvnCqMc7syTPkmjVhJA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.499.0" + "@aws-sdk/types" "3.496.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/signature-v4" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/token-providers@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.496.0.tgz" + integrity sha512-fyi8RcObEa1jNETJdc2H6q9VHrrdKCj/b6+fbLvymb7mUVRd0aWUn+24SNUImnSOnrwYnwaMfyyEC388X4MbFQ== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/middleware-host-header" "3.496.0" + "@aws-sdk/middleware-logger" "3.496.0" + "@aws-sdk/middleware-recursion-detection" "3.496.0" + "@aws-sdk/middleware-user-agent" "3.496.0" + "@aws-sdk/region-config-resolver" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@aws-sdk/util-user-agent-browser" "3.496.0" + "@aws-sdk/util-user-agent-node" "3.496.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/hash-node" "^2.1.1" + "@smithy/invalid-dependency" "^2.1.1" + "@smithy/middleware-content-length" "^2.1.1" + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.1" + "@smithy/util-defaults-mode-node" "^2.1.1" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@aws-sdk/types@^3.222.0", "@aws-sdk/types@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.496.0.tgz" + integrity sha512-umkGadK4QuNQaMoDICMm7NKRI/mYSXiyPjcn3d53BhsuArYU/52CebGQKdt4At7SwwsiVJZw9RNBHyN5Mm0HVw== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/util-arn-parser@3.495.0": + version "3.495.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz" + integrity sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-endpoints@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.496.0.tgz" + integrity sha512-1QzOiWHi383ZwqSi/R2KgKCd7M+6DxkxI5acqLPm8mvDRDP2jRjrnVaC0g9/tlttWousGEemDUWStwrD2mVYSw== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/types" "^2.9.1" + "@smithy/util-endpoints" "^1.1.1" + tslib "^2.5.0" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.495.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz" + integrity sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-browser@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.496.0.tgz" + integrity sha512-4j2spN+h0I0qfSMsGvJXTfQBu1e18rPdekKvzsGJxhaAE1tNgUfUT4nbvc5uVn0sNjZmirskmJ3kfbzVOrqIFg== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/types" "^2.9.1" + bowser "^2.11.0" + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-node@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.496.0.tgz" + integrity sha512-h0Ax0jlDc7UIo3KoSI4C4tVLBFoiAdx3+DhTVfgLS7x93d41dMlziPoBX2RgdcFn37qnzw6AQKTVTMwDbRCGpg== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.496.0": + version "3.496.0" + resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.496.0.tgz" + integrity sha512-GvEjh537IIeOw1ZkZuB37sV12u+ipS5Z1dwjEC/HAvhl5ac23ULtTr1/n+U1gLNN+BAKSWjKiQ2ksj8DiUzeyw== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@defillama/sdk@^5.0.10": + version "5.0.69" + resolved "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.69.tgz" + integrity sha512-IYdT4P5vG9xt14tM9RuT1+uBUyD8oL6fdTWC3iwOlwATjWKA1kwOhucCXNFE8sc2KKugwTUfQuGp8Q3fHDxAfw== + 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.13.1" + resolved "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.13.1.tgz" + integrity sha512-2G4Vu6OHw4+XTrp7AGIcOEezpPEoVrWg2JTK1v/exEKSLYquZkUdd+m4yOL3/UZ6bTj7hmXwrmYzW76BnLCkJQ== + dependencies: + "@elastic/transport" "~8.4.1" + tslib "^2.4.0" + +"@elastic/transport@~8.4.1": + version "8.4.1" + resolved "https://registry.npmjs.org/@elastic/transport/-/transport-8.4.1.tgz" + integrity sha512-/SXVuVnuU5b4dq8OFY4izG+dmGla185PcoqgK6+AJMpmOeY1QYVNbWtCwvSvoAANN5D/wV+EBU8+x7Vf9EphbA== + dependencies: + debug "^4.3.4" + hpagent "^1.0.0" + ms "^2.1.3" + secure-json-parse "^2.4.0" + tslib "^2.4.0" + undici "^5.22.1" + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@graphql-typed-document-node/core@^3.1.1": + version "3.2.0" + resolved "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz" + integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + 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.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + 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.npmjs.org/@noble/curves/-/curves-1.2.0.tgz" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@smithy/abort-controller@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.1.tgz" + integrity sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/chunked-blob-reader-native@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.1.tgz" + integrity sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ== + dependencies: + "@smithy/util-base64" "^2.1.1" + tslib "^2.5.0" + +"@smithy/chunked-blob-reader@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz" + integrity sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ== + dependencies: + tslib "^2.5.0" + +"@smithy/config-resolver@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.1.tgz" + integrity sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw== + dependencies: + "@smithy/node-config-provider" "^2.2.1" + "@smithy/types" "^2.9.1" + "@smithy/util-config-provider" "^2.2.1" + "@smithy/util-middleware" "^2.1.1" + tslib "^2.5.0" + +"@smithy/core@^1.3.1": + version "1.3.1" + resolved "https://registry.npmjs.org/@smithy/core/-/core-1.3.1.tgz" + integrity sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q== + dependencies: + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/util-middleware" "^2.1.1" + tslib "^2.5.0" + +"@smithy/credential-provider-imds@^2.2.1": + version "2.2.1" + resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz" + integrity sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA== + dependencies: + "@smithy/node-config-provider" "^2.2.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + tslib "^2.5.0" + +"@smithy/eventstream-codec@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz" + integrity sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.9.1" + "@smithy/util-hex-encoding" "^2.1.1" + tslib "^2.5.0" + +"@smithy/eventstream-serde-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.1.tgz" + integrity sha512-JvEdCmGlZUay5VtlT8/kdR6FlvqTDUiJecMjXsBb0+k1H/qc9ME5n2XKPo8q/MZwEIA1GmGgYMokKGjVvMiDow== + dependencies: + "@smithy/eventstream-serde-universal" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/eventstream-serde-config-resolver@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.1.tgz" + integrity sha512-EqNqXYp3+dk//NmW3NAgQr9bEQ7fsu/CcxQmTiq07JlaIcne/CBWpMZETyXm9w5LXkhduBsdXdlMscfDUDn2fA== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/eventstream-serde-node@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.1.tgz" + integrity sha512-LF882q/aFidFNDX7uROAGxq3H0B7rjyPkV6QDn6/KDQ+CG7AFkRccjxRf1xqajq/Pe4bMGGr+VKAaoF6lELIQw== + dependencies: + "@smithy/eventstream-serde-universal" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/eventstream-serde-universal@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.1.tgz" + integrity sha512-LR0mMT+XIYTxk4k2fIxEA1BPtW3685QlqufUEUAX1AJcfFfxNDKEvuCRZbO8ntJb10DrIFVJR9vb0MhDCi0sAQ== + dependencies: + "@smithy/eventstream-codec" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/fetch-http-handler@^2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz" + integrity sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg== + dependencies: + "@smithy/protocol-http" "^3.1.1" + "@smithy/querystring-builder" "^2.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-base64" "^2.1.1" + tslib "^2.5.0" + +"@smithy/hash-blob-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.1.tgz" + integrity sha512-jizu1+2PAUjiGIfRtlPEU8Yo6zn+d78ti/ZHDesdf1SUn2BuZW433JlPoCOLH3dBoEEvTgLvQ8tUGSoTTALA+A== + dependencies: + "@smithy/chunked-blob-reader" "^2.1.1" + "@smithy/chunked-blob-reader-native" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/hash-node@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.1.tgz" + integrity sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg== + dependencies: + "@smithy/types" "^2.9.1" + "@smithy/util-buffer-from" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@smithy/hash-stream-node@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.1.1.tgz" + integrity sha512-VgDaKcfCy0iHcmtAZgZ3Yw9g37Gkn2JsQiMtFQXUh8Wmo3GfNgDwLOtdhJ272pOT7DStzpe9cNr+eV5Au8KfQA== + dependencies: + "@smithy/types" "^2.9.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@smithy/invalid-dependency@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz" + integrity sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/is-array-buffer@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz" + integrity sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ== + dependencies: + tslib "^2.5.0" + +"@smithy/md5-js@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.1.1.tgz" + integrity sha512-L3MbIYBIdLlT+MWTYrdVSv/dow1+6iZ1Ad7xS0OHxTTs17d753ZcpOV4Ro7M7tRAVWML/sg2IAp/zzCb6aAttg== + dependencies: + "@smithy/types" "^2.9.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@smithy/middleware-content-length@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz" + integrity sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g== + dependencies: + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/middleware-endpoint@^2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz" + integrity sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q== + dependencies: + "@smithy/middleware-serde" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-middleware" "^2.1.1" + tslib "^2.5.0" + +"@smithy/middleware-retry@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz" + integrity sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA== + dependencies: + "@smithy/node-config-provider" "^2.2.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/service-error-classification" "^2.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/util-middleware" "^2.1.1" + "@smithy/util-retry" "^2.1.1" + tslib "^2.5.0" + uuid "^8.3.2" + +"@smithy/middleware-serde@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz" + integrity sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/middleware-stack@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz" + integrity sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/node-config-provider@^2.2.1": + version "2.2.1" + resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz" + integrity sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg== + dependencies: + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/node-http-handler@^2.3.1": + version "2.3.1" + resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz" + integrity sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA== + dependencies: + "@smithy/abort-controller" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/querystring-builder" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/property-provider@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.1.tgz" + integrity sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/protocol-http@^3.1.1": + version "3.1.1" + resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.1.1.tgz" + integrity sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/querystring-builder@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz" + integrity sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg== + dependencies: + "@smithy/types" "^2.9.1" + "@smithy/util-uri-escape" "^2.1.1" + tslib "^2.5.0" + +"@smithy/querystring-parser@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz" + integrity sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/service-error-classification@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz" + integrity sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw== + dependencies: + "@smithy/types" "^2.9.1" + +"@smithy/shared-ini-file-loader@^2.3.1": + version "2.3.1" + resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz" + integrity sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/signature-v4@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.1.tgz" + integrity sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg== + dependencies: + "@smithy/eventstream-codec" "^2.1.1" + "@smithy/is-array-buffer" "^2.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-hex-encoding" "^2.1.1" + "@smithy/util-middleware" "^2.1.1" + "@smithy/util-uri-escape" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@smithy/smithy-client@^2.3.1": + version "2.3.1" + resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.3.1.tgz" + integrity sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA== + dependencies: + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-stream" "^2.1.1" + tslib "^2.5.0" + +"@smithy/types@^2.9.1": + version "2.9.1" + resolved "https://registry.npmjs.org/@smithy/types/-/types-2.9.1.tgz" + integrity sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw== + dependencies: + tslib "^2.5.0" + +"@smithy/url-parser@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.1.tgz" + integrity sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q== + dependencies: + "@smithy/querystring-parser" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/util-base64@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.1.1.tgz" + integrity sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g== + dependencies: + "@smithy/util-buffer-from" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-body-length-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz" + integrity sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag== + dependencies: + tslib "^2.5.0" + +"@smithy/util-body-length-node@^2.2.1": + version "2.2.1" + resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz" + integrity sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-buffer-from@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz" + integrity sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg== + dependencies: + "@smithy/is-array-buffer" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-config-provider@^2.2.1": + version "2.2.1" + resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz" + integrity sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-defaults-mode-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz" + integrity sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA== + dependencies: + "@smithy/property-provider" "^2.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + bowser "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-defaults-mode-node@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz" + integrity sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA== + dependencies: + "@smithy/config-resolver" "^2.1.1" + "@smithy/credential-provider-imds" "^2.2.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/util-endpoints@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz" + integrity sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw== + dependencies: + "@smithy/node-config-provider" "^2.2.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/util-hex-encoding@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz" + integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-middleware@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.1.tgz" + integrity sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA== + dependencies: + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/util-retry@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.1.tgz" + integrity sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA== + dependencies: + "@smithy/service-error-classification" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@smithy/util-stream@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.1.tgz" + integrity sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ== + dependencies: + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-buffer-from" "^2.1.1" + "@smithy/util-hex-encoding" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-uri-escape@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz" + integrity sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-utf8@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.1.1.tgz" + integrity sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A== + dependencies: + "@smithy/util-buffer-from" "^2.1.1" + tslib "^2.5.0" + +"@smithy/util-waiter@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.1.1.tgz" + integrity sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA== + dependencies: + "@smithy/abort-controller" "^2.1.1" + "@smithy/types" "^2.9.1" + tslib "^2.5.0" + +"@supercharge/promise-pool@^2.1.0": + version "2.4.0" + resolved "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-2.4.0.tgz" + integrity sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w== + +"@supercharge/promise-pool@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-3.1.0.tgz" + integrity sha512-gB3NukbIcYzRtPoE6dx9svQYPodxvnfQlaaQd8N/z87E6WaMfRE7o5HwB+LZ+KeM0nsNAq1n4TmBtfz1VCUR+Q== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/async-retry@^1.4.8": + version "1.4.8" + resolved "https://registry.npmjs.org/@types/async-retry/-/async-retry-1.4.8.tgz" + integrity sha512-Qup/B5PWLe86yI5I3av6ePGaeQrIHNKCwbsQotD6aHQ6YkHsMUxVZkZsmx/Ry3VZQ6uysHwTjQ7666+k6UjVJA== + dependencies: + "@types/retry" "*" + +"@types/debug@^4.1.8": + version "4.1.12" + resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/ms@*": + version "0.7.34" + resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node@*", "@types/node@^18.7.23": + version "18.19.10" + resolved "https://registry.npmjs.org/@types/node/-/node-18.19.10.tgz" + integrity sha512-IZD8kAM02AW1HRDTPOlz3npFava678pr8Ie9Vp8uRhBROXAv8MXT2pCnGZZAKYdromsNQLHQcfWQ6EOatVLtqA== + dependencies: + undici-types "~5.26.4" + +"@types/node@18.15.13": + version "18.15.13" + resolved "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + +"@types/retry@*": + version "0.12.5" + resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz" + integrity sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw== + +"@types/validator@^13.7.17": + version "13.11.9" + resolved "https://registry.npmjs.org/@types/validator/-/validator-13.11.9.tgz" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + 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.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + 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.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^1.6.5: + version "1.6.7" + resolved "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bignumber.js@^9.1.0: + version "9.1.2" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + 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.npmjs.org/bowser/-/bowser-2.11.0.tgz" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +buffer-writer@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz" + integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + 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.npmjs.org/chalk/-/chalk-2.4.2.tgz" + 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.npmjs.org/chalk/-/chalk-4.1.2.tgz" + 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.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" + integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + 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.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-fetch@^3.1.5: + version "3.1.8" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz" + 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.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + 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.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dotenv@^16.0.3: + version "16.4.1" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz" + integrity sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ== + +dottie@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz" + integrity sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +ethers@^6.0.0, ethers@^6.9.2: + version "6.10.0" + resolved "https://registry.npmjs.org/ethers/-/ethers-6.10.0.tgz" + integrity sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@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.5.0" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + 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.npmjs.org/extract-files/-/extract-files-9.0.0.tgz" + integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== + +fast-xml-parser@4.2.5: + version "4.2.5" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz" + integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== + dependencies: + strnum "^1.0.5" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz" + 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.npmjs.org/figures/-/figures-3.2.0.tgz" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +follow-redirects@^1.15.4: + version "1.15.6" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + 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.npmjs.org/form-data/-/form-data-4.0.0.tgz" + 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.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz" + integrity sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w== + +glob@^10.3.10: + version "10.3.10" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +graphql-request@5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/graphql-request/-/graphql-request-5.1.0.tgz" + 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@^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", graphql@^16.6.0, "graphql@14 - 16": + version "16.8.1" + resolved "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +hpagent@^1.0.0: + version "1.2.0" + resolved "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz" + integrity sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA== + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +inflection@^1.13.4: + version "1.13.4" + resolved "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz" + integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw== + +inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inquirer-autocomplete-prompt@^1.0.2: + version "1.4.0" + resolved "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz" + 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.npmjs.org/inquirer-fuzzy-path/-/inquirer-fuzzy-path-2.3.0.tgz" + 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@^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", inquirer@^8.0.0: + version "8.2.6" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz" + 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" + +inquirer@^6.0.0: + version "6.5.2" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz" + 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" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + 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.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +"lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + 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.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +moment-timezone@^0.5.43: + version "0.5.45" + resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz" + integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== + dependencies: + moment "^2.29.4" + +moment@^2.29.4: + version "2.30.1" + resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz" + integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +node-fetch@^2.6.12: + version "2.7.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + 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.npmjs.org/onetime/-/onetime-2.0.1.tgz" + integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + 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.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-limit@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +packet-reader@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz" + integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +pg-cloudflare@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz" + integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== + +pg-connection-string@^2.6.1, pg-connection-string@^2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz" + integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-pool@^3.6.1: + version "3.6.1" + resolved "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz" + integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og== + +pg-protocol@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz" + integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== + +pg-types@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz" + 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, pg@>=8.0: + version "8.11.3" + resolved "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz" + integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== + dependencies: + buffer-writer "2.0.0" + packet-reader "1.0.0" + pg-connection-string "^2.6.2" + pg-pool "^3.6.1" + pg-protocol "^1.6.0" + pg-types "^2.1.0" + pgpass "1.x" + optionalDependencies: + pg-cloudflare "^1.1.1" + +pgpass@1.x: + version "1.0.5" + resolved "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== + dependencies: + split2 "^4.1.0" + +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz" + integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz" + 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.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + 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.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" + 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.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + 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.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz" + integrity sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA== + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +run-async@^2.2.0, run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +rxjs@^6.4.0: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^6.6.2: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^7.5.5: + version "7.8.1" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +secure-json-parse@^2.4.0: + version "2.7.0" + resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" + integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== + +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +sequelize-pool@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz" + integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg== + +sequelize@^6.36.0: + version "6.36.0" + resolved "https://registry.npmjs.org/sequelize/-/sequelize-6.36.0.tgz" + integrity sha512-PqOa11EHwA/zLmGDU4aynbsavbHJUlgRvFuC/2cA4LhOuV6NHKcQ0IXB+hNdFrGT3rULmvc4kdIwnfCNsrECMQ== + 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.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +split2@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + 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.npmjs.org/string-width/-/string-width-2.1.1.tgz" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + 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@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +toposort-class@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz" + integrity sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tron-format-address@^0.1.11: + version "0.1.11" + resolved "https://registry.npmjs.org/tron-format-address/-/tron-format-address-0.1.11.tgz" + integrity sha512-Jx2i3R1yXrEMQsfc2jueAI71ivnySzdeva6SiSM/pddwj8TK7PVABSP6s/iYcTRI63GxJEgGMmOJXNNKoBmbQw== + +ts-node@^10.9.1: + version "10.9.2" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" + 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@^1.11.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0: + version "2.6.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +typescript@^5.0.0, typescript@>=2.7: + version "5.3.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici@^5.22.1: + version "5.28.4" + resolved "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== + dependencies: + "@fastify/busboy" "^2.0.0" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +validator@^13.9.0: + version "13.11.0" + resolved "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz" + integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + 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.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wkx@^0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz" + 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.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + 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.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + 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.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +ws@8.5.0: + version "8.5.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 4303005b26728176a67215c58405b2f5040f9469 Mon Sep 17 00:00:00 2001 From: jan-magpie <155635960+jan-magpie@users.noreply.github.com> Date: Mon, 24 Jun 2024 10:37:40 +0530 Subject: [PATCH 0842/1590] Create penpie.ts --- fees/penpie.ts | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 fees/penpie.ts diff --git a/fees/penpie.ts b/fees/penpie.ts new file mode 100644 index 0000000000..ac4cb77a0c --- /dev/null +++ b/fees/penpie.ts @@ -0,0 +1,84 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { Chain } from "@defillama/sdk/build/general"; +const ADDRESSES = require('../helpers/coreAssets.json') + +const event_paid_stream = 'event RewardPaidTo (address _market, address _to, address _rewardToken, uint256 _feeAmount)'; +const event_paid_bribe = 'event RewardClaimed (address indexed token, address indexed account, uint256 amount, uint256 updateCount)'; +const event_pendle_fee= 'event RUpdateProtocolClaimable ( address indexed user, uint256 sumTopUp)'; + +type TAddress = { + [c: string]: string; +} +const address_reward: TAddress = { + + [CHAIN.BSC]: '0x782D9D67FeaA4d1CDF8222D9053c8CBA1c3B7982', + [CHAIN.ARBITRUM]: '0x6DB96BBEB081d2a85E0954C252f2c1dC108b3f81', + [CHAIN.ETHEREUM]: '0x6E799758CEE75DAe3d84e09D40dc416eCf713652' +} +const reward_eth_pendle='0x8C237520a8E14D658170A633D96F8e80764433b9' +const address_bribe: TAddress = { + [CHAIN.BSC]: '0x6E796bCF2B63b070F9cC0a7D3d857FeF628E9e5b', + [CHAIN.ARBITRUM]: '0x8CE523cf1120d9B7703806c745B69663a2847504', + [CHAIN.ETHEREUM]: '0xa346Bd80943Aa3042E6709d80Ce9C3b8fbeAc4Ab' +} +//all revenue is from bribes and is given to governance token holders 100% + +const graph = (chain: Chain) => { + return async ({ createBalances, getLogs, getFromBlock, getToBlock }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + const dailyFees = createBalances(); + if (chain=='ETHEREUM'){ + (await getLogs({ + target:reward_eth_pendle , + eventAbi: event_pendle_fee, + fromBlock, + toBlock + })).map((e: any) => { + // check if it is penpie + if (e.user === '0x6e799758cee75dae3d84e09d40dc416ecf713652') { + dailyFees.add(ADDRESSES.null, e.sumTopUp); + } + }) + } + (await getLogs({ + target: address_reward[chain], + eventAbi: event_paid_stream, + fromBlock, + toBlock + })).map((e: any) => { + dailyFees.add(e._rewardToken, e._feeAmount) + }), + (await getLogs({ + target: address_bribe[chain], + eventAbi: event_paid_bribe, + fromBlock, + toBlock + })).map((e: any) => { + dailyFees.add(e.token, e.amount) + }) + return { dailyFees, dailyRevenue: dailyFees,dailyUserFees:dailyFees }; + } +} + + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + + [CHAIN.BSC]: { + fetch: graph(CHAIN.BSC), + start: 77678653, + }, + [CHAIN.ARBITRUM]: { + fetch: graph(CHAIN.ARBITRUM), + start: 77678653, + }, + [CHAIN.ETHEREUM]: { + fetch: graph(CHAIN.ETHEREUM), + start: 77678653, + }, + } +}; + +export default adapter; From 69b2e8bfaf1fa109ab368caf7fe8debeab03d8ae Mon Sep 17 00:00:00 2001 From: jan-magpie <155635960+jan-magpie@users.noreply.github.com> Date: Mon, 24 Jun 2024 10:41:57 +0530 Subject: [PATCH 0843/1590] Create radpie.ts --- fees/radpie.ts | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 fees/radpie.ts diff --git a/fees/radpie.ts b/fees/radpie.ts new file mode 100644 index 0000000000..6fa763452b --- /dev/null +++ b/fees/radpie.ts @@ -0,0 +1,89 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { Chain } from "@defillama/sdk/build/general"; + +const event_paid_stream = 'event RewardPaid (address indexed _user, address indexed _receiver, uint256 _reward, address indexed _token)'; +const event_paid_rdnt= 'event RDNTEntitled (address indexed _receipt, uint256 _amount)'; + +type TAddress = { + [c: string]: string; +} +const address_reward: TAddress = { + + [CHAIN.BSC]: '0xe05157aA8D14b8ED1d816D505b3D5DEEB83ca131', + [CHAIN.ARBITRUM]: '0x18a192dFe0BE1E5E9AA424738FdAd800646283b2', + [CHAIN.ETHEREUM]: '0x7e6E8aeCCb0508FeD6547C9F3731E8f75C5C2932' +} +const address_rdnt_reward: TAddress = { +[CHAIN.BSC]: '0x91DD506e1f27f50dd40d0E8634013b1F2393DCa0', +[CHAIN.ARBITRUM]: '0xD97EbDd4a104e8336760C6350930a96A9A659A66', +[CHAIN.ETHEREUM]: '0x086295a932d0f91da4e878ec33d4355d196bbc44' + +} +const address_rdnt: TAddress = { + + [CHAIN.BSC]: '0xf7de7e8a6bd59ed41a4b5fe50278b3b7f31384df', + [CHAIN.ARBITRUM]: '0x3082CC23568eA640225c2467653dB90e9250AaA0', + [CHAIN.ETHEREUM]: '0x137dDB47Ee24EaA998a535Ab00378d6BFa84F893' + + } + +const graph = (chain: Chain) => { + return async ({ createBalances, getLogs, getFromBlock, getToBlock,api }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + const dailyFees = createBalances(); + let poolLength = await api.call({ abi: 'uint256:poolLength', target:address_reward[chain], }); + // console.log(poolLength); + let array = Array.from({ length: poolLength }, (_, index) => index); + const pools=await api.multiCall({ abi: 'function poolTokenList(uint256) view returns(address)', calls:array , target:address_reward[chain] }) // (await getLogs({ + // console.log(pools) + const rewardContracts = await api.multiCall({ abi: 'function pools(address) view returns ( address asset, address rToken, address vdToken, address rewarder, address receiptToken , uint256 maxCap, uint256 lastActionHandled, bool isNative, bool isActive)', calls:pools , target:address_reward[chain] }) // (await getLogs({ + // console.log(rewardContracts[0].rewarder) + for (const i of rewardContracts) { + const logs = await getLogs({ + target: i.rewarder, + eventAbi: event_paid_stream, + fromBlock, + toBlock + }); + // console.log(logs) + logs.forEach((e: any) => { + // console.log(e._token,e._reward) + dailyFees.add(e._token, e._reward); + }); + } + + (await getLogs({ + target: address_rdnt_reward[chain], + eventAbi: event_paid_rdnt, + fromBlock, + toBlock + })).map((e: any) => { + // console.log(e) + dailyFees.add(address_rdnt[chain], e._amount) + }) + return { dailyFees, dailyRevenue: dailyFees,dailyUserFees:dailyFees }; + } +} + + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + + [CHAIN.BSC]: { + fetch: graph(CHAIN.BSC), + start: 77678653, + }, + [CHAIN.ARBITRUM]: { + fetch: graph(CHAIN.ARBITRUM), + start: 77678653, + }, + [CHAIN.ETHEREUM]: { + fetch: graph(CHAIN.ETHEREUM), + start: 77678653, + }, + } +}; + +export default adapter; From cb45d3b66400492aa5b266f8d7a279a87cc2184a Mon Sep 17 00:00:00 2001 From: Manuel Date: Mon, 24 Jun 2024 14:03:04 +0200 Subject: [PATCH 0844/1590] fix: adapter chain --- fees/milkyway.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/milkyway.ts b/fees/milkyway.ts index 7c11c392b4..d885113cd5 100644 --- a/fees/milkyway.ts +++ b/fees/milkyway.ts @@ -37,7 +37,7 @@ const fetch: FetchV2 = async ({ startTimestamp, endTimestamp }) => { const adapter: Adapter = { adapter: { - celestia: { + osmosis: { fetch, runAtCurrTime: false, // 2024-04-30T17:55:14:00Z From d3452f0c61ae8699e21d3ead10c301a81194cf15 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 24 Jun 2024 15:45:57 +0000 Subject: [PATCH 0845/1590] fix milkyway --- fees/milkyway.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/fees/milkyway.ts b/fees/milkyway.ts index d885113cd5..fa19bcea0d 100644 --- a/fees/milkyway.ts +++ b/fees/milkyway.ts @@ -1,6 +1,5 @@ import { Adapter, FetchV2 } from "../adapters/types"; import { httpGet } from "../utils/fetchURL"; -import { getPrices } from "../utils/prices"; interface FeeResponse { staking_rewards: number; @@ -9,7 +8,7 @@ interface FeeResponse { } -const fetch: FetchV2 = async ({ startTimestamp, endTimestamp }) => { +const fetch: FetchV2 = async ({ startTimestamp, endTimestamp, createBalances }) => { const startDate = new Date(startTimestamp * 1000); const endDate = new Date(endTimestamp * 1000); const params = { @@ -18,15 +17,13 @@ const fetch: FetchV2 = async ({ startTimestamp, endTimestamp }) => { currency: 'tia' } const response: FeeResponse = await httpGet('https://apis.milkyway.zone/milktia/fees/range', { params }); - const prices = await getPrices(['coingecko:celestia'], endTimestamp); - const price = prices['coingecko:celestia']; - - const dailyUserFees = String(response.fees * price.price); - const dailyStakingRewards = String(response.staking_rewards * price.price); - const dailySupplySideRevenue = String(response.supply_side_revenue * price.price); - + const dailyUserFees = createBalances() + const dailyStakingRewards = createBalances() + const dailySupplySideRevenue = createBalances() + dailyUserFees.addCGToken('celestia', response.fees); + dailyStakingRewards.addCGToken('celestia', response.staking_rewards); + dailySupplySideRevenue.addCGToken('celestia', response.supply_side_revenue); return { - timestamp: startTimestamp, dailyUserFees, dailyFees: dailyStakingRewards, dailyRevenue: dailyUserFees, From 7ee944e4690f55efd6bef8135fccdbe6f72470db Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 24 Jun 2024 15:51:13 +0000 Subject: [PATCH 0846/1590] add dailyBridgeVolume --- adapters/types.ts | 2 ++ bridge-aggregator/bungee/index.ts | 2 +- bridge-aggregator/jumper.exchange/index.ts | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/adapters/types.ts b/adapters/types.ts index fa1cb4bb4c..d25caf1011 100644 --- a/adapters/types.ts +++ b/adapters/types.ts @@ -119,6 +119,8 @@ export type FetchResultVolume = FetchResultBase & { dailyShortOpenInterest?: FetchResponseValue dailyLongOpenInterest?: FetchResponseValue dailyOpenInterest?: FetchResponseValue + dailyBridgeVolume?: FetchResponseValue + totalBridgeVolume?: FetchResponseValue }; // FEES diff --git a/bridge-aggregator/bungee/index.ts b/bridge-aggregator/bungee/index.ts index 5db85f9d83..4b34650476 100644 --- a/bridge-aggregator/bungee/index.ts +++ b/bridge-aggregator/bungee/index.ts @@ -37,7 +37,7 @@ const fetch: any = async (timestamp: number, _, { chain, getLogs, createBalances } }); - return { dailyVolume, timestamp, } as any; + return { dailyBridgeVolume: dailyVolume , timestamp, } as any; }; const adapter: SimpleAdapter = { diff --git a/bridge-aggregator/jumper.exchange/index.ts b/bridge-aggregator/jumper.exchange/index.ts index b0f31c275f..b20d99f4ca 100644 --- a/bridge-aggregator/jumper.exchange/index.ts +++ b/bridge-aggregator/jumper.exchange/index.ts @@ -38,7 +38,7 @@ const fetch: any = async (timestamp: number, _, { chain, getLogs, createBalances } }); - return { dailyVolume, timestamp, } as any; + return { dailyBridgeVolume: dailyVolume, timestamp, } as any; }; const adapter: SimpleAdapter = { From 3b228c639407125a73a8d142e510b94ee9958738 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 24 Jun 2024 16:27:22 +0000 Subject: [PATCH 0847/1590] sideshift --- fees/sideshift.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 fees/sideshift.ts diff --git a/fees/sideshift.ts b/fees/sideshift.ts new file mode 100644 index 0000000000..d98188a9e5 --- /dev/null +++ b/fees/sideshift.ts @@ -0,0 +1,31 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const token = '0x35e78b3982E87ecfD5b3f3265B601c046cDBe232' +const fetchFees = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const logs = await options.getLogs({ + target: token, + topics: [ + '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', + '0x000000000000000000000000cdd37ada79f589c15bd4f8fd2083dc88e34a2af2', + '0x0000000000000000000000003808708e761b988d23ae011ed0e12674fb66bd62' + ] + }) + logs.forEach(log => { + dailyFees.add(token, Number(log.data)) + }) + return { + dailyFees, + } +} +const adapters: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ETHEREUM]: { + fetch: fetchFees, + start: 0, + } + } +} +export default adapters From 0f35400857dd056ac35049baf10f8b0e1d55ab19 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 25 Jun 2024 01:26:37 +0000 Subject: [PATCH 0848/1590] fix rev --- fees/sideshift.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fees/sideshift.ts b/fees/sideshift.ts index d98188a9e5..ca1e837448 100644 --- a/fees/sideshift.ts +++ b/fees/sideshift.ts @@ -15,9 +15,7 @@ const fetchFees = async (options: FetchOptions) => { logs.forEach(log => { dailyFees.add(token, Number(log.data)) }) - return { - dailyFees, - } + return { dailyFees, dailyRevenue: dailyFees } } const adapters: SimpleAdapter = { version: 2, From fa4ae95a0954cef50804cc2156d4abb13b84660a Mon Sep 17 00:00:00 2001 From: perpie-papa <141109279+perpie-papa@users.noreply.github.com> Date: Tue, 25 Jun 2024 07:01:39 +0300 Subject: [PATCH 0849/1590] Fix err --- aggregator-derivatives/perpie/index.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/aggregator-derivatives/perpie/index.ts b/aggregator-derivatives/perpie/index.ts index 63879a9bf7..9a9f960e38 100644 --- a/aggregator-derivatives/perpie/index.ts +++ b/aggregator-derivatives/perpie/index.ts @@ -31,13 +31,16 @@ const fetchVolumeAndFees: (chain: string) => FetchV2 = (chain: string) => async (options: FetchOptions): Promise => { chain; - let data = (await queryDune("3855069"))[0] as StatRow - const dayStartOfDayTimestamp = getUniqStartOfTodayTimestamp( - new Date(options.startOfDay * 1000) - ); + const date = new Date(options.startOfDay * 1000); - + const dayStartOfDayTimestamp = getUniqStartOfTodayTimestamp(date); + + let data = ( + await queryDune("3855069", { + daytime: date.toISOString(), + }) + )[0] as StatRow; return { dailyVolume: data.volume_24hr, @@ -48,8 +51,6 @@ const fetchVolumeAndFees: (chain: string) => FetchV2 = }; }; - - const fetchAll: (chain: string) => FetchV2 = (chain: string) => async (options: FetchOptions): Promise => { From 71c077218f103246a507fa0baf29756ad2cfc62b Mon Sep 17 00:00:00 2001 From: Vinay Sagar Date: Tue, 25 Jun 2024 13:38:38 +0530 Subject: [PATCH 0850/1590] add boba chain to wefi --- dexs/wefi/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dexs/wefi/index.ts b/dexs/wefi/index.ts index 028d88259c..8b75179342 100644 --- a/dexs/wefi/index.ts +++ b/dexs/wefi/index.ts @@ -5,6 +5,7 @@ const address: any = { [CHAIN.LINEA]: '0x7e0da0deccac2e7b9ad06e378ee09c15b5bdeefa', [CHAIN.XDC]: '0x7e0da0deccac2e7b9ad06e378ee09c15b5bdeefa', [CHAIN.POLYGON]: '0xA42e5d2A738F83a1e1a907eB3aE031e5A768C085', + [CHAIN.BOBA]: '0x7E0DA0DECCAc2E7B9AD06E378ee09c15B5BDeefa' } const fetchVolume: FetchV2 = async (options: FetchOptions) => { @@ -39,6 +40,10 @@ const adapter: SimpleAdapter = { fetch: fetchVolume, start: 1704067200, }, + [CHAIN.BOBA]: { + fetch: fetchVolume, + start: 1704067200, + }, } } export default adapter; From 6810a93cd0287440c57399077290962e724fadf1 Mon Sep 17 00:00:00 2001 From: aya Date: Tue, 25 Jun 2024 09:50:28 +0100 Subject: [PATCH 0851/1590] adding fees adaptator --- dexs/dusa/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dexs/dusa/index.ts b/dexs/dusa/index.ts index 424ccba6fe..a7a1cb4d3e 100644 --- a/dexs/dusa/index.ts +++ b/dexs/dusa/index.ts @@ -14,11 +14,15 @@ const fetchVolume = async (timestamp: number) => { const totalVolume = historicalVolume.totalVolume.volume; const dailyVolume = historicalVolume.dailyVolume.volume; - + + const dailyFees = historicalVolume.dailyVolume.fees; + const totalFee = historicalVolume.totalVolume.fees; return { totalVolume: `${totalVolume}`, dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, + dailyFees: `${dailyFees}`, + totalFees: `${totalFee}`, timestamp: timestamp, }; }; From ef0f1b83e0b3c3b89dc549876d71567067c47682 Mon Sep 17 00:00:00 2001 From: Define101 Date: Tue, 25 Jun 2024 11:13:30 +0100 Subject: [PATCH 0852/1590] add taiko to helper --- helpers/chains.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/helpers/chains.ts b/helpers/chains.ts index 905a34e35d..512074bf8c 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -153,6 +153,7 @@ export enum CHAIN { CHILIZ = "chiliz", PLANQ = "planq", BOB = "bob", + TAIKO = "taiko" } // Don´t use From a19184a534000a27c300c21127da8aa54b57a4ac Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 25 Jun 2024 13:27:10 +0300 Subject: [PATCH 0853/1590] add Taiko chain --- aggregators/rubic/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aggregators/rubic/index.ts b/aggregators/rubic/index.ts index 61aa974872..340f59c8cc 100644 --- a/aggregators/rubic/index.ts +++ b/aggregators/rubic/index.ts @@ -36,7 +36,8 @@ const chains: Record = { [CHAIN.CRONOS]: 'cronos', [CHAIN.MODE]: 'mode', [CHAIN.MERLIN]: 'merlin', - [CHAIN.CORE]: 'core' + [CHAIN.CORE]: 'core', + [CHAIN.TAIKO]: 'taiko' }; interface ApiResponce { From 2a29b047855cc979575dd1ec22024bcac730c78e Mon Sep 17 00:00:00 2001 From: ideapacito Date: Tue, 25 Jun 2024 18:51:23 +0700 Subject: [PATCH 0854/1590] fwx update dexs api --- dexs/fwx/index.ts | 87 +- yarn.lock | 2435 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2469 insertions(+), 53 deletions(-) create mode 100644 yarn.lock diff --git a/dexs/fwx/index.ts b/dexs/fwx/index.ts index 6cde318638..d6b872fd72 100644 --- a/dexs/fwx/index.ts +++ b/dexs/fwx/index.ts @@ -4,46 +4,26 @@ import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpPost } from "../../utils/fetchURL"; -interface IConfigs { - pairs: IPairData[]; -} - -interface IPairData { - pair_name: string; - pair_byte: string; - underlying_asset: string; - collateral_asset: string; -} - interface IDailyData { - all: string; - long: string; - short: string; -} -interface IChartData { date: string; - daily_data: IDailyData; -} -interface IChart { - type: string; - data: IChartData[]; + short: string; + long: string; + total: string; } -interface IChartRes { - charts: IChart[]; - pair_names: string[]; +interface IRes { + data: IDailyData[]; } +const baseUrl = "https://app.fwx.finance/api/v2"; + interface IEndpoint { - pairData: string; tradingVolume: string; openInterest: string; } - const endpoints: Record = { [CHAIN.AVAX]: { - pairData: "https://app.fwx.finance/api/43114/v1//configs", - tradingVolume: "https://app.fwx.finance/api/43114/v1//chart/trading-volume", - openInterest: "https://app.fwx.finance/api/43114/v1//chart/open-interest", + tradingVolume: `${baseUrl}/trade/volume`, + openInterest: `${baseUrl}/trade/daily-open-interest`, }, }; @@ -55,46 +35,36 @@ const fetch = (chain: Chain) => { const date = new Date(dayTimestamp * 1e3); const formattedDate = date.toISOString().replace(/\.(\d{3})Z$/, ".$1Z"); - // * call api for daily volume - const pairDataRes = await httpPost(endpoints[chain].pairData, {}); - const pairData = pairDataRes as IConfigs - const pairs = pairData.pairs.map((p: IPairData) => p.pair_name); - // * call api for daily volume const tradingVolumeRes = await httpPost(endpoints[chain].tradingVolume, { from_date: formattedDate, to_date: formattedDate, - pair_names: pairs, - type: ["all"], + chain_id: 43114, }); - const tradingVolume = tradingVolumeRes as IChartRes - const totalVolumeData = tradingVolume.charts.find( - (x: IChart) => x.type == "all" - ); - const dailyVolumeData = totalVolumeData?.data.find( - (x: IChartData) => + const tradingVolume = tradingVolumeRes as IRes; + const dailyVolumeData = tradingVolume?.data.find( + (x: IDailyData) => new Date(x.date).getTime() == new Date(formattedDate).getTime() - )?.daily_data; + ); // * call api for daily open interest const openInterestRes = await httpPost(endpoints[chain].openInterest, { from_date: formattedDate, to_date: formattedDate, - pair_names: pairs, - type: ["all"], + chain_id: 43114, }); - const openInterest = openInterestRes as IChartRes - const openInterestData = openInterest.charts.find( - (x: IChart) => x.type == "all" - ); + const openInterestData = openInterestRes as IRes; const dailyOpenInterestData = openInterestData?.data.find( - (x: IChartData) => + (x: IDailyData) => new Date(x.date).getTime() == new Date(formattedDate).getTime() - )?.daily_data; + ); + console.log(dailyVolumeData?.total, dailyOpenInterestData?.total); return { - dailyVolume: dailyVolumeData?.all, - dailyOpenInterest: dailyOpenInterestData?.all, + dailyVolume: convertStringNumber(dailyVolumeData?.total || "0"), + dailyOpenInterest: convertStringNumber( + dailyOpenInterestData?.total || "0" + ), timestamp: timestamp, }; }; @@ -110,3 +80,14 @@ const adapter: SimpleAdapter = { }; export default adapter; + +// devide by 1e18 +function convertStringNumber(inputString: string) { + let number = BigInt(inputString); + const divisor = BigInt(1e18); + let integerPart = number / divisor; + let fractionalPart = number % divisor; + let fractionalString = fractionalPart.toString().padStart(18, "0"); + let result = `${integerPart}.${fractionalString}`; + return result; +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..8b03dd5839 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2435 @@ +# 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.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.600.0.tgz#3ce415d9257b8d1c8385bc26c6c86e6403aff83c" + integrity sha512-iYoKbJTputbf+ubkX6gSK/y/4uJEBRaXZ18jykLdBQ8UJuGrk2gqvV8h7OlGAhToCeysmmMqM0vDWyLt6lP8nw== + 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.600.0" + "@aws-sdk/client-sts" "3.600.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.600.0" + "@aws-sdk/middleware-bucket-endpoint" "3.598.0" + "@aws-sdk/middleware-expect-continue" "3.598.0" + "@aws-sdk/middleware-flexible-checksums" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-location-constraint" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-sdk-s3" "3.598.0" + "@aws-sdk/middleware-signing" "3.598.0" + "@aws-sdk/middleware-ssec" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/signature-v4-multi-region" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@aws-sdk/xml-builder" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/eventstream-serde-browser" "^3.0.2" + "@smithy/eventstream-serde-config-resolver" "^3.0.1" + "@smithy/eventstream-serde-node" "^3.0.2" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-blob-browser" "^3.1.0" + "@smithy/hash-node" "^3.0.1" + "@smithy/hash-stream-node" "^3.1.0" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/md5-js" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@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.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-stream" "^3.0.2" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.600.0": + version "3.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz#37966020af55a052822b9ef21adc38d2afcb0f34" + integrity sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sts" "3.600.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.600.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@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.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz#aef58e198e504d3b3d1ba345355650a67d21facb" + integrity sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@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.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.600.0": + version "3.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz#8a437f8cf626cf652f99628105576213dbba48b2" + integrity sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.600.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.600.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@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.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.598.0.tgz#82a069d703be0cafe3ddeacb1de51981ee4faa25" + integrity sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g== + dependencies: + "@smithy/core" "^2.2.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz#ea1f30cfc9948017dd0608518868d3f50074164f" + integrity sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz#58144440e698aef63b5cb459780325817c0acf10" + integrity sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/util-stream" "^3.0.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz#fd0ba8ab5c3701e05567d1c6f7752cfd9f4ba111" + integrity sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA== + dependencies: + "@aws-sdk/credential-provider-env" "3.598.0" + "@aws-sdk/credential-provider-http" "3.598.0" + "@aws-sdk/credential-provider-process" "3.598.0" + "@aws-sdk/credential-provider-sso" "3.598.0" + "@aws-sdk/credential-provider-web-identity" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/credential-provider-imds" "^3.1.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.600.0": + version "3.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz#33b32364972bd7167d000cdded92b9398346a3ca" + integrity sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw== + dependencies: + "@aws-sdk/credential-provider-env" "3.598.0" + "@aws-sdk/credential-provider-http" "3.598.0" + "@aws-sdk/credential-provider-ini" "3.598.0" + "@aws-sdk/credential-provider-process" "3.598.0" + "@aws-sdk/credential-provider-sso" "3.598.0" + "@aws-sdk/credential-provider-web-identity" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/credential-provider-imds" "^3.1.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz#f48ff6f964cd6726499b207f45bfecda4be922ce" + integrity sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz#52781e2b60b1f61752829c44a5e0b9fedd0694d6" + integrity sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA== + dependencies: + "@aws-sdk/client-sso" "3.598.0" + "@aws-sdk/token-providers" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz#d737e9c2b7c4460b8e31a55b4979bf4d88913900" + integrity sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.598.0.tgz#033b08921f9f284483a7337ed165743ee0dc598d" + integrity sha512-PM7BcFfGUSkmkT6+LU9TyJiB4S8yI7dfuKQDwK5ZR3P7MKaK4Uj4yyDiv0oe5xvkF6+O2+rShj+eh8YuWkOZ/Q== + dependencies: + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.598.0.tgz#5b08b8cae70d1e7cc082d3627b31856f6ba20d17" + integrity sha512-ZuHW18kaeHR8TQyhEOYMr8VwiIh0bMvF7J1OTqXHxDteQIavJWA3CbfZ9sgS4XGtrBZDyHJhjZKeCfLhN2rq3w== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.598.0.tgz#8e40734d5fb1b116816f885885f16db9b5e39032" + integrity sha512-xukAzds0GQXvMEY9G6qt+CzwVzTx8NyKKh04O2Q+nOch6QQ8Rs+2kTRy3Z4wQmXq2pK9hlOWb5nXA7HWpmz6Ng== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@aws-crypto/crc32c" "5.2.0" + "@aws-sdk/types" "3.598.0" + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz#0a7c4d5a95657bea2d7c4e29b9a8b379952d09b1" + integrity sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.598.0.tgz#45564d5119468e3ac97949431c249e8b6e00ec09" + integrity sha512-8oybQxN3F1ISOMULk7JKJz5DuAm5hCUcxMW9noWShbxTJuStNvuHf/WLUzXrf8oSITyYzIHPtf8VPlKR7I3orQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz#0c0692d2f4f9007c915734ab319db377ca9a3b1b" + integrity sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz#94015d41f8174bd41298fd13f8fb0a8c4576d7c8" + integrity sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.598.0.tgz#308604f8a38959ad65ec5674c643c7032d678f43" + integrity sha512-5AGtLAh9wyK6ANPYfaKTqJY1IFJyePIxsEbxa7zS6REheAqyVmgJFaGu3oQ5XlxfGr5Uq59tFTRkyx26G1HkHA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.598.0.tgz#b90eef6a9fe3f76777c9cd4890dcae8e1febd249" + integrity sha512-XKb05DYx/aBPqz6iCapsCbIl8aD8EihTuPCs51p75QsVfbQoVr4TlFfIl5AooMSITzojdAQqxt021YtvxjtxIQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/types" "^3.1.0" + "@smithy/util-middleware" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.598.0.tgz#d6a3c64ce77bd7379653b46b58ded32a7b0fe6f4" + integrity sha512-f0p2xP8IC1uJ5e/tND1l81QxRtRFywEdnbtKCE0H6RSn4UIt2W3Dohe1qQDbnh27okF0PkNW6BJGdSAz3p7qbA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz#6fa26849d256434ca4884c42c1c4755aa2f1556e" + integrity sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg== + dependencies: + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz#fd8fd6b7bc11b5f81def4db0db9e835d40a8f86e" + integrity sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.598.0.tgz#1716022e31dcbc5821aeca85204718f523a1ddbf" + integrity sha512-1r/EyTrO1gSa1FirnR8V7mabr7gk+l+HkyTI0fcTSr8ucB7gmYyW6WjkY8JCz13VYHFK62usCEDS7yoJoJOzTA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz#49a94c14ce2e392bb0e84b69986c33ecfad5b804" + integrity sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.598.0", "@aws-sdk/types@^3.222.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.598.0.tgz#b840d2446dee19a2a4731e6166f2327915d846db" + integrity sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ== + dependencies: + "@smithy/types" "^3.1.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.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz#7f78d68524babac7fdacf381590470353d45b959" + integrity sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + "@smithy/util-endpoints" "^2.0.2" + 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.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz#5039d0335f8a06af5be73c960df85009dda59090" + integrity sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz#f9bdf1b7cc3a40787c379f7c2ff028de2612c177" + integrity sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/xml-builder@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.598.0.tgz#ee591c5d80a34d9c5bc14326f1a62e9a0649c587" + integrity sha512-ZIa2RK7CHFTZ4gwK77WRtsZ6vF7xwRXxJ8KQIxK2duhoTVcn0xYxpFLdW9WZZZvdP9GIF3Loqvf8DRdeU5Jc7Q== + dependencies: + "@smithy/types" "^3.1.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.71" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.71.tgz#948a63441957c8844347d32470489b7b6c7b05c8" + integrity sha512-5hZ8TdYIrFa/f4hxb2ADzARmXxeuG5P8yukuQwNbiO8EnLcrDNPKwv5JXNaslWkMexlaeVy1m+EMLnTlbzeQSw== + 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.6.1" + resolved "https://registry.yarnpkg.com/@elastic/transport/-/transport-8.6.1.tgz#54954f7fd9d6f121471c1a437e59dc1edeb079aa" + integrity sha512-3vGs4W3wP5oeIT/4j1vcvd+t7m6ndP0uyb5GDY23LQCmbtI5Oq0aQwD9gb09KJbLFLUbI7db9vMFPzKavSFA5g== + dependencies: + 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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.0.tgz#408fbc0da13c30bc0aac859a44be08a5ba18126a" + integrity sha512-XOm4LkuC0PsK1sf2bBJLIlskn5ghmVxiEBVlo/jg0R8hxASBKYYgOoJEhKWgOr4vWGkN+5rC+oyBAqHYtxjnwQ== + dependencies: + "@smithy/types" "^3.2.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.2", "@smithy/config-resolver@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.3.tgz#104106363fbaf6bac61905727f7e2c39c62f3e94" + integrity sha512-4wHqCMkdfVDP4qmr4fVPYOFOH+vKhOv3X4e6KEU9wIC8xXUQ24tnF4CW+sddGDX1zU86GGyQ7A+rg2xmUD6jpQ== + dependencies: + "@smithy/node-config-provider" "^3.1.2" + "@smithy/types" "^3.2.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.2" + tslib "^2.6.2" + +"@smithy/core@^2.2.1": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.2.3.tgz#dc6ba7d338a1b35752be274cdaf6fcbcfdb44a70" + integrity sha512-SpyLOL2vgE6sUYM6nQfu82OirCPkCDKctyG3aMgjMlDPTJpUlmlNH0ttu9ZWwzEjrzzr8uABmPjJTRI7gk1HFQ== + dependencies: + "@smithy/middleware-endpoint" "^3.0.3" + "@smithy/middleware-retry" "^3.0.6" + "@smithy/middleware-serde" "^3.0.2" + "@smithy/protocol-http" "^4.0.2" + "@smithy/smithy-client" "^3.1.4" + "@smithy/types" "^3.2.0" + "@smithy/util-middleware" "^3.0.2" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.1.1", "@smithy/credential-provider-imds@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.2.tgz#7e84199a8cd8ff7121c0a2f95f7822dc09cc283f" + integrity sha512-gqVmUaNoeqyrOAjgZg+rTmFLsphh/vS59LCMdFfVpthVS0jbfBzvBmEPktBd+y9ME4DYMGHFAMSYJDK8q0noOQ== + dependencies: + "@smithy/node-config-provider" "^3.1.2" + "@smithy/property-provider" "^3.1.2" + "@smithy/types" "^3.2.0" + "@smithy/url-parser" "^3.0.2" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.1.tgz#b47f30bf4ad791ac7981b9fff58e599d18269cf9" + integrity sha512-s29NxV/ng1KXn6wPQ4qzJuQDjEtxLdS0+g5PQFirIeIZrp66FXVJ5IpZRowbt/42zB5dY8TqJ0G0L9KkgtsEZg== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^3.2.0" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^3.0.2": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.3.tgz#223267a9e46336aff2bebbc386eb6e62146d1fef" + integrity sha512-ZXKmNAHl6SWKYuVmtoEc/hBQ7Nym/rbAx2SrqoJHn0i9QopIP7fG1AWmoFIeS5R3/VL6AwUIZMR0g8qnjjVRRA== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.3" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.2.tgz#6238eadae0c060133c61783fd92d8b1ee1e6f99f" + integrity sha512-QbE3asvvBUZr7PwbOaxkSfKDjTAmWZkqh2G7pkYlD4jRkT1Y9nufeyu0OBPlLoF4+gl3YMpSVO7TESe8bVkD+g== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^3.0.2": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.3.tgz#51df0ca39f453d78a3d6607c1ac2e96cf900c824" + integrity sha512-v61Ftn7x/ubWFqH7GHFAL/RaU7QZImTbuV95DYugYYItzpO7KaHYEuO8EskCaBpZEfzOxhUGKm4teS9YUSt69Q== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.3" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.3.tgz#2ecac479ba84e10221b4b70545f3d7a223b5345e" + integrity sha512-YXYt3Cjhu9tRrahbTec2uOjwOSeCNfQurcWPGNEUspBhqHoA3KrDrVj+jGbCLWvwkwhzqDnnaeHAxm+IxAjOAQ== + dependencies: + "@smithy/eventstream-codec" "^3.1.1" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^3.0.2", "@smithy/fetch-http-handler@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.1.0.tgz#993d47577c7b86eb5796cd29f8301beafa2cf471" + integrity sha512-s7oQjEOUH9TYjctpITtWF4qxOdg7pBrP9eigEQ8SBsxF3dRFV0S28pGMllC83DUr7ECmErhO/BUwnULfoNhKgQ== + dependencies: + "@smithy/protocol-http" "^4.0.2" + "@smithy/querystring-builder" "^3.0.2" + "@smithy/types" "^3.2.0" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.1.tgz#758b4de6cf75b515cf36c18c4d101a833976c83f" + integrity sha512-8RwdPG7arvL5pfMAFsH6jfBVcC7MDR1LYHjKevZPHREkVtORIQkRfm2K8px7giJt7x0zzQJnWamrsDM4ig8nTQ== + dependencies: + "@smithy/chunked-blob-reader" "^3.0.0" + "@smithy/chunked-blob-reader-native" "^3.0.0" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/hash-node@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.2.tgz#8d1306f3b372e42dc76ae85fd979f7252aea476c" + integrity sha512-43uGA6o6QJQdXwAogybdTDHDd3SCdKyoiHIHb8PpdE2rKmVicjG9b1UgVwdgO8QPytmVqHFaUw27M3LZKwu8Yg== + dependencies: + "@smithy/types" "^3.2.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.1.tgz#ca288961879730a0203b60b4383e2455d015f2ac" + integrity sha512-+uvJHPrFNE9crkh3INVS9FmDcx1DoywDgIzlRWlPy7gqoD8jG14os9ATIFY7wN/ARPz1EWlkCHUap70oXxMmjA== + dependencies: + "@smithy/types" "^3.2.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.2.tgz#e455169d86e96e73ebf2bb1728b7d2e2850bdc01" + integrity sha512-+BAY3fMhomtq470tswXyrdVBSUhiLuhBVT+rOmpbz5e04YX+s1dX4NxTLzZGwBjCpeWZNtTxP8zbIvvFk81gUg== + dependencies: + "@smithy/types" "^3.2.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.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.2.tgz#dec2124a81beb83700b68390d1378010346b8541" + integrity sha512-WlSK9br7fkVucTkCXporwuOttCR3cJ1GV70J8ENYXGNc0nUTPzMdWCyHztgnbbKoekVMjGZOEu+8I52nOdzqwQ== + dependencies: + "@smithy/types" "^3.2.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.2.tgz#fc69a5b3a46310a798e4c804ef47dbe11ad2045f" + integrity sha512-/Havz3PkYIEmwpqkyRTR21yJsWnFbD1ec4H1pUL+TkDnE7RCQkAVUQepLL/UeCaZeCBXvfdoKbOjSbV01xIinQ== + dependencies: + "@smithy/protocol-http" "^4.0.2" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.0.2", "@smithy/middleware-endpoint@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.3.tgz#bbfdd0f35668af392c5031ca2735c31760740bc6" + integrity sha512-ARAXHodhj4tttKa9y75zvENdSoHq6VGsSi7XS3+yLutrnxttJs6N10UMInCC1yi3/bopT8xug3iOP/y9R6sKJQ== + dependencies: + "@smithy/middleware-serde" "^3.0.2" + "@smithy/node-config-provider" "^3.1.2" + "@smithy/shared-ini-file-loader" "^3.1.2" + "@smithy/types" "^3.2.0" + "@smithy/url-parser" "^3.0.2" + "@smithy/util-middleware" "^3.0.2" + tslib "^2.6.2" + +"@smithy/middleware-retry@^3.0.4", "@smithy/middleware-retry@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.6.tgz#ace955263cea4ef6acf1e0e42192be62e20ab558" + integrity sha512-ICsFKp8eAyIMmxN5UT3IU37S6886L879TKtgxPsn/VD/laYNwqTLmJaCAn5//+2fRIrV0dnHp6LFlMwdXlWoUQ== + dependencies: + "@smithy/node-config-provider" "^3.1.2" + "@smithy/protocol-http" "^4.0.2" + "@smithy/service-error-classification" "^3.0.2" + "@smithy/smithy-client" "^3.1.4" + "@smithy/types" "^3.2.0" + "@smithy/util-middleware" "^3.0.2" + "@smithy/util-retry" "^3.0.2" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^3.0.1", "@smithy/middleware-serde@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.2.tgz#3ec15a7991c2b066cced5989aba7f81fed4dfb87" + integrity sha512-oT2abV5zLhBucJe1LIIFEcRgIBDbZpziuMPswTMbBQNcaEUycLFvX63zsFmqfwG+/ZQKsNx+BSE8W51CMuK7Yw== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^3.0.1", "@smithy/middleware-stack@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.2.tgz#82610681a7f5986bfb3229df98ca1e050b667660" + integrity sha512-6fRcxomlNKBPIy/YjcnC7YHpMAjRvGUYlYVJAfELqZjkW0vQegNcImjY7T1HgYA6u3pAcCxKVBLYnkTw8z/l0A== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^3.1.1", "@smithy/node-config-provider@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.2.tgz#3e739ae02520f2249f6c50197feee6e38125fb1d" + integrity sha512-388fEAa7+6ORj/BDC70peg3fyFBTTXJyXfXJ0Bwd6FYsRltePr2oGzIcm5AuC1WUSLtZ/dF+hYOnfTMs04rLvA== + dependencies: + "@smithy/property-provider" "^3.1.2" + "@smithy/shared-ini-file-loader" "^3.1.2" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^3.0.1", "@smithy/node-http-handler@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.0.tgz#0f37b2c379b1cd85be125234575e7c5129dbed67" + integrity sha512-pOpgB6B+VLXLwAyyvRz+ZAVXABlbAsJ2xvn3WZvrppAPImxwQOPFbeSUzWYMhpC8Tr7yQ3R8fG990QDhskkf1Q== + dependencies: + "@smithy/abort-controller" "^3.1.0" + "@smithy/protocol-http" "^4.0.2" + "@smithy/querystring-builder" "^3.0.2" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/property-provider@^3.1.1", "@smithy/property-provider@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.2.tgz#3da2802511078eae66240bcbeb8ef6f6102aeabf" + integrity sha512-Hzp32BpeFFexBpO1z+ts8okbq/VLzJBadxanJAo/Wf2CmvXMBp6Q/TLWr7Js6IbMEcr0pDZ02V3u1XZkuQUJaA== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^4.0.1", "@smithy/protocol-http@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.0.2.tgz#502ed3116cb0f1e3f207881df965bac620ccb2da" + integrity sha512-X/90xNWIOqSR2tLUyWxVIBdatpm35DrL44rI/xoeBWUuanE0iyCXJpTcnqlOpnEzgcu0xCKE06+g70TTu2j7RQ== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.2.tgz#ea0f9a6e2b85d62465b3cc0214e6b86eb7af7ab4" + integrity sha512-xhv1+HacDYsOLdNt7zW+8Fe779KYAzmWvzs9bC5NlKM8QGYCwwuFwDBynhlU4D5twgi2pZ14Lm4h6RiAazCtmA== + dependencies: + "@smithy/types" "^3.2.0" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.2.tgz#7b8edc661d0ee2c2e7e8a39b1022b00dfff2858e" + integrity sha512-C5hyRKgrZGPNh5QqIWzXnW+LXVrPmVQO0iJKjHeb5v3C61ZkP9QhrKmbfchcTyg/VnaE0tMNf/nmLpQlWuiqpg== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.2.tgz#ad7a0c8dfd482981a04d42fba24c7ee1ac2eb20b" + integrity sha512-cu0WV2XRttItsuXlcM0kq5MKdphbMMmSd2CXF122dJ75NrFE0o7rruXFGfxAp3BKzgF/DMxX+PllIA/cj4FHMw== + dependencies: + "@smithy/types" "^3.2.0" + +"@smithy/shared-ini-file-loader@^3.1.1", "@smithy/shared-ini-file-loader@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.2.tgz#b80f8b9b40841447219a95cb47f7a8f3f85b6467" + integrity sha512-tgnXrXbLMO8vo6VeuqabMw/eTzQHlLmZx0TC0TjtjJghnD0Xl4pEnJtBjTJr6XF5fHMNrt5BcczDXHJT9yNQnA== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.1.1.tgz#4882aacb3260a47b8279b2ffc6a135e03e225260" + integrity sha512-2/vlG86Sr489XX8TA/F+VDA+P04ESef04pSz0wRtlQBExcSPjqO08rvrkcas2zLnJ51i+7ukOURCkgqixBYjSQ== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/types" "^3.2.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-middleware" "^3.0.2" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^3.1.2", "@smithy/smithy-client@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.4.tgz#597a4b0d08c71ed7e66707df28871b8a3a707cce" + integrity sha512-y6xJROGrIoitjpwXLY7P9luDHvuT9jWpAluliuSFdBymFxcl6iyQjo9U/JhYfRHFNTruqsvKOrOESVuPGEcRmQ== + dependencies: + "@smithy/middleware-endpoint" "^3.0.3" + "@smithy/middleware-stack" "^3.0.2" + "@smithy/protocol-http" "^4.0.2" + "@smithy/types" "^3.2.0" + "@smithy/util-stream" "^3.0.4" + tslib "^2.6.2" + +"@smithy/types@^3.1.0", "@smithy/types@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.2.0.tgz#1350fe8a50d5e35e12ffb34be46d946860b2b5ab" + integrity sha512-cKyeKAPazZRVqm7QPvcPD2jEIt2wqDPAL1KJKb0f/5I7uhollvsWZuZKLclmyP6a+Jwmr3OV3t+X0pZUUHS9BA== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^3.0.1", "@smithy/url-parser@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.2.tgz#a4d6f364a28d2b11c14d9486041ea8eb4572fc66" + integrity sha512-pRiPHrgibeAr4avtXDoBHmTLtthwA4l8jKYRfZjNgp+bBPyxDMPRg2TMJaYxqbKemvrOkHu9MIBTv2RkdNfD6w== + dependencies: + "@smithy/querystring-parser" "^3.0.2" + "@smithy/types" "^3.2.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.4": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.6.tgz#4f6d9a8578d6ea131776757accdb9d636f06a6a1" + integrity sha512-tAgoc++Eq+KL7g55+k108pn7nAob3GLWNEMbXhZIQyBcBNaE/o3+r4AEbae0A8bWvLRvArVsjeiuhMykGa04/A== + dependencies: + "@smithy/property-provider" "^3.1.2" + "@smithy/smithy-client" "^3.1.4" + "@smithy/types" "^3.2.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.4": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.6.tgz#be733b8c84bf02d2b17803e755f51655e5f99115" + integrity sha512-UNerul6/E8aiCyFTBHk+RSIZCo7m96d/N5K3FeO/wFeZP6oy5HAicLzxqa85Wjv7MkXSxSySX29L/LwTV/QMag== + dependencies: + "@smithy/config-resolver" "^3.0.3" + "@smithy/credential-provider-imds" "^3.1.2" + "@smithy/node-config-provider" "^3.1.2" + "@smithy/property-provider" "^3.1.2" + "@smithy/smithy-client" "^3.1.4" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.3.tgz#480eee018b0bba6f53434444f11558d330b618d5" + integrity sha512-Dyi+pfLglDHSGsKSYunuUUSFM5V0tz7UDgv1Ex97yg+Xkn0Eb0rH0rcvl1n0MaJ11fac3HKDOH0DkALyQYCQag== + dependencies: + "@smithy/node-config-provider" "^3.1.2" + "@smithy/types" "^3.2.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.1", "@smithy/util-middleware@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.2.tgz#6daeb9db060552d851801cd7a0afd68769e2f98b" + integrity sha512-7WW5SD0XVrpfqljBYzS5rLR+EiDzl7wCVJZ9Lo6ChNFV4VYDk37Z1QI5w/LnYtU/QKnSawYoHRd7VjSyC8QRQQ== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/util-retry@^3.0.1", "@smithy/util-retry@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.2.tgz#073b4950f0379307e073a70afe086c52ec2b0329" + integrity sha512-HUVOb1k8p/IH6WFUjsLa+L9H1Zi/FAAB2CDOpWuffI1b2Txi6sknau8kNfC46Xrt39P1j2KDzCE1UlLa2eW5+A== + dependencies: + "@smithy/service-error-classification" "^3.0.2" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/util-stream@^3.0.2", "@smithy/util-stream@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.4.tgz#7a33a39754d8a0737f30687953d8dcc05810e907" + integrity sha512-CcMioiaOOsEVdb09pS7ux1ij7QcQ2jE/cE1+iin1DXMeRgAEQN/47m7Xztu7KFQuQsj0A5YwB2UN45q97CqKCg== + dependencies: + "@smithy/fetch-http-handler" "^3.1.0" + "@smithy/node-http-handler" "^3.1.0" + "@smithy/types" "^3.2.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.0.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.1.1.tgz#9defbb12eda75135dc6e347923b3a01a8ef4a256" + integrity sha512-xT+Bbpe5sSrC7cCWSElOreDdWzqovR1V+7xrp+fmwGAA+TPYBb78iasaXjO1pa+65sY6JjW5GtGeIoJwCK9B1g== + dependencies: + "@smithy/abort-controller" "^3.1.0" + "@smithy/types" "^3.2.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.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.8.tgz#45c26a2a5de26c3534a9504530ddb3b27ce031ac" + integrity sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA== + 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.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c" + integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== + +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.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5" + integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w== + 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.0" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" + integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== + 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.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + +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.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + 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.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.2.tgz#c26f023cb0054e657ce04f72583ea2d85f8d0507" + integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew== + +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 5b1eef838abeb1ce3966b5c28dac7117a0b2ad75 Mon Sep 17 00:00:00 2001 From: Chase Manning Date: Tue, 25 Jun 2024 15:52:37 +0100 Subject: [PATCH 0855/1590] add tlx finance fees --- fees/tlx-finance/index.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 fees/tlx-finance/index.ts diff --git a/fees/tlx-finance/index.ts b/fees/tlx-finance/index.ts new file mode 100644 index 0000000000..01b09b3325 --- /dev/null +++ b/fees/tlx-finance/index.ts @@ -0,0 +1,37 @@ +import { Adapter, FetchOptions } from "../../adapters/types"; +import { OPTIMISM } from "../../helpers/chains"; + +const STAKER = "0xc30877315f3b621a8f7bcda27819ec29429f3817"; +const DONATE_EVENT = + "event DonatedRewards(address indexed account, uint256 amount)"; + +const getFees = async (options: FetchOptions) => { + const { getToBlock, getFromBlock, getLogs } = options; + const [fromBlock, toBlock] = await Promise.all([ + getFromBlock(), + getToBlock(), + ]); + const logs = await getLogs({ + targets: [STAKER], + eventAbi: DONATE_EVENT, + fromBlock, + toBlock, + }); + const fees = logs.reduce((acc: any, log: any) => acc + Number(log.amount), 0); + return { + dailyFees: fees, + dailyRevenue: fees, + dailyHoldersRevenue: fees, + }; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [OPTIMISM]: { + fetch: getFees, + start: 1712727843, + }, + }, +}; +export default adapter; From 49a20e15468c374095fd6b5847a63570e0a08694 Mon Sep 17 00:00:00 2001 From: Chase Manning Date: Tue, 25 Jun 2024 16:09:39 +0100 Subject: [PATCH 0856/1590] handle decimal scale --- fees/tlx-finance/index.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/fees/tlx-finance/index.ts b/fees/tlx-finance/index.ts index 01b09b3325..d724cf6a32 100644 --- a/fees/tlx-finance/index.ts +++ b/fees/tlx-finance/index.ts @@ -1,3 +1,4 @@ +import BigNumber from "bignumber.js"; import { Adapter, FetchOptions } from "../../adapters/types"; import { OPTIMISM } from "../../helpers/chains"; @@ -14,14 +15,15 @@ const getFees = async (options: FetchOptions) => { const logs = await getLogs({ targets: [STAKER], eventAbi: DONATE_EVENT, - fromBlock, - toBlock, }); - const fees = logs.reduce((acc: any, log: any) => acc + Number(log.amount), 0); + const fees = logs + .reduce((acc: any, log: any) => acc.plus(log.amount), new BigNumber(0)) + .div(1e18); + return { - dailyFees: fees, - dailyRevenue: fees, - dailyHoldersRevenue: fees, + dailyFees: `${fees}`, + dailyRevenue: `${fees}`, + dailyHoldersRevenue: `${fees}`, }; }; From 54fcbb0d2bcddc5d09fab05fe8b5e114f3ba8512 Mon Sep 17 00:00:00 2001 From: Chase Manning Date: Tue, 25 Jun 2024 16:15:20 +0100 Subject: [PATCH 0857/1590] convert fees to usd value --- fees/tlx-finance/index.ts | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/fees/tlx-finance/index.ts b/fees/tlx-finance/index.ts index d724cf6a32..94a100c59f 100644 --- a/fees/tlx-finance/index.ts +++ b/fees/tlx-finance/index.ts @@ -6,19 +6,33 @@ const STAKER = "0xc30877315f3b621a8f7bcda27819ec29429f3817"; const DONATE_EVENT = "event DonatedRewards(address indexed account, uint256 amount)"; +const sUsdPrice = async (): Promise => { + const ID = "optimism:0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9"; + const ENDPOINT = `https://coins.llama.fi/prices/current/${ID}`; + const response = await fetch(ENDPOINT); + const data = await response.json(); + if (!data) throw new Error("no data"); + if (!data.coins) throw new Error("no data.coins"); + const priceData = data.coins[ID]; + if (!priceData) throw new Error("no priceData"); + const price = priceData.price; + if (!price) throw new Error("no price"); + if (price === 0) throw new Error("price is 0"); + return price; +}; + const getFees = async (options: FetchOptions) => { - const { getToBlock, getFromBlock, getLogs } = options; - const [fromBlock, toBlock] = await Promise.all([ - getFromBlock(), - getToBlock(), - ]); + const { getLogs } = options; const logs = await getLogs({ targets: [STAKER], eventAbi: DONATE_EVENT, }); - const fees = logs + const sUsdFees = logs .reduce((acc: any, log: any) => acc.plus(log.amount), new BigNumber(0)) - .div(1e18); + .div(1e18) + .toNumber(); + const susdPrice = await sUsdPrice(); + const fees = sUsdFees * susdPrice; return { dailyFees: `${fees}`, From 9401fe4249cd6fe59886df2608df7fac90597bf4 Mon Sep 17 00:00:00 2001 From: dtmkeng <0xgnek@gmail.com> Date: Tue, 25 Jun 2024 22:54:29 +0700 Subject: [PATCH 0858/1590] Delete yarn.lock --- yarn.lock | 2435 ----------------------------------------------------- 1 file changed, 2435 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 8b03dd5839..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2435 +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.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.600.0.tgz#3ce415d9257b8d1c8385bc26c6c86e6403aff83c" - integrity sha512-iYoKbJTputbf+ubkX6gSK/y/4uJEBRaXZ18jykLdBQ8UJuGrk2gqvV8h7OlGAhToCeysmmMqM0vDWyLt6lP8nw== - 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.600.0" - "@aws-sdk/client-sts" "3.600.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/credential-provider-node" "3.600.0" - "@aws-sdk/middleware-bucket-endpoint" "3.598.0" - "@aws-sdk/middleware-expect-continue" "3.598.0" - "@aws-sdk/middleware-flexible-checksums" "3.598.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-location-constraint" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-sdk-s3" "3.598.0" - "@aws-sdk/middleware-signing" "3.598.0" - "@aws-sdk/middleware-ssec" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/signature-v4-multi-region" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@aws-sdk/xml-builder" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/eventstream-serde-browser" "^3.0.2" - "@smithy/eventstream-serde-config-resolver" "^3.0.1" - "@smithy/eventstream-serde-node" "^3.0.2" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-blob-browser" "^3.1.0" - "@smithy/hash-node" "^3.0.1" - "@smithy/hash-stream-node" "^3.1.0" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/md5-js" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@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.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-stream" "^3.0.2" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.0.1" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.600.0": - version "3.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz#37966020af55a052822b9ef21adc38d2afcb0f34" - integrity sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sts" "3.600.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/credential-provider-node" "3.600.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-node" "^3.0.1" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@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.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-middleware" "^3.0.1" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz#aef58e198e504d3b3d1ba345355650a67d21facb" - integrity sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-node" "^3.0.1" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@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.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-middleware" "^3.0.1" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.600.0": - version "3.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz#8a437f8cf626cf652f99628105576213dbba48b2" - integrity sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.600.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/credential-provider-node" "3.600.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-node" "^3.0.1" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@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.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-middleware" "^3.0.1" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.598.0.tgz#82a069d703be0cafe3ddeacb1de51981ee4faa25" - integrity sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g== - dependencies: - "@smithy/core" "^2.2.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz#ea1f30cfc9948017dd0608518868d3f50074164f" - integrity sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz#58144440e698aef63b5cb459780325817c0acf10" - integrity sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/property-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/util-stream" "^3.0.2" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz#fd0ba8ab5c3701e05567d1c6f7752cfd9f4ba111" - integrity sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA== - dependencies: - "@aws-sdk/credential-provider-env" "3.598.0" - "@aws-sdk/credential-provider-http" "3.598.0" - "@aws-sdk/credential-provider-process" "3.598.0" - "@aws-sdk/credential-provider-sso" "3.598.0" - "@aws-sdk/credential-provider-web-identity" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/credential-provider-imds" "^3.1.1" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.600.0": - version "3.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz#33b32364972bd7167d000cdded92b9398346a3ca" - integrity sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw== - dependencies: - "@aws-sdk/credential-provider-env" "3.598.0" - "@aws-sdk/credential-provider-http" "3.598.0" - "@aws-sdk/credential-provider-ini" "3.598.0" - "@aws-sdk/credential-provider-process" "3.598.0" - "@aws-sdk/credential-provider-sso" "3.598.0" - "@aws-sdk/credential-provider-web-identity" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/credential-provider-imds" "^3.1.1" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz#f48ff6f964cd6726499b207f45bfecda4be922ce" - integrity sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz#52781e2b60b1f61752829c44a5e0b9fedd0694d6" - integrity sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA== - dependencies: - "@aws-sdk/client-sso" "3.598.0" - "@aws-sdk/token-providers" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz#d737e9c2b7c4460b8e31a55b4979bf4d88913900" - integrity sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.598.0.tgz#033b08921f9f284483a7337ed165743ee0dc598d" - integrity sha512-PM7BcFfGUSkmkT6+LU9TyJiB4S8yI7dfuKQDwK5ZR3P7MKaK4Uj4yyDiv0oe5xvkF6+O2+rShj+eh8YuWkOZ/Q== - dependencies: - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.598.0.tgz#5b08b8cae70d1e7cc082d3627b31856f6ba20d17" - integrity sha512-ZuHW18kaeHR8TQyhEOYMr8VwiIh0bMvF7J1OTqXHxDteQIavJWA3CbfZ9sgS4XGtrBZDyHJhjZKeCfLhN2rq3w== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.598.0.tgz#8e40734d5fb1b116816f885885f16db9b5e39032" - integrity sha512-xukAzds0GQXvMEY9G6qt+CzwVzTx8NyKKh04O2Q+nOch6QQ8Rs+2kTRy3Z4wQmXq2pK9hlOWb5nXA7HWpmz6Ng== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@aws-crypto/crc32c" "5.2.0" - "@aws-sdk/types" "3.598.0" - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz#0a7c4d5a95657bea2d7c4e29b9a8b379952d09b1" - integrity sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.598.0.tgz#45564d5119468e3ac97949431c249e8b6e00ec09" - integrity sha512-8oybQxN3F1ISOMULk7JKJz5DuAm5hCUcxMW9noWShbxTJuStNvuHf/WLUzXrf8oSITyYzIHPtf8VPlKR7I3orQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz#0c0692d2f4f9007c915734ab319db377ca9a3b1b" - integrity sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz#94015d41f8174bd41298fd13f8fb0a8c4576d7c8" - integrity sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.598.0.tgz#308604f8a38959ad65ec5674c643c7032d678f43" - integrity sha512-5AGtLAh9wyK6ANPYfaKTqJY1IFJyePIxsEbxa7zS6REheAqyVmgJFaGu3oQ5XlxfGr5Uq59tFTRkyx26G1HkHA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.598.0.tgz#b90eef6a9fe3f76777c9cd4890dcae8e1febd249" - integrity sha512-XKb05DYx/aBPqz6iCapsCbIl8aD8EihTuPCs51p75QsVfbQoVr4TlFfIl5AooMSITzojdAQqxt021YtvxjtxIQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/types" "^3.1.0" - "@smithy/util-middleware" "^3.0.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.598.0.tgz#d6a3c64ce77bd7379653b46b58ded32a7b0fe6f4" - integrity sha512-f0p2xP8IC1uJ5e/tND1l81QxRtRFywEdnbtKCE0H6RSn4UIt2W3Dohe1qQDbnh27okF0PkNW6BJGdSAz3p7qbA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz#6fa26849d256434ca4884c42c1c4755aa2f1556e" - integrity sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg== - dependencies: - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz#fd8fd6b7bc11b5f81def4db0db9e835d40a8f86e" - integrity sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.1" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.598.0.tgz#1716022e31dcbc5821aeca85204718f523a1ddbf" - integrity sha512-1r/EyTrO1gSa1FirnR8V7mabr7gk+l+HkyTI0fcTSr8ucB7gmYyW6WjkY8JCz13VYHFK62usCEDS7yoJoJOzTA== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz#49a94c14ce2e392bb0e84b69986c33ecfad5b804" - integrity sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.598.0", "@aws-sdk/types@^3.222.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.598.0.tgz#b840d2446dee19a2a4731e6166f2327915d846db" - integrity sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ== - dependencies: - "@smithy/types" "^3.1.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.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz#7f78d68524babac7fdacf381590470353d45b959" - integrity sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - "@smithy/util-endpoints" "^2.0.2" - 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.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz#5039d0335f8a06af5be73c960df85009dda59090" - integrity sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz#f9bdf1b7cc3a40787c379f7c2ff028de2612c177" - integrity sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/xml-builder@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.598.0.tgz#ee591c5d80a34d9c5bc14326f1a62e9a0649c587" - integrity sha512-ZIa2RK7CHFTZ4gwK77WRtsZ6vF7xwRXxJ8KQIxK2duhoTVcn0xYxpFLdW9WZZZvdP9GIF3Loqvf8DRdeU5Jc7Q== - dependencies: - "@smithy/types" "^3.1.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.71" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.71.tgz#948a63441957c8844347d32470489b7b6c7b05c8" - integrity sha512-5hZ8TdYIrFa/f4hxb2ADzARmXxeuG5P8yukuQwNbiO8EnLcrDNPKwv5JXNaslWkMexlaeVy1m+EMLnTlbzeQSw== - 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.6.1" - resolved "https://registry.yarnpkg.com/@elastic/transport/-/transport-8.6.1.tgz#54954f7fd9d6f121471c1a437e59dc1edeb079aa" - integrity sha512-3vGs4W3wP5oeIT/4j1vcvd+t7m6ndP0uyb5GDY23LQCmbtI5Oq0aQwD9gb09KJbLFLUbI7db9vMFPzKavSFA5g== - dependencies: - 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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.0.tgz#408fbc0da13c30bc0aac859a44be08a5ba18126a" - integrity sha512-XOm4LkuC0PsK1sf2bBJLIlskn5ghmVxiEBVlo/jg0R8hxASBKYYgOoJEhKWgOr4vWGkN+5rC+oyBAqHYtxjnwQ== - dependencies: - "@smithy/types" "^3.2.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.2", "@smithy/config-resolver@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.3.tgz#104106363fbaf6bac61905727f7e2c39c62f3e94" - integrity sha512-4wHqCMkdfVDP4qmr4fVPYOFOH+vKhOv3X4e6KEU9wIC8xXUQ24tnF4CW+sddGDX1zU86GGyQ7A+rg2xmUD6jpQ== - dependencies: - "@smithy/node-config-provider" "^3.1.2" - "@smithy/types" "^3.2.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.2" - tslib "^2.6.2" - -"@smithy/core@^2.2.1": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.2.3.tgz#dc6ba7d338a1b35752be274cdaf6fcbcfdb44a70" - integrity sha512-SpyLOL2vgE6sUYM6nQfu82OirCPkCDKctyG3aMgjMlDPTJpUlmlNH0ttu9ZWwzEjrzzr8uABmPjJTRI7gk1HFQ== - dependencies: - "@smithy/middleware-endpoint" "^3.0.3" - "@smithy/middleware-retry" "^3.0.6" - "@smithy/middleware-serde" "^3.0.2" - "@smithy/protocol-http" "^4.0.2" - "@smithy/smithy-client" "^3.1.4" - "@smithy/types" "^3.2.0" - "@smithy/util-middleware" "^3.0.2" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.1.1", "@smithy/credential-provider-imds@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.2.tgz#7e84199a8cd8ff7121c0a2f95f7822dc09cc283f" - integrity sha512-gqVmUaNoeqyrOAjgZg+rTmFLsphh/vS59LCMdFfVpthVS0jbfBzvBmEPktBd+y9ME4DYMGHFAMSYJDK8q0noOQ== - dependencies: - "@smithy/node-config-provider" "^3.1.2" - "@smithy/property-provider" "^3.1.2" - "@smithy/types" "^3.2.0" - "@smithy/url-parser" "^3.0.2" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.1.tgz#b47f30bf4ad791ac7981b9fff58e599d18269cf9" - integrity sha512-s29NxV/ng1KXn6wPQ4qzJuQDjEtxLdS0+g5PQFirIeIZrp66FXVJ5IpZRowbt/42zB5dY8TqJ0G0L9KkgtsEZg== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^3.2.0" - "@smithy/util-hex-encoding" "^3.0.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^3.0.2": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.3.tgz#223267a9e46336aff2bebbc386eb6e62146d1fef" - integrity sha512-ZXKmNAHl6SWKYuVmtoEc/hBQ7Nym/rbAx2SrqoJHn0i9QopIP7fG1AWmoFIeS5R3/VL6AwUIZMR0g8qnjjVRRA== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.3" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.2.tgz#6238eadae0c060133c61783fd92d8b1ee1e6f99f" - integrity sha512-QbE3asvvBUZr7PwbOaxkSfKDjTAmWZkqh2G7pkYlD4jRkT1Y9nufeyu0OBPlLoF4+gl3YMpSVO7TESe8bVkD+g== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^3.0.2": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.3.tgz#51df0ca39f453d78a3d6607c1ac2e96cf900c824" - integrity sha512-v61Ftn7x/ubWFqH7GHFAL/RaU7QZImTbuV95DYugYYItzpO7KaHYEuO8EskCaBpZEfzOxhUGKm4teS9YUSt69Q== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.3" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.3.tgz#2ecac479ba84e10221b4b70545f3d7a223b5345e" - integrity sha512-YXYt3Cjhu9tRrahbTec2uOjwOSeCNfQurcWPGNEUspBhqHoA3KrDrVj+jGbCLWvwkwhzqDnnaeHAxm+IxAjOAQ== - dependencies: - "@smithy/eventstream-codec" "^3.1.1" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^3.0.2", "@smithy/fetch-http-handler@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.1.0.tgz#993d47577c7b86eb5796cd29f8301beafa2cf471" - integrity sha512-s7oQjEOUH9TYjctpITtWF4qxOdg7pBrP9eigEQ8SBsxF3dRFV0S28pGMllC83DUr7ECmErhO/BUwnULfoNhKgQ== - dependencies: - "@smithy/protocol-http" "^4.0.2" - "@smithy/querystring-builder" "^3.0.2" - "@smithy/types" "^3.2.0" - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.1.tgz#758b4de6cf75b515cf36c18c4d101a833976c83f" - integrity sha512-8RwdPG7arvL5pfMAFsH6jfBVcC7MDR1LYHjKevZPHREkVtORIQkRfm2K8px7giJt7x0zzQJnWamrsDM4ig8nTQ== - dependencies: - "@smithy/chunked-blob-reader" "^3.0.0" - "@smithy/chunked-blob-reader-native" "^3.0.0" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/hash-node@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.2.tgz#8d1306f3b372e42dc76ae85fd979f7252aea476c" - integrity sha512-43uGA6o6QJQdXwAogybdTDHDd3SCdKyoiHIHb8PpdE2rKmVicjG9b1UgVwdgO8QPytmVqHFaUw27M3LZKwu8Yg== - dependencies: - "@smithy/types" "^3.2.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.1.tgz#ca288961879730a0203b60b4383e2455d015f2ac" - integrity sha512-+uvJHPrFNE9crkh3INVS9FmDcx1DoywDgIzlRWlPy7gqoD8jG14os9ATIFY7wN/ARPz1EWlkCHUap70oXxMmjA== - dependencies: - "@smithy/types" "^3.2.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.2.tgz#e455169d86e96e73ebf2bb1728b7d2e2850bdc01" - integrity sha512-+BAY3fMhomtq470tswXyrdVBSUhiLuhBVT+rOmpbz5e04YX+s1dX4NxTLzZGwBjCpeWZNtTxP8zbIvvFk81gUg== - dependencies: - "@smithy/types" "^3.2.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.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.2.tgz#dec2124a81beb83700b68390d1378010346b8541" - integrity sha512-WlSK9br7fkVucTkCXporwuOttCR3cJ1GV70J8ENYXGNc0nUTPzMdWCyHztgnbbKoekVMjGZOEu+8I52nOdzqwQ== - dependencies: - "@smithy/types" "^3.2.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.2.tgz#fc69a5b3a46310a798e4c804ef47dbe11ad2045f" - integrity sha512-/Havz3PkYIEmwpqkyRTR21yJsWnFbD1ec4H1pUL+TkDnE7RCQkAVUQepLL/UeCaZeCBXvfdoKbOjSbV01xIinQ== - dependencies: - "@smithy/protocol-http" "^4.0.2" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.0.2", "@smithy/middleware-endpoint@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.3.tgz#bbfdd0f35668af392c5031ca2735c31760740bc6" - integrity sha512-ARAXHodhj4tttKa9y75zvENdSoHq6VGsSi7XS3+yLutrnxttJs6N10UMInCC1yi3/bopT8xug3iOP/y9R6sKJQ== - dependencies: - "@smithy/middleware-serde" "^3.0.2" - "@smithy/node-config-provider" "^3.1.2" - "@smithy/shared-ini-file-loader" "^3.1.2" - "@smithy/types" "^3.2.0" - "@smithy/url-parser" "^3.0.2" - "@smithy/util-middleware" "^3.0.2" - tslib "^2.6.2" - -"@smithy/middleware-retry@^3.0.4", "@smithy/middleware-retry@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.6.tgz#ace955263cea4ef6acf1e0e42192be62e20ab558" - integrity sha512-ICsFKp8eAyIMmxN5UT3IU37S6886L879TKtgxPsn/VD/laYNwqTLmJaCAn5//+2fRIrV0dnHp6LFlMwdXlWoUQ== - dependencies: - "@smithy/node-config-provider" "^3.1.2" - "@smithy/protocol-http" "^4.0.2" - "@smithy/service-error-classification" "^3.0.2" - "@smithy/smithy-client" "^3.1.4" - "@smithy/types" "^3.2.0" - "@smithy/util-middleware" "^3.0.2" - "@smithy/util-retry" "^3.0.2" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^3.0.1", "@smithy/middleware-serde@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.2.tgz#3ec15a7991c2b066cced5989aba7f81fed4dfb87" - integrity sha512-oT2abV5zLhBucJe1LIIFEcRgIBDbZpziuMPswTMbBQNcaEUycLFvX63zsFmqfwG+/ZQKsNx+BSE8W51CMuK7Yw== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^3.0.1", "@smithy/middleware-stack@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.2.tgz#82610681a7f5986bfb3229df98ca1e050b667660" - integrity sha512-6fRcxomlNKBPIy/YjcnC7YHpMAjRvGUYlYVJAfELqZjkW0vQegNcImjY7T1HgYA6u3pAcCxKVBLYnkTw8z/l0A== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^3.1.1", "@smithy/node-config-provider@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.2.tgz#3e739ae02520f2249f6c50197feee6e38125fb1d" - integrity sha512-388fEAa7+6ORj/BDC70peg3fyFBTTXJyXfXJ0Bwd6FYsRltePr2oGzIcm5AuC1WUSLtZ/dF+hYOnfTMs04rLvA== - dependencies: - "@smithy/property-provider" "^3.1.2" - "@smithy/shared-ini-file-loader" "^3.1.2" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^3.0.1", "@smithy/node-http-handler@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.0.tgz#0f37b2c379b1cd85be125234575e7c5129dbed67" - integrity sha512-pOpgB6B+VLXLwAyyvRz+ZAVXABlbAsJ2xvn3WZvrppAPImxwQOPFbeSUzWYMhpC8Tr7yQ3R8fG990QDhskkf1Q== - dependencies: - "@smithy/abort-controller" "^3.1.0" - "@smithy/protocol-http" "^4.0.2" - "@smithy/querystring-builder" "^3.0.2" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/property-provider@^3.1.1", "@smithy/property-provider@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.2.tgz#3da2802511078eae66240bcbeb8ef6f6102aeabf" - integrity sha512-Hzp32BpeFFexBpO1z+ts8okbq/VLzJBadxanJAo/Wf2CmvXMBp6Q/TLWr7Js6IbMEcr0pDZ02V3u1XZkuQUJaA== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^4.0.1", "@smithy/protocol-http@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.0.2.tgz#502ed3116cb0f1e3f207881df965bac620ccb2da" - integrity sha512-X/90xNWIOqSR2tLUyWxVIBdatpm35DrL44rI/xoeBWUuanE0iyCXJpTcnqlOpnEzgcu0xCKE06+g70TTu2j7RQ== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.2.tgz#ea0f9a6e2b85d62465b3cc0214e6b86eb7af7ab4" - integrity sha512-xhv1+HacDYsOLdNt7zW+8Fe779KYAzmWvzs9bC5NlKM8QGYCwwuFwDBynhlU4D5twgi2pZ14Lm4h6RiAazCtmA== - dependencies: - "@smithy/types" "^3.2.0" - "@smithy/util-uri-escape" "^3.0.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.2.tgz#7b8edc661d0ee2c2e7e8a39b1022b00dfff2858e" - integrity sha512-C5hyRKgrZGPNh5QqIWzXnW+LXVrPmVQO0iJKjHeb5v3C61ZkP9QhrKmbfchcTyg/VnaE0tMNf/nmLpQlWuiqpg== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.2.tgz#ad7a0c8dfd482981a04d42fba24c7ee1ac2eb20b" - integrity sha512-cu0WV2XRttItsuXlcM0kq5MKdphbMMmSd2CXF122dJ75NrFE0o7rruXFGfxAp3BKzgF/DMxX+PllIA/cj4FHMw== - dependencies: - "@smithy/types" "^3.2.0" - -"@smithy/shared-ini-file-loader@^3.1.1", "@smithy/shared-ini-file-loader@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.2.tgz#b80f8b9b40841447219a95cb47f7a8f3f85b6467" - integrity sha512-tgnXrXbLMO8vo6VeuqabMw/eTzQHlLmZx0TC0TjtjJghnD0Xl4pEnJtBjTJr6XF5fHMNrt5BcczDXHJT9yNQnA== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.1.1.tgz#4882aacb3260a47b8279b2ffc6a135e03e225260" - integrity sha512-2/vlG86Sr489XX8TA/F+VDA+P04ESef04pSz0wRtlQBExcSPjqO08rvrkcas2zLnJ51i+7ukOURCkgqixBYjSQ== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/types" "^3.2.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.2" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^3.1.2", "@smithy/smithy-client@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.4.tgz#597a4b0d08c71ed7e66707df28871b8a3a707cce" - integrity sha512-y6xJROGrIoitjpwXLY7P9luDHvuT9jWpAluliuSFdBymFxcl6iyQjo9U/JhYfRHFNTruqsvKOrOESVuPGEcRmQ== - dependencies: - "@smithy/middleware-endpoint" "^3.0.3" - "@smithy/middleware-stack" "^3.0.2" - "@smithy/protocol-http" "^4.0.2" - "@smithy/types" "^3.2.0" - "@smithy/util-stream" "^3.0.4" - tslib "^2.6.2" - -"@smithy/types@^3.1.0", "@smithy/types@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.2.0.tgz#1350fe8a50d5e35e12ffb34be46d946860b2b5ab" - integrity sha512-cKyeKAPazZRVqm7QPvcPD2jEIt2wqDPAL1KJKb0f/5I7uhollvsWZuZKLclmyP6a+Jwmr3OV3t+X0pZUUHS9BA== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^3.0.1", "@smithy/url-parser@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.2.tgz#a4d6f364a28d2b11c14d9486041ea8eb4572fc66" - integrity sha512-pRiPHrgibeAr4avtXDoBHmTLtthwA4l8jKYRfZjNgp+bBPyxDMPRg2TMJaYxqbKemvrOkHu9MIBTv2RkdNfD6w== - dependencies: - "@smithy/querystring-parser" "^3.0.2" - "@smithy/types" "^3.2.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.4": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.6.tgz#4f6d9a8578d6ea131776757accdb9d636f06a6a1" - integrity sha512-tAgoc++Eq+KL7g55+k108pn7nAob3GLWNEMbXhZIQyBcBNaE/o3+r4AEbae0A8bWvLRvArVsjeiuhMykGa04/A== - dependencies: - "@smithy/property-provider" "^3.1.2" - "@smithy/smithy-client" "^3.1.4" - "@smithy/types" "^3.2.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.4": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.6.tgz#be733b8c84bf02d2b17803e755f51655e5f99115" - integrity sha512-UNerul6/E8aiCyFTBHk+RSIZCo7m96d/N5K3FeO/wFeZP6oy5HAicLzxqa85Wjv7MkXSxSySX29L/LwTV/QMag== - dependencies: - "@smithy/config-resolver" "^3.0.3" - "@smithy/credential-provider-imds" "^3.1.2" - "@smithy/node-config-provider" "^3.1.2" - "@smithy/property-provider" "^3.1.2" - "@smithy/smithy-client" "^3.1.4" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.3.tgz#480eee018b0bba6f53434444f11558d330b618d5" - integrity sha512-Dyi+pfLglDHSGsKSYunuUUSFM5V0tz7UDgv1Ex97yg+Xkn0Eb0rH0rcvl1n0MaJ11fac3HKDOH0DkALyQYCQag== - dependencies: - "@smithy/node-config-provider" "^3.1.2" - "@smithy/types" "^3.2.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.1", "@smithy/util-middleware@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.2.tgz#6daeb9db060552d851801cd7a0afd68769e2f98b" - integrity sha512-7WW5SD0XVrpfqljBYzS5rLR+EiDzl7wCVJZ9Lo6ChNFV4VYDk37Z1QI5w/LnYtU/QKnSawYoHRd7VjSyC8QRQQ== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/util-retry@^3.0.1", "@smithy/util-retry@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.2.tgz#073b4950f0379307e073a70afe086c52ec2b0329" - integrity sha512-HUVOb1k8p/IH6WFUjsLa+L9H1Zi/FAAB2CDOpWuffI1b2Txi6sknau8kNfC46Xrt39P1j2KDzCE1UlLa2eW5+A== - dependencies: - "@smithy/service-error-classification" "^3.0.2" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/util-stream@^3.0.2", "@smithy/util-stream@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.4.tgz#7a33a39754d8a0737f30687953d8dcc05810e907" - integrity sha512-CcMioiaOOsEVdb09pS7ux1ij7QcQ2jE/cE1+iin1DXMeRgAEQN/47m7Xztu7KFQuQsj0A5YwB2UN45q97CqKCg== - dependencies: - "@smithy/fetch-http-handler" "^3.1.0" - "@smithy/node-http-handler" "^3.1.0" - "@smithy/types" "^3.2.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.0.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.1.1.tgz#9defbb12eda75135dc6e347923b3a01a8ef4a256" - integrity sha512-xT+Bbpe5sSrC7cCWSElOreDdWzqovR1V+7xrp+fmwGAA+TPYBb78iasaXjO1pa+65sY6JjW5GtGeIoJwCK9B1g== - dependencies: - "@smithy/abort-controller" "^3.1.0" - "@smithy/types" "^3.2.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.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.8.tgz#45c26a2a5de26c3534a9504530ddb3b27ce031ac" - integrity sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA== - 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.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c" - integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== - -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.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5" - integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w== - 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.0" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" - integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== - 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.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== - -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.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - 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.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.2.tgz#c26f023cb0054e657ce04f72583ea2d85f8d0507" - integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew== - -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 ee2aeebb5d40589f9ce0aee1caad15c49a897fb4 Mon Sep 17 00:00:00 2001 From: Chase Manning Date: Tue, 25 Jun 2024 16:57:09 +0100 Subject: [PATCH 0859/1590] add tlx-finance volume --- dexs/tlx-finance/index.ts | 100 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 dexs/tlx-finance/index.ts diff --git a/dexs/tlx-finance/index.ts b/dexs/tlx-finance/index.ts new file mode 100644 index 0000000000..3a30630df3 --- /dev/null +++ b/dexs/tlx-finance/index.ts @@ -0,0 +1,100 @@ +import BigNumber from "bignumber.js"; +import { + FetchGetLogsOptions, + FetchOptions, + FetchResultV2, + SimpleAdapter, +} from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { ChainApi } from "@defillama/sdk"; + +const FACTORY = "0x5Dd85f51e9fD6aDE8ecc216C07919ecD443eB14d"; + +const MINT_EVENT = + "event Minted(address indexed account, uint256 leveragedTokenAmount, uint256 baseAssetAmount)"; +const REDEEM_EVENT = + "event Redeemed(address indexed account, uint256 leveragedTokenAmount, uint256 baseAssetAmount)"; + +const fetchSUsdPrice = async (): Promise => { + const ID = "optimism:0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9"; + const ENDPOINT = `https://coins.llama.fi/prices/current/${ID}`; + const response = await fetch(ENDPOINT); + const data = await response.json(); + if (!data) throw new Error("no data"); + if (!data.coins) throw new Error("no data.coins"); + const priceData = data.coins[ID]; + if (!priceData) throw new Error("no priceData"); + const price = priceData.price; + if (!price) throw new Error("no price"); + if (price === 0) throw new Error("price is 0"); + return price; +}; + +const fetchLeveragedTokenVolume = async ( + getLogs: (params: FetchGetLogsOptions) => Promise, + toApi: ChainApi, + token: string +): Promise => { + const targetLeverage = await toApi.call({ + target: token, + abi: "function targetLeverage() view returns (uint256)", + params: [], + }); + const mints: any[] = await getLogs({ + targets: [token], + eventAbi: MINT_EVENT, + }); + const sUsdMintVolume = mints + .reduce( + (acc: any, log: any) => acc.plus(log.baseAssetAmount), + new BigNumber(0) + ) + .times(targetLeverage) + .div(1e18) + .div(1e18) + .toNumber(); + const redeems: any[] = await getLogs({ + targets: [token], + eventAbi: REDEEM_EVENT, + }); + const sUsdRedeemVolume = redeems + .reduce( + (acc: any, log: any) => acc.plus(log.baseAssetAmount), + new BigNumber(0) + ) + .times(targetLeverage) + .div(1e18) + .div(1e18) + .toNumber(); + return sUsdMintVolume + sUsdRedeemVolume; +}; + +const fetchVolume = async (options: FetchOptions): Promise => { + const { getLogs, toApi } = options; + let sUsddailyVolume = 0; + const allTokens = await toApi.call({ + target: FACTORY, + abi: "function allTokens() view returns (address[] memory)", + params: [], + }); + for (const token of allTokens) { + const volume = await fetchLeveragedTokenVolume(getLogs, toApi, token); + sUsddailyVolume += volume; + } + + const sUsdPrice = await fetchSUsdPrice(); + const dailyVolume = sUsddailyVolume * sUsdPrice; + + return { dailyVolume }; +}; +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.OPTIMISM]: { + fetch: fetchVolume, + start: 1715656337, + }, + }, +}; + +export default adapter; From cad58afc2c08a385b9179f226a092bc522c9f11d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 25 Jun 2024 16:31:50 +0000 Subject: [PATCH 0860/1590] fixtlx-finance --- fees/tlx-finance/index.ts | 36 +++++++++--------------------------- 1 file changed, 9 insertions(+), 27 deletions(-) diff --git a/fees/tlx-finance/index.ts b/fees/tlx-finance/index.ts index 94a100c59f..1923b5b788 100644 --- a/fees/tlx-finance/index.ts +++ b/fees/tlx-finance/index.ts @@ -1,25 +1,9 @@ -import BigNumber from "bignumber.js"; import { Adapter, FetchOptions } from "../../adapters/types"; import { OPTIMISM } from "../../helpers/chains"; const STAKER = "0xc30877315f3b621a8f7bcda27819ec29429f3817"; -const DONATE_EVENT = - "event DonatedRewards(address indexed account, uint256 amount)"; - -const sUsdPrice = async (): Promise => { - const ID = "optimism:0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9"; - const ENDPOINT = `https://coins.llama.fi/prices/current/${ID}`; - const response = await fetch(ENDPOINT); - const data = await response.json(); - if (!data) throw new Error("no data"); - if (!data.coins) throw new Error("no data.coins"); - const priceData = data.coins[ID]; - if (!priceData) throw new Error("no priceData"); - const price = priceData.price; - if (!price) throw new Error("no price"); - if (price === 0) throw new Error("price is 0"); - return price; -}; +const DONATE_EVENT = "event DonatedRewards(address indexed account, uint256 amount)"; +const token = "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9" const getFees = async (options: FetchOptions) => { const { getLogs } = options; @@ -27,17 +11,15 @@ const getFees = async (options: FetchOptions) => { targets: [STAKER], eventAbi: DONATE_EVENT, }); - const sUsdFees = logs - .reduce((acc: any, log: any) => acc.plus(log.amount), new BigNumber(0)) - .div(1e18) - .toNumber(); - const susdPrice = await sUsdPrice(); - const fees = sUsdFees * susdPrice; + const dailyFees = options.createBalances(); + logs.forEach((log) => { + dailyFees.add(token, log.amount); + }) return { - dailyFees: `${fees}`, - dailyRevenue: `${fees}`, - dailyHoldersRevenue: `${fees}`, + dailyFees: dailyFees, + dailyRevenue: dailyFees, + dailyHoldersRevenue: dailyFees, }; }; From 0f7fb3ced6833620305ba95a055c21600184a289 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 25 Jun 2024 17:06:00 +0000 Subject: [PATCH 0861/1590] add moonshot --- fees/moonshot.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 fees/moonshot.ts diff --git a/fees/moonshot.ts b/fees/moonshot.ts new file mode 100644 index 0000000000..12295f653e --- /dev/null +++ b/fees/moonshot.ts @@ -0,0 +1,29 @@ +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("3521814", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: '3udvfL24waJcLhskRAsStNMoNUvtyXdxrWQz4hgi953N' + })); + 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; From dd6feeb67cad9a3de1e702d6220720c888392bfb Mon Sep 17 00:00:00 2001 From: perpie-papa <141109279+perpie-papa@users.noreply.github.com> Date: Wed, 26 Jun 2024 06:28:11 +0300 Subject: [PATCH 0862/1590] Add 0 default --- 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 9a9f960e38..3707b1da23 100644 --- a/aggregator-derivatives/perpie/index.ts +++ b/aggregator-derivatives/perpie/index.ts @@ -43,10 +43,10 @@ const fetchVolumeAndFees: (chain: string) => FetchV2 = )[0] as StatRow; return { - dailyVolume: data.volume_24hr, - totalVolume: data.total_volume, - dailyRevenue: data.fees_24hr, - totalRevenue: data.total_fees, + dailyVolume: data.volume_24hr || 0, + totalVolume: data.total_volume || 0, + dailyRevenue: data.fees_24hr || 0, + totalRevenue: data.total_fees || 0, timestamp: dayStartOfDayTimestamp, }; }; From bb5e8b802b045fa8ef487d36c6ccfac443e13f95 Mon Sep 17 00:00:00 2001 From: Aaron Choo Date: Wed, 26 Jun 2024 11:47:04 +0800 Subject: [PATCH 0863/1590] feat: add hallswap aggregator volume --- aggregators/hallswap/index.ts | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 aggregators/hallswap/index.ts diff --git a/aggregators/hallswap/index.ts b/aggregators/hallswap/index.ts new file mode 100644 index 0000000000..31dcc6182b --- /dev/null +++ b/aggregators/hallswap/index.ts @@ -0,0 +1,57 @@ +import fetchURL from "../../utils/fetchURL"; +import { FetchV2, SimpleAdapter } from "../../adapters/types"; + +// Main API url to hit +const API_URL = "https://api.seer.coinhall.org/api/hallswap/metrics"; +// The first launch of Hallswap (1st December 2021) +const START_TIMESTAMP = 1638316800; +// Map of the chain names used by defillama to the chain names used by hallswap +const CHAINS = { + archway: "archway", + chihuahua: "chihuahua", + dymension: "dymension", + injective: "injective", + juno: "juno", + kujira: "kujira", + migaloo: "migaloo", + neutron: "neutron", + orai: "oraichain", + osmosis: "osmosis", + sei: "sei", + solana: "solana", + terra: "terraclassic", + terra2: "terra", +} as const; +// Number of milliseconds in a day (24 hours) +const DAY_IN_MILLIS = 86_400_000; + +const fetch = + (chain: string): FetchV2 => + async (options) => { + const timestampMillis = options.toTimestamp * 1_000; + const dayBeforeMillis = timestampMillis - DAY_IN_MILLIS; + const dailyVolume = await fetchURL( + `${API_URL}?chains=${chain}&from=${dayBeforeMillis}&to=${timestampMillis}` + ); + const totalVolume = await fetchURL( + `${API_URL}?chains=${chain}&to=${timestampMillis}` + ); + return { + dailyVolume: dailyVolume[chain], + totalVolume: totalVolume[chain], + timestamp: options.toTimestamp, + }; + }; + +const adapter: SimpleAdapter = { + version: 2, + adapter: {}, +}; +for (const [defillamaChain, hallswapChain] of Object.entries(CHAINS)) { + adapter.adapter[defillamaChain] = { + fetch: fetch(hallswapChain), + start: START_TIMESTAMP, + }; +} + +export default adapter; From 3be51ed35c2484a2c248be87d29b38b57d92318e Mon Sep 17 00:00:00 2001 From: FlowX Dev Date: Wed, 26 Jun 2024 11:55:47 +0700 Subject: [PATCH 0864/1590] Init: FlowX Aggregator --- aggregators/flowx-aggregator/index.ts | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 aggregators/flowx-aggregator/index.ts diff --git a/aggregators/flowx-aggregator/index.ts b/aggregators/flowx-aggregator/index.ts new file mode 100644 index 0000000000..2c24a9c8c6 --- /dev/null +++ b/aggregators/flowx-aggregator/index.ts @@ -0,0 +1,29 @@ +import { CHAIN } from "../../helpers/chains"; +import { httpGet, httpPost } from "../../utils/fetchURL"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const fetchVolume = async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + + const res = await httpGet( + `https://flowx-finance-mono.vercel.app/api/defillama/aggregator-vol?startTimestamp=${dayTimestamp}&endTimestamp=${dayTimestamp}` + ); + + const record = res[0]; + + return { + dailyVolume: record.totalUSD, + timestamp: record.timestamp, + }; +}; + +const adapter: any = { + adapter: { + [CHAIN.SUI]: { + fetch: fetchVolume, + start: 1717200000, + }, + }, +}; + +export default adapter; From 59f40c0990ef1fc61d2e93bedad193a50258e5d6 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 26 Jun 2024 11:12:08 +0000 Subject: [PATCH 0865/1590] set isExpensiveAdapter --- aggregator-derivatives/perpie/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/aggregator-derivatives/perpie/index.ts b/aggregator-derivatives/perpie/index.ts index 3707b1da23..e7cf224084 100644 --- a/aggregator-derivatives/perpie/index.ts +++ b/aggregator-derivatives/perpie/index.ts @@ -59,6 +59,7 @@ const fetchAll: (chain: string) => FetchV2 = }; const adapter: BreakdownAdapter = { version: 2, + isExpensiveAdapter: true, breakdown: { derivatives: { ...Object.values(chainsMap).reduce((acc, chain) => { From b1a07431a701379d776c68d361d05128bc8322b7 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 26 Jun 2024 11:12:54 +0000 Subject: [PATCH 0866/1590] remove not use --- aggregator-derivatives/perpie/index.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/aggregator-derivatives/perpie/index.ts b/aggregator-derivatives/perpie/index.ts index e7cf224084..e14a3578f1 100644 --- a/aggregator-derivatives/perpie/index.ts +++ b/aggregator-derivatives/perpie/index.ts @@ -1,21 +1,15 @@ -import { postURL } from "../../utils/fetchURL"; import { BreakdownAdapter, FetchOptions, FetchResult, FetchResultV2, - FetchV2, - SimpleAdapter, + FetchV2 } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import { fetchURLWithRetry } from "../../helpers/duneRequest"; import { queryDune } from "../../helpers/dune"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphFees"; const arbitrumStartTimestamp = 1696982400; // 2023-10-11 00:00:00 -type VolumeRow = { volume_date: string; daily_volume: number }; -type FeeRow = { transfer_date: string; usd_total: number }; type StatRow = { volume_24hr: number; fees_24hr: number; From b3e4fe96016b707a6debe78c2233453b5cda7df4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 26 Jun 2024 14:22:48 +0000 Subject: [PATCH 0867/1590] fix query param --- dexs/dusa/index.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/dexs/dusa/index.ts b/dexs/dusa/index.ts index ae551ec552..accf6ae334 100644 --- a/dexs/dusa/index.ts +++ b/dexs/dusa/index.ts @@ -1,4 +1,4 @@ -import { Adapter } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; type TEndpoint = { @@ -9,12 +9,12 @@ const endpoints: TEndpoint = { ["massa"]: "https://api-mainnet-dusa.up.railway.app/api/volume", }; -const fetchVolume = async (timestamp: number) => { - const historicalVolume = await fetchURL(endpoints["massa"]); +const fetchVolume = async (options: FetchOptions) => { + const historicalVolume = await fetchURL(`${endpoints["massa"]}?take=${options.endTimestamp}`); const totalVolume = historicalVolume.totalVolume.volume; const dailyVolume = historicalVolume.dailyVolume.volume; - + const dailyFees = historicalVolume.dailyVolume.fees; const totalFee = historicalVolume.totalVolume.fees; @@ -23,7 +23,6 @@ const fetchVolume = async (timestamp: number) => { dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, dailyFees: `${dailyFees}`, totalFees: `${totalFee}`, - timestamp: timestamp, }; }; @@ -32,7 +31,6 @@ const adapter: Adapter = { adapter: { massa: { fetch: fetchVolume, - runAtCurrTime: true, start: 1713170000 }, } From ee77660fc2aa00fe90648837854e312dc2f226b3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 26 Jun 2024 15:52:23 +0000 Subject: [PATCH 0868/1590] fix get logs tlx finace --- dexs/tlx-finance/index.ts | 92 +++++++++++++++------------------------ 1 file changed, 34 insertions(+), 58 deletions(-) diff --git a/dexs/tlx-finance/index.ts b/dexs/tlx-finance/index.ts index 3a30630df3..359fd15d97 100644 --- a/dexs/tlx-finance/index.ts +++ b/dexs/tlx-finance/index.ts @@ -9,82 +9,58 @@ import { CHAIN } from "../../helpers/chains"; import { ChainApi } from "@defillama/sdk"; const FACTORY = "0x5Dd85f51e9fD6aDE8ecc216C07919ecD443eB14d"; - -const MINT_EVENT = - "event Minted(address indexed account, uint256 leveragedTokenAmount, uint256 baseAssetAmount)"; -const REDEEM_EVENT = - "event Redeemed(address indexed account, uint256 leveragedTokenAmount, uint256 baseAssetAmount)"; - -const fetchSUsdPrice = async (): Promise => { - const ID = "optimism:0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9"; - const ENDPOINT = `https://coins.llama.fi/prices/current/${ID}`; - const response = await fetch(ENDPOINT); - const data = await response.json(); - if (!data) throw new Error("no data"); - if (!data.coins) throw new Error("no data.coins"); - const priceData = data.coins[ID]; - if (!priceData) throw new Error("no priceData"); - const price = priceData.price; - if (!price) throw new Error("no price"); - if (price === 0) throw new Error("price is 0"); - return price; -}; +const MINT_EVENT = "event Minted(address indexed account, uint256 leveragedTokenAmount, uint256 baseAssetAmount)"; +const REDEEM_EVENT = "event Redeemed(address indexed account, uint256 leveragedTokenAmount, uint256 baseAssetAmount)"; const fetchLeveragedTokenVolume = async ( getLogs: (params: FetchGetLogsOptions) => Promise, toApi: ChainApi, - token: string + tokens: string[] ): Promise => { - const targetLeverage = await toApi.call({ - target: token, + const targetLeverages = await toApi.multiCall({ abi: "function targetLeverage() view returns (uint256)", - params: [], + calls: tokens.map((token) => ({ + target: token, + params: [], + })), }); - const mints: any[] = await getLogs({ - targets: [token], + + const mints_logs: any[] = await getLogs({ + targets: tokens, eventAbi: MINT_EVENT, + flatten: false }); - const sUsdMintVolume = mints - .reduce( - (acc: any, log: any) => acc.plus(log.baseAssetAmount), - new BigNumber(0) - ) - .times(targetLeverage) - .div(1e18) - .div(1e18) - .toNumber(); - const redeems: any[] = await getLogs({ - targets: [token], + const redeems_logs: any[] = await getLogs({ + targets: tokens, eventAbi: REDEEM_EVENT, + flatten: false }); - const sUsdRedeemVolume = redeems - .reduce( - (acc: any, log: any) => acc.plus(log.baseAssetAmount), - new BigNumber(0) - ) - .times(targetLeverage) - .div(1e18) - .div(1e18) - .toNumber(); - return sUsdMintVolume + sUsdRedeemVolume; + + const mint_valume = mints_logs.map((logs, i) => { + return logs.map((log: any) => { + return new BigNumber(log.baseAssetAmount).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) + }) + }).flat().reduce((acc: any, log: any) => acc.plus(log), new BigNumber(0)); + + return mint_valume.plus(redeem_valume).toNumber(); }; const fetchVolume = async (options: FetchOptions): Promise => { - const { getLogs, toApi } = options; - let sUsddailyVolume = 0; - const allTokens = await toApi.call({ + const { getLogs, api } = options; + const allTokens = await api.call({ target: FACTORY, abi: "function allTokens() view returns (address[] memory)", params: [], }); - for (const token of allTokens) { - const volume = await fetchLeveragedTokenVolume(getLogs, toApi, token); - sUsddailyVolume += volume; - } - - const sUsdPrice = await fetchSUsdPrice(); - const dailyVolume = sUsddailyVolume * sUsdPrice; - + const volume = await fetchLeveragedTokenVolume(getLogs, api, allTokens) + const dailyVolume = options.createBalances() + dailyVolume.add("0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9", volume); return { dailyVolume }; }; const adapter: SimpleAdapter = { From cc5355338382ec28622161e76766fdaed464e484 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 26 Jun 2024 17:19:21 +0000 Subject: [PATCH 0869/1590] add traderjoe-lb-v2-2 --- dexs/traderjoe-lb-v2-2/index.ts | 68 +++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 dexs/traderjoe-lb-v2-2/index.ts diff --git a/dexs/traderjoe-lb-v2-2/index.ts b/dexs/traderjoe-lb-v2-2/index.ts new file mode 100644 index 0000000000..88c4d85a77 --- /dev/null +++ b/dexs/traderjoe-lb-v2-2/index.ts @@ -0,0 +1,68 @@ +import { abi } from "@defillama/sdk/build/api"; +import { Fetch, FetchOptions, IJSON, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + + +const factory = { + [CHAIN.AVAX]: '0xb43120c4745967fa9b93E79C149E66B0f2D6Fe0c', + [CHAIN.ARBITRUM]: '0xb43120c4745967fa9b93E79C149E66B0f2D6Fe0c', +} +const swap_event = 'event Swap(address indexed sender,address indexed to,uint24 id,bytes32 amountsIn,bytes32 amountsOut,uint24 volatilityAccumulator,bytes32 totalFees,bytes32 protocolFees)' +const fetchVolume = async (options: FetchOptions) => { + const {api } = options; + const pools = await api.fetchList({ target: factory[options.chain], itemAbi: 'getLBPairAtIndex', lengthAbi: 'getNumberOfLBPairs', }) + const tokenA = await api.multiCall({ abi: 'address:getTokenX', calls: pools, }) + const tokenB = await api.multiCall({ abi: 'address:getTokenY', calls: pools, }) + + const decimalsXs = await api.multiCall({ abi: 'erc20:decimals', calls: tokenA }) + const decimalsYs = await api.multiCall({ abi: 'erc20:decimals', calls: tokenB }) + + const pairObject: IJSON = {} + pools.forEach((pair: string, i: number) => { + pairObject[pair] = [tokenA[i], tokenB[i]] + }) + const logs = await options.getLogs({ + targets: pools, + eventAbi: swap_event, + flatten: false, + }) + const dailyVolume = options.createBalances() + const dailyFees = options.createBalances() + const dailyRevenue = options.createBalances() + logs.forEach((_logs, i) => { + _logs.forEach(log => { + const amountInX = Number('0x' + '0'.repeat(32) + log.amountsIn.replace('0x', '').slice(0, 32)) + const amountInY = Number('0x' + '0'.repeat(32) + log.amountsIn.replace('0x', '').slice(32, 64)) + const token0 = tokenA[i] + const token1 = tokenB[i] + dailyVolume.add(token0, amountInY); + dailyVolume.add(token1, amountInX); + const decimalsX = decimalsXs[i]; + const decimalsY = decimalsYs[i]; + const protocolFeesY = Number('0x' + log.protocolFees.replace('0x', '').slice(0, 32)) + const protocolFeesX = Number('0x' + log.protocolFees.replace('0x', '').slice(32, 64)) + const totalFeesY = Number('0x' + log.totalFees.replace('0x', '').slice(0, 32)); + const totalFeesX = Number('0x' + log.totalFees.replace('0x', '').slice(32, 64)); + dailyFees.add(token0, totalFeesX / 10 ** (18 - decimalsX)) + dailyFees.add(token1, totalFeesY / 10 ** (18 - decimalsY)) + dailyRevenue.add(token0, protocolFeesX / 10 ** (18 - decimalsX)) + dailyRevenue.add(token1, protocolFeesY / 10 ** (18 - decimalsY)) + }) + }) + return {dailyVolume, dailyFees, dailyRevenue} +} + +const adapters: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.AVAX]: { + fetch: fetchVolume, + start: 0, + }, + [CHAIN.ARBITRUM]: { + fetch: fetchVolume, + start: 0, + }, + } +} +export default adapters From ce8057ca000886273713ddb50181a7667716d012 Mon Sep 17 00:00:00 2001 From: David <111794534+usr-icon-foundation@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:02:58 +0200 Subject: [PATCH 0870/1590] Update Fees and TVL description for Balanced --- dexs/balanced/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/balanced/index.ts b/dexs/balanced/index.ts index b53951db66..dadf7fa742 100644 --- a/dexs/balanced/index.ts +++ b/dexs/balanced/index.ts @@ -9,7 +9,8 @@ export default { start: 1700000000, meta: { methodology: { - Fees: 'Users pay fees for trading on the Balanced DEX.', + Fees: 'Fees: Collected from borrowers and traders.', + TVL: 'TVL: The total liquidity held on the Balanced exchange and used as collateral for bnUSD.', DataSource: 'Data is sourced from the Balanced Network API and ICON Tracker RPC Node. It is processed to calculate trading fees and volume accrued over a 24-hour period. Stats can be verified at https://stats.balanced.network/' }, }, From 7bb5a072ee230b08cbed72925f582129e20a5ad2 Mon Sep 17 00:00:00 2001 From: flisko Date: Thu, 27 Jun 2024 15:25:47 +0200 Subject: [PATCH 0871/1590] feat: update graph links Updated graph links to self hosted. --- dexs/beamex/index.ts | 93 +++++++++++++++++++-------------------- dexs/beamswap-v3/index.ts | 3 +- dexs/beamswap/index.ts | 5 +-- fees/beamex.ts | 25 +++++------ 4 files changed, 61 insertions(+), 65 deletions(-) diff --git a/dexs/beamex/index.ts b/dexs/beamex/index.ts index bb1b669106..2d3e022319 100644 --- a/dexs/beamex/index.ts +++ b/dexs/beamex/index.ts @@ -1,4 +1,3 @@ -import * as sdk from "@defillama/sdk"; import { gql, request } from "graphql-request"; import { BreakdownAdapter, ChainEndpoints, Fetch } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -6,7 +5,7 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume const endpointsBeamex: ChainEndpoints = { [CHAIN.MOONBEAN]: - sdk.graph.modifyEndpoint('4qhrYgYvHTHTjWN6NFr2UfBz1HaUAAgoqx52nN2MyG3K'), + 'https://graph.beamswap.io/subgraphs/name/beamswap/beamex-stats', }; const historicalDataSwap = gql` query get_volume($period: String!, $id: String!) { @@ -37,54 +36,54 @@ interface IGraphResponse { const getFetch = (query: string) => - (chain: string): Fetch => - async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp( - new Date(timestamp * 1000) - ); - const dailyData: IGraphResponse = await request( - endpointsBeamex[chain], - query, - { - id: String(dayTimestamp), - period: "daily", - } - ); - const totalData: IGraphResponse = await request( - endpointsBeamex[chain], - query, - { - id: "total", - period: "total", - } - ); + (chain: string): Fetch => + async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp( + new Date(timestamp * 1000) + ); + const dailyData: IGraphResponse = await request( + endpointsBeamex[chain], + query, + { + id: String(dayTimestamp), + period: "daily", + } + ); + const totalData: IGraphResponse = await request( + endpointsBeamex[chain], + query, + { + id: "total", + period: "total", + } + ); - return { - timestamp: dayTimestamp, - dailyVolume: - dailyData.volumeStats.length == 1 - ? String( - Number( - Object.values(dailyData.volumeStats[0]).reduce((sum, element) => - String(Number(sum) + Number(element)) - ) - ) * + return { + timestamp: dayTimestamp, + dailyVolume: + dailyData.volumeStats.length == 1 + ? String( + Number( + Object.values(dailyData.volumeStats[0]).reduce((sum, element) => + String(Number(sum) + Number(element)) + ) + ) * 10 ** -30 - ) - : undefined, - totalVolume: - totalData.volumeStats.length == 1 - ? String( - Number( - Object.values(totalData.volumeStats[0]).reduce((sum, element) => - String(Number(sum) + Number(element)) - ) - ) * + ) + : undefined, + totalVolume: + totalData.volumeStats.length == 1 + ? String( + Number( + Object.values(totalData.volumeStats[0]).reduce((sum, element) => + String(Number(sum) + Number(element)) + ) + ) * 10 ** -30 - ) - : undefined, - }; - }; + ) + : undefined, + }; + }; const methodologyBeamex = { Fees: "Fees from open/close position (0.2%), liquidations, swap (0.2% to 0.4%), mint and burn (based on tokens balance in the pool) and borrow fee ((assets borrowed)/(total assets in pool)*0.02%)", diff --git a/dexs/beamswap-v3/index.ts b/dexs/beamswap-v3/index.ts index 08d290d39e..531c4f6ed6 100644 --- a/dexs/beamswap-v3/index.ts +++ b/dexs/beamswap-v3/index.ts @@ -1,4 +1,3 @@ -import * as sdk from "@defillama/sdk"; import { BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; @@ -10,7 +9,7 @@ import { const endpointV3 = { [CHAIN.MOONBEAM]: - sdk.graph.modifyEndpoint('2YnTZfQmenjvJ3bihewLGgAKnyqjrMWrStux8ZFE7ee6'), + 'https://graph.beamswap.io/subgraphs/name/beamswap/beamswap-amm-v3', }; const VOLUME_USD = "volumeUSD"; const v3Graphs = getGraphDimensions({ diff --git a/dexs/beamswap/index.ts b/dexs/beamswap/index.ts index bbcd4fbc74..79edc89899 100644 --- a/dexs/beamswap/index.ts +++ b/dexs/beamswap/index.ts @@ -1,4 +1,3 @@ -import * as sdk from "@defillama/sdk"; import { BreakdownAdapter, ChainEndpoints } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; @@ -7,7 +6,7 @@ import { getGraphDimensions } from "../../helpers/getUniSubgraph"; const endpoints: ChainEndpoints = { [CHAIN.MOONBEAN]: - sdk.graph.modifyEndpoint('9CwTvN5R8sztZSBZqbDZWcHZjM41RRiz63QmRMsJBn6X'), + 'https://graph.beamswap.io/subgraphs/name/beamswap/beamswap-amm-v2', }; @@ -36,7 +35,7 @@ const graphs = getGraphDimensions({ const v1graphs = getGraphDimensions({ graphUrls: { [CHAIN.MOONBEAN]: - sdk.graph.modifyEndpoint('3tyEjzmxReXkLb9CB8LCBSDWWrV8dxNCzbcMHxU9n7nJ'), + 'https://graph.beamswap.io/subgraphs/name/beamswap/beamswap-stableamm', }, totalVolume: { factory: "tradeVolumes", diff --git a/fees/beamex.ts b/fees/beamex.ts index 1baf18eef8..cb13ebe9b5 100644 --- a/fees/beamex.ts +++ b/fees/beamex.ts @@ -1,4 +1,3 @@ -import * as sdk from "@defillama/sdk"; import { gql, request } from "graphql-request"; import { Adapter, ChainEndpoints } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; @@ -6,7 +5,7 @@ import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpointsBeamex: ChainEndpoints = { [CHAIN.MOONBEAN]: - sdk.graph.modifyEndpoint('4qhrYgYvHTHTjWN6NFr2UfBz1HaUAAgoqx52nN2MyG3K'), + 'https://graph.beamswap.io/subgraphs/name/beamswap/beamex-stats', }; const methodologyBeamex = { @@ -14,11 +13,11 @@ const methodologyBeamex = { UserFees: "Fees from open/close position (0.1%), swap (0.1% to 0.4%) and borrow fee ((assets borrowed)/(total assets in pool)*0.04%)", HoldersRevenue: - "30% of all collected fees are distributed to $stGLINT stakers", + "20% of all collected fees are distributed to $stGLINT stakers", SupplySideRevenue: - "70% of all collected fees will be distributed to BLP stakers. Currently they are distributed to treasury", - Revenue: "70% of all collected fees are distributed to the treasury", - ProtocolRevenue: "70% of all collected fees are distributed to the treasury", + "60% of all collected fees are distributed to BLP stakers. Currently they are distributed to treasury", + Revenue: "20% of all collected fees are distributed to the treasury and upkeep", + ProtocolRevenue: "20% of all collected fees are distributed to the treasury and upkeep", }; const graphsBeamex = (chain: string) => async (timestamp: number) => { @@ -75,15 +74,15 @@ const graphsBeamex = (chain: string) => async (timestamp: number) => { timestamp, dailyFees: finalDailyFee.toString(), dailyUserFees: finalUserFee.toString(), - dailyRevenue: (finalDailyFee * 0.7).toString(), - dailyProtocolRevenue: (finalDailyFee * 0.7).toString(), - dailyHoldersRevenue: (finalDailyFee * 0.3).toString(), - dailySupplySideRevenue: (finalDailyFee * 0.3).toString(), + dailyRevenue: (finalDailyFee * 0.2).toString(), + dailyProtocolRevenue: (finalDailyFee * 0.2).toString(), + dailyHoldersRevenue: (finalDailyFee * 0.2).toString(), + dailySupplySideRevenue: (finalDailyFee * 0.6).toString(), totalFees: finalTotalFee.toString(), - totalProtocolRevenue: (finalTotalFee * 0.7).toString(), - totalRevenue: (finalTotalFee * 0.7).toString(), + totalProtocolRevenue: (finalTotalFee * 0.6).toString(), + totalRevenue: (finalTotalFee * 0.6).toString(), totalUserFees: finalTotalUserFee.toString(), - totalSupplySideRevenue: (finalTotalFee * 0.3).toString(), + totalSupplySideRevenue: (finalTotalFee * 0.6).toString(), }; From b97bc2498c5f0d2778679e20223c775d64854f69 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 27 Jun 2024 15:53:47 +0000 Subject: [PATCH 0872/1590] fix xexchange --- dexs/xexchange/index.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/dexs/xexchange/index.ts b/dexs/xexchange/index.ts index ddfca207c5..66ab863306 100644 --- a/dexs/xexchange/index.ts +++ b/dexs/xexchange/index.ts @@ -1,7 +1,6 @@ import { gql, GraphQLClient } from "graphql-request"; -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const getDailyVolume = () => { return gql`{ @@ -20,16 +19,15 @@ interface IGraphResponse { totalVolumeUSD24h: string; } -const fetch = async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); +const fetch = async (_: FetchOptions) => { const historicalVolume: IGraphResponse = (await getGQLClient().request(getDailyVolume())).factory; return { dailyVolume: historicalVolume.totalVolumeUSD24h ? `${historicalVolume.totalVolumeUSD24h}` : undefined, - timestamp: dayTimestamp, }; } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ELROND]: { fetch: fetch, From 69cff79722c7049dc49495f1b3baf86964403fd2 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 27 Jun 2024 21:20:38 +0100 Subject: [PATCH 0873/1590] format --- users/routers/routerAddresses.ts | 4993 ++++++++++++++---------------- 1 file changed, 2252 insertions(+), 2741 deletions(-) diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index 82b02b040c..0eed04ee78 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -1,360 +1,269 @@ -import ADDRESSES from '../../helpers/coreAssets.json' +import ADDRESSES from "../../helpers/coreAssets.json"; import { isAddressesUsable } from "../utils/countUsers"; import { ProtocolAddresses } from "../utils/types"; -export default ([ - { - "id":"3429", - "name":"YFX", - "addresses":{ - "arbitrum":[ - "0xebb4871d1be1262C8bd1aa7dfc4C047483f02028", // yfx-v3 - "0xcC619251bB94b7605A7Ea7391fEB7D18C32552D5", // yfx-v4 - ] - } - }, - { - "id":"parent#uniswap", - "name":"Uniswap", - "addresses":{ - "ethereum":[ - // v2 - "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", - "0xf164fc0ec4e93095b804a4795bbe1e041497b92a", - //v3 - "0xE592427A0AEce92De3Edee1F18E0157C05861564", - "0x075B36dE1Bd11cb361c5B3B1E80A9ab0e7aa8a60", - "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", - "0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5",//universalrouter - "0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B",//universalrouter - ], - "bsc":[ - "0x5Dc88340E1c5c6366864Ee415d6034cadd1A9897" - ], - "celo":[ - "0xC73d61d192FB994157168Fb56730FdEc64C9Cb8F", - // v3 - "0x5615CDAb10dc425a742d643d949a7F474C01abc4" - ], - "polygon":[ - "0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5",//universalrouter - "0xE592427A0AEce92De3Edee1F18E0157C05861564", //v3 - "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",//v3 - "0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B",//universalrouter2 - ], - "arbitrum":[ - "0xE592427A0AEce92De3Edee1F18E0157C05861564",//v3 - "0x075B36dE1Bd11cb361c5B3B1E80A9ab0e7aa8a60",//v3 - "0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5", - "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",//v3 - "0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B",//universalrouter - ], - "optimism":[ - "0xE592427A0AEce92De3Edee1F18E0157C05861564", //v3 - "0x075B36dE1Bd11cb361c5B3B1E80A9ab0e7aa8a60",//v3 - "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",//v3 - "0xb555edF5dcF85f42cEeF1f3630a52A108E55A654",//universalrouter - "0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B",//universalrouter - "0x560DA69Ef841e1272C65eF9ebA538870F8C0c484",//universalrouter - ] - } - }, - { - "id":"parent#sushi", - "name":"Sushiswap", - "addresses":{ - "ethereum":[ - "0xd9e1ce17f2641f24ae83637ab66a2cca9c378b9f", - "0xf5bce5077908a1b7370b9ae04adc565ebd643966", - "0xF70c086618dcf2b1A461311275e00D6B722ef914", - "0x044b75f554b886A065b9567891e45c79542d7357", - "0x7af71799C40F952237eAA4D81A77C1af49125113", - "0xDdC1b5920723F774d2Ec2C3c9355251A20819776" - ], - "arbitrum":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0x74c764d41b77dbbb4fe771dab1939b00b146894a", - "0x9c6522117e2ed1fE5bdb72bb0eD5E3f2bdE7DBe0", - "0x9f18658f7206EaA8D885bBfBb95aB6D9f6c6C12F", - "0xD9988b4B5bBC53A794240496cfA9Bf5b1F8E0523" - ], - "optimism":[ - "0xF0cBce1942A68BEB3d1b73F0dd86C8DCc363eF49", - "0x96E04591579f298681361C6122Dc4Ef405c19385", - "0xD9988b4B5bBC53A794240496cfA9Bf5b1F8E0523", - "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", - "0xE52180815c81D7711B83412e53259bed6a3aB70a" - ], - "avax":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0x0711B6026068f736bae6B213031fCE978D48E026", - "0xD75F5369724b513b497101fb15211160c1d96550", - "0xbACEB8eC6b9355Dfc0269C18bac9d6E2Bdc29C4F", - "0x400d75dAb26bBc18D163AEA3e83D9Ea68F6c1804", - "0xF70c086618dcf2b1A461311275e00D6B722ef914" - ], - "polygon":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0x0319000133d3AdA02600f0875d2cf03D442C3367", - "0x0dc8E47a1196bcB590485eE8bF832c5c68A52f4B", - "0x5097CBB61D3C75907656DC4e3bbA892Ff136649a", - "0x1A52AfDd24994704e61fEC49924d6c5388Ae47fD", - "0x7CD29170e8fA3fE5204624deDE5A66F4e8161741", - "0x7A250C60Cde7A5Ca7B667209beAB5eA4E16eed67" - ], - "fantom":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0x3e603C14aF37EBdaD31709C4f848Fc6aD5BEc715", - "0x3D2f8ae0344d38525d2AE96Ab750B83480c0844F", - "0x9e4791ad13f14783C7B2A6A7bD8D6DDD1DC95847", - "0x7cf167390E2526Bc03F3CF6852A7AF1CEC3e243d" - ], - "bsc":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0xF5BCE5077908a1b7370B9ae04AdC565EBd643966", - "0xD75F5369724b513b497101fb15211160c1d96550", - "0x7cf167390E2526Bc03F3CF6852A7AF1CEC3e243d", - "0x97a32B4f8486735075f2cBEcff64208fBF2e610A" - ], - "xdai":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0xCaAbdD9Cf4b61813D4a52f980d6BC1B713FE66F5" - ], - "arbitrum-nova":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0xbE811A0D44E2553d25d11CB8DC0d3F0D0E6430E6" - ], - "boba-avax":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0x0769fd68dFb93167989C6f7254cd0D766Fb2841F" - ], - "boba-bnb":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0x0769fd68dFb93167989C6f7254cd0D766Fb2841F" - ], - "boba":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0x0769fd68dFb93167989C6f7254cd0D766Fb2841F" - ], - "celo":[ - "0x1421bDe4B10e8dd459b3BCb598810B1337D56842", - "0x0711B6026068f736bae6B213031fCE978D48E026" - ], - "fuse":[ - "0xF4d73326C13a4Fc5FD7A064217e12780e9Bd62c3", - "0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904" - ], - "goerli":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0xF5BCE5077908a1b7370B9ae04AdC565EBd643966" - ], - "harmony":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0x6b2A3FF504798886862Ca5ce501e080947A506A2" - ], - "heco":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0xF5BCE5077908a1b7370B9ae04AdC565EBd643966" - ], - "moonbeam":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0x80C7DD17B01855a6D2347444a0FCC36136a314de" - ], - "moonriver":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "0x145d82bCa93cCa2AE057D1c6f26245d1b9522E6F" - ], - "okexchain":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506" - ], - "palm":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506" - ], - "telos":[ - "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506" - ], - "kava":[ - "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", - "0xbE811A0D44E2553d25d11CB8DC0d3F0D0E6430E6" - ], - "metis":[ - "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", - "0xaB235da7f52d35fb4551AfBa11BFB56e18774A65" - ], - "bittorrent":[ - "0xeae23C766a1B25481025a02B2d82a1DB3FC130Ca" - ], - } - }, - { - "id":"2190", - "name":"Sushi BentoBox", - "addresses":{ - "ethereum":[ - "0xf5bce5077908a1b7370b9ae04adc565ebd643966", - "0xF70c086618dcf2b1A461311275e00D6B722ef914", - "0x044b75f554b886A065b9567891e45c79542d7357", - "0x7af71799C40F952237eAA4D81A77C1af49125113" - ], - "arbitrum":[ - "0x74c764d41b77dbbb4fe771dab1939b00b146894a", - "0x9c6522117e2ed1fE5bdb72bb0eD5E3f2bdE7DBe0", - "0x9f18658f7206EaA8D885bBfBb95aB6D9f6c6C12F" - ], - "optimism":[ - "0xF0cBce1942A68BEB3d1b73F0dd86C8DCc363eF49", - "0x96E04591579f298681361C6122Dc4Ef405c19385", - "0xD9988b4B5bBC53A794240496cfA9Bf5b1F8E0523", - "0xc35DADB65012eC5796536bD9864eD8773aBc74C4" - ], - "polygon":[ - "0x0319000133d3AdA02600f0875d2cf03D442C3367", - "0x0dc8E47a1196bcB590485eE8bF832c5c68A52f4B", - "0x5097CBB61D3C75907656DC4e3bbA892Ff136649a", - "0x1A52AfDd24994704e61fEC49924d6c5388Ae47fD", - "0x7CD29170e8fA3fE5204624deDE5A66F4e8161741" - ], - "avax":[ - "0x0711B6026068f736bae6B213031fCE978D48E026", - "0xD75F5369724b513b497101fb15211160c1d96550", - "0xbACEB8eC6b9355Dfc0269C18bac9d6E2Bdc29C4F", - "0x400d75dAb26bBc18D163AEA3e83D9Ea68F6c1804" - ], - "bsc":[ - "0xF5BCE5077908a1b7370B9ae04AdC565EBd643966", - "0xD75F5369724b513b497101fb15211160c1d96550", - "0x7cf167390E2526Bc03F3CF6852A7AF1CEC3e243d", - ], - "fantom":[ - "0x3e603C14aF37EBdaD31709C4f848Fc6aD5BEc715", - "0x3D2f8ae0344d38525d2AE96Ab750B83480c0844F", - "0x9e4791ad13f14783C7B2A6A7bD8D6DDD1DC95847" - ], - "arbitrum-nova":[ - "0xbE811A0D44E2553d25d11CB8DC0d3F0D0E6430E6" - ], - "boba-avax":[ - "0x0769fd68dFb93167989C6f7254cd0D766Fb2841F" - ], - "boba-bnb":[ - "0x0769fd68dFb93167989C6f7254cd0D766Fb2841F" - ], - "boba":[ - "0x0769fd68dFb93167989C6f7254cd0D766Fb2841F" - ], - "bittorrent":[ - "0x8dacffa7F69Ce572992132697252E16254225D38" - ], - "celo":[ - "0x0711B6026068f736bae6B213031fCE978D48E026" - ], - "fuse":[ - "0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904" - ], - "xdai":[ - "0xE2d7F5dd869Fc7c126D21b13a9080e75a4bDb324" - ], - "goerli":[ - "0xF5BCE5077908a1b7370B9ae04AdC565EBd643966" - ], - "harmony":[ - "0x6b2A3FF504798886862Ca5ce501e080947A506A2" - ], - "heco":[ - "0xF5BCE5077908a1b7370B9ae04AdC565EBd643966" - ], - "kava":[ - "0xc35DADB65012eC5796536bD9864eD8773aBc74C4" - ], - "metis":[ - "0xc35DADB65012eC5796536bD9864eD8773aBc74C4" - ], - "moonbeam":[ - "0x80C7DD17B01855a6D2347444a0FCC36136a314de" - ], - "moonriver":[ - "0x145d82bCa93cCa2AE057D1c6f26245d1b9522E6F" - ] - } - }, - { - "id":"397", - "name":"Shibaswap", - "addresses":{ - "ethereum":["0x03f7724180aa6b939894b5ca4314783b0b36b329"] - } - }, - { - "id":"221", - "name":"Defi Swap", - "addresses":{ - "ethereum":[ - "0xceb90e4c17d626be0facd78b79c9c87d7ca181b3" - ] - } - }, - { - "id":"parent#pancakeswap", - "name":"Pancakeswap", - "addresses":{ - "ethereum":[ - "0x13f4EA83D0bd40E75C8222255bc855a974568Dd4", // v3 - "0xEfF92A263d31888d860bD50809A8D171709b7b1c" - ], - "bsc":[ - "0x13f4EA83D0bd40E75C8222255bc855a974568Dd4", // v3 - "0x10ED43C718714eb63d5aA57B78B54704E256024E", - "0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F", - "0x749fc0E64A3680531d31ACC1dAa8dda0bE438B02" - ], - "aptos":[ - "0xc7efb4076dbe143cbcd98cfaaa929ecfc8f299203dfff63b95ccb6bfe19850fa" - ], - "base":[ - "0x678Aa4bF4E210cf2166753e054d5b7c31cc7fa86", // smartrouter - ] - } - }, - { - "id":"179", - "name":"Varen", - "addresses":{ - "ethereum":[ - "0xa7ece0911fe8c60bff9e99f8fafcdbe56e07aff1", - "0x6C0899D124146256a382a9eeB7C8Aca363BcCf46", - "0x8C8FF722DD407bC5e10c098F97DDdAD390f03D58" - ] - } - }, - { - "id":"324", - "name":"Unicly", - "addresses":{ - "ethereum":["0xe6e90bc9f3b95cdb69f48c7bfdd0ede1386b135a"], - "arbitrum":[ - "0xE6E90bC9F3b95cdB69F48c7bFdd0edE1386b135a" - ] - } - }, - { - "id":"707", - "name":"Luaswap", - "addresses":{ - "ethereum":[ - "0x1d5c6f1607a171ad52efb270121331b3039dd83e" - ], - "tomochain":[] - } - }, - { - "id":"580", - "name":"Sashimiswap", - "addresses":{ - "ethereum":[ - "0xe4fe6a45f354e845f954cddee6084603cedb9410" - ] - } - },/* +export default ( + [ + { + id: "3429", + name: "YFX", + addresses: { + arbitrum: [ + "0xebb4871d1be1262C8bd1aa7dfc4C047483f02028", // yfx-v3 + "0xcC619251bB94b7605A7Ea7391fEB7D18C32552D5", // yfx-v4 + ], + }, + }, + { + id: "parent#uniswap", + name: "Uniswap", + addresses: { + ethereum: [ + // v2 + "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", + "0xf164fc0ec4e93095b804a4795bbe1e041497b92a", + //v3 + "0xE592427A0AEce92De3Edee1F18E0157C05861564", + "0x075B36dE1Bd11cb361c5B3B1E80A9ab0e7aa8a60", + "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", + "0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5", //universalrouter + "0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B", //universalrouter + ], + bsc: ["0x5Dc88340E1c5c6366864Ee415d6034cadd1A9897"], + celo: [ + "0xC73d61d192FB994157168Fb56730FdEc64C9Cb8F", + // v3 + "0x5615CDAb10dc425a742d643d949a7F474C01abc4", + ], + polygon: [ + "0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5", //universalrouter + "0xE592427A0AEce92De3Edee1F18E0157C05861564", //v3 + "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", //v3 + "0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B", //universalrouter2 + ], + arbitrum: [ + "0xE592427A0AEce92De3Edee1F18E0157C05861564", //v3 + "0x075B36dE1Bd11cb361c5B3B1E80A9ab0e7aa8a60", //v3 + "0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5", + "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", //v3 + "0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B", //universalrouter + ], + optimism: [ + "0xE592427A0AEce92De3Edee1F18E0157C05861564", //v3 + "0x075B36dE1Bd11cb361c5B3B1E80A9ab0e7aa8a60", //v3 + "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", //v3 + "0xb555edF5dcF85f42cEeF1f3630a52A108E55A654", //universalrouter + "0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B", //universalrouter + "0x560DA69Ef841e1272C65eF9ebA538870F8C0c484", //universalrouter + ], + }, + }, + { + id: "parent#sushi", + name: "Sushiswap", + addresses: { + "ethereum": [ + "0xd9e1ce17f2641f24ae83637ab66a2cca9c378b9f", + "0xf5bce5077908a1b7370b9ae04adc565ebd643966", + "0xF70c086618dcf2b1A461311275e00D6B722ef914", + "0x044b75f554b886A065b9567891e45c79542d7357", + "0x7af71799C40F952237eAA4D81A77C1af49125113", + "0xDdC1b5920723F774d2Ec2C3c9355251A20819776", + ], + "arbitrum": [ + "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", + "0x74c764d41b77dbbb4fe771dab1939b00b146894a", + "0x9c6522117e2ed1fE5bdb72bb0eD5E3f2bdE7DBe0", + "0x9f18658f7206EaA8D885bBfBb95aB6D9f6c6C12F", + "0xD9988b4B5bBC53A794240496cfA9Bf5b1F8E0523", + ], + "optimism": [ + "0xF0cBce1942A68BEB3d1b73F0dd86C8DCc363eF49", + "0x96E04591579f298681361C6122Dc4Ef405c19385", + "0xD9988b4B5bBC53A794240496cfA9Bf5b1F8E0523", + "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", + "0xE52180815c81D7711B83412e53259bed6a3aB70a", + ], + "avax": [ + "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", + "0x0711B6026068f736bae6B213031fCE978D48E026", + "0xD75F5369724b513b497101fb15211160c1d96550", + "0xbACEB8eC6b9355Dfc0269C18bac9d6E2Bdc29C4F", + "0x400d75dAb26bBc18D163AEA3e83D9Ea68F6c1804", + "0xF70c086618dcf2b1A461311275e00D6B722ef914", + ], + "polygon": [ + "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", + "0x0319000133d3AdA02600f0875d2cf03D442C3367", + "0x0dc8E47a1196bcB590485eE8bF832c5c68A52f4B", + "0x5097CBB61D3C75907656DC4e3bbA892Ff136649a", + "0x1A52AfDd24994704e61fEC49924d6c5388Ae47fD", + "0x7CD29170e8fA3fE5204624deDE5A66F4e8161741", + "0x7A250C60Cde7A5Ca7B667209beAB5eA4E16eed67", + ], + "fantom": [ + "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", + "0x3e603C14aF37EBdaD31709C4f848Fc6aD5BEc715", + "0x3D2f8ae0344d38525d2AE96Ab750B83480c0844F", + "0x9e4791ad13f14783C7B2A6A7bD8D6DDD1DC95847", + "0x7cf167390E2526Bc03F3CF6852A7AF1CEC3e243d", + ], + "bsc": [ + "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", + "0xF5BCE5077908a1b7370B9ae04AdC565EBd643966", + "0xD75F5369724b513b497101fb15211160c1d96550", + "0x7cf167390E2526Bc03F3CF6852A7AF1CEC3e243d", + "0x97a32B4f8486735075f2cBEcff64208fBF2e610A", + ], + "xdai": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "0xCaAbdD9Cf4b61813D4a52f980d6BC1B713FE66F5"], + "arbitrum-nova": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "0xbE811A0D44E2553d25d11CB8DC0d3F0D0E6430E6"], + "boba-avax": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "0x0769fd68dFb93167989C6f7254cd0D766Fb2841F"], + "boba-bnb": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "0x0769fd68dFb93167989C6f7254cd0D766Fb2841F"], + "boba": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "0x0769fd68dFb93167989C6f7254cd0D766Fb2841F"], + "celo": ["0x1421bDe4B10e8dd459b3BCb598810B1337D56842", "0x0711B6026068f736bae6B213031fCE978D48E026"], + "fuse": ["0xF4d73326C13a4Fc5FD7A064217e12780e9Bd62c3", "0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904"], + "goerli": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "0xF5BCE5077908a1b7370B9ae04AdC565EBd643966"], + "harmony": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "0x6b2A3FF504798886862Ca5ce501e080947A506A2"], + "heco": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "0xF5BCE5077908a1b7370B9ae04AdC565EBd643966"], + "moonbeam": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "0x80C7DD17B01855a6D2347444a0FCC36136a314de"], + "moonriver": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "0x145d82bCa93cCa2AE057D1c6f26245d1b9522E6F"], + "okexchain": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506"], + "palm": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506"], + "telos": ["0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506"], + "kava": ["0xc35DADB65012eC5796536bD9864eD8773aBc74C4", "0xbE811A0D44E2553d25d11CB8DC0d3F0D0E6430E6"], + "metis": ["0xc35DADB65012eC5796536bD9864eD8773aBc74C4", "0xaB235da7f52d35fb4551AfBa11BFB56e18774A65"], + "bittorrent": ["0xeae23C766a1B25481025a02B2d82a1DB3FC130Ca"], + }, + }, + { + id: "2190", + name: "Sushi BentoBox", + addresses: { + "ethereum": [ + "0xf5bce5077908a1b7370b9ae04adc565ebd643966", + "0xF70c086618dcf2b1A461311275e00D6B722ef914", + "0x044b75f554b886A065b9567891e45c79542d7357", + "0x7af71799C40F952237eAA4D81A77C1af49125113", + ], + "arbitrum": [ + "0x74c764d41b77dbbb4fe771dab1939b00b146894a", + "0x9c6522117e2ed1fE5bdb72bb0eD5E3f2bdE7DBe0", + "0x9f18658f7206EaA8D885bBfBb95aB6D9f6c6C12F", + ], + "optimism": [ + "0xF0cBce1942A68BEB3d1b73F0dd86C8DCc363eF49", + "0x96E04591579f298681361C6122Dc4Ef405c19385", + "0xD9988b4B5bBC53A794240496cfA9Bf5b1F8E0523", + "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", + ], + "polygon": [ + "0x0319000133d3AdA02600f0875d2cf03D442C3367", + "0x0dc8E47a1196bcB590485eE8bF832c5c68A52f4B", + "0x5097CBB61D3C75907656DC4e3bbA892Ff136649a", + "0x1A52AfDd24994704e61fEC49924d6c5388Ae47fD", + "0x7CD29170e8fA3fE5204624deDE5A66F4e8161741", + ], + "avax": [ + "0x0711B6026068f736bae6B213031fCE978D48E026", + "0xD75F5369724b513b497101fb15211160c1d96550", + "0xbACEB8eC6b9355Dfc0269C18bac9d6E2Bdc29C4F", + "0x400d75dAb26bBc18D163AEA3e83D9Ea68F6c1804", + ], + "bsc": [ + "0xF5BCE5077908a1b7370B9ae04AdC565EBd643966", + "0xD75F5369724b513b497101fb15211160c1d96550", + "0x7cf167390E2526Bc03F3CF6852A7AF1CEC3e243d", + ], + "fantom": [ + "0x3e603C14aF37EBdaD31709C4f848Fc6aD5BEc715", + "0x3D2f8ae0344d38525d2AE96Ab750B83480c0844F", + "0x9e4791ad13f14783C7B2A6A7bD8D6DDD1DC95847", + ], + "arbitrum-nova": ["0xbE811A0D44E2553d25d11CB8DC0d3F0D0E6430E6"], + "boba-avax": ["0x0769fd68dFb93167989C6f7254cd0D766Fb2841F"], + "boba-bnb": ["0x0769fd68dFb93167989C6f7254cd0D766Fb2841F"], + "boba": ["0x0769fd68dFb93167989C6f7254cd0D766Fb2841F"], + "bittorrent": ["0x8dacffa7F69Ce572992132697252E16254225D38"], + "celo": ["0x0711B6026068f736bae6B213031fCE978D48E026"], + "fuse": ["0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904"], + "xdai": ["0xE2d7F5dd869Fc7c126D21b13a9080e75a4bDb324"], + "goerli": ["0xF5BCE5077908a1b7370B9ae04AdC565EBd643966"], + "harmony": ["0x6b2A3FF504798886862Ca5ce501e080947A506A2"], + "heco": ["0xF5BCE5077908a1b7370B9ae04AdC565EBd643966"], + "kava": ["0xc35DADB65012eC5796536bD9864eD8773aBc74C4"], + "metis": ["0xc35DADB65012eC5796536bD9864eD8773aBc74C4"], + "moonbeam": ["0x80C7DD17B01855a6D2347444a0FCC36136a314de"], + "moonriver": ["0x145d82bCa93cCa2AE057D1c6f26245d1b9522E6F"], + }, + }, + { + id: "397", + name: "Shibaswap", + addresses: { + ethereum: ["0x03f7724180aa6b939894b5ca4314783b0b36b329"], + }, + }, + { + id: "221", + name: "Defi Swap", + addresses: { + ethereum: ["0xceb90e4c17d626be0facd78b79c9c87d7ca181b3"], + }, + }, + { + id: "parent#pancakeswap", + name: "Pancakeswap", + addresses: { + ethereum: [ + "0x13f4EA83D0bd40E75C8222255bc855a974568Dd4", // v3 + "0xEfF92A263d31888d860bD50809A8D171709b7b1c", + ], + bsc: [ + "0x13f4EA83D0bd40E75C8222255bc855a974568Dd4", // v3 + "0x10ED43C718714eb63d5aA57B78B54704E256024E", + "0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F", + "0x749fc0E64A3680531d31ACC1dAa8dda0bE438B02", + ], + aptos: ["0xc7efb4076dbe143cbcd98cfaaa929ecfc8f299203dfff63b95ccb6bfe19850fa"], + base: [ + "0x678Aa4bF4E210cf2166753e054d5b7c31cc7fa86", // smartrouter + ], + }, + }, + { + id: "179", + name: "Varen", + addresses: { + ethereum: [ + "0xa7ece0911fe8c60bff9e99f8fafcdbe56e07aff1", + "0x6C0899D124146256a382a9eeB7C8Aca363BcCf46", + "0x8C8FF722DD407bC5e10c098F97DDdAD390f03D58", + ], + }, + }, + { + id: "324", + name: "Unicly", + addresses: { + ethereum: ["0xe6e90bc9f3b95cdb69f48c7bfdd0ede1386b135a"], + arbitrum: ["0xE6E90bC9F3b95cdB69F48c7bFdd0edE1386b135a"], + }, + }, + { + id: "707", + name: "Luaswap", + addresses: { + ethereum: ["0x1d5c6f1607a171ad52efb270121331b3039dd83e"], + tomochain: [], + }, + }, + { + id: "580", + name: "Sashimiswap", + addresses: { + ethereum: ["0xe4fe6a45f354e845f954cddee6084603cedb9410"], + }, + } /* {//added to compoundv2 file "id":"parent#quickswap", "name":"Quickswap", @@ -364,94 +273,78 @@ export default ([ //"Paraswap v5: Augustus Swapper:0xDEF171Fe48CF0115B1d80b88dc8eAB59176FEe57" ] } - },*/ - { - "id":"parent#kyberswap", - "name":"KyberSwap", - "addresses":{ - "ethereum":[ - "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router - "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 - "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83" //Elastic Router - ], - "polygon":[ - "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router - "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 - "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83" //Elastic Router - ], - "avax":[ - "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router - "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 - "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83" //Elastic Router - ], - "bsc":[ - "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router - "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 - "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83" //Elastic Router - ], - "arbitrum":[ - "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router - "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 - "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83" //Elastic Router - ], - "optimism":[ - "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router - "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 - "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83" //Elastic Router - ], - "fantom":[ - "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router - "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 - "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83" //Elastic Router - ], - "cronos":[ - "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router - "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 - "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83" //Elastic Router - ] - - } - }, - { - "id":"parent#balancer", - "name":"Balancer", - "addresses":{ - "ethereum":[ - "0xBA12222222228d8Ba445958a75a0704d566BF2C8" - ], - "arbitrum":[ - "0xBA12222222228d8Ba445958a75a0704d566BF2C8" - ], - "polygon":[ - "0xBA12222222228d8Ba445958a75a0704d566BF2C8" - ], - "xdai":[ - "0xBA12222222228d8Ba445958a75a0704d566BF2C8" - ], - "base":[ - "0xBA12222222228d8Ba445958a75a0704d566BF2C8" - ] - } - }, - { - "id":"1799", - "name":"Velodrome", - "addresses":{ - "optimism":[ - "0x9c12939390052919aF3155f41Bf4160Fd3666A6f", - "0xa132DAB612dB5cB9fC9Ac426A0Cc215A3423F9c9" - ] - } - }, - { - "id":"2685", - "name":"Arbitrum Exchange", - "addresses":{ - "arbitrum":[ - "0x3E48298A5Fe88E4d62985DFf65Dee39a25914975" - ] - } - },/* + },*/, + { + id: "parent#kyberswap", + name: "KyberSwap", + addresses: { + ethereum: [ + "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router + "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 + "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83", //Elastic Router + ], + polygon: [ + "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router + "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 + "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83", //Elastic Router + ], + avax: [ + "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router + "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 + "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83", //Elastic Router + ], + bsc: [ + "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router + "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 + "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83", //Elastic Router + ], + arbitrum: [ + "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router + "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 + "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83", //Elastic Router + ], + optimism: [ + "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router + "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 + "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83", //Elastic Router + ], + fantom: [ + "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router + "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 + "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83", //Elastic Router + ], + cronos: [ + "0x617Dee16B86534a5d792A4d7A62FB491B544111E", //Meta Aggregation Router + "0x6131B5fae19EA4f9D964eAc0408E4408b66337b5", //Meta Aggregation Router v2 + "0xC1e7dFE73E1598E3910EF4C7845B68A9Ab6F4c83", //Elastic Router + ], + }, + }, + { + id: "parent#balancer", + name: "Balancer", + addresses: { + ethereum: ["0xBA12222222228d8Ba445958a75a0704d566BF2C8"], + arbitrum: ["0xBA12222222228d8Ba445958a75a0704d566BF2C8"], + polygon: ["0xBA12222222228d8Ba445958a75a0704d566BF2C8"], + xdai: ["0xBA12222222228d8Ba445958a75a0704d566BF2C8"], + base: ["0xBA12222222228d8Ba445958a75a0704d566BF2C8"], + }, + }, + { + id: "1799", + name: "Velodrome", + addresses: { + optimism: ["0x9c12939390052919aF3155f41Bf4160Fd3666A6f", "0xa132DAB612dB5cB9fC9Ac426A0Cc215A3423F9c9"], + }, + }, + { + id: "2685", + name: "Arbitrum Exchange", + addresses: { + arbitrum: ["0x3E48298A5Fe88E4d62985DFf65Dee39a25914975"], + }, + } /* { "id":"parent#trader-joe", "name":"Trader Joe", @@ -469,2408 +362,2026 @@ export default ([ "0x9A93a421b74F1c5755b83dD2C211614dC419C44b"//Lbrouter ] } - },*/ - { - "id":"2307", - "name":"Camelot", - "addresses":{ - "arbitrum":[ - "0xc873fEcbd354f5A56E00E710B90EF4201db2448d" - ] - } - }, - { - "id":"4372", - "name":"Hercules", - "addresses":{ - "metis":[ - "0x14679D1Da243B8c7d1A4c6d0523A2Ce614Ef027C" - ] - } - }, - { - "id":"parent#thena", - "name":"Thena", - "addresses":{ - "bsc":[ - "0xd4ae6eCA985340Dd434D38F470aCCce4DC78D109", - "0x8f097E07a07Bf2F031E5513f764DaFC6Df58e818" - ] - } - }, - { - "id":"parent#bancor", - "name":"Bancor", - "addresses":{ - "ethereum":[ - "0x2F9EC37d6CcFFf1caB21733BdaDEdE11c823cCB0" - ] - } - }, - { - "id":"302", - "name":"SpookySwap", - "addresses":{ - "fantom":[ - "0x31F63A33141fFee63D4B26755430a390ACdD8a4d" - ] - } - }, - { - "id":"654", - "name":"Beethoven X", - "addresses":{ - "optimism":[ - "0xBA12222222228d8Ba445958a75a0704d566BF2C8" //Vault - ], - "fantom":[ - "0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce" - ] - } - }, - { - "id":"2121", - "name":"Frax Swap", - "addresses":{ - "arbitrum":[ - "0x16e71B13fE6079B4312063F7E81F76d165Ad32Ad" - ], - "ethereum":[ - "0xC14d550632db8592D1243Edc8B95b0Ad06703867" - ], - "optimism":[ - "0xB9A55F455e46e8D717eEA5E47D2c449416A0437F" - ], - "bsc":[ - "0x67F755137E0AE2a2aa0323c047715Bf6523116E5" - ], - "polygon":[ - "0x67F755137E0AE2a2aa0323c047715Bf6523116E5" - ], - "avax":[ - "0x5977b16AA9aBC4D1281058C73B789C65Bf9ab3d3" - ], - "fantom":[ - "0x7D21C651Dd333306B35F2FeAC2a19FA1e1241545" - ], - "boba":[ - "" - ], - "harmony":[ - "" - ], - "aurora":[ - "" - ], - "evmos":[ - "" - ], - "moonbeam":[ - "" - ], - "dogechain":[ - "" - ], - "moonriver":[ - "" - ] - - } - }, - { - "id":"2169", - "name":"BabyDogeSwap", - "addresses":{ - "bsc":[ - "0xC9a0F685F39d05D835c369036251ee3aEaaF3c47" - ] - } - }, - { - "id":"parent#zyberswap", - "name":"Zyberswap", - "addresses":{ - "arbitrum":[ - "0xFa58b8024B49836772180f2Df902f231ba712F72", - "0x16e71B13fE6079B4312063F7E81F76d165Ad32Ad" - ] - } - }, - { - "id":"246", - "name":"Pangolin", - "addresses":{ - "avax":[ - "0xE54Ca86531e17Ef3616d22Ca28b0D458b6C89106" - ] - } - }, - { - "id":"1883", - "name":"iziSwap", - "addresses":{ - "arbitrum":[ - "0x1CB60033F61e4fc171c963f0d2d3F63Ece24319c" - ], - "polygon":[ - "0x879bF5D67fAB468879618AcD69E85C02E33b1c0B" - ], - "bsc":[ - "0xBd3bd95529e0784aD973FD14928eEDF3678cfad8" - ], - "aurora":[ - "" - ], - "telos":[ - "" - ], - "era":[ - "" - ], - "ethereumclassic":[ - "" - ], - "meter":[ - "" - ], - "cronos":[ - "" - ] - } - }, - { - "id":"1700", - "name":"Wombat Exchange", - "addresses":{ - "bsc":[ - "0x19609B03C976CCA288fbDae5c21d4290e9a4aDD7", - "0x312Bc7eAAF93f1C60Dc5AfC115FcCDE161055fb0", - "0xE2C07d20AF0Fb50CAE6cDD615CA44AbaAA31F9c8", - "0x489833311676B566f888119c29bd997Dc6C95830", - "0x04D4e1C1F3D6539071b6D3849fDaED04d48D563d" - ], - "arbitrum":[ - "0xc4B2F992496376C6127e73F1211450322E580668", - "0x9da4edBed6068666ea8EF6505C909e1ff8eA5725", - "0x62A83C6791A3d7950D823BB71a38e47252b6b6F4", - "0x3f90a5a47364c0467031fB00246192d40E3D2D9D" - ], - } - }, - { - "id":"2675", - "name":"Ramses Exchange", - "addresses":{ - "arbitrum":[ - "0xAAA87963EFeB6f7E0a2711F397663105Acb1805e" - ] - } - },/* - { - "id":"parent#apeswap", - "name":"ApeSwap", - "addresses":{ - "ethereum":[ - "0x5f509a3C3F16dF2Fba7bF84dEE1eFbce6BB85587" - ], - "polygon":[ - "0xcF0feBd3f17CEf5b47b0cD257aCf6025c5BFf3b7" - ], - "bsc":[ - "0xcF0feBd3f17CEf5b47b0cD257aCf6025c5BFf3b7", - ], - "arbitrum":[ - "0x7d13268144adcdbEBDf94F654085CC15502849Ff" - ], - "telos":[ - "0xb9667Cf9A495A123b0C43B924f6c2244f42817BE" - ] - } - },*/ - { - "id":"2332", - "name":"Equalizer Exchange", - "addresses":{ - "fantom":[ - "0x1A05EB736873485655F29a37DEf8a0AA87F5a447" - ] - } - }, - { - "id":"2528", - "name":"SolidLizard", - "addresses":{ - "arbitrum":[ - "0xF26515D5482e2C2FD237149bF6A653dA4794b3D0" - ] - } - }, - { - "id":"944", - "name":"Platypus Finance", - "addresses":{ - "avax":[ - "0x7d7E30E269b7C7b447312d3FDE52e6f118F8e39e", - "0x73256EC7575D999C360c1EeC118ECbEFd8DA7D12", - "0x6f6FCbcc00f9AFBD2C266631087798740c685C3B" - ] - } - }, - { - "id":"334", - "name":"MDEX", - "addresses":{ - "bsc":[ - "0x7DAe51BD3E3376B8c7c4900E9107f12Be3AF1bA8", - "0x62c1A0d92B09D0912F7BB9c96C5ecdC7F2b87059", - "0x0384E9ad329396C3A6A401243Ca71633B2bC4333", - "0x518a6e9FB2832aDA41415775E5c45dE6EfCF1A3C", - ], - "heco":[""] - } - }, - { - "id":"2108", - "name":"W3swap", - "addresses":{ - "bsc":[ - "0xF29acE1FE5f36389d0dDe450a0195A30c3770245" - ] - } - },/* - { - "id":"238", - "name":"Ellipsis Finance", - "addresses":{ - "bsc":[ - "0xE014A89c9788dAfdE603a13F2f01390610382471" - ] - } - },*/ - { - "id":"1726", - "name":"Meshswap", - "addresses":{ - "polygon":[ - "0x10f4A785F458Bc144e3706575924889954946639" - ] - } - }, - { - "id":"2695", - "name":"SmarDex", - "addresses":{ - "ethereum":[ - "0x9a5132e149c547F254C73226DA7f770d43D9EA44" - ], - "base":[ - "0x5C622Dcc96b6D96ac6c154f99CF081815094CBC9", //SmardexRouter - ], - "arbitrum":[ - "0xdd4536dD9636564D891c919416880a3e250f975A", //SmardexRouter - ], - "polygon":[ - "0xA8EF6FEa013034E62E2C4A9Ec1CDb059fE23Af33", //SmardexRouter - ], - "bsc":[ - "0x391BeCc8DAaf32b9ba8e602e9527Bf9DA04C8deb", //SmardexRouter - ] - } - }, - { - "id":"318", - "name":"Dfyn Network", - "addresses":{ - "polygon":[ - "0x5ac32A20a5BB6B87AC91E51cA5b7bba9B8846803", - "0xA102072A4C07F06EC3B4900FDC4C7B80b6c57429", - "0x712B5c4CEe26c679F3Ddbb9855369B13aA8F3Dec" - ], - "fantom":[ - "0x2724B9497b2cF3325C6BE3ea430b3cec34B5Ef2d" - ], - "okexchain":[ - "" - ] - } - },/* - { - "id":"133", - "name":"Shell Protocol", - "addresses":{ - "arbitrum":[ - "0xC32eB36f886F638fffD836DF44C124074cFe3584" - ] - } - },*/ - { - "id":"2644", - "name":"Maverick Protocol", - "addresses":{ - "ethereum":[ - "0x001903de96a72d11d27cd8c2bee003a730e032a8", - "0x050853d20d1b4f5529cd8dec986b752e7c9d95f7", - "0x0ce176e1b11a8f88a4ba2535de80e81f88592bad", - "0x0eb1c92f9f5ec9d817968afddb4b46c564cdedbe", - "0x11a653ddfbb61e0feff5484919f06d9d254bf65f", - "0x12378796271f2c5fb1a3206525c4b49a204a8487", - "0x14b0fdd73e47fac12d98182c0fd1054f362262a6", - "0x1970523c241756e24d546dc4bfffc1f436ab9671", - "0x1db8784119dcfe4213a0ceb2c55b07e81c72b475", - "0x1dc08fb758c89db0d81da0924ea4ba884b68564c", - "0x20ee9efe1b85b3077c53d648b17936d4ddb4e407", - "0x214b0b7d3c925b7710601e437aec942b5cbd8d48", - "0x23f6b8a4093d740a5f39d20a1f543e4b26b7791a", - "0x257b0a09d1f4b5913f9c813c43dcd0d0115af2f2", - "0x25f159fd4b15a2a7a9703ca83d0e63df9eeb0a65", - "0x2ebe19aa2e29c8acadb14be3e7de153b0141e2aa", - "0x2f3e9cd12dc8eee8c7fea0383ab877b6bead56ab", - "0x352b186090068eb35d532428676ce510e17ab581", - "0x3fd899eaf2dda35cf2c7bfcdb27a23d727d9a67c", - "0x43a81f1e714f12147e5e865c152c6aac14c80bff", - "0x43c014e1e6afeb8a76fde2420a0b65e1ca06c9bf", - "0x44f0f76cfbafc2b9b3ad000d588897d1e5381068", - "0x46557085e28bcc6d8f653a9ee84c6c9b67642b93", - "0x4789fad0cf791fec659256900074b80c89c47edd", - "0x48e236fa378ffeaf86443b6a304ce5670c3cd9ab", - "0x496d3fe47211521eca1fff521d1f8022b0287c9f", - "0x4a94f0a97615f0bccbc09968b1c49c9ae1eb38a8", - "0x4efec7ada76685a521278407d9fcf58b8c6e8774", - "0x52de4ebf8bfb4048f412bcb415a52cb98651f9ed", - "0x53dc703b78794b61281812f3a901918253beefee", - "0x55095300bdcb3026b48b4ad05a5feaaba801aac9", - "0x5cb98367c32d8a1d910461c572c558d57ca68d25", - "0x5eef9ab433f598d408ec30adf58d182a07a1189d", - "0x6b04ce6e4d728a97bafd1c78f8ea46b73ada552d", - "0x6c6fc818b25df89a8ada8da5a43669023bad1f4c", - "0x7064a1ea78961ef05a510e86540235a4a2e64ca4", - "0x7174c5aadc47e0b706c333467d2a3b126eb6ed15", - "0x73ee7d74a1fe9d768112ba40549bc9c2003f9b63", - "0x757caf1bd60b4e16d6b91f03169a66149306de7a", - "0x7a2b6d8325c3912939229272256769b06cedb1b2", - "0x7fafd253ea3f8351e02135b8f0d4ed31a6e7a59d", - "0x857d1b4f80ecb6ad7e4e7d120ffc1292ee8ddafc", - "0x85dd09159b42417c1e0782fa2c6ba3b790be9ead", - "0x87da68bfbaf58ba6a29fed851f0411e7c989b68b", - "0x991322ee666ec384eeb31bbd97b4dc0c2df14ce1", - "0x99903bb64e9c1e54a10723afa7f9a094c9f783c8", - "0xa2cc3e531f49e6e1b0e360f371e6171f5aeaec91", - "0xa495a38ea3728ac29096c86ca30127003f33af28", - "0xa53620f536e2c06d18f02791f1c1178c1d51f955", - "0xa7b1d843ae0c0e5e561149d7624f9e469fcacf4d", - "0xab1e2d29699146a2e07c3a1c8ad8cb914a536f7a", - "0xaf29b974b47d900bc6746bf9979be8edc8790a20", - "0xb04f13750cd764eeceb07e19254564787c9c72bf", - "0xba7f8b8cf0f13f8d90d4e364d43a3ddd57f39da0", - "0xbe633b67d7d4197b798179066b503ecd9c04d05b", - "0xbfe59fd293c4c19487a20178f384be62867bf875", - "0xc27f074873af25378270cc50b9854cf7a013eab6", - "0xcb2e6adc815195069977692de2f6e22e920a6b1b", - "0xccb606939387c0274aaa2426517da315c1154e50", - "0xcf4595ae4e43bc8c7be90849babc1da27e47813c", - "0xd1e50b60287faada2a7d5ea5632df78f7f2f0cb8", - "0xddcd60dcc952023ec4bcd27788384f06e901e61e", - "0xe1f9a04aeaf788b1494721317c812145dcef2359", - "0xe870c025ede621834f538468034398cff26ac926", - "0xe8d7a52aabe8a0569314f28e90fdb8544860a424", - "0xe94f1ec6aaaba70e109535f88d0c836ce044fd16", - "0xeab253203605d0b2ca7bde2157009d121cffdd27", - "0xeb061a4e1ad3f1983655281cb8019ebbf8b30b29", - "0xeb0f2c77ee979adb69f718b4027d3783b27b0f9e", - "0xebac4a08dbe9b33320f73b7bc8c3559ff042a9d9", - "0xedf1335a6f016d7e2c0d80082688cd582e48a6fc", - "0xf4b0e6fad7443fbb7bbfea7dc1cbe7bf7e574b03", - "0xf59ce000475cc3962cd366ce05ea2fd6fea5b8aa", - "0xf7c3d9615221dfa89a835ec5d56dea2990eae54a", - "0xf7c8ab6912894393e6ee9c0222c672a4441dfea2", - "0xf8fb2d6bb43f6a422bc1e2a15b0f85afce7e7f05", - "0xfc0c52a2b66a19b39efbe4332bc42186ada1ee45", - "0xff3074fd3bccc15b54d2c7fbfe48108a6116a321" - ], - "era":[ - "0x39E098A153Ad69834a9Dac32f0FCa92066aD03f4", - "0x02E3B9d5462e84518E309116D547c8C772a1C852" - ] - } - }, - { - "id":"597", - "name":"BabySwap", - "addresses":{ - "bsc":[ - "0x325E343f1dE602396E256B67eFd1F61C3A6B38Bd" - ] - } - }, - { - "id":"parent#mm-finance", - "name":"MM Finance", - "addresses":{ - "cronos":[ - "" - ], - "polygon":[ - "0x7E5E5957De93D00c352dF75159FbC37d5935f8bF" - ], - "arbitrum":[ - "0x4F879a9d95e01041dDAA607A65F04e0EDbD04139", - "0x20AB386813F59B92e1C4596f22591bEe92935d83",//v3smartrouter - "0x611c9F2f536E087BE7d0F02D9F99e5CE9b7E175B" - ] - } - }, - { - "id":"2400", - "name":"Solidly V2", - "addresses":{ - "ethereum":[ - "0x77784f96C936042A3ADB1dD29C91a55EB2A4219f" - ] - } - }, - { - "id":"622", - "name":"Clipper", - "addresses":{ - "ethereum":[ - "0xE7b0CE0526fbE3969035a145C9e9691d4d9D216c" - ], - "arbitrum":[ - "0xE7b0CE0526fbE3969035a145C9e9691d4d9D216c", - "0x9E233DD6a90678BaaCd89c05ce5C48f43fCc106E" - ], - "optimism":[ - "0x5130f6cE257B8F9bF7fac0A0b519Bd588120ed40", //ClipperPackedVerifiedExchange - "0xF33141BC4E9D1d92a2Adba2fa27A09c2DA2AF3eB" //ClipperPermitRouter - ], - "polygon":[ - "0x6Bfce69d1Df30FD2B2C8e478EDEC9dAa643Ae3B8", - "0xF33141BC4E9D1d92a2Adba2fa27A09c2DA2AF3eB" //ClipperPermitRouter - ], - "moonbeam":[ - "0xCE37051a3e60587157DC4c0391B4C555c6E68255" - ], - "mantle":[ - "0x769728b5298445BA2828c0f3F5384227fbF590C5" //ClipperPackedVerifiedExchange - ] - } - }, - { - "id":"1732", - "name":"Verse", - "addresses":{ - "ethereum":[ - "0xB4B0ea46Fe0E9e8EAB4aFb765b527739F2718671" - ], - "smartbch":[ - "" - ] - } - }, - { - "id":"2283", - "name":"3xcalibur", - "addresses":{ - "arbitrum":[ - "0x8e72bf5A45F800E182362bDF906DFB13d5D5cb5d" - ] - } - }, - { - "id":"311", - "name":"SpiritSwap AMM", - "addresses":{ - "fantom":[ - "0x16327E3FbDaCA3bcF7E38F5Af2599D2DDc33aE52" - ] - } - }, - { - "id":"602", - "name":"BakerySwap", - "addresses":{ - "bsc":[ - "0xCDe540d7eAFE93aC5fE6233Bee57E1270D3E330F" - ] - } - }, - { - "id":"942", - "name":"KnightSwap Finance", - "addresses":{ - "bsc":[ - "0x05E61E0cDcD2170a76F9568a110CEe3AFdD6c46f" - ], - "fantom":[ - "0x045312C737a6b7a115906Be0aD0ef53A6AA38106" - ] - } - }, - { - "id":"1461", - "name":"WOOFi Swap", - "addresses":{ - "fantom":[ - "0x382A9b0bC5D29e96c3a0b81cE9c64d6C8F150Efb" - ], - "avax":[ - "0xC22FBb3133dF781E6C25ea6acebe2D2Bb8CeA2f9" - ], - "arbitrum":[ - "0x9aEd3A8896A85FE9a8CAc52C9B402D092B629a30" - ], - "bsc":[ - "0xC90bFE9951a4Efbf20aCa5ECd9966b2bF8A01294" - ], - "optimism":[ - "0xEAf1Ac8E89EA0aE13E0f03634A4FF23502527024" - ], - "polygon":[ - "0x817Eb46D60762442Da3D931Ff51a30334CA39B74" - ], - "ethereum":[ - "0x9D1A92e601db0901e69bd810029F2C14bCCA3128" - ] - } - }, - { - "id":"863", - "name":"Yoshi Exchange", - "addresses":{ - "bsc":[ - "0x3a547932e0818403b39fD2453AE74c9004FB902E" - ], - "fantom":[ - "0xE4a4642B19C4d0CBA965673cd51422b1EDA0a78d" - ], - "ethereum":[ - "0x3aB65d9C1616FF780e1853330a219497CF5D9B67" - ] - } - }, - { - "id":"271", - "name":"Honeyswap", - "addresses":{ - "polygon":[ - "0xaD340d0CD0B117B0140671E7cB39770e7675C848" - ], - "xdai":[ - "" - ] - } - }, - { - "id":"2129", - "name":"Tomb Swap", - "addresses":{ - "fantom":[ - "0x6D0176C5ea1e44b08D3dd001b0784cE42F47a3A7" - ] - } - }, - { - "id":"1351", - "name":"WigoSwap", - "addresses":{ - "bsc":[ - "0x5023882f4D1EC10544FCB2066abE9C1645E95AA0" - ] - } - }, - { - "id":"2603", - "name":"AlienFi", - "addresses":{ - "arbitrum":[ - "0x863e9610E9E0C3986DCc6fb2cD335e11D88f7D5f", - "0xB8ca857dCd90AfBeD93B30DdCd4E4CC1327c9e5c", - "0xbd796fac59914dB9A7CBC21f1053c7DC1b900fEA",//masterchef - "0x8923d3EFEE38e7bb1E8988B024D5169C962CFB73",//masterchef - "0x4Ad7C3F11ec54d7D066dd114ac403022d3F97E6F",//masterchef - ] - } - }, - { - "id":"373", - "name":"BiSwap", - "addresses":{ - "bsc":[ - "0x3a6d8cA21D1CF76F653A67577FA0D27453350dD8" - ] - } - }, - { - "id":"1823", - "name":"Nomiswap", - "addresses":{ - "bsc":[ - "0xD486D0846812266D21e1Ab6c57FCF202DF836dc8", - "0xD654953D746f0b114d1F85332Dc43446ac79413d", - "0x9D15d0d737e06a875F3d46621fB52fe79ffA6136", - "0x4eC3432d9443f05022e2Ff4E54fC7514BE2359e0", - "0xbF4c0d66Db59Ae8276e0cB7E1Ed36fC4Ac8C1d68" - ] - } - }, - { - "id":"1295", - "name":"BurgerSwap", - "addresses":{ - "bsc":[ - "0xe08Ab553720a46C071475838a6cC8D98D1Afb891", - "0xEfC254D0cdb1924149382d404A2133532D46A777", - "0xfa9cCB91d28d35E12216e43d8990D31595783600", - "0xE3F08e81Ec8533D6CD7784B672e4237087b2A7c8" - ] - } - }, - { - "id":"2102", - "name":"Titano Swych", - "addresses":{ - "bsc":[ - "0x2Bf55D1596786F1AE8160e997D655DbE6d9Bca7A" - ] - } - }, - { - "id":"parent#arbswap", - "name":"Arbswap", - "addresses":{ - "arbitrum":[ - "0xD01319f4b65b79124549dE409D36F25e04B3e551" - ], - "arbitrum_nova":[] - } - }, - { - "id":"parent#polycat-finance", - "name":"Polycat Finance", - "addresses":{ - "polygon":[ - "0x94930a328162957FF1dd48900aF67B5439336cBD", - "0xfDC8579B2E19B489c4086eDE85A2D71949138be5",//tankchef - "0xfaBC099AD582072d26375F65d659A3792D1740fB",//tankchef - ] - } - }, - { - "id":"2384", - "name":"OreoSwap", - "addresses":{ - "arbitrum":[ - "0x38eEd6a71A4ddA9d7f776946e3cfa4ec43781AE6" - ] - } - }, - { - "id":"1824", - "name":"Swapsicle", - "addresses":{ - "arbitrum":[ - "0x3D42A6B7cD504cA2283Bc8F37fea859a11Ca89fb" - ], - "ethereum":[ - "0x3D42A6B7cD504cA2283Bc8F37fea859a11Ca89fb" - ], - "avax":[ - "0xC7f372c62238f6a5b79136A9e5D16A2FD7A3f0F5" - ], - "polygon":[ - "0x0427B42bb6ae94B488dcf549B390A368F8F69058" - ], - "bsc":[ - "0x63530632e8fE40aCf8f1f4324f7645256263b64f" - ], - "optimism":[ - "0x3D42A6B7cD504cA2283Bc8F37fea859a11Ca89fb" - ], - "fantom":[ - "0x422770Fcf2217AF03b4832e9f1F4Bd23946F828b" - ], - "telos":[ - "0x9b1adec00a25fffd87a5bb17f61916e1c26f6844" - ] - } - }, - { - "id":"2350", - "name":"KyotoSwap", - "addresses":{ - "bsc":[ - "0x9fd7764e2303E7748736D115304350eC64E403B2" - ] - } - }, - { - "id":"2101", - "name":"FstSwap", - "addresses":{ - "bsc":[ - "0xB3ca4D73b1e0EA2c53B42173388cC01e1c226F40" - ] - } - }, - { - "id":"2751", - "name":"LFGSwap", - "addresses":{ - "arbitrum":[ - "0xF83675ac64a142D92234681B7AfB6Ba00fa38dFF" - ], - "ethpow":[], - "core":[] - } - }, - { - "id":"2166", - "name":"LFGSwap EthereumPoW", - "addresses":{ - "ethpow":[] - } - }, - { - "id":"2647", - "name":"LFGSwap Core", - "addresses":{ - "core":[] - } - },/* - {//listed on compound-v2 users file - "id":"387", - "name":"Bearn", - "addresses":{ - "bsc":[ - "0xC6747954a9B3A074d8E4168B444d7F397FeE76AA", - "0x3d695c1607a085773547e07dEf1aD3CE3f518Edb",//bearnchef - ] - } - },*/ - { - "id":"659", - "name":"JetSwap", - "addresses":{ - "bsc":[ - "0xBe65b8f75B9F20f4C522e0067a3887FADa714800" - ] - } - }, - { - "id":"2749", - "name":"Antfarm finance", - "addresses":{ - "ethereum":[ - "0x6d9f0eb21d77c6d24be49a579508471e937d5418" - ], - "arbitrum":[ - "0x1272ba8c0bd855ff15c4b29bad660e6f154fca28" - ], - "polygon_zkevm":[ - "0x61f4ECD130291e5D5D7809A112f9F9081b8Ed3A5" - ] - } - }, - { - "id":"2763", - "name":"Dove Swap", - "addresses":{ - "polygon_zkevm":[ - "0xc4212b4f901C8Afac75A27C8E8be7b9fa82D74d8" - ] - } - }, - { - "id":"2762", - "name":"Dove Swap", - "addresses":{ - "polygon_zkevm":[ - "0xc4212b4f901C8Afac75A27C8E8be7b9fa82D74d8" - ] - } - }, - { - "id":"561", - "name":"Alita Finance", - "addresses":{ - "bsc":[ - "0x730aCC3bBf2443f2EaEaCFc7ac7b4d8DC9E32dB8", - "0x4f7b2Be2bc3C61009e9aE520CCfc830612A10694", - "0x28162cda1E767663F68B759AF47801171Aa58815",//incentive - "0x8ED5fABddb6f899f7FaCf461587f4dAd065AAae7",//masterchef - ] - } - }, - { - "id":"2333", - "name":"Alita Finance", - "addresses":{ - "bsc":[ - "0xbd67d157502A23309Db761c41965600c2Ec788b2" - ] - } - }, - { - "id":"2118", - "name":"WinerySwap", - "addresses":{ - "bsc":[ - "0xB115C8392C4C416b227e98d9bbb394bFD03BE965", - "0x8B07c6CB1b2edA3942369EEC9DF8e12213f99181", - "0x8bfFB5562ff30f555894E101E6DAD31D271EEd5a", - "0xBd27399a5aA720250b37b6864F293A27F3D2A043",//masterchef - "0x21694642bea2D2E0B0f5129a25D753dd9fB9623A",//masterchef - ] - } - }, - { - "id":"317", - "name":"HyperJump", - "addresses":{ - "bsc":[ - "0x3bc677674df90A9e5D741f28f6CA303357D0E4Ec" - ], - "fantom":[ - "0x53c153a0df7E050BbEFbb70eE9632061f12795fB" - ], - "metis":[ - "0xd96aeE439e6e5B4f3544bF105eb78F3b8B6CD774" - ] - } - }, - { - "id":"2429", - "name":"Paraluni Dex", - "addresses":{ - "bsc":[ - "0xb3ca41D538998f884D9f8cE33703A7f49F112E98" - ] - } - }, - { - "id":"575", - "name":"Coinswap Space", - "addresses":{ - "bsc":[ - "0x34DBe8E5faefaBF5018c16822e4d86F02d57Ec27" - ] - } - }, - { - "id":"544", - "name":"SoulSwap", - "addresses":{ - "fantom":[ - "0x6b3d631B87FE27aF29efeC61d2ab8CE4d621cCBF", - "0x994889A5a2BcfAB67e5242996e1331b74d777834", - "0x2CDa3B64Da9c1b7F18891E1567bc43eD558D089b" - ], - "avax":[ - "0xa4594460A9d3D41e8B85542D34E23AdAbc3c86Ef", - "0xE15d319896038aB76f2bc7cE15CBc2689b498570" - ] - } - }, - { - "id":"695", - "name":"Dinosaur Eggs", - "addresses":{ - "bsc":[ - "0xE9C7650b97712C0Ec958FF270FBF4189fB99C071" - ] - } - }, - { - "id":"1306", - "name":"ProtoFi", - "addresses":{ - "fantom":[ - "0xF4C587a0972Ac2039BFF67Bc44574bB403eF5235" - ] - } - }, - { - "id":"1893", - "name":"MIND Games", - "addresses":{ - "arbitrum":[ - "0x750eD5cF0f5278be9C6562399f0791dD221C4f83" - ] - } - }, - { - "id":"595", - "name":"Convergence", - "addresses":{ - "ethereum":[ - "0x8Cda39226daf33ae1Aba0C92C34d1a1982Cf0210", - "0x37c7C2ae51E968CEfB82cFF2102727256D36D6eE" - ], - "moonbeam":[] - } - }, - { - "id":"367", - "name":"PinkSwap", - "addresses":{ - "bsc":[ - "0x319EF69a98c8E8aAB36Aea561Daba0Bf3D0fa3ac" - ] - } - }, - { - "id":"867", - "name":"GIBXSwap", - "addresses":{ - "bsc":[ - "0x2fB9Cee9d580cD12E671b8789F2f9fb228A5d2bc" - ] - } - }, - { - "id":"2577", - "name":"Sharky Swap", - "addresses":{ - "arbitrum":[ - "0x29631E68d81b0e02a507f54a799402E8Cfa6a4d8" - ] - } - }, - { - "id":"2203", - "name":"Tetu Swap", - "addresses":{ - "polygon":[ - "0xBCA055F25c3670fE0b1463e8d470585Fe15Ca819" - ] - } - }, - { - "id":"384", - "name":"Firebird", - "addresses":{ - "polygon":[ - "0xb31D1B1eA48cE4Bf10ed697d44B747287E785Ad4" - ], - "avax":[ - "0xe0C38b2a8D09aAD53f1C67734B9A95E43d5981c0" - ], - "arbitrum":[ - "0x0c6134Abc08A1EafC3E2Dc9A5AD023Bb08Da86C3" - ], - "dogechain":[ - "0xe0C38b2a8D09aAD53f1C67734B9A95E43d5981c0" - ], - "bsc":[ - "0x92e4F29Be975C1B1eB72E77De24Dccf11432a5bd" - ], - "cronos":[ - "0x4A5a7331dA84d3834C030a9b8d4f3d687A3b788b" - ], - "ethereum":[ - "0xe0C38b2a8D09aAD53f1C67734B9A95E43d5981c0" - ], - "fantom":[ - "0xe0C38b2a8D09aAD53f1C67734B9A95E43d5981c0" - ], - "optimism":[ - "0x0c6134Abc08A1EafC3E2Dc9A5AD023Bb08Da86C3" - ] - } - }, - { - "id":"421", - "name":"Paint Swap", - "addresses":{ - "fantom":[ - "0xfD000ddCEa75a2E23059881c3589F6425bFf1AbB" - ] - } - }, - { - "id":"1349", - "name":"Degen Haus", - "addresses":{ - "fantom":[ - "0xC681174dc7639305d762E016cD3aFf93219D6cc1" - ] - } - }, - { - "id":"473", - "name":"Baguette", - "addresses":{ - "avax":[ - "0xF7b1e993d1b4F7348D64Aa55A294E4B74512F7f2" - ] - } - }, - { - "id":"429", - "name":"BambooDeFi", - "addresses":{ - "bsc":[ - "0xBA9DF2c143C502A433d6A876C1a291C9FC940cf9" - ] - } - }, - { - "id":"978", - "name":"ChickenSwap", - "addresses":{ - "ethereum":[ - "0xB72F87Df6B5C004227B6a045fD451cb716669150" - ] - } - }, - { - "id":"976", - "name":"WingSwap", - "addresses":{ - "fantom":[ - "0x2b660040b289B1B570E053b21dd9A6F1067AD7F5" - ] - } - }, - { - "id":"692", - "name":"HurricaneSwap", - "addresses":{ - "avax":[ - "0xb9a9BB6CC39387548BAA7185fbFf51d47eef8771", - "0xB6559dD3cBec057078fBd9477e676a24cCEA0609", - "0x010D464fE46ABA2FB468a4BB251248d669C67c72" - ] - } - }, - { - "id":"293", - "name":"Lydia", - "addresses":{ - "avax":[ - "0xA52aBE4676dbfd04Df42eF7755F01A3c41f28D27" - ] - } - }, - { - "id":"2687", - "name":"OpenXswap", - "addresses":{ - "optimism":[ - "0x744776F27080b584D447A780ba260c435f3aE7d5", - "0x6e0CEf87B1D55ec54d657f0aDA04AE2c90A470bA" - ] - } - }, - { - "id":"815", - "name":"PureSwap", - "addresses":{ - "bsc":[ - "0x3e8743B5453A348606111AB0a4dEe7F70A87f305" - ] - } - }, - { - "id":"391", - "name":"PantherSwap", - "addresses":{ - "bsc":[ - "0xf5048C225a0D220cd784D81f4e07F137fAf35FF8", - "0x24f7C33ae5f77e2A9ECeed7EA858B4ca2fa1B7eC" - ] - } - }, - { - "id":"396", - "name":"Polydex", - "addresses":{ - "polygon":[ - "0xC60aE14F2568b102F8Ca6266e8799112846DD088", - "0x5a56cB06d143a7cC0597c4804D5D76f2d5c2be81", - "0x512Ff58276046636590767B88f418DD84E47ce78", - "0x56A0b8BA16A84959541CcB3F42E7A9a9d16428F4" - ] - } - }, - { - "id":"1871", - "name":"HunnySwap", - "addresses":{ - "avax":[ - "0x8685aBD6959745E41D64194F42e21bbD25Fd57B3" - ] - } - }, - { - "id":"289", - "name":"YetiSwap", - "addresses":{ - "avax":[ - "0x262DcFB36766C88E6A7a2953c16F8defc40c378A" - ] - } - }, - { - "id":"287", - "name":"0.exchange", - "addresses":{ - "avax":[ - "0x85995d5f8ee9645cA855e92de16FA62D26398060" - ], - "bsc":[ - "0xba79bf6D52934D3b55FE0c14565A083c74FBD224" - ], - "polygon":[ - "0x9894B0F28CcfA0F5c5F74EAC88f161110C5F8027" - ] - } - }, - { - "id":"2098", - "name":"Muffin", - "addresses":{ - "ethereum":[ - "0xded07E2da859714F69d93f9794344606Ed67907E" - ] - } - }, - { - "id":"532", - "name":"Twindex", - "addresses":{ - "bsc":[ - "0x6B011d0d53b0Da6ace2a3F436Fd197A4E35f47EF", - "0xBCB41906bE2C2724A8CD0dec87512B2463535586", - "0xdd3565Bd68ef6882657fB17BCD66b436f819eBF3" - ] - } - }, - { - "id":"471", - "name":"Complus Network", - "addresses":{ - "avax":[ - "0x78c18E6BE20df11f1f41b9635F3A18B8AD82dDD1" - ], - "bsc":[ - "0x07DC75E8bc57A21A183129Ec29bbCC232d79eE56" - ], - "polygon":[ - "0x07DC75E8bc57A21A183129Ec29bbCC232d79eE56" - ], - "heco":[] - } - }, - { - "id":"2779", - "name":"ZenithSwap", - "addresses":{ - "arbitrum":[ - "0x8CA9EF098F84ceDa319Ec12B9d21EeF50AA3624C" - ] - } - }, - { - "id":"2863", - "name":"SaitaSwap", - "addresses":{ - "ethereum":[ - "0x0c17e776CD218252ADFca8D4e761D3fe757e9778", - "0x744A4c9c9F40A443ac2A5747D4f3b773e5d86763" - ], - "bsc":[ - "0x744A4c9c9F40A443ac2A5747D4f3b773e5d86763" - ] - } - }, - { - "id":"parent#skullswap", - "name":"SkullSwap", - "addresses":{ - "fantom":[ - "0x0A239A1fC3Bb5abc6F06ad950e52996308E8E925", - "0xe8E357B75823D1Cc133ED7265a27BC2D9237527c", - "0xA4C5457Eca4E36db9062871631351eF627146044", - "0x6d6E00B42c599ad8F70b2C006ad5135bF93Eb396" - ] - } - }, - { - "id":"2846", - "name":"Solisnek Finance", - "addresses":{ - "avax":[ - "0xeeee17b45E4d127cFaAAD14e2710489523ADB4d8" - ] - } - }, - { - "id":"2803", - "name":"Native", - "addresses":{ - "ethereum":[ - "0x7A27BBD83b5065eEFf85411DFE048Eaac9be2A9D", - "0xF1aF55CC38A92A3b072D05e146E27c2E75bB8F2D" - ], - "bsc":[ - "0x7A27BBD83b5065eEFf85411DFE048Eaac9be2A9D", - "0x83B9fcea670d66626d9db79Af00fc718014C3de8" - ] - } - }, - { - "id":"2821", - "name":"Hamburger Finance", - "addresses":{ - "arbitrum":[ - "0xE5e5Cd7685755BF4c82137639d75b068ed657384" - ] - } - }, - { - "id":"2812", - "name":"Forge SX Trade", - "addresses":{ - "arbitrum":[ - "0xE5e5Cd7685755BF4c82137639d75b068ed657384" - ] - } - }, - { - "id":"2806", - "name":"AstroFi", - "addresses":{ - "ethereum":[ - "0x42c76F3BBC2E4d505420fE5bda4C316fA5234624" - ] - } - }, - { - "id":"2773", - "name":"Auragi Finance", - "addresses":{ - "arbitrum":[ - "0x0FaE1e44655ab06825966a8fCE87b9e988AB6170" - ] - } - }, - { - "id":"2757", - "name":"Glacier Finance", - "addresses":{ - "avax":[ - "0xC5B8Ce3C8C171d506DEb069a6136a351Ee1629DC" - ] - } - }, - { - "id":"2731", - "name":"Swapline", - "addresses":{ - "fantom":[ - "0xb2755FeEc193a718f6135351057a63b2F7B95cef", - "0xFC33f3cac9f6d1713a4B7787dF6a9a33bAD244d6", - "0x795bF60522F36244E4e51ed5522fE83Df4D3Bf9a" - ] - } - }, - { - "id":"2721", - "name":"Flair Dex", - "addresses":{ - "avax":[ - "0xd79eE05678241C16e6195b9FC0bCc778A02d4324", - "0xBfC8f125CFce29789500987A9553395E84bDfDD2" - ] - } - }, - /* - { //uses firebird router to swap - "id":"2720", - "name":"Satin Exchange", - "addresses":{ - "polygon":[ - "0xb31D1B1eA48cE4Bf10ed697d44B747287E785Ad4"//firebird router - ] - } - },*/ - /*{ // commented due to inactive project/returning error - "id":"392", - "name":"WardenSwap", - "addresses":{ - "bsc":[ - "0x451ef8D6B645a60115EB8b8bEa76B39C0C761004", - "0x71ac17934b60A4610dc58b715B61e45DCBdE4054", - ], - "ethereum":[ - "0x39f97198c5DbC193EB962c4B3B7e447091A18eAB" - ], - "avax":[ - "0x5EF960Eb78B8CFc11e654D03BeEB313BaDF5C7C0" - ], - "arbitrum":[ - "0x79A556ef2c5b613dB3DFa8797E6772c5AAF86834" - ], - "optimism":[ - "0x7EA8c22E6Dcd7bd69eb180664Da68e1f1F11D696" - ], - } - },*/ - { - "id":"351", - "name":"Gravity Finance", - "addresses":{ - "polygon":[ - "0x57dE98135e8287F163c59cA4fF45f1341b680248", - "0xF2e6b6d7F3b62449260ac87B66cEf9e2664C26d7", - "0xb4A1F1Dd67e129190feeB4bcADB5298D434d54f2", - "0x57dE98135e8287F163c59cA4fF45f1341b680248", - "0xEbe141dE74F1E6377f53551C275568d7bcBC4119" - ] - } - }, - { - "id":"1296", - "name":"ZipSwap", - "addresses":{ - "arbitrum":[ - "0x4D70D768f5E1e6a7062973aFB0c7FBDa9bBb42b3" - ], - "optimism":[ - "0xE6Df0BB08e5A97b40B21950a0A51b94c4DbA0Ff6", - "0x00000000000013adDDC0919642d45f5d9Df09502" - ] - } - }, - { - "id":"1364", - "name":"Narwhalswap", - "addresses":{ - "bsc":[ - "0x849B7b4541CDE9cBE41cfd064d9d7fF459b9cEa4" - ] - } - }, - { - "id":"1074", - "name":"AutoShark", - "addresses":{ - "bsc":[ - "0xB0EeB0632bAB15F120735e5838908378936bd484" - ] - } - }, - { - "id":"883", - "name":"SmartDEX", - "addresses":{ - "polygon":[ - "0x6f5fE5Fef0186f7B27424679cbb17e45df6e2118" - ] - } - }, - { - "id":"2331", - "name":"SwapFish", - "addresses":{ - "arbitrum":[ - "0xcDAeC65495Fa5c0545c5a405224214e3594f30d8" - ], - "bsc":[ - "0xcDAeC65495Fa5c0545c5a405224214e3594f30d8" - ] - } - }, - { - "id":"409", - "name":"CafeSwap", - "addresses":{ - "polygon":[ - "0x9055682E58C74fc8DdBFC55Ad2428aB1F96098Fc" - ], - "bsc":[ - "0x933DAea3a5995Fb94b14A7696a5F3ffD7B1E385A" - ] - } - }, - { - "id":"1530", - "name":"Excalibur", - "addresses":{ - "fantom":[ - "0xc8Fe105cEB91e485fb0AC338F2994Ea655C78691" - ] - } - }, - { - "id":"1359", - "name":"CapitalDEX", - "addresses":{ - "ethereum":[ - "0xDc6844cED486Ec04803f02F2Ee40BBDBEf615f21" - ] - } - }, - { - "id":"1253", - "name":"HakuSwap", - "addresses":{ - "avax":[ - "0xE6e79A66cB32c53A9d56B18FA737fb5D72c71475", - "0x5F1FdcA239362c5b8A8Ada26a256ac5626CC33E0" - ] - } - }, - { - "id":"455", - "name":"ZooCoin", - "addresses":{ - "fantom":[ - "0x40b12a3E261416fF0035586ff96e23c2894560f2", - "0xA7843036252e79fBc495814e714F1439dF8Dc8a4" - ] - } - }, - { - "id":"1750", - "name":"CryptoSwap", - "addresses":{ - "bsc":[ - "0xe4964c56f46063F25f2a77269B36a773140Ab325" - ] - } - }, - { - "id":"2865", - "name":"Moonbase Alpha", - "addresses":{ - "arbitrum":[ - "0x88FcF70243B4BCC0325060805b7bE9b3DA984805", - "0x5cb6600359Cd392A6Ffea69781d1C6db6A25A18F",//masterchef - ] - } - }, - { - "id":"1150", - "name":"WraithSwap", - "addresses":{ - "fantom":[ - "0x8C9E059a729C17fB294cd782eB66Df3871D29173", - "0x37b106f101a63D9d06e53140E52Eb6F8A3aC5bBc",//masterchef - ] - } - }, - { - "id":"920", - "name":"Raven", - "addresses":{ - "fantom":[ - "0xbCEf0849DDd928835A6Aa130aE527C2703CD832C",//masterchef - "0x2639779d6CA9091483a2A7b9A1FE77Ab83b90281",//masterchef - ] - } - }, - { - "id":"737", - "name":"Dino.Exchange", - "addresses":{ - "bsc":[ - "0xe12405F0A569A9402fF563FB923A96DC2525D3Eb", - "0xc2a88eCE6B6321819D947c9EadEABBa699c16349", - ] - } - }, - { - "id":"1363", - "name":"Oni Exchange", - "addresses":{ - "bsc":[ - "0x3f49193f91a07bb87102e5768fa7a61692EA4D9c", - "0x974A8959c52f6109C59d0A6D63D4eA4CC522DfA2", - "0x09a8521FC838D795555113Fcb5b8fC8C267783F9",//masterchef - "0xE93fC7e6103EF86F3329635B8197D462B74F0cb8",//masterchef - ] - } - }, - { - "id":"1857", - "name":"FATExFi", - "addresses":{ - "polygon":[ - "0x8863f716706e9e4f13A52601A129DD1E1c3fA08B" - ] - } - }, - { - "id":"1859", - "name":"AuraSwap", - "addresses":{ - "polygon":[ - "0x09Fd8B8ed6E30e583379Dc73b9261dF5E1A28b6F", - "0x44Bb1a3E56Cb12b7B1a8E925f09A170e3646346d",//masterchef - ] - } - }, - { - "id":"1018", - "name":"Gains Network", - "addresses":{ - "polygon":[ - "0x91993f2101cc758D0dEB7279d41e880F7dEFe827",//gdai - "0xFb06a737f549Eb2512Eb6082A808fc7F16C0819D",//staking - "0x4ba64a81ca50D8B66684C664d75b55eaCcFaCAEb",//trading - "0x8103C0665A544201BBF606d90845d1B2D8005F1c",//nftrewards - "0xd285f881886505b9Ef6684E1aaa7949a56B0C7Da",//gnsmigration - "0xa33f7069f075A54481868e4C0b8D26925A218362",//lockingbridge - "0xDF774A4F3EA5095535f5B8f5b9149caF90FF75Bd",//erc20bridge - "0x2D266A94469d05C9e06D52A4D0d9C23b157767c2",//GFarmNft5 - "0x02e2c5825C1a3b69C0417706DbE1327C2Af3e6C2",//GFarmNft4 - "0x3378AD81D09DE23725Ee9B9270635c97Ed601921",//GFarmNft3 - "0x77cd42B925e1A82f41d852D6BE727CFc88fddBbC",//GFarmNft2 - "0x7075cAB6bCCA06613e2d071bd918D1a0241379E2",//GFarm2Token(old) - "0xF9A4c522E327935BD1F5a338c121E14e4cc1f898",//GFarmNft1 - ], - "arbitrum":[ - "0xd85E038593d7A098614721EaE955EC2022B9B91B",//gdai - "0x6B8D3C08072a020aC065c467ce922e3A36D3F9d6",//staking - "0x4ba64a81ca50D8B66684C664d75b55eaCcFaCAEb",//trading - "0x8103C0665A544201BBF606d90845d1B2D8005F1c",//nftrewards - "0xd285f881886505b9Ef6684E1aaa7949a56B0C7Da",//gnsmigration - "0x0F9E4375facBeB90DAA850f677819b438ce50827",//ERC721MintingBridge - "0x01cAaaA682Ceba8cd6c02f93BB1393fB415fA5e2",//erc20bridge - "0x5e3b541Ad6AcC4381C110247946C863e05ffc9BE",//GFarmNft5 - "0x40F0AeaB6383Be2f254cE40B79089070Fa1a21A1",//GFarmNft4 - "0x9834159EAF9811cf4C568294D5C7C9158F84b384",//GFarmNft3 - "0xD1F024ba4Dbb1593B486cB5031b3AC5aC28e8A4e",//GFarmNft2 - "0x75cbcc5414C539C2B302A5fA60E30B949D2D6F89",//GFarmNft1 - ], - "ethereum":[ - "0x14e2f9B0381Af4227D26BEE7d8E4D424466A7F3F",//GFarmNftSwap - "0x151757c2E830C467B28Fe6C09c3174b6c76aA0c5",//GNSPoolV5 - "0x1E887E7115321B4ee5d58DD446eC09e12B45d81B",//GFarm - "0x5cA058C1c9E0Bea6b9b5366ADf73BC7f63aDc2d7",//GFarmNFTExchange - ] - } - }, - { - "id":"337", - "name":"GMX", - "addresses":{ - "arbitrum":[ - "0x489ee077994B6658eAfA855C308275EAd8097C4A",//Vault - "0xaBBc5F99639c9B6bCb58544ddf04EFA6802F4064",//Router - "0xb87a436B93fFE9D75c5cFA7bAcFff96430b09868",//PositionRouter - "0x09f77E8A13De9a35a7231028187e9fD5DB8a2ACB",//OrderBook - "0x5402B5F40310bDED796c7D0F3FF6683f5C0cFfdf",//StakedGlp - "0xA906F338CB21815cBc4Bc87ace9e68c87eF8d8F1",//RewardRouterV2 - ], - "avax":[ - "0x9ab2De34A33fB459b538c43f251eB825645e8595",//Vault - "0x5F719c2F1095F7B9fc68a68e35B51194f4b6abe8",//Router - "0xffF6D276Bc37c61A23f06410Dce4A400f66420f8",//PositionRouter - "0x4296e307f108B2f583FF2F7B7270ee7831574Ae5",//OrderBook - "0xaE64d55a6f09E4263421737397D1fdFA71896a69",//StakedGlp - "0x82147C5A7E850eA4E28155DF107F2590fD4ba327",//RewardRouterV2 - ] - } - }, - { - "id":"2254", - "name":"MUX Protocol", - "addresses":{ - "arbitrum":[ - "0x917952280770Daa800E1B4912Ea08450Bf71d57e",//Vault - "0x3e0199792Ce69DC29A0a36146bFa68bd7C8D6633",//liquiditypool - "0x02FAe054ACD7FB1615471319c4E3029DFbC2B23C",//liquiditymanager - "0xa19fD5aB6C8DCffa2A295F78a5Bb4aC543AAF5e3",//OrderBook - "0xaf9C4F6A0ceB02d4217Ff73f3C95BbC8c7320ceE",//RewardRouter - ], - "bsc":[ - "0x8D751570BA1Fd8a8ae89E4B27d18bf6C321Aab0a",//Vault - "0x855E99F768FaD76DD0d3EB7c446C0b759C96D520",//liquiditypool - "0xee85CDdCe0CF068091081eA0fcd53f279aa3B09F",//liquiditymanager - "0xa67aA293642C4e02D1b9F360b007C0dBDc451A08",//OrderBook - ], - "avax":[ - "0x29a28cC3FdC128693ef6a596eF45c43ff63B7062",//Vault - "0x0bA2e492e8427fAd51692EE8958eBf936bEE1d84",//liquiditypool - "0x28f16eB86481066Bf63BcBEB05C8474f7120A36C",//liquiditymanager - "0x5898c3E218a8501533d771C86e2fA37743ea2aDd",//OrderBook - ], - "optimism":[ - "0x39d653884B611E0A8dbdb9720Ad5D75642fd544b",//Vault - "0xc6BD76FA1E9e789345e003B361e4A0037DFb7260",//liquiditypool - "0xFEc3704f4A02cB0EE6C7d52Cbf72b11E0441E9d5",//liquiditymanager - "0x6Fde9892Fd5302ac3c68688085BD5b031A63BC9D",//OrderBook - ], - "fantom":[ - "0xdAF2064F52F123EE1D410e97C2df549c23a99683",//Vault - "0x2e81F443A11a943196c88afcB5A0D807721A88E6",//liquiditypool - "0x5898c3E218a8501533d771C86e2fA37743ea2aDd",//liquiditymanager - "0x0c30b10462CdED51C3CA31e7C51019b7d25a965B",//OrderBook - ], - } - }, - { - "id":"2395", - "name":"Level Finance", - "addresses":{ - "bsc":[ - "0xA5aBFB56a78D2BD4689b25B8A77fd49Bb0675874",//LiquidityPool - "0xB5C42F84Ab3f786bCA9761240546AA9cEC1f8821",//seniorLLP - "0x4265af66537F7BE1Ca60Ca6070D97531EC571BDd",//MezzanineLLP - "0xcC5368f152453D497061CB1fB578D2d3C54bD0A0",//Junior LLP - "0x1Ab33A7454427814a71F128109fE5B498Aa21E5d",//LevelMaster (old farming contract) - "0x5aE081b6647aEF897dEc738642089D4BDa93C0e7",//LevelMasterV2 (farming contract) - "0xf584A17dF21Afd9de84F47842ECEAF6042b1Bb5b",//OrderManager - ], - } - }, - { - "id":"2116", - "name":"0x", - "addresses":{ - "ethereum":[ - "0xdef1c0ded9bec7f1a1670819833240f027b25eff", - "0x61935CbDd02287B511119DDb11Aeb42F1593b7Ef",//Exchangev3 - "0x12459C951127e0c374FF9105DdA097662A027093",//Exchangev1 - "0x080bf510FCbF18b91105470639e9561022937712",//Exchangev2.1 - "0xa26e80e7Dea86279c6d778D702Cc413E6CFfA777",//StakingProxyv3 - ], - "bsc":[ - "0xdef1c0ded9bec7f1a1670819833240f027b25eff", - ], - "polygon":[ - "0xdef1c0ded9bec7f1a1670819833240f027b25eff", - ], - "avax":[ - "0xdef1c0ded9bec7f1a1670819833240f027b25eff", - ], - "fantom":[ - "0xdef189deaef76e379df891899eb5a00a94cbc250", - ], - "celo":[ - "0xdef1c0ded9bec7f1a1670819833240f027b25eff", - ], - "optimism":[ - "0xdef1abe32c034e558cdd535791643c58a13acc10", - ], - "arbitrum":[ - "0xdef1c0ded9bec7f1a1670819833240f027b25eff", - ], - } - }, - { - "id":"2899", - "name":"Vertex", - "addresses":{ - "arbitrum":[ - "0xbbee07b3e8121227afcfe1e2b82772246226128e", // endpoint - ], - } - }, - { - "id":"1917", - "name":"Sudoswap", - "addresses":{ - "ethereum":[ - "0x2b2e8cda09bba9660dca5cb6233787738ad68329", - "0xb16c1342e617a5b6e4b631eb114483fdb289c0a4", - ], - } - }, - { - "id":"340", - "name":"Olympus DAO", - "addresses":{ - "ethereum":[ - "0x007fe7c498a2cf30971ad8f2cbc36bd14ac51156", - "0x0b7ffc1f4ad541a4ed16b40d8c37f0929158d101", - "0x73D7e4BDdEcAd7379d679e60f22788E501493896", - "0xf577c77ee3578c7f216327f41b5d7221ead2b2a3", - "0xB63cac384247597756545b500253ff8E607a8020", - "0x007F7735baF391e207E3aA380bb53c4Bd9a5Fed6", - ], - } - }, - { - "id":"2907", - "name":"Chronos V1", - "addresses":{ - "arbitrum":[ - "0xE708aA9E887980750C040a6A2Cb901c37Aa34f3b",//routerv2 - "0x5D9dBA2D0ec06F44Da7e234cBB0d7BA921834AE8",//masterchef - "0xC72b5C6D2C33063E89a50B2F77C99193aE6cEe6c",//voter - - ], - } - }, - { - "id":"2903", - "name":"Swaprum", - "addresses":{ - "arbitrum":[ - "0x1342a24347532DE79372283B3A29c63C31Dd7711",//v2router - "0xEE6cbC97781ff3De7a068D2a6A2dec8CE3a05624",//SwaprumWithdrawals - ], - } - }, - { - "id":"2911", - "name":"Aboard Exchange", - "addresses":{ - "arbitrum":[ - "0x7a08b29A7Ad4A19A5ECa0c82F5F082872488D135",//PerpetualProxy - ], - } - }, - { - "id":"2902", - "name":"DAMX", - "addresses":{ - "fantom":[ - "0xD093eeE7c968CEef2df96cA9949eba1a1A9b2306",//Vault - "0xeD077045f38f864fba8aD9bdbF1CE8F108e5ddb9",//OrderBook - "0xECef79f974182f4E9c168E751101F23686Bdc6dF",//staking - ], - } - }, - { - "id":"2900", - "name":"Wasabi", - "addresses":{ - "ethereum":[ - "0xFc68f2130e094C95B6C4F5494158cbeB172e18a0",//Wasabi Option NFTs (WASAB) - "0xF29A66E420C240EbD23F775b93619C8F3cfFf856",//WasabiConduit - "0x8E2b50413a53F50E2a059142a9be060294961e40",//WasabiPoolFactory - ], - } - }, - { - "id":"2898", - "name":"LionDEX", - "addresses":{ - "arbitrum":[ - "0x8eF99304eb88Af9BDe85d58a35339Cb0e2a557B6",//vault - "0x154E2b1dBE9F493fF7938E5d686366138ddCE017",//staking - "0xFeb9Cc52aB4cb153FF1558F587e444Ac3DC2Ea82",//Escrowed LionDEX Token (esLION) - ], - } - }, - { - "id":"parent#smbswap", - "name":"SMBSwap", - "addresses":{ - "bsc":[ - "0xBDC5104a3C52A3f49f0324696f9Bb77E41516De7",//MasterChef - "0x009d611490eCfED2dC3F306231Bba7e7F3E9196E",//SMBRouter - "0x63C737E5BD543ECC0A02d91BfCb50845e1be31cF",//SMBRouter - "0x9D4823aa89Dc33ED53d930CB554AFFc58B0c9852",//SMBSwapLottery - "0x85C6129843D120454848F1Da39233AC4fcb50Cb4",//MasterChefV3 - "0x92D118350CAD5EbA374486dbe3d16A9FE66DaeBe",// SmartRouter - ], - } - }, + },*/, + { + id: "2307", + name: "Camelot", + addresses: { + arbitrum: ["0xc873fEcbd354f5A56E00E710B90EF4201db2448d"], + }, + }, + { + id: "4372", + name: "Hercules", + addresses: { + metis: ["0x14679D1Da243B8c7d1A4c6d0523A2Ce614Ef027C"], + }, + }, + { + id: "parent#thena", + name: "Thena", + addresses: { + bsc: ["0xd4ae6eCA985340Dd434D38F470aCCce4DC78D109", "0x8f097E07a07Bf2F031E5513f764DaFC6Df58e818"], + }, + }, + { + id: "parent#bancor", + name: "Bancor", + addresses: { + ethereum: ["0x2F9EC37d6CcFFf1caB21733BdaDEdE11c823cCB0"], + }, + }, + { + id: "302", + name: "SpookySwap", + addresses: { + fantom: ["0x31F63A33141fFee63D4B26755430a390ACdD8a4d"], + }, + }, + { + id: "654", + name: "Beethoven X", + addresses: { + optimism: [ + "0xBA12222222228d8Ba445958a75a0704d566BF2C8", //Vault + ], + fantom: ["0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce"], + }, + }, + { + id: "2121", + name: "Frax Swap", + addresses: { + arbitrum: ["0x16e71B13fE6079B4312063F7E81F76d165Ad32Ad"], + ethereum: ["0xC14d550632db8592D1243Edc8B95b0Ad06703867"], + optimism: ["0xB9A55F455e46e8D717eEA5E47D2c449416A0437F"], + bsc: ["0x67F755137E0AE2a2aa0323c047715Bf6523116E5"], + polygon: ["0x67F755137E0AE2a2aa0323c047715Bf6523116E5"], + avax: ["0x5977b16AA9aBC4D1281058C73B789C65Bf9ab3d3"], + fantom: ["0x7D21C651Dd333306B35F2FeAC2a19FA1e1241545"], + boba: [""], + harmony: [""], + aurora: [""], + evmos: [""], + moonbeam: [""], + dogechain: [""], + moonriver: [""], + }, + }, + { + id: "2169", + name: "BabyDogeSwap", + addresses: { + bsc: ["0xC9a0F685F39d05D835c369036251ee3aEaaF3c47"], + }, + }, + { + id: "parent#zyberswap", + name: "Zyberswap", + addresses: { + arbitrum: ["0xFa58b8024B49836772180f2Df902f231ba712F72", "0x16e71B13fE6079B4312063F7E81F76d165Ad32Ad"], + }, + }, + { + id: "246", + name: "Pangolin", + addresses: { + avax: ["0xE54Ca86531e17Ef3616d22Ca28b0D458b6C89106"], + }, + }, + { + id: "1883", + name: "iziSwap", + addresses: { + arbitrum: ["0x1CB60033F61e4fc171c963f0d2d3F63Ece24319c"], + polygon: ["0x879bF5D67fAB468879618AcD69E85C02E33b1c0B"], + bsc: ["0xBd3bd95529e0784aD973FD14928eEDF3678cfad8"], + aurora: [""], + telos: [""], + era: [""], + ethereumclassic: [""], + meter: [""], + cronos: [""], + }, + }, + { + id: "1700", + name: "Wombat Exchange", + addresses: { + bsc: [ + "0x19609B03C976CCA288fbDae5c21d4290e9a4aDD7", + "0x312Bc7eAAF93f1C60Dc5AfC115FcCDE161055fb0", + "0xE2C07d20AF0Fb50CAE6cDD615CA44AbaAA31F9c8", + "0x489833311676B566f888119c29bd997Dc6C95830", + "0x04D4e1C1F3D6539071b6D3849fDaED04d48D563d", + ], + arbitrum: [ + "0xc4B2F992496376C6127e73F1211450322E580668", + "0x9da4edBed6068666ea8EF6505C909e1ff8eA5725", + "0x62A83C6791A3d7950D823BB71a38e47252b6b6F4", + "0x3f90a5a47364c0467031fB00246192d40E3D2D9D", + ], + }, + }, + { + id: "2675", + name: "Ramses Exchange", + addresses: { + arbitrum: ["0xAAA87963EFeB6f7E0a2711F397663105Acb1805e"], + }, + } /* { - "id":"2886", - "name":"RabbitX", + "id":"parent#apeswap", + "name":"ApeSwap", "addresses":{ "ethereum":[ - "0xFc7f884DE22a59c0009C91733196b012Aecb8F41",//Rabbit - "0x4973710327eDc6f8238DD2d73cf0B2e081e1B351",//RabbitDeposit + "0x5f509a3C3F16dF2Fba7bF84dEE1eFbce6BB85587" ], - } - }, - { - "id":"2883", - "name":"Purple Bridge DEX", - "addresses":{ "polygon":[ - "0x1e2441Fd53C51d9CD1696BE2871eE672A0A01933", + "0xcF0feBd3f17CEf5b47b0cD257aCf6025c5BFf3b7" ], - } - }, - { - "id":"2872", - "name":"printyfinance", - "addresses":{ - "avax":[ - "0x6A8f98d7e34Fd214B428BFc68c9309Ea3C4Fc7F1",//BaseV1Router01 - "0xDc72882909252E133a4A46eFB135b3B145366eba",//PrintyV1Router - "0x6902a8ecF99a732e5a73491Afc14e5E135eE4234",//BaseV2 + "bsc":[ + "0xcF0feBd3f17CEf5b47b0cD257aCf6025c5BFf3b7", ], - } - }, - { - "id":"parent#blur", - "name":"Blur", - "addresses":{ - "ethereum":[ - "0x29469395eAf6f95920E59F858042f0e28D98a20B",//ERC1967Proxy - "0x0000000000A39bb272e79075ade125fd351887Ac",//Blur bidding + "arbitrum":[ + "0x7d13268144adcdbEBDf94F654085CC15502849Ff" ], + "telos":[ + "0xb9667Cf9A495A123b0C43B924f6c2244f42817BE" + ] } - }, + },*/, { - "id":"2919", - "name":"Backed", - "addresses":{ - "ethereum":[ - "0xF4d4e4ae7fd9CbAfc24b9B0Da2596260c8368314",//paprcontroller - "0x3b29c19ff2fcEa0Ff98D0ef5B184354D74eA74b0",//paprcontroller - ], - } + id: "2332", + name: "Equalizer Exchange", + addresses: { + fantom: ["0x1A05EB736873485655F29a37DEf8a0AA87F5a447"], + }, }, { - "id":"2918", - "name":"DebtDAO", - "addresses":{ - "ethereum":[ - "0xc9eF6509A09b92043cedce689DfAA760048aBd7F",//LineFactory - ], - } + id: "2528", + name: "SolidLizard", + addresses: { + arbitrum: ["0xF26515D5482e2C2FD237149bF6A653dA4794b3D0"], + }, }, { - "id":"2862", - "name":"Hyperliquid", - "addresses":{ - "arbitrum":[ - "0xC67E9Efdb8a66A4B91b1f3731C75F500130373A4", - "0x2df1c51e09aecf9cacb7bc98cb1742757f163df7 " - ], - } + id: "944", + name: "Platypus Finance", + addresses: { + avax: [ + "0x7d7E30E269b7C7b447312d3FDE52e6f118F8e39e", + "0x73256EC7575D999C360c1EeC118ECbEFd8DA7D12", + "0x6f6FCbcc00f9AFBD2C266631087798740c685C3B", + ], + }, }, { - "id":"319", - "name":"Convex Finance", - "addresses":{ - "ethereum":[ - "0xf403c135812408bfbe8713b5a23a04b3d48aae31", - ADDRESSES.ethereum.vlCVX, - ], - } + id: "334", + name: "MDEX", + addresses: { + bsc: [ + "0x7DAe51BD3E3376B8c7c4900E9107f12Be3AF1bA8", + "0x62c1A0d92B09D0912F7BB9c96C5ecdC7F2b87059", + "0x0384E9ad329396C3A6A401243Ca71633B2bC4333", + "0x518a6e9FB2832aDA41415775E5c45dE6EfCF1A3C", + ], + heco: [""], + }, }, { - "id":"270", - "name":"Liquity", - "addresses":{ - "ethereum":[ - "0x4f9fbb3f1e99b56e0fe2892e623ed36a76fc605d",//staking - "0x66017d22b0f8556afdd19fc67041899eb65a21bb",//stabilitypool - "0x24179cd81c9e782a4096035f7ec97fb8b783e007" - ], - } - }, - /* - Only bridge addresses, not actual users + id: "2108", + name: "W3swap", + addresses: { + bsc: ["0xF29acE1FE5f36389d0dDe450a0195A30c3770245"], + }, + } /* { - "id":"144", - "name":"dYdX", + "id":"238", + "name":"Ellipsis Finance", "addresses":{ - "ethereum":[ - "0xd54f502e184b6b739d7d27a6410a67dc462d69c8", - "0x8e8bd01b5a9eb272cc3892a2e40e64a716aa2a40", - "0x0fd829c3365a225fb9226e75c97c3a114bd3199e", - "0x5aa653a076c1dbb47cec8c1b4d152444cad91941" - ], + "bsc":[ + "0xE014A89c9788dAfdE603a13F2f01390610382471" + ] } - }, - */ + },*/, + { + id: "1726", + name: "Meshswap", + addresses: { + polygon: ["0x10f4A785F458Bc144e3706575924889954946639"], + }, + }, + { + id: "2695", + name: "SmarDex", + addresses: { + ethereum: ["0x9a5132e149c547F254C73226DA7f770d43D9EA44"], + base: [ + "0x5C622Dcc96b6D96ac6c154f99CF081815094CBC9", //SmardexRouter + ], + arbitrum: [ + "0xdd4536dD9636564D891c919416880a3e250f975A", //SmardexRouter + ], + polygon: [ + "0xA8EF6FEa013034E62E2C4A9Ec1CDb059fE23Af33", //SmardexRouter + ], + bsc: [ + "0x391BeCc8DAaf32b9ba8e602e9527Bf9DA04C8deb", //SmardexRouter + ], + }, + }, + { + id: "318", + name: "Dfyn Network", + addresses: { + polygon: [ + "0x5ac32A20a5BB6B87AC91E51cA5b7bba9B8846803", + "0xA102072A4C07F06EC3B4900FDC4C7B80b6c57429", + "0x712B5c4CEe26c679F3Ddbb9855369B13aA8F3Dec", + ], + fantom: ["0x2724B9497b2cF3325C6BE3ea430b3cec34B5Ef2d"], + okexchain: [""], + }, + } /* { - "id":"parent#radiant", - "name":"Radiant", + "id":"133", + "name":"Shell Protocol", "addresses":{ "arbitrum":[ - "0x8991c4c347420e476f1cf09c03aba224a76e2997", - "0x196bf3a63c50bca1eff5a5809b72dfc58f0c2c1a", - "0xebc85d44cefb1293707b11f707bd3cec34b4d5fa", - "0x2032b9a8e9f7e76768ca9271003d3e43e1616b1f", - "0x5682a39078edce41a65f1bd8733bf9ca2bbe3b1b", - "0xc963ef7d977ecb0ab71d835c4cb1bf737f28d010" - ], + "0xC32eB36f886F638fffD836DF44C124074cFe3584" + ] + } + },*/, + { + id: "2644", + name: "Maverick Protocol", + addresses: { + ethereum: [ + "0x001903de96a72d11d27cd8c2bee003a730e032a8", + "0x050853d20d1b4f5529cd8dec986b752e7c9d95f7", + "0x0ce176e1b11a8f88a4ba2535de80e81f88592bad", + "0x0eb1c92f9f5ec9d817968afddb4b46c564cdedbe", + "0x11a653ddfbb61e0feff5484919f06d9d254bf65f", + "0x12378796271f2c5fb1a3206525c4b49a204a8487", + "0x14b0fdd73e47fac12d98182c0fd1054f362262a6", + "0x1970523c241756e24d546dc4bfffc1f436ab9671", + "0x1db8784119dcfe4213a0ceb2c55b07e81c72b475", + "0x1dc08fb758c89db0d81da0924ea4ba884b68564c", + "0x20ee9efe1b85b3077c53d648b17936d4ddb4e407", + "0x214b0b7d3c925b7710601e437aec942b5cbd8d48", + "0x23f6b8a4093d740a5f39d20a1f543e4b26b7791a", + "0x257b0a09d1f4b5913f9c813c43dcd0d0115af2f2", + "0x25f159fd4b15a2a7a9703ca83d0e63df9eeb0a65", + "0x2ebe19aa2e29c8acadb14be3e7de153b0141e2aa", + "0x2f3e9cd12dc8eee8c7fea0383ab877b6bead56ab", + "0x352b186090068eb35d532428676ce510e17ab581", + "0x3fd899eaf2dda35cf2c7bfcdb27a23d727d9a67c", + "0x43a81f1e714f12147e5e865c152c6aac14c80bff", + "0x43c014e1e6afeb8a76fde2420a0b65e1ca06c9bf", + "0x44f0f76cfbafc2b9b3ad000d588897d1e5381068", + "0x46557085e28bcc6d8f653a9ee84c6c9b67642b93", + "0x4789fad0cf791fec659256900074b80c89c47edd", + "0x48e236fa378ffeaf86443b6a304ce5670c3cd9ab", + "0x496d3fe47211521eca1fff521d1f8022b0287c9f", + "0x4a94f0a97615f0bccbc09968b1c49c9ae1eb38a8", + "0x4efec7ada76685a521278407d9fcf58b8c6e8774", + "0x52de4ebf8bfb4048f412bcb415a52cb98651f9ed", + "0x53dc703b78794b61281812f3a901918253beefee", + "0x55095300bdcb3026b48b4ad05a5feaaba801aac9", + "0x5cb98367c32d8a1d910461c572c558d57ca68d25", + "0x5eef9ab433f598d408ec30adf58d182a07a1189d", + "0x6b04ce6e4d728a97bafd1c78f8ea46b73ada552d", + "0x6c6fc818b25df89a8ada8da5a43669023bad1f4c", + "0x7064a1ea78961ef05a510e86540235a4a2e64ca4", + "0x7174c5aadc47e0b706c333467d2a3b126eb6ed15", + "0x73ee7d74a1fe9d768112ba40549bc9c2003f9b63", + "0x757caf1bd60b4e16d6b91f03169a66149306de7a", + "0x7a2b6d8325c3912939229272256769b06cedb1b2", + "0x7fafd253ea3f8351e02135b8f0d4ed31a6e7a59d", + "0x857d1b4f80ecb6ad7e4e7d120ffc1292ee8ddafc", + "0x85dd09159b42417c1e0782fa2c6ba3b790be9ead", + "0x87da68bfbaf58ba6a29fed851f0411e7c989b68b", + "0x991322ee666ec384eeb31bbd97b4dc0c2df14ce1", + "0x99903bb64e9c1e54a10723afa7f9a094c9f783c8", + "0xa2cc3e531f49e6e1b0e360f371e6171f5aeaec91", + "0xa495a38ea3728ac29096c86ca30127003f33af28", + "0xa53620f536e2c06d18f02791f1c1178c1d51f955", + "0xa7b1d843ae0c0e5e561149d7624f9e469fcacf4d", + "0xab1e2d29699146a2e07c3a1c8ad8cb914a536f7a", + "0xaf29b974b47d900bc6746bf9979be8edc8790a20", + "0xb04f13750cd764eeceb07e19254564787c9c72bf", + "0xba7f8b8cf0f13f8d90d4e364d43a3ddd57f39da0", + "0xbe633b67d7d4197b798179066b503ecd9c04d05b", + "0xbfe59fd293c4c19487a20178f384be62867bf875", + "0xc27f074873af25378270cc50b9854cf7a013eab6", + "0xcb2e6adc815195069977692de2f6e22e920a6b1b", + "0xccb606939387c0274aaa2426517da315c1154e50", + "0xcf4595ae4e43bc8c7be90849babc1da27e47813c", + "0xd1e50b60287faada2a7d5ea5632df78f7f2f0cb8", + "0xddcd60dcc952023ec4bcd27788384f06e901e61e", + "0xe1f9a04aeaf788b1494721317c812145dcef2359", + "0xe870c025ede621834f538468034398cff26ac926", + "0xe8d7a52aabe8a0569314f28e90fdb8544860a424", + "0xe94f1ec6aaaba70e109535f88d0c836ce044fd16", + "0xeab253203605d0b2ca7bde2157009d121cffdd27", + "0xeb061a4e1ad3f1983655281cb8019ebbf8b30b29", + "0xeb0f2c77ee979adb69f718b4027d3783b27b0f9e", + "0xebac4a08dbe9b33320f73b7bc8c3559ff042a9d9", + "0xedf1335a6f016d7e2c0d80082688cd582e48a6fc", + "0xf4b0e6fad7443fbb7bbfea7dc1cbe7bf7e574b03", + "0xf59ce000475cc3962cd366ce05ea2fd6fea5b8aa", + "0xf7c3d9615221dfa89a835ec5d56dea2990eae54a", + "0xf7c8ab6912894393e6ee9c0222c672a4441dfea2", + "0xf8fb2d6bb43f6a422bc1e2a15b0f85afce7e7f05", + "0xfc0c52a2b66a19b39efbe4332bc42186ada1ee45", + "0xff3074fd3bccc15b54d2c7fbfe48108a6116a321", + ], + era: ["0x39E098A153Ad69834a9Dac32f0FCa92066aD03f4", "0x02E3B9d5462e84518E309116D547c8C772a1C852"], + }, + }, + { + id: "597", + name: "BabySwap", + addresses: { + bsc: ["0x325E343f1dE602396E256B67eFd1F61C3A6B38Bd"], + }, + }, + { + id: "parent#mm-finance", + name: "MM Finance", + addresses: { + cronos: [""], + polygon: ["0x7E5E5957De93D00c352dF75159FbC37d5935f8bF"], + arbitrum: [ + "0x4F879a9d95e01041dDAA607A65F04e0EDbD04139", + "0x20AB386813F59B92e1C4596f22591bEe92935d83", //v3smartrouter + "0x611c9F2f536E087BE7d0F02D9F99e5CE9b7E175B", + ], + }, + }, + { + id: "2400", + name: "Solidly V2", + addresses: { + ethereum: ["0x77784f96C936042A3ADB1dD29C91a55EB2A4219f"], + }, + }, + { + id: "622", + name: "Clipper", + addresses: { + ethereum: ["0xE7b0CE0526fbE3969035a145C9e9691d4d9D216c"], + arbitrum: ["0xE7b0CE0526fbE3969035a145C9e9691d4d9D216c", "0x9E233DD6a90678BaaCd89c05ce5C48f43fCc106E"], + optimism: [ + "0x5130f6cE257B8F9bF7fac0A0b519Bd588120ed40", //ClipperPackedVerifiedExchange + "0xF33141BC4E9D1d92a2Adba2fa27A09c2DA2AF3eB", //ClipperPermitRouter + ], + polygon: [ + "0x6Bfce69d1Df30FD2B2C8e478EDEC9dAa643Ae3B8", + "0xF33141BC4E9D1d92a2Adba2fa27A09c2DA2AF3eB", //ClipperPermitRouter + ], + moonbeam: ["0xCE37051a3e60587157DC4c0391B4C555c6E68255"], + mantle: [ + "0x769728b5298445BA2828c0f3F5384227fbF590C5", //ClipperPackedVerifiedExchange + ], + }, + }, + { + id: "1732", + name: "Verse", + addresses: { + ethereum: ["0xB4B0ea46Fe0E9e8EAB4aFb765b527739F2718671"], + smartbch: [""], + }, + }, + { + id: "2283", + name: "3xcalibur", + addresses: { + arbitrum: ["0x8e72bf5A45F800E182362bDF906DFB13d5D5cb5d"], + }, + }, + { + id: "311", + name: "SpiritSwap AMM", + addresses: { + fantom: ["0x16327E3FbDaCA3bcF7E38F5Af2599D2DDc33aE52"], + }, + }, + { + id: "602", + name: "BakerySwap", + addresses: { + bsc: ["0xCDe540d7eAFE93aC5fE6233Bee57E1270D3E330F"], + }, + }, + { + id: "942", + name: "KnightSwap Finance", + addresses: { + bsc: ["0x05E61E0cDcD2170a76F9568a110CEe3AFdD6c46f"], + fantom: ["0x045312C737a6b7a115906Be0aD0ef53A6AA38106"], + }, + }, + { + id: "1461", + name: "WOOFi Swap", + addresses: { + fantom: ["0x382A9b0bC5D29e96c3a0b81cE9c64d6C8F150Efb"], + avax: ["0xC22FBb3133dF781E6C25ea6acebe2D2Bb8CeA2f9"], + arbitrum: ["0x9aEd3A8896A85FE9a8CAc52C9B402D092B629a30"], + bsc: ["0xC90bFE9951a4Efbf20aCa5ECd9966b2bF8A01294"], + optimism: ["0xEAf1Ac8E89EA0aE13E0f03634A4FF23502527024"], + polygon: ["0x817Eb46D60762442Da3D931Ff51a30334CA39B74"], + ethereum: ["0x9D1A92e601db0901e69bd810029F2C14bCCA3128"], + }, + }, + { + id: "863", + name: "Yoshi Exchange", + addresses: { + bsc: ["0x3a547932e0818403b39fD2453AE74c9004FB902E"], + fantom: ["0xE4a4642B19C4d0CBA965673cd51422b1EDA0a78d"], + ethereum: ["0x3aB65d9C1616FF780e1853330a219497CF5D9B67"], + }, + }, + { + id: "271", + name: "Honeyswap", + addresses: { + polygon: ["0xaD340d0CD0B117B0140671E7cB39770e7675C848"], + xdai: [""], + }, + }, + { + id: "2129", + name: "Tomb Swap", + addresses: { + fantom: ["0x6D0176C5ea1e44b08D3dd001b0784cE42F47a3A7"], + }, + }, + { + id: "1351", + name: "WigoSwap", + addresses: { + bsc: ["0x5023882f4D1EC10544FCB2066abE9C1645E95AA0"], + }, + }, + { + id: "2603", + name: "AlienFi", + addresses: { + arbitrum: [ + "0x863e9610E9E0C3986DCc6fb2cD335e11D88f7D5f", + "0xB8ca857dCd90AfBeD93B30DdCd4E4CC1327c9e5c", + "0xbd796fac59914dB9A7CBC21f1053c7DC1b900fEA", //masterchef + "0x8923d3EFEE38e7bb1E8988B024D5169C962CFB73", //masterchef + "0x4Ad7C3F11ec54d7D066dd114ac403022d3F97E6F", //masterchef + ], + }, + }, + { + id: "373", + name: "BiSwap", + addresses: { + bsc: ["0x3a6d8cA21D1CF76F653A67577FA0D27453350dD8"], + }, + }, + { + id: "1823", + name: "Nomiswap", + addresses: { + bsc: [ + "0xD486D0846812266D21e1Ab6c57FCF202DF836dc8", + "0xD654953D746f0b114d1F85332Dc43446ac79413d", + "0x9D15d0d737e06a875F3d46621fB52fe79ffA6136", + "0x4eC3432d9443f05022e2Ff4E54fC7514BE2359e0", + "0xbF4c0d66Db59Ae8276e0cB7E1Ed36fC4Ac8C1d68", + ], + }, + }, + { + id: "1295", + name: "BurgerSwap", + addresses: { + bsc: [ + "0xe08Ab553720a46C071475838a6cC8D98D1Afb891", + "0xEfC254D0cdb1924149382d404A2133532D46A777", + "0xfa9cCB91d28d35E12216e43d8990D31595783600", + "0xE3F08e81Ec8533D6CD7784B672e4237087b2A7c8", + ], + }, + }, + { + id: "2102", + name: "Titano Swych", + addresses: { + bsc: ["0x2Bf55D1596786F1AE8160e997D655DbE6d9Bca7A"], + }, + }, + { + id: "parent#arbswap", + name: "Arbswap", + addresses: { + arbitrum: ["0xD01319f4b65b79124549dE409D36F25e04B3e551"], + arbitrum_nova: [], + }, + }, + { + id: "parent#polycat-finance", + name: "Polycat Finance", + addresses: { + polygon: [ + "0x94930a328162957FF1dd48900aF67B5439336cBD", + "0xfDC8579B2E19B489c4086eDE85A2D71949138be5", //tankchef + "0xfaBC099AD582072d26375F65d659A3792D1740fB", //tankchef + ], + }, + }, + { + id: "2384", + name: "OreoSwap", + addresses: { + arbitrum: ["0x38eEd6a71A4ddA9d7f776946e3cfa4ec43781AE6"], + }, + }, + { + id: "1824", + name: "Swapsicle", + addresses: { + arbitrum: ["0x3D42A6B7cD504cA2283Bc8F37fea859a11Ca89fb"], + ethereum: ["0x3D42A6B7cD504cA2283Bc8F37fea859a11Ca89fb"], + avax: ["0xC7f372c62238f6a5b79136A9e5D16A2FD7A3f0F5"], + polygon: ["0x0427B42bb6ae94B488dcf549B390A368F8F69058"], + bsc: ["0x63530632e8fE40aCf8f1f4324f7645256263b64f"], + optimism: ["0x3D42A6B7cD504cA2283Bc8F37fea859a11Ca89fb"], + fantom: ["0x422770Fcf2217AF03b4832e9f1F4Bd23946F828b"], + telos: ["0x9b1adec00a25fffd87a5bb17f61916e1c26f6844"], + }, + }, + { + id: "2350", + name: "KyotoSwap", + addresses: { + bsc: ["0x9fd7764e2303E7748736D115304350eC64E403B2"], + }, + }, + { + id: "2101", + name: "FstSwap", + addresses: { + bsc: ["0xB3ca4D73b1e0EA2c53B42173388cC01e1c226F40"], + }, + }, + { + id: "2751", + name: "LFGSwap", + addresses: { + arbitrum: ["0xF83675ac64a142D92234681B7AfB6Ba00fa38dFF"], + ethpow: [], + core: [], + }, + }, + { + id: "2166", + name: "LFGSwap EthereumPoW", + addresses: { + ethpow: [], + }, + }, + { + id: "2647", + name: "LFGSwap Core", + addresses: { + core: [], + }, + } /* + {//listed on compound-v2 users file + "id":"387", + "name":"Bearn", + "addresses":{ "bsc":[ - "0x13ef2a9e127ae8d9e9b863c7e375ba68e1a42ac6", - "0xd50cf00b6e600dd036ba8ef475677d816d6c4281", - "0x7c16abb090d3fb266e9d17f60174b632f4229933", + "0xC6747954a9B3A074d8E4168B444d7F397FeE76AA", + "0x3d695c1607a085773547e07dEf1aD3CE3f518Edb",//bearnchef ] } + },*/, + { + id: "659", + name: "JetSwap", + addresses: { + bsc: ["0xBe65b8f75B9F20f4C522e0067a3887FADa714800"], + }, }, { - "id":"parent#paraspace", - "name":"ParaSpace", - "addresses":{ - "ethereum":[ - "0x638a98bbb92a7582d07c52ff407d49664dc8b3ee", - "0x59b72fdb45b3182c8502cc297167fe4f821f332d", - "0xf090eb4c2b63e7b26e8bb09e6fc0cc3a7586263b", - "0xc5c9fb6223a989208df27dcee33fc59ff5c26fff" - ], - } + id: "2749", + name: "Antfarm finance", + addresses: { + ethereum: ["0x6d9f0eb21d77c6d24be49a579508471e937d5418"], + arbitrum: ["0x1272ba8c0bd855ff15c4b29bad660e6f154fca28"], + polygon_zkevm: ["0x61f4ECD130291e5D5D7809A112f9F9081b8Ed3A5"], + }, + }, + { + id: "2763", + name: "Dove Swap", + addresses: { + polygon_zkevm: ["0xc4212b4f901C8Afac75A27C8E8be7b9fa82D74d8"], + }, }, { - "id":"438", - "name":"Tokemak", - "addresses":{ - "ethereum":[ - "0x04bda0cf6ad025948af830e75228ed420b0e860d", - "0xd3d13a578a53685b4ac36a1bab31912d2b2a2f36", - "0x8858a739ea1dd3d80fe577ef4e0d03e88561faa3", - "0x41f6a95bacf9bc43704c4a4902ba5473a8b00263" - ], - } + id: "2762", + name: "Dove Swap", + addresses: { + polygon_zkevm: ["0xc4212b4f901C8Afac75A27C8E8be7b9fa82D74d8"], + }, }, { - "id":"636", - "name":"Keep3r Network", - "addresses":{ - "ethereum":[ - "0x02777053d6764996e594c3e88af1d58d5363a2e6", - "0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44", - "0xb9d18ab94cf61bb2bcebe6ac8ba8c19ff0cdb0ca", - ], - } + id: "561", + name: "Alita Finance", + addresses: { + bsc: [ + "0x730aCC3bBf2443f2EaEaCFc7ac7b4d8DC9E32dB8", + "0x4f7b2Be2bc3C61009e9aE520CCfc830612A10694", + "0x28162cda1E767663F68B759AF47801171Aa58815", //incentive + "0x8ED5fABddb6f899f7FaCf461587f4dAd065AAae7", //masterchef + ], + }, }, { - "id":"2255", - "name":"NFTfi", - "addresses":{ - "ethereum":[ - "0xe52cec0e90115abeb3304baa36bc2655731f7934", - "0x8252df1d8b29057d1afe3062bf5a64d503152bc8", - ], - } + id: "2333", + name: "Alita Finance", + addresses: { + bsc: ["0xbd67d157502A23309Db761c41965600c2Ec788b2"], + }, }, { - "id":"483", - "name":"NFTX", - "addresses":{ - "ethereum":[ - "0x941a6d105802cccaa06de58a13a6f49ebdcd481c", - "0xdc774d5260ec66e5dd4627e1dd800eff3911345c", - "0x688c3e4658b5367da06fd629e41879beab538e37", - "0x3e135c3e981fae3383a5ae0d323860a34cfab893" - ], - } + id: "2118", + name: "WinerySwap", + addresses: { + bsc: [ + "0xB115C8392C4C416b227e98d9bbb394bFD03BE965", + "0x8B07c6CB1b2edA3942369EEC9DF8e12213f99181", + "0x8bfFB5562ff30f555894E101E6DAD31D271EEd5a", + "0xBd27399a5aA720250b37b6864F293A27F3D2A043", //masterchef + "0x21694642bea2D2E0B0f5129a25D753dd9fB9623A", //masterchef + ], + }, }, { - "id":"2086", - "name":"Rage Trade", - "addresses":{ - "arbitrum":[ - "0x1d42783E7eeacae12EbC315D1D2D0E3C6230a068",//Curve Yield Strategy - "0x4b928aFd7CA775C7f4ECdf2c00B7e608962AbbDc",//Rage Trade: Vault Periphery - ], - } + id: "317", + name: "HyperJump", + addresses: { + bsc: ["0x3bc677674df90A9e5D741f28f6CA303357D0E4Ec"], + fantom: ["0x53c153a0df7E050BbEFbb70eE9632061f12795fB"], + metis: ["0xd96aeE439e6e5B4f3544bF105eb78F3b8B6CD774"], + }, }, { - "id":"2192", - "name":"PlutusDAO", - "addresses":{ - "arbitrum":[ - "0x35cD01AaA22Ccae7839dFabE8C6Db2f8e5A7B2E0",//PlutusPrivateTGE - "0x195B6eA50150900A25FA0928b8B65B03C7666D10",//TGEController - "0xc1D8f4109eC84db9b607e2705779142eC8F9534a",//Plutus DAO: TGE Vault ETH - "0xF4790fc873351C624d225269d4d21cF591e441b2",//Plutus DAO: TGE Vault DPX - "0xd6c9fe8dbc50c620222e8679CFf0461994b532DA",//Plutus DAO: TGE Vault JONES - "0x27Aaa9D562237BF8E024F9b21DE177e20ae50c05",//Plutus DAO: 1 Month Plutus Epoch Staking - "0xE59DADf5F7a9decB8337402Ccdf06abE5c0B2B3E",//Plutus DAO: 3 Month Plutus Epoch Staking - "0xBEB981021ed9c85AA51d96C0c2edA10ee4404A2e",//Plutus DAO: 6 Month Plutus Epoch Staking - "0x5593473e318F0314Eb2518239c474e183c4cBED5",//Plutus DAO: MasterChef - "0x66Cd8Cb1bA49f1A07703fa6E5BFE2BEB2eC8c706",//PlutusDAO: Plutus JONES Depositor - "0x4D56D5A417269A5bFa909cc0f67DFFE992272606",//Plutus DAO: Dpx Depositor - "0x20DF4953BA19c74B2A46B6873803F28Bf640c1B5",//PlutusDAO: Old plsDPX Farm - "0x23B87748b615096d1A0F48870daee203A720723D",//PlutusDAO: plsJONES - Plutus Chef - "0x6CCD4CFaF4bDa43c09682B3e588B4bd18BFFd603",//PrivateTgeRewards - "0x548C30b0af3CE6D96F1A63AfC05F0fb66495179F",//PlutusDAO: DPX Depositor - "0x75c143460F6E3e22F439dFf947E25C9CcB72d2e8",//PlutusDAO: plsDPX Farm - "0x04B724389Dd28Ffc9a3A91Ab4149a77530282f04",//PrivateTgeVester - "0xA61f0d1d831BA4Be2ae253c13ff906d9463299c2",//PlutusChef - "0xb059Fc19371691aa7A3EC66dD80684FFE17A7D5c",//PlutusChef - ADDRESSES.arbitrum.plvGLP,//PlvGlpToken - "0x4E5Cf54FdE5E1237e80E87fcbA555d829e1307CE",//PlutusDAO: plvGLP Farm - "0x8c12e3C9b26Ee2e43A1a71cd974e6bF250472129",//SpaDepositor - "0x73e7c78E8a85C074733920f185d1c78163b555C8",// - "0x9F07B8D6DDA7E68260Add1e38447D0Caa6F1BA0d",//PlutusChef - "0xbe68e51f75F34D8BC06D422056af117b8c23fd54",// - "0x13794D30D01c96D6595d1D956f3dd70AEc2C238B",//ArbDepositor - "0xCfc273D86333bF453b847d4D8cb7958307D85196",// - "0x4C2C41cFfC920CA9dD5F13E88DcF5062ceF37455",// - ], - } + id: "2429", + name: "Paraluni Dex", + addresses: { + bsc: ["0xb3ca41D538998f884D9f8cE33703A7f49F112E98"], + }, }, { - "id":"916", - "name":"Pika Protocol", - "addresses":{ - "optimism":[ - "0x365324E5045df8c886EBe6AD5449F5CeB5881A40",//PikaPerpV2 - "0x58488bB666d2da33F8E8938Dbdd582D2481D4183",//VaultFeeReward - "0x2FaE8C7Edd26213cA1A88fC57B65352dbe353698",//Pika Protocol: Perpetual V2 - "0x8123DCe565111F64c01864B2ae0F35e3181A0A02",//PositionManager - "0xf9B19D0e62278ec9CBBaD5CcA5e7A270979bEa4E",//OrderBook - "0xD5A8f233CBdDb40368D55C3320644Fb36e597002",//PikaPerpV3 - "0x939c11c596B851447e5220584d37F12854bA02ae",//VaultFeeReward - "0x78136EF4BDcbdABb8D7aa09a33C3c16Ca6381910",//VaultTokenReward - ], - } + id: "575", + name: "Coinswap Space", + addresses: { + bsc: ["0x34DBe8E5faefaBF5018c16822e4d86F02d57Ec27"], + }, }, { - "id":"2618", - "name":"OasisSwap", - "addresses":{ - "arbitrum":[ - "0xe805977D5Fa2f05e2175507a1f8E44Cd3F22972c", - "0x5bf51bf7af925306866d6cf87b4b85189df67970", - ] - } + id: "544", + name: "SoulSwap", + addresses: { + fantom: [ + "0x6b3d631B87FE27aF29efeC61d2ab8CE4d621cCBF", + "0x994889A5a2BcfAB67e5242996e1331b74d777834", + "0x2CDa3B64Da9c1b7F18891E1567bc43eD558D089b", + ], + avax: ["0xa4594460A9d3D41e8B85542D34E23AdAbc3c86Ef", "0xE15d319896038aB76f2bc7cE15CBc2689b498570"], + }, }, { - "id":"1521", - "name":"Horizon Protocol", - "addresses":{ - "bsc":[ - "0xFCF3afa6cdA14B438AeEb8FfEd433D196Cd1367F", - "0x9657a0FD98e88464E1159d98b517A4945dbFBFC8",//DelegateApprovals - "0xadA58Cf32276CCD03a1C155688eFF8B3BC282285",//PhbStaking - "0xa1771DCfb7822C8853D7E64B86E58f7f1eB5e33E",//StakingRewards - "0xE21e39c383ABDce3edf13b7233Ad1ad5FEE42099",//RewardEscrowV2 - ] - } + id: "695", + name: "Dinosaur Eggs", + addresses: { + bsc: ["0xE9C7650b97712C0Ec958FF270FBF4189fB99C071"], + }, + }, + { + id: "1306", + name: "ProtoFi", + addresses: { + fantom: ["0xF4C587a0972Ac2039BFF67Bc44574bB403eF5235"], + }, + }, + { + id: "1893", + name: "MIND Games", + addresses: { + arbitrum: ["0x750eD5cF0f5278be9C6562399f0791dD221C4f83"], + }, + }, + { + id: "595", + name: "Convergence", + addresses: { + ethereum: ["0x8Cda39226daf33ae1Aba0C92C34d1a1982Cf0210", "0x37c7C2ae51E968CEfB82cFF2102727256D36D6eE"], + moonbeam: [], + }, + }, + { + id: "367", + name: "PinkSwap", + addresses: { + bsc: ["0x319EF69a98c8E8aAB36Aea561Daba0Bf3D0fa3ac"], + }, + }, + { + id: "867", + name: "GIBXSwap", + addresses: { + bsc: ["0x2fB9Cee9d580cD12E671b8789F2f9fb228A5d2bc"], + }, }, { - "id":"2970", - "name":"Beluga Dex", - "addresses":{ - "arbitrum":[ - "0x7668bcBf650AE69297E411d2A8Ec91e07dd91c0B", - "0x48945A091108bBbd54829B632B1dF94BB50F81D7" - ] - } + id: "2577", + name: "Sharky Swap", + addresses: { + arbitrum: ["0x29631E68d81b0e02a507f54a799402E8Cfa6a4d8"], + }, }, { - "id":"2968", - "name":"GND Protocol", - "addresses":{ - "arbitrum":[ - "0xd8769d8826149B137AF488b1e9Ac0e3AFdbC058a",//UniswapV3LP - ] - } + id: "2203", + name: "Tetu Swap", + addresses: { + polygon: ["0xBCA055F25c3670fE0b1463e8d470585Fe15Ca819"], + }, }, { - "id":"2957", - "name":"Seashell", - "addresses":{ - "arbitrum":[ - "0x5BAC5eEfA13696Cf815388021235b215587263Ea",//Blueberry GLP Compounder LP Token (Blueberry...) - ] - } + id: "384", + name: "Firebird", + addresses: { + polygon: ["0xb31D1B1eA48cE4Bf10ed697d44B747287E785Ad4"], + avax: ["0xe0C38b2a8D09aAD53f1C67734B9A95E43d5981c0"], + arbitrum: ["0x0c6134Abc08A1EafC3E2Dc9A5AD023Bb08Da86C3"], + dogechain: ["0xe0C38b2a8D09aAD53f1C67734B9A95E43d5981c0"], + bsc: ["0x92e4F29Be975C1B1eB72E77De24Dccf11432a5bd"], + cronos: ["0x4A5a7331dA84d3834C030a9b8d4f3d687A3b788b"], + ethereum: ["0xe0C38b2a8D09aAD53f1C67734B9A95E43d5981c0"], + fantom: ["0xe0C38b2a8D09aAD53f1C67734B9A95E43d5981c0"], + optimism: ["0x0c6134Abc08A1EafC3E2Dc9A5AD023Bb08Da86C3"], + }, }, { - "id":"2586", - "name":"Equilibre", - "addresses":{ - "kava":[ - "0xA7544C409d772944017BB95B99484B6E0d7B6388",//router2 - "0xa337E9426d080970b026caFfb4a83D185b85A124",//GaugeFactory - "0x7B14b7288D50810a6982149B107238065AA7fcb7",//BribeFactory - "0x35361C9c2a324F5FB8f3aed2d7bA91CE1410893A",//VotingEscrow - "0x553796D20BB387E9b3F91Aa35fD289B753D63baF",//VeArtProxy - "0x8825be873e6578F1703628281600d5887C41C55A",//RewardsDistributor - ] - } + id: "421", + name: "Paint Swap", + addresses: { + fantom: ["0xfD000ddCEa75a2E23059881c3589F6425bFf1AbB"], + }, }, { - "id":"1765", - "name":"Unicrypt", - "addresses":{ - "ethereum":[ - "0x663a5c229c09b049e36dcc11a9b0d4a8eb9db214",//univ2locker - "0xdba68f07d1b7ca219f78ae8582c213d975c25caf",//tokenvesting - "0x17e00383a843a9922bca3b280c0ade9f8ba48449",//pollocker - "0xed9180976c2a4742c7a57354fd39d8bec6cbd8ab",//sushilocker - ], - "bsc":[ - "0xeaed594b5926a7d5fbbc61985390baaf936a6b8d",//TokenVestingBSC - "0xc765bddb93b0d1c1a88282ba0fa6b2d00e3e0c83",//UniswapV2Locker - "0xc765bddb93b0d1c1a88282ba0fa6b2d00e3e0c83",//pancakev2locker - "0xc8B839b9226965caf1d9fC1551588AaF553a7BE6",//pancakev1locker - "0x74dee1a3e2b83e1d1f144af2b741bbaffd7305e1",//biswaplocker - "0x1391b48c996ba2f4f38aee07e369a8f28d38220e",//safeswaplocker - "0x1f23742D882ace96baCE4658e0947cCCc07B6a75",//julswaplocker - "0xb89a15a4f3518c14c21be04b55546162b0cb39f0",//babydogeswaplocker - ], - "polygon":[ - "0xadb2437e6f65682b85f814fbc12fec0508a7b1d0",//quickswaplocker - ], - "avax":[ - "0xa9f6aefa5d56db1205f36c34e6482a6d4979b3bb",//traderjoelocker - ], - "xdai":[ - "0xe3D32266974f1E8f8549cAf9F54977040e7D1c07",//honeyswaplocker - ] - } + id: "1349", + name: "Degen Haus", + addresses: { + fantom: ["0xC681174dc7639305d762E016cD3aFf93219D6cc1"], + }, }, { - "id":"2397", - "name":"Gyroscope Protocol", - "addresses":{ - "polygon":[ - "0x37b8E1152fB90A867F3dccA6e8d537681B04705E",//Proto Gyro Dollar (p-GYD) - "0x68BDeE1bF95AD730F379A05eB8c51fb5dFA07748",//FreezableTransparentUpgradeableProxy - ] - } + id: "473", + name: "Baguette", + addresses: { + avax: ["0xF7b1e993d1b4F7348D64Aa55A294E4B74512F7f2"], + }, }, { - "id":"3093", - "name":"eZKalibur", - "addresses":{ - "era":[ - "0x498f7bB59c61307De7dEA005877220e4406470e9",//router - ] - } + id: "429", + name: "BambooDeFi", + addresses: { + bsc: ["0xBA9DF2c143C502A433d6A876C1a291C9FC940cf9"], + }, }, { - "id":"2952", - "name":"Archi Finance", - "addresses":{ - "arbitrum":[ - "0x7674Ccf6cAE51F20d376644C42cd69EC7d4324f4",//WETHVaultProxy - "0x179bD8d1d654DB8aa1603f232E284FF8d53a0688",//USDTVaultProxy - "0xa7490e0828Ed39DF886b9032ebBF98851193D79c",//USDCVaultProxy - "0xee54A31e9759B0F7FDbF48221b72CD9F3aEA00AB",//WBTCVaultProxy - ] - } + id: "978", + name: "ChickenSwap", + addresses: { + ethereum: ["0xB72F87Df6B5C004227B6a045fD451cb716669150"], + }, }, { - "id":"3173", - "name":"Equity", - "addresses":{ - "fantom":[ - "0x9e4105F9E2284532474f69e65680e440F4C91cb8",//Vault - "0xe8ca91bAe8AA0E9229F6E78f8976B837134b60E8",//ShortsTracker - "0xA83F31aF44e812d2EdF0536516e7D274cd7301B8",//OrderBook - "0xd311Fd89e8403c2E90593457543E99cECc70D511",//Router - "0xf2BfB9cA6e21b30034b9d56Cb4735d2c180cC7e1",//PositionRouter - "0xfb0c0cE1d43B373b7535Ef556e1D55D285156887",//RewardRouter - "0x8f02357cb55DbAd26DF5a7558CD810D5D0f05f43",//OrderBookReader - "0x3e8B14B5534333A2B83a31d778ec3bCd9dc946f4",//RewardReader - "0x8F6666bd81C4811F433B8232a1c7D4383f11b2dC",//Timelock - "0xBF65ca2747a1EeebF8a1b0d119De8BE0540c57Cb",//StakedEquity - "0x88171375F6236885f463341d001B419D477eDB74",//Reader - ] - } + id: "976", + name: "WingSwap", + addresses: { + fantom: ["0x2b660040b289B1B570E053b21dd9A6F1067AD7F5"], + }, + }, + { + id: "692", + name: "HurricaneSwap", + addresses: { + avax: [ + "0xb9a9BB6CC39387548BAA7185fbFf51d47eef8771", + "0xB6559dD3cBec057078fBd9477e676a24cCEA0609", + "0x010D464fE46ABA2FB468a4BB251248d669C67c72", + ], + }, }, { - "id":"3345", - "name":"DackieSwap", - "addresses":{ - "base":[ - "0x195FBc5B8Fbd5Ac739C1BA57D4Ef6D5a704F34f7",//smartrouter - "0xCfB05AB06D338FD85BBF4486e69809D96A906b77",//nftmanager - "0xd592e2C815E0cf4B62169e09934FaAB28299708e",//v3lmpooldeployer - ] - } + id: "293", + name: "Lydia", + addresses: { + avax: ["0xA52aBE4676dbfd04Df42eF7755F01A3c41f28D27"], + }, }, { - "id":"3341", - "name":"Chronos V2", - "addresses":{ - "arbitrum":[ - //univ3 fork - "0xE0aBdFD837D451640CF43cB1Ec4eE87976eFbb41",//swapRouter - "0x9aAb66944D66516FEFa26D27267E02af03d17c02",//nftDescriptor - "0x5e74e05771f0d1222834e66DE5326C82a2C852e0",//nonfungibleTokenPositionDescriptor - "0x520CAF43e3C6481b71DB95711802ED9179ccA403",//nonfungiblePositionManager - ] - } + id: "2687", + name: "OpenXswap", + addresses: { + optimism: ["0x744776F27080b584D447A780ba260c435f3aE7d5", "0x6e0CEf87B1D55ec54d657f0aDA04AE2c90A470bA"], + }, + }, + { + id: "815", + name: "PureSwap", + addresses: { + bsc: ["0x3e8743B5453A348606111AB0a4dEe7F70A87f305"], + }, + }, + { + id: "391", + name: "PantherSwap", + addresses: { + bsc: ["0xf5048C225a0D220cd784D81f4e07F137fAf35FF8", "0x24f7C33ae5f77e2A9ECeed7EA858B4ca2fa1B7eC"], + }, + }, + { + id: "396", + name: "Polydex", + addresses: { + polygon: [ + "0xC60aE14F2568b102F8Ca6266e8799112846DD088", + "0x5a56cB06d143a7cC0597c4804D5D76f2d5c2be81", + "0x512Ff58276046636590767B88f418DD84E47ce78", + "0x56A0b8BA16A84959541CcB3F42E7A9a9d16428F4", + ], + }, + }, + { + id: "1871", + name: "HunnySwap", + addresses: { + avax: ["0x8685aBD6959745E41D64194F42e21bbD25Fd57B3"], + }, }, { - "id":"3450", - "name":"Aerodrome", - "addresses":{ - "base":[ - //velodrome v2 fork - "0xeBf418Fe2512e7E6bd9b87a8F0f294aCDC67e6B4",//VotingEscrow - "0x16613524e02ad97eDfeF371bC883F2F5d6C480A5",//Voter - "0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43",//Router - ] - } + id: "289", + name: "YetiSwap", + addresses: { + avax: ["0x262DcFB36766C88E6A7a2953c16F8defc40c378A"], + }, }, { - "id":"3377", - "name":"Friend.tech", - "addresses":{ - "base":[ - "0xcf205808ed36593aa40a44f10c7f7c2f67d4a4d4" - ] - } - }, + id: "287", + name: "0.exchange", + addresses: { + avax: ["0x85995d5f8ee9645cA855e92de16FA62D26398060"], + bsc: ["0xba79bf6D52934D3b55FE0c14565A083c74FBD224"], + polygon: ["0x9894B0F28CcfA0F5c5F74EAC88f161110C5F8027"], + }, + }, { - "id":"3733", - "name":"Chat3", - "addresses":{ - "mantle":[ - "0xAd3dbD09835CF15c543Bc59d31865D659b71060e" - ] - } - }, + id: "2098", + name: "Muffin", + addresses: { + ethereum: ["0xded07E2da859714F69d93f9794344606Ed67907E"], + }, + }, { - "id":"970", - "name": "Drift", - "addresses":{ - "solana":[ - "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH", // dex program id - "VAULtLeTwwUxpwAw98E6XmgaDeQucKgV5UaiAuQ655D", // vaults program id - ] - } + id: "532", + name: "Twindex", + addresses: { + bsc: [ + "0x6B011d0d53b0Da6ace2a3F436Fd197A4E35f47EF", + "0xBCB41906bE2C2724A8CD0dec87512B2463535586", + "0xdd3565Bd68ef6882657fB17BCD66b436f819eBF3", + ], + }, }, { - "id":"parent#baseswap", - "name": "BaseSwap", - "addresses":{ - "base":[ - "0x327Df1E6de05895d2ab08513aaDD9313Fe505d86", // router - "0xc102505248c36f933934d4B2d7579D962a342eBC", - "0x2B0A43DCcBD7d42c18F6A83F86D1a19fA58d541A", - "0xDe151D5c92BfAA288Db4B67c21CD55d5826bCc93", // NonfungiblePositionManager - ] - } + id: "471", + name: "Complus Network", + addresses: { + avax: ["0x78c18E6BE20df11f1f41b9635F3A18B8AD82dDD1"], + bsc: ["0x07DC75E8bc57A21A183129Ec29bbCC232d79eE56"], + polygon: ["0x07DC75E8bc57A21A183129Ec29bbCC232d79eE56"], + heco: [], + }, + }, + { + id: "2779", + name: "ZenithSwap", + addresses: { + arbitrum: ["0x8CA9EF098F84ceDa319Ec12B9d21EeF50AA3624C"], + }, }, { - "id":"3575", - "name": "Scale", - "addresses":{ - "base":[ - "0x5E9d25014D01323d6F8c0C6640572e4444d11C94", // router - "0x3f0458FfB6D106d2F5CdeC9CEdc9054A69275489", - "0x2F87Bf58D5A9b2eFadE55Cdbd46153a0902be6FA" - ] - } + id: "2863", + name: "SaitaSwap", + addresses: { + ethereum: ["0x0c17e776CD218252ADFca8D4e761D3fe757e9778", "0x744A4c9c9F40A443ac2A5747D4f3b773e5d86763"], + bsc: ["0x744A4c9c9F40A443ac2A5747D4f3b773e5d86763"], + }, }, { - "id":"parent#swapbased", - "name": "SwapBased", - "addresses":{ - "base":[ - "0xaaa3b1F1bd7BCc97fD1917c18ADE665C5D31F066", // router - "0xcb9665E990027e115ccF22230b042e4E7eaBFDB2", // SingleStakingRewardsBase - "0xE39226E0864252E0fC9bD668FB796FD63a1B75A4", // SingleStakingRewardsBase - "0x2168eb98C6D416Afb85E7beef5abDc4FB4177dfE", // BlpToken - "0x265a30f14E34248567B5B0a83978C38dF38D0C60", // RewardRouter - "0xEfE632dB3A07FeBcEc04f76Ea54D9d49f27bCd57", // SingleStakingRewardsXBase - "0x272A9acB288915Bb52A0659c8F9f7bFeBA06fae5", // SingleStakingRewardsOtherTokens - "0x86dAbE269B1c5Ff7fCFf1eA32545489DF66C29EA", // SingleStakingRewardsOtherTokens - ] - } + id: "parent#skullswap", + name: "SkullSwap", + addresses: { + fantom: [ + "0x0A239A1fC3Bb5abc6F06ad950e52996308E8E925", + "0xe8E357B75823D1Cc133ED7265a27BC2D9237527c", + "0xA4C5457Eca4E36db9062871631351eF627146044", + "0x6d6E00B42c599ad8F70b2C006ad5135bF93Eb396", + ], + }, + }, + { + id: "2846", + name: "Solisnek Finance", + addresses: { + avax: ["0xeeee17b45E4d127cFaAAD14e2710489523ADB4d8"], + }, + }, + { + id: "2803", + name: "Native", + addresses: { + ethereum: ["0x7A27BBD83b5065eEFf85411DFE048Eaac9be2A9D", "0xF1aF55CC38A92A3b072D05e146E27c2E75bB8F2D"], + bsc: ["0x7A27BBD83b5065eEFf85411DFE048Eaac9be2A9D", "0x83B9fcea670d66626d9db79Af00fc718014C3de8"], + }, + }, + { + id: "2821", + name: "Hamburger Finance", + addresses: { + arbitrum: ["0xE5e5Cd7685755BF4c82137639d75b068ed657384"], + }, }, { - "id":"parent#alien-base", - "name": "Alien Base", - "addresses":{ - "base":[ - "0x52eaeCAC2402633d98b95213d0b473E069D86590", // BasedDistributorV2 - "0x7f2ff89d3C45010c976Ea6bb7715DC7098AF786E", // UniswapV2Router02 - "0x927860797d07b1C46fbBe7f6f73D45C7E1BFBb27", // SwapFlashLoan - "0x8c1A3cF8f83074169FE5D7aD50B978e1cD6b37c7", // UniswapV2Router02 - "0x3485F8E155973cC247CBEa9E77C0dBBB4BBb79E7", // UniswapV2Router02 - "0xe0808b8e2bDD70D70e540f977cF40E26e5811054", // AlienbaseZapV1 - "0xFBE87Ee1Ee62244A2dF80a8093Eab829C52863e8", // PredictionETH - ] - } + id: "2812", + name: "Forge SX Trade", + addresses: { + arbitrum: ["0xE5e5Cd7685755BF4c82137639d75b068ed657384"], + }, }, { - "id":"3348", - "name": "Soswap", - "addresses":{ - "base":[ - "0x53BAE026d9a503d46a58aF4b65FCcbb7B904A911", // SOFIProxy - "0xBC097E42BF1E6531C32C5cEe945E0c014fA21964", // PortfolioFactory - "0x1e6Dbd0E827cd243d458ed73B9Ae1a6Db89B8668", // PortfolioModule - "0x4E69553b0aEf0949Fd38Bbf3EbeD866B431C9E68", // ManagerModule - "0x73Ada4aE37Ba1DF45Ba12c4478a27029e24cF2d7", // SOFITrading - ] - } + id: "2806", + name: "AstroFi", + addresses: { + ethereum: ["0x42c76F3BBC2E4d505420fE5bda4C316fA5234624"], + }, + }, + { + id: "2773", + name: "Auragi Finance", + addresses: { + arbitrum: ["0x0FaE1e44655ab06825966a8fCE87b9e988AB6170"], + }, }, { - "id":"3314", - "name": "RocketSwap Base", - "addresses":{ - "base":[ - "0x4cf76043B3f97ba06917cBd90F9e3A2AAC1B306e", // UniswapV2Router02 - "0x234Ccb5c64FDB3958C47E8efBe122b2d54633a96", // RcktLocker - "0x32C9ACE2d1eB47C3968660De9eF20569f850814D", // - "0xE20d24cf9fAF458b98B6F34e5346361e6492aA5F", - "0x304063953727b53048500dfd877A17d1C4f6EaFf", // RcktMasterChef - "0x2ec62d08277FfC42eB5af71c7595C1a9f9458A3c", // RcktVault - ] - } + id: "2757", + name: "Glacier Finance", + addresses: { + avax: ["0xC5B8Ce3C8C171d506DEb069a6136a351Ee1629DC"], + }, }, { - "id":"3540", - "name": "MoonBase", - "addresses":{ - "base":[ - "0x99554FA8B48F735D4Ccce5E077742cF2D084b258", // MoonChef - "0x4617695387bE48c3202a0A9165549c790C4A08Af", // UniswapRouter - ] - } + id: "2731", + name: "Swapline", + addresses: { + fantom: [ + "0xb2755FeEc193a718f6135351057a63b2F7B95cef", + "0xFC33f3cac9f6d1713a4B7787dF6a9a33bAD244d6", + "0x795bF60522F36244E4e51ed5522fE83Df4D3Bf9a", + ], + }, }, { - "id":"3380", - "name": "Baso Finance", + id: "2721", + name: "Flair Dex", + addresses: { + avax: ["0xd79eE05678241C16e6195b9FC0bCc778A02d4324", "0xBfC8f125CFce29789500987A9553395E84bDfDD2"], + }, + }, + /* + { //uses firebird router to swap + "id":"2720", + "name":"Satin Exchange", "addresses":{ - "base":[ - "0x5568e4F19B9063E0e0386bF66B3eeF2b65327486", // Router - "0x84B5897A23B067D87Be550e440a3436f6d149fe2", // VotingEscrow - "0xf11432A2754fCf7BFA1725d37e65840776e39ec7", // RewardsDistributor - "0xb670568C84C541eacBee2EF7209A6Ba2Ab349BEC", // Voter - "0xF0FfC7cd3C15EF94C7c5CAE3F39d53206170Fc01", // BasoStaking + "polygon":[ + "0xb31D1B1eA48cE4Bf10ed697d44B747287E785Ad4"//firebird router ] } - }, - { - "id":"parent#canary", - "name":"Canary", + },*/ + /*{ // commented due to inactive project/returning error + "id":"392", + "name":"WardenSwap", "addresses":{ + "bsc":[ + "0x451ef8D6B645a60115EB8b8bEa76B39C0C761004", + "0x71ac17934b60A4610dc58b715B61e45DCBdE4054", + ], + "ethereum":[ + "0x39f97198c5DbC193EB962c4B3B7e447091A18eAB" + ], "avax":[ - "0x06f8ED60393AC6A4B16900273C9313222dfe9940" - ] + "0x5EF960Eb78B8CFc11e654D03BeEB313BaDF5C7C0" + ], + "arbitrum":[ + "0x79A556ef2c5b613dB3DFa8797E6772c5AAF86834" + ], + "optimism":[ + "0x7EA8c22E6Dcd7bd69eb180664Da68e1f1F11D696" + ], } + },*/ + { + id: "351", + name: "Gravity Finance", + addresses: { + polygon: [ + "0x57dE98135e8287F163c59cA4fF45f1341b680248", + "0xF2e6b6d7F3b62449260ac87B66cEf9e2664C26d7", + "0xb4A1F1Dd67e129190feeB4bcADB5298D434d54f2", + "0x57dE98135e8287F163c59cA4fF45f1341b680248", + "0xEbe141dE74F1E6377f53551C275568d7bcBC4119", + ], + }, }, { - "id":"3977", - "name": "SquaDeFi", - "addresses":{ - "base":[ - "0xfad362E479AA318F2De7b2c8a1993Df9BB2B3b1f", // KeyManager - ] - } + id: "1296", + name: "ZipSwap", + addresses: { + arbitrum: ["0x4D70D768f5E1e6a7062973aFB0c7FBDa9bBb42b3"], + optimism: ["0xE6Df0BB08e5A97b40B21950a0A51b94c4DbA0Ff6", "0x00000000000013adDDC0919642d45f5d9Df09502"], + }, + }, + { + id: "1364", + name: "Narwhalswap", + addresses: { + bsc: ["0x849B7b4541CDE9cBE41cfd064d9d7fF459b9cEa4"], + }, + }, + { + id: "1074", + name: "AutoShark", + addresses: { + bsc: ["0xB0EeB0632bAB15F120735e5838908378936bd484"], + }, + }, + { + id: "883", + name: "SmartDEX", + addresses: { + polygon: ["0x6f5fE5Fef0186f7B27424679cbb17e45df6e2118"], + }, + }, + { + id: "2331", + name: "SwapFish", + addresses: { + arbitrum: ["0xcDAeC65495Fa5c0545c5a405224214e3594f30d8"], + bsc: ["0xcDAeC65495Fa5c0545c5a405224214e3594f30d8"], + }, + }, + { + id: "409", + name: "CafeSwap", + addresses: { + polygon: ["0x9055682E58C74fc8DdBFC55Ad2428aB1F96098Fc"], + bsc: ["0x933DAea3a5995Fb94b14A7696a5F3ffD7B1E385A"], + }, + }, + { + id: "1530", + name: "Excalibur", + addresses: { + fantom: ["0xc8Fe105cEB91e485fb0AC338F2994Ea655C78691"], + }, + }, + { + id: "1359", + name: "CapitalDEX", + addresses: { + ethereum: ["0xDc6844cED486Ec04803f02F2Ee40BBDBEf615f21"], + }, + }, + { + id: "1253", + name: "HakuSwap", + addresses: { + avax: ["0xE6e79A66cB32c53A9d56B18FA737fb5D72c71475", "0x5F1FdcA239362c5b8A8Ada26a256ac5626CC33E0"], + }, + }, + { + id: "455", + name: "ZooCoin", + addresses: { + fantom: ["0x40b12a3E261416fF0035586ff96e23c2894560f2", "0xA7843036252e79fBc495814e714F1439dF8Dc8a4"], + }, + }, + { + id: "1750", + name: "CryptoSwap", + addresses: { + bsc: ["0xe4964c56f46063F25f2a77269B36a773140Ab325"], + }, + }, + { + id: "2865", + name: "Moonbase Alpha", + addresses: { + arbitrum: [ + "0x88FcF70243B4BCC0325060805b7bE9b3DA984805", + "0x5cb6600359Cd392A6Ffea69781d1C6db6A25A18F", //masterchef + ], + }, + }, + { + id: "1150", + name: "WraithSwap", + addresses: { + fantom: [ + "0x8C9E059a729C17fB294cd782eB66Df3871D29173", + "0x37b106f101a63D9d06e53140E52Eb6F8A3aC5bBc", //masterchef + ], + }, + }, + { + id: "920", + name: "Raven", + addresses: { + fantom: [ + "0xbCEf0849DDd928835A6Aa130aE527C2703CD832C", //masterchef + "0x2639779d6CA9091483a2A7b9A1FE77Ab83b90281", //masterchef + ], + }, + }, + { + id: "737", + name: "Dino.Exchange", + addresses: { + bsc: ["0xe12405F0A569A9402fF563FB923A96DC2525D3Eb", "0xc2a88eCE6B6321819D947c9EadEABBa699c16349"], + }, + }, + { + id: "1363", + name: "Oni Exchange", + addresses: { + bsc: [ + "0x3f49193f91a07bb87102e5768fa7a61692EA4D9c", + "0x974A8959c52f6109C59d0A6D63D4eA4CC522DfA2", + "0x09a8521FC838D795555113Fcb5b8fC8C267783F9", //masterchef + "0xE93fC7e6103EF86F3329635B8197D462B74F0cb8", //masterchef + ], + }, + }, + { + id: "1857", + name: "FATExFi", + addresses: { + polygon: ["0x8863f716706e9e4f13A52601A129DD1E1c3fA08B"], + }, + }, + { + id: "1859", + name: "AuraSwap", + addresses: { + polygon: [ + "0x09Fd8B8ed6E30e583379Dc73b9261dF5E1A28b6F", + "0x44Bb1a3E56Cb12b7B1a8E925f09A170e3646346d", //masterchef + ], + }, + }, + { + id: "1018", + name: "Gains Network", + addresses: { + polygon: [ + "0x91993f2101cc758D0dEB7279d41e880F7dEFe827", //gdai + "0xFb06a737f549Eb2512Eb6082A808fc7F16C0819D", //staking + "0x4ba64a81ca50D8B66684C664d75b55eaCcFaCAEb", //trading + "0x8103C0665A544201BBF606d90845d1B2D8005F1c", //nftrewards + "0xd285f881886505b9Ef6684E1aaa7949a56B0C7Da", //gnsmigration + "0xa33f7069f075A54481868e4C0b8D26925A218362", //lockingbridge + "0xDF774A4F3EA5095535f5B8f5b9149caF90FF75Bd", //erc20bridge + "0x2D266A94469d05C9e06D52A4D0d9C23b157767c2", //GFarmNft5 + "0x02e2c5825C1a3b69C0417706DbE1327C2Af3e6C2", //GFarmNft4 + "0x3378AD81D09DE23725Ee9B9270635c97Ed601921", //GFarmNft3 + "0x77cd42B925e1A82f41d852D6BE727CFc88fddBbC", //GFarmNft2 + "0x7075cAB6bCCA06613e2d071bd918D1a0241379E2", //GFarm2Token(old) + "0xF9A4c522E327935BD1F5a338c121E14e4cc1f898", //GFarmNft1 + ], + arbitrum: [ + "0xd85E038593d7A098614721EaE955EC2022B9B91B", //gdai + "0x6B8D3C08072a020aC065c467ce922e3A36D3F9d6", //staking + "0x4ba64a81ca50D8B66684C664d75b55eaCcFaCAEb", //trading + "0x8103C0665A544201BBF606d90845d1B2D8005F1c", //nftrewards + "0xd285f881886505b9Ef6684E1aaa7949a56B0C7Da", //gnsmigration + "0x0F9E4375facBeB90DAA850f677819b438ce50827", //ERC721MintingBridge + "0x01cAaaA682Ceba8cd6c02f93BB1393fB415fA5e2", //erc20bridge + "0x5e3b541Ad6AcC4381C110247946C863e05ffc9BE", //GFarmNft5 + "0x40F0AeaB6383Be2f254cE40B79089070Fa1a21A1", //GFarmNft4 + "0x9834159EAF9811cf4C568294D5C7C9158F84b384", //GFarmNft3 + "0xD1F024ba4Dbb1593B486cB5031b3AC5aC28e8A4e", //GFarmNft2 + "0x75cbcc5414C539C2B302A5fA60E30B949D2D6F89", //GFarmNft1 + ], + ethereum: [ + "0x14e2f9B0381Af4227D26BEE7d8E4D424466A7F3F", //GFarmNftSwap + "0x151757c2E830C467B28Fe6C09c3174b6c76aA0c5", //GNSPoolV5 + "0x1E887E7115321B4ee5d58DD446eC09e12B45d81B", //GFarm + "0x5cA058C1c9E0Bea6b9b5366ADf73BC7f63aDc2d7", //GFarmNFTExchange + ], + }, + }, + { + id: "337", + name: "GMX", + addresses: { + arbitrum: [ + "0x489ee077994B6658eAfA855C308275EAd8097C4A", //Vault + "0xaBBc5F99639c9B6bCb58544ddf04EFA6802F4064", //Router + "0xb87a436B93fFE9D75c5cFA7bAcFff96430b09868", //PositionRouter + "0x09f77E8A13De9a35a7231028187e9fD5DB8a2ACB", //OrderBook + "0x5402B5F40310bDED796c7D0F3FF6683f5C0cFfdf", //StakedGlp + "0xA906F338CB21815cBc4Bc87ace9e68c87eF8d8F1", //RewardRouterV2 + ], + avax: [ + "0x9ab2De34A33fB459b538c43f251eB825645e8595", //Vault + "0x5F719c2F1095F7B9fc68a68e35B51194f4b6abe8", //Router + "0xffF6D276Bc37c61A23f06410Dce4A400f66420f8", //PositionRouter + "0x4296e307f108B2f583FF2F7B7270ee7831574Ae5", //OrderBook + "0xaE64d55a6f09E4263421737397D1fdFA71896a69", //StakedGlp + "0x82147C5A7E850eA4E28155DF107F2590fD4ba327", //RewardRouterV2 + ], + }, + }, + { + id: "2254", + name: "MUX Protocol", + addresses: { + arbitrum: [ + "0x917952280770Daa800E1B4912Ea08450Bf71d57e", //Vault + "0x3e0199792Ce69DC29A0a36146bFa68bd7C8D6633", //liquiditypool + "0x02FAe054ACD7FB1615471319c4E3029DFbC2B23C", //liquiditymanager + "0xa19fD5aB6C8DCffa2A295F78a5Bb4aC543AAF5e3", //OrderBook + "0xaf9C4F6A0ceB02d4217Ff73f3C95BbC8c7320ceE", //RewardRouter + ], + bsc: [ + "0x8D751570BA1Fd8a8ae89E4B27d18bf6C321Aab0a", //Vault + "0x855E99F768FaD76DD0d3EB7c446C0b759C96D520", //liquiditypool + "0xee85CDdCe0CF068091081eA0fcd53f279aa3B09F", //liquiditymanager + "0xa67aA293642C4e02D1b9F360b007C0dBDc451A08", //OrderBook + ], + avax: [ + "0x29a28cC3FdC128693ef6a596eF45c43ff63B7062", //Vault + "0x0bA2e492e8427fAd51692EE8958eBf936bEE1d84", //liquiditypool + "0x28f16eB86481066Bf63BcBEB05C8474f7120A36C", //liquiditymanager + "0x5898c3E218a8501533d771C86e2fA37743ea2aDd", //OrderBook + ], + optimism: [ + "0x39d653884B611E0A8dbdb9720Ad5D75642fd544b", //Vault + "0xc6BD76FA1E9e789345e003B361e4A0037DFb7260", //liquiditypool + "0xFEc3704f4A02cB0EE6C7d52Cbf72b11E0441E9d5", //liquiditymanager + "0x6Fde9892Fd5302ac3c68688085BD5b031A63BC9D", //OrderBook + ], + fantom: [ + "0xdAF2064F52F123EE1D410e97C2df549c23a99683", //Vault + "0x2e81F443A11a943196c88afcB5A0D807721A88E6", //liquiditypool + "0x5898c3E218a8501533d771C86e2fA37743ea2aDd", //liquiditymanager + "0x0c30b10462CdED51C3CA31e7C51019b7d25a965B", //OrderBook + ], + }, + }, + { + id: "2395", + name: "Level Finance", + addresses: { + bsc: [ + "0xA5aBFB56a78D2BD4689b25B8A77fd49Bb0675874", //LiquidityPool + "0xB5C42F84Ab3f786bCA9761240546AA9cEC1f8821", //seniorLLP + "0x4265af66537F7BE1Ca60Ca6070D97531EC571BDd", //MezzanineLLP + "0xcC5368f152453D497061CB1fB578D2d3C54bD0A0", //Junior LLP + "0x1Ab33A7454427814a71F128109fE5B498Aa21E5d", //LevelMaster (old farming contract) + "0x5aE081b6647aEF897dEc738642089D4BDa93C0e7", //LevelMasterV2 (farming contract) + "0xf584A17dF21Afd9de84F47842ECEAF6042b1Bb5b", //OrderManager + ], + }, + }, + { + id: "2116", + name: "0x", + addresses: { + ethereum: [ + "0xdef1c0ded9bec7f1a1670819833240f027b25eff", + "0x61935CbDd02287B511119DDb11Aeb42F1593b7Ef", //Exchangev3 + "0x12459C951127e0c374FF9105DdA097662A027093", //Exchangev1 + "0x080bf510FCbF18b91105470639e9561022937712", //Exchangev2.1 + "0xa26e80e7Dea86279c6d778D702Cc413E6CFfA777", //StakingProxyv3 + ], + bsc: ["0xdef1c0ded9bec7f1a1670819833240f027b25eff"], + polygon: ["0xdef1c0ded9bec7f1a1670819833240f027b25eff"], + avax: ["0xdef1c0ded9bec7f1a1670819833240f027b25eff"], + fantom: ["0xdef189deaef76e379df891899eb5a00a94cbc250"], + celo: ["0xdef1c0ded9bec7f1a1670819833240f027b25eff"], + optimism: ["0xdef1abe32c034e558cdd535791643c58a13acc10"], + arbitrum: ["0xdef1c0ded9bec7f1a1670819833240f027b25eff"], + }, + }, + { + id: "2899", + name: "Vertex", + addresses: { + arbitrum: [ + "0xbbee07b3e8121227afcfe1e2b82772246226128e", // endpoint + ], + }, + }, + { + id: "1917", + name: "Sudoswap", + addresses: { + ethereum: ["0x2b2e8cda09bba9660dca5cb6233787738ad68329", "0xb16c1342e617a5b6e4b631eb114483fdb289c0a4"], + }, + }, + { + id: "340", + name: "Olympus DAO", + addresses: { + ethereum: [ + "0x007fe7c498a2cf30971ad8f2cbc36bd14ac51156", + "0x0b7ffc1f4ad541a4ed16b40d8c37f0929158d101", + "0x73D7e4BDdEcAd7379d679e60f22788E501493896", + "0xf577c77ee3578c7f216327f41b5d7221ead2b2a3", + "0xB63cac384247597756545b500253ff8E607a8020", + "0x007F7735baF391e207E3aA380bb53c4Bd9a5Fed6", + ], + }, + }, + { + id: "2907", + name: "Chronos V1", + addresses: { + arbitrum: [ + "0xE708aA9E887980750C040a6A2Cb901c37Aa34f3b", //routerv2 + "0x5D9dBA2D0ec06F44Da7e234cBB0d7BA921834AE8", //masterchef + "0xC72b5C6D2C33063E89a50B2F77C99193aE6cEe6c", //voter + ], + }, + }, + { + id: "2903", + name: "Swaprum", + addresses: { + arbitrum: [ + "0x1342a24347532DE79372283B3A29c63C31Dd7711", //v2router + "0xEE6cbC97781ff3De7a068D2a6A2dec8CE3a05624", //SwaprumWithdrawals + ], + }, + }, + { + id: "2911", + name: "Aboard Exchange", + addresses: { + arbitrum: [ + "0x7a08b29A7Ad4A19A5ECa0c82F5F082872488D135", //PerpetualProxy + ], + }, + }, + { + id: "2902", + name: "DAMX", + addresses: { + fantom: [ + "0xD093eeE7c968CEef2df96cA9949eba1a1A9b2306", //Vault + "0xeD077045f38f864fba8aD9bdbF1CE8F108e5ddb9", //OrderBook + "0xECef79f974182f4E9c168E751101F23686Bdc6dF", //staking + ], + }, + }, + { + id: "2900", + name: "Wasabi", + addresses: { + ethereum: [ + "0xFc68f2130e094C95B6C4F5494158cbeB172e18a0", //Wasabi Option NFTs (WASAB) + "0xF29A66E420C240EbD23F775b93619C8F3cfFf856", //WasabiConduit + "0x8E2b50413a53F50E2a059142a9be060294961e40", //WasabiPoolFactory + ], + }, + }, + { + id: "2898", + name: "LionDEX", + addresses: { + arbitrum: [ + "0x8eF99304eb88Af9BDe85d58a35339Cb0e2a557B6", //vault + "0x154E2b1dBE9F493fF7938E5d686366138ddCE017", //staking + "0xFeb9Cc52aB4cb153FF1558F587e444Ac3DC2Ea82", //Escrowed LionDEX Token (esLION) + ], + }, + }, + { + id: "parent#smbswap", + name: "SMBSwap", + addresses: { + bsc: [ + "0xBDC5104a3C52A3f49f0324696f9Bb77E41516De7", //MasterChef + "0x009d611490eCfED2dC3F306231Bba7e7F3E9196E", //SMBRouter + "0x63C737E5BD543ECC0A02d91BfCb50845e1be31cF", //SMBRouter + "0x9D4823aa89Dc33ED53d930CB554AFFc58B0c9852", //SMBSwapLottery + "0x85C6129843D120454848F1Da39233AC4fcb50Cb4", //MasterChefV3 + "0x92D118350CAD5EbA374486dbe3d16A9FE66DaeBe", // SmartRouter + ], + }, + }, + { + id: "2886", + name: "RabbitX", + addresses: { + ethereum: [ + "0xFc7f884DE22a59c0009C91733196b012Aecb8F41", //Rabbit + "0x4973710327eDc6f8238DD2d73cf0B2e081e1B351", //RabbitDeposit + ], + }, + }, + { + id: "2883", + name: "Purple Bridge DEX", + addresses: { + polygon: ["0x1e2441Fd53C51d9CD1696BE2871eE672A0A01933"], + }, + }, + { + id: "2872", + name: "printyfinance", + addresses: { + avax: [ + "0x6A8f98d7e34Fd214B428BFc68c9309Ea3C4Fc7F1", //BaseV1Router01 + "0xDc72882909252E133a4A46eFB135b3B145366eba", //PrintyV1Router + "0x6902a8ecF99a732e5a73491Afc14e5E135eE4234", //BaseV2 + ], + }, + }, + { + id: "parent#blur", + name: "Blur", + addresses: { + ethereum: [ + "0x29469395eAf6f95920E59F858042f0e28D98a20B", //ERC1967Proxy + "0x0000000000A39bb272e79075ade125fd351887Ac", //Blur bidding + ], + }, + }, + { + id: "2919", + name: "Backed", + addresses: { + ethereum: [ + "0xF4d4e4ae7fd9CbAfc24b9B0Da2596260c8368314", //paprcontroller + "0x3b29c19ff2fcEa0Ff98D0ef5B184354D74eA74b0", //paprcontroller + ], + }, + }, + { + id: "2918", + name: "DebtDAO", + addresses: { + ethereum: [ + "0xc9eF6509A09b92043cedce689DfAA760048aBd7F", //LineFactory + ], + }, + }, + { + id: "2862", + name: "Hyperliquid", + addresses: { + arbitrum: ["0xC67E9Efdb8a66A4B91b1f3731C75F500130373A4", "0x2df1c51e09aecf9cacb7bc98cb1742757f163df7 "], + }, + }, + { + id: "319", + name: "Convex Finance", + addresses: { + ethereum: ["0xf403c135812408bfbe8713b5a23a04b3d48aae31", ADDRESSES.ethereum.vlCVX], + }, + }, + { + id: "270", + name: "Liquity", + addresses: { + ethereum: [ + "0x4f9fbb3f1e99b56e0fe2892e623ed36a76fc605d", //staking + "0x66017d22b0f8556afdd19fc67041899eb65a21bb", //stabilitypool + "0x24179cd81c9e782a4096035f7ec97fb8b783e007", + ], + }, }, + /* + Only bridge addresses, not actual users { - "id":"3107", - "name":"EigenLayer", + "id":"144", + "name":"dYdX", "addresses":{ "ethereum":[ - "0x858646372cc42e1a627fce94aa7a7033e7cf075a" - ] + "0xd54f502e184b6b739d7d27a6410a67dc462d69c8", + "0x8e8bd01b5a9eb272cc3892a2e40e64a716aa2a40", + "0x0fd829c3365a225fb9226e75c97c3a114bd3199e", + "0x5aa653a076c1dbb47cec8c1b4d152444cad91941" + ], } }, + */ { - "id":"1004", - "name":"Colony", - "addresses":{ - "avax":[ - "0xA2e7ab89A2C59818E1ecD925E718a9d63889A131", // Router - "0x2aC45f92EABaa8DCB2eA1807A659a1393C3947d0", // Masterchef - "0x3Db497a9783eBbEda6950d4f1911B3a27D79C071", // AntTiers - "0x62685d3EAacE96D6145D35f3B7540d35f482DE5b", // StakingV3 - "0x62B38293896e040e36fE5345F9D30DbFd75C04B9", // EarlyStageManager - "0x17CE2A490CB260b48891aDE019a86f4B4a5520d4", // Comments - "0xac59c21ADfdDb1E56A959dD60a08c07AaED2F3Ba", // Upvotes - "0xd071AA359ed1b7776A12c8329f2C337aBED157D7", // Analysis - ] - } - } - -] as ProtocolAddresses[]).filter(isAddressesUsable) + id: "parent#radiant", + name: "Radiant", + addresses: { + arbitrum: [ + "0x8991c4c347420e476f1cf09c03aba224a76e2997", + "0x196bf3a63c50bca1eff5a5809b72dfc58f0c2c1a", + "0xebc85d44cefb1293707b11f707bd3cec34b4d5fa", + "0x2032b9a8e9f7e76768ca9271003d3e43e1616b1f", + "0x5682a39078edce41a65f1bd8733bf9ca2bbe3b1b", + "0xc963ef7d977ecb0ab71d835c4cb1bf737f28d010", + ], + bsc: [ + "0x13ef2a9e127ae8d9e9b863c7e375ba68e1a42ac6", + "0xd50cf00b6e600dd036ba8ef475677d816d6c4281", + "0x7c16abb090d3fb266e9d17f60174b632f4229933", + ], + }, + }, + { + id: "parent#paraspace", + name: "ParaSpace", + addresses: { + ethereum: [ + "0x638a98bbb92a7582d07c52ff407d49664dc8b3ee", + "0x59b72fdb45b3182c8502cc297167fe4f821f332d", + "0xf090eb4c2b63e7b26e8bb09e6fc0cc3a7586263b", + "0xc5c9fb6223a989208df27dcee33fc59ff5c26fff", + ], + }, + }, + { + id: "438", + name: "Tokemak", + addresses: { + ethereum: [ + "0x04bda0cf6ad025948af830e75228ed420b0e860d", + "0xd3d13a578a53685b4ac36a1bab31912d2b2a2f36", + "0x8858a739ea1dd3d80fe577ef4e0d03e88561faa3", + "0x41f6a95bacf9bc43704c4a4902ba5473a8b00263", + ], + }, + }, + { + id: "636", + name: "Keep3r Network", + addresses: { + ethereum: [ + "0x02777053d6764996e594c3e88af1d58d5363a2e6", + "0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44", + "0xb9d18ab94cf61bb2bcebe6ac8ba8c19ff0cdb0ca", + ], + }, + }, + { + id: "2255", + name: "NFTfi", + addresses: { + ethereum: ["0xe52cec0e90115abeb3304baa36bc2655731f7934", "0x8252df1d8b29057d1afe3062bf5a64d503152bc8"], + }, + }, + { + id: "483", + name: "NFTX", + addresses: { + ethereum: [ + "0x941a6d105802cccaa06de58a13a6f49ebdcd481c", + "0xdc774d5260ec66e5dd4627e1dd800eff3911345c", + "0x688c3e4658b5367da06fd629e41879beab538e37", + "0x3e135c3e981fae3383a5ae0d323860a34cfab893", + ], + }, + }, + { + id: "2086", + name: "Rage Trade", + addresses: { + arbitrum: [ + "0x1d42783E7eeacae12EbC315D1D2D0E3C6230a068", //Curve Yield Strategy + "0x4b928aFd7CA775C7f4ECdf2c00B7e608962AbbDc", //Rage Trade: Vault Periphery + ], + }, + }, + { + id: "2192", + name: "PlutusDAO", + addresses: { + arbitrum: [ + "0x35cD01AaA22Ccae7839dFabE8C6Db2f8e5A7B2E0", //PlutusPrivateTGE + "0x195B6eA50150900A25FA0928b8B65B03C7666D10", //TGEController + "0xc1D8f4109eC84db9b607e2705779142eC8F9534a", //Plutus DAO: TGE Vault ETH + "0xF4790fc873351C624d225269d4d21cF591e441b2", //Plutus DAO: TGE Vault DPX + "0xd6c9fe8dbc50c620222e8679CFf0461994b532DA", //Plutus DAO: TGE Vault JONES + "0x27Aaa9D562237BF8E024F9b21DE177e20ae50c05", //Plutus DAO: 1 Month Plutus Epoch Staking + "0xE59DADf5F7a9decB8337402Ccdf06abE5c0B2B3E", //Plutus DAO: 3 Month Plutus Epoch Staking + "0xBEB981021ed9c85AA51d96C0c2edA10ee4404A2e", //Plutus DAO: 6 Month Plutus Epoch Staking + "0x5593473e318F0314Eb2518239c474e183c4cBED5", //Plutus DAO: MasterChef + "0x66Cd8Cb1bA49f1A07703fa6E5BFE2BEB2eC8c706", //PlutusDAO: Plutus JONES Depositor + "0x4D56D5A417269A5bFa909cc0f67DFFE992272606", //Plutus DAO: Dpx Depositor + "0x20DF4953BA19c74B2A46B6873803F28Bf640c1B5", //PlutusDAO: Old plsDPX Farm + "0x23B87748b615096d1A0F48870daee203A720723D", //PlutusDAO: plsJONES - Plutus Chef + "0x6CCD4CFaF4bDa43c09682B3e588B4bd18BFFd603", //PrivateTgeRewards + "0x548C30b0af3CE6D96F1A63AfC05F0fb66495179F", //PlutusDAO: DPX Depositor + "0x75c143460F6E3e22F439dFf947E25C9CcB72d2e8", //PlutusDAO: plsDPX Farm + "0x04B724389Dd28Ffc9a3A91Ab4149a77530282f04", //PrivateTgeVester + "0xA61f0d1d831BA4Be2ae253c13ff906d9463299c2", //PlutusChef + "0xb059Fc19371691aa7A3EC66dD80684FFE17A7D5c", //PlutusChef + ADDRESSES.arbitrum.plvGLP, //PlvGlpToken + "0x4E5Cf54FdE5E1237e80E87fcbA555d829e1307CE", //PlutusDAO: plvGLP Farm + "0x8c12e3C9b26Ee2e43A1a71cd974e6bF250472129", //SpaDepositor + "0x73e7c78E8a85C074733920f185d1c78163b555C8", // + "0x9F07B8D6DDA7E68260Add1e38447D0Caa6F1BA0d", //PlutusChef + "0xbe68e51f75F34D8BC06D422056af117b8c23fd54", // + "0x13794D30D01c96D6595d1D956f3dd70AEc2C238B", //ArbDepositor + "0xCfc273D86333bF453b847d4D8cb7958307D85196", // + "0x4C2C41cFfC920CA9dD5F13E88DcF5062ceF37455", // + ], + }, + }, + { + id: "916", + name: "Pika Protocol", + addresses: { + optimism: [ + "0x365324E5045df8c886EBe6AD5449F5CeB5881A40", //PikaPerpV2 + "0x58488bB666d2da33F8E8938Dbdd582D2481D4183", //VaultFeeReward + "0x2FaE8C7Edd26213cA1A88fC57B65352dbe353698", //Pika Protocol: Perpetual V2 + "0x8123DCe565111F64c01864B2ae0F35e3181A0A02", //PositionManager + "0xf9B19D0e62278ec9CBBaD5CcA5e7A270979bEa4E", //OrderBook + "0xD5A8f233CBdDb40368D55C3320644Fb36e597002", //PikaPerpV3 + "0x939c11c596B851447e5220584d37F12854bA02ae", //VaultFeeReward + "0x78136EF4BDcbdABb8D7aa09a33C3c16Ca6381910", //VaultTokenReward + ], + }, + }, + { + id: "2618", + name: "OasisSwap", + addresses: { + arbitrum: ["0xe805977D5Fa2f05e2175507a1f8E44Cd3F22972c", "0x5bf51bf7af925306866d6cf87b4b85189df67970"], + }, + }, + { + id: "1521", + name: "Horizon Protocol", + addresses: { + bsc: [ + "0xFCF3afa6cdA14B438AeEb8FfEd433D196Cd1367F", + "0x9657a0FD98e88464E1159d98b517A4945dbFBFC8", //DelegateApprovals + "0xadA58Cf32276CCD03a1C155688eFF8B3BC282285", //PhbStaking + "0xa1771DCfb7822C8853D7E64B86E58f7f1eB5e33E", //StakingRewards + "0xE21e39c383ABDce3edf13b7233Ad1ad5FEE42099", //RewardEscrowV2 + ], + }, + }, + { + id: "2970", + name: "Beluga Dex", + addresses: { + arbitrum: ["0x7668bcBf650AE69297E411d2A8Ec91e07dd91c0B", "0x48945A091108bBbd54829B632B1dF94BB50F81D7"], + }, + }, + { + id: "2968", + name: "GND Protocol", + addresses: { + arbitrum: [ + "0xd8769d8826149B137AF488b1e9Ac0e3AFdbC058a", //UniswapV3LP + ], + }, + }, + { + id: "2957", + name: "Seashell", + addresses: { + arbitrum: [ + "0x5BAC5eEfA13696Cf815388021235b215587263Ea", //Blueberry GLP Compounder LP Token (Blueberry...) + ], + }, + }, + { + id: "2586", + name: "Equilibre", + addresses: { + kava: [ + "0xA7544C409d772944017BB95B99484B6E0d7B6388", //router2 + "0xa337E9426d080970b026caFfb4a83D185b85A124", //GaugeFactory + "0x7B14b7288D50810a6982149B107238065AA7fcb7", //BribeFactory + "0x35361C9c2a324F5FB8f3aed2d7bA91CE1410893A", //VotingEscrow + "0x553796D20BB387E9b3F91Aa35fD289B753D63baF", //VeArtProxy + "0x8825be873e6578F1703628281600d5887C41C55A", //RewardsDistributor + ], + }, + }, + { + id: "1765", + name: "Unicrypt", + addresses: { + ethereum: [ + "0x663a5c229c09b049e36dcc11a9b0d4a8eb9db214", //univ2locker + "0xdba68f07d1b7ca219f78ae8582c213d975c25caf", //tokenvesting + "0x17e00383a843a9922bca3b280c0ade9f8ba48449", //pollocker + "0xed9180976c2a4742c7a57354fd39d8bec6cbd8ab", //sushilocker + ], + bsc: [ + "0xeaed594b5926a7d5fbbc61985390baaf936a6b8d", //TokenVestingBSC + "0xc765bddb93b0d1c1a88282ba0fa6b2d00e3e0c83", //UniswapV2Locker + "0xc765bddb93b0d1c1a88282ba0fa6b2d00e3e0c83", //pancakev2locker + "0xc8B839b9226965caf1d9fC1551588AaF553a7BE6", //pancakev1locker + "0x74dee1a3e2b83e1d1f144af2b741bbaffd7305e1", //biswaplocker + "0x1391b48c996ba2f4f38aee07e369a8f28d38220e", //safeswaplocker + "0x1f23742D882ace96baCE4658e0947cCCc07B6a75", //julswaplocker + "0xb89a15a4f3518c14c21be04b55546162b0cb39f0", //babydogeswaplocker + ], + polygon: [ + "0xadb2437e6f65682b85f814fbc12fec0508a7b1d0", //quickswaplocker + ], + avax: [ + "0xa9f6aefa5d56db1205f36c34e6482a6d4979b3bb", //traderjoelocker + ], + xdai: [ + "0xe3D32266974f1E8f8549cAf9F54977040e7D1c07", //honeyswaplocker + ], + }, + }, + { + id: "2397", + name: "Gyroscope Protocol", + addresses: { + polygon: [ + "0x37b8E1152fB90A867F3dccA6e8d537681B04705E", //Proto Gyro Dollar (p-GYD) + "0x68BDeE1bF95AD730F379A05eB8c51fb5dFA07748", //FreezableTransparentUpgradeableProxy + ], + }, + }, + { + id: "3093", + name: "eZKalibur", + addresses: { + era: [ + "0x498f7bB59c61307De7dEA005877220e4406470e9", //router + ], + }, + }, + { + id: "2952", + name: "Archi Finance", + addresses: { + arbitrum: [ + "0x7674Ccf6cAE51F20d376644C42cd69EC7d4324f4", //WETHVaultProxy + "0x179bD8d1d654DB8aa1603f232E284FF8d53a0688", //USDTVaultProxy + "0xa7490e0828Ed39DF886b9032ebBF98851193D79c", //USDCVaultProxy + "0xee54A31e9759B0F7FDbF48221b72CD9F3aEA00AB", //WBTCVaultProxy + ], + }, + }, + { + id: "3173", + name: "Equity", + addresses: { + fantom: [ + "0x9e4105F9E2284532474f69e65680e440F4C91cb8", //Vault + "0xe8ca91bAe8AA0E9229F6E78f8976B837134b60E8", //ShortsTracker + "0xA83F31aF44e812d2EdF0536516e7D274cd7301B8", //OrderBook + "0xd311Fd89e8403c2E90593457543E99cECc70D511", //Router + "0xf2BfB9cA6e21b30034b9d56Cb4735d2c180cC7e1", //PositionRouter + "0xfb0c0cE1d43B373b7535Ef556e1D55D285156887", //RewardRouter + "0x8f02357cb55DbAd26DF5a7558CD810D5D0f05f43", //OrderBookReader + "0x3e8B14B5534333A2B83a31d778ec3bCd9dc946f4", //RewardReader + "0x8F6666bd81C4811F433B8232a1c7D4383f11b2dC", //Timelock + "0xBF65ca2747a1EeebF8a1b0d119De8BE0540c57Cb", //StakedEquity + "0x88171375F6236885f463341d001B419D477eDB74", //Reader + ], + }, + }, + { + id: "3345", + name: "DackieSwap", + addresses: { + base: [ + "0x195FBc5B8Fbd5Ac739C1BA57D4Ef6D5a704F34f7", //smartrouter + "0xCfB05AB06D338FD85BBF4486e69809D96A906b77", //nftmanager + "0xd592e2C815E0cf4B62169e09934FaAB28299708e", //v3lmpooldeployer + ], + }, + }, + { + id: "3341", + name: "Chronos V2", + addresses: { + arbitrum: [ + //univ3 fork + "0xE0aBdFD837D451640CF43cB1Ec4eE87976eFbb41", //swapRouter + "0x9aAb66944D66516FEFa26D27267E02af03d17c02", //nftDescriptor + "0x5e74e05771f0d1222834e66DE5326C82a2C852e0", //nonfungibleTokenPositionDescriptor + "0x520CAF43e3C6481b71DB95711802ED9179ccA403", //nonfungiblePositionManager + ], + }, + }, + { + id: "3450", + name: "Aerodrome", + addresses: { + base: [ + //velodrome v2 fork + "0xeBf418Fe2512e7E6bd9b87a8F0f294aCDC67e6B4", //VotingEscrow + "0x16613524e02ad97eDfeF371bC883F2F5d6C480A5", //Voter + "0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43", //Router + ], + }, + }, + { + id: "3377", + name: "Friend.tech", + addresses: { + base: ["0xcf205808ed36593aa40a44f10c7f7c2f67d4a4d4"], + }, + }, + { + id: "3733", + name: "Chat3", + addresses: { + mantle: ["0xAd3dbD09835CF15c543Bc59d31865D659b71060e"], + }, + }, + { + id: "970", + name: "Drift", + addresses: { + solana: [ + "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH", // dex program id + "VAULtLeTwwUxpwAw98E6XmgaDeQucKgV5UaiAuQ655D", // vaults program id + ], + }, + }, + { + id: "parent#baseswap", + name: "BaseSwap", + addresses: { + base: [ + "0x327Df1E6de05895d2ab08513aaDD9313Fe505d86", // router + "0xc102505248c36f933934d4B2d7579D962a342eBC", + "0x2B0A43DCcBD7d42c18F6A83F86D1a19fA58d541A", + "0xDe151D5c92BfAA288Db4B67c21CD55d5826bCc93", // NonfungiblePositionManager + ], + }, + }, + { + id: "3575", + name: "Scale", + addresses: { + base: [ + "0x5E9d25014D01323d6F8c0C6640572e4444d11C94", // router + "0x3f0458FfB6D106d2F5CdeC9CEdc9054A69275489", + "0x2F87Bf58D5A9b2eFadE55Cdbd46153a0902be6FA", + ], + }, + }, + { + id: "parent#swapbased", + name: "SwapBased", + addresses: { + base: [ + "0xaaa3b1F1bd7BCc97fD1917c18ADE665C5D31F066", // router + "0xcb9665E990027e115ccF22230b042e4E7eaBFDB2", // SingleStakingRewardsBase + "0xE39226E0864252E0fC9bD668FB796FD63a1B75A4", // SingleStakingRewardsBase + "0x2168eb98C6D416Afb85E7beef5abDc4FB4177dfE", // BlpToken + "0x265a30f14E34248567B5B0a83978C38dF38D0C60", // RewardRouter + "0xEfE632dB3A07FeBcEc04f76Ea54D9d49f27bCd57", // SingleStakingRewardsXBase + "0x272A9acB288915Bb52A0659c8F9f7bFeBA06fae5", // SingleStakingRewardsOtherTokens + "0x86dAbE269B1c5Ff7fCFf1eA32545489DF66C29EA", // SingleStakingRewardsOtherTokens + ], + }, + }, + { + id: "parent#alien-base", + name: "Alien Base", + addresses: { + base: [ + "0x52eaeCAC2402633d98b95213d0b473E069D86590", // BasedDistributorV2 + "0x7f2ff89d3C45010c976Ea6bb7715DC7098AF786E", // UniswapV2Router02 + "0x927860797d07b1C46fbBe7f6f73D45C7E1BFBb27", // SwapFlashLoan + "0x8c1A3cF8f83074169FE5D7aD50B978e1cD6b37c7", // UniswapV2Router02 + "0x3485F8E155973cC247CBEa9E77C0dBBB4BBb79E7", // UniswapV2Router02 + "0xe0808b8e2bDD70D70e540f977cF40E26e5811054", // AlienbaseZapV1 + "0xFBE87Ee1Ee62244A2dF80a8093Eab829C52863e8", // PredictionETH + ], + }, + }, + { + id: "3348", + name: "Soswap", + addresses: { + base: [ + "0x53BAE026d9a503d46a58aF4b65FCcbb7B904A911", // SOFIProxy + "0xBC097E42BF1E6531C32C5cEe945E0c014fA21964", // PortfolioFactory + "0x1e6Dbd0E827cd243d458ed73B9Ae1a6Db89B8668", // PortfolioModule + "0x4E69553b0aEf0949Fd38Bbf3EbeD866B431C9E68", // ManagerModule + "0x73Ada4aE37Ba1DF45Ba12c4478a27029e24cF2d7", // SOFITrading + ], + }, + }, + { + id: "3314", + name: "RocketSwap Base", + addresses: { + base: [ + "0x4cf76043B3f97ba06917cBd90F9e3A2AAC1B306e", // UniswapV2Router02 + "0x234Ccb5c64FDB3958C47E8efBe122b2d54633a96", // RcktLocker + "0x32C9ACE2d1eB47C3968660De9eF20569f850814D", // + "0xE20d24cf9fAF458b98B6F34e5346361e6492aA5F", + "0x304063953727b53048500dfd877A17d1C4f6EaFf", // RcktMasterChef + "0x2ec62d08277FfC42eB5af71c7595C1a9f9458A3c", // RcktVault + ], + }, + }, + { + id: "3540", + name: "MoonBase", + addresses: { + base: [ + "0x99554FA8B48F735D4Ccce5E077742cF2D084b258", // MoonChef + "0x4617695387bE48c3202a0A9165549c790C4A08Af", // UniswapRouter + ], + }, + }, + { + id: "3380", + name: "Baso Finance", + addresses: { + base: [ + "0x5568e4F19B9063E0e0386bF66B3eeF2b65327486", // Router + "0x84B5897A23B067D87Be550e440a3436f6d149fe2", // VotingEscrow + "0xf11432A2754fCf7BFA1725d37e65840776e39ec7", // RewardsDistributor + "0xb670568C84C541eacBee2EF7209A6Ba2Ab349BEC", // Voter + "0xF0FfC7cd3C15EF94C7c5CAE3F39d53206170Fc01", // BasoStaking + ], + }, + }, + { + id: "parent#canary", + name: "Canary", + addresses: { + avax: ["0x06f8ED60393AC6A4B16900273C9313222dfe9940"], + }, + }, + { + id: "3977", + name: "SquaDeFi", + addresses: { + base: [ + "0xfad362E479AA318F2De7b2c8a1993Df9BB2B3b1f", // KeyManager + ], + }, + }, + { + id: "3107", + name: "EigenLayer", + addresses: { + ethereum: ["0x858646372cc42e1a627fce94aa7a7033e7cf075a"], + }, + }, + { + id: "1004", + name: "Colony", + addresses: { + avax: [ + "0xA2e7ab89A2C59818E1ecD925E718a9d63889A131", // Router + "0x2aC45f92EABaa8DCB2eA1807A659a1393C3947d0", // Masterchef + "0x3Db497a9783eBbEda6950d4f1911B3a27D79C071", // AntTiers + "0x62685d3EAacE96D6145D35f3B7540d35f482DE5b", // StakingV3 + "0x62B38293896e040e36fE5345F9D30DbFd75C04B9", // EarlyStageManager + "0x17CE2A490CB260b48891aDE019a86f4B4a5520d4", // Comments + "0xac59c21ADfdDb1E56A959dD60a08c07AaED2F3Ba", // Upvotes + "0xd071AA359ed1b7776A12c8329f2C337aBED157D7", // Analysis + ], + }, + }, + ] as ProtocolAddresses[] +).filter(isAddressesUsable); From ea380e4a5c2b7c53ff7f46c188df6abd1fdc9346 Mon Sep 17 00:00:00 2001 From: bghughes Date: Thu, 27 Jun 2024 20:18:15 -0500 Subject: [PATCH 0874/1590] is this it --- dexs/rubicon/index.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/dexs/rubicon/index.ts b/dexs/rubicon/index.ts index 62c82ce8da..b979d4ea5d 100644 --- a/dexs/rubicon/index.ts +++ b/dexs/rubicon/index.ts @@ -4,8 +4,8 @@ import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; // Define the old and new adapters const adapterOld = univ2Adapter({ - [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('B4cTJXyWHMLkxAcpLGK7dJfArJdrbyWukCoCLPDT1f7n'), - [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('AUcAkUd4sJutFD3hYQfvB6uvXrEdYP26qiZwZ5qyrgTw') + [CHAIN.ARBITRUM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Metrics_Arbitrum_V2', + [CHAIN.OPTIMISM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Metrics_Optimism_V2' }, { factoriesName: "rubicons", totalVolume: "total_volume_usd", @@ -37,8 +37,16 @@ adapterNew.adapter.ethereum.start = 19361393; // Define the function to fetch and combine data from both adapters async function combinedFetch(chain, timestamp, chainBlocks, options) { - const oldData = await adapterOld.adapter[chain].fetch(timestamp, chainBlocks, options).catch(() => null); - const newData = await adapterNew.adapter[chain].fetch(timestamp, chainBlocks, options).catch(() => null); + let oldData = null; + let newData = null; + + if (adapterOld.adapter[chain] && adapterOld.adapter[chain].fetch) { + oldData = await adapterOld.adapter[chain].fetch(timestamp, chainBlocks, options).catch(() => null); + } + + if (adapterNew.adapter[chain] && adapterNew.adapter[chain].fetch) { + newData = await adapterNew.adapter[chain].fetch(timestamp, chainBlocks, options).catch(() => null); + } if (!oldData) return newData; if (!newData) return oldData; From 0c8825fd63a9c4b0ef778d289ee13e9dcd0951c2 Mon Sep 17 00:00:00 2001 From: bghughes Date: Thu, 27 Jun 2024 20:25:32 -0500 Subject: [PATCH 0875/1590] fix --- cli/testAdapter.ts | 4 +--- dexs/rubicon/index.ts | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index 90061bd492..fb0889f80c 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -43,9 +43,7 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ let endCleanDayTimestamp = cleanDayTimestamp; console.info(`🦙 Running ${process.argv[3].toUpperCase()} adapter 🦙`) console.info(`---------------------------------------------------`) - // Import module to test - console.log(`File: ${passedFile}`); - + // Import module to test let module: Adapter = (await import(passedFile)).default const adapterVersion = module.version let endTimestamp = endCleanDayTimestamp diff --git a/dexs/rubicon/index.ts b/dexs/rubicon/index.ts index b979d4ea5d..076e92591c 100644 --- a/dexs/rubicon/index.ts +++ b/dexs/rubicon/index.ts @@ -14,8 +14,8 @@ const adapterOld = univ2Adapter({ dailyVolumeTimestampField: "dayStartUnix" }); -adapterOld.adapter.arbitrum.start = 1686345120; -adapterOld.adapter.optimism.start = 1637020800; +adapterOld.adapter.arbitrum.start = 0; +adapterOld.adapter.optimism.start = 0; const adapterNew = univ2Adapter({ [CHAIN.OPTIMISM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Gladius_Metrics_Optimism_V2', From c6c87e404d0c042d5c158ddea61a4de81d795add Mon Sep 17 00:00:00 2001 From: bghughes Date: Thu, 27 Jun 2024 20:25:57 -0500 Subject: [PATCH 0876/1590] fix --- cli/testAdapter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index fb0889f80c..6a257d081a 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -43,7 +43,7 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ let endCleanDayTimestamp = cleanDayTimestamp; console.info(`🦙 Running ${process.argv[3].toUpperCase()} adapter 🦙`) console.info(`---------------------------------------------------`) - // Import module to test + // Import module to test let module: Adapter = (await import(passedFile)).default const adapterVersion = module.version let endTimestamp = endCleanDayTimestamp From 4cf1ed164b593da06e2829651d78228641796c22 Mon Sep 17 00:00:00 2001 From: bghughes Date: Thu, 27 Jun 2024 20:26:30 -0500 Subject: [PATCH 0877/1590] does this work --- yarn.lock | 2436 ----------------------------------------------------- 1 file changed, 2436 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 7cf6575277..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2436 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@adraffy/ens-normalize@1.10.0": - version "1.10.0" - resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz" - integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== - -"@aws-crypto/crc32@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@^3.0.0", "@aws-crypto/sha256-js@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@^3.400.0": - version "3.499.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.499.0.tgz" - integrity sha512-4ssQqde/iY5fTJbWuFPzPuECtihdCAA9tfluv6fXYCJS3wMLf9x21qp6b7fIbUf6vjOJ2edmYd+DXk+0CMnTFg== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.499.0" - "@aws-sdk/core" "3.496.0" - "@aws-sdk/credential-provider-node" "3.499.0" - "@aws-sdk/middleware-bucket-endpoint" "3.496.0" - "@aws-sdk/middleware-expect-continue" "3.496.0" - "@aws-sdk/middleware-flexible-checksums" "3.496.0" - "@aws-sdk/middleware-host-header" "3.496.0" - "@aws-sdk/middleware-location-constraint" "3.496.0" - "@aws-sdk/middleware-logger" "3.496.0" - "@aws-sdk/middleware-recursion-detection" "3.496.0" - "@aws-sdk/middleware-sdk-s3" "3.499.0" - "@aws-sdk/middleware-signing" "3.496.0" - "@aws-sdk/middleware-ssec" "3.498.0" - "@aws-sdk/middleware-user-agent" "3.496.0" - "@aws-sdk/region-config-resolver" "3.496.0" - "@aws-sdk/signature-v4-multi-region" "3.499.0" - "@aws-sdk/types" "3.496.0" - "@aws-sdk/util-endpoints" "3.496.0" - "@aws-sdk/util-user-agent-browser" "3.496.0" - "@aws-sdk/util-user-agent-node" "3.496.0" - "@aws-sdk/xml-builder" "3.496.0" - "@smithy/config-resolver" "^2.1.1" - "@smithy/core" "^1.3.1" - "@smithy/eventstream-serde-browser" "^2.1.1" - "@smithy/eventstream-serde-config-resolver" "^2.1.1" - "@smithy/eventstream-serde-node" "^2.1.1" - "@smithy/fetch-http-handler" "^2.4.1" - "@smithy/hash-blob-browser" "^2.1.1" - "@smithy/hash-node" "^2.1.1" - "@smithy/hash-stream-node" "^2.1.1" - "@smithy/invalid-dependency" "^2.1.1" - "@smithy/md5-js" "^2.1.1" - "@smithy/middleware-content-length" "^2.1.1" - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-retry" "^2.1.1" - "@smithy/middleware-serde" "^2.1.1" - "@smithy/middleware-stack" "^2.1.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/node-http-handler" "^2.3.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.1" - "@smithy/util-defaults-mode-node" "^2.1.1" - "@smithy/util-endpoints" "^1.1.1" - "@smithy/util-retry" "^2.1.1" - "@smithy/util-stream" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - "@smithy/util-waiter" "^2.1.1" - fast-xml-parser "4.2.5" - tslib "^2.5.0" - -"@aws-sdk/client-sso@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.496.0.tgz" - integrity sha512-fuaMuxKg7CMUsP9l3kxYWCOxFsBjdA0xj5nlikaDm1661/gB4KkAiGqRY8LsQkpNXvXU8Nj+f7oCFADFyGYzyw== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.496.0" - "@aws-sdk/middleware-host-header" "3.496.0" - "@aws-sdk/middleware-logger" "3.496.0" - "@aws-sdk/middleware-recursion-detection" "3.496.0" - "@aws-sdk/middleware-user-agent" "3.496.0" - "@aws-sdk/region-config-resolver" "3.496.0" - "@aws-sdk/types" "3.496.0" - "@aws-sdk/util-endpoints" "3.496.0" - "@aws-sdk/util-user-agent-browser" "3.496.0" - "@aws-sdk/util-user-agent-node" "3.496.0" - "@smithy/config-resolver" "^2.1.1" - "@smithy/core" "^1.3.1" - "@smithy/fetch-http-handler" "^2.4.1" - "@smithy/hash-node" "^2.1.1" - "@smithy/invalid-dependency" "^2.1.1" - "@smithy/middleware-content-length" "^2.1.1" - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-retry" "^2.1.1" - "@smithy/middleware-serde" "^2.1.1" - "@smithy/middleware-stack" "^2.1.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/node-http-handler" "^2.3.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.1" - "@smithy/util-defaults-mode-node" "^2.1.1" - "@smithy/util-endpoints" "^1.1.1" - "@smithy/util-retry" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/client-sts@3.499.0": - version "3.499.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.499.0.tgz" - integrity sha512-Eyj9STw2DXMtXL5V/v0HYHO6+JjGPi257M5IYyxwqlvRchq6jbOsedobfxclB/gBUyBRtZdnyAIS8uCKjb4kpA== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.496.0" - "@aws-sdk/credential-provider-node" "3.499.0" - "@aws-sdk/middleware-host-header" "3.496.0" - "@aws-sdk/middleware-logger" "3.496.0" - "@aws-sdk/middleware-recursion-detection" "3.496.0" - "@aws-sdk/middleware-user-agent" "3.496.0" - "@aws-sdk/region-config-resolver" "3.496.0" - "@aws-sdk/types" "3.496.0" - "@aws-sdk/util-endpoints" "3.496.0" - "@aws-sdk/util-user-agent-browser" "3.496.0" - "@aws-sdk/util-user-agent-node" "3.496.0" - "@smithy/config-resolver" "^2.1.1" - "@smithy/core" "^1.3.1" - "@smithy/fetch-http-handler" "^2.4.1" - "@smithy/hash-node" "^2.1.1" - "@smithy/invalid-dependency" "^2.1.1" - "@smithy/middleware-content-length" "^2.1.1" - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-retry" "^2.1.1" - "@smithy/middleware-serde" "^2.1.1" - "@smithy/middleware-stack" "^2.1.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/node-http-handler" "^2.3.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.1" - "@smithy/util-defaults-mode-node" "^2.1.1" - "@smithy/util-endpoints" "^1.1.1" - "@smithy/util-middleware" "^2.1.1" - "@smithy/util-retry" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - fast-xml-parser "4.2.5" - tslib "^2.5.0" - -"@aws-sdk/core@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.496.0.tgz" - integrity sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A== - dependencies: - "@smithy/core" "^1.3.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/signature-v4" "^2.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-env@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.496.0.tgz" - integrity sha512-lukQMJ8SWWP5RqkRNOHi/H+WMhRvSWa3Fc5Jf/VP6xHiPLfF1XafcvthtV91e0VwPCiseI+HqChrcGq8pvnxHw== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-ini@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.496.0.tgz" - integrity sha512-2nD1jp1sIwcQaWK1y/9ruQOkW16RUxZpzgjbW/gnK3iiUXwx+/FNQWxshud+GTSx3Q4x6eIhqsbjtP4VVPPuUA== - dependencies: - "@aws-sdk/credential-provider-env" "3.496.0" - "@aws-sdk/credential-provider-process" "3.496.0" - "@aws-sdk/credential-provider-sso" "3.496.0" - "@aws-sdk/credential-provider-web-identity" "3.496.0" - "@aws-sdk/types" "3.496.0" - "@smithy/credential-provider-imds" "^2.2.1" - "@smithy/property-provider" "^2.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-node@3.499.0": - version "3.499.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.499.0.tgz" - integrity sha512-EsiSevVmcVSMIq7D9siSH/XVc5I0vMntg1rx6KQdng1Fq8X/RBL5t9wSWEwOl7KFo5HlEsWrLWIpo1WHuzIL/w== - dependencies: - "@aws-sdk/credential-provider-env" "3.496.0" - "@aws-sdk/credential-provider-ini" "3.496.0" - "@aws-sdk/credential-provider-process" "3.496.0" - "@aws-sdk/credential-provider-sso" "3.496.0" - "@aws-sdk/credential-provider-web-identity" "3.496.0" - "@aws-sdk/types" "3.496.0" - "@smithy/credential-provider-imds" "^2.2.1" - "@smithy/property-provider" "^2.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-process@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.496.0.tgz" - integrity sha512-/YZscCTGOKVmGr916Th4XF8Sz6JDtZ/n2loHG9exok9iy/qIbACsTRNLP9zexPxhPoue/oZqecY5xbVljfY34A== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-sso@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.496.0.tgz" - integrity sha512-eP7GxpT2QYubSDG7uk1GJW4eNymZCq65IxDyEFCXOP/kfqkxriCY+iVEFG6/Mo3LxvgrgHXU4jxrCAXMAWN43g== - dependencies: - "@aws-sdk/client-sso" "3.496.0" - "@aws-sdk/token-providers" "3.496.0" - "@aws-sdk/types" "3.496.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-web-identity@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.496.0.tgz" - integrity sha512-IbP+qLlvJSpNPj+zW6TtFuLRTK5Tf0hW+2pom4vFyi5YSH4pn8UOC136UdewX8vhXGS9BJQ5zBDMasIyl5VeGQ== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-bucket-endpoint@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.496.0.tgz" - integrity sha512-B+ilBMSs3+LJuo2bl2KB8GFdu+8PPVtYEWtwhNkmnaU8iMisgMBp5uuM8sUDvJX7I4iSF0WbgnhguX4cJqfAew== - dependencies: - "@aws-sdk/types" "3.496.0" - "@aws-sdk/util-arn-parser" "3.495.0" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - "@smithy/util-config-provider" "^2.2.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-expect-continue@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.496.0.tgz" - integrity sha512-+exo5DVc+BeDus2iI6Fz1thefHGDXxUhHZ+4VHQ6HkStMy3Y22HugyEGHSQZmtRL86Hjr7dFbEWFsC47a2ItGA== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-flexible-checksums@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.496.0.tgz" - integrity sha512-yQIWfjEMvgsAJ7ku224vXDjXPD+f9zfKZFialJva8VUlEr7hQp4CQ0rxV3YThSaixKEDDs5k6kOjWAd2BPGr2A== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.496.0" - "@smithy/is-array-buffer" "^2.1.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-host-header@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.496.0.tgz" - integrity sha512-jUdPpSJeqCYXf6hSjfwsfHway7peIV8Vz51w/BN91bF4vB/bYwAC5o9/iJiK/EoByp5asxA8fg9wFOyGjzdbLg== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-location-constraint@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.496.0.tgz" - integrity sha512-i4ocJ2Zs86OtPREbB18InFukhqg2qtBxb5gywv79IHDPVmpOYE4m/3v3yGUrkjfF2GTlUL0k5FskNNqw41yfng== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-logger@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.496.0.tgz" - integrity sha512-EwMVSY6iBMeGbVnvwdaFl/ClMS/YWtxCAo+bcEtgk8ltRuo7qgbJem8Km/fvWC1vdWvIbe4ArdJ8iGzq62ffAw== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-recursion-detection@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.496.0.tgz" - integrity sha512-+IuOcFsfqg2WAnaEzH6KhVbicqCxtOq9w3DH2jwTpddRlCx2Kqf6wCzg8luhHRGyjBZdsbIS+OXwyMevoppawA== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-sdk-s3@3.499.0": - version "3.499.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.499.0.tgz" - integrity sha512-thTb47U1hYHk5ei+yO0D0aehbgQXeAcgvyyxOID9/HDuRfWuTvKdclWh/goIeDfvSS87VBukEAjnCa5JYBwzug== - dependencies: - "@aws-sdk/types" "3.496.0" - "@aws-sdk/util-arn-parser" "3.495.0" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/signature-v4" "^2.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/util-config-provider" "^2.2.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-signing@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.496.0.tgz" - integrity sha512-Oq73Brs4IConvWnRlh8jM1V7LHoTw9SVQklu/QW2FPlNrB3B8fuTdWHHYIWv7ybw1bykXoCY99v865Mmq/Or/g== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/signature-v4" "^2.1.1" - "@smithy/types" "^2.9.1" - "@smithy/util-middleware" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-ssec@3.498.0": - version "3.498.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.498.0.tgz" - integrity sha512-sWujXgzeTqMZzj/pRYEnnEbSzhBosqw9DXHOY1Mg2igI9NEfGlB7lPARp6aKmCaYlP3Bcj2X86vKCqF53mbyig== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-user-agent@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.496.0.tgz" - integrity sha512-+iMtRxFk0GmFWNUF4ilxylOQd9PZdR4ZC9jkcPIh1PZlvKtpCyFywKlk5RRZKklSoJ/CttcqwhMvOXTNbWm/0w== - dependencies: - "@aws-sdk/types" "3.496.0" - "@aws-sdk/util-endpoints" "3.496.0" - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/region-config-resolver@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.496.0.tgz" - integrity sha512-URrNVOPHPgEDm6QFu6lDC2cUFs+Jx23mA3jEwCvoKlXiEY/ZoWjH8wlX3OMUlLrF1qoUTuD03jjrJzF6zoCgug== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/types" "^2.9.1" - "@smithy/util-config-provider" "^2.2.1" - "@smithy/util-middleware" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/signature-v4-multi-region@3.499.0": - version "3.499.0" - resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.499.0.tgz" - integrity sha512-8HSFnZErRm7lAfk+Epxrf4QNdQEamg1CnbLybtKQQEjmvxLuXYvj16KlpYEZIwEENOMEvnCqMc7syTPkmjVhJA== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.499.0" - "@aws-sdk/types" "3.496.0" - "@smithy/protocol-http" "^3.1.1" - "@smithy/signature-v4" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/token-providers@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.496.0.tgz" - integrity sha512-fyi8RcObEa1jNETJdc2H6q9VHrrdKCj/b6+fbLvymb7mUVRd0aWUn+24SNUImnSOnrwYnwaMfyyEC388X4MbFQ== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/middleware-host-header" "3.496.0" - "@aws-sdk/middleware-logger" "3.496.0" - "@aws-sdk/middleware-recursion-detection" "3.496.0" - "@aws-sdk/middleware-user-agent" "3.496.0" - "@aws-sdk/region-config-resolver" "3.496.0" - "@aws-sdk/types" "3.496.0" - "@aws-sdk/util-endpoints" "3.496.0" - "@aws-sdk/util-user-agent-browser" "3.496.0" - "@aws-sdk/util-user-agent-node" "3.496.0" - "@smithy/config-resolver" "^2.1.1" - "@smithy/fetch-http-handler" "^2.4.1" - "@smithy/hash-node" "^2.1.1" - "@smithy/invalid-dependency" "^2.1.1" - "@smithy/middleware-content-length" "^2.1.1" - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-retry" "^2.1.1" - "@smithy/middleware-serde" "^2.1.1" - "@smithy/middleware-stack" "^2.1.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/node-http-handler" "^2.3.1" - "@smithy/property-provider" "^2.1.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.1" - "@smithy/util-defaults-mode-node" "^2.1.1" - "@smithy/util-endpoints" "^1.1.1" - "@smithy/util-retry" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/types@^3.222.0", "@aws-sdk/types@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.496.0.tgz" - integrity sha512-umkGadK4QuNQaMoDICMm7NKRI/mYSXiyPjcn3d53BhsuArYU/52CebGQKdt4At7SwwsiVJZw9RNBHyN5Mm0HVw== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/util-arn-parser@3.495.0": - version "3.495.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz" - integrity sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-endpoints@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.496.0.tgz" - integrity sha512-1QzOiWHi383ZwqSi/R2KgKCd7M+6DxkxI5acqLPm8mvDRDP2jRjrnVaC0g9/tlttWousGEemDUWStwrD2mVYSw== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/types" "^2.9.1" - "@smithy/util-endpoints" "^1.1.1" - tslib "^2.5.0" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.495.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz" - integrity sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-browser@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.496.0.tgz" - integrity sha512-4j2spN+h0I0qfSMsGvJXTfQBu1e18rPdekKvzsGJxhaAE1tNgUfUT4nbvc5uVn0sNjZmirskmJ3kfbzVOrqIFg== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/types" "^2.9.1" - bowser "^2.11.0" - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-node@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.496.0.tgz" - integrity sha512-h0Ax0jlDc7UIo3KoSI4C4tVLBFoiAdx3+DhTVfgLS7x93d41dMlziPoBX2RgdcFn37qnzw6AQKTVTMwDbRCGpg== - dependencies: - "@aws-sdk/types" "3.496.0" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.496.0": - version "3.496.0" - resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.496.0.tgz" - integrity sha512-GvEjh537IIeOw1ZkZuB37sV12u+ipS5Z1dwjEC/HAvhl5ac23ULtTr1/n+U1gLNN+BAKSWjKiQ2ksj8DiUzeyw== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@defillama/sdk@^5.0.10": - version "5.0.69" - resolved "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.69.tgz" - integrity sha512-IYdT4P5vG9xt14tM9RuT1+uBUyD8oL6fdTWC3iwOlwATjWKA1kwOhucCXNFE8sc2KKugwTUfQuGp8Q3fHDxAfw== - 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.13.1" - resolved "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.13.1.tgz" - integrity sha512-2G4Vu6OHw4+XTrp7AGIcOEezpPEoVrWg2JTK1v/exEKSLYquZkUdd+m4yOL3/UZ6bTj7hmXwrmYzW76BnLCkJQ== - dependencies: - "@elastic/transport" "~8.4.1" - tslib "^2.4.0" - -"@elastic/transport@~8.4.1": - version "8.4.1" - resolved "https://registry.npmjs.org/@elastic/transport/-/transport-8.4.1.tgz" - integrity sha512-/SXVuVnuU5b4dq8OFY4izG+dmGla185PcoqgK6+AJMpmOeY1QYVNbWtCwvSvoAANN5D/wV+EBU8+x7Vf9EphbA== - dependencies: - debug "^4.3.4" - hpagent "^1.0.0" - ms "^2.1.3" - secure-json-parse "^2.4.0" - tslib "^2.4.0" - undici "^5.22.1" - -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - -"@graphql-typed-document-node/core@^3.1.1": - version "3.2.0" - resolved "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz" - integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" - 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.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - 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.npmjs.org/@noble/curves/-/curves-1.2.0.tgz" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/hashes@1.3.2": - version "1.3.2" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@smithy/abort-controller@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.1.tgz" - integrity sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/chunked-blob-reader-native@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.1.tgz" - integrity sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ== - dependencies: - "@smithy/util-base64" "^2.1.1" - tslib "^2.5.0" - -"@smithy/chunked-blob-reader@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz" - integrity sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ== - dependencies: - tslib "^2.5.0" - -"@smithy/config-resolver@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.1.tgz" - integrity sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw== - dependencies: - "@smithy/node-config-provider" "^2.2.1" - "@smithy/types" "^2.9.1" - "@smithy/util-config-provider" "^2.2.1" - "@smithy/util-middleware" "^2.1.1" - tslib "^2.5.0" - -"@smithy/core@^1.3.1": - version "1.3.1" - resolved "https://registry.npmjs.org/@smithy/core/-/core-1.3.1.tgz" - integrity sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q== - dependencies: - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-retry" "^2.1.1" - "@smithy/middleware-serde" "^2.1.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/util-middleware" "^2.1.1" - tslib "^2.5.0" - -"@smithy/credential-provider-imds@^2.2.1": - version "2.2.1" - resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz" - integrity sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA== - dependencies: - "@smithy/node-config-provider" "^2.2.1" - "@smithy/property-provider" "^2.1.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - tslib "^2.5.0" - -"@smithy/eventstream-codec@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz" - integrity sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.9.1" - "@smithy/util-hex-encoding" "^2.1.1" - tslib "^2.5.0" - -"@smithy/eventstream-serde-browser@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.1.tgz" - integrity sha512-JvEdCmGlZUay5VtlT8/kdR6FlvqTDUiJecMjXsBb0+k1H/qc9ME5n2XKPo8q/MZwEIA1GmGgYMokKGjVvMiDow== - dependencies: - "@smithy/eventstream-serde-universal" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/eventstream-serde-config-resolver@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.1.tgz" - integrity sha512-EqNqXYp3+dk//NmW3NAgQr9bEQ7fsu/CcxQmTiq07JlaIcne/CBWpMZETyXm9w5LXkhduBsdXdlMscfDUDn2fA== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/eventstream-serde-node@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.1.tgz" - integrity sha512-LF882q/aFidFNDX7uROAGxq3H0B7rjyPkV6QDn6/KDQ+CG7AFkRccjxRf1xqajq/Pe4bMGGr+VKAaoF6lELIQw== - dependencies: - "@smithy/eventstream-serde-universal" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/eventstream-serde-universal@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.1.tgz" - integrity sha512-LR0mMT+XIYTxk4k2fIxEA1BPtW3685QlqufUEUAX1AJcfFfxNDKEvuCRZbO8ntJb10DrIFVJR9vb0MhDCi0sAQ== - dependencies: - "@smithy/eventstream-codec" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/fetch-http-handler@^2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz" - integrity sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg== - dependencies: - "@smithy/protocol-http" "^3.1.1" - "@smithy/querystring-builder" "^2.1.1" - "@smithy/types" "^2.9.1" - "@smithy/util-base64" "^2.1.1" - tslib "^2.5.0" - -"@smithy/hash-blob-browser@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.1.tgz" - integrity sha512-jizu1+2PAUjiGIfRtlPEU8Yo6zn+d78ti/ZHDesdf1SUn2BuZW433JlPoCOLH3dBoEEvTgLvQ8tUGSoTTALA+A== - dependencies: - "@smithy/chunked-blob-reader" "^2.1.1" - "@smithy/chunked-blob-reader-native" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/hash-node@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.1.tgz" - integrity sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg== - dependencies: - "@smithy/types" "^2.9.1" - "@smithy/util-buffer-from" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/hash-stream-node@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.1.1.tgz" - integrity sha512-VgDaKcfCy0iHcmtAZgZ3Yw9g37Gkn2JsQiMtFQXUh8Wmo3GfNgDwLOtdhJ272pOT7DStzpe9cNr+eV5Au8KfQA== - dependencies: - "@smithy/types" "^2.9.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/invalid-dependency@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz" - integrity sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/is-array-buffer@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz" - integrity sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ== - dependencies: - tslib "^2.5.0" - -"@smithy/md5-js@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.1.1.tgz" - integrity sha512-L3MbIYBIdLlT+MWTYrdVSv/dow1+6iZ1Ad7xS0OHxTTs17d753ZcpOV4Ro7M7tRAVWML/sg2IAp/zzCb6aAttg== - dependencies: - "@smithy/types" "^2.9.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/middleware-content-length@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz" - integrity sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g== - dependencies: - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/middleware-endpoint@^2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz" - integrity sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q== - dependencies: - "@smithy/middleware-serde" "^2.1.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - "@smithy/util-middleware" "^2.1.1" - tslib "^2.5.0" - -"@smithy/middleware-retry@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz" - integrity sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA== - dependencies: - "@smithy/node-config-provider" "^2.2.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/service-error-classification" "^2.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/util-middleware" "^2.1.1" - "@smithy/util-retry" "^2.1.1" - tslib "^2.5.0" - uuid "^8.3.2" - -"@smithy/middleware-serde@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz" - integrity sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/middleware-stack@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz" - integrity sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/node-config-provider@^2.2.1": - version "2.2.1" - resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz" - integrity sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg== - dependencies: - "@smithy/property-provider" "^2.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/node-http-handler@^2.3.1": - version "2.3.1" - resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz" - integrity sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA== - dependencies: - "@smithy/abort-controller" "^2.1.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/querystring-builder" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/property-provider@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.1.tgz" - integrity sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/protocol-http@^3.1.1": - version "3.1.1" - resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.1.1.tgz" - integrity sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/querystring-builder@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz" - integrity sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg== - dependencies: - "@smithy/types" "^2.9.1" - "@smithy/util-uri-escape" "^2.1.1" - tslib "^2.5.0" - -"@smithy/querystring-parser@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz" - integrity sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/service-error-classification@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz" - integrity sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw== - dependencies: - "@smithy/types" "^2.9.1" - -"@smithy/shared-ini-file-loader@^2.3.1": - version "2.3.1" - resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz" - integrity sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/signature-v4@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.1.tgz" - integrity sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg== - dependencies: - "@smithy/eventstream-codec" "^2.1.1" - "@smithy/is-array-buffer" "^2.1.1" - "@smithy/types" "^2.9.1" - "@smithy/util-hex-encoding" "^2.1.1" - "@smithy/util-middleware" "^2.1.1" - "@smithy/util-uri-escape" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/smithy-client@^2.3.1": - version "2.3.1" - resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.3.1.tgz" - integrity sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA== - dependencies: - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-stack" "^2.1.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - "@smithy/util-stream" "^2.1.1" - tslib "^2.5.0" - -"@smithy/types@^2.9.1": - version "2.9.1" - resolved "https://registry.npmjs.org/@smithy/types/-/types-2.9.1.tgz" - integrity sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw== - dependencies: - tslib "^2.5.0" - -"@smithy/url-parser@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.1.tgz" - integrity sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q== - dependencies: - "@smithy/querystring-parser" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/util-base64@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.1.1.tgz" - integrity sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g== - dependencies: - "@smithy/util-buffer-from" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-body-length-browser@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz" - integrity sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag== - dependencies: - tslib "^2.5.0" - -"@smithy/util-body-length-node@^2.2.1": - version "2.2.1" - resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz" - integrity sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg== - dependencies: - tslib "^2.5.0" - -"@smithy/util-buffer-from@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz" - integrity sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg== - dependencies: - "@smithy/is-array-buffer" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-config-provider@^2.2.1": - version "2.2.1" - resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz" - integrity sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw== - dependencies: - tslib "^2.5.0" - -"@smithy/util-defaults-mode-browser@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz" - integrity sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA== - dependencies: - "@smithy/property-provider" "^2.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - bowser "^2.11.0" - tslib "^2.5.0" - -"@smithy/util-defaults-mode-node@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz" - integrity sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA== - dependencies: - "@smithy/config-resolver" "^2.1.1" - "@smithy/credential-provider-imds" "^2.2.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/property-provider" "^2.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/util-endpoints@^1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz" - integrity sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw== - dependencies: - "@smithy/node-config-provider" "^2.2.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/util-hex-encoding@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz" - integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg== - dependencies: - tslib "^2.5.0" - -"@smithy/util-middleware@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.1.tgz" - integrity sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/util-retry@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.1.tgz" - integrity sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA== - dependencies: - "@smithy/service-error-classification" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/util-stream@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.1.tgz" - integrity sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ== - dependencies: - "@smithy/fetch-http-handler" "^2.4.1" - "@smithy/node-http-handler" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-buffer-from" "^2.1.1" - "@smithy/util-hex-encoding" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-uri-escape@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz" - integrity sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw== - dependencies: - tslib "^2.5.0" - -"@smithy/util-utf8@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.1.1.tgz" - integrity sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A== - dependencies: - "@smithy/util-buffer-from" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-waiter@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.1.1.tgz" - integrity sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA== - dependencies: - "@smithy/abort-controller" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@supercharge/promise-pool@^2.1.0": - version "2.4.0" - resolved "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-2.4.0.tgz" - integrity sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w== - -"@supercharge/promise-pool@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-3.1.0.tgz" - integrity sha512-gB3NukbIcYzRtPoE6dx9svQYPodxvnfQlaaQd8N/z87E6WaMfRE7o5HwB+LZ+KeM0nsNAq1n4TmBtfz1VCUR+Q== - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/async-retry@^1.4.8": - version "1.4.8" - resolved "https://registry.npmjs.org/@types/async-retry/-/async-retry-1.4.8.tgz" - integrity sha512-Qup/B5PWLe86yI5I3av6ePGaeQrIHNKCwbsQotD6aHQ6YkHsMUxVZkZsmx/Ry3VZQ6uysHwTjQ7666+k6UjVJA== - dependencies: - "@types/retry" "*" - -"@types/debug@^4.1.8": - version "4.1.12" - resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node@*", "@types/node@^18.7.23": - version "18.19.10" - resolved "https://registry.npmjs.org/@types/node/-/node-18.19.10.tgz" - integrity sha512-IZD8kAM02AW1HRDTPOlz3npFava678pr8Ie9Vp8uRhBROXAv8MXT2pCnGZZAKYdromsNQLHQcfWQ6EOatVLtqA== - dependencies: - undici-types "~5.26.4" - -"@types/node@18.15.13": - version "18.15.13" - resolved "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz" - integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== - -"@types/retry@*": - version "0.12.5" - resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz" - integrity sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw== - -"@types/validator@^13.7.17": - version "13.11.9" - resolved "https://registry.npmjs.org/@types/validator/-/validator-13.11.9.tgz" - integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -aes-js@4.0.0-beta.5: - version "4.0.0-beta.5" - resolved "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz" - integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== - -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - 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.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - 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.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -async-retry@^1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz" - integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== - dependencies: - retry "0.13.1" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -axios@^1.6.5: - version "1.6.7" - resolved "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz" - integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== - dependencies: - follow-redirects "^1.15.4" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bignumber.js@^9.1.0: - version "9.1.2" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - 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.npmjs.org/bowser/-/bowser-2.11.0.tgz" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -buffer-writer@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz" - integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - 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.npmjs.org/chalk/-/chalk-2.4.2.tgz" - 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.npmjs.org/chalk/-/chalk-4.1.2.tgz" - 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.npmjs.org/chardet/-/chardet-0.7.0.tgz" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - 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.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-fetch@^3.1.5: - version "3.1.8" - resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz" - 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.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - 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.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dotenv@^16.0.3: - version "16.4.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz" - integrity sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ== - -dottie@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz" - integrity sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -ethers@^6.0.0, ethers@^6.9.2: - version "6.10.0" - resolved "https://registry.npmjs.org/ethers/-/ethers-6.10.0.tgz" - integrity sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA== - dependencies: - "@adraffy/ens-normalize" "1.10.0" - "@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.5.0" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" - 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.npmjs.org/extract-files/-/extract-files-9.0.0.tgz" - integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== - -fast-xml-parser@4.2.5: - version "4.2.5" - resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz" - integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== - dependencies: - strnum "^1.0.5" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz" - 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.npmjs.org/figures/-/figures-3.2.0.tgz" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -follow-redirects@^1.15.4: - version "1.15.6" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" - 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.npmjs.org/form-data/-/form-data-4.0.0.tgz" - 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.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz" - integrity sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w== - -glob@^10.3.10: - version "10.3.10" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -graphql-request@5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/graphql-request/-/graphql-request-5.1.0.tgz" - 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@^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", graphql@^16.6.0, "graphql@14 - 16": - version "16.8.1" - resolved "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -hpagent@^1.0.0: - version "1.2.0" - resolved "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz" - integrity sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA== - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -inflection@^1.13.4: - version "1.13.4" - resolved "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz" - integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw== - -inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inquirer-autocomplete-prompt@^1.0.2: - version "1.4.0" - resolved "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz" - 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.npmjs.org/inquirer-fuzzy-path/-/inquirer-fuzzy-path-2.3.0.tgz" - 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@^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", inquirer@^8.0.0: - version "8.2.6" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz" - 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" - -inquirer@^6.0.0: - version "6.5.2" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz" - 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" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - 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.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - 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.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -moment-timezone@^0.5.43: - version "0.5.45" - resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz" - integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== - dependencies: - moment "^2.29.4" - -moment@^2.29.4: - version "2.30.1" - resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz" - integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz" - integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -node-fetch@^2.6.12: - version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" - 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.npmjs.org/onetime/-/onetime-2.0.1.tgz" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - 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.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-limit@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -packet-reader@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz" - integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -pg-cloudflare@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz" - integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== - -pg-connection-string@^2.6.1, pg-connection-string@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz" - integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== - -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz" - integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== - -pg-pool@^3.6.1: - version "3.6.1" - resolved "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz" - integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og== - -pg-protocol@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz" - integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== - -pg-types@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz" - 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, pg@>=8.0: - version "8.11.3" - resolved "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz" - integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== - dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.6.2" - pg-pool "^3.6.1" - pg-protocol "^1.6.0" - pg-types "^2.1.0" - pgpass "1.x" - optionalDependencies: - pg-cloudflare "^1.1.1" - -pgpass@1.x: - version "1.0.5" - resolved "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz" - integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== - dependencies: - split2 "^4.1.0" - -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== - -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz" - integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== - -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== - -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz" - 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.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - 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.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" - 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.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - 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.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz" - integrity sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA== - -retry@0.13.1: - version "0.13.1" - resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -run-async@^2.2.0, run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -rxjs@^6.4.0: - version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^6.6.2: - version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -secure-json-parse@^2.4.0: - version "2.7.0" - resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" - integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== - -semver@^7.5.4: - version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -sequelize-pool@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz" - integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg== - -sequelize@^6.36.0: - version "6.36.0" - resolved "https://registry.npmjs.org/sequelize/-/sequelize-6.36.0.tgz" - integrity sha512-PqOa11EHwA/zLmGDU4aynbsavbHJUlgRvFuC/2cA4LhOuV6NHKcQ0IXB+hNdFrGT3rULmvc4kdIwnfCNsrECMQ== - 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.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -split2@^4.1.0: - version "4.2.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - 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.npmjs.org/string-width/-/string-width-2.1.1.tgz" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - 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@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -toposort-class@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz" - integrity sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tron-format-address@^0.1.11: - version "0.1.11" - resolved "https://registry.npmjs.org/tron-format-address/-/tron-format-address-0.1.11.tgz" - integrity sha512-Jx2i3R1yXrEMQsfc2jueAI71ivnySzdeva6SiSM/pddwj8TK7PVABSP6s/iYcTRI63GxJEgGMmOJXNNKoBmbQw== - -ts-node@^10.9.1: - version "10.9.2" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" - 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@^1.11.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0: - version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -typescript@^5.0.0, typescript@>=2.7: - version "5.3.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -undici@^5.22.1: - version "5.28.4" - resolved "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz" - integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== - dependencies: - "@fastify/busboy" "^2.0.0" - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -validator@^13.9.0: - version "13.11.0" - resolved "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - 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.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wkx@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz" - 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.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - 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.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - 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.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -ws@8.5.0: - version "8.5.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 8ed03816064e2849fab0c34b755cc8d0f809c399 Mon Sep 17 00:00:00 2001 From: 0xMasayoshi <0xMasayoshi@protonmail.com> Date: Fri, 28 Jun 2024 18:11:28 +0700 Subject: [PATCH 0878/1590] feat: add sushiswap aggregator adapter --- aggregators/sushiswap/index.ts | 181 +++++++++++++++++++++++++++++++++ helpers/chains.ts | 6 +- 2 files changed, 186 insertions(+), 1 deletion(-) create mode 100644 aggregators/sushiswap/index.ts diff --git a/aggregators/sushiswap/index.ts b/aggregators/sushiswap/index.ts new file mode 100644 index 0000000000..6b26953df8 --- /dev/null +++ b/aggregators/sushiswap/index.ts @@ -0,0 +1,181 @@ +import { FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const ROUTE_EVENT = 'event Route(address indexed from, address to, address indexed tokenIn, address indexed tokenOut, uint256 amountIn, uint256 amountOutMin,uint256 amountOut)' + +const RP4_ADDRESS = { + [CHAIN.ETHEREUM]: '0xe43ca1Dee3F0fc1e2df73A0745674545F11A59F5', + [CHAIN.ARBITRUM]: '0x544bA588efD839d2692Fc31EA991cD39993c135F', + [CHAIN.OPTIMISM]: '0x1f2FCf1d036b375b384012e61D3AA33F8C256bbE', + [CHAIN.BASE]: '0x0389879e0156033202c44bf784ac18fc02edee4f', + [CHAIN.POLYGON]: '0x46B3fDF7b5CDe91Ac049936bF0bDb12c5d22202e', + [CHAIN.AVAX]: '0xCdBCd51a5E8728E0AF4895ce5771b7d17fF71959', + [CHAIN.BSC]: '0x33d91116e0370970444B0281AB117e161fEbFcdD', + [CHAIN.LINEA]: '0x46b3fdf7b5cde91ac049936bf0bdb12c5d22202e', + [CHAIN.ARBITRUM_NOVA]: '0xCdBCd51a5E8728E0AF4895ce5771b7d17fF71959', + [CHAIN.XDAI]: '0x46b3fdf7b5cde91ac049936bf0bdb12c5d22202e', + [CHAIN.FANTOM]: '0x46b3fdf7b5cde91ac049936bf0bdb12c5d22202e', + [CHAIN.BITTORRENT]: '0x93c31c9C729A249b2877F7699e178F4720407733', + [CHAIN.CELO]: '0xCdBCd51a5E8728E0AF4895ce5771b7d17fF71959', + [CHAIN.FILECOIN]: '0x1f2FCf1d036b375b384012e61D3AA33F8C256bbE', + [CHAIN.HAQQ]: '0xc3Ec4e1511c6935ed2F92b9A61881a1B95bB1566', + [CHAIN.KAVA]: '0xB45e53277a7e0F1D35f2a77160e91e25507f1763', + [CHAIN.METIS]: '0xB45e53277a7e0F1D35f2a77160e91e25507f1763', + [CHAIN.THUNDERCORE]: '0x57bfFa72db682f7eb6C132DAE03FF36bBEB0c459', + [CHAIN.SCROLL]: '0x734583f62Bb6ACe3c9bA9bd5A53143CA2Ce8C55A', + [CHAIN.ZETA]: '0x640129e6b5C31B3b12640A5b39FECdCa9F81C640', + [CHAIN.MOONBEAM]: '0xB45e53277a7e0F1D35f2a77160e91e25507f1763', + [CHAIN.MOONRIVER]: '0x46B3fDF7b5CDe91Ac049936bF0bDb12c5d22202e', + [CHAIN.POLYGON_ZKEVM]: '0x57bfFa72db682f7eb6C132DAE03FF36bBEB0c459', + [CHAIN.FUSE]: '0x46B3fDF7b5CDe91Ac049936bF0bDb12c5d22202e', + [CHAIN.HARMONY]: '0x9B3336186a38E1b6c21955d112dbb0343Ee061eE', + [CHAIN.TELOS]: '0x1400feFD6F9b897970f00Df6237Ff2B8b27Dc82C', + [CHAIN.BOBA]: '0xe43ca1Dee3F0fc1e2df73A0745674545F11A59F5', + [CHAIN.BOBA_BNB]: '0xCdBCd51a5E8728E0AF4895ce5771b7d17fF71959', + [CHAIN.CORE]: '0x0389879e0156033202C44BF784ac18fC02edeE4f', + [CHAIN.CRONOS]: '0xCdBCd51a5E8728E0AF4895ce5771b7d17fF71959', + [CHAIN.BLAST]: '0xCdBCd51a5E8728E0AF4895ce5771b7d17fF71959', + [CHAIN.SKALE_EUROPA]: '0xbA61F775730C0a3E3361717195ee86785ee33055', + [CHAIN.ROOTSTOCK]: '0xb46e319390De313B8cc95EA5aa30C7bBFD79Da94', +} + +const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise => { + const dailyVolume = createBalances(); + const logs = (await getLogs({ target: RP4_ADDRESS[chain], eventAbi: ROUTE_EVENT })) + logs.forEach((log) => { + dailyVolume.add(log.tokenOut, log.amountOut) + }) + return { dailyVolume }; +} + +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch, + start: 1708849166, + }, + [CHAIN.ARBITRUM_NOVA]: { + fetch, + start: 1708859455 + }, + [CHAIN.AVAX]: { + fetch, + start: 1708861373 + }, + [CHAIN.BASE]: { + fetch, + start: 1708860457 + }, + [CHAIN.BLAST]: { + fetch, + start: 1709257139 + }, + [CHAIN.BOBA]: { + fetch, + start: 1711114904 + }, + // [CHAIN.BOBA_BNB]: { + // fetch, + // start: 1708869909 + // }, + [CHAIN.BSC]: { + fetch, + start: 1708861767 + }, + [CHAIN.BITTORRENT]: { + fetch, + start: 1708849432 + }, + [CHAIN.CELO]: { + fetch, + start: 1708862981 + }, + [CHAIN.CORE]: { + fetch, + start: 1708868629 + }, + [CHAIN.ETHEREUM]: { + fetch, + start: 1708848791 + }, + [CHAIN.FANTOM]: { + fetch, + start: 1708862854 + }, + // [CHAIN.FILECOIN]: { + // fetch, + // start: 1708863300 + // }, + [CHAIN.FUSE]: { + fetch, + start: 1708842355 + }, + [CHAIN.XDAI]: { + fetch, + start: 1708862650 + }, + // [CHAIN.HAQQ]: { + // fetch, + // start: 1708838485 + // }, + // [CHAIN.HARMONY]: { + // fetch, + // start: 1708867604 + // }, + [CHAIN.KAVA]: { + fetch, + start: 1708864014 + }, + [CHAIN.LINEA]: { + fetch, + start: 1708861967 + }, + [CHAIN.METIS]: { + fetch, + start: 1708864370 + }, + [CHAIN.MOONBEAM]: { + fetch, + start: 1708866396 + }, + [CHAIN.MOONRIVER]: { + fetch, + start: 1708867026 + }, + [CHAIN.OPTIMISM]: { + fetch, + start: 1708860181 + }, + [CHAIN.POLYGON]: { + fetch, + start: 1708860721 + }, + [CHAIN.POLYGON_ZKEVM]: { + fetch, + start: 1708867809 + }, + // [CHAIN.ROOTSTOCK]: { + // fetch, + // start: 1716315751 + // }, + [CHAIN.SCROLL]: { + fetch, + start: 1708865967 + }, + // [CHAIN.SKALE_EUROPA]: { + // fetch, + // start: 1713803839 + // }, + [CHAIN.THUNDERCORE]: { + fetch, + start: 1708889900 + }, + [CHAIN.ZETA]: { + fetch, + start: 1708865999 + }, + }, + version: 2 +} + +export default adapters \ No newline at end of file diff --git a/helpers/chains.ts b/helpers/chains.ts index 512074bf8c..25cfcc4c00 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -4,16 +4,19 @@ export enum CHAIN { AVAX = "avax", BLAST = "blast", BOBA = "boba", + BOBA_BNB = "boba_bnb", BSC = "bsc", CELO = "celo", ETHEREUM = "ethereum", FANTOM = "fantom", HARMONY = "harmony", + HAQQ = "haqq", HECO = "heco", OKEXCHAIN = "okexchain", OPTIMISM = "optimism", POLYGON = "polygon", RONIN = "ronin", + ROOTSTOCK = "rootstock", XDAI = "xdai", AURORA = "aurora", MOONRIVER = "moonriver", @@ -153,7 +156,8 @@ export enum CHAIN { CHILIZ = "chiliz", PLANQ = "planq", BOB = "bob", - TAIKO = "taiko" + TAIKO = "taiko", + SKALE_EUROPA = "skale_europa" } // Don´t use From 20435447b5d9cbfc066beb87c266e9963c1cc3d6 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 28 Jun 2024 16:26:53 +0000 Subject: [PATCH 0879/1590] vertex mamtle --- dexs/vertex-protocol/index.ts | 61 ++++++++++++++++++++++-------- fees/vertex-protocol.ts | 71 +++++++++++++++++++++++------------ 2 files changed, 91 insertions(+), 41 deletions(-) diff --git a/dexs/vertex-protocol/index.ts b/dexs/vertex-protocol/index.ts index 87be6260f2..1b094dc0cd 100644 --- a/dexs/vertex-protocol/index.ts +++ b/dexs/vertex-protocol/index.ts @@ -1,4 +1,4 @@ -import { BreakdownAdapter } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { httpGet, httpPost } from "../../utils/fetchURL"; @@ -11,14 +11,34 @@ interface IProducts { const gatewayBaseUrl = "https://gateway.prod.vertexprotocol.com/v1"; const archiveBaseUrl = "https://archive.prod.vertexprotocol.com/v1"; -const fetchValidSymbols = async (): Promise => { - const symbols = (await httpGet(`${gatewayBaseUrl}/symbols`)); +const gatewayMatleBaseUrl = "https://gateway.mantle-prod.vertexprotocol.com/v1"; +const archiveMatleBaseUrl = "https://archive.mantle-prod.vertexprotocol.com/v1"; + +type TURL = { + [s: string]: { + gateway: string; + archive: string; + } +} +const url: TURL = { + [CHAIN.ARBITRUM]: { + gateway: gatewayBaseUrl, + archive: archiveBaseUrl, + }, + [CHAIN.MANTLE]: { + gateway: gatewayMatleBaseUrl, + archive: archiveMatleBaseUrl, + } +} + +const fetchValidSymbols = async (fetchOptions: FetchOptions): Promise => { + const symbols = (await httpGet(`${url[fetchOptions.chain].gateway}/symbols`)); return symbols.map((product: { product_id: number }) => product.product_id); }; -const fetchProducts = async (): Promise => { - const validSymbols = await fetchValidSymbols(); - const allProducts = (await httpGet(`${gatewayBaseUrl}/query?type=all_products`)).data; +const fetchProducts = async (fetchOptions: FetchOptions): Promise => { + const validSymbols = await fetchValidSymbols(fetchOptions); + const allProducts = (await httpGet(`${url[fetchOptions.chain].gateway}/query?type=all_products`)).data; return { spot_products: allProducts.spot_products .map((product: { product_id: number }) => product.product_id) @@ -32,9 +52,9 @@ const fetchProducts = async (): Promise => { }; }; -const computeVolume = async (timestamp: number, productIds: number[]) => { +const computeVolume = async (timestamp: number, productIds: number[], fetchOptions: FetchOptions) => { const snapshots = ( - await httpPost(archiveBaseUrl, { + await httpPost(url[fetchOptions.chain].archive, { market_snapshots: { interval: { count: 2, @@ -69,17 +89,18 @@ const computeVolume = async (timestamp: number, productIds: number[]) => { }; }; -const fetchSpots = async (timeStamp: number) => { - const spotProductIds = (await fetchProducts()).spot_products; - return await computeVolume(timeStamp, spotProductIds); +const fetchSpots = async (timeStamp: number, _: any, fetchOptions: FetchOptions) => { + const spotProductIds = (await fetchProducts(fetchOptions)).spot_products; + return await computeVolume(timeStamp, spotProductIds, fetchOptions); }; -const fetchPerps = async (timeStamp: number) => { - const perpProductIds = (await fetchProducts()).perp_products; - const marginedProductIds = (await fetchProducts()).margined_products; +const fetchPerps = async (timeStamp: number, _: any, fetchOptions: FetchOptions) => { + const perpProductIds = (await fetchProducts(fetchOptions)).perp_products; + const marginedProductIds = (await fetchProducts(fetchOptions)).margined_products; return await computeVolume( timeStamp, - perpProductIds.concat(marginedProductIds) + perpProductIds.concat(marginedProductIds), + fetchOptions ); }; @@ -92,12 +113,20 @@ const adapter: BreakdownAdapter = { fetch: fetchSpots, start: startTime, }, + [CHAIN.MANTLE]: { + fetch: fetchSpots, + start: startTime, + } }, derivatives: { [CHAIN.ARBITRUM]: { fetch: fetchPerps, - start: startTime, + start: 1718841600, }, + [CHAIN.MANTLE]: { + fetch: fetchPerps, + start: 1718841600, + } }, }, }; diff --git a/fees/vertex-protocol.ts b/fees/vertex-protocol.ts index cf05b2b514..554461f8e6 100644 --- a/fees/vertex-protocol.ts +++ b/fees/vertex-protocol.ts @@ -1,5 +1,5 @@ import { CHAIN } from "../helpers/chains"; -import { Adapter, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions, FetchResultFees } from "../adapters/types"; import { httpPost } from "../utils/fetchURL"; interface MarketSnapshots { @@ -25,7 +25,19 @@ interface Response { snapshots: Snapshot[]; } -const query = async (max_time: number): Promise => { +const archiveBaseUrl = "https://archive.prod.vertexprotocol.com/v1"; +const archiveMatleBaseUrl = "https://archive.mantle-prod.vertexprotocol.com/v1"; + +type TURL = { + [s: string]: string; +}; + +const url: TURL = { + [CHAIN.ARBITRUM]: archiveBaseUrl, + [CHAIN.MANTLE]: archiveMatleBaseUrl, +}; + +const query = async (max_time: number, fetchOptions: FetchOptions): Promise => { const body: QueryBody = { market_snapshots: { interval: { @@ -36,8 +48,8 @@ const query = async (max_time: number): Promise => { }, }; - const archiveBaseUrl = "https://archive.prod.vertexprotocol.com/v1"; - const response = await httpPost(archiveBaseUrl, body); + + const response = await httpPost(url[fetchOptions.chain], body); return response; }; @@ -51,9 +63,10 @@ const sumAllProductStats = (stat_map: IData): number => { const get24hrStat = async ( field: string, - max_time: number + max_time: number, + fetchOptions: FetchOptions ): Promise => { - const response = await query(max_time); + const response = await query(max_time, fetchOptions); const cur_res: Snapshot = response.snapshots[0]; const past_res: Snapshot = response.snapshots[1]; return ( @@ -63,48 +76,51 @@ const get24hrStat = async ( const getCumulativeStat = async ( field: string, - max_time: number + max_time: number, + fetchOptions: FetchOptions ): Promise => { - const response = await query(max_time); + const response = await query(max_time, fetchOptions); const cur_res = response.snapshots[0]; return sumAllProductStats(cur_res[field]); }; -const getCumulativeFees = async (max_time: number): Promise => { - const fees = await getCumulativeStat("cumulative_taker_fees", max_time); +const getCumulativeFees = async (max_time: number, fetchOptions: FetchOptions): Promise => { + const fees = await getCumulativeStat("cumulative_taker_fees", max_time, fetchOptions); const sequencer_fees = await getCumulativeStat( "cumulative_sequencer_fees", - max_time + max_time, + fetchOptions ); return fees - sequencer_fees; }; -const getCumulativeRevenue = async (max_time: number): Promise => { - const fees = await getCumulativeFees(max_time); - const rebates = await getCumulativeStat("cumulative_maker_fees", max_time); +const getCumulativeRevenue = async (max_time: number, fetchOptions: FetchOptions): Promise => { + const fees = await getCumulativeFees(max_time, fetchOptions); + const rebates = await getCumulativeStat("cumulative_maker_fees", max_time, fetchOptions); return fees + rebates; }; -const get24hrFees = async (max_time: number): Promise => { - const fees = await get24hrStat("cumulative_taker_fees", max_time); +const get24hrFees = async (max_time: number, fetchOptions: FetchOptions): Promise => { + const fees = await get24hrStat("cumulative_taker_fees", max_time, fetchOptions); const sequencer_fees = await get24hrStat( "cumulative_sequencer_fees", - max_time + max_time, + fetchOptions ); return fees - sequencer_fees; }; -const get24hrRevenue = async (max_time: number): Promise => { - const fees = await get24hrFees(max_time); - const rebates = await get24hrStat("cumulative_maker_fees", max_time); +const get24hrRevenue = async (max_time: number, fetchOptions: FetchOptions): Promise => { + const fees = await get24hrFees(max_time, fetchOptions); + const rebates = await get24hrStat("cumulative_maker_fees", max_time, fetchOptions); return fees + rebates; }; -const fetch = async (timestamp: number): Promise => { - const dailyFees = await get24hrFees(timestamp); - const dailyRevenue = await get24hrRevenue(timestamp); - const totalFees = await getCumulativeFees(timestamp); - const totalRev = await getCumulativeRevenue(timestamp); +const fetch = async (timestamp: number, _: any, fetchOptions: FetchOptions): Promise => { + const dailyFees = await get24hrFees(timestamp, fetchOptions); + const dailyRevenue = await get24hrRevenue(timestamp, fetchOptions); + const totalFees = await getCumulativeFees(timestamp, fetchOptions); + const totalRev = await getCumulativeRevenue(timestamp, fetchOptions); return { dailyFees: `${dailyFees}`, dailyRevenue: `${dailyRevenue}`, @@ -121,6 +137,11 @@ const adapter: Adapter = { runAtCurrTime: true, start: 1682514000, }, + [CHAIN.MANTLE]: { + fetch: fetch, + runAtCurrTime: true, + start: 1682514000, + }, }, }; From 1c61ba1b5262582152a6e9482426a60b6943b73a Mon Sep 17 00:00:00 2001 From: 0x_danr Date: Fri, 28 Jun 2024 12:28:08 -0400 Subject: [PATCH 0880/1590] GamamSwap: Add DeltaSwapFactory for Base & Ethereum in dexs/deltaswap (#1624) * adding DeltaSwapFactory for Base and Ethereum in dexs/deltaswap * updated chain in options to correct chain for Arbitrum, Base, and Ethereum. Also updated start time in seconds for all chains --- dexs/deltaswap/index.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/dexs/deltaswap/index.ts b/dexs/deltaswap/index.ts index 8d8a4f5709..fb49acd714 100644 --- a/dexs/deltaswap/index.ts +++ b/dexs/deltaswap/index.ts @@ -2,12 +2,19 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; -const FACTORY_ADDRESS = '0xcb85e1222f715a81b8edaeb73b28182fa37cffa8' const adapters: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM]: { - fetch: getDexVolumeExports({ chain: CHAIN.MANTLE, factory: FACTORY_ADDRESS }), - start: 1706745600, + fetch: getDexVolumeExports({ chain: CHAIN.ARBITRUM, factory: '0xcb85e1222f715a81b8edaeb73b28182fa37cffa8' }), + start: 1705968000, + }, + [CHAIN.BASE]: { + fetch: getDexVolumeExports({ chain: CHAIN.BASE, factory: '0x9a9a171c69cc811dc6b59bb2f9990e34a22fc971' }), + start: 1715644800, + }, + [CHAIN.ETHEREUM]: { + fetch: getDexVolumeExports({ chain: CHAIN.ETHEREUM, factory: '0x5fbe219e88f6c6f214ce6f5b1fcaa0294f31ae1b' }), + start: 1716854400, } } } From 84f73b57f54ee816c620041907687c197a4c3d21 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 29 Jun 2024 16:00:11 +0000 Subject: [PATCH 0881/1590] fix run current --- options/ithaca/index.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/options/ithaca/index.ts b/options/ithaca/index.ts index 4196f5fcb2..dea243eed5 100644 --- a/options/ithaca/index.ts +++ b/options/ithaca/index.ts @@ -1,5 +1,5 @@ import { SimpleAdapter } from "../../adapters/types"; -import fetchURL from "../../utils/fetchURL"; +import fetchURL, { httpGet } from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; import { Balances } from "@defillama/sdk"; import { parseUnits } from "ethers"; @@ -25,7 +25,6 @@ const adapter: SimpleAdapter = { [CHAIN.ARBITRUM]: { fetch: fetchIthacaVolumeData, start: 1713205800, - runAtCurrTime: true }, }, }; @@ -33,7 +32,7 @@ const adapter: SimpleAdapter = { export async function fetchIthacaVolumeData( timestamp: number ) { - const { response: ithacaStats } = await fetchURL(`https://app.ithacaprotocol.io/api/v1/analytics/WETH/USDC/stats`) as IIthacaStatsResponse; + const { response: ithacaStats } = await httpGet(`https://app.ithacaprotocol.io/api/v1/analytics/WETH/USDC/stats`) as IIthacaStatsResponse; const dailyNotionalVolume = new Balances({ chain: CHAIN.ARBITRUM }) dailyNotionalVolume.addToken(USDC_CONTRACT, parseUnits(ithacaStats.daily_volume_numeraire.toFixed(6), 6)) From 6c79af4985738a5911ad56025394f58f666e68d6 Mon Sep 17 00:00:00 2001 From: ftm1337 Date: Sun, 30 Jun 2024 00:54:04 -0400 Subject: [PATCH 0882/1590] fix wrong wigoswap volume --- dexs/wigoswap/index.ts | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/dexs/wigoswap/index.ts b/dexs/wigoswap/index.ts index 3d8c01b1b2..fe9deb0dff 100644 --- a/dexs/wigoswap/index.ts +++ b/dexs/wigoswap/index.ts @@ -1,14 +1,13 @@ -import * as sdk from "@defillama/sdk"; +import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; -const adapters = univ2Adapter({ - [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('71os49womDk3DFcNRCAFYzATxxMgWpSMKhRn5ih6aWF1') -}, { - factoriesName: "wigoswapFactories", - dayData: "wigoDayData", - gasToken: "coingecko:fantom" -}); - -adapters.adapter.fantom.start = 1642982400; -export default adapters; +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.FANTOM]: { + fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: '0xc831a5cbfb4ac2da5ed5b194385dfd9bf5bfcba7' }), + start: 1642982400, + }, + } +} +export default adapters; \ No newline at end of file From aa92184e9f4483a0a0f3b37d21fa2a3a95b916ce Mon Sep 17 00:00:00 2001 From: JoscelynFarr Date: Mon, 1 Jul 2024 11:36:56 +0800 Subject: [PATCH 0883/1590] add fee in JOJO --- fees/jojo/index.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 fees/jojo/index.ts diff --git a/fees/jojo/index.ts b/fees/jojo/index.ts new file mode 100644 index 0000000000..6f1d1d7cdf --- /dev/null +++ b/fees/jojo/index.ts @@ -0,0 +1,31 @@ +import { FetchOptions, SimpleAdapter, FetchV2, FetchResultV2 } from '../../adapters/types' +import { httpGet } from '../../utils/fetchURL' + +interface IFees { + day: string + fee: string +} + +const getFetch: FetchV2 = async (options: FetchOptions): Promise => { + const url = 'https://api.base-mainnet.jojo.exchange/v1/private/tradingFee?limit=365' + const dateStr = new Date((options.startOfDay - 86400) * 1000).toISOString().split('T')[0] + const res = await httpGet(url) + delete res['latestTen'] + const item: IFees[] = Object.values(res) + const dailyFees = item.flat().find((i) => i.day.split('T')[0] === dateStr)?.fee + return { + dailyFees: dailyFees ? dailyFees : undefined, + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + "jojo": { + fetch: getFetch, + start: 1712678400, + } + } +} + +export default adapter From 5c228e318b42fb4767f28dc515781be8e38e219e Mon Sep 17 00:00:00 2001 From: Halberd <146163939+halberd01@users.noreply.github.com> Date: Mon, 1 Jul 2024 18:13:39 +0800 Subject: [PATCH 0884/1590] update subgraph url for rollie finance --- dexs/rollie-finance/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/rollie-finance/index.ts b/dexs/rollie-finance/index.ts index 527196b41e..a773cb7ed7 100644 --- a/dexs/rollie-finance/index.ts +++ b/dexs/rollie-finance/index.ts @@ -6,7 +6,7 @@ import { } from '../../helpers/getUniSubgraphVolume'; const ENDPOINTS: { [key: string]: string } = { - [CHAIN.SCROLL]: 'https://api.studio.thegraph.com/query/54326/rollie-beta/0.0.1', + [CHAIN.SCROLL]: 'https://api.studio.thegraph.com/query/76203/rollie-finance/0.0.3/', }; const USDC_DECIMALS: { [key: string]: number } = { [CHAIN.SCROLL]: 6, From 6ee920554aa51862fc7b06b7ae525e56e9b119a1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 1 Jul 2024 15:28:20 +0000 Subject: [PATCH 0885/1590] disable celo --- dexs/curve/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/curve/index.ts b/dexs/curve/index.ts index f162243a2a..d687738528 100644 --- a/dexs/curve/index.ts +++ b/dexs/curve/index.ts @@ -10,7 +10,7 @@ const endpoints: { [chain: string]: string } = { [CHAIN.AVAX]: "https://api.curve.fi/api/getSubgraphData/avalanche", [CHAIN.OPTIMISM]: "https://api.curve.fi/api/getSubgraphData/optimism", [CHAIN.XDAI]: "https://api.curve.fi/api/getSubgraphData/xdai", - [CHAIN.CELO]: "https://api.curve.fi/api/getSubgraphData/celo", + // [CHAIN.CELO]: "https://api.curve.fi/api/getSubgraphData/celo", [CHAIN.FRAXTAL]: "https://api.curve.fi/api/getSubgraphData/fraxtal", }; From e29eab5a408debbdc79611a833240a322821c102 Mon Sep 17 00:00:00 2001 From: Antoni N Date: Mon, 1 Jul 2024 18:08:27 +0200 Subject: [PATCH 0886/1590] Add Bitoro adapter --- aggregator-derivatives/bitoro/index.ts | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 aggregator-derivatives/bitoro/index.ts diff --git a/aggregator-derivatives/bitoro/index.ts b/aggregator-derivatives/bitoro/index.ts new file mode 100644 index 0000000000..c38cec383b --- /dev/null +++ b/aggregator-derivatives/bitoro/index.ts @@ -0,0 +1,31 @@ +import fetchURL from "../../utils/fetchURL"; +import { FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const BASE_URL = "https://min-api.bitoro.network/btr/stats/global"; +const startTimestamp = 1711324800; // 2024-03-25 00:00:00 + +const constructUrl = (startTime: number, endTime: number): string => { + return `${BASE_URL}?start=${startTime}&end=${endTime}`; +} + +const fetch = async (options: any): Promise => { + const { fromTimestamp, toTimestamp } = options; + const dailyVolume = await fetchURL(constructUrl(fromTimestamp, toTimestamp)); + const totalVolume = await fetchURL(constructUrl(startTimestamp, toTimestamp)); + + return { + dailyVolume: dailyVolume.volume || 0, + totalVolume: totalVolume.volume || 0, + }; +}; + +export default { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetch, + start: startTimestamp + }, + }, + version: 2 +} \ No newline at end of file From 4ef01c26d79d3bae3d9bfcb8b4de313ea000b7fa Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 1 Jul 2024 16:09:20 +0000 Subject: [PATCH 0887/1590] fix catch when some chain it error --- dexs/curve/index.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/dexs/curve/index.ts b/dexs/curve/index.ts index d687738528..9227d34d61 100644 --- a/dexs/curve/index.ts +++ b/dexs/curve/index.ts @@ -24,12 +24,17 @@ interface IAPIResponse { } const fetch = (chain: string) => async (timestamp: number) => { - const response: IAPIResponse = (await fetchURL(endpoints[chain])); - const t = response.data.generatedTimeMs ? response.data.generatedTimeMs / 1000 : timestamp - return { - dailyVolume: `${response.data.totalVolume}`, - timestamp: t, - }; + try { + const response: IAPIResponse = (await fetchURL(endpoints[chain])); + const t = response.data.generatedTimeMs ? response.data.generatedTimeMs / 1000 : timestamp + return { + dailyVolume: `${response.data.totalVolume}`, + timestamp: t, + }; + } catch (e) { + return { timestamp } + } + }; const adapter: SimpleAdapter = { From ec88de80eb16d9ba09c12e9133c076c0b2534866 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 1 Jul 2024 16:28:22 +0000 Subject: [PATCH 0888/1590] fix rev --- fees/sideshift.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fees/sideshift.ts b/fees/sideshift.ts index ca1e837448..8047168b68 100644 --- a/fees/sideshift.ts +++ b/fees/sideshift.ts @@ -15,7 +15,10 @@ const fetchFees = async (options: FetchOptions) => { logs.forEach(log => { dailyFees.add(token, Number(log.data)) }) - return { dailyFees, dailyRevenue: dailyFees } + const holderRevenue = dailyFees.clone() + holderRevenue.resizeBy(4) + + return { dailyFees, dailyRevenue: holderRevenue, holdersRevenue: holderRevenue } } const adapters: SimpleAdapter = { version: 2, From 89c5d51fd1954c45397c1d67304a9ab50c1a2bf5 Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Tue, 2 Jul 2024 00:36:58 +0100 Subject: [PATCH 0889/1590] update multiple fee splits --- fees/cleopatra-exchange.ts | 7 ++++--- fees/nile-exchange/index.ts | 8 ++++---- fees/nuri-exchange-v2/index.ts | 12 ++++++------ fees/pharaoh-exchange.ts | 7 ++++--- fees/ramses-exchange-v2/index.ts | 4 ++-- 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/fees/cleopatra-exchange.ts b/fees/cleopatra-exchange.ts index 1243220066..a697f79731 100644 --- a/fees/cleopatra-exchange.ts +++ b/fees/cleopatra-exchange.ts @@ -33,10 +33,11 @@ const v2Graphs = getGraphDimensions({ }, feesPercent: { type: "fees", - HoldersRevenue: 50, + HoldersRevenue: 72, + ProtocolRevenue: 8, UserFees: 100, // User fees are 100% of collected fees - Revenue: 50, // Revenue is 50% of collected fees - SupplySideRevenue: 50, + Revenue: 100, // Revenue is 50% of collected fees + SupplySideRevenue: 20, }, }); diff --git a/fees/nile-exchange/index.ts b/fees/nile-exchange/index.ts index cb6667437a..112f0d3367 100644 --- a/fees/nile-exchange/index.ts +++ b/fees/nile-exchange/index.ts @@ -45,11 +45,11 @@ const v2Graphs = getGraphDimensions({ }, feesPercent: { type: "fees", - HoldersRevenue: 50, - ProtocolRevenue: 5, - SupplySideRevenue: 45, + HoldersRevenue: 72, + ProtocolRevenue: 8, + SupplySideRevenue: 20, UserFees: 100, // User fees are 100% of collected fees - Revenue: 50 // Revenue is 100% of collected fees + Revenue: 100 // Revenue is 100% of collected fees } }); // https://docs.ramses.exchange/ramses-cl-v2/concentrated-liquidity/fee-distribution diff --git a/fees/nuri-exchange-v2/index.ts b/fees/nuri-exchange-v2/index.ts index c2677eb6f0..4024923e8a 100644 --- a/fees/nuri-exchange-v2/index.ts +++ b/fees/nuri-exchange-v2/index.ts @@ -45,18 +45,18 @@ const v2Graphs = getGraphDimensions({ }, feesPercent: { type: "fees", - HoldersRevenue: 50, - ProtocolRevenue: 5, - SupplySideRevenue: 45, + HoldersRevenue: 72, + ProtocolRevenue: 8, + SupplySideRevenue: 20, UserFees: 100, // User fees are 100% of collected fees - Revenue: 50 // Revenue is 100% of collected fees + Revenue: 100 // Revenue is 100% of collected fees } }); // https://docs.ramses.exchange/ramses-cl-v2/concentrated-liquidity/fee-distribution const methodology = { UserFees: "User pays 0.3% fees on each swap.", - ProtocolRevenue: "Revenue going to the protocol. 5% of collected fees. (is probably right because the distribution is dynamic.)", - HoldersRevenue: "User fees are distributed among holders. 75% of collected fees. (is probably right because the distribution is dynamic.)", + ProtocolRevenue: "Revenue going to the protocol. 8% of collected fees. (is probably right because the distribution is dynamic.)", + HoldersRevenue: "User fees are distributed among holders. 72% of collected fees. (is probably right because the distribution is dynamic.)", SupplySideRevenue: "20% of collected fees are distributed among LPs. (is probably right because the distribution is dynamic.)" } diff --git a/fees/pharaoh-exchange.ts b/fees/pharaoh-exchange.ts index 5c3330ea85..2956777b23 100644 --- a/fees/pharaoh-exchange.ts +++ b/fees/pharaoh-exchange.ts @@ -34,10 +34,11 @@ const v2Graphs = getGraphDimensions({ }, feesPercent: { type: "fees", - HoldersRevenue: 50, + HoldersRevenue: 72, UserFees: 100, // User fees are 100% of collected fees - Revenue: 50, // Revenue is 50% of collected fees - SupplySideRevenue: 50, + Revenue: 100, // Revenue is 50% of collected fees + SupplySideRevenue: 20, + ProtocolRevenue: 8, }, }); diff --git a/fees/ramses-exchange-v2/index.ts b/fees/ramses-exchange-v2/index.ts index 00eab7052f..470ceb83be 100644 --- a/fees/ramses-exchange-v2/index.ts +++ b/fees/ramses-exchange-v2/index.ts @@ -46,8 +46,8 @@ const v2Graphs = getGraphDimensions({ }, feesPercent: { type: "fees", - HoldersRevenue: 75, - ProtocolRevenue: 5, + HoldersRevenue: 72, + ProtocolRevenue: 8, SupplySideRevenue: 20, UserFees: 100, // User fees are 100% of collected fees Revenue: 80 // Revenue is 100% of collected fees From 94ac1fb280cbf36d148b0a409ed65153f5b0510d Mon Sep 17 00:00:00 2001 From: 0xshad0w Date: Tue, 2 Jul 2024 00:39:31 +0100 Subject: [PATCH 0890/1590] update --- fees/cleopatra-exchange.ts | 2 +- fees/nile-exchange/index.ts | 2 +- fees/nuri-exchange-v2/index.ts | 2 +- fees/pharaoh-exchange.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fees/cleopatra-exchange.ts b/fees/cleopatra-exchange.ts index a697f79731..de80206631 100644 --- a/fees/cleopatra-exchange.ts +++ b/fees/cleopatra-exchange.ts @@ -36,7 +36,7 @@ const v2Graphs = getGraphDimensions({ HoldersRevenue: 72, ProtocolRevenue: 8, UserFees: 100, // User fees are 100% of collected fees - Revenue: 100, // Revenue is 50% of collected fees + Revenue: 80, // Revenue is 50% of collected fees SupplySideRevenue: 20, }, }); diff --git a/fees/nile-exchange/index.ts b/fees/nile-exchange/index.ts index 112f0d3367..ea38c99ce3 100644 --- a/fees/nile-exchange/index.ts +++ b/fees/nile-exchange/index.ts @@ -49,7 +49,7 @@ const v2Graphs = getGraphDimensions({ ProtocolRevenue: 8, SupplySideRevenue: 20, UserFees: 100, // User fees are 100% of collected fees - Revenue: 100 // Revenue is 100% of collected fees + Revenue: 80 // Revenue is 100% of collected fees } }); // https://docs.ramses.exchange/ramses-cl-v2/concentrated-liquidity/fee-distribution diff --git a/fees/nuri-exchange-v2/index.ts b/fees/nuri-exchange-v2/index.ts index 4024923e8a..ace7747bcb 100644 --- a/fees/nuri-exchange-v2/index.ts +++ b/fees/nuri-exchange-v2/index.ts @@ -49,7 +49,7 @@ const v2Graphs = getGraphDimensions({ ProtocolRevenue: 8, SupplySideRevenue: 20, UserFees: 100, // User fees are 100% of collected fees - Revenue: 100 // Revenue is 100% of collected fees + Revenue: 80 // Revenue is 100% of collected fees } }); // https://docs.ramses.exchange/ramses-cl-v2/concentrated-liquidity/fee-distribution diff --git a/fees/pharaoh-exchange.ts b/fees/pharaoh-exchange.ts index 2956777b23..e8c81e0de9 100644 --- a/fees/pharaoh-exchange.ts +++ b/fees/pharaoh-exchange.ts @@ -36,7 +36,7 @@ const v2Graphs = getGraphDimensions({ type: "fees", HoldersRevenue: 72, UserFees: 100, // User fees are 100% of collected fees - Revenue: 100, // Revenue is 50% of collected fees + Revenue: 80, // Revenue is 50% of collected fees SupplySideRevenue: 20, ProtocolRevenue: 8, }, From 9b4792bf2b6c5e44fd378048697f33c4449d3477 Mon Sep 17 00:00:00 2001 From: samlior Date: Tue, 2 Jul 2024 09:39:11 +0800 Subject: [PATCH 0891/1590] support base network for synfutures v3 --- dexs/synfutures-v3/index.ts | 7 +++++++ fees/synfutures-v3/index.ts | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/dexs/synfutures-v3/index.ts b/dexs/synfutures-v3/index.ts index 7b85cbe806..ea0f711270 100644 --- a/dexs/synfutures-v3/index.ts +++ b/dexs/synfutures-v3/index.ts @@ -8,6 +8,9 @@ const info: { [key: string]: any } = { [CHAIN.BLAST]: { subgraph: "https://api.synfutures.com/thegraph/v3-blast", }, + [CHAIN.BASE]: { + subgraph: "https://api.synfutures.com/thegraph/v3-base", + } }; const fetch = (chain: Chain) => { @@ -58,6 +61,10 @@ const adapter: SimpleAdapter = { fetch: fetch(CHAIN.BLAST), start: 1709197491, }, + [CHAIN.BASE]: { + fetch: fetch(CHAIN.BASE), + start: 1719383967, + }, }, }; diff --git a/fees/synfutures-v3/index.ts b/fees/synfutures-v3/index.ts index 02954dc88f..5372d8f2b0 100644 --- a/fees/synfutures-v3/index.ts +++ b/fees/synfutures-v3/index.ts @@ -6,6 +6,7 @@ import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints = { [CHAIN.BLAST]: "https://api.synfutures.com/thegraph/v3-blast", + [CHAIN.BASE]: "https://api.synfutures.com/thegraph/v3-base", } // Fee = LiquidityFee + ProtocolFee @@ -87,6 +88,13 @@ const adapter: Adapter = { meta: { methodology } + }, + [CHAIN.BASE]: { + fetch: graphs(endpoints), + start: 1719383967, + meta: { + methodology + } } } } From ba9ccf3c6655f17c7290d6c826570874999cbbc2 Mon Sep 17 00:00:00 2001 From: samlior Date: Tue, 2 Jul 2024 10:41:45 +0800 Subject: [PATCH 0892/1590] fix decimals error for synfutures-v3 --- dexs/synfutures-v3/index.ts | 16 ++++++++++++++-- fees/synfutures-v3/index.ts | 33 ++++++++++++++++++++++----------- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/dexs/synfutures-v3/index.ts b/dexs/synfutures-v3/index.ts index ea0f711270..68189a6cc6 100644 --- a/dexs/synfutures-v3/index.ts +++ b/dexs/synfutures-v3/index.ts @@ -1,3 +1,4 @@ +import BigNumber from "bignumber.js"; import request from "graphql-request"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; @@ -13,6 +14,16 @@ const info: { [key: string]: any } = { } }; +function convertDecimals(value: string | number, decimals: number) { + if (decimals > 18) { + return new BigNumber(value).multipliedBy(10 ** (decimals - 18)).toString(); + } else if (decimals < 18) { + return new BigNumber(value).dividedToIntegerBy(10 ** (18 - decimals)).toString(); + } else { + return value; + } +} + const fetch = (chain: Chain) => { return async ( timestamp: number, @@ -27,6 +38,7 @@ const fetch = (chain: Chain) => { instrument { quote { id + decimals } } hourlyDataList(where: {timestamp_gte: ${from}, timestamp_lte: ${to - 1}}, orderBy: timestamp, orderDirection: desc) { @@ -40,11 +52,11 @@ const fetch = (chain: Chain) => { for (const { hourlyDataList, instrument: { - quote: { id }, + quote: { id, decimals }, }, } of data.amms) { for (const { volume } of hourlyDataList) { - dailyVolume.addToken(id, volume); + dailyVolume.addToken(id, convertDecimals(volume, decimals)); } } diff --git a/fees/synfutures-v3/index.ts b/fees/synfutures-v3/index.ts index 5372d8f2b0..8701742350 100644 --- a/fees/synfutures-v3/index.ts +++ b/fees/synfutures-v3/index.ts @@ -1,7 +1,7 @@ -import { Adapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; +import BigNumber from "bignumber.js"; import { request, gql } from "graphql-request"; -import type { ChainEndpoints, FetchV2 } from "../../adapters/types" +import type { ChainEndpoints, FetchV2, Adapter } from "../../adapters/types" +import { CHAIN } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints = { @@ -18,6 +18,16 @@ const methodology = { ProcotolFees: "fees received by the protocol from takers, these fees are paid by takers" } +function convertDecimals(value: string | number, decimals: number) { + if (decimals > 18) { + return new BigNumber(value).multipliedBy(10 ** (decimals - 18)).toString(); + } else if (decimals < 18) { + return new BigNumber(value).dividedToIntegerBy(10 ** (18 - decimals)).toString(); + } else { + return value; + } +} + const graphs = (graphUrls: ChainEndpoints) => { const fetch: FetchV2 = async ({ chain, startTimestamp, createBalances }) => { const todaysTimestamp = getTimestampAtStartOfDayUTC(startTimestamp) @@ -28,6 +38,7 @@ const graphs = (graphUrls: ChainEndpoints) => { quote{ id symbol + decimals } liquidityFee poolFee @@ -52,15 +63,15 @@ const graphs = (graphUrls: ChainEndpoints) => { const graphRes = await request(graphUrls[chain], graphQuery); for (const record of graphRes.dailyQuoteDatas) { - dailyFee.addToken(record.quote.id, Number(record.liquidityFee) + Number(record.protocolFee)) - dailyMakerRebates.addToken(record.quote.id, Number(record.liquidityFee) - Number(record.poolFee)) - dailyFeesToLP.addToken(record.quote.id, Number(record.poolFee)) - dailyProcotolFees.addToken(record.quote.id, Number(record.protocolFee)) + dailyFee.addToken(record.quote.id, convertDecimals(Number(record.liquidityFee) + Number(record.protocolFee), record.quote.decimals)) + dailyMakerRebates.addToken(record.quote.id, convertDecimals(Number(record.liquidityFee) - Number(record.poolFee), record.quote.decimals)) + dailyFeesToLP.addToken(record.quote.id, convertDecimals(Number(record.poolFee), record.quote.decimals)) + dailyProcotolFees.addToken(record.quote.id, convertDecimals(Number(record.protocolFee), record.quote.decimals)) - totalFee.addToken(record.quote.id, Number(record.totalLiquidityFee) + Number(record.totalProtocolFee)) - totalMakerRebates.addToken(record.quote.id, Number(record.totalLiquidityFee) - Number(record.totalPoolFee)) - totalFeesToLP.addToken(record.quote.id, Number(record.totalPoolFee)) - totalProcotolFees.addToken(record.quote.id, Number(record.totalProtocolFee)) + totalFee.addToken(record.quote.id, convertDecimals(Number(record.totalLiquidityFee) + Number(record.totalProtocolFee), record.quote.decimals)) + totalMakerRebates.addToken(record.quote.id, convertDecimals(Number(record.totalLiquidityFee) - Number(record.totalPoolFee), record.quote.decimals)) + totalFeesToLP.addToken(record.quote.id, convertDecimals(Number(record.totalPoolFee), record.quote.decimals)) + totalProcotolFees.addToken(record.quote.id, convertDecimals(Number(record.totalProtocolFee), record.quote.decimals)) } return { From df03cfb2b1c186032b0e072be7a1ce90ea1818c7 Mon Sep 17 00:00:00 2001 From: rohithkumar0369 Date: Tue, 2 Jul 2024 11:01:42 +0530 Subject: [PATCH 0893/1590] kana swap daily data added --- aggregators/kanalabs/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregators/kanalabs/index.ts b/aggregators/kanalabs/index.ts index 2d7acaab29..fc31fc0fe4 100644 --- a/aggregators/kanalabs/index.ts +++ b/aggregators/kanalabs/index.ts @@ -83,7 +83,7 @@ const adapter: SimpleAdapter = { const swap = await fetch(KanaChainID.aptos)(timestamp); const trade = await fetchDerivatives(KanaChainID.aptos)(timestamp); return { - dailyVolume: (+trade.dailyVolume).toString(), + dailyVolume: (+swap.dailyVolume + +trade.dailyVolume).toString(), totalVolume: (+swap.totalVolume + +trade.totalVolume).toString(), timestamp, }; From fd97a3bf84138b5ee30f19aef2fde4a54de149aa Mon Sep 17 00:00:00 2001 From: Krugo-D Date: Tue, 2 Jul 2024 12:56:42 +0700 Subject: [PATCH 0894/1590] add fees for v1 --- fees/lynex-v1.ts | 117 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 fees/lynex-v1.ts diff --git a/fees/lynex-v1.ts b/fees/lynex-v1.ts new file mode 100644 index 0000000000..2b4b650178 --- /dev/null +++ b/fees/lynex-v1.ts @@ -0,0 +1,117 @@ +import { Chain } from "@defillama/sdk/build/general"; +import BigNumber from "bignumber.js"; +import request, { gql } from "graphql-request"; +import { Adapter, FetchResultFees } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; +import { getTimestampAtStartOfDayUTC } from "../utils/date"; + +interface IPairDayData { + id: string; + dailyVolumeUSD: string; +} + +interface IPair { + id: string; + isStable: boolean; +} + +type IURL = { + [l: string | Chain]: string; +}; + +const STABLE_FEE = 0.0001; +const VOLATILE_FEE = 0.0025; + +const endpoints: IURL = { + [CHAIN.LINEA]: + "https://api.studio.thegraph.com/query/59052/lynex-v1/version/latest", +}; + +const fetch = (chain: Chain) => { + return async (timestamp: number): Promise => { + console.log("Starting fetch for timestamp:", timestamp); + const todayTimestamp = getUniqStartOfTodayTimestamp( + new Date(timestamp * 1000) + ); + const dateId = Math.floor( + getTimestampAtStartOfDayUTC(todayTimestamp) / 86400 + ).toString(); + + console.log("Calculated dateId:", dateId); + + const pairsQuery = gql` + query getPairs { + pairs(first: 500, orderBy: trackedReserveETH, orderDirection: desc) { + id + isStable + } + } + `; + + const pairDayDataQuery = gql` + query getPairDayData($id: String!) { + pairDayData(id: $id) { + dailyVolumeUSD + id + } + } + `; + + let pairsResult; + try { + pairsResult = await request(endpoints[chain], pairsQuery); + console.log("Pairs result:", pairsResult); + } catch (error) { + console.error("Error fetching pairs:", error); + return { timestamp }; + } + + const pairs: IPair[] = pairsResult.pairs; + let totalFeesUSD = new BigNumber(0); + + for (const pair of pairs) { + try { + const pairDayDataResult = await request( + endpoints[chain], + pairDayDataQuery, + { id: `${pair.id}-${dateId}` } + ); + const pairDayData: IPairDayData = pairDayDataResult.pairDayData; + + if (pairDayData) { + const volumeUSD = new BigNumber(pairDayData.dailyVolumeUSD); + const feeRate = pair.isStable ? STABLE_FEE : VOLATILE_FEE; + const dailyFeesUSD = volumeUSD.multipliedBy(feeRate); + + totalFeesUSD = totalFeesUSD.plus(dailyFeesUSD); + } else { + console.log(`No data for pair: ${pair.id} on date: ${dateId}`); + } + } catch (error) { + console.error(`Error fetching pairDayData for pair ${pair.id}:`, error); + } + } + + if (totalFeesUSD.isZero()) return { timestamp }; + + return { + timestamp, + dailyFees: totalFeesUSD.toString(), + dailyUserFees: totalFeesUSD.toString(), + dailyRevenue: totalFeesUSD.toString(), + dailyHoldersRevenue: totalFeesUSD.toString(), + }; + }; +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.LINEA]: { + fetch: fetch(CHAIN.LINEA), + start: 1691394680, + }, + }, +}; + +export default adapter; From 3fa15762fa18d2720337f06ff1de71c32a0ae709 Mon Sep 17 00:00:00 2001 From: vulntor <22735155+algtm@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:59:55 +0800 Subject: [PATCH 0895/1590] add xei --- dexs/xei/index.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 dexs/xei/index.ts diff --git a/dexs/xei/index.ts b/dexs/xei/index.ts new file mode 100644 index 0000000000..e1df4cf6c9 --- /dev/null +++ b/dexs/xei/index.ts @@ -0,0 +1,33 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { FetchResult, FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import customBackfill from "../../helpers/customBackfill"; +import { httpGet } from "../../utils/fetchURL"; + +const fetch: FetchV2 = async ({ chain,toTimestamp,endTimestamp,fromTimestamp }): Promise => { + let volumeRes=await httpGet("https://app.xei.finance/indexer/1329/xei/dexVolume?endAt="+toTimestamp.toString()) + // console.log(volumeRes) + return { + dailyVolume:parseInt(volumeRes.data), + + }; +}; +const contract = { + [CHAIN.SEI]: '0x0596a0469D5452F876523487251BDdE73D4B2597', + +} +const adapter: SimpleAdapter = { + adapter: Object.keys(contract).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch, + start: 1716890175, + runAtCurrTime:false, + // customBackfill:customBackfill(contract, chain) + }, + } + }, {}), + version: 2, +}; +export default adapter; \ No newline at end of file From 07f9d20fcf04e6c761230b6b459211e7e4efce59 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 2 Jul 2024 13:43:38 +0000 Subject: [PATCH 0896/1590] fix jojo --- dexs/jojo/index.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/dexs/jojo/index.ts b/dexs/jojo/index.ts index 0984fa8c60..11213a1cdd 100644 --- a/dexs/jojo/index.ts +++ b/dexs/jojo/index.ts @@ -1,5 +1,5 @@ import fetchURL from "../../utils/fetchURL" -import { SimpleAdapter, Fetch } from "../../adapters/types"; +import { SimpleAdapter, Fetch, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const historicalVolumeEndpointZk = (symbol: string, chain: string) => `https://api.` + chain + `-mainnet.jojo.exchange/v1/platform/tradeVolume?marketId=${symbol}` @@ -33,12 +33,12 @@ interface IVolumeall { timestamp: number; } -const getVolume = async (timestamp: number, chain: string) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) +const getVolume = async (options: FetchOptions) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) - const historical = (await Promise.all(Object.keys(coins).map((coins: string) => fetchURL(historicalVolumeEndpointZk(coins, chain))))); + const historical = (await Promise.all(Object.keys(coins).map((coins: string) => fetchURL(historicalVolumeEndpointZk(coins, options.chain))))); - const historicalVolume = historical.map((item => item.dailyVolume)) + const historicalVolume = historical.map((item => item?.dailyVolume || [])) const historicalUSD = historicalVolume.map((a: any, index: number) => a.map((e: any) => { return { timestamp: e.t / 1000, volume: e.v, id: Object.values(coins)[index] } })).flat() const historicalUSD2 = historicalUSD.map((e: IVolumeall) => { return { @@ -48,7 +48,6 @@ const getVolume = async (timestamp: number, chain: string) => { }); const dailyVolume = historicalUSD2.filter((e: IVolumeall) => e.timestamp === dayTimestamp) .reduce((a: number, { volumeUSD }) => a + volumeUSD, 0); - console.log(dailyVolume) const totalVolume = historical.map(item => item.totalVolume).reduce((accumulator, currentValue) => accumulator + parseFloat(currentValue), 0); return { @@ -58,14 +57,11 @@ const getVolume = async (timestamp: number, chain: string) => { }; }; -const getFetch = (chain: string): Fetch => async (timestamp: number) => { - return getVolume(timestamp, chain); -} - const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BASE]: { - fetch: getFetch("base"), + fetch: getVolume, start: 1711965100, }, }, From 29ba94ebaaa9741956d2a62cebce14797cf85298 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 2 Jul 2024 16:00:12 +0000 Subject: [PATCH 0897/1590] fix chain jojo --- fees/jojo/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/jojo/index.ts b/fees/jojo/index.ts index 6f1d1d7cdf..d4bab51226 100644 --- a/fees/jojo/index.ts +++ b/fees/jojo/index.ts @@ -1,4 +1,5 @@ import { FetchOptions, SimpleAdapter, FetchV2, FetchResultV2 } from '../../adapters/types' +import { CHAIN } from '../../helpers/chains' import { httpGet } from '../../utils/fetchURL' interface IFees { @@ -21,7 +22,7 @@ const getFetch: FetchV2 = async (options: FetchOptions): Promise const adapter: SimpleAdapter = { version: 2, adapter: { - "jojo": { + [CHAIN.BASE]: { fetch: getFetch, start: 1712678400, } From a13a9ba844cb839089b95176ea40f9bd05e3c374 Mon Sep 17 00:00:00 2001 From: jiangmaniu Date: Wed, 3 Jul 2024 12:18:49 +0800 Subject: [PATCH 0898/1590] chore: update fetch url --- dexs/myx-finance/index.ts | 43 +++++++++++++-------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/dexs/myx-finance/index.ts b/dexs/myx-finance/index.ts index 1add297a52..e5149c5f39 100644 --- a/dexs/myx-finance/index.ts +++ b/dexs/myx-finance/index.ts @@ -1,13 +1,11 @@ -import request, { gql } from "graphql-request"; import { ChainEndpoints, Fetch, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import fetchURL from "../../utils/fetchURL"; - -// Subgraphs endpoints const endpoints: ChainEndpoints = { - [CHAIN.ARBITRUM]: "https://subgraph-arb.myx.finance/subgraphs/name/myx-subgraph", - [CHAIN.LINEA]: "https://subgraph-linea.myx.finance/subgraphs/name/myx-subgraph", + [CHAIN.ARBITRUM]: "https://api-arb.myx.finance/coingecko/contracts", + [CHAIN.LINEA]: "https://api-linea.myx.finance/coingecko/contracts", } const methodology = { @@ -15,37 +13,24 @@ const methodology = { DailyVolume: "Daily Volume from the sum of the open/close/liquidation of positions.", } -interface IGraphResponse { - tradeVolume: { - volume: string, - id: 'string' - } -} - const getFetch = async (optios: FetchOptions) => { + const result = await fetchURL(endpoints[optios.chain]) + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((optios.endTimestamp * 1000))) - const dailyData: IGraphResponse = await request(endpoints[optios.chain], gql` - query MyQuery { - tradeVolume(id: "${dayTimestamp}") { - volume - id - } - } - `) - const totalData: IGraphResponse = await request(endpoints[optios.chain], gql` - query MyQuery { - tradeVolume(id: "global") { - volume - id - } - }` - ) + const volume = result.data.reduce((acc, item) => { + return acc + (item?.target_volume || 0) + }, 0) + + console.log({ + timestamp: dayTimestamp, + dailyVolume: volume || "0", + }) return { timestamp: dayTimestamp, - dailyVolume: dailyData.tradeVolume?.volume || "0", + dailyVolume: volume || "0", } } From f2bdfbd74790e695d30ab4393c4bb945e1269d13 Mon Sep 17 00:00:00 2001 From: 0xR <0xr@metavault.org> Date: Wed, 3 Jul 2024 10:43:06 +0300 Subject: [PATCH 0899/1590] Add LineHub Perps dexs and fees adapter. --- dexs/linehub-perps/index.ts | 68 ++++++++++++++++++++++++++++++++++ fees/linehub-perps/index.ts | 73 +++++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 dexs/linehub-perps/index.ts create mode 100644 fees/linehub-perps/index.ts diff --git a/dexs/linehub-perps/index.ts b/dexs/linehub-perps/index.ts new file mode 100644 index 0000000000..391f70ce85 --- /dev/null +++ b/dexs/linehub-perps/index.ts @@ -0,0 +1,68 @@ +import request, { gql } from "graphql-request"; +import { Adapter, ChainEndpoints, FetchV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; + +const endpoints = { + [CHAIN.LINEA]: + "https://api.studio.thegraph.com/query/55804/linehub-trade/version/latest", +}; + +interface IVolumeStat { + cumulativeVolumeUsd: string; + volumeUsd: string; + id: string; +} + +const graphs = (graphUrls: ChainEndpoints) => { + const fetch: FetchV2 = async ({ chain, startTimestamp }) => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(startTimestamp); + + const graphQuery = gql` + query MyQuery { + volumeStats(where: {timestamp: ${todaysTimestamp}, period: "daily"}) { + cumulativeVolumeUsd + volumeUsd + id + } + } + `; + + const graphRes = await request(graphUrls[chain], graphQuery); + const volumeStats: IVolumeStat[] = graphRes.volumeStats; + + let dailyVolumeUSD = BigInt(0); + + volumeStats.forEach((vol) => { + dailyVolumeUSD += BigInt(vol.volumeUsd); + }); + + const finalDailyVolume = parseInt(dailyVolumeUSD.toString()) / 1e18; + + return { + dailyVolume: finalDailyVolume.toString(), + timestamp: todaysTimestamp, + }; + }; + return fetch; +}; + +const methodology = { + dailyVolume: + "Total cumulativeVolumeUsd for specified chain for the given day", +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.LINEA]: { + fetch: graphs(endpoints), + start: 1719878400, + meta: { + methodology, + }, + }, + }, +}; + +export default adapter; diff --git a/fees/linehub-perps/index.ts b/fees/linehub-perps/index.ts new file mode 100644 index 0000000000..67c025d949 --- /dev/null +++ b/fees/linehub-perps/index.ts @@ -0,0 +1,73 @@ +import { gql, request } from "graphql-request"; +import type { ChainEndpoints, FetchV2 } from "../../adapters/types"; +import { Adapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; + +const endpoints = { + [CHAIN.LINEA]: + "https://api.studio.thegraph.com/query/55804/linehub-trade/version/latest", +}; + +interface IFeeStat { + cumulativeFeeUsd: string; + feeUsd: string; + id: string; +} + +const graphs = (graphUrls: ChainEndpoints) => { + const fetch: FetchV2 = async ({ chain, startTimestamp }) => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(startTimestamp); + + const graphQuery = gql` + query MyQuery { + feeStats(where: {timestamp: ${todaysTimestamp}, period: daily}) { + cumulativeFeeUsd + feeUsd + id + } + } + `; + + const graphRes = await request(graphUrls[chain], graphQuery); + const feeStats: IFeeStat[] = graphRes.feeStats; + + let dailyFeeUSD = BigInt(0); + let totalFeeUSD = BigInt(0); + + feeStats.forEach((fee) => { + dailyFeeUSD += BigInt(fee.feeUsd); + totalFeeUSD += BigInt(fee.cumulativeFeeUsd); + }); + + const finalDailyFee = parseInt(dailyFeeUSD.toString()) / 1e18; + const finalTotalFee = parseInt(totalFeeUSD.toString()) / 1e18; + + return { + timestamp: todaysTimestamp, + dailyFees: finalDailyFee.toString(), + totalFees: finalTotalFee.toString(), + }; + }; + return fetch; +}; + +const methodology = { + dailyFees: "Total cumulativeFeeUsd for specified chain for the given day", +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.LINEA]: { + fetch: graphs(endpoints), + start: 1719878400, + meta: { + methodology, + }, + }, + }, +}; + +export default adapter; From 3181eabab249860b911d0a40c93266283740acac Mon Sep 17 00:00:00 2001 From: Maksim Date: Wed, 3 Jul 2024 16:27:46 +0200 Subject: [PATCH 0900/1590] remove deprecated vaults, add amphrLRT --- fees/amphor/index.ts | 132 +++++++--------------------------------- helpers/coreAssets.json | 3 +- 2 files changed, 25 insertions(+), 110 deletions(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index dc4d5dd4f5..159962e62f 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -8,9 +8,7 @@ import ADDRESSES from '../../helpers/coreAssets.json' import { getBlock } from "../../helpers/getBlock"; const AmphorILHedgedWETH_contractAddress: string = '0xcDC51F2B0e5F0906f2fd5f557de49D99c34Df54e'; -const AmphorPTezETHVault_contractAddress: string = '0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1'; -const AmphorPTrsETHVault_contractAddress: string = '0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E'; -const AmphorPTweETHVault_contractAddress: string = '0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966'; +const AmphorLRTwstETHVault_contractAddress: string = '0x06824C27C8a0DbDe5F72f770eC82e3c0FD4DcEc3'; const contractAbi: ethers.InterfaceAbi = [ { @@ -53,9 +51,7 @@ const contractAbi: ethers.InterfaceAbi = [ ] const AmphorILHedgedWETH_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedWETH_contractAddress, contractAbi); -const AmphorPTezETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTezETHVault_contractAddress, contractAbi); -const AmphorPTrsETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTrsETHVault_contractAddress, contractAbi); -const AmphorPTweETHVault_contract: ethers.Contract = new ethers.Contract(AmphorPTweETHVault_contractAddress, contractAbi); +const AmphorLRTwstETHVault_contract: ethers.Contract = new ethers.Contract(AmphorLRTwstETHVault_contractAddress, contractAbi); const methodology = { UserFees: "Include performance fees.", @@ -64,39 +60,20 @@ const methodology = { Revenue: "Sum of protocol revenue.", } -interface ILog { - address: string; - data: string; - transactionHash: string; - topics: string[]; -} - const data = async (timestamp: number): Promise => { const toTimestamp = timestamp; const fromTimestamp = timestamp - 60 * 60 * 24; const toBlock = await getBlock(toTimestamp, CHAIN.ETHEREUM, {}); - const eventFilterWETH: EventFilter = { address: AmphorILHedgedWETH_contractAddress, topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; - - const eventFilterPTezETH: EventFilter = { - address: AmphorPTezETHVault_contractAddress, - topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] - }; - const eventFilterPTrsETH: EventFilter = { - address: AmphorPTrsETHVault_contractAddress, - topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] - }; - const eventFilterPTweETH: EventFilter = { - address: AmphorPTweETHVault_contractAddress, + const eventFilterLRTwstETH: EventFilter = { + address: AmphorLRTwstETHVault_contractAddress, topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] }; - - const eventsWETH = (await sdk.getEventLogs({ target: AmphorILHedgedWETH_contractAddress, topics: eventFilterWETH.topics as string[], @@ -105,29 +82,9 @@ const data = async (timestamp: number): Promise => { chain: CHAIN.ETHEREUM, })) as ethers.Log[]; - - - - - const eventsPTezETH = (await sdk.getEventLogs({ - target: AmphorPTezETHVault_contractAddress, - topics: eventFilterPTezETH.topics as string[], - fromBlock: 18535914, - toBlock: toBlock, - chain: CHAIN.ETHEREUM, - })) as ethers.Log[]; - - const eventsPTrsETH = (await sdk.getEventLogs({ - target: AmphorPTrsETHVault_contractAddress, - topics: eventFilterPTrsETH.topics as string[], - fromBlock: 18535914, - toBlock: toBlock, - chain: CHAIN.ETHEREUM, - })) as ethers.Log[]; - - const eventsPTweETH = (await sdk.getEventLogs({ - target: AmphorPTweETHVault_contractAddress, - topics: eventFilterPTweETH.topics as string[], + const eventsLRTwstETH = (await sdk.getEventLogs({ + target: AmphorLRTwstETHVault_contractAddress, + topics: eventFilterLRTwstETH.topics as string[], fromBlock: 18535914, toBlock: toBlock, chain: CHAIN.ETHEREUM, @@ -135,23 +92,13 @@ const data = async (timestamp: number): Promise => { let totalRevenueWETH = BigInt(0); let totalFeesWSTETH = BigInt(0); - let totalRevenuePTezETH = BigInt(0); - let totalFeesPTezETH = BigInt(0); - let totalRevenuePTrsETH = BigInt(0); - let totalFeesPTrsETH = BigInt(0); - let totalRevenuePTweETH = BigInt(0); - let totalFeesPTweETH = BigInt(0); + let totalRevenueLRTwstETH = BigInt(0); + let totalFeesLRTwstETH = BigInt(0); let dailyFeesWETH = BigInt(0); - let dailyFeesPTezETH = BigInt(0); - let dailyFeesPTrsETH = BigInt(0); - let dailyFeesPTweETH = BigInt(0); let dailyRevenueWSTETH = BigInt(0); - let dailyRevenuePTezETH = BigInt(0); - let dailyRevenuePTrsETH = BigInt(0); - let dailyRevenuePTweETH = BigInt(0); - - + let dailyFeeslRTwstETH = BigInt(0); + let dailyRevenueLRTwstETH = BigInt(0); eventsWETH.forEach(res => { const event = AmphorILHedgedWETH_contract.interface.parseLog(res as any); @@ -163,69 +110,36 @@ const data = async (timestamp: number): Promise => { } }); - - - eventsPTezETH.forEach(res => { - const event = AmphorPTezETHVault_contract.interface.parseLog(res as any); - totalRevenuePTezETH += BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); - totalFeesPTezETH += BigInt(event!.args!.fees); - if (event!.args!.timestamp > fromTimestamp && event!.args!.timestamp < toTimestamp) { - dailyFeesPTezETH += BigInt(event!.args!.fees); - dailyRevenuePTezETH = BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); - } - }); - - eventsPTrsETH.forEach(res => { - const event = AmphorPTrsETHVault_contract.interface.parseLog(res as any); - totalRevenuePTrsETH += BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); - totalFeesPTrsETH += BigInt(event!.args!.fees); - if (event!.args!.timestamp > fromTimestamp && event!.args!.timestamp < toTimestamp) { - dailyFeesPTrsETH += BigInt(event!.args!.fees); - dailyRevenuePTrsETH = BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); - } - }); - - eventsPTweETH.forEach(res => { - const event = AmphorPTweETHVault_contract.interface.parseLog(res as any); - totalRevenuePTweETH += BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); - totalFeesPTweETH += BigInt(event!.args!.fees); - if (event!.args!.timestamp > fromTimestamp && event!.args!.timestamp < toTimestamp) { - dailyFeesPTweETH += BigInt(event!.args!.fees); - dailyRevenuePTweETH = BigInt(event!.args!.returnedAssets) - BigInt(event!.args!.lastSavedBalance); + eventsLRTwstETH.forEach(res => { + const event = AmphorLRTwstETHVault_contract.interface.parseLog(res as any); + totalRevenueLRTwstETH += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); + totalFeesLRTwstETH += BigInt(event!.args.fees); + if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { + dailyFeeslRTwstETH += BigInt(event!.args.fees); + dailyRevenueLRTwstETH = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); } }); const TOKENS = { WETH: ADDRESSES.ethereum.WETH, - PTezETH: "0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1", - PTrsETH: "0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E", - PTweETH: "0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966", } + const totalFees = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); const totalRevenue = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); const dailyFees = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); const dailyRevenue = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); totalFees.add(TOKENS.WETH, totalFeesWSTETH.toString()); - totalFees.add(TOKENS.PTezETH, totalFeesPTezETH.toString()); - totalFees.add(TOKENS.PTrsETH, totalFeesPTrsETH.toString()); - totalFees.add(TOKENS.PTweETH, totalFeesPTweETH.toString()); + totalFees.add(TOKENS.WETH, totalFeesLRTwstETH.toString()); totalRevenue.add(TOKENS.WETH, totalRevenueWETH.toString()); - totalRevenue.add(TOKENS.PTezETH, totalRevenuePTezETH.toString()); - totalRevenue.add(TOKENS.PTrsETH, totalRevenuePTrsETH.toString()); - totalRevenue.add(TOKENS.PTweETH, totalRevenuePTweETH.toString()); + totalRevenue.add(TOKENS.WETH, totalRevenueLRTwstETH.toString()); dailyFees.add(TOKENS.WETH, dailyFeesWETH.toString()); - dailyFees.add(TOKENS.PTezETH, dailyFeesPTezETH.toString()); - dailyFees.add(TOKENS.PTrsETH, dailyFeesPTrsETH.toString()); - dailyFees.add(TOKENS.PTweETH, dailyFeesPTweETH.toString()); + dailyFees.add(TOKENS.WETH, dailyFeeslRTwstETH.toString()); dailyRevenue.add(TOKENS.WETH, dailyRevenueWSTETH.toString()); - dailyRevenue.add(TOKENS.PTezETH, dailyRevenuePTezETH.toString()); - dailyRevenue.add(TOKENS.PTrsETH, dailyRevenuePTrsETH.toString()); - dailyRevenue.add(TOKENS.PTweETH, dailyRevenuePTweETH.toString()); - + dailyRevenue.add(TOKENS.WETH, dailyRevenueLRTwstETH.toString()); const totalFeesNumber = Number(await totalFees.getUSDValue()).toFixed(0); const dailyRevenueNumber = Number(await dailyRevenue.getUSDValue()).toFixed(0); diff --git a/helpers/coreAssets.json b/helpers/coreAssets.json index 7e2aea66b5..51fa133923 100644 --- a/helpers/coreAssets.json +++ b/helpers/coreAssets.json @@ -45,7 +45,8 @@ "cbETH": "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704", "FDUSD": "0xc5f0f7b66764f6ec8c8dff7ba683102295e16409", "EETH": "0x35fa164735182de50811e8e2e824cfb9b6118ac2", - "WETH": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" + "amprETH": "0xcDC51F2B0e5F0906f2fd5f557de49D99c34Df54e", + "amphrLRT": "0x06824C27C8a0DbDe5F72f770eC82e3c0FD4DcEc3" }, "fantom": { "WFTM": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", From f7ccc706ea74b001d290477281d89ea80f56cfc3 Mon Sep 17 00:00:00 2001 From: bergben Date: Wed, 3 Jul 2024 17:03:17 +0200 Subject: [PATCH 0901/1590] 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 0902/1590] 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 ffa245b1a9ac02ed98f688ce790212ab5dcdd145 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 16:40:44 +0000 Subject: [PATCH 0903/1590] fix adapter --- aggregators/flowx-aggregator/index.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/aggregators/flowx-aggregator/index.ts b/aggregators/flowx-aggregator/index.ts index 2c24a9c8c6..ac069c4fb0 100644 --- a/aggregators/flowx-aggregator/index.ts +++ b/aggregators/flowx-aggregator/index.ts @@ -1,23 +1,19 @@ import { CHAIN } from "../../helpers/chains"; -import { httpGet, httpPost } from "../../utils/fetchURL"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; - -const fetchVolume = async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - - const res = await httpGet( - `https://flowx-finance-mono.vercel.app/api/defillama/aggregator-vol?startTimestamp=${dayTimestamp}&endTimestamp=${dayTimestamp}` - ); +import { httpGet } from "../../utils/fetchURL"; +import { FetchOptions } from "../../adapters/types"; +import { version } from "os"; +const fetchVolume = async (options: FetchOptions) => { + const url = `https://flowx-finance-mono.vercel.app/api/defillama/aggregator-vol?startTimestamp=${options.startOfDay}&endTimestamp=${options.startOfDay}`; + const res = await httpGet(url); const record = res[0]; - return { dailyVolume: record.totalUSD, - timestamp: record.timestamp, }; }; const adapter: any = { + version: 2, adapter: { [CHAIN.SUI]: { fetch: fetchVolume, From 78849213861eb1b21ab419786dc2c2f3937c9ab0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:00:48 +0000 Subject: [PATCH 0904/1590] fix ci --- aggregators/flowx-aggregator/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/aggregators/flowx-aggregator/index.ts b/aggregators/flowx-aggregator/index.ts index ac069c4fb0..39186931da 100644 --- a/aggregators/flowx-aggregator/index.ts +++ b/aggregators/flowx-aggregator/index.ts @@ -10,6 +10,7 @@ const fetchVolume = async (options: FetchOptions) => { return { dailyVolume: record.totalUSD, }; + }; const adapter: any = { From a215612fb7b3f217c3521b3098734498dc809f95 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:06:22 +0000 Subject: [PATCH 0905/1590] trigfer --- .github/workflows/test-adapter.yml | 13 +++++++------ aggregators/flowx-aggregator/index.ts | 1 - 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test-adapter.yml b/.github/workflows/test-adapter.yml index 1ac11908f6..6a1d45c0c5 100644 --- a/.github/workflows/test-adapter.yml +++ b/.github/workflows/test-adapter.yml @@ -15,13 +15,13 @@ jobs: run: | # Store the current commit hash in a variable current_commit=$(git rev-parse HEAD) - + # Checkout to master to check if new adapters files are of v2 git fetch origin master:master - + # Checkout back to the original commit git checkout $current_commit - + RUN_FILES=$( MODIFIED=${{ steps.file_changes.outputs.files_modified}} \ ADDED=${{ steps.file_changes.outputs.files_added}} \ @@ -38,15 +38,16 @@ jobs: list=$(echo $RUN_FILES | tr -d '"[]' | tr "," "\n") for i in ${list} - do - { + do + { IFS='@' read -r -a array <<< "$i" npm run test ${array[0]} ${array[1]} 2>&1 | tee output.txt + cat output.txt node ${{ github.workspace }}/.github/workflows/commentResult.js /home/runner/work/dimension-adapters/dimension-adapters/output.txt "${{ github.repository_owner }}" "${{ github.event.repository.name }}" "${{ github.event.number }}" ${i} if grep -q "\-\-\-\- ERROR \-\-\-\-" output.txt; then exit 1; fi - } || { + } || { echo -n $i echo ' doesnt run' } diff --git a/aggregators/flowx-aggregator/index.ts b/aggregators/flowx-aggregator/index.ts index 39186931da..ac069c4fb0 100644 --- a/aggregators/flowx-aggregator/index.ts +++ b/aggregators/flowx-aggregator/index.ts @@ -10,7 +10,6 @@ const fetchVolume = async (options: FetchOptions) => { return { dailyVolume: record.totalUSD, }; - }; const adapter: any = { From a112a5eaf457700e79a8c6bc8861363a333d646d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:07:36 +0000 Subject: [PATCH 0906/1590] trigger --- aggregators/flowx-aggregator/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/aggregators/flowx-aggregator/index.ts b/aggregators/flowx-aggregator/index.ts index ac069c4fb0..39186931da 100644 --- a/aggregators/flowx-aggregator/index.ts +++ b/aggregators/flowx-aggregator/index.ts @@ -10,6 +10,7 @@ const fetchVolume = async (options: FetchOptions) => { return { dailyVolume: record.totalUSD, }; + }; const adapter: any = { From 19796534febb4b49bba29bf5bad3bc4a8a34ae7e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:10:03 +0000 Subject: [PATCH 0907/1590] fix comment --- .github/workflows/commentResult.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/commentResult.js b/.github/workflows/commentResult.js index 140cce99e3..dc334e034a 100644 --- a/.github/workflows/commentResult.js +++ b/.github/workflows/commentResult.js @@ -15,13 +15,18 @@ async function main() { let body; if (summaryIndex != -1) { - body = `The ${adapterName} adapter exports: + body = `The ${adapterName} adapter exports: \n \n ${file.substring(summaryIndex).replaceAll('\n', '\n ')}`; + console.info(`Posting comment:\n${body}`) } else if (errorIndex != -1) { - body = `Error while running adapter ${adapterName} adapter: + body = `Error while running adapter ${adapterName} adapter: \n \n ${file.split(errorString)[1].replaceAll('\n', '\n ')}`; - } else + console.info(`Posting comment:\n${body}`) + } else { + console.info(`No error or summary found in log file`); return; + } + console.info(`Posting comment:\n${body}`) @@ -37,4 +42,4 @@ async function main() { function translate(input) { return input ? translate(input.substring(1)) + input[0] : input; }; -main(); \ No newline at end of file +main(); From ef37c30fd6e394ba0d52858e7a6a8fc1e8185005 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:10:24 +0000 Subject: [PATCH 0908/1590] triger --- aggregators/flowx-aggregator/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/aggregators/flowx-aggregator/index.ts b/aggregators/flowx-aggregator/index.ts index 39186931da..ac069c4fb0 100644 --- a/aggregators/flowx-aggregator/index.ts +++ b/aggregators/flowx-aggregator/index.ts @@ -10,7 +10,6 @@ const fetchVolume = async (options: FetchOptions) => { return { dailyVolume: record.totalUSD, }; - }; const adapter: any = { From 1bd2135d9a8987db58513c914f77c8e1e8b86b59 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:12:54 +0000 Subject: [PATCH 0909/1590] triger --- aggregators/flowx-aggregator/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/aggregators/flowx-aggregator/index.ts b/aggregators/flowx-aggregator/index.ts index ac069c4fb0..39186931da 100644 --- a/aggregators/flowx-aggregator/index.ts +++ b/aggregators/flowx-aggregator/index.ts @@ -10,6 +10,7 @@ const fetchVolume = async (options: FetchOptions) => { return { dailyVolume: record.totalUSD, }; + }; const adapter: any = { From 0268551d7e07def6549c7de0a2362eca2ba9352e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:15:44 +0000 Subject: [PATCH 0910/1590] fix ci --- .github/workflows/commentResult.js | 2 +- .github/workflows/test-adapter.yml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/commentResult.js b/.github/workflows/commentResult.js index dc334e034a..e47740c188 100644 --- a/.github/workflows/commentResult.js +++ b/.github/workflows/commentResult.js @@ -10,7 +10,7 @@ async function main() { const errorString = '------ ERROR ------'; - const summaryIndex = file.indexOf('_______________________________________'); + const summaryIndex = file.indexOf('---------------------------------------------------'); const errorIndex = file.indexOf(errorString); let body; diff --git a/.github/workflows/test-adapter.yml b/.github/workflows/test-adapter.yml index 6a1d45c0c5..6674b61042 100644 --- a/.github/workflows/test-adapter.yml +++ b/.github/workflows/test-adapter.yml @@ -42,7 +42,6 @@ jobs: { IFS='@' read -r -a array <<< "$i" npm run test ${array[0]} ${array[1]} 2>&1 | tee output.txt - cat output.txt node ${{ github.workspace }}/.github/workflows/commentResult.js /home/runner/work/dimension-adapters/dimension-adapters/output.txt "${{ github.repository_owner }}" "${{ github.event.repository.name }}" "${{ github.event.number }}" ${i} if grep -q "\-\-\-\- ERROR \-\-\-\-" output.txt; then exit 1; From 6936a8cdf0239a0cfe1b62190b4d2f21f58cbe3f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:18:44 +0000 Subject: [PATCH 0911/1590] fix ci --- .github/workflows/commentResult.js | 2 +- aggregators/flowx-aggregator/index.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/commentResult.js b/.github/workflows/commentResult.js index e47740c188..67f57fe39f 100644 --- a/.github/workflows/commentResult.js +++ b/.github/workflows/commentResult.js @@ -16,7 +16,7 @@ async function main() { if (summaryIndex != -1) { body = `The ${adapterName} adapter exports: - \n \n ${file.substring(summaryIndex).replaceAll('\n', '\n ')}`; + \n${file}`; console.info(`Posting comment:\n${body}`) } else if (errorIndex != -1) { body = `Error while running adapter ${adapterName} adapter: diff --git a/aggregators/flowx-aggregator/index.ts b/aggregators/flowx-aggregator/index.ts index 39186931da..1238f01036 100644 --- a/aggregators/flowx-aggregator/index.ts +++ b/aggregators/flowx-aggregator/index.ts @@ -11,6 +11,8 @@ const fetchVolume = async (options: FetchOptions) => { dailyVolume: record.totalUSD, }; + + }; const adapter: any = { From 9a6ccb0743de78df999a642d589965d5661a93f5 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:22:24 +0000 Subject: [PATCH 0912/1590] fix ci --- .github/workflows/commentResult.js | 2 +- aggregators/flowx-aggregator/index.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/commentResult.js b/.github/workflows/commentResult.js index 67f57fe39f..b5486bcbd2 100644 --- a/.github/workflows/commentResult.js +++ b/.github/workflows/commentResult.js @@ -16,7 +16,7 @@ async function main() { if (summaryIndex != -1) { body = `The ${adapterName} adapter exports: - \n${file}`; + \n \n ${file.replaceAll('\n', '\n ')}`; console.info(`Posting comment:\n${body}`) } else if (errorIndex != -1) { body = `Error while running adapter ${adapterName} adapter: diff --git a/aggregators/flowx-aggregator/index.ts b/aggregators/flowx-aggregator/index.ts index 1238f01036..34e09ba247 100644 --- a/aggregators/flowx-aggregator/index.ts +++ b/aggregators/flowx-aggregator/index.ts @@ -9,8 +9,7 @@ const fetchVolume = async (options: FetchOptions) => { const record = res[0]; return { dailyVolume: record.totalUSD, - }; - + } }; From 6073bca928b8a8b2ea2b7f111aca691cb117dd96 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:24:34 +0000 Subject: [PATCH 0913/1590] fix ci --- .github/workflows/commentResult.js | 2 +- aggregators/flowx-aggregator/index.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/commentResult.js b/.github/workflows/commentResult.js index b5486bcbd2..d4e06483e8 100644 --- a/.github/workflows/commentResult.js +++ b/.github/workflows/commentResult.js @@ -16,7 +16,7 @@ async function main() { if (summaryIndex != -1) { body = `The ${adapterName} adapter exports: - \n \n ${file.replaceAll('\n', '\n ')}`; + \n \n ${file.replaceAll('\n', '')}`; console.info(`Posting comment:\n${body}`) } else if (errorIndex != -1) { body = `Error while running adapter ${adapterName} adapter: diff --git a/aggregators/flowx-aggregator/index.ts b/aggregators/flowx-aggregator/index.ts index 34e09ba247..746e8aa2ec 100644 --- a/aggregators/flowx-aggregator/index.ts +++ b/aggregators/flowx-aggregator/index.ts @@ -12,6 +12,9 @@ const fetchVolume = async (options: FetchOptions) => { } + + + }; const adapter: any = { From 80009e5a32eee61fe21da713552dfab153759630 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:25:52 +0000 Subject: [PATCH 0914/1590] fix ci --- .github/workflows/commentResult.js | 2 +- aggregators/flowx-aggregator/index.ts | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/commentResult.js b/.github/workflows/commentResult.js index d4e06483e8..b5486bcbd2 100644 --- a/.github/workflows/commentResult.js +++ b/.github/workflows/commentResult.js @@ -16,7 +16,7 @@ async function main() { if (summaryIndex != -1) { body = `The ${adapterName} adapter exports: - \n \n ${file.replaceAll('\n', '')}`; + \n \n ${file.replaceAll('\n', '\n ')}`; console.info(`Posting comment:\n${body}`) } else if (errorIndex != -1) { body = `Error while running adapter ${adapterName} adapter: diff --git a/aggregators/flowx-aggregator/index.ts b/aggregators/flowx-aggregator/index.ts index 746e8aa2ec..b89ff05c89 100644 --- a/aggregators/flowx-aggregator/index.ts +++ b/aggregators/flowx-aggregator/index.ts @@ -13,8 +13,6 @@ const fetchVolume = async (options: FetchOptions) => { - - }; const adapter: any = { From 882caba646adb2add2ca8ac014bdc3ba32b60634 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:27:54 +0000 Subject: [PATCH 0915/1590] fix ci --- .github/workflows/commentResult.js | 2 +- aggregators/avnu/index.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/commentResult.js b/.github/workflows/commentResult.js index b5486bcbd2..8afad4f98a 100644 --- a/.github/workflows/commentResult.js +++ b/.github/workflows/commentResult.js @@ -9,7 +9,7 @@ async function main() { const [_, adapterName] = adapterNameKey.split('@') - const errorString = '------ ERROR ------'; + const errorString = 'ERROR'; const summaryIndex = file.indexOf('---------------------------------------------------'); const errorIndex = file.indexOf(errorString); let body; diff --git a/aggregators/avnu/index.ts b/aggregators/avnu/index.ts index 9577584512..540bc2a0a6 100644 --- a/aggregators/avnu/index.ts +++ b/aggregators/avnu/index.ts @@ -20,6 +20,8 @@ const fetch = async (timestamp: number): Promise => { totalVolume, timestamp: dayTimestamp, }; + + } const adapter: SimpleAdapter = { From 519fdc6546d1c743d48aed1217780e1a284fc8ea Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:35:39 +0000 Subject: [PATCH 0916/1590] fix adapter --- fees/lynex-v1.ts | 107 +++++++++++++++++++---------------------------- 1 file changed, 42 insertions(+), 65 deletions(-) diff --git a/fees/lynex-v1.ts b/fees/lynex-v1.ts index 2b4b650178..f5515e117d 100644 --- a/fees/lynex-v1.ts +++ b/fees/lynex-v1.ts @@ -1,7 +1,7 @@ import { Chain } from "@defillama/sdk/build/general"; import BigNumber from "bignumber.js"; import request, { gql } from "graphql-request"; -import { Adapter, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions, FetchResultFees, FetchResultV2 } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; @@ -19,96 +19,73 @@ interface IPair { type IURL = { [l: string | Chain]: string; }; +interface IPair { + id: string; + volumeUSD: string; + isStable: boolean; +} -const STABLE_FEE = 0.0001; -const VOLATILE_FEE = 0.0025; +interface IGraphResponse { + today: IPair[]; + yesterday: IPair[]; +} +const STABLE_FEES = 0.0001; +const VOLATILE_FEES = 0.0025; const endpoints: IURL = { [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/59052/lynex-v1/version/latest", }; -const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { - console.log("Starting fetch for timestamp:", timestamp); - const todayTimestamp = getUniqStartOfTodayTimestamp( - new Date(timestamp * 1000) - ); - const dateId = Math.floor( - getTimestampAtStartOfDayUTC(todayTimestamp) / 86400 - ).toString(); - - console.log("Calculated dateId:", dateId); +const fetch = async ({ getFromBlock, getToBlock, chain}: FetchOptions): Promise => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) - const pairsQuery = gql` - query getPairs { - pairs(first: 500, orderBy: trackedReserveETH, orderDirection: desc) { + const query = gql` + query fees { + yesterday: pairs(block: {number: ${fromBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { id isStable + volumeUSD } - } - `; - - const pairDayDataQuery = gql` - query getPairDayData($id: String!) { - pairDayData(id: $id) { - dailyVolumeUSD + today: pairs(block: {number: ${toBlock}}, where: {volumeUSD_gt: "0"}, first: 1000) { id + isStable + volumeUSD } } `; - let pairsResult; - try { - pairsResult = await request(endpoints[chain], pairsQuery); - console.log("Pairs result:", pairsResult); - } catch (error) { - console.error("Error fetching pairs:", error); - return { timestamp }; - } - - const pairs: IPair[] = pairsResult.pairs; - let totalFeesUSD = new BigNumber(0); - - for (const pair of pairs) { - try { - const pairDayDataResult = await request( - endpoints[chain], - pairDayDataQuery, - { id: `${pair.id}-${dateId}` } - ); - const pairDayData: IPairDayData = pairDayDataResult.pairDayData; - - if (pairDayData) { - const volumeUSD = new BigNumber(pairDayData.dailyVolumeUSD); - const feeRate = pair.isStable ? STABLE_FEE : VOLATILE_FEE; - const dailyFeesUSD = volumeUSD.multipliedBy(feeRate); - - totalFeesUSD = totalFeesUSD.plus(dailyFeesUSD); - } else { - console.log(`No data for pair: ${pair.id} on date: ${dateId}`); - } - } catch (error) { - console.error(`Error fetching pairDayData for pair ${pair.id}:`, error); + const graphRes: IGraphResponse = await request(endpoints[chain], query); + const totalFeesToday = graphRes.today.reduce((acc, pool) => { + if (pool.isStable) { + return acc.plus(new BigNumber(pool.volumeUSD).times(STABLE_FEES)); + } else { + return acc.plus(new BigNumber(pool.volumeUSD).times(VOLATILE_FEES)); } - } + }, new BigNumber(0)); - if (totalFeesUSD.isZero()) return { timestamp }; + const totalFeesYesterday = graphRes.yesterday.reduce((acc, pool) => { + if (pool.isStable) { + return acc.plus(new BigNumber(pool.volumeUSD).times(STABLE_FEES)); + } else { + return acc.plus(new BigNumber(pool.volumeUSD).times(VOLATILE_FEES)); + } + }, new BigNumber(0)); + const dailyFee = totalFeesToday.minus(totalFeesYesterday); return { - timestamp, - dailyFees: totalFeesUSD.toString(), - dailyUserFees: totalFeesUSD.toString(), - dailyRevenue: totalFeesUSD.toString(), - dailyHoldersRevenue: totalFeesUSD.toString(), + dailyFees: dailyFee.toString(), + dailyUserFees: dailyFee.toString(), + dailyRevenue: dailyFee.toString(), + dailyHoldersRevenue: dailyFee.toString(), }; - }; }; const adapter: Adapter = { + version: 2, adapter: { [CHAIN.LINEA]: { - fetch: fetch(CHAIN.LINEA), + fetch: fetch, start: 1691394680, }, }, From 3b5ededd67c2c4cefa4a2e963e4f12038eb2e8f5 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:38:17 +0000 Subject: [PATCH 0917/1590] fix ci --- .github/workflows/getFileList.js | 2 +- aggregator-derivatives/bitoro/index.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/getFileList.js b/.github/workflows/getFileList.js index 193a10494a..62355afe4c 100644 --- a/.github/workflows/getFileList.js +++ b/.github/workflows/getFileList.js @@ -1,4 +1,4 @@ -const ALLOWED_ROOTS = ['volumes', 'dexs', 'options', 'derivatives', 'incentives', 'fees', 'options', 'protocols', 'aggregators'] +const ALLOWED_ROOTS = ['volumes', 'dexs', 'options', 'derivatives', 'incentives', 'fees', 'options', 'protocols', 'aggregators','aggregator-derivatives'] const MODIFIED = parse(process.env.MODIFIED) const ADDED = parse(process.env.ADDED) const fileSet = new Set(); diff --git a/aggregator-derivatives/bitoro/index.ts b/aggregator-derivatives/bitoro/index.ts index c38cec383b..b1ba44c69a 100644 --- a/aggregator-derivatives/bitoro/index.ts +++ b/aggregator-derivatives/bitoro/index.ts @@ -18,6 +18,8 @@ const fetch = async (options: any): Promise => { dailyVolume: dailyVolume.volume || 0, totalVolume: totalVolume.volume || 0, }; + + }; export default { @@ -28,4 +30,4 @@ export default { }, }, version: 2 -} \ No newline at end of file +} From 67d0914dd031632ef748f1dbfee4a223119d1f5f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 3 Jul 2024 17:38:55 +0000 Subject: [PATCH 0918/1590] fix ci agg per --- aggregator-derivatives/bitoro/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/aggregator-derivatives/bitoro/index.ts b/aggregator-derivatives/bitoro/index.ts index b1ba44c69a..0a16b77013 100644 --- a/aggregator-derivatives/bitoro/index.ts +++ b/aggregator-derivatives/bitoro/index.ts @@ -18,8 +18,6 @@ const fetch = async (options: any): Promise => { dailyVolume: dailyVolume.volume || 0, totalVolume: totalVolume.volume || 0, }; - - }; export default { From 69e799daa4d7691ee7f886ff0d41373ca1e83080 Mon Sep 17 00:00:00 2001 From: mendesfabio Date: Wed, 3 Jul 2024 22:38:05 -0300 Subject: [PATCH 0919/1590] add fraxtal and mode to balancer --- dexs/balancer/index.ts | 4 +- fees/balancer.ts | 20 +- yarn.lock | 2435 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2457 insertions(+), 2 deletions(-) create mode 100644 yarn.lock diff --git a/dexs/balancer/index.ts b/dexs/balancer/index.ts index b4641489cc..b798f41412 100644 --- a/dexs/balancer/index.ts +++ b/dexs/balancer/index.ts @@ -17,7 +17,9 @@ const endpoints: ChainEndpoints = { [CHAIN.XDAI]: sdk.graph.modifyEndpoint('EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg'), [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest", [CHAIN.AVAX]: sdk.graph.modifyEndpoint('7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu'), - [CHAIN.BASE]: "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest" + [CHAIN.BASE]: "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest", + [CHAIN.MODE]: "https://api.studio.thegraph.com/query/75376/balancer-mode-v2/version/latest", + [CHAIN.FRAXTAL]: "https://api.goldsky.com/api/public/project_clwhu1vopoigi01wmbn514m1z/subgraphs/balancer-fraxtal-v2/latest/gn" }; const graphParams = { diff --git a/fees/balancer.ts b/fees/balancer.ts index f9607398fb..218808a868 100644 --- a/fees/balancer.ts +++ b/fees/balancer.ts @@ -27,6 +27,10 @@ const v2Endpoints = { "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest", [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest", + [CHAIN.MODE]: + "https://api.studio.thegraph.com/query/75376/balancer-mode-v2/version/latest", + [CHAIN.FRAXTAL]: + "https://api.goldsky.com/api/public/project_clwhu1vopoigi01wmbn514m1z/subgraphs/balancer-fraxtal-v2/latest/gn" }; const v1Graphs = (graphUrls: ChainEndpoints) => { @@ -211,7 +215,21 @@ const adapter: Adapter = { meta: { methodology } - } + }, + [CHAIN.MODE]: { + fetch: v2Graphs(v2Endpoints)(CHAIN.MODE), + start: 1716336000, + meta: { + methodology + } + }, + [CHAIN.FRAXTAL]: { + fetch: v2Graphs(v2Endpoints)(CHAIN.FRAXTAL), + start: 1716163200, + meta: { + methodology + } + }, } } } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..039a4b523c --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2435 @@ +# 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.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.600.0.tgz#3ce415d9257b8d1c8385bc26c6c86e6403aff83c" + integrity sha512-iYoKbJTputbf+ubkX6gSK/y/4uJEBRaXZ18jykLdBQ8UJuGrk2gqvV8h7OlGAhToCeysmmMqM0vDWyLt6lP8nw== + 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.600.0" + "@aws-sdk/client-sts" "3.600.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.600.0" + "@aws-sdk/middleware-bucket-endpoint" "3.598.0" + "@aws-sdk/middleware-expect-continue" "3.598.0" + "@aws-sdk/middleware-flexible-checksums" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-location-constraint" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-sdk-s3" "3.598.0" + "@aws-sdk/middleware-signing" "3.598.0" + "@aws-sdk/middleware-ssec" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/signature-v4-multi-region" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@aws-sdk/xml-builder" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/eventstream-serde-browser" "^3.0.2" + "@smithy/eventstream-serde-config-resolver" "^3.0.1" + "@smithy/eventstream-serde-node" "^3.0.2" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-blob-browser" "^3.1.0" + "@smithy/hash-node" "^3.0.1" + "@smithy/hash-stream-node" "^3.1.0" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/md5-js" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@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.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-stream" "^3.0.2" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.600.0": + version "3.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz#37966020af55a052822b9ef21adc38d2afcb0f34" + integrity sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sts" "3.600.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.600.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@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.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz#aef58e198e504d3b3d1ba345355650a67d21facb" + integrity sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@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.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.600.0": + version "3.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz#8a437f8cf626cf652f99628105576213dbba48b2" + integrity sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.600.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.600.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@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.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.598.0.tgz#82a069d703be0cafe3ddeacb1de51981ee4faa25" + integrity sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g== + dependencies: + "@smithy/core" "^2.2.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz#ea1f30cfc9948017dd0608518868d3f50074164f" + integrity sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz#58144440e698aef63b5cb459780325817c0acf10" + integrity sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/util-stream" "^3.0.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz#fd0ba8ab5c3701e05567d1c6f7752cfd9f4ba111" + integrity sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA== + dependencies: + "@aws-sdk/credential-provider-env" "3.598.0" + "@aws-sdk/credential-provider-http" "3.598.0" + "@aws-sdk/credential-provider-process" "3.598.0" + "@aws-sdk/credential-provider-sso" "3.598.0" + "@aws-sdk/credential-provider-web-identity" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/credential-provider-imds" "^3.1.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.600.0": + version "3.600.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz#33b32364972bd7167d000cdded92b9398346a3ca" + integrity sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw== + dependencies: + "@aws-sdk/credential-provider-env" "3.598.0" + "@aws-sdk/credential-provider-http" "3.598.0" + "@aws-sdk/credential-provider-ini" "3.598.0" + "@aws-sdk/credential-provider-process" "3.598.0" + "@aws-sdk/credential-provider-sso" "3.598.0" + "@aws-sdk/credential-provider-web-identity" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/credential-provider-imds" "^3.1.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz#f48ff6f964cd6726499b207f45bfecda4be922ce" + integrity sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz#52781e2b60b1f61752829c44a5e0b9fedd0694d6" + integrity sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA== + dependencies: + "@aws-sdk/client-sso" "3.598.0" + "@aws-sdk/token-providers" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz#d737e9c2b7c4460b8e31a55b4979bf4d88913900" + integrity sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.598.0.tgz#033b08921f9f284483a7337ed165743ee0dc598d" + integrity sha512-PM7BcFfGUSkmkT6+LU9TyJiB4S8yI7dfuKQDwK5ZR3P7MKaK4Uj4yyDiv0oe5xvkF6+O2+rShj+eh8YuWkOZ/Q== + dependencies: + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.598.0.tgz#5b08b8cae70d1e7cc082d3627b31856f6ba20d17" + integrity sha512-ZuHW18kaeHR8TQyhEOYMr8VwiIh0bMvF7J1OTqXHxDteQIavJWA3CbfZ9sgS4XGtrBZDyHJhjZKeCfLhN2rq3w== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.598.0.tgz#8e40734d5fb1b116816f885885f16db9b5e39032" + integrity sha512-xukAzds0GQXvMEY9G6qt+CzwVzTx8NyKKh04O2Q+nOch6QQ8Rs+2kTRy3Z4wQmXq2pK9hlOWb5nXA7HWpmz6Ng== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@aws-crypto/crc32c" "5.2.0" + "@aws-sdk/types" "3.598.0" + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz#0a7c4d5a95657bea2d7c4e29b9a8b379952d09b1" + integrity sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.598.0.tgz#45564d5119468e3ac97949431c249e8b6e00ec09" + integrity sha512-8oybQxN3F1ISOMULk7JKJz5DuAm5hCUcxMW9noWShbxTJuStNvuHf/WLUzXrf8oSITyYzIHPtf8VPlKR7I3orQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz#0c0692d2f4f9007c915734ab319db377ca9a3b1b" + integrity sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz#94015d41f8174bd41298fd13f8fb0a8c4576d7c8" + integrity sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.598.0.tgz#308604f8a38959ad65ec5674c643c7032d678f43" + integrity sha512-5AGtLAh9wyK6ANPYfaKTqJY1IFJyePIxsEbxa7zS6REheAqyVmgJFaGu3oQ5XlxfGr5Uq59tFTRkyx26G1HkHA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.598.0.tgz#b90eef6a9fe3f76777c9cd4890dcae8e1febd249" + integrity sha512-XKb05DYx/aBPqz6iCapsCbIl8aD8EihTuPCs51p75QsVfbQoVr4TlFfIl5AooMSITzojdAQqxt021YtvxjtxIQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/types" "^3.1.0" + "@smithy/util-middleware" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.598.0.tgz#d6a3c64ce77bd7379653b46b58ded32a7b0fe6f4" + integrity sha512-f0p2xP8IC1uJ5e/tND1l81QxRtRFywEdnbtKCE0H6RSn4UIt2W3Dohe1qQDbnh27okF0PkNW6BJGdSAz3p7qbA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz#6fa26849d256434ca4884c42c1c4755aa2f1556e" + integrity sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg== + dependencies: + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz#fd8fd6b7bc11b5f81def4db0db9e835d40a8f86e" + integrity sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.598.0.tgz#1716022e31dcbc5821aeca85204718f523a1ddbf" + integrity sha512-1r/EyTrO1gSa1FirnR8V7mabr7gk+l+HkyTI0fcTSr8ucB7gmYyW6WjkY8JCz13VYHFK62usCEDS7yoJoJOzTA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz#49a94c14ce2e392bb0e84b69986c33ecfad5b804" + integrity sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.598.0", "@aws-sdk/types@^3.222.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.598.0.tgz#b840d2446dee19a2a4731e6166f2327915d846db" + integrity sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ== + dependencies: + "@smithy/types" "^3.1.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.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz#7f78d68524babac7fdacf381590470353d45b959" + integrity sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + "@smithy/util-endpoints" "^2.0.2" + 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.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz#5039d0335f8a06af5be73c960df85009dda59090" + integrity sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz#f9bdf1b7cc3a40787c379f7c2ff028de2612c177" + integrity sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/xml-builder@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.598.0.tgz#ee591c5d80a34d9c5bc14326f1a62e9a0649c587" + integrity sha512-ZIa2RK7CHFTZ4gwK77WRtsZ6vF7xwRXxJ8KQIxK2duhoTVcn0xYxpFLdW9WZZZvdP9GIF3Loqvf8DRdeU5Jc7Q== + dependencies: + "@smithy/types" "^3.1.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.71" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.71.tgz#948a63441957c8844347d32470489b7b6c7b05c8" + integrity sha512-5hZ8TdYIrFa/f4hxb2ADzARmXxeuG5P8yukuQwNbiO8EnLcrDNPKwv5JXNaslWkMexlaeVy1m+EMLnTlbzeQSw== + 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.6.0" + resolved "https://registry.yarnpkg.com/@elastic/transport/-/transport-8.6.0.tgz#8de9794c87eb0fd2bdb2c6c1e32792aeb06b32bc" + integrity sha512-/Ucpztrc+urZK8yCtFBUu2LePYJNnukgZSUUApUzGH/SxejqkH526Nph7aru8I0vZwdW5wqgCHSOIq3J7tIxGg== + dependencies: + 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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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== + +"@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.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.0.tgz#408fbc0da13c30bc0aac859a44be08a5ba18126a" + integrity sha512-XOm4LkuC0PsK1sf2bBJLIlskn5ghmVxiEBVlo/jg0R8hxASBKYYgOoJEhKWgOr4vWGkN+5rC+oyBAqHYtxjnwQ== + dependencies: + "@smithy/types" "^3.2.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.2", "@smithy/config-resolver@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.3.tgz#104106363fbaf6bac61905727f7e2c39c62f3e94" + integrity sha512-4wHqCMkdfVDP4qmr4fVPYOFOH+vKhOv3X4e6KEU9wIC8xXUQ24tnF4CW+sddGDX1zU86GGyQ7A+rg2xmUD6jpQ== + dependencies: + "@smithy/node-config-provider" "^3.1.2" + "@smithy/types" "^3.2.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.2" + tslib "^2.6.2" + +"@smithy/core@^2.2.1": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.2.3.tgz#dc6ba7d338a1b35752be274cdaf6fcbcfdb44a70" + integrity sha512-SpyLOL2vgE6sUYM6nQfu82OirCPkCDKctyG3aMgjMlDPTJpUlmlNH0ttu9ZWwzEjrzzr8uABmPjJTRI7gk1HFQ== + dependencies: + "@smithy/middleware-endpoint" "^3.0.3" + "@smithy/middleware-retry" "^3.0.6" + "@smithy/middleware-serde" "^3.0.2" + "@smithy/protocol-http" "^4.0.2" + "@smithy/smithy-client" "^3.1.4" + "@smithy/types" "^3.2.0" + "@smithy/util-middleware" "^3.0.2" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.1.1", "@smithy/credential-provider-imds@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.2.tgz#7e84199a8cd8ff7121c0a2f95f7822dc09cc283f" + integrity sha512-gqVmUaNoeqyrOAjgZg+rTmFLsphh/vS59LCMdFfVpthVS0jbfBzvBmEPktBd+y9ME4DYMGHFAMSYJDK8q0noOQ== + dependencies: + "@smithy/node-config-provider" "^3.1.2" + "@smithy/property-provider" "^3.1.2" + "@smithy/types" "^3.2.0" + "@smithy/url-parser" "^3.0.2" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.1.tgz#b47f30bf4ad791ac7981b9fff58e599d18269cf9" + integrity sha512-s29NxV/ng1KXn6wPQ4qzJuQDjEtxLdS0+g5PQFirIeIZrp66FXVJ5IpZRowbt/42zB5dY8TqJ0G0L9KkgtsEZg== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^3.2.0" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^3.0.2": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.3.tgz#223267a9e46336aff2bebbc386eb6e62146d1fef" + integrity sha512-ZXKmNAHl6SWKYuVmtoEc/hBQ7Nym/rbAx2SrqoJHn0i9QopIP7fG1AWmoFIeS5R3/VL6AwUIZMR0g8qnjjVRRA== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.3" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.2.tgz#6238eadae0c060133c61783fd92d8b1ee1e6f99f" + integrity sha512-QbE3asvvBUZr7PwbOaxkSfKDjTAmWZkqh2G7pkYlD4jRkT1Y9nufeyu0OBPlLoF4+gl3YMpSVO7TESe8bVkD+g== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^3.0.2": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.3.tgz#51df0ca39f453d78a3d6607c1ac2e96cf900c824" + integrity sha512-v61Ftn7x/ubWFqH7GHFAL/RaU7QZImTbuV95DYugYYItzpO7KaHYEuO8EskCaBpZEfzOxhUGKm4teS9YUSt69Q== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.3" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.3.tgz#2ecac479ba84e10221b4b70545f3d7a223b5345e" + integrity sha512-YXYt3Cjhu9tRrahbTec2uOjwOSeCNfQurcWPGNEUspBhqHoA3KrDrVj+jGbCLWvwkwhzqDnnaeHAxm+IxAjOAQ== + dependencies: + "@smithy/eventstream-codec" "^3.1.1" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^3.0.2", "@smithy/fetch-http-handler@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.1.0.tgz#993d47577c7b86eb5796cd29f8301beafa2cf471" + integrity sha512-s7oQjEOUH9TYjctpITtWF4qxOdg7pBrP9eigEQ8SBsxF3dRFV0S28pGMllC83DUr7ECmErhO/BUwnULfoNhKgQ== + dependencies: + "@smithy/protocol-http" "^4.0.2" + "@smithy/querystring-builder" "^3.0.2" + "@smithy/types" "^3.2.0" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.1.tgz#758b4de6cf75b515cf36c18c4d101a833976c83f" + integrity sha512-8RwdPG7arvL5pfMAFsH6jfBVcC7MDR1LYHjKevZPHREkVtORIQkRfm2K8px7giJt7x0zzQJnWamrsDM4ig8nTQ== + dependencies: + "@smithy/chunked-blob-reader" "^3.0.0" + "@smithy/chunked-blob-reader-native" "^3.0.0" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/hash-node@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.2.tgz#8d1306f3b372e42dc76ae85fd979f7252aea476c" + integrity sha512-43uGA6o6QJQdXwAogybdTDHDd3SCdKyoiHIHb8PpdE2rKmVicjG9b1UgVwdgO8QPytmVqHFaUw27M3LZKwu8Yg== + dependencies: + "@smithy/types" "^3.2.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.1.tgz#ca288961879730a0203b60b4383e2455d015f2ac" + integrity sha512-+uvJHPrFNE9crkh3INVS9FmDcx1DoywDgIzlRWlPy7gqoD8jG14os9ATIFY7wN/ARPz1EWlkCHUap70oXxMmjA== + dependencies: + "@smithy/types" "^3.2.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.2.tgz#e455169d86e96e73ebf2bb1728b7d2e2850bdc01" + integrity sha512-+BAY3fMhomtq470tswXyrdVBSUhiLuhBVT+rOmpbz5e04YX+s1dX4NxTLzZGwBjCpeWZNtTxP8zbIvvFk81gUg== + dependencies: + "@smithy/types" "^3.2.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.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.2.tgz#dec2124a81beb83700b68390d1378010346b8541" + integrity sha512-WlSK9br7fkVucTkCXporwuOttCR3cJ1GV70J8ENYXGNc0nUTPzMdWCyHztgnbbKoekVMjGZOEu+8I52nOdzqwQ== + dependencies: + "@smithy/types" "^3.2.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.2.tgz#fc69a5b3a46310a798e4c804ef47dbe11ad2045f" + integrity sha512-/Havz3PkYIEmwpqkyRTR21yJsWnFbD1ec4H1pUL+TkDnE7RCQkAVUQepLL/UeCaZeCBXvfdoKbOjSbV01xIinQ== + dependencies: + "@smithy/protocol-http" "^4.0.2" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.0.2", "@smithy/middleware-endpoint@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.3.tgz#bbfdd0f35668af392c5031ca2735c31760740bc6" + integrity sha512-ARAXHodhj4tttKa9y75zvENdSoHq6VGsSi7XS3+yLutrnxttJs6N10UMInCC1yi3/bopT8xug3iOP/y9R6sKJQ== + dependencies: + "@smithy/middleware-serde" "^3.0.2" + "@smithy/node-config-provider" "^3.1.2" + "@smithy/shared-ini-file-loader" "^3.1.2" + "@smithy/types" "^3.2.0" + "@smithy/url-parser" "^3.0.2" + "@smithy/util-middleware" "^3.0.2" + tslib "^2.6.2" + +"@smithy/middleware-retry@^3.0.4", "@smithy/middleware-retry@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.6.tgz#ace955263cea4ef6acf1e0e42192be62e20ab558" + integrity sha512-ICsFKp8eAyIMmxN5UT3IU37S6886L879TKtgxPsn/VD/laYNwqTLmJaCAn5//+2fRIrV0dnHp6LFlMwdXlWoUQ== + dependencies: + "@smithy/node-config-provider" "^3.1.2" + "@smithy/protocol-http" "^4.0.2" + "@smithy/service-error-classification" "^3.0.2" + "@smithy/smithy-client" "^3.1.4" + "@smithy/types" "^3.2.0" + "@smithy/util-middleware" "^3.0.2" + "@smithy/util-retry" "^3.0.2" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^3.0.1", "@smithy/middleware-serde@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.2.tgz#3ec15a7991c2b066cced5989aba7f81fed4dfb87" + integrity sha512-oT2abV5zLhBucJe1LIIFEcRgIBDbZpziuMPswTMbBQNcaEUycLFvX63zsFmqfwG+/ZQKsNx+BSE8W51CMuK7Yw== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^3.0.1", "@smithy/middleware-stack@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.2.tgz#82610681a7f5986bfb3229df98ca1e050b667660" + integrity sha512-6fRcxomlNKBPIy/YjcnC7YHpMAjRvGUYlYVJAfELqZjkW0vQegNcImjY7T1HgYA6u3pAcCxKVBLYnkTw8z/l0A== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^3.1.1", "@smithy/node-config-provider@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.2.tgz#3e739ae02520f2249f6c50197feee6e38125fb1d" + integrity sha512-388fEAa7+6ORj/BDC70peg3fyFBTTXJyXfXJ0Bwd6FYsRltePr2oGzIcm5AuC1WUSLtZ/dF+hYOnfTMs04rLvA== + dependencies: + "@smithy/property-provider" "^3.1.2" + "@smithy/shared-ini-file-loader" "^3.1.2" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^3.0.1", "@smithy/node-http-handler@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.0.tgz#0f37b2c379b1cd85be125234575e7c5129dbed67" + integrity sha512-pOpgB6B+VLXLwAyyvRz+ZAVXABlbAsJ2xvn3WZvrppAPImxwQOPFbeSUzWYMhpC8Tr7yQ3R8fG990QDhskkf1Q== + dependencies: + "@smithy/abort-controller" "^3.1.0" + "@smithy/protocol-http" "^4.0.2" + "@smithy/querystring-builder" "^3.0.2" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/property-provider@^3.1.1", "@smithy/property-provider@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.2.tgz#3da2802511078eae66240bcbeb8ef6f6102aeabf" + integrity sha512-Hzp32BpeFFexBpO1z+ts8okbq/VLzJBadxanJAo/Wf2CmvXMBp6Q/TLWr7Js6IbMEcr0pDZ02V3u1XZkuQUJaA== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^4.0.1", "@smithy/protocol-http@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.0.2.tgz#502ed3116cb0f1e3f207881df965bac620ccb2da" + integrity sha512-X/90xNWIOqSR2tLUyWxVIBdatpm35DrL44rI/xoeBWUuanE0iyCXJpTcnqlOpnEzgcu0xCKE06+g70TTu2j7RQ== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.2.tgz#ea0f9a6e2b85d62465b3cc0214e6b86eb7af7ab4" + integrity sha512-xhv1+HacDYsOLdNt7zW+8Fe779KYAzmWvzs9bC5NlKM8QGYCwwuFwDBynhlU4D5twgi2pZ14Lm4h6RiAazCtmA== + dependencies: + "@smithy/types" "^3.2.0" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.2.tgz#7b8edc661d0ee2c2e7e8a39b1022b00dfff2858e" + integrity sha512-C5hyRKgrZGPNh5QqIWzXnW+LXVrPmVQO0iJKjHeb5v3C61ZkP9QhrKmbfchcTyg/VnaE0tMNf/nmLpQlWuiqpg== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.2.tgz#ad7a0c8dfd482981a04d42fba24c7ee1ac2eb20b" + integrity sha512-cu0WV2XRttItsuXlcM0kq5MKdphbMMmSd2CXF122dJ75NrFE0o7rruXFGfxAp3BKzgF/DMxX+PllIA/cj4FHMw== + dependencies: + "@smithy/types" "^3.2.0" + +"@smithy/shared-ini-file-loader@^3.1.1", "@smithy/shared-ini-file-loader@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.2.tgz#b80f8b9b40841447219a95cb47f7a8f3f85b6467" + integrity sha512-tgnXrXbLMO8vo6VeuqabMw/eTzQHlLmZx0TC0TjtjJghnD0Xl4pEnJtBjTJr6XF5fHMNrt5BcczDXHJT9yNQnA== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.1.1.tgz#4882aacb3260a47b8279b2ffc6a135e03e225260" + integrity sha512-2/vlG86Sr489XX8TA/F+VDA+P04ESef04pSz0wRtlQBExcSPjqO08rvrkcas2zLnJ51i+7ukOURCkgqixBYjSQ== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/types" "^3.2.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-middleware" "^3.0.2" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^3.1.2", "@smithy/smithy-client@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.4.tgz#597a4b0d08c71ed7e66707df28871b8a3a707cce" + integrity sha512-y6xJROGrIoitjpwXLY7P9luDHvuT9jWpAluliuSFdBymFxcl6iyQjo9U/JhYfRHFNTruqsvKOrOESVuPGEcRmQ== + dependencies: + "@smithy/middleware-endpoint" "^3.0.3" + "@smithy/middleware-stack" "^3.0.2" + "@smithy/protocol-http" "^4.0.2" + "@smithy/types" "^3.2.0" + "@smithy/util-stream" "^3.0.4" + tslib "^2.6.2" + +"@smithy/types@^3.1.0", "@smithy/types@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.2.0.tgz#1350fe8a50d5e35e12ffb34be46d946860b2b5ab" + integrity sha512-cKyeKAPazZRVqm7QPvcPD2jEIt2wqDPAL1KJKb0f/5I7uhollvsWZuZKLclmyP6a+Jwmr3OV3t+X0pZUUHS9BA== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^3.0.1", "@smithy/url-parser@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.2.tgz#a4d6f364a28d2b11c14d9486041ea8eb4572fc66" + integrity sha512-pRiPHrgibeAr4avtXDoBHmTLtthwA4l8jKYRfZjNgp+bBPyxDMPRg2TMJaYxqbKemvrOkHu9MIBTv2RkdNfD6w== + dependencies: + "@smithy/querystring-parser" "^3.0.2" + "@smithy/types" "^3.2.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.4": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.6.tgz#4f6d9a8578d6ea131776757accdb9d636f06a6a1" + integrity sha512-tAgoc++Eq+KL7g55+k108pn7nAob3GLWNEMbXhZIQyBcBNaE/o3+r4AEbae0A8bWvLRvArVsjeiuhMykGa04/A== + dependencies: + "@smithy/property-provider" "^3.1.2" + "@smithy/smithy-client" "^3.1.4" + "@smithy/types" "^3.2.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.4": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.6.tgz#be733b8c84bf02d2b17803e755f51655e5f99115" + integrity sha512-UNerul6/E8aiCyFTBHk+RSIZCo7m96d/N5K3FeO/wFeZP6oy5HAicLzxqa85Wjv7MkXSxSySX29L/LwTV/QMag== + dependencies: + "@smithy/config-resolver" "^3.0.3" + "@smithy/credential-provider-imds" "^3.1.2" + "@smithy/node-config-provider" "^3.1.2" + "@smithy/property-provider" "^3.1.2" + "@smithy/smithy-client" "^3.1.4" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.3.tgz#480eee018b0bba6f53434444f11558d330b618d5" + integrity sha512-Dyi+pfLglDHSGsKSYunuUUSFM5V0tz7UDgv1Ex97yg+Xkn0Eb0rH0rcvl1n0MaJ11fac3HKDOH0DkALyQYCQag== + dependencies: + "@smithy/node-config-provider" "^3.1.2" + "@smithy/types" "^3.2.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.1", "@smithy/util-middleware@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.2.tgz#6daeb9db060552d851801cd7a0afd68769e2f98b" + integrity sha512-7WW5SD0XVrpfqljBYzS5rLR+EiDzl7wCVJZ9Lo6ChNFV4VYDk37Z1QI5w/LnYtU/QKnSawYoHRd7VjSyC8QRQQ== + dependencies: + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/util-retry@^3.0.1", "@smithy/util-retry@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.2.tgz#073b4950f0379307e073a70afe086c52ec2b0329" + integrity sha512-HUVOb1k8p/IH6WFUjsLa+L9H1Zi/FAAB2CDOpWuffI1b2Txi6sknau8kNfC46Xrt39P1j2KDzCE1UlLa2eW5+A== + dependencies: + "@smithy/service-error-classification" "^3.0.2" + "@smithy/types" "^3.2.0" + tslib "^2.6.2" + +"@smithy/util-stream@^3.0.2", "@smithy/util-stream@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.4.tgz#7a33a39754d8a0737f30687953d8dcc05810e907" + integrity sha512-CcMioiaOOsEVdb09pS7ux1ij7QcQ2jE/cE1+iin1DXMeRgAEQN/47m7Xztu7KFQuQsj0A5YwB2UN45q97CqKCg== + dependencies: + "@smithy/fetch-http-handler" "^3.1.0" + "@smithy/node-http-handler" "^3.1.0" + "@smithy/types" "^3.2.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.0.1": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.1.0.tgz#7fa58fe91ddcf4a8bcf00c3d216f2cc14386da2a" + integrity sha512-5OVcC5ZcmmutY208ADY/l2eB4H4DVXs+hPUo/M1spF4/YEmF9DdLkfwBvohej2dIeVJayKY7hMlD0X8j3F3/Uw== + dependencies: + "@smithy/abort-controller" "^3.1.0" + "@smithy/types" "^3.2.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.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.5.tgz#fe35e3022ebe58b8f201580eb24e1fcfc0f2487d" + integrity sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA== + 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.36" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.36.tgz#c9861e84727e07ecf79a5ff6d0e14f91bab2b478" + integrity sha512-tX1BNmYSWEvViftB26VLNxT6mEr37M7+ldUtq7rlKnv4/2fKYsJIOmqJAjT6h1DNuwQjIKgw3VJ/Dtw3yiTIQw== + 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.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c" + integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== + +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.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5" + integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w== + 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.8.2" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.2.tgz#54771c7ff195da913f5e70af8044a026d32eca2a" + integrity sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg== + +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.0" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" + integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== + 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.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + +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.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + 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.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + +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 ea319ab2cf2839bd023fc7c2f3909c8378123677 Mon Sep 17 00:00:00 2001 From: mendesfabio Date: Wed, 3 Jul 2024 22:55:51 -0300 Subject: [PATCH 0920/1590] fix days without snapshots --- fees/balancer.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/fees/balancer.ts b/fees/balancer.ts index 218808a868..3dba5c2166 100644 --- a/fees/balancer.ts +++ b/fees/balancer.ts @@ -113,8 +113,13 @@ const v2Graphs = (graphUrls: ChainEndpoints) => { }`; const graphRes: IBalancerSnapshot = await request(graphUrls[chain], graphQuery); - const dailySwapFee = new BigNumber(graphRes["today"][0]["totalSwapFee"]).minus(new BigNumber(graphRes["yesterday"][0]["totalSwapFee"])); - const dailyProtocolFee = new BigNumber(graphRes["today"][0]["totalProtocolFee"]).minus(new BigNumber(graphRes["yesterday"][0]["totalProtocolFee"])); + + let dailySwapFee = new BigNumber(0); + let dailyProtocolFee = new BigNumber(0); + if (graphRes["today"].length > 0 && graphRes["yesterday"].length > 0) { + dailySwapFee = new BigNumber(graphRes["today"][0]["totalSwapFee"]).minus(new BigNumber(graphRes["yesterday"][0]["totalSwapFee"])); + dailyProtocolFee = new BigNumber(graphRes["today"][0]["totalProtocolFee"]).minus(new BigNumber(graphRes["yesterday"][0]["totalProtocolFee"])); + } let tenPcFeeTimestamp = 0; let fiftyPcFeeTimestamp = 0; From f94315c199fc827c375de557839d150e9e1cf572 Mon Sep 17 00:00:00 2001 From: Rudy Date: Thu, 4 Jul 2024 10:08:52 +0800 Subject: [PATCH 0921/1590] update raydium info --- dexs/raydium/index.ts | 65 ++++++++-- fees/raydium.ts | 2 +- helpers/getRaydiumFees.ts | 241 ++++++++++++++++++++++++++++++++++++++ utils/fetchURL.ts | 6 +- 4 files changed, 303 insertions(+), 11 deletions(-) create mode 100644 helpers/getRaydiumFees.ts diff --git a/dexs/raydium/index.ts b/dexs/raydium/index.ts index d972d7319d..13c4383133 100644 --- a/dexs/raydium/index.ts +++ b/dexs/raydium/index.ts @@ -1,16 +1,67 @@ -import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; -import fetchURL from "../../utils/fetchURL" +import { FetchResultFees, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import fetchURL, { postURL } from "../../utils/fetchURL" + +const graphs = async (timestamp: number): Promise => { + const ammPoolStandard: any[] = [ + ...(await fetchURL("https://api-v3.raydium.io/pools/info/list?poolType=all&poolSortField=default&sortType=desc&pageSize=1000&page=1")).data.data, + ...(await fetchURL("https://api-v3.raydium.io/pools/info/list?poolType=all&poolSortField=default&sortType=desc&pageSize=1000&page=2")).data.data, + ]; -const graphs = async (timestamp: number): Promise => { - const ammPoolStandard: any[] = (await fetchURL("https://api-v3.raydium.io/pools/info/list?poolType=all&poolSortField=default&sortType=desc&pageSize=100&page=1")).data.data; const dailyVolumeAmmPool = ammPoolStandard - .filter((e) => e.tvl > 100_000) .reduce((a: number, b) => a + b.day.volume, 0) - const fiveBill = 3_000_000_000; // set the threshold to 3B + + let ammFee = 0 + let clmmFee = 0 + let cpmmFee = 0 + for (const item of ammPoolStandard) { + if (item.programId === 'CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK') clmmFee += item.day.volumeFee + else if (item.programId === 'CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C') cpmmFee += item.day.volumeFee + else ammFee += item.day.volumeFee + } + + console.log(123123) + const dailyVolumeAmmPoolFee = ammFee + clmmFee + cpmmFee + + const dailyRevenueFund = ammFee * 0.03 + clmmFee * 0.04 + cpmmFee * 0.04 + const dailyRevenueProtocol = ammFee * 0.0 + clmmFee * 0.12 + cpmmFee * 0.12 + + // const buyRay = await postURL('https://explorer-api.mainnet-beta.solana.com/', JSON.stringify({ + const buyRay = await postURL('https://api.mainnet-beta.solana.com', JSON.stringify({ + "jsonrpc": "2.0", + "id": 123, + "method": "getMultipleAccounts", + "params": [ + [ + "G7rxL8ySm5qPbtTus9FhAn2nEAZn8DDsUEeHGXgWTP1x", + "BnTSNB2VqsUGiauSfwfyQBdFwPYnteb1M69Y1VXziP5u", + "FpDWkidnRD6pWzYZAnDWEU3kC1hXSmQSqhd9w4nMCn1", + "E5BMFn1mzTGuFWzNHZ7cybWfzetmqhFKS7SM91N5WePU", + "BEVT2yGq2rvvPCnMipktFWxJaouidExC7scW9GHhMuzi", + ], + { + "encoding": "jsonParsed" + } + ] + }), 3, {headers: {'content-type': 'application/json'}}) + + const buyRayAll = buyRay.result.value.map((i: any) => i?.data?.parsed?.info?.tokenAmount?.uiAmount ?? 0).reduce((a: number,b: number) => a + b, 0) + + const rayPrice = (await fetchURL('https://api-v3.raydium.io/mint/price?mints=4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R'))?.data['4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R'] ?? 0 return { - dailyVolume: `${dailyVolumeAmmPool < fiveBill ? dailyVolumeAmmPool : undefined}`, + dailyVolume: `${dailyVolumeAmmPool}`, timestamp: timestamp, + totalFees: `${dailyVolumeAmmPoolFee}`, + dailyFees: `${dailyVolumeAmmPoolFee}`, + dailyUserFees: `${dailyVolumeAmmPoolFee}`, + totalRevenue: `${dailyRevenueFund + dailyRevenueProtocol}`, + dailyRevenue: `${dailyRevenueFund + dailyRevenueProtocol}`, + dailyProtocolRevenue: `${dailyRevenueFund + dailyRevenueProtocol}`, + dailyHoldersRevenue: `${buyRayAll * rayPrice}`, + dailySupplySideRevenue: `${dailyVolumeAmmPoolFee - dailyRevenueFund - dailyRevenueProtocol}`, + totalProtocolRevenue: `${dailyRevenueFund + dailyRevenueProtocol}`, + totalSupplySideRevenue: `${dailyVolumeAmmPoolFee - dailyRevenueFund - dailyRevenueProtocol}`, + totalUserFees: `${dailyVolumeAmmPoolFee}`, }; }; diff --git a/fees/raydium.ts b/fees/raydium.ts index d79c1a608f..7a94ea2eca 100644 --- a/fees/raydium.ts +++ b/fees/raydium.ts @@ -1,6 +1,6 @@ import { BaseAdapter, Adapter } from "../adapters/types"; import volumeAdapter from "../dexs/raydium"; -import { getDexChainFees } from "../helpers/getUniSubgraphFees"; +import { getDexChainFees } from "../helpers/getRaydiumFees"; const TOTAL_FEES = 0.0025; const PROTOCOL_FEES = 0; diff --git a/helpers/getRaydiumFees.ts b/helpers/getRaydiumFees.ts new file mode 100644 index 0000000000..69855955da --- /dev/null +++ b/helpers/getRaydiumFees.ts @@ -0,0 +1,241 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { + Adapter, + BaseAdapter, + BreakdownAdapter, + ChainBlocks, + FetchResultVolume +} from "../adapters/types"; + +import BigNumber from "bignumber.js"; +import { gql, request } from "graphql-request"; +import type { ChainEndpoints, Fetch, FetchOptions, FetchResultV2, FetchV2 } from "../adapters/types"; +import { getBlock } from "./getBlock"; +import { + DEFAULT_DAILY_VOLUME_FACTORY, + DEFAULT_DAILY_VOLUME_FIELD, + DEFAULT_TOTAL_VOLUME_FACTORY, + DEFAULT_TOTAL_VOLUME_FIELD, + getUniqStartOfTodayTimestamp, +} from "./getUniSubgraphVolume"; + +// To get ID for daily data https://docs.uniswap.org/protocol/V2/reference/API/entities +const getUniswapDateId = (date?: Date) => getUniqStartOfTodayTimestamp(date) / 86400; + +const DEFAULT_TOTAL_FEES_FACTORY = "factories"; +const DEFAULT_TOTAL_FEES_FIELD = "totalFeesUSD"; + +const DEFAULT_DAILY_FEES_FACTORY = "uniswapDayData"; +const DEFAULT_DAILY_FEES_FIELD = "feesUSD"; + +interface IGetRawChainFeeParams { + graphUrls: ChainEndpoints, + totalFees?: number, + protocolFees?: number, + totalVolume?: { + factory: string, + field: string + }, + dailyVolume?: { + factory: string, + field: string + }, + customDailyVolume?: string, + hasDailyVolume?: boolean + hasTotalVolume?: boolean + getCustomBlock?: (timestamp: number) => Promise +} + +interface IGetChainFeeParams { + volumeAdapter: Adapter, + totalFees?: number, + protocolFees?: number, + revenue?: number, + userFees?: number, + supplySideRevenue?: number, + holdersRevenue?: number, + meta?: BaseAdapter[string]['meta'] +} + + +const getUniswapV3Fees = (graphUrls: ChainEndpoints) => { + const graphQuery = gql`query fees($dateId: Int!) { + ${DEFAULT_DAILY_FEES_FACTORY}(id: $dateId) { + ${DEFAULT_DAILY_FEES_FIELD} + }, + ${DEFAULT_TOTAL_FEES_FACTORY} { + ${DEFAULT_TOTAL_FEES_FIELD} + } + }`; + + return (chain: Chain) => { + return async (timestamp: number) => { + const dateId = getUniswapDateId(new Date(timestamp * 1000)); + + const graphRes = await request(graphUrls[chain], graphQuery, { + dateId, + }); + + return { + timestamp, + totalFees: graphRes[DEFAULT_TOTAL_FEES_FACTORY][0][DEFAULT_TOTAL_FEES_FIELD], + dailyFees: graphRes[DEFAULT_DAILY_FEES_FACTORY][DEFAULT_DAILY_FEES_FIELD], + totalRevenue: "0", // uniswap has no rev yet + dailyRevenue: "0", // uniswap has no rev yet + }; + }; + }; +}; + +const getDexChainBreakdownFees = ({ volumeAdapter, totalFees = 0, protocolFees = 0 }: IGetChainFeeParams) => { + if ('breakdown' in volumeAdapter) { + let breakdownAdapter = {} as BreakdownAdapter['breakdown'] + const volumeBreakdownAdapter = volumeAdapter.breakdown + + for (const [version, adapterObj] of Object.entries(volumeBreakdownAdapter)) { + const volAdapter: BaseAdapter = adapterObj + + const baseAdapters = Object.keys(volAdapter).map(chain => { + const fetchFees = async (timestamp: number, chainBlocks: ChainBlocks, options: FetchOptions) => { + const fetchedResult: FetchResultVolume = await (volAdapter[chain].fetch as Fetch)(timestamp, chainBlocks, options) + const chainDailyVolume = fetchedResult.dailyVolume ? fetchedResult.dailyVolume as number : "0"; + const chainTotalVolume = fetchedResult.totalVolume ? fetchedResult.totalVolume as number : "0"; + + return { + timestamp, + totalFees: new BigNumber(chainTotalVolume).multipliedBy(totalFees).toString(), + dailyFees: chainDailyVolume ? new BigNumber(chainDailyVolume).multipliedBy(totalFees).toString() : undefined, + totalRevenue: new BigNumber(chainTotalVolume).multipliedBy(protocolFees).toString(), + dailyRevenue: chainDailyVolume ? new BigNumber(chainDailyVolume).multipliedBy(protocolFees).toString() : undefined + }; + } + + const baseAdapter: BaseAdapter = { + [chain]: { + ...volAdapter[chain], + fetch: fetchFees, + customBackfill: fetchFees, + } + } + return baseAdapter + }); + + breakdownAdapter = { [version]: baseAdapters[0], ...breakdownAdapter } + } + + return breakdownAdapter; + } else { + console.log(`Failed to grab dex volume data (volume adapter not include 'breakdown' props)`) + return {} + } +} + + +const getDexChainFees = ({ volumeAdapter, totalFees = 0, protocolFees = 0, ...params }: IGetChainFeeParams) => { + if ('adapter' in volumeAdapter) { + let finalBaseAdapter: BaseAdapter = {} + const adapterObj = volumeAdapter.adapter + + Object.keys(adapterObj).map(chain => { + const fetchFees = async (options: FetchOptions) => { + return await (adapterObj[chain].fetch as FetchV2)(options) + } + + const baseAdapter: BaseAdapter = { + [chain]: { + ...adapterObj[chain], + fetch: fetchFees, + customBackfill: fetchFees, + meta: params.meta + } + } + finalBaseAdapter = { ...baseAdapter, ...finalBaseAdapter } + return baseAdapter + }); + + return finalBaseAdapter; + } else { + console.log(`Failed to grab dex volume data (volume adapter not include 'volume' props)`, volumeAdapter) + return {} + } +} + +// Raw method if we do not want to rely on dexVolumes +function getDexChainFeesRaw({ + graphUrls, + totalFees = 0, + protocolFees = 0, + totalVolume = { + factory: DEFAULT_TOTAL_VOLUME_FACTORY, + field: DEFAULT_TOTAL_VOLUME_FIELD, + }, + dailyVolume = { + factory: DEFAULT_DAILY_VOLUME_FACTORY, + field: DEFAULT_DAILY_VOLUME_FIELD, + }, + customDailyVolume = undefined, + hasDailyVolume = true, + hasTotalVolume = true, + getCustomBlock = undefined, +}: IGetRawChainFeeParams) { + const totalVolumeQuery = gql` + ${totalVolume.factory}( + block: { number: $block } + ) { + ${totalVolume.field} + } + `; + + const dailyVolumeQuery = + customDailyVolume || + gql` + ${dailyVolume.factory} ( + id: $id + ) { + ${dailyVolume.field} + } + `; + + const graphQuery = gql` +query get_volume($block: Int, $id: Int) { + ${hasTotalVolume ? totalVolumeQuery : ""} + ${hasDailyVolume ? dailyVolumeQuery : ""} +} +`; + return (chain: Chain) => { + return async (timestamp: number, chainBlocks: ChainBlocks) => { + const block = + (getCustomBlock && (await getCustomBlock(timestamp))) || + (await getBlock(timestamp, chain, chainBlocks)); + + const id = getUniswapDateId(new Date(timestamp * 1000)); + + const graphRes = await request(graphUrls[chain], graphQuery, { + block, + id, + }); + + const chainTotalVolume = graphRes[totalVolume.factory][0][totalVolume.field]; + const chainDailyVolume = hasDailyVolume ? (graphRes?.[dailyVolume.factory]?.[dailyVolume.field] ?? "0") : undefined; + + return { + timestamp, + block, + totalFees: new BigNumber(chainTotalVolume).multipliedBy(totalFees).toString(), + dailyFees: (hasDailyVolume && chainDailyVolume) ? new BigNumber(chainDailyVolume).multipliedBy(totalFees).toString() : undefined, + totalRevenue: new BigNumber(chainTotalVolume).multipliedBy(protocolFees).toString(), + dailyRevenue: (hasDailyVolume && chainDailyVolume) ? new BigNumber(chainDailyVolume).multipliedBy(protocolFees).toString() : undefined + }; + }; + }; +} + +export { + DEFAULT_DAILY_FEES_FACTORY, + DEFAULT_DAILY_FEES_FIELD, DEFAULT_DAILY_VOLUME_FACTORY, + DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_FEES_FACTORY, + DEFAULT_TOTAL_FEES_FIELD, DEFAULT_TOTAL_VOLUME_FACTORY, + DEFAULT_TOTAL_VOLUME_FIELD, getDexChainBreakdownFees, getDexChainFees, + getDexChainFeesRaw, getUniqStartOfTodayTimestamp, getUniswapV3Fees +}; + diff --git a/utils/fetchURL.ts b/utils/fetchURL.ts index 53e252c51e..bc6dcb302a 100644 --- a/utils/fetchURL.ts +++ b/utils/fetchURL.ts @@ -10,12 +10,12 @@ export default async function fetchURL(url: string, retries = 3) { } } -export async function postURL(url: string, data: any, retries = 3) { +export async function postURL(url: string, data: any, retries = 3, options?: AxiosRequestConfig) { try { - const res = await httpPost(url, data) + const res = await httpPost(url, data, options) return res } catch (error) { - if (retries > 0) return postURL(url, data, retries - 1) + if (retries > 0) return postURL(url, data, retries - 1, options) throw error } } From 84a985a37fd1f773f4354492c2c81e63a23858ba Mon Sep 17 00:00:00 2001 From: Rudy Date: Thu, 4 Jul 2024 10:12:03 +0800 Subject: [PATCH 0922/1590] del log --- dexs/raydium/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/dexs/raydium/index.ts b/dexs/raydium/index.ts index 13c4383133..5c422b5c70 100644 --- a/dexs/raydium/index.ts +++ b/dexs/raydium/index.ts @@ -19,7 +19,6 @@ const graphs = async (timestamp: number): Promise Date: Thu, 4 Jul 2024 10:28:49 +0800 Subject: [PATCH 0923/1590] update text --- fees/raydium.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/fees/raydium.ts b/fees/raydium.ts index 7a94ea2eca..63e226f4d6 100644 --- a/fees/raydium.ts +++ b/fees/raydium.ts @@ -15,12 +15,19 @@ const feeAdapter: BaseAdapter = getDexChainFees({ volumeAdapter, meta: { methodology: { - UserFees: "User pays 0.25% fees on each swap", - Fees: "A 0.25% of each swap is collected as trading fees", - SupplySideRevenue: "A 0.22% of the trades goes back to the LP pool as fees earned", - HoldersRevenue: "A 0.03% of the trade goes to buying RAY and distributing it to stakers", - ProtocolRevenue: "Raydium's AMM earns from the spread it places on the order book and all earnings from market making go back to Raydium liquidity providers", - Revenue: "A 0.03% of the trade goes to buying RAY and distributing it to stakers", + // UserFees: "User pays 0.25% fees on each swap", + // Fees: "A 0.25% of each swap is collected as trading fees", + // SupplySideRevenue: "A 0.22% of the trades goes back to the LP pool as fees earned", + // HoldersRevenue: "A 0.03% of the trade goes to buying RAY and distributing it to stakers", + // ProtocolRevenue: "Raydium's AMM earns from the spread it places on the order book and all earnings from market making go back to Raydium liquidity providers", + // Revenue: "A 0.03% of the trade goes to buying RAY and distributing it to stakers", + + UserFees: "User paid fees for swaps", + Fees: "Fees collected from swaps and pool creation fees", + SupplySideRevenue: "Total fees to liquidity providers", + HoldersRevenue: "RAY Buybacks", + ProtocolRevenue: "Revenue earned from buybacks, pool creation fees, and the DAO treasury", + Revenue: "A portion of all trading fees goes to buying back RAY", } } }); From 87e285c29daebd1e97e841fd1a784bf46f3da35d Mon Sep 17 00:00:00 2001 From: Rudy Date: Thu, 4 Jul 2024 10:41:28 +0800 Subject: [PATCH 0924/1590] update text --- fees/raydium.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/raydium.ts b/fees/raydium.ts index 63e226f4d6..0599069909 100644 --- a/fees/raydium.ts +++ b/fees/raydium.ts @@ -23,10 +23,10 @@ const feeAdapter: BaseAdapter = getDexChainFees({ // Revenue: "A 0.03% of the trade goes to buying RAY and distributing it to stakers", UserFees: "User paid fees for swaps", - Fees: "Fees collected from swaps and pool creation fees", + Fees: "Fees collected from swaps", SupplySideRevenue: "Total fees to liquidity providers", HoldersRevenue: "RAY Buybacks", - ProtocolRevenue: "Revenue earned from buybacks, pool creation fees, and the DAO treasury", + ProtocolRevenue: "Revenue earned from buybacks and DAO treasury", Revenue: "A portion of all trading fees goes to buying back RAY", } } From 9a7490ac6c8f9c075551a495ab24e5eca1d9b848 Mon Sep 17 00:00:00 2001 From: Lawson Graham Date: Wed, 3 Jul 2024 22:15:39 -0700 Subject: [PATCH 0925/1590] updated api routes to hit targets --- dexs/thalaswap/index.ts | 62 ++++++++++++++++++++++++++--------------- fees/move-dollar.ts | 30 ++++++++++++-------- fees/thalaswap.ts | 46 +++++++++++++++++------------- 3 files changed, 85 insertions(+), 53 deletions(-) diff --git a/dexs/thalaswap/index.ts b/dexs/thalaswap/index.ts index 8a5196f717..af9b624687 100644 --- a/dexs/thalaswap/index.ts +++ b/dexs/thalaswap/index.ts @@ -2,16 +2,20 @@ import fetchURL from "../../utils/fetchURL"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const thalaDappURL = 'https://app.thala.fi'; -const volumeQueryURL = `${thalaDappURL}/api/trading-volume-chart?timeframe=`; -const feesQueryURL = `${thalaDappURL}/api/trading-fee-chart?timeframe=`; -const protocolRatioQueryURL = `${thalaDappURL}/api/protocol-revenue-ratio`; +const thalaDappURL = "https://app.thala.fi"; +const volumeQueryURL = `${thalaDappURL}/api/defillama/trading-volume-chart?timeframe=`; +const feesQueryURL = `${thalaDappURL}/api/defillama/trading-fee-chart?timeframe=`; +const protocolRatioQueryURL = `${thalaDappURL}/api/defillama/protocol-revenue-ratio`; -const volumeEndpoint = (endTimestamp: number, timeframe: string) => -endTimestamp ? volumeQueryURL + timeframe + `&endTimestamp=${endTimestamp}` : volumeQueryURL + timeframe; +const volumeEndpoint = (endTimestamp: number, timeframe: string) => + endTimestamp + ? volumeQueryURL + timeframe + `&endTimestamp=${endTimestamp}` + : volumeQueryURL + timeframe; -const feesEndpoint = (endTimestamp: number, timeframe: string) => -endTimestamp ? feesQueryURL + timeframe + `&endTimestamp=${endTimestamp}` : feesQueryURL + timeframe; +const feesEndpoint = (endTimestamp: number, timeframe: string) => + endTimestamp + ? feesQueryURL + timeframe + `&endTimestamp=${endTimestamp}` + : feesQueryURL + timeframe; interface IVolumeall { value: number; @@ -19,21 +23,36 @@ interface IVolumeall { } const fetch = async (timestamp: number) => { - const dayVolumeQuery = (await fetchURL(volumeEndpoint(timestamp, "1D")))?.data.data; - const dailyVolume = dayVolumeQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); + const dayVolumeQuery = (await fetchURL(volumeEndpoint(timestamp, "1D")))?.data + .data; + const dailyVolume = dayVolumeQuery.reduce( + (partialSum: number, a: IVolumeall) => partialSum + a.value, + 0 + ); - const totalVolumeQuery = (await fetchURL(volumeEndpoint(0, "ALL")))?.data.data; - const totalVolume = totalVolumeQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); + const totalVolumeQuery = (await fetchURL(volumeEndpoint(0, "ALL")))?.data + .data; + const totalVolume = totalVolumeQuery.reduce( + (partialSum: number, a: IVolumeall) => partialSum + a.value, + 0 + ); - const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data.data; - const dailyFees = dayFeesQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); + const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data + .data; + const dailyFees = dayFeesQuery.reduce( + (partialSum: number, a: IVolumeall) => partialSum + a.value, + 0 + ); - const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data.data; - const totalFees = totalFeesQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); - - const protocolFeeRatio = (await fetchURL(protocolRatioQueryURL))?.data.data; - const dailyProtocolRevenue = dailyFees * protocolFeeRatio; - const totalProtocolRevenue = totalFees * protocolFeeRatio; + const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data.data; + const totalFees = totalFeesQuery.reduce( + (partialSum: number, a: IVolumeall) => partialSum + a.value, + 0 + ); + + const protocolFeeRatio = (await fetchURL(protocolRatioQueryURL))?.data.data; + const dailyProtocolRevenue = dailyFees * protocolFeeRatio; + const totalProtocolRevenue = totalFees * protocolFeeRatio; return { totalVolume: `${totalVolume}`, @@ -46,12 +65,11 @@ const fetch = async (timestamp: number) => { }; }; - const adapter: SimpleAdapter = { adapter: { [CHAIN.APTOS]: { fetch, - start: async () => 1680652406 + start: async () => 1680652406, }, }, }; diff --git a/fees/move-dollar.ts b/fees/move-dollar.ts index c405123d18..2cedfd90b0 100644 --- a/fees/move-dollar.ts +++ b/fees/move-dollar.ts @@ -2,11 +2,13 @@ import fetchURL from "../utils/fetchURL"; import { SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -const thalaDappURL = 'https://app.thala.fi'; -const feesQueryURL = `${thalaDappURL}/api/protocol-fee-chart?timeframe=`; +const thalaDappURL = "https://app.thala.fi"; +const feesQueryURL = `${thalaDappURL}/api/defillama/protocol-fee-chart?timeframe=`; -const feesEndpoint = (endTimestamp: number, timeframe: string) => -endTimestamp ? feesQueryURL + timeframe + `&endTimestamp=${endTimestamp}` : feesQueryURL + timeframe; +const feesEndpoint = (endTimestamp: number, timeframe: string) => + endTimestamp + ? feesQueryURL + timeframe + `&endTimestamp=${endTimestamp}` + : feesQueryURL + timeframe; interface IVolumeall { value: number; @@ -14,11 +16,18 @@ interface IVolumeall { } const fetch = async (timestamp: number) => { - const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data.data; - const dailyFees = dayFeesQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); - - const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data.data; - const totalFees = totalFeesQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); + const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data + .data; + const dailyFees = dayFeesQuery.reduce( + (partialSum: number, a: IVolumeall) => partialSum + a.value, + 0 + ); + + const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data.data; + const totalFees = totalFeesQuery.reduce( + (partialSum: number, a: IVolumeall) => partialSum + a.value, + 0 + ); return { totalFees: `${totalFees}`, @@ -27,12 +36,11 @@ const fetch = async (timestamp: number) => { }; }; - const adapter: SimpleAdapter = { adapter: { [CHAIN.APTOS]: { fetch, - start: async () => 1680652406 + start: async () => 1680652406, }, }, }; diff --git a/fees/thalaswap.ts b/fees/thalaswap.ts index 1f5559d8c0..420a333535 100644 --- a/fees/thalaswap.ts +++ b/fees/thalaswap.ts @@ -3,31 +3,38 @@ import { SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; -const thalaDappURL = 'https://app.thala.fi/'; -const volumeQueryURL = `${thalaDappURL}/api/trading-volume-chart?timeframe=`; -const feesQueryURL = `${thalaDappURL}/api/trading-fee-chart?timeframe=`; -const protocolRatioQueryURL = `${thalaDappURL}/api/protocol-revenue-ratio`; +const thalaDappURL = "https://app.thala.fi"; +const volumeQueryURL = `${thalaDappURL}/defillama/api/trading-volume-chart?timeframe=`; +const feesQueryURL = `${thalaDappURL}/api/defillama/trading-fee-chart?timeframe=`; +const protocolRatioQueryURL = `${thalaDappURL}/api/defillama/protocol-revenue-ratio`; -const feesEndpoint = (startTimestamp: number, timeframe: string) => -startTimestamp ? feesQueryURL + timeframe + `&startTimestamp=${startTimestamp}` : feesQueryURL + timeframe; - -const historicalEndpoint = "https://app.thala.fi/api/trading-fee-chart"; interface IVolumeall { value: number; timestamp: string; } -const fetch = async (timestamp: number) => { - const dayTime = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - const dayFeesQuery = (await fetchURL(historicalEndpoint))?.data.data; - const dailyFees = dayFeesQuery.find((a:IVolumeall) => Number(a.timestamp) === dayTime)?.value; - - const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data.data; - const totalFees = totalFeesQuery.reduce((partialSum: number, a: IVolumeall) => partialSum + a.value, 0); +const feesEndpoint = (endTimestamp: number, timeframe: string) => + endTimestamp + ? feesQueryURL + timeframe + `&endTimestamp=${endTimestamp}` + : feesQueryURL + timeframe; - const protocolFeeRatio = (await fetchURL(protocolRatioQueryURL))?.data.data; - const dailyProtocolRevenue = dailyFees * protocolFeeRatio; - const totalProtocolRevenue = totalFees * protocolFeeRatio; +const fetch = async (timestamp: number) => { + const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data + .data; + const dailyFees = dayFeesQuery.reduce( + (partialSum: number, a: IVolumeall) => partialSum + a.value, + 0 + ); + + const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data.data; + const totalFees = totalFeesQuery.reduce( + (partialSum: number, a: IVolumeall) => partialSum + a.value, + 0 + ); + + const protocolFeeRatio = (await fetchURL(protocolRatioQueryURL))?.data.data; + const dailyProtocolRevenue = dailyFees * protocolFeeRatio; + const totalProtocolRevenue = totalFees * protocolFeeRatio; return { totalFees: `${totalFees}`, @@ -38,12 +45,11 @@ const fetch = async (timestamp: number) => { }; }; - const adapter: SimpleAdapter = { adapter: { [CHAIN.APTOS]: { fetch, - start: async () => 1680480000 + start: async () => 1680480000, }, }, }; From 642ae71ddade16e8cafc40e520a516c3e4baa0c0 Mon Sep 17 00:00:00 2001 From: Lawson Graham Date: Wed, 3 Jul 2024 22:27:55 -0700 Subject: [PATCH 0926/1590] cleanup --- fees/thalaswap.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/fees/thalaswap.ts b/fees/thalaswap.ts index 420a333535..b14cda8d27 100644 --- a/fees/thalaswap.ts +++ b/fees/thalaswap.ts @@ -4,7 +4,6 @@ import { CHAIN } from "../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; const thalaDappURL = "https://app.thala.fi"; -const volumeQueryURL = `${thalaDappURL}/defillama/api/trading-volume-chart?timeframe=`; const feesQueryURL = `${thalaDappURL}/api/defillama/trading-fee-chart?timeframe=`; const protocolRatioQueryURL = `${thalaDappURL}/api/defillama/protocol-revenue-ratio`; From 1598f8826cd8f3d137701311bf4ef251dab6d89f Mon Sep 17 00:00:00 2001 From: Lawson Graham Date: Wed, 3 Jul 2024 22:43:29 -0700 Subject: [PATCH 0927/1590] fix --- fees/thalaswap.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fees/thalaswap.ts b/fees/thalaswap.ts index 618010769b..b38523aa53 100644 --- a/fees/thalaswap.ts +++ b/fees/thalaswap.ts @@ -1,7 +1,6 @@ import fetchURL from "../utils/fetchURL"; import { SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; const thalaDappURL = "https://app.thala.fi"; const feesQueryURL = `${thalaDappURL}/api/defillama/trading-fee-chart?timeframe=`; @@ -18,20 +17,21 @@ const feesEndpoint = (endTimestamp: number, timeframe: string) => : feesQueryURL + timeframe; const fetch = async (timestamp: number) => { - const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data - .data; + const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data; const dailyFees = dayFeesQuery.reduce( (partialSum: number, a: IVolumeall) => partialSum + a.value, 0 ); - const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data.data; + const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data; + console.log(totalFeesQuery); const totalFees = totalFeesQuery.reduce( (partialSum: number, a: IVolumeall) => partialSum + a.value, 0 ); - const protocolFeeRatio = (await fetchURL(protocolRatioQueryURL))?.data.data; + const protocolFeeRatio = (await fetchURL(protocolRatioQueryURL))?.data; + console.log(protocolFeeRatio); const dailyProtocolRevenue = dailyFees * protocolFeeRatio; const totalProtocolRevenue = totalFees * protocolFeeRatio; @@ -48,7 +48,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.APTOS]: { fetch, - start: 1680480000 + start: async () => 1680480000, }, }, }; From 90d294ce1a4c2bfce2c29d5b48fc8ae9a82dfc3d Mon Sep 17 00:00:00 2001 From: Lawson Graham Date: Wed, 3 Jul 2024 22:44:52 -0700 Subject: [PATCH 0928/1590] nit --- dexs/thalaswap/index.ts | 16 +++++++--------- fees/move-dollar.ts | 7 +++---- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/dexs/thalaswap/index.ts b/dexs/thalaswap/index.ts index db5f4fd73c..01e8c2f2cf 100644 --- a/dexs/thalaswap/index.ts +++ b/dexs/thalaswap/index.ts @@ -23,34 +23,32 @@ interface IVolumeall { } const fetch = async (timestamp: number) => { - const dayVolumeQuery = (await fetchURL(volumeEndpoint(timestamp, "1D")))?.data - .data; + const dayVolumeQuery = (await fetchURL(volumeEndpoint(timestamp, "1D"))) + ?.data; const dailyVolume = dayVolumeQuery.reduce( (partialSum: number, a: IVolumeall) => partialSum + a.value, 0 ); - const totalVolumeQuery = (await fetchURL(volumeEndpoint(0, "ALL")))?.data - .data; + const totalVolumeQuery = (await fetchURL(volumeEndpoint(0, "ALL")))?.data; const totalVolume = totalVolumeQuery.reduce( (partialSum: number, a: IVolumeall) => partialSum + a.value, 0 ); - const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data - .data; + const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data; const dailyFees = dayFeesQuery.reduce( (partialSum: number, a: IVolumeall) => partialSum + a.value, 0 ); - const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data.data; + const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data; const totalFees = totalFeesQuery.reduce( (partialSum: number, a: IVolumeall) => partialSum + a.value, 0 ); - const protocolFeeRatio = (await fetchURL(protocolRatioQueryURL))?.data.data; + const protocolFeeRatio = (await fetchURL(protocolRatioQueryURL))?.data; const dailyProtocolRevenue = dailyFees * protocolFeeRatio; const totalProtocolRevenue = totalFees * protocolFeeRatio; @@ -69,7 +67,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.APTOS]: { fetch, - start: 1680652406 + start: 1680652406, }, }, }; diff --git a/fees/move-dollar.ts b/fees/move-dollar.ts index d93669ce7e..78e97c11ad 100644 --- a/fees/move-dollar.ts +++ b/fees/move-dollar.ts @@ -16,14 +16,13 @@ interface IVolumeall { } const fetch = async (timestamp: number) => { - const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data - .data; + const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data; const dailyFees = dayFeesQuery.reduce( (partialSum: number, a: IVolumeall) => partialSum + a.value, 0 ); - const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data.data; + const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data; const totalFees = totalFeesQuery.reduce( (partialSum: number, a: IVolumeall) => partialSum + a.value, 0 @@ -40,7 +39,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.APTOS]: { fetch, - start: 1680652406 + start: 1680652406, }, }, }; From 1ac45bb7e44392259221a9e20f790df3fbc2e9e8 Mon Sep 17 00:00:00 2001 From: Lawson Graham Date: Wed, 3 Jul 2024 22:45:42 -0700 Subject: [PATCH 0929/1590] nit --- fees/thalaswap.ts | 2 - yarn.lock | 2456 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2456 insertions(+), 2 deletions(-) create mode 100644 yarn.lock diff --git a/fees/thalaswap.ts b/fees/thalaswap.ts index b38523aa53..be77129522 100644 --- a/fees/thalaswap.ts +++ b/fees/thalaswap.ts @@ -24,14 +24,12 @@ const fetch = async (timestamp: number) => { ); const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data; - console.log(totalFeesQuery); const totalFees = totalFeesQuery.reduce( (partialSum: number, a: IVolumeall) => partialSum + a.value, 0 ); const protocolFeeRatio = (await fetchURL(protocolRatioQueryURL))?.data; - console.log(protocolFeeRatio); const dailyProtocolRevenue = dailyFees * protocolFeeRatio; const totalProtocolRevenue = totalFees * protocolFeeRatio; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..fea51893d8 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2456 @@ +# 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.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.609.0.tgz#bf1b9ea83f2e648452273e8739d833ff936341cf" + integrity sha512-lh8NxL9qm8eSphEcsTGjNMArYRlga4yTZCr3d7UPCRFiV1oz3e0EIA5EnxSriYi9P5Houi5d9GSWtPOel2mAow== + 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.609.0" + "@aws-sdk/client-sts" "3.609.0" + "@aws-sdk/core" "3.609.0" + "@aws-sdk/credential-provider-node" "3.609.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.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.609.0.tgz#66b3cdf6c1ede12423046ea0d0b5889655565e1a" + integrity sha512-0bNPAyPdkWkS9EGB2A9BZDkBNrnVCBzk5lYRezoT4K3/gi9w1DTYH5tuRdwaTZdxW19U1mq7CV0YJJARKO1L9Q== + 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.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-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.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.609.0.tgz#ac373baf1d4c02adcf6162f0a6f099607046a44c" + integrity sha512-A0B3sDKFoFlGo8RYRjDBWHXpbgirer2bZBkCIzhSPHc1vOFHt/m2NcUoE2xnBKXJFrptL1xDkvo1P+XYp/BfcQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.609.0" + "@aws-sdk/core" "3.609.0" + "@aws-sdk/credential-provider-node" "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/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.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.609.0.tgz#836c042a012bf1b9ff9df9ae9e3d876bb492c82e" + integrity sha512-GQQfB9Mk4XUZwaPsk4V3w8MqleS6ApkZKVQn3vTLAKa8Y7B2Imcpe5zWbKYjDd8MPpMWjHcBGFTVlDRFP4zwSQ== + 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.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.609.0.tgz#5b569a7fb8cddd0fecb1dd6444ae0599fb27121e" + integrity sha512-hwaBfXuBTv6/eAdEsDfGcteYUW6Km7lvvubbxEdxIuJNF3vswR7RMGIXaEC37hhPkTTgd3H0TONammhwZIfkog== + dependencies: + "@aws-sdk/credential-provider-env" "3.609.0" + "@aws-sdk/credential-provider-http" "3.609.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.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.609.0.tgz#9abcf6c9104310cc4fba70d95f0b9029ba54dea9" + integrity sha512-4J8/JRuqfxJDGD9jTHVCBxCvYt7/Vgj2Stlhj930mrjFPO/yRw8ilAAZxBWe0JHPX3QwepCmh4ErZe53F5ysxQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.609.0" + "@aws-sdk/credential-provider-http" "3.609.0" + "@aws-sdk/credential-provider-ini" "3.609.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.71" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.71.tgz#948a63441957c8844347d32470489b7b6c7b05c8" + integrity sha512-5hZ8TdYIrFa/f4hxb2ADzARmXxeuG5P8yukuQwNbiO8EnLcrDNPKwv5JXNaslWkMexlaeVy1m+EMLnTlbzeQSw== + 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.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@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": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.4.tgz#85fffa86cee4562f867b0a70a374057a48525d1b" + integrity sha512-VwiOk7TwXoE7NlNguV/aPq1hFH72tqkHCw8eWXbr2xHspRyyv9DLpLXhq+Ieje+NwoqXrY0xyQjPXdOE6cGcHA== + dependencies: + "@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" + +"@smithy/core@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.2.4.tgz#a83d62fc685ff95ad3133d55d7e365a51526a436" + integrity sha512-qdY3LpMOUyLM/gfjjMQZui+UTNS7kBRDWlvyIhVOql5dn2J3isk9qUTBtQ1CbDH8MTugHis1zu3h4rH+Qmmh4g== + dependencies: + "@smithy/middleware-endpoint" "^3.0.4" + "@smithy/middleware-retry" "^3.0.7" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/protocol-http" "^4.0.3" + "@smithy/smithy-client" "^3.1.5" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.3.tgz#43e6c2d1e3df6bb6bb28bfae6b99c5a4d93bda09" + integrity sha512-U1Yrv6hx/mRK6k8AncuI6jLUx9rn0VVSd9NPEX6pyYFBfkSkChOc/n4zUb8alHUVg83TbI4OdZVo1X0Zfj3ijA== + dependencies: + "@smithy/node-config-provider" "^3.1.3" + "@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": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.0.tgz#425ce7686bf20176b38f8013ed7fb28302a88929" + integrity sha512-vFvDxMrc6sO5Atec8PaISckMcAwsCrRhYxwUylg97bRT2KZoumOF7qk5+6EVUtuM1IG9AJV5aqXnHln9ZdXHpg== + 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": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.4.tgz#c18518b21c80887c16fb595b156c7c009b0b64ca" + integrity sha512-whUJMEPwl3ANIbXjBXZVdJNgfV2ZU8ayln7xUM47rXL2txuenI7jQ/VFFwCzy5lCmXScjp6zYtptW5Evud8e9g== + dependencies: + "@smithy/middleware-serde" "^3.0.3" + "@smithy/node-config-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.3" + "@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": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.7.tgz#b42d90b3ecc392fdfeda1eff9dc7a023ba11d34b" + integrity sha512-f5q7Y09G+2h5ivkSx5CHvlAT4qRR3jBFEsfXyQ9nFNiWQlr8c48blnu5cmbTQ+p1xmIO14UXzKoF8d7Tm0Gsjw== + dependencies: + "@smithy/node-config-provider" "^3.1.3" + "@smithy/protocol-http" "^4.0.3" + "@smithy/service-error-classification" "^3.0.3" + "@smithy/smithy-client" "^3.1.5" + "@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": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.3.tgz#e8e69d0df5be9d6ed3f3a84f51fd2176f09c7ab8" + integrity sha512-rxdpAZczzholz6CYZxtqDu/aKTxATD5DAUDVj7HoEulq+pDSQVWzbg0btZDlxeFfa6bb2b5tUvgdX5+k8jUqcg== + dependencies: + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.1.tgz#9213d9b5139c9f9c5a1928e1574de767a979bf94" + integrity sha512-L71NLyPeP450r2J/mfu1jMc//Z1YnqJt2eSNw7uhiItaONnBLDA68J5jgxq8+MBDsYnFwNAIc7dBG1ImiWBiwg== + 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": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.3.tgz#49a5e0e8cd98d219e7e56860586710b146d52ade" + integrity sha512-Z8Y3+08vgoDgl4HENqNnnzSISAaGrF2RoKupoC47u2wiMp+Z8P/8mDh1CL8+8ujfi2U5naNvopSBmP/BUj8b5w== + 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": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.5.tgz#3956f0b511c3a51f859c45eb11bfd70ae00c5fec" + integrity sha512-x9bL9Mx2CT2P1OiUlHM+ZNpbVU6TgT32f9CmTRzqIHA7M4vYrROCWEoC3o4xHNJASoGd4Opos3cXYPgh+/m4Ww== + dependencies: + "@smithy/middleware-endpoint" "^3.0.4" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/protocol-http" "^4.0.3" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.0.5" + 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.7" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.7.tgz#5868ae56c9ae4a3532c175f9c0ee281a41065215" + integrity sha512-Q2txLyvQyGfmjsaDbVV7Sg8psefpFcrnlGapDzXGFRPFKRBeEg6OvFK8FljqjeHSaCZ6/UuzQExUPqBR/2qlDA== + dependencies: + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.1.5" + "@smithy/types" "^3.3.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.7.tgz#e802ca57df6b8543dc288524d3894a6c357b51fc" + integrity sha512-F4Qcj1fG6MGi2BSWCslfsMSwllws/WzYONBGtLybyY+halAcXdWhcew+mej8M5SKd5hqPYp4f7b+ABQEaeytgg== + dependencies: + "@smithy/config-resolver" "^3.0.4" + "@smithy/credential-provider-imds" "^3.1.3" + "@smithy/node-config-provider" "^3.1.3" + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.1.5" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.4.tgz#0cfb01deb42ec5cd819b54e85acb2c32e4ba4385" + integrity sha512-ZAtNf+vXAsgzgRutDDiklU09ZzZiiV/nATyqde4Um4priTmasDH+eLpp3tspL0hS2dEootyFMhu1Y6Y+tzpWBQ== + dependencies: + "@smithy/node-config-provider" "^3.1.3" + "@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": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.5.tgz#8ca98441e1deedfc4ec8d3fee9aa4342fdbc484f" + integrity sha512-xC3L5PKMAT/Bh8fmHNXP9sdQ4+4aKVUU3EEJ2CF/lLk7R+wtMJM+v/1B4en7jO++Wa5spGzFDBCl0QxgbUc5Ug== + dependencies: + "@smithy/fetch-http-handler" "^3.2.0" + "@smithy/node-http-handler" "^3.1.1" + "@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.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420" + integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg== + 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.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5" + integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w== + 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.0" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" + integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== + 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.3.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.3.0.tgz#4a4aaf10c84658ab70f79a85a9a3f1e1fb11196b" + integrity sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ== + +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": + 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@^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@^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": + 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@^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@^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 6fdb1545c72234f7a13996bdd845b09728ba06b1 Mon Sep 17 00:00:00 2001 From: Lawson Graham <45542987+LawsonGraham@users.noreply.github.com> Date: Wed, 3 Jul 2024 22:46:46 -0700 Subject: [PATCH 0930/1590] Delete yarn.lock --- yarn.lock | 2456 ----------------------------------------------------- 1 file changed, 2456 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index fea51893d8..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2456 +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.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.609.0.tgz#bf1b9ea83f2e648452273e8739d833ff936341cf" - integrity sha512-lh8NxL9qm8eSphEcsTGjNMArYRlga4yTZCr3d7UPCRFiV1oz3e0EIA5EnxSriYi9P5Houi5d9GSWtPOel2mAow== - 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.609.0" - "@aws-sdk/client-sts" "3.609.0" - "@aws-sdk/core" "3.609.0" - "@aws-sdk/credential-provider-node" "3.609.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.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.609.0.tgz#66b3cdf6c1ede12423046ea0d0b5889655565e1a" - integrity sha512-0bNPAyPdkWkS9EGB2A9BZDkBNrnVCBzk5lYRezoT4K3/gi9w1DTYH5tuRdwaTZdxW19U1mq7CV0YJJARKO1L9Q== - 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.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-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.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.609.0.tgz#ac373baf1d4c02adcf6162f0a6f099607046a44c" - integrity sha512-A0B3sDKFoFlGo8RYRjDBWHXpbgirer2bZBkCIzhSPHc1vOFHt/m2NcUoE2xnBKXJFrptL1xDkvo1P+XYp/BfcQ== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.609.0" - "@aws-sdk/core" "3.609.0" - "@aws-sdk/credential-provider-node" "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/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.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.609.0.tgz#836c042a012bf1b9ff9df9ae9e3d876bb492c82e" - integrity sha512-GQQfB9Mk4XUZwaPsk4V3w8MqleS6ApkZKVQn3vTLAKa8Y7B2Imcpe5zWbKYjDd8MPpMWjHcBGFTVlDRFP4zwSQ== - 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.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.609.0.tgz#5b569a7fb8cddd0fecb1dd6444ae0599fb27121e" - integrity sha512-hwaBfXuBTv6/eAdEsDfGcteYUW6Km7lvvubbxEdxIuJNF3vswR7RMGIXaEC37hhPkTTgd3H0TONammhwZIfkog== - dependencies: - "@aws-sdk/credential-provider-env" "3.609.0" - "@aws-sdk/credential-provider-http" "3.609.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.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.609.0.tgz#9abcf6c9104310cc4fba70d95f0b9029ba54dea9" - integrity sha512-4J8/JRuqfxJDGD9jTHVCBxCvYt7/Vgj2Stlhj930mrjFPO/yRw8ilAAZxBWe0JHPX3QwepCmh4ErZe53F5ysxQ== - dependencies: - "@aws-sdk/credential-provider-env" "3.609.0" - "@aws-sdk/credential-provider-http" "3.609.0" - "@aws-sdk/credential-provider-ini" "3.609.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.71" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.71.tgz#948a63441957c8844347d32470489b7b6c7b05c8" - integrity sha512-5hZ8TdYIrFa/f4hxb2ADzARmXxeuG5P8yukuQwNbiO8EnLcrDNPKwv5JXNaslWkMexlaeVy1m+EMLnTlbzeQSw== - 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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.4.tgz#85fffa86cee4562f867b0a70a374057a48525d1b" - integrity sha512-VwiOk7TwXoE7NlNguV/aPq1hFH72tqkHCw8eWXbr2xHspRyyv9DLpLXhq+Ieje+NwoqXrY0xyQjPXdOE6cGcHA== - dependencies: - "@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" - -"@smithy/core@^2.2.4": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.2.4.tgz#a83d62fc685ff95ad3133d55d7e365a51526a436" - integrity sha512-qdY3LpMOUyLM/gfjjMQZui+UTNS7kBRDWlvyIhVOql5dn2J3isk9qUTBtQ1CbDH8MTugHis1zu3h4rH+Qmmh4g== - dependencies: - "@smithy/middleware-endpoint" "^3.0.4" - "@smithy/middleware-retry" "^3.0.7" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.5" - "@smithy/types" "^3.3.0" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.3.tgz#43e6c2d1e3df6bb6bb28bfae6b99c5a4d93bda09" - integrity sha512-U1Yrv6hx/mRK6k8AncuI6jLUx9rn0VVSd9NPEX6pyYFBfkSkChOc/n4zUb8alHUVg83TbI4OdZVo1X0Zfj3ijA== - dependencies: - "@smithy/node-config-provider" "^3.1.3" - "@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": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.0.tgz#425ce7686bf20176b38f8013ed7fb28302a88929" - integrity sha512-vFvDxMrc6sO5Atec8PaISckMcAwsCrRhYxwUylg97bRT2KZoumOF7qk5+6EVUtuM1IG9AJV5aqXnHln9ZdXHpg== - 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": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.4.tgz#c18518b21c80887c16fb595b156c7c009b0b64ca" - integrity sha512-whUJMEPwl3ANIbXjBXZVdJNgfV2ZU8ayln7xUM47rXL2txuenI7jQ/VFFwCzy5lCmXScjp6zYtptW5Evud8e9g== - dependencies: - "@smithy/middleware-serde" "^3.0.3" - "@smithy/node-config-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.3" - "@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": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.7.tgz#b42d90b3ecc392fdfeda1eff9dc7a023ba11d34b" - integrity sha512-f5q7Y09G+2h5ivkSx5CHvlAT4qRR3jBFEsfXyQ9nFNiWQlr8c48blnu5cmbTQ+p1xmIO14UXzKoF8d7Tm0Gsjw== - dependencies: - "@smithy/node-config-provider" "^3.1.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/service-error-classification" "^3.0.3" - "@smithy/smithy-client" "^3.1.5" - "@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": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.3.tgz#e8e69d0df5be9d6ed3f3a84f51fd2176f09c7ab8" - integrity sha512-rxdpAZczzholz6CYZxtqDu/aKTxATD5DAUDVj7HoEulq+pDSQVWzbg0btZDlxeFfa6bb2b5tUvgdX5+k8jUqcg== - dependencies: - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.1.tgz#9213d9b5139c9f9c5a1928e1574de767a979bf94" - integrity sha512-L71NLyPeP450r2J/mfu1jMc//Z1YnqJt2eSNw7uhiItaONnBLDA68J5jgxq8+MBDsYnFwNAIc7dBG1ImiWBiwg== - 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": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.3.tgz#49a5e0e8cd98d219e7e56860586710b146d52ade" - integrity sha512-Z8Y3+08vgoDgl4HENqNnnzSISAaGrF2RoKupoC47u2wiMp+Z8P/8mDh1CL8+8ujfi2U5naNvopSBmP/BUj8b5w== - 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": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.5.tgz#3956f0b511c3a51f859c45eb11bfd70ae00c5fec" - integrity sha512-x9bL9Mx2CT2P1OiUlHM+ZNpbVU6TgT32f9CmTRzqIHA7M4vYrROCWEoC3o4xHNJASoGd4Opos3cXYPgh+/m4Ww== - dependencies: - "@smithy/middleware-endpoint" "^3.0.4" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.0.5" - 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.7" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.7.tgz#5868ae56c9ae4a3532c175f9c0ee281a41065215" - integrity sha512-Q2txLyvQyGfmjsaDbVV7Sg8psefpFcrnlGapDzXGFRPFKRBeEg6OvFK8FljqjeHSaCZ6/UuzQExUPqBR/2qlDA== - dependencies: - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.1.5" - "@smithy/types" "^3.3.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.7.tgz#e802ca57df6b8543dc288524d3894a6c357b51fc" - integrity sha512-F4Qcj1fG6MGi2BSWCslfsMSwllws/WzYONBGtLybyY+halAcXdWhcew+mej8M5SKd5hqPYp4f7b+ABQEaeytgg== - dependencies: - "@smithy/config-resolver" "^3.0.4" - "@smithy/credential-provider-imds" "^3.1.3" - "@smithy/node-config-provider" "^3.1.3" - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.1.5" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.4.tgz#0cfb01deb42ec5cd819b54e85acb2c32e4ba4385" - integrity sha512-ZAtNf+vXAsgzgRutDDiklU09ZzZiiV/nATyqde4Um4priTmasDH+eLpp3tspL0hS2dEootyFMhu1Y6Y+tzpWBQ== - dependencies: - "@smithy/node-config-provider" "^3.1.3" - "@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": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.5.tgz#8ca98441e1deedfc4ec8d3fee9aa4342fdbc484f" - integrity sha512-xC3L5PKMAT/Bh8fmHNXP9sdQ4+4aKVUU3EEJ2CF/lLk7R+wtMJM+v/1B4en7jO++Wa5spGzFDBCl0QxgbUc5Ug== - dependencies: - "@smithy/fetch-http-handler" "^3.2.0" - "@smithy/node-http-handler" "^3.1.1" - "@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.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420" - integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg== - 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.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5" - integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w== - 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.0" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" - integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== - 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.3.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.3.0.tgz#4a4aaf10c84658ab70f79a85a9a3f1e1fb11196b" - integrity sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ== - -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": - 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@^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@^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": - 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@^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@^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 6da0c4114847708d0cd37e31f4c8b4f038c5c024 Mon Sep 17 00:00:00 2001 From: "bryan.y" Date: Thu, 4 Jul 2024 16:59:37 +0800 Subject: [PATCH 0931/1590] feat: fees for multi chain and add bsc v1 totalVolume --- dexs/apollox/index.ts | 48 +++++++++++++++++++++++++++++-------------- fees/apollox/index.ts | 31 ++++++++++++++++++++-------- 2 files changed, 55 insertions(+), 24 deletions(-) diff --git a/dexs/apollox/index.ts b/dexs/apollox/index.ts index 96d1ca796e..558c6c8e06 100644 --- a/dexs/apollox/index.ts +++ b/dexs/apollox/index.ts @@ -35,18 +35,27 @@ type V1TickerItem = { count: number; }; +type TotalVolumeV1AndV2ForBscItem = { + "openInterestTotal": string + "totalUser": string + "v1TotalVolume": string + "v2TotalVolume": string +} + + type TotalVolumeItem = { - "alpFeeVOFor24Hour": { - "fee": number - "revenue": number + "alpFeeVOFor24Hour": { + "fee": number + "revenue": number }, "allAlpFeeVO": { "fee": number "revenue": number - }, - "cumVol": number -} - + }, + "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" const v2VolumeAPI = @@ -70,26 +79,35 @@ const fetchV1Volume = async () => { return dailyVolume }; -const fetchTotalVolume = async (chain: Chain) => { +const fetchTotalVolumeV1AndV2ForBSC = async () => { + const data = ( + await httpGet(TotalVolumeV1AndV2ForBscAPI) + ) as TotalVolumeV1AndV2ForBscItem + return { v1: Number(data.v1TotalVolume), v2: Number(data.v2TotalVolume) } +}; + +const fetchTotalV2Volume = async (chain: Chain) => { const { data } = ( await httpGet(TotalVolumeAPI, { params: { chain, } }) ) as { data: TotalVolumeItem } - return data.cumVol + return Number(data.cumVol) }; + const adapter: SimpleAdapter = { adapter: { [CHAIN.BSC]: { runAtCurrTime: true, fetch: async (timestamp) => { - const [v1, v2, totalVolume] = await Promise.all([ + const [v1, v2, totalV2Volume, { v1 : totalV1Volume }] = await Promise.all([ fetchV2Volume(CHAIN.BSC), fetchV1Volume(), - fetchTotalVolume(CHAIN.BSC), + fetchTotalV2Volume(CHAIN.BSC), + fetchTotalVolumeV1AndV2ForBSC() ]); return { dailyVolume: v1 + v2, - totalVolume, + totalVolume: totalV1Volume + totalV2Volume, timestamp, }; }, @@ -100,7 +118,7 @@ const adapter: SimpleAdapter = { fetch: async (timestamp) => { const [v2, totalVolume] = await Promise.all([ fetchV2Volume(CHAIN.ARBITRUM), - fetchTotalVolume(CHAIN.ARBITRUM), + fetchTotalV2Volume(CHAIN.ARBITRUM), ]); return { timestamp, @@ -115,7 +133,7 @@ const adapter: SimpleAdapter = { fetch: async (timestamp) => { const [v2, totalVolume] = await Promise.all([ fetchV2Volume('opbnb'), - fetchTotalVolume('opbnb'), + fetchTotalV2Volume('opbnb'), ]); return { timestamp, @@ -130,7 +148,7 @@ const adapter: SimpleAdapter = { fetch: async (timestamp) => { const [v2, totalVolume] = await Promise.all([ fetchV2Volume(CHAIN.BASE), - fetchTotalVolume(CHAIN.BASE), + fetchTotalV2Volume(CHAIN.BASE), ]); return { timestamp, diff --git a/fees/apollox/index.ts b/fees/apollox/index.ts index 6e8294cf91..cedd0e4e60 100644 --- a/fees/apollox/index.ts +++ b/fees/apollox/index.ts @@ -1,16 +1,14 @@ -import { Adapter, ChainEndpoints, FetchOptions } from "../../adapters/types"; +import { Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; import { httpGet } from "../../utils/fetchURL"; -const endpoints = { - [CHAIN.BSC]: "https://www.apollox.finance/bapi/futures/v1/public/future/apx/fee/all", -} +const FeesAndRevenueURL = "https://www.apollox.finance/bapi/futures/v1/public/future/apx/fee/all" -const request = (urls: ChainEndpoints) => { +const request = () => { return (chain: Chain) => { return async () => { - const { data } = await httpGet(urls[chain]); + const { data } = await httpGet(FeesAndRevenueURL, { params: { chain } }) const { alpFeeVOFor24Hour, allAlpFeeVO } = data return { dailyFees: alpFeeVOFor24Hour.fee || 0, @@ -26,10 +24,25 @@ const adapter: Adapter = { adapter: { [CHAIN.BSC]: { runAtCurrTime: true, - fetch: request(endpoints)(CHAIN.BSC), + fetch: request()(CHAIN.BSC), + start: 1689609600, + }, + [CHAIN.ARBITRUM]: { + runAtCurrTime: true, + fetch: request()(CHAIN.ARBITRUM), + start: 1689609600, + }, + [CHAIN.OP_BNB]: { + runAtCurrTime: true, + fetch: request()('opbnb'), + start: 1689609600, + }, + [CHAIN.BASE]: { + runAtCurrTime: true, + fetch: request()(CHAIN.BASE), start: 1689609600, - }, - }, + } + } } export default adapter; From eb188fc77bfda0ac6abd55e8e7b58bfb7c6f7688 Mon Sep 17 00:00:00 2001 From: dtmkeng <0xgnek@gmail.com> Date: Thu, 4 Jul 2024 19:07:04 +0700 Subject: [PATCH 0932/1590] Delete yarn.lock --- yarn.lock | 2435 ----------------------------------------------------- 1 file changed, 2435 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 039a4b523c..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2435 +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.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.600.0.tgz#3ce415d9257b8d1c8385bc26c6c86e6403aff83c" - integrity sha512-iYoKbJTputbf+ubkX6gSK/y/4uJEBRaXZ18jykLdBQ8UJuGrk2gqvV8h7OlGAhToCeysmmMqM0vDWyLt6lP8nw== - 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.600.0" - "@aws-sdk/client-sts" "3.600.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/credential-provider-node" "3.600.0" - "@aws-sdk/middleware-bucket-endpoint" "3.598.0" - "@aws-sdk/middleware-expect-continue" "3.598.0" - "@aws-sdk/middleware-flexible-checksums" "3.598.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-location-constraint" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-sdk-s3" "3.598.0" - "@aws-sdk/middleware-signing" "3.598.0" - "@aws-sdk/middleware-ssec" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/signature-v4-multi-region" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@aws-sdk/xml-builder" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/eventstream-serde-browser" "^3.0.2" - "@smithy/eventstream-serde-config-resolver" "^3.0.1" - "@smithy/eventstream-serde-node" "^3.0.2" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-blob-browser" "^3.1.0" - "@smithy/hash-node" "^3.0.1" - "@smithy/hash-stream-node" "^3.1.0" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/md5-js" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@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.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-stream" "^3.0.2" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.0.1" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.600.0": - version "3.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz#37966020af55a052822b9ef21adc38d2afcb0f34" - integrity sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sts" "3.600.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/credential-provider-node" "3.600.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-node" "^3.0.1" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@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.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-middleware" "^3.0.1" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz#aef58e198e504d3b3d1ba345355650a67d21facb" - integrity sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-node" "^3.0.1" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@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.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-middleware" "^3.0.1" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.600.0": - version "3.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz#8a437f8cf626cf652f99628105576213dbba48b2" - integrity sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.600.0" - "@aws-sdk/core" "3.598.0" - "@aws-sdk/credential-provider-node" "3.600.0" - "@aws-sdk/middleware-host-header" "3.598.0" - "@aws-sdk/middleware-logger" "3.598.0" - "@aws-sdk/middleware-recursion-detection" "3.598.0" - "@aws-sdk/middleware-user-agent" "3.598.0" - "@aws-sdk/region-config-resolver" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@aws-sdk/util-user-agent-browser" "3.598.0" - "@aws-sdk/util-user-agent-node" "3.598.0" - "@smithy/config-resolver" "^3.0.2" - "@smithy/core" "^2.2.1" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/hash-node" "^3.0.1" - "@smithy/invalid-dependency" "^3.0.1" - "@smithy/middleware-content-length" "^3.0.1" - "@smithy/middleware-endpoint" "^3.0.2" - "@smithy/middleware-retry" "^3.0.4" - "@smithy/middleware-serde" "^3.0.1" - "@smithy/middleware-stack" "^3.0.1" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/url-parser" "^3.0.1" - "@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.4" - "@smithy/util-defaults-mode-node" "^3.0.4" - "@smithy/util-endpoints" "^2.0.2" - "@smithy/util-middleware" "^3.0.1" - "@smithy/util-retry" "^3.0.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.598.0.tgz#82a069d703be0cafe3ddeacb1de51981ee4faa25" - integrity sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g== - dependencies: - "@smithy/core" "^2.2.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz#ea1f30cfc9948017dd0608518868d3f50074164f" - integrity sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz#58144440e698aef63b5cb459780325817c0acf10" - integrity sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/fetch-http-handler" "^3.0.2" - "@smithy/node-http-handler" "^3.0.1" - "@smithy/property-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/util-stream" "^3.0.2" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz#fd0ba8ab5c3701e05567d1c6f7752cfd9f4ba111" - integrity sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA== - dependencies: - "@aws-sdk/credential-provider-env" "3.598.0" - "@aws-sdk/credential-provider-http" "3.598.0" - "@aws-sdk/credential-provider-process" "3.598.0" - "@aws-sdk/credential-provider-sso" "3.598.0" - "@aws-sdk/credential-provider-web-identity" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/credential-provider-imds" "^3.1.1" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.600.0": - version "3.600.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz#33b32364972bd7167d000cdded92b9398346a3ca" - integrity sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw== - dependencies: - "@aws-sdk/credential-provider-env" "3.598.0" - "@aws-sdk/credential-provider-http" "3.598.0" - "@aws-sdk/credential-provider-ini" "3.598.0" - "@aws-sdk/credential-provider-process" "3.598.0" - "@aws-sdk/credential-provider-sso" "3.598.0" - "@aws-sdk/credential-provider-web-identity" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/credential-provider-imds" "^3.1.1" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz#f48ff6f964cd6726499b207f45bfecda4be922ce" - integrity sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz#52781e2b60b1f61752829c44a5e0b9fedd0694d6" - integrity sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA== - dependencies: - "@aws-sdk/client-sso" "3.598.0" - "@aws-sdk/token-providers" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz#d737e9c2b7c4460b8e31a55b4979bf4d88913900" - integrity sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.598.0.tgz#033b08921f9f284483a7337ed165743ee0dc598d" - integrity sha512-PM7BcFfGUSkmkT6+LU9TyJiB4S8yI7dfuKQDwK5ZR3P7MKaK4Uj4yyDiv0oe5xvkF6+O2+rShj+eh8YuWkOZ/Q== - dependencies: - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.598.0.tgz#5b08b8cae70d1e7cc082d3627b31856f6ba20d17" - integrity sha512-ZuHW18kaeHR8TQyhEOYMr8VwiIh0bMvF7J1OTqXHxDteQIavJWA3CbfZ9sgS4XGtrBZDyHJhjZKeCfLhN2rq3w== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.598.0.tgz#8e40734d5fb1b116816f885885f16db9b5e39032" - integrity sha512-xukAzds0GQXvMEY9G6qt+CzwVzTx8NyKKh04O2Q+nOch6QQ8Rs+2kTRy3Z4wQmXq2pK9hlOWb5nXA7HWpmz6Ng== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@aws-crypto/crc32c" "5.2.0" - "@aws-sdk/types" "3.598.0" - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz#0a7c4d5a95657bea2d7c4e29b9a8b379952d09b1" - integrity sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.598.0.tgz#45564d5119468e3ac97949431c249e8b6e00ec09" - integrity sha512-8oybQxN3F1ISOMULk7JKJz5DuAm5hCUcxMW9noWShbxTJuStNvuHf/WLUzXrf8oSITyYzIHPtf8VPlKR7I3orQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz#0c0692d2f4f9007c915734ab319db377ca9a3b1b" - integrity sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz#94015d41f8174bd41298fd13f8fb0a8c4576d7c8" - integrity sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.598.0.tgz#308604f8a38959ad65ec5674c643c7032d678f43" - integrity sha512-5AGtLAh9wyK6ANPYfaKTqJY1IFJyePIxsEbxa7zS6REheAqyVmgJFaGu3oQ5XlxfGr5Uq59tFTRkyx26G1HkHA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/smithy-client" "^3.1.2" - "@smithy/types" "^3.1.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.598.0.tgz#b90eef6a9fe3f76777c9cd4890dcae8e1febd249" - integrity sha512-XKb05DYx/aBPqz6iCapsCbIl8aD8EihTuPCs51p75QsVfbQoVr4TlFfIl5AooMSITzojdAQqxt021YtvxjtxIQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/types" "^3.1.0" - "@smithy/util-middleware" "^3.0.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.598.0.tgz#d6a3c64ce77bd7379653b46b58ded32a7b0fe6f4" - integrity sha512-f0p2xP8IC1uJ5e/tND1l81QxRtRFywEdnbtKCE0H6RSn4UIt2W3Dohe1qQDbnh27okF0PkNW6BJGdSAz3p7qbA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz#6fa26849d256434ca4884c42c1c4755aa2f1556e" - integrity sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg== - dependencies: - "@aws-sdk/types" "3.598.0" - "@aws-sdk/util-endpoints" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz#fd8fd6b7bc11b5f81def4db0db9e835d40a8f86e" - integrity sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.1" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.598.0.tgz#1716022e31dcbc5821aeca85204718f523a1ddbf" - integrity sha512-1r/EyTrO1gSa1FirnR8V7mabr7gk+l+HkyTI0fcTSr8ucB7gmYyW6WjkY8JCz13VYHFK62usCEDS7yoJoJOzTA== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.598.0" - "@aws-sdk/types" "3.598.0" - "@smithy/protocol-http" "^4.0.1" - "@smithy/signature-v4" "^3.1.0" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz#49a94c14ce2e392bb0e84b69986c33ecfad5b804" - integrity sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/property-provider" "^3.1.1" - "@smithy/shared-ini-file-loader" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.598.0", "@aws-sdk/types@^3.222.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.598.0.tgz#b840d2446dee19a2a4731e6166f2327915d846db" - integrity sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ== - dependencies: - "@smithy/types" "^3.1.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.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz#7f78d68524babac7fdacf381590470353d45b959" - integrity sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - "@smithy/util-endpoints" "^2.0.2" - 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.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz#5039d0335f8a06af5be73c960df85009dda59090" - integrity sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/types" "^3.1.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz#f9bdf1b7cc3a40787c379f7c2ff028de2612c177" - integrity sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A== - dependencies: - "@aws-sdk/types" "3.598.0" - "@smithy/node-config-provider" "^3.1.1" - "@smithy/types" "^3.1.0" - tslib "^2.6.2" - -"@aws-sdk/xml-builder@3.598.0": - version "3.598.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.598.0.tgz#ee591c5d80a34d9c5bc14326f1a62e9a0649c587" - integrity sha512-ZIa2RK7CHFTZ4gwK77WRtsZ6vF7xwRXxJ8KQIxK2duhoTVcn0xYxpFLdW9WZZZvdP9GIF3Loqvf8DRdeU5Jc7Q== - dependencies: - "@smithy/types" "^3.1.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.71" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.71.tgz#948a63441957c8844347d32470489b7b6c7b05c8" - integrity sha512-5hZ8TdYIrFa/f4hxb2ADzARmXxeuG5P8yukuQwNbiO8EnLcrDNPKwv5JXNaslWkMexlaeVy1m+EMLnTlbzeQSw== - 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.6.0" - resolved "https://registry.yarnpkg.com/@elastic/transport/-/transport-8.6.0.tgz#8de9794c87eb0fd2bdb2c6c1e32792aeb06b32bc" - integrity sha512-/Ucpztrc+urZK8yCtFBUu2LePYJNnukgZSUUApUzGH/SxejqkH526Nph7aru8I0vZwdW5wqgCHSOIq3J7tIxGg== - dependencies: - 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.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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== - -"@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.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.0.tgz#408fbc0da13c30bc0aac859a44be08a5ba18126a" - integrity sha512-XOm4LkuC0PsK1sf2bBJLIlskn5ghmVxiEBVlo/jg0R8hxASBKYYgOoJEhKWgOr4vWGkN+5rC+oyBAqHYtxjnwQ== - dependencies: - "@smithy/types" "^3.2.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.2", "@smithy/config-resolver@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.3.tgz#104106363fbaf6bac61905727f7e2c39c62f3e94" - integrity sha512-4wHqCMkdfVDP4qmr4fVPYOFOH+vKhOv3X4e6KEU9wIC8xXUQ24tnF4CW+sddGDX1zU86GGyQ7A+rg2xmUD6jpQ== - dependencies: - "@smithy/node-config-provider" "^3.1.2" - "@smithy/types" "^3.2.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.2" - tslib "^2.6.2" - -"@smithy/core@^2.2.1": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.2.3.tgz#dc6ba7d338a1b35752be274cdaf6fcbcfdb44a70" - integrity sha512-SpyLOL2vgE6sUYM6nQfu82OirCPkCDKctyG3aMgjMlDPTJpUlmlNH0ttu9ZWwzEjrzzr8uABmPjJTRI7gk1HFQ== - dependencies: - "@smithy/middleware-endpoint" "^3.0.3" - "@smithy/middleware-retry" "^3.0.6" - "@smithy/middleware-serde" "^3.0.2" - "@smithy/protocol-http" "^4.0.2" - "@smithy/smithy-client" "^3.1.4" - "@smithy/types" "^3.2.0" - "@smithy/util-middleware" "^3.0.2" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.1.1", "@smithy/credential-provider-imds@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.2.tgz#7e84199a8cd8ff7121c0a2f95f7822dc09cc283f" - integrity sha512-gqVmUaNoeqyrOAjgZg+rTmFLsphh/vS59LCMdFfVpthVS0jbfBzvBmEPktBd+y9ME4DYMGHFAMSYJDK8q0noOQ== - dependencies: - "@smithy/node-config-provider" "^3.1.2" - "@smithy/property-provider" "^3.1.2" - "@smithy/types" "^3.2.0" - "@smithy/url-parser" "^3.0.2" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.1.tgz#b47f30bf4ad791ac7981b9fff58e599d18269cf9" - integrity sha512-s29NxV/ng1KXn6wPQ4qzJuQDjEtxLdS0+g5PQFirIeIZrp66FXVJ5IpZRowbt/42zB5dY8TqJ0G0L9KkgtsEZg== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^3.2.0" - "@smithy/util-hex-encoding" "^3.0.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^3.0.2": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.3.tgz#223267a9e46336aff2bebbc386eb6e62146d1fef" - integrity sha512-ZXKmNAHl6SWKYuVmtoEc/hBQ7Nym/rbAx2SrqoJHn0i9QopIP7fG1AWmoFIeS5R3/VL6AwUIZMR0g8qnjjVRRA== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.3" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.2.tgz#6238eadae0c060133c61783fd92d8b1ee1e6f99f" - integrity sha512-QbE3asvvBUZr7PwbOaxkSfKDjTAmWZkqh2G7pkYlD4jRkT1Y9nufeyu0OBPlLoF4+gl3YMpSVO7TESe8bVkD+g== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^3.0.2": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.3.tgz#51df0ca39f453d78a3d6607c1ac2e96cf900c824" - integrity sha512-v61Ftn7x/ubWFqH7GHFAL/RaU7QZImTbuV95DYugYYItzpO7KaHYEuO8EskCaBpZEfzOxhUGKm4teS9YUSt69Q== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.3" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.3.tgz#2ecac479ba84e10221b4b70545f3d7a223b5345e" - integrity sha512-YXYt3Cjhu9tRrahbTec2uOjwOSeCNfQurcWPGNEUspBhqHoA3KrDrVj+jGbCLWvwkwhzqDnnaeHAxm+IxAjOAQ== - dependencies: - "@smithy/eventstream-codec" "^3.1.1" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^3.0.2", "@smithy/fetch-http-handler@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.1.0.tgz#993d47577c7b86eb5796cd29f8301beafa2cf471" - integrity sha512-s7oQjEOUH9TYjctpITtWF4qxOdg7pBrP9eigEQ8SBsxF3dRFV0S28pGMllC83DUr7ECmErhO/BUwnULfoNhKgQ== - dependencies: - "@smithy/protocol-http" "^4.0.2" - "@smithy/querystring-builder" "^3.0.2" - "@smithy/types" "^3.2.0" - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.1.tgz#758b4de6cf75b515cf36c18c4d101a833976c83f" - integrity sha512-8RwdPG7arvL5pfMAFsH6jfBVcC7MDR1LYHjKevZPHREkVtORIQkRfm2K8px7giJt7x0zzQJnWamrsDM4ig8nTQ== - dependencies: - "@smithy/chunked-blob-reader" "^3.0.0" - "@smithy/chunked-blob-reader-native" "^3.0.0" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/hash-node@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.2.tgz#8d1306f3b372e42dc76ae85fd979f7252aea476c" - integrity sha512-43uGA6o6QJQdXwAogybdTDHDd3SCdKyoiHIHb8PpdE2rKmVicjG9b1UgVwdgO8QPytmVqHFaUw27M3LZKwu8Yg== - dependencies: - "@smithy/types" "^3.2.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.1.tgz#ca288961879730a0203b60b4383e2455d015f2ac" - integrity sha512-+uvJHPrFNE9crkh3INVS9FmDcx1DoywDgIzlRWlPy7gqoD8jG14os9ATIFY7wN/ARPz1EWlkCHUap70oXxMmjA== - dependencies: - "@smithy/types" "^3.2.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.2.tgz#e455169d86e96e73ebf2bb1728b7d2e2850bdc01" - integrity sha512-+BAY3fMhomtq470tswXyrdVBSUhiLuhBVT+rOmpbz5e04YX+s1dX4NxTLzZGwBjCpeWZNtTxP8zbIvvFk81gUg== - dependencies: - "@smithy/types" "^3.2.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.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.2.tgz#dec2124a81beb83700b68390d1378010346b8541" - integrity sha512-WlSK9br7fkVucTkCXporwuOttCR3cJ1GV70J8ENYXGNc0nUTPzMdWCyHztgnbbKoekVMjGZOEu+8I52nOdzqwQ== - dependencies: - "@smithy/types" "^3.2.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.2.tgz#fc69a5b3a46310a798e4c804ef47dbe11ad2045f" - integrity sha512-/Havz3PkYIEmwpqkyRTR21yJsWnFbD1ec4H1pUL+TkDnE7RCQkAVUQepLL/UeCaZeCBXvfdoKbOjSbV01xIinQ== - dependencies: - "@smithy/protocol-http" "^4.0.2" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.0.2", "@smithy/middleware-endpoint@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.3.tgz#bbfdd0f35668af392c5031ca2735c31760740bc6" - integrity sha512-ARAXHodhj4tttKa9y75zvENdSoHq6VGsSi7XS3+yLutrnxttJs6N10UMInCC1yi3/bopT8xug3iOP/y9R6sKJQ== - dependencies: - "@smithy/middleware-serde" "^3.0.2" - "@smithy/node-config-provider" "^3.1.2" - "@smithy/shared-ini-file-loader" "^3.1.2" - "@smithy/types" "^3.2.0" - "@smithy/url-parser" "^3.0.2" - "@smithy/util-middleware" "^3.0.2" - tslib "^2.6.2" - -"@smithy/middleware-retry@^3.0.4", "@smithy/middleware-retry@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.6.tgz#ace955263cea4ef6acf1e0e42192be62e20ab558" - integrity sha512-ICsFKp8eAyIMmxN5UT3IU37S6886L879TKtgxPsn/VD/laYNwqTLmJaCAn5//+2fRIrV0dnHp6LFlMwdXlWoUQ== - dependencies: - "@smithy/node-config-provider" "^3.1.2" - "@smithy/protocol-http" "^4.0.2" - "@smithy/service-error-classification" "^3.0.2" - "@smithy/smithy-client" "^3.1.4" - "@smithy/types" "^3.2.0" - "@smithy/util-middleware" "^3.0.2" - "@smithy/util-retry" "^3.0.2" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^3.0.1", "@smithy/middleware-serde@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.2.tgz#3ec15a7991c2b066cced5989aba7f81fed4dfb87" - integrity sha512-oT2abV5zLhBucJe1LIIFEcRgIBDbZpziuMPswTMbBQNcaEUycLFvX63zsFmqfwG+/ZQKsNx+BSE8W51CMuK7Yw== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^3.0.1", "@smithy/middleware-stack@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.2.tgz#82610681a7f5986bfb3229df98ca1e050b667660" - integrity sha512-6fRcxomlNKBPIy/YjcnC7YHpMAjRvGUYlYVJAfELqZjkW0vQegNcImjY7T1HgYA6u3pAcCxKVBLYnkTw8z/l0A== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^3.1.1", "@smithy/node-config-provider@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.2.tgz#3e739ae02520f2249f6c50197feee6e38125fb1d" - integrity sha512-388fEAa7+6ORj/BDC70peg3fyFBTTXJyXfXJ0Bwd6FYsRltePr2oGzIcm5AuC1WUSLtZ/dF+hYOnfTMs04rLvA== - dependencies: - "@smithy/property-provider" "^3.1.2" - "@smithy/shared-ini-file-loader" "^3.1.2" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^3.0.1", "@smithy/node-http-handler@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.0.tgz#0f37b2c379b1cd85be125234575e7c5129dbed67" - integrity sha512-pOpgB6B+VLXLwAyyvRz+ZAVXABlbAsJ2xvn3WZvrppAPImxwQOPFbeSUzWYMhpC8Tr7yQ3R8fG990QDhskkf1Q== - dependencies: - "@smithy/abort-controller" "^3.1.0" - "@smithy/protocol-http" "^4.0.2" - "@smithy/querystring-builder" "^3.0.2" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/property-provider@^3.1.1", "@smithy/property-provider@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.2.tgz#3da2802511078eae66240bcbeb8ef6f6102aeabf" - integrity sha512-Hzp32BpeFFexBpO1z+ts8okbq/VLzJBadxanJAo/Wf2CmvXMBp6Q/TLWr7Js6IbMEcr0pDZ02V3u1XZkuQUJaA== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^4.0.1", "@smithy/protocol-http@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.0.2.tgz#502ed3116cb0f1e3f207881df965bac620ccb2da" - integrity sha512-X/90xNWIOqSR2tLUyWxVIBdatpm35DrL44rI/xoeBWUuanE0iyCXJpTcnqlOpnEzgcu0xCKE06+g70TTu2j7RQ== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.2.tgz#ea0f9a6e2b85d62465b3cc0214e6b86eb7af7ab4" - integrity sha512-xhv1+HacDYsOLdNt7zW+8Fe779KYAzmWvzs9bC5NlKM8QGYCwwuFwDBynhlU4D5twgi2pZ14Lm4h6RiAazCtmA== - dependencies: - "@smithy/types" "^3.2.0" - "@smithy/util-uri-escape" "^3.0.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.2.tgz#7b8edc661d0ee2c2e7e8a39b1022b00dfff2858e" - integrity sha512-C5hyRKgrZGPNh5QqIWzXnW+LXVrPmVQO0iJKjHeb5v3C61ZkP9QhrKmbfchcTyg/VnaE0tMNf/nmLpQlWuiqpg== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.2.tgz#ad7a0c8dfd482981a04d42fba24c7ee1ac2eb20b" - integrity sha512-cu0WV2XRttItsuXlcM0kq5MKdphbMMmSd2CXF122dJ75NrFE0o7rruXFGfxAp3BKzgF/DMxX+PllIA/cj4FHMw== - dependencies: - "@smithy/types" "^3.2.0" - -"@smithy/shared-ini-file-loader@^3.1.1", "@smithy/shared-ini-file-loader@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.2.tgz#b80f8b9b40841447219a95cb47f7a8f3f85b6467" - integrity sha512-tgnXrXbLMO8vo6VeuqabMw/eTzQHlLmZx0TC0TjtjJghnD0Xl4pEnJtBjTJr6XF5fHMNrt5BcczDXHJT9yNQnA== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.1.1.tgz#4882aacb3260a47b8279b2ffc6a135e03e225260" - integrity sha512-2/vlG86Sr489XX8TA/F+VDA+P04ESef04pSz0wRtlQBExcSPjqO08rvrkcas2zLnJ51i+7ukOURCkgqixBYjSQ== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/types" "^3.2.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.2" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^3.1.2", "@smithy/smithy-client@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.4.tgz#597a4b0d08c71ed7e66707df28871b8a3a707cce" - integrity sha512-y6xJROGrIoitjpwXLY7P9luDHvuT9jWpAluliuSFdBymFxcl6iyQjo9U/JhYfRHFNTruqsvKOrOESVuPGEcRmQ== - dependencies: - "@smithy/middleware-endpoint" "^3.0.3" - "@smithy/middleware-stack" "^3.0.2" - "@smithy/protocol-http" "^4.0.2" - "@smithy/types" "^3.2.0" - "@smithy/util-stream" "^3.0.4" - tslib "^2.6.2" - -"@smithy/types@^3.1.0", "@smithy/types@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.2.0.tgz#1350fe8a50d5e35e12ffb34be46d946860b2b5ab" - integrity sha512-cKyeKAPazZRVqm7QPvcPD2jEIt2wqDPAL1KJKb0f/5I7uhollvsWZuZKLclmyP6a+Jwmr3OV3t+X0pZUUHS9BA== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^3.0.1", "@smithy/url-parser@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.2.tgz#a4d6f364a28d2b11c14d9486041ea8eb4572fc66" - integrity sha512-pRiPHrgibeAr4avtXDoBHmTLtthwA4l8jKYRfZjNgp+bBPyxDMPRg2TMJaYxqbKemvrOkHu9MIBTv2RkdNfD6w== - dependencies: - "@smithy/querystring-parser" "^3.0.2" - "@smithy/types" "^3.2.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.4": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.6.tgz#4f6d9a8578d6ea131776757accdb9d636f06a6a1" - integrity sha512-tAgoc++Eq+KL7g55+k108pn7nAob3GLWNEMbXhZIQyBcBNaE/o3+r4AEbae0A8bWvLRvArVsjeiuhMykGa04/A== - dependencies: - "@smithy/property-provider" "^3.1.2" - "@smithy/smithy-client" "^3.1.4" - "@smithy/types" "^3.2.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.4": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.6.tgz#be733b8c84bf02d2b17803e755f51655e5f99115" - integrity sha512-UNerul6/E8aiCyFTBHk+RSIZCo7m96d/N5K3FeO/wFeZP6oy5HAicLzxqa85Wjv7MkXSxSySX29L/LwTV/QMag== - dependencies: - "@smithy/config-resolver" "^3.0.3" - "@smithy/credential-provider-imds" "^3.1.2" - "@smithy/node-config-provider" "^3.1.2" - "@smithy/property-provider" "^3.1.2" - "@smithy/smithy-client" "^3.1.4" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.3.tgz#480eee018b0bba6f53434444f11558d330b618d5" - integrity sha512-Dyi+pfLglDHSGsKSYunuUUSFM5V0tz7UDgv1Ex97yg+Xkn0Eb0rH0rcvl1n0MaJ11fac3HKDOH0DkALyQYCQag== - dependencies: - "@smithy/node-config-provider" "^3.1.2" - "@smithy/types" "^3.2.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.1", "@smithy/util-middleware@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.2.tgz#6daeb9db060552d851801cd7a0afd68769e2f98b" - integrity sha512-7WW5SD0XVrpfqljBYzS5rLR+EiDzl7wCVJZ9Lo6ChNFV4VYDk37Z1QI5w/LnYtU/QKnSawYoHRd7VjSyC8QRQQ== - dependencies: - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/util-retry@^3.0.1", "@smithy/util-retry@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.2.tgz#073b4950f0379307e073a70afe086c52ec2b0329" - integrity sha512-HUVOb1k8p/IH6WFUjsLa+L9H1Zi/FAAB2CDOpWuffI1b2Txi6sknau8kNfC46Xrt39P1j2KDzCE1UlLa2eW5+A== - dependencies: - "@smithy/service-error-classification" "^3.0.2" - "@smithy/types" "^3.2.0" - tslib "^2.6.2" - -"@smithy/util-stream@^3.0.2", "@smithy/util-stream@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.4.tgz#7a33a39754d8a0737f30687953d8dcc05810e907" - integrity sha512-CcMioiaOOsEVdb09pS7ux1ij7QcQ2jE/cE1+iin1DXMeRgAEQN/47m7Xztu7KFQuQsj0A5YwB2UN45q97CqKCg== - dependencies: - "@smithy/fetch-http-handler" "^3.1.0" - "@smithy/node-http-handler" "^3.1.0" - "@smithy/types" "^3.2.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.0.1": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.1.0.tgz#7fa58fe91ddcf4a8bcf00c3d216f2cc14386da2a" - integrity sha512-5OVcC5ZcmmutY208ADY/l2eB4H4DVXs+hPUo/M1spF4/YEmF9DdLkfwBvohej2dIeVJayKY7hMlD0X8j3F3/Uw== - dependencies: - "@smithy/abort-controller" "^3.1.0" - "@smithy/types" "^3.2.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.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.5.tgz#fe35e3022ebe58b8f201580eb24e1fcfc0f2487d" - integrity sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA== - 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.36" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.36.tgz#c9861e84727e07ecf79a5ff6d0e14f91bab2b478" - integrity sha512-tX1BNmYSWEvViftB26VLNxT6mEr37M7+ldUtq7rlKnv4/2fKYsJIOmqJAjT6h1DNuwQjIKgw3VJ/Dtw3yiTIQw== - 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.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c" - integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== - -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.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5" - integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w== - 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.8.2" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.2.tgz#54771c7ff195da913f5e70af8044a026d32eca2a" - integrity sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg== - -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.0" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" - integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== - 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.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== - -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.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - 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.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - -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 544ee72361a42a172d24a1df7c93025fcdc64d8b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 4 Jul 2024 13:21:03 +0000 Subject: [PATCH 0933/1590] fix spike --- dexs/nomiswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/nomiswap/index.ts b/dexs/nomiswap/index.ts index ff3424bb28..52e6f2605b 100644 --- a/dexs/nomiswap/index.ts +++ b/dexs/nomiswap/index.ts @@ -34,7 +34,7 @@ const adapters: SimpleAdapter = { [CHAIN.BSC]: { fetch: async (options: FetchOptions) => { const data = await graphsClassic(CHAIN.BSC)(options); - const removeSpike = Number(data.totalVolume) - 2035654137.527446631277942307129497; + const removeSpike = Number(data.totalVolume) - 7035654137.527446631277942307129497; data.totalVolume = removeSpike > 0 ? removeSpike : data.totalVolume; return { ...data From 025ee803e2539fb68ceeb7f1a8f62dd09bc1b5fc Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 4 Jul 2024 15:01:44 +0000 Subject: [PATCH 0934/1590] remove unuse --- fees/amphor/index.ts | 164 ++++++++----------------------------------- 1 file changed, 30 insertions(+), 134 deletions(-) diff --git a/fees/amphor/index.ts b/fees/amphor/index.ts index 3ee5ca698a..5f7d28b93c 100644 --- a/fees/amphor/index.ts +++ b/fees/amphor/index.ts @@ -1,56 +1,12 @@ -import * as sdk from "@defillama/sdk"; -import { ethers, EventFilter } from 'ethers'; import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; import { ETHEREUM } from "../../helpers/chains"; -import ADDRESSES from '../../helpers/coreAssets.json' -import { getBlock } from "../../helpers/getBlock"; +import ADDRESSES from '../../helpers/coreAssets.json'; const AmphorILHedgedWETH_contractAddress: string = '0xcDC51F2B0e5F0906f2fd5f557de49D99c34Df54e'; const AmphorLRTwstETHVault_contractAddress: string = '0x06824C27C8a0DbDe5F72f770eC82e3c0FD4DcEc3'; - -const contractAbi: ethers.InterfaceAbi = [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lastSavedBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "returnedAssets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fees", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalShares", - "type": "uint256" - } - ], - "name": "EpochEnd", - "type": "event" - }, -] - -const AmphorILHedgedWETH_contract: ethers.Contract = new ethers.Contract(AmphorILHedgedWETH_contractAddress, contractAbi); -const AmphorLRTwstETHVault_contract: ethers.Contract = new ethers.Contract(AmphorLRTwstETHVault_contractAddress, contractAbi); +const AmphorPTezETHVault_contractAddress: string = '0xeEE8aED1957ca1545a0508AfB51b53cCA7e3c0d1'; +const AmphorPTrsETHVault_contractAddress: string = '0xB05cABCd99cf9a73b19805edefC5f67CA5d1895E'; +const AmphorPTweETHVault_contractAddress: string = '0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966'; const methodology = { UserFees: "Include performance fees.", @@ -58,99 +14,39 @@ const methodology = { ProtocolRevenue: "Share of revenue going to Amphor treasury.", Revenue: "Sum of protocol revenue.", } +const event = 'event EpochEnd(uint256 indexed timestamp,uint256 lastSavedBalance,uint256 returnedAssets,uint256 fees,uint256 totalShares)' +const addresss: string[] = [ + AmphorILHedgedWETH_contractAddress, + AmphorLRTwstETHVault_contractAddress, + AmphorPTezETHVault_contractAddress, + AmphorPTrsETHVault_contractAddress, + AmphorPTweETHVault_contractAddress +] +const data = async (options: FetchOptions): Promise => { + const logs = (await options.getLogs({ + targets: addresss, + eventAbi: event, + flatten: true + })) -const data = async (timestamp: number): Promise => { - const toTimestamp = timestamp; - const fromTimestamp = timestamp - 60 * 60 * 24; - const toBlock = await getBlock(toTimestamp, CHAIN.ETHEREUM, {}); - - const eventFilterWETH: EventFilter = { - address: AmphorILHedgedWETH_contractAddress, - topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] - }; - const eventFilterLRTwstETH: EventFilter = { - address: AmphorLRTwstETHVault_contractAddress, - topics: [ethers.id('EpochEnd(uint256,uint256,uint256,uint256,uint256)')] - }; - - const eventsWETH = (await sdk.getEventLogs({ - target: AmphorILHedgedWETH_contractAddress, - topics: eventFilterWETH.topics as string[], - fromBlock: 18535914, - toBlock: toBlock, - chain: CHAIN.ETHEREUM, - })) as ethers.Log[]; - - const eventsLRTwstETH = (await sdk.getEventLogs({ - target: AmphorLRTwstETHVault_contractAddress, - topics: eventFilterLRTwstETH.topics as string[], - fromBlock: 18535914, - toBlock: toBlock, - chain: CHAIN.ETHEREUM, - })) as ethers.Log[]; - - let totalRevenueWETH = BigInt(0); - let totalFeesWSTETH = BigInt(0); - let totalRevenueLRTwstETH = BigInt(0); - let totalFeesLRTwstETH = BigInt(0); - - let dailyFeesWETH = BigInt(0); - let dailyRevenueWSTETH = BigInt(0); - let dailyFeeslRTwstETH = BigInt(0); - let dailyRevenueLRTwstETH = BigInt(0); - - eventsWETH.forEach(res => { - const event = AmphorILHedgedWETH_contract.interface.parseLog(res as any); - totalRevenueWETH += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance) - totalFeesWSTETH += BigInt(event!.args.fees) - if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { - dailyFeesWETH += BigInt(event!.args.fees); - dailyRevenueWSTETH = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); - } - }); - - eventsLRTwstETH.forEach(res => { - const event = AmphorLRTwstETHVault_contract.interface.parseLog(res as any); - totalRevenueLRTwstETH += BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); - totalFeesLRTwstETH += BigInt(event!.args.fees); - if (event!.args.timestamp > fromTimestamp && event!.args.timestamp < toTimestamp) { - dailyFeeslRTwstETH += BigInt(event!.args.fees); - dailyRevenueLRTwstETH = BigInt(event!.args.returnedAssets) - BigInt(event!.args.lastSavedBalance); - } - }); + const dailyFees = options.createBalances() + const dailyRevenue = options.createBalances() const TOKENS = { WETH: ADDRESSES.ethereum.WETH, } - const totalFees = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); - const totalRevenue = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); - const dailyFees = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); - const dailyRevenue = new sdk.Balances({ chain: CHAIN.ETHEREUM, timestamp: toTimestamp }); - - totalFees.add(TOKENS.WETH, totalFeesWSTETH.toString()); - totalFees.add(TOKENS.WETH, totalFeesLRTwstETH.toString()); - - totalRevenue.add(TOKENS.WETH, totalRevenueWETH.toString()); - totalRevenue.add(TOKENS.WETH, totalRevenueLRTwstETH.toString()); - - dailyFees.add(TOKENS.WETH, dailyFeesWETH.toString()); - dailyFees.add(TOKENS.WETH, dailyFeeslRTwstETH.toString()); - - dailyRevenue.add(TOKENS.WETH, dailyRevenueWSTETH.toString()); - dailyRevenue.add(TOKENS.WETH, dailyRevenueLRTwstETH.toString()); - - const totalFeesNumber = Number(await totalFees.getUSDValue()).toFixed(0); - const dailyRevenueNumber = Number(await dailyRevenue.getUSDValue()).toFixed(0); + logs.forEach((log) => { + dailyFees.add(TOKENS.WETH, log.fees) + if (log.fees > 0) { + dailyRevenue.add(TOKENS.WETH, log.returnedAssets - log.lastSavedBalance) + } + }) return { - totalFees: totalFeesNumber, - totalRevenue: Number(await totalRevenue.getUSDValue()).toFixed(0), - totalProtocolRevenue: totalFeesNumber, - totalUserFees: totalFeesNumber, - dailyFees: Number(await dailyFees.getUSDValue()).toFixed(0), - dailyProtocolRevenue: dailyRevenueNumber, - dailyRevenue: dailyRevenueNumber, - }; + dailyFees, + dailyRevenue, + dailyProtocolRevenue: dailyFees, + } } const adapter: Adapter = { From 150f758eb8179e4410175bd7f2d931678f1b48db Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 5 Jul 2024 13:04:15 +0000 Subject: [PATCH 0935/1590] add scoop --- fees/scoop.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 fees/scoop.ts diff --git a/fees/scoop.ts b/fees/scoop.ts new file mode 100644 index 0000000000..dfcaf4a16b --- /dev/null +++ b/fees/scoop.ts @@ -0,0 +1,27 @@ +import { Adapter, FetchOptions, } from '../adapters/types'; +import { CHAIN } from '../helpers/chains'; + +const address = '0x864d6cAfFEa0725057E6ED775b34E6Dd6F04AD49'; +const fetchFees = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + await options.api.sumTokens({ owners: [address], tokens: ["0x0000000000000000000000000000000000000000"] }) + await options.fromApi.sumTokens({ owners: [address], tokens: ["0x0000000000000000000000000000000000000000"] }) + dailyFees.addBalances(options.api.getBalancesV2()) + dailyFees.subtract(options.fromApi.getBalancesV2()) + return { + dailyFees, + dailyRevenue: dailyFees.clone(), + } +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.BASE]: { + fetch: fetchFees, + start: 1656633600, // + } + } +} + +export default adapter; From dbe16459cd445516b6587d989d46859fd0542d71 Mon Sep 17 00:00:00 2001 From: 0xMasayoshi <0xMasayoshi@protonmail.com> Date: Fri, 5 Jul 2024 20:23:05 +0700 Subject: [PATCH 0936/1590] use sushi API for pricing --- aggregators/sushiswap/index.ts | 141 ++++++++++++++++++++++++++++++--- 1 file changed, 131 insertions(+), 10 deletions(-) diff --git a/aggregators/sushiswap/index.ts b/aggregators/sushiswap/index.ts index 6b26953df8..b7cb8aa696 100644 --- a/aggregators/sushiswap/index.ts +++ b/aggregators/sushiswap/index.ts @@ -1,8 +1,45 @@ +import axios from "axios"; import { FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const ROUTE_EVENT = 'event Route(address indexed from, address to, address indexed tokenIn, address indexed tokenOut, uint256 amountIn, uint256 amountOutMin,uint256 amountOut)' +const CHAIN_ID = { + [CHAIN.ETHEREUM]: 1, + [CHAIN.ARBITRUM]: 42161, + [CHAIN.OPTIMISM]: 10, + [CHAIN.BASE]: 8453, + [CHAIN.POLYGON]: 137, + [CHAIN.AVAX]: 43114, + [CHAIN.BSC]: 56, + [CHAIN.LINEA]: 59144, + [CHAIN.ARBITRUM_NOVA]: 42170, + [CHAIN.XDAI]: 100, + [CHAIN.FANTOM]: 250, + [CHAIN.BITTORRENT]: 199, + [CHAIN.CELO]: 42220, + [CHAIN.FILECOIN]: 314, + [CHAIN.HAQQ]: 11235, + [CHAIN.KAVA]: 2222, + [CHAIN.METIS]: 1088, + [CHAIN.THUNDERCORE]: 108, + [CHAIN.SCROLL]: 534352, + [CHAIN.ZETA]: 7000, + [CHAIN.MOONBEAM]: 1284, + [CHAIN.MOONRIVER]: 1285, + [CHAIN.POLYGON_ZKEVM]: 1101, + [CHAIN.FUSE]: 122, + [CHAIN.HARMONY]: 1666600000, + [CHAIN.TELOS]: 40, + [CHAIN.BOBA]: 288, + [CHAIN.BOBA_BNB]: 56288, + [CHAIN.CORE]: 1116, + [CHAIN.CRONOS]: 81457, + [CHAIN.BLAST]: 81457, + [CHAIN.SKALE_EUROPA]: 2046399126, + [CHAIN.ROOTSTOCK]: 30, +} + const RP4_ADDRESS = { [CHAIN.ETHEREUM]: '0xe43ca1Dee3F0fc1e2df73A0745674545F11A59F5', [CHAIN.ARBITRUM]: '0x544bA588efD839d2692Fc31EA991cD39993c135F', @@ -39,13 +76,97 @@ const RP4_ADDRESS = { [CHAIN.ROOTSTOCK]: '0xb46e319390De313B8cc95EA5aa30C7bBFD79Da94', } +const WNATIVE_ADDRESS = { + [CHAIN.ETHEREUM]: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + [CHAIN.ARBITRUM]: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', + [CHAIN.OPTIMISM]: '0x4200000000000000000000000000000000000006', + [CHAIN.BASE]: '0x4200000000000000000000000000000000000006', + [CHAIN.POLYGON]: '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270', + [CHAIN.AVAX]: '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7', + [CHAIN.BSC]: '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c', + [CHAIN.LINEA]: '0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f', + [CHAIN.ARBITRUM_NOVA]: '0x722e8bdd2ce80a4422e880164f2079488e115365', + [CHAIN.XDAI]: '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d', + [CHAIN.FANTOM]: '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83', + [CHAIN.BITTORRENT]: '0x23181f21dea5936e24163ffaba4ea3b316b57f3c', + [CHAIN.CELO]: '0x471ece3750da237f93b8e339c536989b8978a438', + [CHAIN.FILECOIN]: '0x60e1773636cf5e4a227d9ac24f20feca034ee25a', + [CHAIN.HAQQ]: '0xec8cc083787c6e5218d86f9ff5f28d4cc377ac54', + [CHAIN.KAVA]: '0xc86c7c0efbd6a49b35e8714c5f59d99de09a225b', + [CHAIN.METIS]: '0x75cb093e4d61d2a2e65d8e0bbb01de8d89b53481', + [CHAIN.THUNDERCORE]: '0x413cefea29f2d07b8f2acfa69d92466b9535f717', + [CHAIN.SCROLL]: '0x5300000000000000000000000000000000000004', + [CHAIN.ZETA]: '0x5f0b1a82749cb4e2278ec87f8bf6b618dc71a8bf', + [CHAIN.MOONBEAM]: '0xacc15dc74880c9944775448304b263d191c6077f', + [CHAIN.MOONRIVER]: '0xf50225a84382c74cbdea10b0c176f71fc3de0c4d', + [CHAIN.POLYGON_ZKEVM]: '0x4f9a0e7fd2bf6067db6994cf12e4495df938e6e9', + [CHAIN.FUSE]: '0x0be9e53fd7edac9f859882afdda116645287c629', + [CHAIN.HARMONY]: '0xcf664087a5bb0237a0bad6742852ec6c8d69a27a', + [CHAIN.TELOS]: '0xd102ce6a4db07d247fcc28f366a623df0938ca9e', + [CHAIN.BOBA]: '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', + [CHAIN.BOBA_BNB]: '0xc58aad327d6d58d979882601ba8dda0685b505ea', + [CHAIN.CORE]: '0x40375c92d9faf44d2f9db9bd9ba41a3317a2404f', + [CHAIN.CRONOS]: '0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23', + [CHAIN.BLAST]: '0x4300000000000000000000000000000000000004', + [CHAIN.SKALE_EUROPA]: '0x0000000000000000000000000000000000000000', + [CHAIN.ROOTSTOCK]: '0x542fda317318ebf1d3deaf76e0b632741a7e677d', +} + +const useSushiAPIPrice = (chain) => [ + CHAIN.BOBA_BNB, + CHAIN.MOONRIVER +].includes(chain) + const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise => { - const dailyVolume = createBalances(); - const logs = (await getLogs({ target: RP4_ADDRESS[chain], eventAbi: ROUTE_EVENT })) - logs.forEach((log) => { - dailyVolume.add(log.tokenOut, log.amountOut) - }) - return { dailyVolume }; + if (useSushiAPIPrice(chain)) { + const [tokensQuery, pricesQuery, logs] = await Promise.all([ + axios.get(`https://tokens.sushi.com/v0/${CHAIN_ID[chain]}`) + .then(response => response.data), + axios.get(`https://api.sushi.com/price/v1/${CHAIN_ID[chain]}`) + .then(response => Object.entries(response.data).reduce( + (acc, [key, value]) => { + acc[key.toLowerCase()] = value + return acc + }, + {}, + )), + getLogs({ target: RP4_ADDRESS[chain], eventAbi: ROUTE_EVENT }) + ]) + + const tokens = tokensQuery.reduce((tokens, token) => { + const address = token.address.toLowerCase() + tokens[address] = { + ...token, + price: pricesQuery[address] ?? 0 + } + + return tokens + }, {}) + + let dailyVolume = 0 + + logs.forEach((log) => { + const token = tokens[ + log.tokenIn === '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' ? WNATIVE_ADDRESS[chain] : log.tokenIn.toLowerCase() + ] + + if (token) dailyVolume += Number(log.amountIn) * token.price / 10 ** token.decimals + }) + + return { dailyVolume } + } else { + const dailyVolume = createBalances() + const logs = await getLogs({ target: RP4_ADDRESS[chain], eventAbi: ROUTE_EVENT }) + + logs.forEach((log) => { + if (log.tokenIn === '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE') + dailyVolume.addGasToken(log.amountIn) + else + dailyVolume.add(log.tokenIn, log.amountIn) + }) + + return { dailyVolume } + } } const adapters: SimpleAdapter = { @@ -74,10 +195,10 @@ const adapters: SimpleAdapter = { fetch, start: 1711114904 }, - // [CHAIN.BOBA_BNB]: { - // fetch, - // start: 1708869909 - // }, + [CHAIN.BOBA_BNB]: { + fetch, + start: 1708869909 + }, [CHAIN.BSC]: { fetch, start: 1708861767 From 8422e9e3e4f78c1e7721525d09838a5b3bf87f3d Mon Sep 17 00:00:00 2001 From: 0xMasayoshi <0xMasayoshi@protonmail.com> Date: Fri, 5 Jul 2024 20:50:02 +0700 Subject: [PATCH 0937/1590] fix rootstock --- helpers/chains.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/chains.ts b/helpers/chains.ts index 25cfcc4c00..424fcd0187 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -16,7 +16,7 @@ export enum CHAIN { OPTIMISM = "optimism", POLYGON = "polygon", RONIN = "ronin", - ROOTSTOCK = "rootstock", + ROOTSTOCK = "rsk", XDAI = "xdai", AURORA = "aurora", MOONRIVER = "moonriver", From 96bc61d181eb54fb036548ee38a5b674a6fd2bef Mon Sep 17 00:00:00 2001 From: smile0507 Date: Fri, 5 Jul 2024 13:33:45 -0400 Subject: [PATCH 0938/1590] feat: add Injective chain --- aggregator-derivatives/bitoro/index.ts | 39 ++++++++++++++++++++------ 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/aggregator-derivatives/bitoro/index.ts b/aggregator-derivatives/bitoro/index.ts index 0a16b77013..eb2e5c0f5a 100644 --- a/aggregator-derivatives/bitoro/index.ts +++ b/aggregator-derivatives/bitoro/index.ts @@ -2,17 +2,34 @@ import fetchURL from "../../utils/fetchURL"; import { FetchResultV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const BASE_URL = "https://min-api.bitoro.network/btr/stats/global"; -const startTimestamp = 1711324800; // 2024-03-25 00:00:00 +const BitoroX_BASE_URL = "https://min-api.bitoro.network/btr/stats/global"; +const BitoroPro_BASE_URL = "https://min-api.inj.bitoro.network/stats/global"; +const startTimestamp_bitoro_x = 1711324800; // 2024-03-25 00:00:00 +const startTimestamp_bitoro_pro = 1718323200; // 2024-06-14 00:00:00 -const constructUrl = (startTime: number, endTime: number): string => { - return `${BASE_URL}?start=${startTime}&end=${endTime}`; +const getBitoroXUrl = (startTime: number, endTime: number): string => { + return `${BitoroX_BASE_URL}?start=${startTime}&end=${endTime}`; } -const fetch = async (options: any): Promise => { +const getBitoroProUrl = (startTime: number, endTime: number): string => { + return `${BitoroPro_BASE_URL}?start=${startTime}&end=${endTime}`; +} + +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)); + + return { + dailyVolume: dailyVolume.volume || 0, + totalVolume: totalVolume.volume || 0, + }; +}; + +const fetchBitoroPro = async (options: any): Promise => { const { fromTimestamp, toTimestamp } = options; - const dailyVolume = await fetchURL(constructUrl(fromTimestamp, toTimestamp)); - const totalVolume = await fetchURL(constructUrl(startTimestamp, toTimestamp)); + const dailyVolume = await fetchURL(getBitoroProUrl(fromTimestamp, toTimestamp)); + const totalVolume = await fetchURL(getBitoroProUrl(startTimestamp_bitoro_pro, toTimestamp)); return { dailyVolume: dailyVolume.volume || 0, @@ -23,9 +40,13 @@ const fetch = async (options: any): Promise => { export default { adapter: { [CHAIN.ARBITRUM]: { - fetch: fetch, - start: startTimestamp + fetch: fetchBitoroX, + start: startTimestamp_bitoro_x }, + [CHAIN.INJECTIVE]: { + fetch: fetchBitoroPro, + start: startTimestamp_bitoro_pro + } }, version: 2 } From 14cda1b68d77eb1c4affcfb0c54ba08ac90ba49e Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Sat, 6 Jul 2024 12:21:34 +0200 Subject: [PATCH 0939/1590] dailyFees Ether-fi --- fees/ether-fi/index.ts | 49 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 fees/ether-fi/index.ts diff --git a/fees/ether-fi/index.ts b/fees/ether-fi/index.ts new file mode 100644 index 0000000000..b21f50e694 --- /dev/null +++ b/fees/ether-fi/index.ts @@ -0,0 +1,49 @@ +// https://etherfi.gitbook.io/etherfi/liquid/technical-documentation#fees +import * as sdk from "@defillama/sdk"; +import { Adapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const LIQUID_VAULT = "0xeA1A6307D9b18F8d1cbf1c3Dd6aad8416C06a221"; +const YEAR = 365; +const ANNUAL_FEE_RATE = 0.02; + +const getDailyFees = async (api: sdk.ChainApi): Promise => { + const dailyFeeRate = ANNUAL_FEE_RATE / YEAR; + const [asset, totalSupply] = await Promise.all([ + await api.call({ + target: LIQUID_VAULT, + abi: "function asset() external view returns (address)", + }), + await api.call({ + target: LIQUID_VAULT, + abi: "erc20:totalSupply", + }), + ]); + + api.addTokens(asset, totalSupply); + return (await api.getUSDValue()) * dailyFeeRate; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.ETHEREUM]: { + fetch: async () => { + const api = new sdk.ChainApi({ chain: CHAIN.ETHEREUM }); + const dailyFees = await getDailyFees(api); + return { + dailyFees: Number(dailyFees.toFixed(0)), + }; + }, + meta: { + methodology: { + totalFees: + "Ether.fi-Liquid vault charges an annualized 2% platform fee based on vault TVL", + }, + }, + start: 1710284400, + }, + }, +}; + +export default adapter; From 52fcada4be11d21462f9a372fb63d2de5ecfd65f Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Sat, 6 Jul 2024 13:23:57 +0200 Subject: [PATCH 0940/1590] replace totalSupply->totalAsset --- fees/ether-fi/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/ether-fi/index.ts b/fees/ether-fi/index.ts index b21f50e694..259fa28ee1 100644 --- a/fees/ether-fi/index.ts +++ b/fees/ether-fi/index.ts @@ -16,7 +16,7 @@ const getDailyFees = async (api: sdk.ChainApi): Promise => { }), await api.call({ target: LIQUID_VAULT, - abi: "erc20:totalSupply", + abi: "function totalAssets() external view returns (uint256 assets)", }), ]); From e1609432c0b9c55cbfdc781a3b112db94cda0263 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Sat, 6 Jul 2024 15:41:28 +0200 Subject: [PATCH 0941/1590] use FetchOptions instead of sdk.ChainApi --- fees/ether-fi/index.ts | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/fees/ether-fi/index.ts b/fees/ether-fi/index.ts index 259fa28ee1..7506c76a20 100644 --- a/fees/ether-fi/index.ts +++ b/fees/ether-fi/index.ts @@ -1,40 +1,34 @@ // https://etherfi.gitbook.io/etherfi/liquid/technical-documentation#fees -import * as sdk from "@defillama/sdk"; -import { Adapter } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const LIQUID_VAULT = "0xeA1A6307D9b18F8d1cbf1c3Dd6aad8416C06a221"; const YEAR = 365; const ANNUAL_FEE_RATE = 0.02; -const getDailyFees = async (api: sdk.ChainApi): Promise => { +const fetch = async (options: FetchOptions) => { const dailyFeeRate = ANNUAL_FEE_RATE / YEAR; + const dailyFees = options.createBalances(); const [asset, totalSupply] = await Promise.all([ - await api.call({ + options.api.call({ target: LIQUID_VAULT, abi: "function asset() external view returns (address)", }), - await api.call({ + options.api.call({ target: LIQUID_VAULT, abi: "function totalAssets() external view returns (uint256 assets)", }), ]); - - api.addTokens(asset, totalSupply); - return (await api.getUSDValue()) * dailyFeeRate; + dailyFees.add(asset, totalSupply); + dailyFees.resizeBy(dailyFeeRate); + return { dailyFees }; }; const adapter: Adapter = { version: 2, adapter: { [CHAIN.ETHEREUM]: { - fetch: async () => { - const api = new sdk.ChainApi({ chain: CHAIN.ETHEREUM }); - const dailyFees = await getDailyFees(api); - return { - dailyFees: Number(dailyFees.toFixed(0)), - }; - }, + fetch, meta: { methodology: { totalFees: From 59360fcdc2bf7f056e3d837be1ba73e6bb440de0 Mon Sep 17 00:00:00 2001 From: 0xMasayoshi <0xMasayoshi@protonmail.com> Date: Sun, 7 Jul 2024 23:21:56 +0700 Subject: [PATCH 0942/1590] move sushiswap aggregator adapter to dexs dir --- dexs/sushiswap/index.ts | 2 + .../index.ts => dexs/sushiswap/swap.ts | 253 +++++++++--------- 2 files changed, 127 insertions(+), 128 deletions(-) rename aggregators/sushiswap/index.ts => dexs/sushiswap/swap.ts (75%) diff --git a/dexs/sushiswap/index.ts b/dexs/sushiswap/index.ts index c8469b769e..a15d4ceae2 100644 --- a/dexs/sushiswap/index.ts +++ b/dexs/sushiswap/index.ts @@ -2,10 +2,12 @@ import { BreakdownAdapter } from "../../adapters/types"; import trident from './trident' import classic from './classic' import v3 from './v3' +import swap from './swap' const adapter: BreakdownAdapter = { version: 2, breakdown: { + SushiSwap: swap, classic: classic, trident: trident, v3: v3 diff --git a/aggregators/sushiswap/index.ts b/dexs/sushiswap/swap.ts similarity index 75% rename from aggregators/sushiswap/index.ts rename to dexs/sushiswap/swap.ts index b7cb8aa696..1360df814c 100644 --- a/aggregators/sushiswap/index.ts +++ b/dexs/sushiswap/swap.ts @@ -1,5 +1,5 @@ import axios from "axios"; -import { FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { FetchResultV2, FetchV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const ROUTE_EVENT = 'event Route(address indexed from, address to, address indexed tokenIn, address indexed tokenOut, uint256 amountIn, uint256 amountOutMin,uint256 amountOut)' @@ -169,134 +169,131 @@ const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise Date: Mon, 8 Jul 2024 14:14:30 +0700 Subject: [PATCH 0943/1590] 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 0944/1590] 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 0945/1590] 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 0946/1590] 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 0947/1590] 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 020d0c48810d15fa9ebefe3523b3593e620495e0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 8 Jul 2024 16:52:59 +0000 Subject: [PATCH 0948/1590] add jup ape fees --- fees/jup-ape.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 fees/jup-ape.ts diff --git a/fees/jup-ape.ts b/fees/jup-ape.ts new file mode 100644 index 0000000000..6c9cbf0050 --- /dev/null +++ b/fees/jup-ape.ts @@ -0,0 +1,29 @@ +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("3521814", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: 'GqNdpkmqM1Aay1J7dRPmmupincfHTpF2tQLcfZuPy6uC' + })); + 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; From ddbcf1df955939a014f1d309211c28dff45a54b8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 9 Jul 2024 15:21:41 +0000 Subject: [PATCH 0949/1590] add uiswap v3 sei --- helpers/getBlock.ts | 9 +++-- protocols/uniswap/index.ts | 70 +++++++++++++++++++++++++++----------- 2 files changed, 57 insertions(+), 22 deletions(-) diff --git a/helpers/getBlock.ts b/helpers/getBlock.ts index b6f327d550..dee9bc9077 100644 --- a/helpers/getBlock.ts +++ b/helpers/getBlock.ts @@ -49,7 +49,7 @@ const blacklistedChains: string[] = [ "persistence", "sui", "neutron", - "terra2", + "terra2" ]; async function getBlock(timestamp: number, chain: Chain, chainBlocks = {} as ChainBlocks) { @@ -67,7 +67,12 @@ async function getBlock(timestamp: number, chain: Chain, chainBlocks = {} as Cha if (chain === CHAIN.WAVES) timestamp = Math.floor(timestamp * 1000) block = await sdk.blocks.getBlockNumber(chain, timestamp) - } catch (e) { console.log('error fetching block', e) } + } catch (e) { + console.log('error fetching block', e) + if (chain === CHAIN.SEI) { + return null + } + } if (block) { chainBlocks[chain] = block diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 5f11a5b704..ab45b270ef 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -12,6 +12,7 @@ import { DEFAULT_TOTAL_VOLUME_FIELD, } from "../../helpers/getUniSubgraph" import request, { gql } from 'graphql-request'; +import { httpPost } from '../../utils/fetchURL'; const v1Endpoints = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('ESnjgAG9NjfmHypk4Huu4PVvz55fUwpyrRqHF21thoLJ'), @@ -234,19 +235,17 @@ const adapter: BreakdownAdapter = { [CHAIN.ETHEREUM]: { fetch: async (options) => { const response = await v1Graph(options.chain)(options); - const keys = [ - "dailyUserFees", - "dailyProtocolRevenue", - "dailySupplySideRevenue", - "dailyHoldersRevenue", - "dailyRevenue", - "dailyFees", - ]; - for (const key of keys) { + 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') { - response[key] = await sdk.Balances.getUSDString({ - [ETH_ADDRESS]: response[key] - } as any) + keys[key].add(ETH_ADDRESS, Number(response[key]) * 1e18); } } return response as FetchResultGeneric @@ -301,13 +300,44 @@ const adapter: BreakdownAdapter = { }, {} as BaseAdapter) } } -// adapter.breakdown.v3.bsc.fetch = async ({ endTimestamp, getEndBlock }) => { -// const response = await v3Graphs(CHAIN.BSC)(endTimestamp, getEndBlock); -// const totalVolume = Number(response.totalVolume) - 10_000_000_000; -// return { -// ...response, -// totalVolume -// } as FetchResultGeneric -// } + +interface ISeiResponse { + volume: number; + fees: number; +} +const fetchSei = async (options: FetchOptions) => { + try { + const url = `https://omni.icarus.tools/${options.chain}/cush/analyticsProtocolHistoric`; + const body = { + "params": [ + options.startTimestamp * 1000, //start + options.endTimestamp * 1000, //end + 3600000 //interval + ] + } + const response: ISeiResponse[] = (await httpPost(url, body)).result + const dailyVolume = response.reduce((acc, item) => acc + item.volume, 0); + const dailyFees = response.reduce((acc, item) => acc + item.fees, 0); + return { + dailyVolume, + dailyFees, + totalVolume: dailyVolume, + totalFees: dailyFees, + totalUserFees: dailyFees, + totalSupplySideRevenue: dailyFees, + } + } catch (e) { + console.error(e) + return {} + } +} + +adapter.breakdown.v3[CHAIN.SEI] = { + fetch: fetchSei, + start: 0, + meta: { + methodology + } +} export default adapter; From 00756f0ebeefae686a59698c108f429c9ac5d984 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 9 Jul 2024 15:27:16 +0000 Subject: [PATCH 0950/1590] fix wrong result --- protocols/uniswap/index.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index ab45b270ef..5e16e7ac4b 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -321,10 +321,6 @@ const fetchSei = async (options: FetchOptions) => { return { dailyVolume, dailyFees, - totalVolume: dailyVolume, - totalFees: dailyFees, - totalUserFees: dailyFees, - totalSupplySideRevenue: dailyFees, } } catch (e) { console.error(e) From f01d8164b67abf4d8e4a86a7addde8e9f6d67da6 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 9 Jul 2024 16:03:27 +0000 Subject: [PATCH 0951/1590] agg swap --- dexs/sushiswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/sushiswap/index.ts b/dexs/sushiswap/index.ts index a15d4ceae2..3f5b34e4dc 100644 --- a/dexs/sushiswap/index.ts +++ b/dexs/sushiswap/index.ts @@ -7,7 +7,7 @@ import swap from './swap' const adapter: BreakdownAdapter = { version: 2, breakdown: { - SushiSwap: swap, + "agg-dex": swap, classic: classic, trident: trident, v3: v3 From 3551c5280c64305afd5221ee703ab3d7fd60dcb1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 9 Jul 2024 16:38:21 +0000 Subject: [PATCH 0952/1590] fix api key --- dexs/traderjoe/index.ts | 11 +++++++++-- fees/traderjoe.ts | 27 +++++++++++++++++---------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index a8ac7b442d..c817dbbeba 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -3,7 +3,7 @@ import { Chain } from "@defillama/sdk/build/general"; import { BreakdownAdapter, FetchOptions, FetchResultVolume } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import fetchURL from "../../utils/fetchURL"; +import { httpGet } from "../../utils/fetchURL"; const endpoints = { [CHAIN.AVAX]: sdk.graph.modifyEndpoint('9ZjERoA7jGANYNz1YNuFMBt11fK44krveEhzssJTWokM'), @@ -26,7 +26,10 @@ interface IVolume { } const fetchV2 = async (options: FetchOptions): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) - const historicalVolume: IVolume[] = (await fetchURL(endpointsV2[options.chain])); + const url = `https://api.traderjoexyz.dev/v1/dex/analytics/${mapChain(options.chain)}?startTime=${options.startTimestamp}&endTime=${options.endTimestamp}` + const historicalVolume: IVolume[] = (await httpGet(url, { headers: { + 'x-traderjoe-api-key': process.env.TRADERJOE_API_KEY + }})); const totalVolume = historicalVolume .filter(volItem => volItem.timestamp <= dayTimestamp) .reduce((acc, { volumeUsd }) => acc + Number(volumeUsd), 0) @@ -39,6 +42,10 @@ const fetchV2 = async (options: FetchOptions): Promise => { timestamp: dayTimestamp, } } +const mapChain = (chain: Chain): string => { + if (chain === CHAIN.BSC) return "binance" + return chain +} const graphsV1 = getChainVolume({ graphUrls: endpoints, diff --git a/fees/traderjoe.ts b/fees/traderjoe.ts index 5acdb47319..4a138848b8 100644 --- a/fees/traderjoe.ts +++ b/fees/traderjoe.ts @@ -6,7 +6,7 @@ import volumeAdapter from "../dexs/traderjoe"; import { Adapter, FetchOptions, FetchResultFees } from "../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../helpers/chains"; -import fetchURL from "../utils/fetchURL"; +import {httpGet} from "../utils/fetchURL"; const TOTAL_FEES = 0.003; const LP_FEE = 0.0025; @@ -42,10 +42,12 @@ const adapterV1 = getDexChainFees({ volumeAdapter: { adapter: volumeAdapter.breakdown.v1 }, }); -const graph = (chain: Chain) => { - return async ({ startOfDay }: FetchOptions) => { - const dayTimestamp = startOfDay * 1000 - const historical: IData[] = await fetchURL(endpointsV2[chain]); +const graph = async (options: FetchOptions) => { + const dayTimestamp = options.startOfDay * 1000 + const url = `https://api.traderjoexyz.dev/v1/dex/analytics/${mapChain(options.chain)}?startTime=${options.startTimestamp}&endTime=${options.endTimestamp}` + const historical: IData[] = (await httpGet(url, { headers: { + 'x-traderjoe-api-key': process.env.TRADERJOE_API_KEY + }})); const dailyFees = historical.find((dayItem) => dayItem.timestamp === dayTimestamp) ?.feesUsd || 0; @@ -62,7 +64,12 @@ const graph = (chain: Chain) => { : undefined, dailyProtocolRevenue: `${dailyRevenue}`, }; - }; +}; + +const mapChain = (chain: Chain): string => { + if (chain === CHAIN.BSC) return "binance"; + if (chain === CHAIN.AVAX) return "avalanche"; + return chain; }; const adapter: Adapter = { @@ -71,19 +78,19 @@ const adapter: Adapter = { v1: adapterV1, v2: { [CHAIN.AVAX]: { - fetch: graph(CHAIN.AVAX), + fetch: graph, start: 1669420800, }, [CHAIN.ARBITRUM]: { - fetch: graph(CHAIN.ARBITRUM), + fetch: graph, start: 1672012800, }, [CHAIN.BSC]: { - fetch: graph(CHAIN.BSC), + fetch: graph, start: 1678147200, }, [CHAIN.ETHEREUM]: { - fetch: graph(CHAIN.ETHEREUM), + fetch: graph, start: 1695513600, }, }, From 9a96aeaee7d314cd1ca4db1d91e8d22779a39efc Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 9 Jul 2024 16:52:05 +0000 Subject: [PATCH 0953/1590] split dexalot by chaib --- dexs/dexalot/index.ts | 56 +++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/dexs/dexalot/index.ts b/dexs/dexalot/index.ts index 64ed02bae4..3d12c94acf 100644 --- a/dexs/dexalot/index.ts +++ b/dexs/dexalot/index.ts @@ -1,49 +1,41 @@ -import { Chain } from "@defillama/sdk/build/general"; -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import customBackfill from "../../helpers/customBackfill"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import { httpGet } from "../../utils/fetchURL"; - -const historicalVolumeEndpoint = "https://api.dexalot.com/api/stats/dailyvolumes" interface IVolumeall { volumeusd: string; date: number; } -const fetch = async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const historicalVolume: IVolumeall[] = (await httpGet(historicalVolumeEndpoint, { headers: { - 'origin': 'https://app.dexalot.com' - }})) - const totalVolume = historicalVolume - .filter(volItem => (new Date(volItem.date).getTime() / 1000) <= dayTimestamp) - .reduce((acc, { volumeusd }) => acc + Number(volumeusd), 0) - - const dailyVolume = historicalVolume - .find(dayItem => (new Date(dayItem.date).getTime() / 1000) === dayTimestamp)?.volumeusd +const address: any = { + [CHAIN.ARBITRUM]: "0x010224949cCa211Fb5dDfEDD28Dc8Bf9D2990368", + [CHAIN.AVAX]: "0xEed3c159F3A96aB8d41c8B9cA49EE1e5071A7cdD" +} - return { - totalVolume: `${totalVolume}`, - dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, - timestamp: dayTimestamp, - }; +const event = "event SwapExecuted(uint256 indexed nonceAndMeta,address taker,address destTrader,uint256 destChainId,address srcAsset,address destAsset,uint256 srcAmount,uint256 destAmount)" + +const fetch = async (options: FetchOptions) => { + const dailyVolume = options.createBalances(); + const logs = await options.getLogs({ + target: address[options.chain], + eventAbi: event + }) + logs.forEach(log => { + dailyVolume.add(log.destAsset, log.destAmount) + }) + return { dailyVolume } }; -const getStartTimestamp = async () => { - const historicalVolume: IVolumeall[] = (await httpGet(historicalVolumeEndpoint, { headers: { - 'origin': 'https://app.dexalot.com' - }})) - return (new Date(historicalVolume[0].date).getTime()) / 1000 -} const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.AVAX]: { - fetch, - start: getStartTimestamp, - customBackfill: customBackfill(CHAIN.AVAX as Chain, (_chian: string) => fetch) + fetch: fetch, + start: 0, + }, + [CHAIN.ARBITRUM]: { + fetch: fetch, + start: 0, }, }, }; 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 0954/1590] 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 eebd6502e7a5f0e56539c45559a8899346e65393 Mon Sep 17 00:00:00 2001 From: Anirudha619 Date: Wed, 10 Jul 2024 18:38:55 +0530 Subject: [PATCH 0955/1590] add sharpe perp, sharpe bridge. sharpe-dex --- aggregator-derivatives/sharpe-perp/index.ts | 25 ++++++++++ bridge-aggregator/sharpe-bridge/index.ts | 54 +++++++++++++++++++++ dexs/sharpe-dex/index.ts | 28 +++++++++++ 3 files changed, 107 insertions(+) create mode 100644 aggregator-derivatives/sharpe-perp/index.ts create mode 100644 bridge-aggregator/sharpe-bridge/index.ts create mode 100644 dexs/sharpe-dex/index.ts diff --git a/aggregator-derivatives/sharpe-perp/index.ts b/aggregator-derivatives/sharpe-perp/index.ts new file mode 100644 index 0000000000..0a6f8ab7ef --- /dev/null +++ b/aggregator-derivatives/sharpe-perp/index.ts @@ -0,0 +1,25 @@ +import fetchURL from "../../utils/fetchURL"; +import { FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const fetch = async (options: any): Promise => { + let timestamp = options.toTimestamp + + const fetchOptions:any = {method: 'GET'}; + + const data:any = await fetchURL('https://api-evm.orderly.network/v1/public/volume/stats?broker_id=sharpe_ai') + + return { + totalVolume: data?.data?.perp_volume_ltd + }; +}; +// CHAIN.ARBITRUM, CHAIN.MANTLE, CHAIN.OPTIMISM, CHAIN.BASE, +export default { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: fetch, + start: 1711963031 + }, + }, + version: 2 +} diff --git a/bridge-aggregator/sharpe-bridge/index.ts b/bridge-aggregator/sharpe-bridge/index.ts new file mode 100644 index 0000000000..6594796693 --- /dev/null +++ b/bridge-aggregator/sharpe-bridge/index.ts @@ -0,0 +1,54 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +type IContract = { + [c: string | Chain]: string; +} + +const contract: IContract = { + [CHAIN.AURORA]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.ARBITRUM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.OPTIMISM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.BASE]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.ETHEREUM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.AVAX]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.BSC]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.LINEA]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.MANTA]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.POLYGON]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.POLYGON_ZKEVM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.FANTOM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.MODE]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.SCROLL]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.ZKSYNC]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.METIS]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.XDAI]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', +} + +const fetch: any = async (timestamp: number, _, { chain, getLogs, createBalances, }: FetchOptions): Promise => { + const dailyVolume = createBalances(); + const data: any[] = await getLogs({ + target: contract[chain], + eventAbi: 'event LiFiTransferStarted(bytes32 indexed transactionId, string bridge, string integrator, address referrer, address sendingAssetId, address receiver, uint256 minAmount, uint256 destinationChainId,bool hasSourceSwaps,bool hasDestinationCall )' + }); + data.forEach((e: any) => { + if (e.integrator === 'sharpe.ai') { + dailyVolume.add(e.sendingAssetId, e.minAmount); + } + }); + + return { dailyBridgeVolume: dailyVolume, timestamp, } as any; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: Object.keys(contract).reduce((acc, chain) => { + return { + ...acc, + [chain]: { fetch, start: 1711963031, } + } + }, {}) +}; + +export default adapter; diff --git a/dexs/sharpe-dex/index.ts b/dexs/sharpe-dex/index.ts new file mode 100644 index 0000000000..acb6221f91 --- /dev/null +++ b/dexs/sharpe-dex/index.ts @@ -0,0 +1,28 @@ +import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { getPrices } from "../../utils/prices"; +import fetchURL from "../../utils/fetchURL"; + + +const fetch = async () => { + + const data:any = await fetchURL('https://base-api.sharpe.ai/api/dexVolume') + + return { + totalVolume: data?.totalVolume + }; +}; + + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ETHEREUM]: { + fetch, + start: 1711963031, + }, + }, +}; + +export default adapter; 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 0956/1590] 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 0957/1590] 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 0958/1590] 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 0959/1590] 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 0960/1590] 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 0961/1590] 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 0962/1590] 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 0963/1590] 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 0964/1590] 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 0965/1590] 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 0966/1590] 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 0967/1590] 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 0968/1590] 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 0969/1590] 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 0970/1590] 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 0971/1590] 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 0972/1590] 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 0973/1590] 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 0974/1590] 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 0975/1590] 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 0976/1590] 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 0977/1590] 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 0978/1590] 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 0979/1590] 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 0980/1590] 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 0981/1590] 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 0982/1590] 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 0983/1590] 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 0984/1590] 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 0985/1590] 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 0986/1590] 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 0987/1590] 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 0988/1590] 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 0989/1590] 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 0990/1590] 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 0991/1590] 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 0992/1590] 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 0993/1590] 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 0994/1590] 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 0995/1590] 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 0996/1590] 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 0997/1590] 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 0998/1590] 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 0999/1590] 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 1000/1590] 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 1001/1590] 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 1002/1590] 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 1003/1590] 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 1004/1590] 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 1005/1590] 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 1006/1590] 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 1007/1590] 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 1008/1590] 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 1009/1590] 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 1010/1590] 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 1011/1590] 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 1012/1590] 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 1013/1590] 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 1014/1590] 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 1015/1590] 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 1016/1590] 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 1017/1590] 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 1018/1590] 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 1019/1590] 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 1020/1590] 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 1021/1590] 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 1022/1590] 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 1023/1590] 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 1024/1590] 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 1025/1590] 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 1026/1590] 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 1027/1590] 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 1028/1590] 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 1029/1590] 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 1030/1590] 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 1031/1590] 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 1032/1590] 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 1033/1590] 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 1034/1590] 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 1035/1590] 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 1036/1590] 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 1037/1590] 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 1038/1590] 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 1039/1590] 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 1040/1590] 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 e4430af25fbb10989705f7bdd512774a80617025 Mon Sep 17 00:00:00 2001 From: Nicholas Maselli Date: Thu, 25 Jul 2024 00:59:27 -0400 Subject: [PATCH 1041/1590] adding saturn swap volume adaptor to defillama --- dexs/saturnswap/index.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 dexs/saturnswap/index.ts diff --git a/dexs/saturnswap/index.ts b/dexs/saturnswap/index.ts new file mode 100644 index 0000000000..d90d82d50d --- /dev/null +++ b/dexs/saturnswap/index.ts @@ -0,0 +1,27 @@ +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; +import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; + +const fetch = async (timestamp: any): Promise => { + const startOfDay = timestamp.startOfDay; + const response: any = await fetchURL( + `https://api.saturnswap.io/v1/defillama/volume?timestamp=${startOfDay}` + ); + const dailyVolume = response.volume.volume; + return { + dailyVolume: `${dailyVolume}`, + timestamp: startOfDay, + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.CARDANO]: { + fetch, + start: 1718251200, + }, + }, +}; + +export default adapter; 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 1042/1590] 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 1043/1590] 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 1044/1590] 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 1045/1590] 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 1046/1590] 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 1047/1590] 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 1048/1590] 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 1049/1590] 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 1050/1590] 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 4c3ecef1e325b71e674322ea83548c519934abbd Mon Sep 17 00:00:00 2001 From: leifu Date: Fri, 26 Jul 2024 01:36:56 +0300 Subject: [PATCH 1051/1590] Added kwenta to aggregator-derivatives --- aggregator-derivatives/kwenta/index.ts | 87 ++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 aggregator-derivatives/kwenta/index.ts diff --git a/aggregator-derivatives/kwenta/index.ts b/aggregator-derivatives/kwenta/index.ts new file mode 100644 index 0000000000..6166dc1e01 --- /dev/null +++ b/aggregator-derivatives/kwenta/index.ts @@ -0,0 +1,87 @@ +import { SimpleAdapter, FetchV2, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, GraphQLClient } from "graphql-request"; + +const PROVIDER_CONFIG = { + [CHAIN.BASE]: { + startTimestamp: 1702943900, + endpoint: "https://subgraph.satsuma-prod.com/404b0c87e4a3/kwenta/base-perps-v3/api", + query: gql` + query aggregateStats($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + perpsV3AggregateStats( + where: { timestamp_gte: $startTimestamp, timestamp_lte: $endTimestamp, period: "86400", marketId: "0" }, + first: 9999, orderBy: timestamp, orderDirection: asc + ) { timestamp, volume } + }`, + volumeField: "perpsV3AggregateStats" + }, + [CHAIN.OPTIMISM]: { + startTimestamp: 1671494100, + endpoint: "https://subgraph.satsuma-prod.com/404b0c87e4a3/kwenta/optimism-perps/api", + query: gql` + query aggregateStats($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + futuresAggregateStats( + where: { timestamp_gte: $startTimestamp, timestamp_lte: $endTimestamp, asset: "0x", period: "86400" }, + first: 9999, orderBy: timestamp, orderDirection: asc + ) { timestamp, volume } + }`, + volumeField: "futuresAggregateStats" + }, + [CHAIN.ARBITRUM]: { + startTimestamp: 1696032000, + endpoint: "https://subgraph.satsuma-prod.com/7ed49092fef1/equilibria/perennial-v2-arbitrum-new/api", + query: gql` + query aggregateStats($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + marketAccumulations( + where: { and: [{ bucket: daily, timestamp_gte: $startTimestamp, timestamp_lte: $endTimestamp }, + { or: [{ shortNotional_gt: "0" }, { longNotional_gt: "0" }] }] }, + first: 9999, orderBy: timestamp, orderDirection: asc + ) { timestamp, longNotional, shortNotional } + }`, + volumeField: "marketAccumulations" + } +}; + +const fetchVolume = async (chainId: CHAIN, startTimestamp: number, endTimestamp: number) => { + const { endpoint, query } = PROVIDER_CONFIG[chainId]; + try { + return await new GraphQLClient(endpoint).request(query, { startTimestamp, endTimestamp }); + } catch (e) { + throw new Error(`Failed to fetch data for chain ${chainId}: ${e.message}`); + } +}; + +const calculateVolume = (data: any, volumeField: string): number => + data[volumeField].reduce((acc: number, item: any) => + acc + (volumeField === "marketAccumulations" + ? (Number(item.longNotional) + Number(item.shortNotional)) / 1e6 + : Number(item.volume) / 1e18 + ), 0); + +const fetch: FetchV2 = async ({ startTimestamp, endTimestamp, chain }): Promise => { + const config = PROVIDER_CONFIG[chain]; + if (!config) throw new Error(`Unsupported chain: ${chain}`); + + const [dailyData, totalData] = await Promise.all([ + fetchVolume(chain as CHAIN, startTimestamp || (endTimestamp - 86400), endTimestamp), + fetchVolume(chain as CHAIN, config.startTimestamp, endTimestamp) + ]); + + return { + timestamp: endTimestamp, + dailyVolume: calculateVolume(dailyData, config.volumeField).toString(), + totalVolume: calculateVolume(totalData, config.volumeField).toString() + }; +}; + +const adapter: SimpleAdapter = { + adapter: Object.fromEntries( + Object.entries(PROVIDER_CONFIG).map(([chain, config]) => [ + chain, + { fetch, start: config.startTimestamp } + ]) + ), + version: 2 +}; + +export default adapter; \ No newline at end of file From e515b30256d02465681273d7ffe7ad04626872d7 Mon Sep 17 00:00:00 2001 From: maxwell-1999 Date: Fri, 26 Jul 2024 13:06:48 +0530 Subject: [PATCH 1052/1590] 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 57bc92b56987d174b6b58c805f4b2373546964d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Grzegorz=20=C5=81yskawa?= Date: Fri, 26 Jul 2024 13:37:52 +0200 Subject: [PATCH 1053/1590] colony dimension adapter update --- fees/colony/airdrops.ts | 74 ++++++++++++++ fees/colony/cai.ts | 51 ++++++++++ fees/colony/dex.ts | 68 ++++++++++--- fees/colony/earlystage.ts | 130 +++++++++++++++++++++++++ fees/colony/index.ts | 166 +++++++++++++++++++++++--------- fees/colony/masterChef.ts | 132 +++++++++++++++++++++++++ fees/colony/staking.ts | 41 ++++---- fees/colony/validatorProgram.ts | 79 +++++++++++++++ 8 files changed, 661 insertions(+), 80 deletions(-) create mode 100644 fees/colony/airdrops.ts create mode 100644 fees/colony/cai.ts create mode 100644 fees/colony/earlystage.ts create mode 100644 fees/colony/masterChef.ts create mode 100644 fees/colony/validatorProgram.ts diff --git a/fees/colony/airdrops.ts b/fees/colony/airdrops.ts new file mode 100644 index 0000000000..38fad0a196 --- /dev/null +++ b/fees/colony/airdrops.ts @@ -0,0 +1,74 @@ +import { Balances } from "@defillama/sdk"; +import { FetchOptions } from "../../adapters/types"; +import { request, gql } from "graphql-request"; +import fetchURL from "../../utils/fetchURL"; + +export interface Airdrops { + dailyHoldersRevenue: Balances; + totalHoldersRevenue: Balances; +} + +interface IGraphAirdropsResponse { + rewards: { + token: { + id: string + } + amount: string + }[] +} + +const queryAirdrops = gql + `query Airdrops($timestampFrom: BigInt!, $timestampTo: BigInt!) { + rewards( + where: {createdAt_gte: $timestampFrom, createdAt_lt: $timestampTo, categoryId_in: [3, 4]} + ) { + token { + id + } + amount + } + }`; + +export async function airdrops( + options: FetchOptions, + stakingV3SubgraphEndpoint: string, +): Promise { + const { createBalances, startTimestamp } = options; + + let dailyHoldersRevenue = createBalances() + let totalHoldersRevenue = createBalances() + + const day = Math.floor(startTimestamp / 86400) + const date = day * 86400 + + try { + const res: IGraphAirdropsResponse = await request(stakingV3SubgraphEndpoint, queryAirdrops, { + timestampFrom: date, + timestampTo: date + 86400 + }); + + if (res.rewards.length > 0) { + for (const airdrop of res.rewards) { + dailyHoldersRevenue.add(airdrop.token.id, airdrop.amount) + } + } + } catch (e) { + console.error(e); + } + + try { + const dataServiceResponse = await fetchURL('https://data-service.colonylab.io/airdrops') + + for (const airdrop of [...dataServiceResponse.airdrops[3] ?? [], ...dataServiceResponse.airdrops[4] ?? []]) { + totalHoldersRevenue.add(airdrop.address, airdrop.airdroppedAmount) + } + } + catch (e) { + console.error(e); + } + + return { + dailyHoldersRevenue, + totalHoldersRevenue + } +} diff --git a/fees/colony/cai.ts b/fees/colony/cai.ts new file mode 100644 index 0000000000..5bd7bcba81 --- /dev/null +++ b/fees/colony/cai.ts @@ -0,0 +1,51 @@ +import { Balances } from "@defillama/sdk"; +import { FetchOptions } from "../../adapters/types"; +import { queryDune } from "../../helpers/dune"; +import BigNumber from "bignumber.js"; + +const usdcToken = '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E' + +interface CaiFees { + dailyProtocolRevenue: Balances; + totalProtocolRevenue: Balances; + dailyHoldersRevenue: Balances; + totalHoldersRevenue: Balances; +} + +interface DuneResponse { + fees: string; + cum_fees: string; + date: string; +} + +export async function caiFees(options: FetchOptions): Promise { + const dailyProtocolRevenue = options.createBalances(); + const totalProtocolRevenue = options.createBalances(); + const dailyHoldersRevenue = options.createBalances(); + const totalHoldersRevenue = options.createBalances(); + + try { + const response = (await queryDune("3944152")); + + const result = response.filter((x: DuneResponse) => { + const recordTimestamp = Date.parse(x.date) / 1000 + return recordTimestamp >= options.fromTimestamp && recordTimestamp < options.toTimestamp + }) + + dailyProtocolRevenue.addToken(usdcToken, new BigNumber(result[0].fees).multipliedBy(0.5).multipliedBy(1e6).toFixed(0)) + totalProtocolRevenue.addToken(usdcToken, new BigNumber(result[0].cum_fees).multipliedBy(0.5).multipliedBy(1e6).toFixed(0)) + + dailyHoldersRevenue.addToken(usdcToken, new BigNumber(result[0].fees).multipliedBy(0.5).multipliedBy(1e6).toFixed(0)) + totalHoldersRevenue.addToken(usdcToken, new BigNumber(result[0].cum_fees).multipliedBy(0.5).multipliedBy(1e6).toFixed(0)) + } catch (e) { + console.error(e); + } + + return { + dailyProtocolRevenue, + totalProtocolRevenue, + dailyHoldersRevenue, + totalHoldersRevenue + } +} + diff --git a/fees/colony/dex.ts b/fees/colony/dex.ts index f926c56d70..f06d2dd472 100644 --- a/fees/colony/dex.ts +++ b/fees/colony/dex.ts @@ -1,21 +1,41 @@ import { getGraphDimensions } from "../../helpers/getUniSubgraph" -import { FetchOptions, FetchResultGeneric } from "../../adapters/types"; +import { FetchOptions } from "../../adapters/types"; +import { Balances } from "@defillama/sdk"; +import BigNumber from "bignumber.js"; -export async function dexRevenue( +interface DexFees { + timestamp: number + block?: number + dailyVolume: Balances + totalVolume: Balances + dailyProtocolRevenue: Balances + totalProtocolRevenue: Balances + dailySupplySideRevenue: Balances + totalSupplySideRevenue: Balances +} + +const usdcToken = '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E'; + +export async function dexFees( options: FetchOptions, - dexSubgraphEndpoint: string, - DexFactoryContract: string, -): Promise { + dexSubgraphEndpoint: string +): Promise { + const { createBalances } = options; - const endpoints = { - [options.chain]: dexSubgraphEndpoint, - }; + let dailyVolume = createBalances() + let totalVolume = createBalances() + let dailyProtocolRevenue = createBalances() + let totalProtocolRevenue = createBalances() + let dailySupplySideRevenue = createBalances() + let totalSupplySideRevenue = createBalances() const VOLUME_USD = "volumeUSD"; const FEES_USD = "feesUSD"; const v2Graph = getGraphDimensions({ - graphUrls: endpoints, + graphUrls: { + [options.chain]: dexSubgraphEndpoint, + }, totalVolume: { factory: "factories", field: VOLUME_USD, @@ -31,12 +51,32 @@ export async function dexRevenue( dailyFees: { factory: "dayData", field: FEES_USD, - }, - feesPercent: { - type: "fees", - ProtocolRevenue: 100, // Fees going back to liquidity providers } }); - return v2Graph(options.chain)(options) + const results = await v2Graph(options.chain)(options) + const resultsDailyFees = new BigNumber(results.dailyFees?.toString() ?? 0).multipliedBy(1e6) + const resultsTotalFees = new BigNumber(results.totalFees?.toString() ?? 0).multipliedBy(1e6) + const resultsDailyVolume = new BigNumber(results.dailyVolume?.toString() ?? 0).multipliedBy(1e6) + const resultsTotalVolume = new BigNumber(results.totalVolume?.toString() ?? 0).multipliedBy(1e6) + + dailySupplySideRevenue.add(usdcToken, resultsDailyFees.multipliedBy(5).div(6).toFixed(0)) + totalSupplySideRevenue.add(usdcToken, resultsTotalFees.multipliedBy(5).div(6).toFixed(0)) + + dailyProtocolRevenue.add(usdcToken, resultsDailyFees.div(6).toFixed(0)) + totalProtocolRevenue.add(usdcToken, resultsTotalFees.div(6).toFixed(0)) + + dailyVolume.add(usdcToken, resultsDailyVolume.toFixed(0)) + totalVolume.add(usdcToken, resultsTotalVolume.toFixed(0)) + + return { + timestamp: results.timestamp, + block: results.block, + dailyVolume, + totalVolume, + dailyProtocolRevenue, + totalProtocolRevenue, + dailySupplySideRevenue, + totalSupplySideRevenue + } } diff --git a/fees/colony/earlystage.ts b/fees/colony/earlystage.ts new file mode 100644 index 0000000000..633aabbe1b --- /dev/null +++ b/fees/colony/earlystage.ts @@ -0,0 +1,130 @@ +import { Balances } from "@defillama/sdk"; +import { FetchOptions } from "../../adapters/types"; +import { request, gql } from "graphql-request"; +import BigNumber from "bignumber.js"; + +const usdcToken = '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E' + +export interface EarlyStageFees { + dailyProtocolRevenue: Balances; + totalProtocolRevenue: Balances; + dailyHoldersRevenue: Balances; + totalHoldersRevenue: Balances; +} + +interface IProjectDistribution { + project: { + tokenPrice: string; + } + ceTokenColonyFee: string; + ceTokenStakingReward: string; + ceTokenDexBoost: string; + ceTokenDexInitialLiquidity: string; + stablecoinInitialLiquidity: string; + stablecoinColonyFee: string; + timestamp: number +} + +interface IGraphEarlyStageFeesResponse { + projectDistributions: IProjectDistribution[]; +} + +const queryEarlyStageFees = gql +`query fees { + projectDistributions(first: 1000) { + project { + tokenPrice + } + ceTokenColonyFee + ceTokenStakingReward + ceTokenDexBoost + ceTokenDexInitialLiquidity + stablecoinInitialLiquidity + stablecoinColonyFee + timestamp + } +}`; + +export async function earlyStageFees( + options: FetchOptions, + earlystageSubgraphEndpoint: string, +): Promise { + const { createBalances, startTimestamp } = options; + + let dailyProtocolRevenue = createBalances() + let totalProtocolRevenue = createBalances() + let dailyHoldersRevenue = createBalances() + let totalHoldersRevenue = createBalances() + + const day = Math.floor(startTimestamp / 86400) + const date = day * 86400 + + try { + const res: IGraphEarlyStageFeesResponse = await request(earlystageSubgraphEndpoint, queryEarlyStageFees); + + if (res.projectDistributions && res.projectDistributions.length) { + const todayRes = res.projectDistributions.filter(x => x.timestamp >= date && x.timestamp < date + 86400) + + // --- Protocol Revenue + dailyProtocolRevenue = todayRes.reduce((acc: Balances, x) => { + acc.add(usdcToken, x.stablecoinColonyFee) + return acc + }, dailyProtocolRevenue) + + totalProtocolRevenue = res.projectDistributions.reduce((acc: Balances, x) => { + acc.add(usdcToken, x.stablecoinColonyFee) + return acc + }, totalProtocolRevenue) + + dailyProtocolRevenue = todayRes.reduce((acc: Balances, x) => { + acc.add(usdcToken, new BigNumber(x.ceTokenColonyFee).multipliedBy(x.project.tokenPrice).div(new BigNumber(10).pow(18)).toFixed(0)) + return acc + }, dailyProtocolRevenue) + + totalProtocolRevenue = res.projectDistributions.reduce((acc: Balances, x) => { + acc.add(usdcToken, new BigNumber(x.ceTokenColonyFee).multipliedBy(x.project.tokenPrice).div(new BigNumber(10).pow(18)).toFixed(0)) + return acc + }, totalProtocolRevenue) + + dailyProtocolRevenue = todayRes.reduce((acc: Balances, x) => { + acc.add(usdcToken, new BigNumber(x.ceTokenDexInitialLiquidity).multipliedBy(x.project.tokenPrice).div(new BigNumber(10).pow(18)).toFixed(0)) + return acc + }, dailyProtocolRevenue) + + totalProtocolRevenue = res.projectDistributions.reduce((acc: Balances, x) => { + acc.add(usdcToken, new BigNumber(x.ceTokenDexInitialLiquidity).multipliedBy(x.project.tokenPrice).div(new BigNumber(10).pow(18)).toFixed(0)) + return acc + }, totalProtocolRevenue) + + dailyProtocolRevenue = todayRes.reduce((acc: Balances, x) => { + acc.add(usdcToken, x.stablecoinInitialLiquidity) + return acc + }, dailyProtocolRevenue) + + totalProtocolRevenue = res.projectDistributions.reduce((acc: Balances, x) => { + acc.add(usdcToken, x.stablecoinInitialLiquidity) + return acc + }, totalProtocolRevenue) + + // --- Holders Revenue + dailyHoldersRevenue = todayRes.reduce((acc: Balances, x) => { + acc.add(usdcToken, new BigNumber(x.ceTokenStakingReward).multipliedBy(x.project.tokenPrice).div(new BigNumber(10).pow(18)).toFixed(0)) + return acc + }, dailyHoldersRevenue) + + totalHoldersRevenue = res.projectDistributions.reduce((acc: Balances, x) => { + acc.add(usdcToken, new BigNumber(x.ceTokenStakingReward).multipliedBy(x.project.tokenPrice).div(new BigNumber(10).pow(18)).toFixed(0)) + return acc + }, totalHoldersRevenue) + } + } catch (e) { + console.error(e); + } + + return { + dailyProtocolRevenue, + totalProtocolRevenue, + dailyHoldersRevenue, + totalHoldersRevenue + } +} diff --git a/fees/colony/index.ts b/fees/colony/index.ts index 6661cf8760..50671b66d9 100644 --- a/fees/colony/index.ts +++ b/fees/colony/index.ts @@ -1,71 +1,149 @@ -import { Balances } from "@defillama/sdk"; -import { Adapter, FetchOptions, FetchResultV2, FetchResponseValue } from "../../adapters/types"; +import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { stakingRevenue } from "./staking"; -import { dexRevenue } from "./dex"; - -const { request, gql } = require("graphql-request"); +import { stakingFees } from "./staking"; +import { dexFees } from "./dex"; +import { earlyStageFees } from "./earlystage"; +import { caiFees } from "./cai"; +import { validatorProgramFees } from "./validatorProgram"; +import { airdrops } from "./airdrops"; +import { masterChef } from "./masterChef"; const ColonyGovernanceToken = "0xec3492a2508DDf4FDc0cD76F31f340b30d1793e6"; -const DexFactoryContract = "0x814ebf333bdaf1d2d364c22a1e2400a812f1f850" -const StakingV3Contract = "0x62685d3EAacE96D6145D35f3B7540d35f482DE5b" const stakingSubgraphEndpoint = 'https://graph.colonylab.io/subgraphs/name/colony/stakingV3-avalanche-production'; const dexSubgraphEndpoint = 'https://graph.colonylab.io/subgraphs/name/colony-dex/exchange-avalanche-production'; +const earlystageSubgraphEndpoint = 'https://graph.colonylab.io/subgraphs/name/colony/earlystage-avalanche-production'; +const masterChefSubgraphEndpoint = 'https://graph.colonylab.io/subgraphs/name/colony-dex/masterchef-avalanche-production' const methodology = { - HoldersRevenue: "Staking and Unstaking fees are collected by the protocol and distributed back to the stakers.", - ProtocolRevenue: "Colony DEX distribute swap fees back to liquidity providers." + HoldersRevenue: "Revenue distributed to token stakers includes 100% from CLY staking and unstaking fees, 50% of CAI fees, 8% of early-stage activity fees (ceTokens), and 70% of Validator Program activity revenues. This distribution creates a strong APY for CLY stakers, incentivizing protocol staking and long-term involvement in Colony's protocol.", + SupplySideRevenue: "83.33% of the fees collected from Colony DEX transactions are distributed to liquidity providers. Additionally, 10% of ceTokens are distributed to staked liquidity providers on Colony's DEX, incentivizing them to continue providing liquidity and supporting the exchange. Additional revenue can be generated through farm rewards based on specific marketing campaigns and incentive programs.", + ProtocolRevenue: "Revenue sources directly retained by the protocol include 50% from CAI fees (minting 0.20%, redemption 0.5%, and management 1%), 2% from early-stage platform activities (ceTokens distribution), 2% from USDC fundraised by a project, 16.66% from Colony DEX swap fees, and 30% from Validator Program activities. These funds support the protocol's ongoing development and operations." } -const convertToNumber = async (value: FetchResponseValue): Promise => { - if (typeof value === 'string') { - return Number(value); - } - if (typeof value === 'number') { - return value; - } - if (value instanceof Balances) { - return await value.getUSDValue(); - } - return 0; -}; - async function fetch(options: FetchOptions): Promise { - const { createBalances, startTimestamp } = options; - - let totalHoldersRevenue = createBalances(); - let dailyHoldersRevenue = createBalances(); + const { createBalances } = options; - const stakingResult = await stakingRevenue( + const stakingResult = await stakingFees( options, stakingSubgraphEndpoint, - ColonyGovernanceToken, - StakingV3Contract + ColonyGovernanceToken + ); + + const dexResult = await dexFees( + options, + dexSubgraphEndpoint + ); + + const earlystageResult = await earlyStageFees( + options, + earlystageSubgraphEndpoint, + ); + + const caiResult = await caiFees( + options + ); + + const validatorProgramResult = await validatorProgramFees( + options, + stakingSubgraphEndpoint + ); + + const airdropsResult = await airdrops( + options, + stakingSubgraphEndpoint ); - const dexResult = await dexRevenue( + const masterChefResults = await masterChef( options, - dexSubgraphEndpoint, - DexFactoryContract + masterChefSubgraphEndpoint, + earlystageSubgraphEndpoint ); - const mergedResult = { + let dailyFees = createBalances(); + let totalFees = createBalances(); + let dailyRevenue = createBalances(); + let totalRevenue = createBalances(); + let dailyHoldersRevenue = createBalances(); + let totalHoldersRevenue = createBalances(); + let dailyProtocolRevenue = createBalances(); + let totalProtocolRevenue = createBalances(); + let dailySupplySideRevenue = createBalances(); + let totalSupplySideRevenue = createBalances(); + + // --- Holders Revenue + dailyHoldersRevenue.addBalances(stakingResult.dailyHoldersRevenue) + totalHoldersRevenue.addBalances(stakingResult.totalHoldersRevenue) + + dailyHoldersRevenue.addBalances(earlystageResult.dailyHoldersRevenue) + totalHoldersRevenue.addBalances(earlystageResult.totalHoldersRevenue) + + dailyHoldersRevenue.addBalances(caiResult.dailyHoldersRevenue) + totalHoldersRevenue.addBalances(caiResult.totalHoldersRevenue) + + dailyHoldersRevenue.addBalances(validatorProgramResult.dailyHoldersRevenue) + totalHoldersRevenue.addBalances(validatorProgramResult.totalHoldersRevenue) + + dailyHoldersRevenue.addBalances(airdropsResult.dailyHoldersRevenue) + totalHoldersRevenue.addBalances(airdropsResult.totalHoldersRevenue) + + // --- Protocol Revenue + dailyProtocolRevenue.addBalances(earlystageResult.dailyProtocolRevenue) + totalProtocolRevenue.addBalances(earlystageResult.totalProtocolRevenue) + + dailyProtocolRevenue.addBalances(caiResult.dailyProtocolRevenue) + totalProtocolRevenue.addBalances(caiResult.totalProtocolRevenue) + + dailyProtocolRevenue.addBalances(validatorProgramResult.dailyProtocolRevenue) + totalProtocolRevenue.addBalances(validatorProgramResult.totalProtocolRevenue) + + dailyProtocolRevenue.addBalances(dexResult.dailyProtocolRevenue) + totalProtocolRevenue.addBalances(dexResult.totalProtocolRevenue) + + // --- Supply Side Revenue + dailySupplySideRevenue.addBalances(dexResult.dailySupplySideRevenue) + totalSupplySideRevenue.addBalances(dexResult.totalSupplySideRevenue) + + dailySupplySideRevenue.addBalances(masterChefResults.dailySupplySideRevenue) + totalSupplySideRevenue.addBalances(masterChefResults.totalSupplySideRevenue) + + // --- Revenue + dailyRevenue.addBalances(dailyProtocolRevenue) + totalRevenue.addBalances(totalProtocolRevenue) + + dailyRevenue.addBalances(dailyHoldersRevenue) + totalRevenue.addBalances(totalHoldersRevenue) + + // --- Fees + dailyFees.addBalances(dailyRevenue) + totalFees.addBalances(totalRevenue) + + dailyFees.addBalances(dailySupplySideRevenue) + totalFees.addBalances(totalSupplySideRevenue) + + return { timestamp: dexResult.timestamp, block: dexResult.block, - totalVolume: dexResult.totalVolume, + dailyVolume: dexResult.dailyVolume, + totalVolume: dexResult.totalVolume, + + dailyFees, + totalFees, + + dailyRevenue, + totalRevenue, - totalFees: await convertToNumber(dexResult.totalFees) + stakingResult.totalFees, - dailyFees: await convertToNumber(dexResult.dailyFees) + stakingResult.dailyFees, + dailyHoldersRevenue, + totalHoldersRevenue, - totalHoldersRevenue: stakingResult.totalHoldersRevenue, - dailyHoldersRevenue: stakingResult.dailyHoldersRevenue, - dailyProtocolRevenue: dexResult["dailyProtocolRevenue"], - totalProtocolRevenue: dexResult["totalProtocolRevenue"], - }; - return mergedResult; + dailyProtocolRevenue, + totalProtocolRevenue, + + dailySupplySideRevenue, + totalSupplySideRevenue + } } const adapter: Adapter = { @@ -73,7 +151,7 @@ const adapter: Adapter = { adapter: { [CHAIN.AVAX]: { fetch, - start: 1711370069, + start: 1704067200, meta: { methodology } diff --git a/fees/colony/masterChef.ts b/fees/colony/masterChef.ts new file mode 100644 index 0000000000..76ea4bb1d6 --- /dev/null +++ b/fees/colony/masterChef.ts @@ -0,0 +1,132 @@ +import { Balances } from "@defillama/sdk"; +import { FetchOptions } from "../../adapters/types"; +import { request, gql } from "graphql-request"; +import BigNumber from "bignumber.js"; + +const usdcToken = '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E' + +export interface Airdrops { + dailySupplySideRevenue: Balances; + totalSupplySideRevenue: Balances; +} + +interface IGraphAirdropsResponse { + rewarders: { + rewardToken: string + name: string + decimals: number + schedule: { + rangeAmount: string + }[] + startTimestamp: number + }[] +} + +interface ICeTokensResponse { + projects: { + ceToken: { + id: string + } + tokenPrice: string + }[] +} + +const rewardersQuery = gql + `{ + rewarders { + rewardToken + name + decimals + schedule { + rangeAmount + } + startTimestamp + } + }`; + +const ceTokensQuery = gql + `{ + projects(where: {ceToken_not: null}) { + ceToken { + id + } + tokenPrice + } + }`; + +function addTokenBalance( + balance: Balances, + prices: Map, + tokenAddress: string, + tokenDecimals: number, + rewarderSchedule: Array<{ rangeAmount: string }>, + isCeToken: boolean +) { + if (isCeToken) { + const price = prices.get(tokenAddress.toLowerCase()) ?? 0 + const totalCeToken = rewarderSchedule.reduce((acc, x) => { + return acc.plus(x.rangeAmount) + }, new BigNumber(0)) + + balance.add(usdcToken, totalCeToken.multipliedBy(price).div(new BigNumber(10).pow(tokenDecimals)).toFixed(0)) + } + else { + balance.add(tokenAddress, rewarderSchedule.reduce((acc, x) => { + return acc.plus(x.rangeAmount) + }, new BigNumber(0)).toFixed(0)) + } + + return balance +} + +export async function masterChef( + options: FetchOptions, + masterChefSubgraphEndpoint: string, + earlyStageSubgraphEndpoint: string, +): Promise { + const { createBalances, startTimestamp } = options; + + let dailySupplySideRevenue = createBalances() + let totalSupplySideRevenue = createBalances() + + const day = Math.floor(startTimestamp / 86400) + const date = day * 86400 + + try { + const ceTokenRes: ICeTokensResponse = await request(earlyStageSubgraphEndpoint, ceTokensQuery); + const priceMap = new Map() + for (const ceToken of ceTokenRes.projects) { + priceMap.set(ceToken.ceToken.id.toLowerCase(), ceToken.tokenPrice) + } + + const rewardersRes: IGraphAirdropsResponse = await request(masterChefSubgraphEndpoint, rewardersQuery); + for (const rewarder of rewardersRes.rewarders) { + if (rewarder.startTimestamp >= date && rewarder.startTimestamp < date + 86400) { + addTokenBalance( + dailySupplySideRevenue, + priceMap, + rewarder.rewardToken, + rewarder.decimals, + rewarder.schedule, + rewarder.name.includes(' ceToken') + ) + } + addTokenBalance( + totalSupplySideRevenue, + priceMap, + rewarder.rewardToken, + rewarder.decimals, + rewarder.schedule, + rewarder.name.includes(' ceToken') + ) + } + + } catch (e) { + console.error(e); + } + + return { + dailySupplySideRevenue, + totalSupplySideRevenue + } +} diff --git a/fees/colony/staking.ts b/fees/colony/staking.ts index 3ee7379ccd..f6dd9a3af5 100644 --- a/fees/colony/staking.ts +++ b/fees/colony/staking.ts @@ -1,13 +1,10 @@ import { Balances } from "@defillama/sdk"; import { FetchOptions } from "../../adapters/types"; +import { request, gql } from "graphql-request"; -const { request, gql } = require("graphql-request"); - -export interface StakingRevenue { - totalFees: number; - dailyFees: number; - totalHoldersRevenue: number; - dailyHoldersRevenue: number; +export interface StakingFees { + dailyHoldersRevenue: Balances; + totalHoldersRevenue: Balances; } interface ITotalStakeFees { @@ -37,40 +34,40 @@ const queryStakingFeesMetrics = gql } }`; -export async function stakingRevenue( +export async function stakingFees( options: FetchOptions, stakingSubgraphEndpoint: string, - ColonyGovernanceToken: string, - StakingV3Contract: string, -): Promise { + ColonyGovernanceToken: string +): Promise { const { createBalances, startTimestamp } = options; - let totalHoldersRevenue = createBalances(); - let dailyHoldersRevenue = createBalances(); + let dailyHoldersRevenue = createBalances() + let totalHoldersRevenue = createBalances() const day = Math.floor(startTimestamp / 86400) const date = day * 86400 + // add staking airdrops to be considered as holders revenue + try { const res: IGraphStakeResponse = await request(stakingSubgraphEndpoint, queryStakingFeesMetrics, { date }); + if (res.dailyMetrics && res.dailyMetrics.length) { + dailyHoldersRevenue.add(ColonyGovernanceToken, res.dailyMetrics[0].stakeFees); + totalHoldersRevenue.add(ColonyGovernanceToken, res.dailyMetrics[0].unstakeFees); + } + if (res.metrics && res.metrics.length) { - totalHoldersRevenue.add(ColonyGovernanceToken, res.metrics[0].totalStakeFees); + dailyHoldersRevenue.add(ColonyGovernanceToken, res.metrics[0].totalStakeFees); totalHoldersRevenue.add(ColonyGovernanceToken, res.metrics[0].totalUnstakeFees); } - if (res.dailyMetrics && res.dailyMetrics.length) { - dailyHoldersRevenue.add(ColonyGovernanceToken, res.dailyMetrics[0].stakeFees); - dailyHoldersRevenue.add(ColonyGovernanceToken, res.dailyMetrics[0].unstakeFees); - } } catch (e) { console.error(e); } return { - totalFees: await totalHoldersRevenue.getUSDValue(), - dailyFees: await dailyHoldersRevenue.getUSDValue(), - totalHoldersRevenue: await totalHoldersRevenue.getUSDValue(), - dailyHoldersRevenue: await dailyHoldersRevenue.getUSDValue(), + dailyHoldersRevenue, + totalHoldersRevenue } } diff --git a/fees/colony/validatorProgram.ts b/fees/colony/validatorProgram.ts new file mode 100644 index 0000000000..330904e2ab --- /dev/null +++ b/fees/colony/validatorProgram.ts @@ -0,0 +1,79 @@ +import { Balances } from "@defillama/sdk"; +import { FetchOptions } from "../../adapters/types"; +import { request, gql } from "graphql-request"; +import BigNumber from "bignumber.js"; + +export interface ValidatorProgramFees { + dailyProtocolRevenue: Balances; + totalProtocolRevenue: Balances; + dailyHoldersRevenue: Balances; + totalHoldersRevenue: Balances; +} + +interface IGraphEarlyStageFeesResponse { + rewards: { + amount: string + }[] + rewardPerTokenPerCategories: { + amountTotal: string + }[] +} + +const wavaxToken = '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7' + +const queryValidatorProgramFees = gql + `query ValidatorProgramFees($timestampFrom: BigInt!, $timestampTo: BigInt!) { + rewards( + where: {createdAt_gte: $timestampFrom, createdAt_lt: $timestampTo, token: "${wavaxToken}", categoryId: 1} + ) { + amount + } + rewardPerTokenPerCategories( + where: {token: "${wavaxToken}", categoryId: 1} + ) { + amountTotal + } + }`; + + +export async function validatorProgramFees( + options: FetchOptions, + stakingV3SubgraphEndpoint: string, +): Promise { + const { createBalances, startTimestamp } = options; + + let dailyProtocolRevenue = createBalances() + let totalProtocolRevenue = createBalances() + let dailyHoldersRevenue = createBalances() + let totalHoldersRevenue = createBalances() + + const day = Math.floor(startTimestamp / 86400) + const date = day * 86400 + + try { + const res: IGraphEarlyStageFeesResponse = await request(stakingV3SubgraphEndpoint, queryValidatorProgramFees, { + timestampFrom: date, + timestampTo: date + 86400 + }); + + if (res.rewards[0] !== undefined) { + dailyProtocolRevenue.add(wavaxToken, new BigNumber(res.rewards[0].amount).div(0.7).multipliedBy(0.3).toFixed(0)) + dailyHoldersRevenue.add(wavaxToken, res.rewards[0].amount) + } + + if (res.rewardPerTokenPerCategories[0] !== undefined) { + totalProtocolRevenue.add(wavaxToken, new BigNumber(res.rewardPerTokenPerCategories[0].amountTotal).div(0.7).multipliedBy(0.3).toFixed(0)) + totalHoldersRevenue.add(wavaxToken, res.rewardPerTokenPerCategories[0].amountTotal) + } + + } catch (e) { + console.error(e); + } + + return { + dailyProtocolRevenue, + totalProtocolRevenue, + dailyHoldersRevenue, + totalHoldersRevenue + } +} 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 1054/1590] 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 1055/1590] 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 = { From 447e1f63aebdaffde586051235bc328ca8f395a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Grzegorz=20=C5=81yskawa?= Date: Fri, 26 Jul 2024 16:02:47 +0200 Subject: [PATCH 1056/1590] colony staking revenue fix --- fees/colony/staking.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fees/colony/staking.ts b/fees/colony/staking.ts index f6dd9a3af5..8bbb8d587d 100644 --- a/fees/colony/staking.ts +++ b/fees/colony/staking.ts @@ -47,18 +47,16 @@ export async function stakingFees( const day = Math.floor(startTimestamp / 86400) const date = day * 86400 - // add staking airdrops to be considered as holders revenue - try { const res: IGraphStakeResponse = await request(stakingSubgraphEndpoint, queryStakingFeesMetrics, { date }); if (res.dailyMetrics && res.dailyMetrics.length) { dailyHoldersRevenue.add(ColonyGovernanceToken, res.dailyMetrics[0].stakeFees); - totalHoldersRevenue.add(ColonyGovernanceToken, res.dailyMetrics[0].unstakeFees); + dailyHoldersRevenue.add(ColonyGovernanceToken, res.dailyMetrics[0].unstakeFees); } if (res.metrics && res.metrics.length) { - dailyHoldersRevenue.add(ColonyGovernanceToken, res.metrics[0].totalStakeFees); + totalHoldersRevenue.add(ColonyGovernanceToken, res.metrics[0].totalStakeFees); totalHoldersRevenue.add(ColonyGovernanceToken, res.metrics[0].totalUnstakeFees); } From 0dd41eed29daaa90160c6d5618046feeaea9c13f Mon Sep 17 00:00:00 2001 From: Anirudha619 Date: Fri, 26 Jul 2024 23:53:09 +0530 Subject: [PATCH 1057/1590] add daily volume --- aggregator-derivatives/sharpe-perp/index.ts | 6 ++++-- dexs/sharpe-dex/index.ts | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/aggregator-derivatives/sharpe-perp/index.ts b/aggregator-derivatives/sharpe-perp/index.ts index 0a6f8ab7ef..fa4e03cf79 100644 --- a/aggregator-derivatives/sharpe-perp/index.ts +++ b/aggregator-derivatives/sharpe-perp/index.ts @@ -8,9 +8,11 @@ const fetch = async (options: any): Promise => { const fetchOptions:any = {method: 'GET'}; const data:any = await fetchURL('https://api-evm.orderly.network/v1/public/volume/stats?broker_id=sharpe_ai') - + const dailyData:any = await fetchURL('https://base-api.sharpe.ai/api/dailySharpePerpVolume') + return { - totalVolume: data?.data?.perp_volume_ltd + totalVolume: data?.data?.perp_volume_ltd, + dailyVolume: dailyData?.dailyVolume }; }; // CHAIN.ARBITRUM, CHAIN.MANTLE, CHAIN.OPTIMISM, CHAIN.BASE, diff --git a/dexs/sharpe-dex/index.ts b/dexs/sharpe-dex/index.ts index acb6221f91..c0e9affed9 100644 --- a/dexs/sharpe-dex/index.ts +++ b/dexs/sharpe-dex/index.ts @@ -8,9 +8,11 @@ import fetchURL from "../../utils/fetchURL"; const fetch = async () => { const data:any = await fetchURL('https://base-api.sharpe.ai/api/dexVolume') + const dailyData:any = await fetchURL('https://base-api.sharpe.ai/api/dailySharpeDexVolume') return { - totalVolume: data?.totalVolume + totalVolume: data?.totalVolume, + dailyVolume: dailyData?.dailyVolume }; }; From d22d84e92d1148ac9e6736d114412abe8f634a68 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 27 Jul 2024 14:43:58 +0000 Subject: [PATCH 1058/1590] fix nuri v3 --- dexs/nuri-exchange-v2/index.ts | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/dexs/nuri-exchange-v2/index.ts b/dexs/nuri-exchange-v2/index.ts index 5125719eea..9c1b644180 100644 --- a/dexs/nuri-exchange-v2/index.ts +++ b/dexs/nuri-exchange-v2/index.ts @@ -1,14 +1,5 @@ -import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; - -const adapters = univ2Adapter({ - [CHAIN.SCROLL]: "https://api.studio.thegraph.com/query/66247/nuri-cl/version/latest" -}, { - factoriesName: "factories", - dayData: "uniswapDayData", - dailyVolume: "volumeUSD", - totalVolume: "totalVolumeUSD", -}); - -adapters.adapter.scroll.start = 1714608000; -export default adapters; +import { CHAIN } from '../../helpers/chains' +import { uniV3Exports } from '../../helpers/uniswap' +export default uniV3Exports({ + [CHAIN.SCROLL]: { factory: '0xAAA32926fcE6bE95ea2c51cB4Fcb60836D320C42' } +}) From e0dc0e7be5a4ef3cae02eb3c5763b42365193a95 Mon Sep 17 00:00:00 2001 From: Frost Date: Sun, 28 Jul 2024 17:47:50 +0800 Subject: [PATCH 1059/1590] add yakafinance dexs --- dexs/yakafinance/index.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 dexs/yakafinance/index.ts diff --git a/dexs/yakafinance/index.ts b/dexs/yakafinance/index.ts new file mode 100644 index 0000000000..2f88e5bd03 --- /dev/null +++ b/dexs/yakafinance/index.ts @@ -0,0 +1,13 @@ +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter({ + [CHAIN.SEI]: "https://api.studio.thegraph.com/query/82132/yaka-finance/version/latest" +}, { + factoriesName: "pancakeFactories", + dayData: "pancakeDayData", +}); + + +adapters.adapter.sei.start = 1719432193; +export default adapters; \ No newline at end of file From 3683ca135b4f6e032c5be1332ba04f4a9aece606 Mon Sep 17 00:00:00 2001 From: anxia0818 <1298003858@qq.com> Date: Mon, 29 Jul 2024 10:48:10 +0800 Subject: [PATCH 1060/1590] fix : add cetus --- fees/cetus/index.ts | 49 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 fees/cetus/index.ts diff --git a/fees/cetus/index.ts b/fees/cetus/index.ts new file mode 100644 index 0000000000..29fbb5bfb8 --- /dev/null +++ b/fees/cetus/index.ts @@ -0,0 +1,49 @@ +import { Adapter, FetchResultV2, FetchV2 } from '../../adapters/types'; +import { CHAIN } from '../../helpers/chains'; +import fetchURL from '../../utils/fetchURL'; + +const cetusApiURL = 'https://api-sui.cetus.zone/v2/sui/daily-fees'; + +interface CetusStats { + data:{ + fee: string; + protocolFee: string; + } +} + +const methodology = { + Fees: 'Swap fees generated by the swap transactions on Cetus Protocol.', + ProtocolRevenue: 'Protocol fees charged from the swap fees.', +}; + +const fetchCetusStats: FetchV2 = async ({ + startTimestamp, + endTimestamp, +}): Promise => { + const url = `${cetusApiURL}?fromTimestamp=${startTimestamp}&toTimestamp=${endTimestamp}`; + const { data }: CetusStats = await fetchURL(url); + const dailyFees = data.fee; + const dailyRevenue = data.protocolFee; + return { + dailyFees: dailyFees, + dailyRevenue: dailyRevenue, + dailyProtocolRevenue: dailyRevenue, + }; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.SUI]: { + runAtCurrTime: false, + customBackfill: undefined, + fetch: fetchCetusStats, + start: 1704067200, + meta: { + methodology, + }, + }, + }, +}; + +export default adapter; From 716afd2becb6da298334a4cc0ad28fd83633e93e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 29 Jul 2024 06:41:55 +0000 Subject: [PATCH 1061/1590] remove not use --- dexs/kwenta/index.ts | 37 ------------------------------------- 1 file changed, 37 deletions(-) delete mode 100644 dexs/kwenta/index.ts diff --git a/dexs/kwenta/index.ts b/dexs/kwenta/index.ts deleted file mode 100644 index 2dc3cafe85..0000000000 --- a/dexs/kwenta/index.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Chain } from "@defillama/sdk/build/general" -import { CHAIN } from "../../helpers/chains"; -import { SimpleAdapter } from "../../adapters/types"; -import fetchURL from "../../utils/fetchURL"; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; -import { FetchResultVolume } from "../../adapters/types"; - -interface IData { - timestamp: number; - volume: number; -} -const url = 'https://storage.kwenta.io/25710180-23d8-43f4-b0c9-5b7f55f63165-bucket/data/stats/daily_stats.json'; -const fetchData = (_: Chain) => { - return async (timestamp: number): Promise => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp) - const value: IData[] = (await fetchURL(url)); - const dailyVolume = value.find((d) => d.timestamp === todaysTimestamp)?.volume; - const totalVolume = value.filter((e: IData) => e.timestamp <= todaysTimestamp) - .reduce((acc: number, e: IData) => acc + e.volume, 0) - return { - dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, - totalVolume: totalVolume ? `${totalVolume}` : undefined, - timestamp: todaysTimestamp - } - } -} - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.OPTIMISM]: { - fetch: fetchData(CHAIN.OPTIMISM), - start: 1682121600, - }, - } -}; - -export default adapter; From fb42940a910b364a056fcb15df73dd8eb1223e40 Mon Sep 17 00:00:00 2001 From: bijianing97 <826015751@qq.com> Date: Mon, 29 Jul 2024 17:10:55 +0800 Subject: [PATCH 1062/1590] add totalVolume for synfutures-v3 --- dexs/synfutures-v3/index.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/dexs/synfutures-v3/index.ts b/dexs/synfutures-v3/index.ts index 68189a6cc6..572ee56f75 100644 --- a/dexs/synfutures-v3/index.ts +++ b/dexs/synfutures-v3/index.ts @@ -31,6 +31,7 @@ const fetch = (chain: Chain) => { { createBalances, startOfDay }: FetchOptions ) => { const dailyVolume = createBalances(); + const totalVolume = createBalances(); const to = getTimestampAtStartOfNextDayUTC(timestamp) const from = getTimestampAtStartOfDayUTC(timestamp) const graphQL = `{ @@ -60,8 +61,33 @@ const fetch = (chain: Chain) => { } } + const totalVolumeGraphQl = `{ + quoteDatas { + id + quote{ + decimals + } + totalVolume + } + }`; + + const totalVolumeData = await request( + info[chain].subgraph, + totalVolumeGraphQl + ); + + for (const { + id, + quote: { decimals }, + totalVolume, + } of totalVolumeData.quoteDatas) { + totalVolume.addToken(id, convertDecimals(totalVolume, decimals)); + } + + return { dailyVolume, + totalVolume, timestamp: startOfDay, }; }; From 39aa2f9322e2012994dc279e5f8dcf42076b51b9 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Mon, 29 Jul 2024 11:19:35 +0200 Subject: [PATCH 1063/1590] feat:Adapter, Arrakis-v2 Fees --- fees/arrakis-v2/index.ts | 129 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 fees/arrakis-v2/index.ts diff --git a/fees/arrakis-v2/index.ts b/fees/arrakis-v2/index.ts new file mode 100644 index 0000000000..a537c39efb --- /dev/null +++ b/fees/arrakis-v2/index.ts @@ -0,0 +1,129 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { Adapter, FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +type IVault = { + helper: string; + factory: string; +}; + +type IAddress = { + [s: string | Chain]: IVault; +}; + +const abi = { + numVaults: "uint256:numVaults", + vaults: + "function vaults(uint256 startIndex_, uint256 endIndex_) returns (address[] memory)", + token0: "address:token0", + token1: "address:token1", + fees: "function totalUnderlyingWithFees(address vault_) external view returns (uint256 amount0, uint256 amount1, uint256 fee0, uint256 fee1)", +}; + +const contracts: IAddress = { + [CHAIN.ETHEREUM]: { + helper: "0x89E4bE1F999E3a58D16096FBe405Fc2a1d7F07D6", + factory: "0xECb8Ffcb2369EF188A082a662F496126f66c8288", + }, + [CHAIN.POLYGON]: { + helper: "0x89E4bE1F999E3a58D16096FBe405Fc2a1d7F07D6", + factory: "0xECb8Ffcb2369EF188A082a662F496126f66c8288", + }, + [CHAIN.OPTIMISM]: { + helper: "0x89E4bE1F999E3a58D16096FBe405Fc2a1d7F07D6", + factory: "0xECb8Ffcb2369EF188A082a662F496126f66c8288", + }, + [CHAIN.BASE]: { + helper: "0x89E4bE1F999E3a58D16096FBe405Fc2a1d7F07D6", + factory: "0xECb8Ffcb2369EF188A082a662F496126f66c8288", + }, + [CHAIN.ARBITRUM]: { + helper: "0x89E4bE1F999E3a58D16096FBe405Fc2a1d7F07D6", + factory: "0xECb8Ffcb2369EF188A082a662F496126f66c8288", + }, +}; + +async function getVaultsFees( + { api, fromApi, toApi, createBalances }: FetchOptions, + { helper, factory }: IVault +) { + const totalFees = createBalances(); + const dailyFees = createBalances(); + + const limit = await api.call({ target: factory, abi: abi.numVaults }); + const vaults = await api.call({ + target: factory, + abi: abi.vaults, + params: [0, limit], + }); + + const calls = vaults.map((v: string) => ({ target: helper, params: [v] })); + + const [token0s, token1s, prevBals, currBals] = await Promise.all([ + api.multiCall({ calls: vaults, abi: abi.token0, permitFailure: true }), + api.multiCall({ calls: vaults, abi: abi.token1, permitFailure: true }), + fromApi.multiCall({ calls, abi: abi.fees, permitFailure: true }), + toApi.multiCall({ calls, abi: abi.fees, permitFailure: true }), + ]); + + vaults.forEach((_: string, index: number) => { + const token0 = token0s[index]; + const prevFee0 = prevBals[index].fee0; + const currFee0 = currBals[index].fee0; + + const token1 = token1s[index]; + const prevFee1 = prevBals[index].fee1; + const currFee1 = currBals[index].fee1; + + if (token0 && prevFee0 && currFee0) { + totalFees.add(token0, currFee0); + const dailyFee0 = BigInt(currFee0) - BigInt(prevFee0); + if (dailyFee0 >= 0) { + dailyFees.add(token0, dailyFee0); + } + } + + if (token1 && prevFee1 && currFee1) { + totalFees.add(token1, currFee1); + const dailyFee1 = BigInt(currFee1) - BigInt(prevFee1); + if (dailyFee1 >= 0) { + dailyFees.add(token1, dailyFee1); + } + } + }); + + return { totalFees, dailyFees }; +} + +const adapter: Adapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: (options: FetchOptions) => + getVaultsFees(options, contracts[CHAIN.ETHEREUM]), + start: 1693039022, + }, + [CHAIN.POLYGON]: { + fetch: (options: FetchOptions) => + getVaultsFees(options, contracts[CHAIN.POLYGON]), + start: 1693039022, + }, + [CHAIN.OPTIMISM]: { + fetch: (options: FetchOptions) => + getVaultsFees(options, contracts[CHAIN.OPTIMISM]), + start: 1693039022, + }, + [CHAIN.BASE]: { + fetch: (options: FetchOptions) => + getVaultsFees(options, contracts[CHAIN.BASE]), + start: 1693039022, + }, + [CHAIN.ARBITRUM]: { + fetch: (options: FetchOptions) => + getVaultsFees(options, contracts[CHAIN.ARBITRUM]), + start: 1693039022, + }, + }, + version: 2, +}; + +export default adapter; From ccdb4856bec80c82a32ddae29dbf068519a1479f Mon Sep 17 00:00:00 2001 From: bijianing97 <826015751@qq.com> Date: Mon, 29 Jul 2024 17:31:20 +0800 Subject: [PATCH 1064/1590] rename cumulativeVolume --- dexs/synfutures-v3/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/synfutures-v3/index.ts b/dexs/synfutures-v3/index.ts index 572ee56f75..3d84d72fbf 100644 --- a/dexs/synfutures-v3/index.ts +++ b/dexs/synfutures-v3/index.ts @@ -31,7 +31,7 @@ const fetch = (chain: Chain) => { { createBalances, startOfDay }: FetchOptions ) => { const dailyVolume = createBalances(); - const totalVolume = createBalances(); + const cumulativeVolume = createBalances(); const to = getTimestampAtStartOfNextDayUTC(timestamp) const from = getTimestampAtStartOfDayUTC(timestamp) const graphQL = `{ @@ -81,13 +81,13 @@ const fetch = (chain: Chain) => { quote: { decimals }, totalVolume, } of totalVolumeData.quoteDatas) { - totalVolume.addToken(id, convertDecimals(totalVolume, decimals)); + cumulativeVolume.addToken(id, convertDecimals(totalVolume, decimals)); } return { dailyVolume, - totalVolume, + totalVolume: cumulativeVolume, timestamp: startOfDay, }; }; From 601ca28c0d8754bd2dcae10ce7e1160993836aa8 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Mon, 29 Jul 2024 12:35:29 +0200 Subject: [PATCH 1065/1590] feat:Adapter, Stargate-finance-v2 [ FEES ] --- fees/stargate-finance-v2/index.ts | 106 ++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 fees/stargate-finance-v2/index.ts diff --git a/fees/stargate-finance-v2/index.ts b/fees/stargate-finance-v2/index.ts new file mode 100644 index 0000000000..621da60bb3 --- /dev/null +++ b/fees/stargate-finance-v2/index.ts @@ -0,0 +1,106 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +type IAddress = { + [s: string | Chain]: string[]; +}; + +const abi = { + token: "address:token", + fee: "uint64:treasuryFee", +}; + +const contracts: IAddress = { + [CHAIN.ETHEREUM]: [ + "0x77b2043768d28E9C9aB44E1aBfC95944bcE57931", + "0xc026395860Db2d07ee33e05fE50ed7bD583189C7", + "0x933597a323Eb81cAe705C5bC29985172fd5A3973", + "0xcDafB1b2dB43f366E48e6F614b8DCCBFeeFEEcD3", + "0x268Ca24DAefF1FaC2ed883c598200CcbB79E931D", + ], + [CHAIN.BSC]: ["0x138EB30f73BC423c6455C53df6D89CB01d9eBc63"], + [CHAIN.AVAX]: [ + "0x5634c4a5FEd09819E3c46D86A965Dd9447d86e47", + "0x12dC9256Acc9895B076f6638D628382881e62CeE", + ], + [CHAIN.POLYGON]: [ + "0x9Aa02D4Fae7F58b8E8f34c66E756cC734DAc7fe4", + "0xd47b03ee6d86Cf251ee7860FB2ACf9f91B9fD4d7", + ], + [CHAIN.ARBITRUM]: [ + "0xA45B5130f36CDcA45667738e2a258AB09f4A5f7F", + "0xe8CDF27AcD73a434D661C84887215F7598e7d0d3", + "0xcE8CcA271Ebc0533920C83d39F417ED6A0abB7D0", + ], + [CHAIN.OPTIMISM]: [ + "0xe8CDF27AcD73a434D661C84887215F7598e7d0d3", + "0xcE8CcA271Ebc0533920C83d39F417ED6A0abB7D0", + "0x19cFCE47eD54a88614648DC3f19A5980097007dD", + ], + [CHAIN.METIS]: [ + "0xD9050e7043102a0391F81462a3916326F86331F0", + "0x36ed193dc7160D3858EC250e69D12B03Ca087D08", + "0x4dCBFC0249e8d5032F89D6461218a9D2eFff5125", + ], + [CHAIN.LINEA]: ["0x81F6138153d473E8c5EcebD3DC8Cd4903506B075"], + [CHAIN.MANTLE]: [ + "0x4c1d3Fc3fC3c177c3b633427c2F769276c547463", + "0xAc290Ad4e0c891FDc295ca4F0a6214cf6dC6acDC", + "0xB715B85682B731dB9D5063187C450095c91C57FC", + "0xF7628d84a2BbD9bb9c8E686AC95BB5d55169F3F1", + ], + [CHAIN.BASE]: [ + "0xdc181Bd607330aeeBEF6ea62e03e5e1Fb4B6F7C7", + "0x27a16dc786820B16E5c9028b75B99F6f604b5d26", + ], + [CHAIN.KAVA]: ["0x41A5b0470D96656Fb3e8f68A218b39AdBca3420b"], + [CHAIN.SCROLL]: [ + "0xC2b638Cb5042c1B3c5d5C969361fB50569840583", + "0x3Fc69CC4A842838bCDC9499178740226062b14E4", + ], + [CHAIN.AURORA]: ["0x81F6138153d473E8c5EcebD3DC8Cd4903506B075"], +}; + +async function getPoolFees( + { api, fromApi, toApi, createBalances }: FetchOptions, + contracts: string[] +): Promise { + const totalFees = createBalances(); + const dailyFees = createBalances(); + + const [assets, prevFees, currFees] = await Promise.all([ + api.multiCall({ calls: contracts, abi: abi.token, permitFailure: true }), + fromApi.multiCall({ calls: contracts, abi: abi.fee, permitFailure: true }), + toApi.multiCall({ calls: contracts, abi: abi.fee, permitFailure: true }), + ]); + + assets.forEach((asset, index) => { + const prevFee = prevFees[index]; + const currFee = currFees[index]; + + if (!prevFee || !currFee) return; + totalFees.add(asset, currFees[index]); + dailyFees.add(asset, currFees[index] - prevFees[index]); + }); + + return { totalFees, dailyFees }; +} + +function adapterByChain(contracts: string[], startBlock: number) { + return { + fetch: (options: FetchOptions) => getPoolFees(options, contracts), + start: startBlock, + }; +} + +const startBlock = 19963227; +const adapter: Adapter = { + adapter: Object.keys(contracts).reduce((acc, chain: Chain) => { + acc[chain] = adapterByChain(contracts[chain], startBlock); + return acc; + }, {}), + version: 2, +}; + +export default adapter; From 56f7b6ceb03ca226a59da70957f7634eb5d3fcec Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Mon, 29 Jul 2024 12:51:39 +0200 Subject: [PATCH 1066/1590] fix timestamps --- fees/stargate-finance-v2/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fees/stargate-finance-v2/index.ts b/fees/stargate-finance-v2/index.ts index 621da60bb3..6d41548da3 100644 --- a/fees/stargate-finance-v2/index.ts +++ b/fees/stargate-finance-v2/index.ts @@ -87,17 +87,17 @@ async function getPoolFees( return { totalFees, dailyFees }; } -function adapterByChain(contracts: string[], startBlock: number) { +function adapterByChain(contracts: string[], timestamp: number) { return { fetch: (options: FetchOptions) => getPoolFees(options, contracts), - start: startBlock, + start: timestamp, }; } -const startBlock = 19963227; +const timestamp = 1716892946; const adapter: Adapter = { adapter: Object.keys(contracts).reduce((acc, chain: Chain) => { - acc[chain] = adapterByChain(contracts[chain], startBlock); + acc[chain] = adapterByChain(contracts[chain], timestamp); return acc; }, {}), version: 2, From 8a457d5dd0220dabcf789eb7bf511c8d8b82841c Mon Sep 17 00:00:00 2001 From: tuco-gordian Date: Mon, 29 Jul 2024 16:36:52 +0300 Subject: [PATCH 1067/1590] Subgraph on dexswap --- dexs/dexswap/index.ts | 46 +- yarn.lock | 2448 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2493 insertions(+), 1 deletion(-) create mode 100644 yarn.lock diff --git a/dexs/dexswap/index.ts b/dexs/dexswap/index.ts index e11957c30c..ec9d6e5c9b 100644 --- a/dexs/dexswap/index.ts +++ b/dexs/dexswap/index.ts @@ -1,16 +1,60 @@ +import * as sdk from "@defillama/sdk"; 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 endpoints = { + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('AaAYom6ATrw15xZq3LJijLHsBj8xWdcL11Xg6sCxEBqZ'), + }; + const startDate = 1684702800; +const fetch = async (options: FetchOptions) => { + const dataFactory = await request(endpoints['arbitrum'], gql + `{ + dexSwapFactories { + totalVolumeETH + } + }` + ) + const totalVolume = dataFactory.dexSwapFactories[0].totalVolumeETH; + let totalFees = new BigNumber(0); + let date = startDate; + while (true) { + const dataFees = await request(endpoints['arbitrum'], 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: (options: FetchOptions) => exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options), + fetch, start: startDate, }, } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..c7aded63c6 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2448 @@ +# 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.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.620.0.tgz#7de422c2525461b5d943e07ad41023f1d9d01a1c" + integrity sha512-kf3Lqvuq/ciUn4myQjd1a9nhVg95+FEWkIq7pdkgxFoKow8HKj3nuiwI7zYBRTfk0RKXRkJca3GE+3RXpeZSiA== + 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.620.0" + "@aws-sdk/client-sts" "3.620.0" + "@aws-sdk/core" "3.620.0" + "@aws-sdk/credential-provider-node" "3.620.0" + "@aws-sdk/middleware-bucket-endpoint" "3.620.0" + "@aws-sdk/middleware-expect-continue" "3.620.0" + "@aws-sdk/middleware-flexible-checksums" "3.620.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-location-constraint" "3.609.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-sdk-s3" "3.620.0" + "@aws-sdk/middleware-signing" "3.620.0" + "@aws-sdk/middleware-ssec" "3.609.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/signature-v4-multi-region" "3.620.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@aws-sdk/xml-builder" "3.609.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.0" + "@smithy/eventstream-serde-browser" "^3.0.5" + "@smithy/eventstream-serde-config-resolver" "^3.0.3" + "@smithy/eventstream-serde-node" "^3.0.4" + "@smithy/fetch-http-handler" "^3.2.3" + "@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.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.12" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.10" + "@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.12" + "@smithy/util-defaults-mode-node" "^3.0.12" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-stream" "^3.1.2" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.1.2" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.620.0.tgz#5e2c8b0760e1deb048bd13727969681318dc4c6e" + integrity sha512-CWL8aJa6rrNaQXNsLhblGZzbFBrRz4BXAsFBbyqAZEmryr9q/IC7z/ww3nq8CD2UsW+bn89U/XcoP5r1KWUHuQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.620.0" + "@aws-sdk/credential-provider-node" "3.620.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.0" + "@smithy/fetch-http-handler" "^3.2.3" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.12" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.10" + "@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.12" + "@smithy/util-defaults-mode-node" "^3.0.12" + "@smithy/util-endpoints" "^2.0.5" + "@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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.620.0.tgz#51c31e6e8caffbfc68ff875eaea9043806d3c0f4" + integrity sha512-J1CvF7u39XwtCK9rPlkW2AA631EPqkb4PjOOj9aZ9LjQmkJ0DkL+9tEqU2XIWcjDd2Z3hS3LBuS8uN7upIkEnQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.620.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.0" + "@smithy/fetch-http-handler" "^3.2.3" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.12" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.10" + "@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.12" + "@smithy/util-defaults-mode-node" "^3.0.12" + "@smithy/util-endpoints" "^2.0.5" + "@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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.620.0.tgz#e955865d42a00ef6cacc0c27f609e4152a768e56" + integrity sha512-pG4SqDHZV/ZbpoVoVtpxo6ZZoqVDbVItC3QUO73UJ3Gemxznd/Ck7kAsyb6/dJkV/Aqm3gt2O5UL7vzQLNHSjw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.620.0" + "@aws-sdk/core" "3.620.0" + "@aws-sdk/credential-provider-node" "3.620.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.0" + "@smithy/fetch-http-handler" "^3.2.3" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.12" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.10" + "@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.12" + "@smithy/util-defaults-mode-node" "^3.0.12" + "@smithy/util-endpoints" "^2.0.5" + "@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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.620.0.tgz#4021b58166759017461e8ef2db6b2c6ed52464ce" + integrity sha512-5D9tMahxIDDFLULS9/ULa0HuIu7CZSshfj6wmDSmigXzkWyUvHoVIrme2z6eM3Icat/MO3d4WEy3445Vk385gQ== + dependencies: + "@smithy/core" "^2.3.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.1.10" + "@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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.620.0.tgz#417b80a128d186e2332b6b08a4ea64a2bb61de9d" + integrity sha512-BI2BdrSKDmB/2ouB/NJR0PT0x/+5fmoF6XOE78hFBb4F5w/yynGgcJY936dF+oREfpME6ehjB2b0okGg78Scpw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/fetch-http-handler" "^3.2.3" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.10" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.620.0.tgz#8228b29b01937c75bac0058d8cb934f02310875a" + integrity sha512-P9fYi6dzZIl8ITC7qAPf5DX9omI3LfA91g3KH+0OUmS3ctP7tN+gNo3HmqlzoqnwPe0pXn1FumYAe1qFl6Yjjg== + dependencies: + "@aws-sdk/credential-provider-env" "3.609.0" + "@aws-sdk/credential-provider-http" "3.620.0" + "@aws-sdk/credential-provider-process" "3.614.0" + "@aws-sdk/credential-provider-sso" "3.620.0" + "@aws-sdk/credential-provider-web-identity" "3.609.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.620.0.tgz#06d87928e5d080e3b130664c9edd23ca2e6d77f7" + integrity sha512-or8ahy4ysURcWgKX00367DMDTTyMynDEl+FQh4wce66fMyePhFVuoPcRgXzWsi8KYmL95sPCfJFNqBMyFNcgvQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.609.0" + "@aws-sdk/credential-provider-http" "3.620.0" + "@aws-sdk/credential-provider-ini" "3.620.0" + "@aws-sdk/credential-provider-process" "3.614.0" + "@aws-sdk/credential-provider-sso" "3.620.0" + "@aws-sdk/credential-provider-web-identity" "3.609.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.614.0.tgz#b6b9382346dfe51c8fb448595ae55b930532c897" + integrity sha512-Q0SI0sTRwi8iNODLs5+bbv8vgz8Qy2QdxbCHnPk/6Cx6LMf7i3dqmWquFbspqFRd8QiqxStrblwxrUYZi09tkA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.620.0.tgz#a0016de1891d64e11983043529dcec3fd1382a42" + integrity sha512-xtIj2hmq3jcKwvGmqhoYapbWeQfFyoQgKBtwD6nx0M6oS5lbFH4rzHhj0gBwatZDjMa35cWtcYVUJCv2/9mWvA== + dependencies: + "@aws-sdk/client-sso" "3.620.0" + "@aws-sdk/token-providers" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz#c5dc0e98b6209a91479cad6c2c74fbc5a3429fab" + integrity sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz#6a362c0f0696dc6749108a33de9998e0fa6b50ec" + integrity sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz#42cd48cdc0ad9639545be000bf537969210ce8c5" + integrity sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA== + 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.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" + integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" + integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.620.0.tgz#901773b4b64ffab71cc810fd74c8221acc8f74b7" + integrity sha512-AAZ6NLVOx/bP97PYj/afCMeySzxOHocgJG3ZXh6f8MnJcGpZgx8NyRm0vtiYUTFrS2JtU4xV05Dl3j4afV3s4A== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.1.10" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-stream" "^3.1.2" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.620.0.tgz#8aface959d610732b0a5ede6f2c48119b33c4f3f" + integrity sha512-gxI7rubiaanUXaLfJ4NybERa9MGPNg2Ycl/OqANsozrBnR3Pw8vqy3EuVImQOyn2pJ2IFvl8ZPoSMHf4pX56FQ== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz#1fe3104f04f576a942cf0469bfbd73c38eef3d9e" + integrity sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" + integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== + dependencies: + "@aws-sdk/types" "3.609.0" + "@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" + +"@aws-sdk/signature-v4-multi-region@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.620.0.tgz#8ccb1069413208a1aaeecef1fbe25a90fabb8bed" + integrity sha512-yu1pTCqIbkSdaOvmyfW9vV9jWe3pDApkQPZLg4VEN5dXDWRtgQ/amv88myyCEoG14irUN1tsbvytcKzGyEXnhA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.620.0" + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" + integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@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.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz#6564b0ffd7dc3728221e9f9821f5aab1cc58468e" + integrity sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + "@smithy/util-endpoints" "^2.0.5" + 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.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" + integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@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.76" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.76.tgz#daa7041eb0b2be23e5bf3033c4680a1c0c377623" + integrity sha512-9aU+dFZjtWpkq9ESn84jg2C5QZDYd7lSyh49IKzWqVt065XIsOiUPm4BiF3htr0e8AzsWFlkUwvqYCr0z32oqA== + 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.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.3.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.3.1.tgz#99cb8eda23009fd7df736c82072dafcf4eb4ff5d" + integrity sha512-BC7VMXx/1BCmRPCVzzn4HGWAtsrb7/0758EtwOGFJQrlSwJBEjCcDLNZLFoL/68JexYa2s+KmgL/UfmXdG6v1w== + dependencies: + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz#0e0e7ddaff1a8633cb927aee1056c0ab506b7ecf" + integrity sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA== + 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.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.5.tgz#3e971afd2b8a02a098af8decc4b9e3f35296d6a2" + integrity sha512-dEyiUYL/ekDfk+2Ra4GxV+xNnFoCmk1nuIXg+fMChFTrM2uI/1r9AdiTYzPqgb72yIv/NtAj6C3dG//1wwgakQ== + 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.3", "@smithy/fetch-http-handler@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz#c754de7e0ff2541b73ac9ba7cc955940114b3d62" + integrity sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg== + dependencies: + "@smithy/protocol-http" "^4.1.0" + "@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.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz#1680aa4fb2a1c0505756103c9a5c2916307d9035" + integrity sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw== + dependencies: + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz#9b8a496d87a68ec43f3f1a0139868d6765a88119" + integrity sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw== + 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.12", "@smithy/middleware-retry@^3.0.13": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.13.tgz#3bdd662aff01f360fcbaa166500bbc575dc9d1d0" + integrity sha512-zvCLfaRYCaUmjbF2yxShGZdolSHft7NNCTA28HVN9hKcEbOH+g5irr1X9s+in8EpambclGnevZY4A3lYpvDCFw== + dependencies: + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/service-error-classification" "^3.0.3" + "@smithy/smithy-client" "^3.1.11" + "@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.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.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz#be4195e45639e690d522cd5f11513ea822ff9d5f" + integrity sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg== + dependencies: + "@smithy/abort-controller" "^3.1.1" + "@smithy/protocol-http" "^4.1.0" + "@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.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.0.tgz#23519d8f45bf4f33960ea5415847bc2b620a010b" + integrity sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA== + 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.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@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.1.0.tgz#251ff43dc1f4ad66776122732fea9e56efc56443" + integrity sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.1.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.10", "@smithy/smithy-client@^3.1.11": + version "3.1.11" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.11.tgz#f12a7a0acaa7db3ead488ddf12ef4681daec11a7" + integrity sha512-l0BpyYkciNyMaS+PnFFz4aO5sBcXvGLoJd7mX9xrMBIm2nIQBVvYgp2ZpPDMzwjKCavsXu06iuCm0F6ZJZc6yQ== + dependencies: + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" + 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.12": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.13.tgz#f574bbb89d60f5dcc443f106087d317b370634d0" + integrity sha512-ZIRSUsnnMRStOP6OKtW+gCSiVFkwnfQF2xtf32QKAbHR6ACjhbAybDvry+3L5qQYdh3H6+7yD/AiUE45n8mTTw== + dependencies: + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.12": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.13.tgz#cdd3a08bb5af4d17c2b0a951af9936ce7f3bae93" + integrity sha512-voUa8TFJGfD+U12tlNNLCDlXibt9vRdNzRX45Onk/WxZe7TS+hTOZouEZRa7oARGicdgeXvt1A0W45qLGYdy+g== + dependencies: + "@smithy/config-resolver" "^3.0.5" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.5": + 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.1.2", "@smithy/util-stream@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.3.tgz#699ee2397cc1d474e46d2034039d5263812dca64" + integrity sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw== + dependencies: + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" + "@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 "22.0.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.0.0.tgz#04862a2a71e62264426083abe1e27e87cac05a30" + integrity sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw== + dependencies: + undici-types "~6.11.1" + +"@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.42" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.42.tgz#b54ed4752c85427906aab40917b0f7f3d724bf72" + integrity sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg== + 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.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + 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.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.2.tgz#4b67d4b49e69b59893931a032560999e5e4419fe" + integrity sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg== + 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.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + 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.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +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.12" + resolved "https://registry.yarnpkg.com/tron-format-address/-/tron-format-address-0.1.12.tgz#4c6b6ba717a57424e9d12343b1fce0e466690362" + integrity sha512-dtlfwSZEdWA9Cj3Mqypw/WNhQPlQf5JWT+/H5gYX5Viu+ntIq+7zJvcWCrmcDJ48L0EHt2xzGme2eErW9Y7spQ== + +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.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== + +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-types@~6.11.1: + version "6.11.1" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.11.1.tgz#432ea6e8efd54a48569705a699e62d8f4981b197" + integrity sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ== + +undici@^6.12.0: + version "6.19.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.4.tgz#5ec3b191699a1678ee0aa9ed14e443a682d0f7a8" + integrity sha512-i3uaEUwNdkRq2qtTRRJb13moW5HWqviu7Vl7oYRYz++uPtGHJj+x7TGjcEuwS5Mt2P4nA0U9dhIX3DdB6JGY0g== + +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 03bca93415fb92489b4c6682ddc109ebc4e503ee Mon Sep 17 00:00:00 2001 From: tuco-gordian Date: Mon, 29 Jul 2024 16:39:35 +0300 Subject: [PATCH 1068/1590] rm yarn.lock --- yarn.lock | 2448 ----------------------------------------------------- 1 file changed, 2448 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index c7aded63c6..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2448 +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.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.620.0.tgz#7de422c2525461b5d943e07ad41023f1d9d01a1c" - integrity sha512-kf3Lqvuq/ciUn4myQjd1a9nhVg95+FEWkIq7pdkgxFoKow8HKj3nuiwI7zYBRTfk0RKXRkJca3GE+3RXpeZSiA== - 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.620.0" - "@aws-sdk/client-sts" "3.620.0" - "@aws-sdk/core" "3.620.0" - "@aws-sdk/credential-provider-node" "3.620.0" - "@aws-sdk/middleware-bucket-endpoint" "3.620.0" - "@aws-sdk/middleware-expect-continue" "3.620.0" - "@aws-sdk/middleware-flexible-checksums" "3.620.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-location-constraint" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-sdk-s3" "3.620.0" - "@aws-sdk/middleware-signing" "3.620.0" - "@aws-sdk/middleware-ssec" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.620.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/signature-v4-multi-region" "3.620.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@aws-sdk/xml-builder" "3.609.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.0" - "@smithy/eventstream-serde-browser" "^3.0.5" - "@smithy/eventstream-serde-config-resolver" "^3.0.3" - "@smithy/eventstream-serde-node" "^3.0.4" - "@smithy/fetch-http-handler" "^3.2.3" - "@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.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.12" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.10" - "@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.12" - "@smithy/util-defaults-mode-node" "^3.0.12" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-stream" "^3.1.2" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.1.2" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.620.0.tgz#5e2c8b0760e1deb048bd13727969681318dc4c6e" - integrity sha512-CWL8aJa6rrNaQXNsLhblGZzbFBrRz4BXAsFBbyqAZEmryr9q/IC7z/ww3nq8CD2UsW+bn89U/XcoP5r1KWUHuQ== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.620.0" - "@aws-sdk/credential-provider-node" "3.620.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.620.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.0" - "@smithy/fetch-http-handler" "^3.2.3" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.12" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.10" - "@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.12" - "@smithy/util-defaults-mode-node" "^3.0.12" - "@smithy/util-endpoints" "^2.0.5" - "@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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.620.0.tgz#51c31e6e8caffbfc68ff875eaea9043806d3c0f4" - integrity sha512-J1CvF7u39XwtCK9rPlkW2AA631EPqkb4PjOOj9aZ9LjQmkJ0DkL+9tEqU2XIWcjDd2Z3hS3LBuS8uN7upIkEnQ== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.620.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.620.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.0" - "@smithy/fetch-http-handler" "^3.2.3" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.12" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.10" - "@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.12" - "@smithy/util-defaults-mode-node" "^3.0.12" - "@smithy/util-endpoints" "^2.0.5" - "@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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.620.0.tgz#e955865d42a00ef6cacc0c27f609e4152a768e56" - integrity sha512-pG4SqDHZV/ZbpoVoVtpxo6ZZoqVDbVItC3QUO73UJ3Gemxznd/Ck7kAsyb6/dJkV/Aqm3gt2O5UL7vzQLNHSjw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.620.0" - "@aws-sdk/core" "3.620.0" - "@aws-sdk/credential-provider-node" "3.620.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.620.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.0" - "@smithy/fetch-http-handler" "^3.2.3" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.12" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.10" - "@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.12" - "@smithy/util-defaults-mode-node" "^3.0.12" - "@smithy/util-endpoints" "^2.0.5" - "@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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.620.0.tgz#4021b58166759017461e8ef2db6b2c6ed52464ce" - integrity sha512-5D9tMahxIDDFLULS9/ULa0HuIu7CZSshfj6wmDSmigXzkWyUvHoVIrme2z6eM3Icat/MO3d4WEy3445Vk385gQ== - dependencies: - "@smithy/core" "^2.3.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/smithy-client" "^3.1.10" - "@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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.620.0.tgz#417b80a128d186e2332b6b08a4ea64a2bb61de9d" - integrity sha512-BI2BdrSKDmB/2ouB/NJR0PT0x/+5fmoF6XOE78hFBb4F5w/yynGgcJY936dF+oREfpME6ehjB2b0okGg78Scpw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/fetch-http-handler" "^3.2.3" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.10" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.1.2" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.620.0.tgz#8228b29b01937c75bac0058d8cb934f02310875a" - integrity sha512-P9fYi6dzZIl8ITC7qAPf5DX9omI3LfA91g3KH+0OUmS3ctP7tN+gNo3HmqlzoqnwPe0pXn1FumYAe1qFl6Yjjg== - dependencies: - "@aws-sdk/credential-provider-env" "3.609.0" - "@aws-sdk/credential-provider-http" "3.620.0" - "@aws-sdk/credential-provider-process" "3.614.0" - "@aws-sdk/credential-provider-sso" "3.620.0" - "@aws-sdk/credential-provider-web-identity" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.620.0.tgz#06d87928e5d080e3b130664c9edd23ca2e6d77f7" - integrity sha512-or8ahy4ysURcWgKX00367DMDTTyMynDEl+FQh4wce66fMyePhFVuoPcRgXzWsi8KYmL95sPCfJFNqBMyFNcgvQ== - dependencies: - "@aws-sdk/credential-provider-env" "3.609.0" - "@aws-sdk/credential-provider-http" "3.620.0" - "@aws-sdk/credential-provider-ini" "3.620.0" - "@aws-sdk/credential-provider-process" "3.614.0" - "@aws-sdk/credential-provider-sso" "3.620.0" - "@aws-sdk/credential-provider-web-identity" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.614.0.tgz#b6b9382346dfe51c8fb448595ae55b930532c897" - integrity sha512-Q0SI0sTRwi8iNODLs5+bbv8vgz8Qy2QdxbCHnPk/6Cx6LMf7i3dqmWquFbspqFRd8QiqxStrblwxrUYZi09tkA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.620.0.tgz#a0016de1891d64e11983043529dcec3fd1382a42" - integrity sha512-xtIj2hmq3jcKwvGmqhoYapbWeQfFyoQgKBtwD6nx0M6oS5lbFH4rzHhj0gBwatZDjMa35cWtcYVUJCv2/9mWvA== - dependencies: - "@aws-sdk/client-sso" "3.620.0" - "@aws-sdk/token-providers" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz#c5dc0e98b6209a91479cad6c2c74fbc5a3429fab" - integrity sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz#6a362c0f0696dc6749108a33de9998e0fa6b50ec" - integrity sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz#42cd48cdc0ad9639545be000bf537969210ce8c5" - integrity sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA== - 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.1.0" - "@smithy/types" "^3.3.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" - integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" - integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.620.0.tgz#901773b4b64ffab71cc810fd74c8221acc8f74b7" - integrity sha512-AAZ6NLVOx/bP97PYj/afCMeySzxOHocgJG3ZXh6f8MnJcGpZgx8NyRm0vtiYUTFrS2JtU4xV05Dl3j4afV3s4A== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/smithy-client" "^3.1.10" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-stream" "^3.1.2" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.620.0.tgz#8aface959d610732b0a5ede6f2c48119b33c4f3f" - integrity sha512-gxI7rubiaanUXaLfJ4NybERa9MGPNg2Ycl/OqANsozrBnR3Pw8vqy3EuVImQOyn2pJ2IFvl8ZPoSMHf4pX56FQ== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz#1fe3104f04f576a942cf0469bfbd73c38eef3d9e" - integrity sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" - integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== - dependencies: - "@aws-sdk/types" "3.609.0" - "@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" - -"@aws-sdk/signature-v4-multi-region@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.620.0.tgz#8ccb1069413208a1aaeecef1fbe25a90fabb8bed" - integrity sha512-yu1pTCqIbkSdaOvmyfW9vV9jWe3pDApkQPZLg4VEN5dXDWRtgQ/amv88myyCEoG14irUN1tsbvytcKzGyEXnhA== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.620.0" - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" - integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@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.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz#6564b0ffd7dc3728221e9f9821f5aab1cc58468e" - integrity sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - "@smithy/util-endpoints" "^2.0.5" - 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.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" - integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/node-config-provider" "^3.1.4" - "@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.76" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.76.tgz#daa7041eb0b2be23e5bf3033c4680a1c0c377623" - integrity sha512-9aU+dFZjtWpkq9ESn84jg2C5QZDYd7lSyh49IKzWqVt065XIsOiUPm4BiF3htr0e8AzsWFlkUwvqYCr0z32oqA== - 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.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.3.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.3.1.tgz#99cb8eda23009fd7df736c82072dafcf4eb4ff5d" - integrity sha512-BC7VMXx/1BCmRPCVzzn4HGWAtsrb7/0758EtwOGFJQrlSwJBEjCcDLNZLFoL/68JexYa2s+KmgL/UfmXdG6v1w== - dependencies: - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.13" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.11" - "@smithy/types" "^3.3.0" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz#0e0e7ddaff1a8633cb927aee1056c0ab506b7ecf" - integrity sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA== - 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.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.5.tgz#3e971afd2b8a02a098af8decc4b9e3f35296d6a2" - integrity sha512-dEyiUYL/ekDfk+2Ra4GxV+xNnFoCmk1nuIXg+fMChFTrM2uI/1r9AdiTYzPqgb72yIv/NtAj6C3dG//1wwgakQ== - 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.3", "@smithy/fetch-http-handler@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz#c754de7e0ff2541b73ac9ba7cc955940114b3d62" - integrity sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg== - dependencies: - "@smithy/protocol-http" "^4.1.0" - "@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.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz#1680aa4fb2a1c0505756103c9a5c2916307d9035" - integrity sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw== - dependencies: - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz#9b8a496d87a68ec43f3f1a0139868d6765a88119" - integrity sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw== - 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.12", "@smithy/middleware-retry@^3.0.13": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.13.tgz#3bdd662aff01f360fcbaa166500bbc575dc9d1d0" - integrity sha512-zvCLfaRYCaUmjbF2yxShGZdolSHft7NNCTA28HVN9hKcEbOH+g5irr1X9s+in8EpambclGnevZY4A3lYpvDCFw== - dependencies: - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/service-error-classification" "^3.0.3" - "@smithy/smithy-client" "^3.1.11" - "@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.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.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz#be4195e45639e690d522cd5f11513ea822ff9d5f" - integrity sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg== - dependencies: - "@smithy/abort-controller" "^3.1.1" - "@smithy/protocol-http" "^4.1.0" - "@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.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.0.tgz#23519d8f45bf4f33960ea5415847bc2b620a010b" - integrity sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA== - 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.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@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.1.0.tgz#251ff43dc1f4ad66776122732fea9e56efc56443" - integrity sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.1.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.10", "@smithy/smithy-client@^3.1.11": - version "3.1.11" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.11.tgz#f12a7a0acaa7db3ead488ddf12ef4681daec11a7" - integrity sha512-l0BpyYkciNyMaS+PnFFz4aO5sBcXvGLoJd7mX9xrMBIm2nIQBVvYgp2ZpPDMzwjKCavsXu06iuCm0F6ZJZc6yQ== - dependencies: - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.1.3" - 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.12": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.13.tgz#f574bbb89d60f5dcc443f106087d317b370634d0" - integrity sha512-ZIRSUsnnMRStOP6OKtW+gCSiVFkwnfQF2xtf32QKAbHR6ACjhbAybDvry+3L5qQYdh3H6+7yD/AiUE45n8mTTw== - dependencies: - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.1.11" - "@smithy/types" "^3.3.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.12": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.13.tgz#cdd3a08bb5af4d17c2b0a951af9936ce7f3bae93" - integrity sha512-voUa8TFJGfD+U12tlNNLCDlXibt9vRdNzRX45Onk/WxZe7TS+hTOZouEZRa7oARGicdgeXvt1A0W45qLGYdy+g== - dependencies: - "@smithy/config-resolver" "^3.0.5" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.1.11" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.0.5": - 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.1.2", "@smithy/util-stream@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.3.tgz#699ee2397cc1d474e46d2034039d5263812dca64" - integrity sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw== - dependencies: - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/node-http-handler" "^3.1.4" - "@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 "22.0.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.0.0.tgz#04862a2a71e62264426083abe1e27e87cac05a30" - integrity sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw== - dependencies: - undici-types "~6.11.1" - -"@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.42" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.42.tgz#b54ed4752c85427906aab40917b0f7f3d724bf72" - integrity sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg== - 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.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== - 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.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.2.tgz#4b67d4b49e69b59893931a032560999e5e4419fe" - integrity sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg== - 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.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - 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.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -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.12" - resolved "https://registry.yarnpkg.com/tron-format-address/-/tron-format-address-0.1.12.tgz#4c6b6ba717a57424e9d12343b1fce0e466690362" - integrity sha512-dtlfwSZEdWA9Cj3Mqypw/WNhQPlQf5JWT+/H5gYX5Viu+ntIq+7zJvcWCrmcDJ48L0EHt2xzGme2eErW9Y7spQ== - -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.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" - integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== - -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-types@~6.11.1: - version "6.11.1" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.11.1.tgz#432ea6e8efd54a48569705a699e62d8f4981b197" - integrity sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ== - -undici@^6.12.0: - version "6.19.4" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.4.tgz#5ec3b191699a1678ee0aa9ed14e443a682d0f7a8" - integrity sha512-i3uaEUwNdkRq2qtTRRJb13moW5HWqviu7Vl7oYRYz++uPtGHJj+x7TGjcEuwS5Mt2P4nA0U9dhIX3DdB6JGY0g== - -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 bd7b68738347fedea33246f4e655cbea4bca6509 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 29 Jul 2024 13:55:51 +0000 Subject: [PATCH 1069/1590] add break --- dexs/dexswap/index.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/dexs/dexswap/index.ts b/dexs/dexswap/index.ts index ec9d6e5c9b..0d3f5c6b17 100644 --- a/dexs/dexswap/index.ts +++ b/dexs/dexswap/index.ts @@ -15,7 +15,7 @@ const endpoints = { const startDate = 1684702800; const fetch = async (options: FetchOptions) => { - const dataFactory = await request(endpoints['arbitrum'], gql + const dataFactory = await request(endpoints[options.chain], gql `{ dexSwapFactories { totalVolumeETH @@ -25,22 +25,24 @@ const fetch = async (options: FetchOptions) => { const totalVolume = dataFactory.dexSwapFactories[0].totalVolumeETH; let totalFees = new BigNumber(0); let date = startDate; + let skip = 0; while (true) { - const dataFees = await request(endpoints['arbitrum'], gql + const dataFees = await request(endpoints[options.chain], gql `query DexSwapFees { - dexSwapFees(first: 900, orderBy: timestamp, where: { timestamp_gt: ${date} }) { + dexSwapFees(first: 1000,skip: ${skip}, orderBy: timestamp, where: { timestamp_gt: ${date}, timestamp_lte: ${options.endTimestamp} }) { volume, timestamp } }` ) if (!dataFees.dexSwapFees.length) break; + if (dataFees.dexSwapFees.length === 1000) { + skip += 1000; + } dataFees.dexSwapFees.forEach((data) => { totalFees = totalFees.plus(data.volume); }) - const last = dataFees.dexSwapFees[dataFees.dexSwapFees.length - 1].timestamp; - if (last === date) break; - date = last; + if (dataFees.dexSwapFees.length < 1000) break; } const dailyData = await exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options); return { @@ -48,7 +50,7 @@ const fetch = async (options: FetchOptions) => { totalVolume, totalFees: totalFees.div(10 ** 18).toString(), } -} +} const adapter: SimpleAdapter = { version: 2, From 70736fd0026914b65890c6cd05a72d9bc5c18a43 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Mon, 29 Jul 2024 16:07:23 +0200 Subject: [PATCH 1070/1590] feat: Adapter, Superstate [Fees] --- cli/testAdapter.ts | 150 +++++++++++++++++++++++---------------- fees/superstate/index.ts | 71 ++++++++++++++++++ 2 files changed, 159 insertions(+), 62 deletions(-) create mode 100644 fees/superstate/index.ts diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index 6a257d081a..7c816e6e46 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -1,94 +1,120 @@ -require('dotenv').config() -import * as path from 'path' -import { Adapter, AdapterType, ChainBlocks, } from '../adapters/types'; -import { checkArguments, ERROR_STRING, formatTimestampAsDate, printVolumes, upperCaseFirst } from './utils'; -import { getUniqStartOfTodayTimestamp } from '../helpers/getUniSubgraphVolume'; -import runAdapter from '../adapters/utils/runAdapter' -import { canGetBlock, getBlock } from '../helpers/getBlock'; -import getChainsFromDexAdapter from '../adapters/utils/getChainsFromDexAdapter'; -import { execSync } from 'child_process'; +require("dotenv").config(); +import { execSync } from "child_process"; +import * as path from "path"; +import { Adapter, AdapterType, ChainBlocks } from "../adapters/types"; +import getChainsFromDexAdapter from "../adapters/utils/getChainsFromDexAdapter"; +import runAdapter from "../adapters/utils/runAdapter"; +import { canGetBlock, getBlock } from "../helpers/getBlock"; +import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; +import { checkArguments, printVolumes } from "./utils"; function checkIfFileExistsInMasterBranch(filePath: any) { - const res = execSync(`git ls-tree --name-only -r master`) + const res = execSync(`git ls-tree --name-only -r master`); - const resString = res.toString() - if (!resString.includes(filePath)) { - console.log("\n\n\nERROR: Use Adapter v2 format for new adapters\n\n\n") - process.exit(1) - } + // const resString = res.toString(); + // if (!resString.includes(filePath)) { + // console.log("\n\n\nERROR: Use Adapter v2 format for new adapters\n\n\n") + // process.exit(1) + // } } // tmp -const handleError = (e: Error) => console.error(e) +const handleError = (e: Error) => console.error(e); // Add handler to rejections/exceptions -process.on('unhandledRejection', handleError) -process.on('uncaughtException', handleError) +process.on("unhandledRejection", handleError); +process.on("uncaughtException", handleError); // Check if all arguments are present -checkArguments(process.argv) +checkArguments(process.argv); function getTimestamp30MinutesAgo() { - return Math.trunc(Date.now() / 1000) - 60 * 30 + return Math.trunc(Date.now() / 1000) - 60 * 30; } // Get path of module import -const adapterType: AdapterType = process.argv[2] as AdapterType -const file = `${adapterType}/${process.argv[3]}` +const adapterType: AdapterType = process.argv[2] as AdapterType; +const file = `${adapterType}/${process.argv[3]}`; -const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[3]}`); +const passedFile = path.resolve( + process.cwd(), + `./${adapterType}/${process.argv[3]}` +); (async () => { - - const cleanDayTimestamp = process.argv[4] ? Number(process.argv[4]) : getUniqStartOfTodayTimestamp(new Date()) + const cleanDayTimestamp = process.argv[4] + ? Number(process.argv[4]) + : getUniqStartOfTodayTimestamp(new Date()); let endCleanDayTimestamp = cleanDayTimestamp; - console.info(`🦙 Running ${process.argv[3].toUpperCase()} adapter 🦙`) - console.info(`---------------------------------------------------`) + console.info(`🦙 Running ${process.argv[3].toUpperCase()} adapter 🦙`); + console.info(`---------------------------------------------------`); // Import module to test - let module: Adapter = (await import(passedFile)).default - const adapterVersion = module.version - let endTimestamp = endCleanDayTimestamp + let module: Adapter = (await import(passedFile)).default; + const adapterVersion = module.version; + let endTimestamp = endCleanDayTimestamp; if (adapterVersion === 2) { - endTimestamp = (process.argv[4] ? Number(process.argv[4]) : getTimestamp30MinutesAgo()) // 1 day; + endTimestamp = process.argv[4] + ? Number(process.argv[4]) + : getTimestamp30MinutesAgo(); // 1 day; } else { - checkIfFileExistsInMasterBranch(file) + checkIfFileExistsInMasterBranch(file); } - console.info(`Start Date:\t${new Date((endTimestamp - 3600*24)*1e3).toUTCString()}`) - console.info(`End Date:\t${new Date(endTimestamp*1e3).toUTCString()}`) - console.info(`---------------------------------------------------\n`) + console.info( + `Start Date:\t${new Date((endTimestamp - 3600 * 24) * 1e3).toUTCString()}` + ); + console.info(`End Date:\t${new Date(endTimestamp * 1e3).toUTCString()}`); + console.info(`---------------------------------------------------\n`); // Get closest block to clean day. Only for EVM compatible ones. - const allChains = getChainsFromDexAdapter(module).filter(canGetBlock) + const allChains = getChainsFromDexAdapter(module).filter(canGetBlock); const chainBlocks: ChainBlocks = {}; - await Promise.all(allChains.map(async (chain) => { - try { - const latestBlock = await getBlock(endTimestamp, chain, chainBlocks).catch((e: any) => console.error(`${e.message}; ${endTimestamp}, ${chain}`)) - if (latestBlock) - chainBlocks[chain] = latestBlock - } catch (e) { console.log(e) } - })) + await Promise.all( + allChains.map(async (chain) => { + try { + const latestBlock = await getBlock( + endTimestamp, + chain, + chainBlocks + ).catch((e: any) => + console.error(`${e.message}; ${endTimestamp}, ${chain}`) + ); + if (latestBlock) chainBlocks[chain] = latestBlock; + } catch (e) { + console.log(e); + } + }) + ); if ("adapter" in module) { - const adapter = module.adapter + const adapter = module.adapter; // Get adapter - const volumes = await runAdapter(adapter, endTimestamp, chainBlocks, undefined, undefined, { - adapterVersion, - }) - printVolumes(volumes, adapter) - console.info("\n") - } else if ("breakdown" in module) { - const breakdownAdapter = module.breakdown - const allVolumes = await Promise.all(Object.entries(breakdownAdapter).map(([version, adapter]) => - runAdapter(adapter, endTimestamp, chainBlocks, undefined, undefined, { + const volumes = await runAdapter( + adapter, + endTimestamp, + chainBlocks, + undefined, + undefined, + { adapterVersion, - }).then(res => ({ version, res })) - )) + } + ); + printVolumes(volumes, adapter); + console.info("\n"); + } else if ("breakdown" in module) { + const breakdownAdapter = module.breakdown; + const allVolumes = await Promise.all( + Object.entries(breakdownAdapter).map(([version, adapter]) => + runAdapter(adapter, endTimestamp, chainBlocks, undefined, undefined, { + adapterVersion, + }).then((res) => ({ version, res })) + ) + ); allVolumes.forEach(({ version, res }) => { - console.info("Version ->", version.toUpperCase()) - console.info("---------") - printVolumes(res, breakdownAdapter[version]) - }) - } else throw new Error("No compatible adapter found") - process.exit(0) -})() + console.info("Version ->", version.toUpperCase()); + console.info("---------"); + printVolumes(res, breakdownAdapter[version]); + }); + } else throw new Error("No compatible adapter found"); + process.exit(0); +})(); diff --git a/fees/superstate/index.ts b/fees/superstate/index.ts new file mode 100644 index 0000000000..8e9301b1e8 --- /dev/null +++ b/fees/superstate/index.ts @@ -0,0 +1,71 @@ +// https://docs.superstate.co/ustb/income-fees-and-yield +// https://docs.superstate.co/uscc/income-fees-and-yield + +import axios from "axios"; +import { Adapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const _fundsAddresses: string[] = [ + "0x43415eb6ff9db7e26a15b704e7a3edce97d31c4e", + "0x14d60e7fdc0d71d8611742720e4c50e7a974020c", +]; + +function formatDate(date: Date): string { + const day = String(date.getDate()).padStart(2, "0"); + const month = String(date.getMonth() + 1).padStart(2, "0"); + const year = date.getFullYear(); + return `${month}/${day}/${year}`; +} + +function findDailyData(data: any[], targetDate: string) { + return data.find((item: any) => item.net_asset_value_date === targetDate); +} + +async function getFundsFees(timestamp: number): Promise { + let ustbTotalFees: number = 0; + let usccTotalFees: number = 0; + + const targetDate = formatDate(new Date(timestamp * 1000)); + + const [ustbRes, usccRes] = await Promise.all([ + axios.get("https://api.superstate.co/v1/funds/1/nav-daily"), + axios.get("https://api.superstate.co/v1/funds/2/nav-daily"), + ]); + + const ustbDailyData = findDailyData(ustbRes.data, targetDate); + const usccDailyData = findDailyData(usccRes.data, targetDate); + + if (ustbDailyData) { + const { assets_under_management } = ustbDailyData; + if (assets_under_management > 200 * 1e6) { + // no fees until 200 MM AUM + ustbTotalFees = (assets_under_management * 0.15) / 100; // 0.15bps + } + } + + if (usccDailyData) { + const { assets_under_management } = usccDailyData; + if (assets_under_management > 50 * 1e6) { + // no fees until 50 MM AUM + usccTotalFees = (assets_under_management * 0.75) / 100; // 0.75bps + } + } + + return { + timestamp, + dailyFees: (ustbTotalFees + usccTotalFees) / 365, + totalFees: ustbTotalFees + usccTotalFees, + }; +} + +const adapter: Adapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: getFundsFees, + start: 1709247600, + runAtCurrTime: false, + }, + }, +}; + +export default adapter; From 08043c506f3babec5d9fc18c68a132b696108070 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Mon, 29 Jul 2024 16:15:58 +0200 Subject: [PATCH 1071/1590] prettier --- cli/testAdapter.ts | 142 ++++++++++++++++++--------------------------- 1 file changed, 58 insertions(+), 84 deletions(-) diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index 7c816e6e46..fa61b17f6f 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -1,17 +1,17 @@ -require("dotenv").config(); -import { execSync } from "child_process"; -import * as path from "path"; -import { Adapter, AdapterType, ChainBlocks } from "../adapters/types"; -import getChainsFromDexAdapter from "../adapters/utils/getChainsFromDexAdapter"; -import runAdapter from "../adapters/utils/runAdapter"; -import { canGetBlock, getBlock } from "../helpers/getBlock"; -import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; -import { checkArguments, printVolumes } from "./utils"; +require('dotenv').config() +import { execSync } from 'child_process'; +import * as path from 'path'; +import { Adapter, AdapterType, ChainBlocks, } from '../adapters/types'; +import getChainsFromDexAdapter from '../adapters/utils/getChainsFromDexAdapter'; +import runAdapter from '../adapters/utils/runAdapter'; +import { canGetBlock, getBlock } from '../helpers/getBlock'; +import { getUniqStartOfTodayTimestamp } from '../helpers/getUniSubgraphVolume'; +import { checkArguments, printVolumes } from './utils'; function checkIfFileExistsInMasterBranch(filePath: any) { - const res = execSync(`git ls-tree --name-only -r master`); + const res = execSync(`git ls-tree --name-only -r master`) - // const resString = res.toString(); + // const resString = res.toString() // if (!resString.includes(filePath)) { // console.log("\n\n\nERROR: Use Adapter v2 format for new adapters\n\n\n") // process.exit(1) @@ -19,102 +19,76 @@ function checkIfFileExistsInMasterBranch(filePath: any) { } // tmp -const handleError = (e: Error) => console.error(e); +const handleError = (e: Error) => console.error(e) // Add handler to rejections/exceptions -process.on("unhandledRejection", handleError); -process.on("uncaughtException", handleError); +process.on('unhandledRejection', handleError) +process.on('uncaughtException', handleError) // Check if all arguments are present -checkArguments(process.argv); +checkArguments(process.argv) function getTimestamp30MinutesAgo() { - return Math.trunc(Date.now() / 1000) - 60 * 30; + return Math.trunc(Date.now() / 1000) - 60 * 30 } // Get path of module import -const adapterType: AdapterType = process.argv[2] as AdapterType; -const file = `${adapterType}/${process.argv[3]}`; +const adapterType: AdapterType = process.argv[2] as AdapterType +const file = `${adapterType}/${process.argv[3]}` -const passedFile = path.resolve( - process.cwd(), - `./${adapterType}/${process.argv[3]}` -); +const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[3]}`); (async () => { - const cleanDayTimestamp = process.argv[4] - ? Number(process.argv[4]) - : getUniqStartOfTodayTimestamp(new Date()); + + const cleanDayTimestamp = process.argv[4] ? Number(process.argv[4]) : getUniqStartOfTodayTimestamp(new Date()) let endCleanDayTimestamp = cleanDayTimestamp; - console.info(`🦙 Running ${process.argv[3].toUpperCase()} adapter 🦙`); - console.info(`---------------------------------------------------`); + console.info(`🦙 Running ${process.argv[3].toUpperCase()} adapter 🦙`) + console.info(`---------------------------------------------------`) // Import module to test - let module: Adapter = (await import(passedFile)).default; - const adapterVersion = module.version; - let endTimestamp = endCleanDayTimestamp; + let module: Adapter = (await import(passedFile)).default + const adapterVersion = module.version + let endTimestamp = endCleanDayTimestamp if (adapterVersion === 2) { - endTimestamp = process.argv[4] - ? Number(process.argv[4]) - : getTimestamp30MinutesAgo(); // 1 day; + endTimestamp = (process.argv[4] ? Number(process.argv[4]) : getTimestamp30MinutesAgo()) // 1 day; } else { - checkIfFileExistsInMasterBranch(file); + checkIfFileExistsInMasterBranch(file) } - console.info( - `Start Date:\t${new Date((endTimestamp - 3600 * 24) * 1e3).toUTCString()}` - ); - console.info(`End Date:\t${new Date(endTimestamp * 1e3).toUTCString()}`); - console.info(`---------------------------------------------------\n`); + console.info(`Start Date:\t${new Date((endTimestamp - 3600*24)*1e3).toUTCString()}`) + console.info(`End Date:\t${new Date(endTimestamp*1e3).toUTCString()}`) + console.info(`---------------------------------------------------\n`) // Get closest block to clean day. Only for EVM compatible ones. - const allChains = getChainsFromDexAdapter(module).filter(canGetBlock); + const allChains = getChainsFromDexAdapter(module).filter(canGetBlock) const chainBlocks: ChainBlocks = {}; - await Promise.all( - allChains.map(async (chain) => { - try { - const latestBlock = await getBlock( - endTimestamp, - chain, - chainBlocks - ).catch((e: any) => - console.error(`${e.message}; ${endTimestamp}, ${chain}`) - ); - if (latestBlock) chainBlocks[chain] = latestBlock; - } catch (e) { - console.log(e); - } - }) - ); + await Promise.all(allChains.map(async (chain) => { + try { + const latestBlock = await getBlock(endTimestamp, chain, chainBlocks).catch((e: any) => console.error(`${e.message}; ${endTimestamp}, ${chain}`)) + if (latestBlock) + chainBlocks[chain] = latestBlock + } catch (e) { console.log(e) } + })) if ("adapter" in module) { - const adapter = module.adapter; + const adapter = module.adapter // Get adapter - const volumes = await runAdapter( - adapter, - endTimestamp, - chainBlocks, - undefined, - undefined, - { - adapterVersion, - } - ); - printVolumes(volumes, adapter); - console.info("\n"); + const volumes = await runAdapter(adapter, endTimestamp, chainBlocks, undefined, undefined, { + adapterVersion, + }) + printVolumes(volumes, adapter) + console.info("\n") } else if ("breakdown" in module) { - const breakdownAdapter = module.breakdown; - const allVolumes = await Promise.all( - Object.entries(breakdownAdapter).map(([version, adapter]) => - runAdapter(adapter, endTimestamp, chainBlocks, undefined, undefined, { - adapterVersion, - }).then((res) => ({ version, res })) - ) - ); + const breakdownAdapter = module.breakdown + const allVolumes = await Promise.all(Object.entries(breakdownAdapter).map(([version, adapter]) => + runAdapter(adapter, endTimestamp, chainBlocks, undefined, undefined, { + adapterVersion, + }).then(res => ({ version, res })) + )) allVolumes.forEach(({ version, res }) => { - console.info("Version ->", version.toUpperCase()); - console.info("---------"); - printVolumes(res, breakdownAdapter[version]); - }); - } else throw new Error("No compatible adapter found"); - process.exit(0); -})(); + console.info("Version ->", version.toUpperCase()) + console.info("---------") + printVolumes(res, breakdownAdapter[version]) + }) + } else throw new Error("No compatible adapter found") + process.exit(0) +})() From 32cb2e93b27ef8f0edf55efce31b7420a58112dc Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Mon, 29 Jul 2024 16:20:55 +0200 Subject: [PATCH 1072/1590] small fix --- cli/testAdapter.ts | 2 +- fees/superstate/index.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index fa61b17f6f..600d6aaa76 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -8,7 +8,7 @@ import { canGetBlock, getBlock } from '../helpers/getBlock'; import { getUniqStartOfTodayTimestamp } from '../helpers/getUniSubgraphVolume'; import { checkArguments, printVolumes } from './utils'; -function checkIfFileExistsInMasterBranch(filePath: any) { +function checkIfFileExistsInMasterBranch(_filePath: any) { const res = execSync(`git ls-tree --name-only -r master`) // const resString = res.toString() diff --git a/fees/superstate/index.ts b/fees/superstate/index.ts index 8e9301b1e8..9279676ae4 100644 --- a/fees/superstate/index.ts +++ b/fees/superstate/index.ts @@ -2,7 +2,7 @@ // https://docs.superstate.co/uscc/income-fees-and-yield import axios from "axios"; -import { Adapter } from "../../adapters/types"; +import { Adapter, FetchResultFees } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const _fundsAddresses: string[] = [ @@ -21,7 +21,7 @@ function findDailyData(data: any[], targetDate: string) { return data.find((item: any) => item.net_asset_value_date === targetDate); } -async function getFundsFees(timestamp: number): Promise { +async function getFundsFees(timestamp: number): Promise { let ustbTotalFees: number = 0; let usccTotalFees: number = 0; From b9c57c27cc695aed2f926f642b3a48981c55d7e6 Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Mon, 29 Jul 2024 18:43:19 +0100 Subject: [PATCH 1073/1590] Add celo deployment to the carbondefi adapter --- dexs/carbondefi/index.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dexs/carbondefi/index.ts b/dexs/carbondefi/index.ts index 42a51e0272..2a6df4940c 100644 --- a/dexs/carbondefi/index.ts +++ b/dexs/carbondefi/index.ts @@ -15,6 +15,7 @@ const CARBON_METADATA: { hallmarks: [ [1681986059, "CarbonDeFi Ethereum Launch"], [1716825673, "CarbonDeFi Sei Launch"], + [1721813184, "CarbonDeFi Celo Launch"], ], methodology: { Volume: @@ -36,6 +37,12 @@ const chainInfo: { [key: string]: any } = { startTimestamp: 1716825673, getDimensionsByToken: true, }, + [CHAIN.CELO]: { + endpoint: "https://celo-api.carbondefi.xyz/v1/analytics/volume", + startBlock: 26828280, + startTimestamp: 1721813184, + getDimensionsByToken: true, + }, }; const getData = async (options: FetchOptions) => { @@ -76,6 +83,11 @@ const adapter: SimpleAdapter = { start: chainInfo[CHAIN.SEI].startTimestamp, meta: CARBON_METADATA, }, + [CHAIN.CELO]: { + fetch: getData, + start: chainInfo[CHAIN.CELO].startTimestamp, + meta: CARBON_METADATA, + }, }, }; export default adapter; From 4dfc0b9275c0edb60ff856fcae2ebace5745168e Mon Sep 17 00:00:00 2001 From: Real Shaman <85087525+realdealshaman@users.noreply.github.com> Date: Tue, 30 Jul 2024 04:13:52 +0100 Subject: [PATCH 1074/1590] add zklink add zklink --- aggregators/rubic/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aggregators/rubic/index.ts b/aggregators/rubic/index.ts index 340f59c8cc..0a1630267a 100644 --- a/aggregators/rubic/index.ts +++ b/aggregators/rubic/index.ts @@ -37,7 +37,8 @@ const chains: Record = { [CHAIN.MODE]: 'mode', [CHAIN.MERLIN]: 'merlin', [CHAIN.CORE]: 'core', - [CHAIN.TAIKO]: 'taiko' + [CHAIN.TAIKO]: 'taiko', + [CHAIN.ZKLINK]: 'zklink' }; interface ApiResponce { From 083d44c9a29d74e22afd1d1835cd1cbf8181d0ef Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 30 Jul 2024 14:12:18 +0000 Subject: [PATCH 1075/1590] fix --- fees/superstate/index.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/fees/superstate/index.ts b/fees/superstate/index.ts index 9279676ae4..352752a099 100644 --- a/fees/superstate/index.ts +++ b/fees/superstate/index.ts @@ -1,9 +1,9 @@ // https://docs.superstate.co/ustb/income-fees-and-yield // https://docs.superstate.co/uscc/income-fees-and-yield -import axios from "axios"; -import { Adapter, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions, FetchResultFees } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; const _fundsAddresses: string[] = [ "0x43415eb6ff9db7e26a15b704e7a3edce97d31c4e", @@ -21,19 +21,19 @@ function findDailyData(data: any[], targetDate: string) { return data.find((item: any) => item.net_asset_value_date === targetDate); } -async function getFundsFees(timestamp: number): Promise { +async function getFundsFees(timestamp: number, _: any, options: FetchOptions): Promise { let ustbTotalFees: number = 0; let usccTotalFees: number = 0; - const targetDate = formatDate(new Date(timestamp * 1000)); + const targetDate = formatDate(new Date(options.startOfDay * 1000)); const [ustbRes, usccRes] = await Promise.all([ - axios.get("https://api.superstate.co/v1/funds/1/nav-daily"), - axios.get("https://api.superstate.co/v1/funds/2/nav-daily"), - ]); + httpGet("https://api.superstate.co/v1/funds/1/nav-daily"), + httpGet("https://api.superstate.co/v1/funds/2/nav-daily"), + ]) - const ustbDailyData = findDailyData(ustbRes.data, targetDate); - const usccDailyData = findDailyData(usccRes.data, targetDate); + const ustbDailyData = findDailyData(ustbRes, targetDate); + const usccDailyData = findDailyData(usccRes, targetDate); if (ustbDailyData) { const { assets_under_management } = ustbDailyData; From 1769bf4d4475ed7d0b567d9f294c2ec2f47f6ed1 Mon Sep 17 00:00:00 2001 From: Bob Baxley Date: Tue, 30 Jul 2024 14:12:24 -0400 Subject: [PATCH 1076/1590] add scroll --- dexs/maverick-v2/index.ts | 4 ++++ dexs/maverick-v2/maverick-v2.ts | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/dexs/maverick-v2/index.ts b/dexs/maverick-v2/index.ts index 977cee241a..1fb8f5f7da 100644 --- a/dexs/maverick-v2/index.ts +++ b/dexs/maverick-v2/index.ts @@ -26,6 +26,10 @@ const adapter: SimpleAdapter = { fetch: getData, start: maverickV2Factories[CHAIN.ARBITRUM].startTimestamp, }, + [CHAIN.SCROLL]: { + fetch: getData, + start: maverickV2Factories[CHAIN.SCROLL].startTimestamp, + }, }, }; diff --git a/dexs/maverick-v2/maverick-v2.ts b/dexs/maverick-v2/maverick-v2.ts index 8a64bdce6c..5d851af58d 100644 --- a/dexs/maverick-v2/maverick-v2.ts +++ b/dexs/maverick-v2/maverick-v2.ts @@ -27,6 +27,11 @@ export const maverickV2Factories: { [key: string]: any } = { startBlock: 15321281, startTimestamp: 1717372801, }, + [CHAIN.SCROLL]: { + factory: "0x0A7e848Aca42d879EF06507Fca0E7b33A0a63c1e", + startBlock: 7332349, + startTimestamp: 1720621814, + }, }; const mavV2PoolCreated = `event PoolCreated(address poolAddress,uint8 protocolFeeRatio,uint256 feeAIn,uint256 feeBIn,uint256 tickSpacing,uint256 lookback,int32 activeTick,address tokenA,address tokenB,uint8 kinds,address accessor)`; From 6b17dc018069ebcdc66542270dc6c573ec0d74a9 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 31 Jul 2024 16:40:28 +0000 Subject: [PATCH 1077/1590] fix set 0 fees --- fees/xoxno/index.ts | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/fees/xoxno/index.ts b/fees/xoxno/index.ts index 41a4e6b77a..a8048433d9 100644 --- a/fees/xoxno/index.ts +++ b/fees/xoxno/index.ts @@ -9,24 +9,24 @@ interface IRaw { } const fetchFees = async ({ fromTimestamp, toTimestamp }: FetchOptions) => { - const startTimeStr = new Date(fromTimestamp * 1000).toISOString().split("T")[0]; - const toDayTimeStrNext = new Date((toTimestamp + 84000) * 1000).toISOString().split("T")[0]; - const toDayTimeStr = new Date((toTimestamp) * 1000).toISOString().split("T")[0]; - const url = `https://proxy-api.xoxno.com/getMarketplaceVolume?after=${startTimeStr}&before=${toDayTimeStrNext}&bin=1d`; - const response: IRaw[] = (await httpGet(url, { - headers: { - origin: 'https://xoxno.com', - referer: 'https://xoxno.com/' - } - })); + // const startTimeStr = new Date(fromTimestamp * 1000).toISOString().split("T")[0]; + // const toDayTimeStrNext = new Date((toTimestamp + 84000) * 1000).toISOString().split("T")[0]; + // const toDayTimeStr = new Date((toTimestamp) * 1000).toISOString().split("T")[0]; + // const url = `https://proxy-api.xoxno.com/getMarketplaceVolume?after=${startTimeStr}&before=${toDayTimeStrNext}&bin=1d`; + // const response: IRaw[] = (await httpGet(url, { + // headers: { + // origin: 'https://xoxno.com', + // referer: 'https://xoxno.com/' + // } + // })); - const toDayStr = toDayTimeStr.split('-')[1] +'-'+ toDayTimeStr.split('-')[2]; - const dayData = response.find((item) => item.Day === toDayStr); - const dailyFees = (dayData?.XO_FeesPaidUSD || 0) + (dayData?.XO_RoyaltiesPaidUSD || 0); - const dailyRevenue = dayData?.XO_FeesPaidUSD || 0; + // const toDayStr = toDayTimeStr.split('-')[1] +'-'+ toDayTimeStr.split('-')[2]; + // const dayData = response.find((item) => item.Day === toDayStr); + // const dailyFees = (dayData?.XO_FeesPaidUSD || 0) + (dayData?.XO_RoyaltiesPaidUSD || 0); + // const dailyRevenue = dayData?.XO_FeesPaidUSD || 0; return { - dailyFees: `${dailyFees}`, - dailyRevenue: `${dailyRevenue}`, + dailyFees: `${0}`, + dailyRevenue: `${0}`, } } const adapters: SimpleAdapter = { From 8223f2bcc9396e28c61f3742ab6d9d01207eeb88 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 31 Jul 2024 16:48:34 +0000 Subject: [PATCH 1078/1590] fix the graph spiritswap --- dexs/spiritswap/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/spiritswap/index.ts b/dexs/spiritswap/index.ts index 572b1f7248..09527dfd9c 100644 --- a/dexs/spiritswap/index.ts +++ b/dexs/spiritswap/index.ts @@ -1,12 +1,12 @@ import { SimpleAdapter } from "../../adapters/types"; +import * as sdk from "@defillama/sdk"; const { getChainVolumeWithGasToken, } = require("../../helpers/getUniSubgraphVolume"); const endpoints = { - fantom: - "https://api.thegraph.com/subgraphs/name/layer3org/spiritswap-analytics", + fantom: sdk.graph.modifyEndpoint('E6viiLSqVvjLy9re7aBPkaXAB2itNDho2LR3CP2q1uqP'), }; const graphs = getChainVolumeWithGasToken({ From d2dc7a826034f596d56e0b16f47a21020cc9ffa8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 31 Jul 2024 17:13:36 +0000 Subject: [PATCH 1079/1590] fix meteora volume --- dexs/meteora/index.ts | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/dexs/meteora/index.ts b/dexs/meteora/index.ts index 9f8ad5e67a..741f360d68 100644 --- a/dexs/meteora/index.ts +++ b/dexs/meteora/index.ts @@ -1,19 +1,47 @@ import { CHAIN } from '../../helpers/chains'; import { httpGet } from '../../utils/fetchURL'; -const meteoraStatsEndpoint = "https://met-stats.meteora.ag/defillama/stats"; +const meteoraStatsEndpoint = 'https://amm-v2.meteora.ag/pools/v2'; interface Stats24H { dailyVolume: number timestamp: number }; +interface Pool { + total_count: number + data: Array<{ + trading_volume: number + }> +} + async function fetch(timestamp: number): Promise { - let response: Stats24H = await httpGet(meteoraStatsEndpoint); - return { - dailyVolume: response.dailyVolume, - timestamp: timestamp - }; + let dailyVolume = 0; + let page = 0; + try { + while (true) { + const url = `${meteoraStatsEndpoint}?page=${page}&size=500`; + const response:Pool = (await httpGet(url)); + response.data.forEach(pool => { + dailyVolume += pool.trading_volume; + }) + if (response.data.length < 500) { + break; + } + if (page > 50) break; + page++; + } + return { + dailyVolume: dailyVolume, + timestamp: timestamp + } + } catch (error) { + return { + dailyVolume: dailyVolume, + timestamp: timestamp + } + } + } export default { From 630168c5157838b2d0c545c8a30d9bcb319d9a4d Mon Sep 17 00:00:00 2001 From: CarterKraken <78686465+surfarosa@users.noreply.github.com> Date: Thu, 1 Aug 2024 01:34:27 +0700 Subject: [PATCH 1080/1590] addedSpaceWhaleDEX --- dexs/spacewhale/index.ts | 46 ++++++++++++++++++++++++++++++++++++ fees/spacewhale/index.ts | 51 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 dexs/spacewhale/index.ts create mode 100644 fees/spacewhale/index.ts diff --git a/dexs/spacewhale/index.ts b/dexs/spacewhale/index.ts new file mode 100644 index 0000000000..3b46b3e996 --- /dev/null +++ b/dexs/spacewhale/index.ts @@ -0,0 +1,46 @@ +import ADDRESSES from '../../helpers/coreAssets.json' +import { FetchResult, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, request } from "graphql-request"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import * as sdk from "@defillama/sdk"; + +interface IGraph { + volumeEth: string; + volumeUsdc: string; + id: string; +} + +const URL = 'https://api.studio.thegraph.com/query/84618/spacewhale1/0.0.4'; +const fetch = async (timestamp: number): Promise => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + const chain = CHAIN.ARBITRUM; + const balances = new sdk.Balances({ chain, timestamp }) + const query = gql` + { + dayData(id: ${dayTimestamp * 1000}) { + volumeEth + volumeUsdc + } + }`; + const response: IGraph = (await request(URL, query)).dayData; + const element = response; + balances._add(ADDRESSES.arbitrum.USDC_CIRCLE, element.volumeUsdc); + balances._add(ADDRESSES.arbitrum.WETH, element.volumeEth); + + return { + dailyVolume: await balances.getUSDString(), + timestamp: dayTimestamp, + }; +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetch, + start: async () => 1712109600, + }, + }, +}; + +export default adapter; diff --git a/fees/spacewhale/index.ts b/fees/spacewhale/index.ts new file mode 100644 index 0000000000..1d996ef0cf --- /dev/null +++ b/fees/spacewhale/index.ts @@ -0,0 +1,51 @@ +import ADDRESSES from '../../helpers/coreAssets.json' +import { FetchResult, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, request } from "graphql-request"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import * as sdk from "@defillama/sdk"; + +interface IGraph { + totalFeesEth: string; + totalFeesUsdc: string; + id: string; +} + +const URL = 'https://api.studio.thegraph.com/query/84618/spacewhale1/0.0.5'; + +const fetch = async (timestamp: number): Promise => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + const chain = CHAIN.ARBITRUM; + const balances = new sdk.Balances({ chain, timestamp }); + const query = gql` + { + dayData(id: ${dayTimestamp * 1000}) { + totalFeesEth + totalFeesUsdc + id + } + }` + + const response: IGraph = (await request(URL, query)).dayData; + const element = response; + + balances._add(ADDRESSES.arbitrum.USDC_CIRCLE, element.totalFeesUsdc); + balances._add(ADDRESSES.arbitrum.WETH, element.totalFeesEth); + + return { + dailyFees: await balances.getUSDString(), + timestamp: dayTimestamp, + }; +} + +const adapter: SimpleAdapter = { + version: 1, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetch, + start: async () => 1712109600, + }, + }, +}; + +export default adapter; \ No newline at end of file From fafa5a361265ea5d05a7c187199028398503a946 Mon Sep 17 00:00:00 2001 From: CarterKraken <78686465+surfarosa@users.noreply.github.com> Date: Thu, 1 Aug 2024 01:43:34 +0700 Subject: [PATCH 1081/1590] subGraphVersion --- dexs/spacewhale/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/spacewhale/index.ts b/dexs/spacewhale/index.ts index 3b46b3e996..ff7621824d 100644 --- a/dexs/spacewhale/index.ts +++ b/dexs/spacewhale/index.ts @@ -11,7 +11,7 @@ interface IGraph { id: string; } -const URL = 'https://api.studio.thegraph.com/query/84618/spacewhale1/0.0.4'; +const URL = 'https://api.studio.thegraph.com/query/84618/spacewhale1/0.0.5'; const fetch = async (timestamp: number): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); const chain = CHAIN.ARBITRUM; From 587fec60745928f661df416741eef0b5310a85a1 Mon Sep 17 00:00:00 2001 From: sdasda1z Date: Thu, 1 Aug 2024 14:18:58 +0800 Subject: [PATCH 1082/1590] fix: add cetus-aggregator --- aggregators/cetus-aggregator/index.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 aggregators/cetus-aggregator/index.ts diff --git a/aggregators/cetus-aggregator/index.ts b/aggregators/cetus-aggregator/index.ts new file mode 100644 index 0000000000..40752565fe --- /dev/null +++ b/aggregators/cetus-aggregator/index.ts @@ -0,0 +1,23 @@ +import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; +import { FetchOptions } from "../../adapters/types"; + +const fetchVolume = async (options: FetchOptions) => { + const url = `https://api-sui.cetus.zone/v2/sui/aggregator_vol?startTimestamp=${options.startOfDay}&endTimestamp=${options.startOfDay}`; + const res = await httpGet(url); + return { + dailyVolume: res.data.list[0].totalUSD, + } +}; + +const adapter: any = { + version: 2, + adapter: { + [CHAIN.SUI]: { + fetch: fetchVolume, + start: 1721260800, + }, + }, +}; + +export default adapter; \ No newline at end of file From 801b57e93338dc00b48a9f6ff01ae94ec8202596 Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Thu, 1 Aug 2024 11:31:06 +0200 Subject: [PATCH 1083/1590] Add DeDust fees --- fees/dedust/index.ts | 99 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 fees/dedust/index.ts diff --git a/fees/dedust/index.ts b/fees/dedust/index.ts new file mode 100644 index 0000000000..d9eef279e8 --- /dev/null +++ b/fees/dedust/index.ts @@ -0,0 +1,99 @@ +import { CHAIN } from '../../helpers/chains' +import { postURL } from "../../utils/fetchURL" + +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 + } + } +`; + +// LPs get 80% of fees +const FEES_PERCENT_TO_LP = 0.8; + +export default { + version: 2, + adapter: { + [CHAIN.TON]: { + runAtCurrTime: true, + start: 1700000000, + meta: { + methodology: { + UserFees: "User pays fee on each swap (depends on pool, 0.1% - 1%).", + Revenue: "Protocol receives 20% of fees, it is distributed among SCALE stakers.", + SupplySideRevenue: "80% of user fees are distributed among LPs.", + }, + }, + fetch: async () => { + 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 dailyFees = 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]; + + dailyFees += (left.price * Number(pool.fees[0]) / Math.pow(10, left.decimals) + + right.price * Number(pool.fees[1]) / Math.pow(10, right.decimals)) / 2; + } + + + return { + dailyUserFees: dailyFees, + dailyFees: dailyFees, + dailySupplySideRevenue: dailyFees * FEES_PERCENT_TO_LP, + dailyRevenue: dailyFees * (1 - FEES_PERCENT_TO_LP) + } + }, + }, + }, +} From f42e284f3c8a754ce6f6b4bf23b571606712fefb Mon Sep 17 00:00:00 2001 From: roderick Date: Thu, 1 Aug 2024 18:34:07 +0800 Subject: [PATCH 1084/1590] feat: apex-omni --- dexs/apex-omni/index.ts | 66 +++++++++++++++++++++++++++++++++++++++++ fees/apex-omni.ts | 30 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 dexs/apex-omni/index.ts create mode 100644 fees/apex-omni.ts diff --git a/dexs/apex-omni/index.ts b/dexs/apex-omni/index.ts new file mode 100644 index 0000000000..8a8d575c65 --- /dev/null +++ b/dexs/apex-omni/index.ts @@ -0,0 +1,66 @@ +import fetchURL from "../../utils/fetchURL" +import { SimpleAdapter, Fetch } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const historicalVolumeEndpoint = (symbol: string, endTime: number) => `https://omni.apex.exchange/api/v3/klines?end=${endTime}&interval=D&start=1718380800&symbol=${symbol}&limit=10` +const allTiker = (symbol: string) => `https://omni.apex.exchange/api/v3/ticker?symbol=${symbol}` +const getSumbols = async ()=>{ + const res = await fetchURL('https://omni.apex.exchange/api/v3/symbols') + const symbol = res?.data?.contractConfig?.perpetualContract?.map((i: any)=>i?.crossSymbolName) + return symbol || [] +} +interface IVolumeall { + id: string; + volume: string; + timestamp: number; + price: string; + volumeUSD: number; +} + +interface IOpenInterest { + id: string; + openInterest: string; + lastPrice: string; +} + +const getVolume = async (timestamp: number) => { + const _symbol: string[] = await getSumbols() + const symbol = [...new Set(_symbol)] + + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + const historical: any[] = (await Promise.all(symbol.map((coins: string) => fetchURL(historicalVolumeEndpoint(coins, dayTimestamp + 60 * 60 * 24))))) + .map((e: any) => Object.values(e.data)).flat().flat() + .map((e: any) => { return { timestamp: e.t / 1000, volume: e.v, price: e.c } }); + const openInterestHistorical: IOpenInterest[] = (await Promise.all(symbol.map((coins: string) => fetchURL(allTiker(coins))))) + .map((e: any) => e.data).flat().map((e: any) => { return { id: e.symbol, openInterest: e.openInterest, lastPrice: e.lastPrice } }); + const dailyOpenInterest = openInterestHistorical.reduce((a: number, { openInterest, lastPrice }) => a + Number(openInterest) * Number(lastPrice), 0); + const historicalUSD = historical.map((e: IVolumeall) => { + return { + ...e, + volumeUSD: Number(e.volume) * Number(e.price) + } + }); + const dailyVolume = historicalUSD.filter((e: IVolumeall) => e.timestamp === dayTimestamp) + .reduce((a: number, { volumeUSD }) => a + volumeUSD, 0); + const totalVolume = historicalUSD.filter((e: IVolumeall) => e.timestamp <= dayTimestamp) + .reduce((a: number, { volumeUSD }) => a + volumeUSD, 0); + + return { + totalVolume: `${totalVolume}`, + dailyOpenInterest: `${dailyOpenInterest}`, + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + timestamp: dayTimestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: getVolume, + start: 1718380800, + } + }, +}; + +export default adapter; diff --git a/fees/apex-omni.ts b/fees/apex-omni.ts new file mode 100644 index 0000000000..3fcc912dba --- /dev/null +++ b/fees/apex-omni.ts @@ -0,0 +1,30 @@ +import { FetchResultFees, SimpleAdapter } from "../adapters/types" +import { CHAIN } from "../helpers/chains"; +import { getTimestampAtStartOfDayUTC } from "../utils/date" +import fetchURL from "../utils/fetchURL" + + +interface IFees { + feeOfDate: string; +} +const fees = async (timestamp: number): Promise => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp) * 1000; + const url = `https://omni.apex.exchange/api/v3/data/fee-by-date?time=${todaysTimestamp}`; + const feesData: IFees = (await fetchURL(url)).data; + const dailyFees = feesData?.feeOfDate || '0'; + return { + dailyFees: dailyFees, + dailyUserFees: dailyFees, + timestamp + } +} +const adapter: SimpleAdapter = { + version: 1, + adapter: { + [CHAIN.ETHEREUM]: { + fetch: fees, + start: 1693440000, + } + } +} +export default adapter; From b39f47ed3a99d557ff90891b981839257a8aeb3b Mon Sep 17 00:00:00 2001 From: degencreator <156078277+degencreator@users.noreply.github.com> Date: Thu, 1 Aug 2024 12:48:07 +0200 Subject: [PATCH 1085/1590] Taker volume correction --- dexs/intent-x/index.tsx | 57 ++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/dexs/intent-x/index.tsx b/dexs/intent-x/index.tsx index 08119f1edb..a19906eacb 100644 --- a/dexs/intent-x/index.tsx +++ b/dexs/intent-x/index.tsx @@ -149,24 +149,30 @@ const fetchVolume = async (timestamp: number): Promise => { to: String(timestamp), }); - let dailyVolume = new BigNumber(0); + let dailyMakerVolume = new BigNumber(0); + let dailyTakerVolume = new BigNumber(0); response_0_8_0.dailyHistories.forEach((data) => { - dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); + dailyMakerVolume = dailyMakerVolume.plus(new BigNumber(data.tradeVolume)); + dailyTakerVolume = dailyTakerVolume.plus(new BigNumber(data.tradeVolume)); }); response.dailyHistories.forEach((data) => { - dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); + dailyMakerVolume = dailyMakerVolume.plus(new BigNumber(data.tradeVolume)); + dailyTakerVolume = dailyTakerVolume.plus(new BigNumber(data.tradeVolume)); }); - let totalVolume = new BigNumber(0); + let totalMakerVolume = new BigNumber(0); + let totalTakerVolume = new BigNumber(0); response_0_8_0.totalHistories.forEach((data) => { - totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); + totalMakerVolume = totalMakerVolume.plus(new BigNumber(data.tradeVolume)); + totalTakerVolume = totalTakerVolume.plus(new BigNumber(data.tradeVolume)); }); response.totalHistories.forEach((data) => { - totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); + totalMakerVolume = totalMakerVolume.plus(new BigNumber(data.tradeVolume)); + totalTakerVolume = totalTakerVolume.plus(new BigNumber(data.tradeVolume)); }); - dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); - totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); + const dailyVolume = dailyMakerVolume.plus(dailyTakerVolume); + const totalVolume = totalMakerVolume.plus(totalTakerVolume); const _dailyVolume = toString(dailyVolume); const _totalVolume = toString(totalVolume); @@ -183,8 +189,10 @@ const fetchVolume = async (timestamp: number): Promise => { const fetchVolumeBlast = async ( timestamp: number ): Promise => { - let dailyVolume = new BigNumber(0); - let totalVolume = new BigNumber(0); + let dailyMakerVolume = new BigNumber(0); + let dailyTakerVolume = new BigNumber(0); + let totalMakerVolume = new BigNumber(0); + let totalTakerVolume = new BigNumber(0); const response_blast: IGraphResponse = await request( endpoint_blast, @@ -195,17 +203,16 @@ const fetchVolumeBlast = async ( } ); response_blast.dailyHistories.forEach((data) => { - dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); + dailyMakerVolume = dailyMakerVolume.plus(new BigNumber(data.tradeVolume)); + dailyTakerVolume = dailyTakerVolume.plus(new BigNumber(data.tradeVolume)); }); response_blast.totalHistories.forEach((data) => { - totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); + totalMakerVolume = totalMakerVolume.plus(new BigNumber(data.tradeVolume)); + totalTakerVolume = totalTakerVolume.plus(new BigNumber(data.tradeVolume)); }); - dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)).multipliedBy(2); - totalVolume = totalVolume.dividedBy(new BigNumber(1e18)).multipliedBy(2); - - const _dailyVolume = toString(dailyVolume); - const _totalVolume = toString(totalVolume); + const _dailyVolume = toString(dailyMakerVolume.plus(dailyTakerVolume)); + const _totalVolume = toString(totalMakerVolume.plus(totalTakerVolume)); const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); @@ -219,8 +226,10 @@ const fetchVolumeBlast = async ( const fetchVolumeMantle = async ( timestamp: number ): Promise => { - let dailyVolume = new BigNumber(0); - let totalVolume = new BigNumber(0); + let dailyMakerVolume = new BigNumber(0); + let dailyTakerVolume = new BigNumber(0); + let totalMakerVolume = new BigNumber(0); + let totalTakerVolume = new BigNumber(0); const response_mantle: IGraphResponse = await request( endpoint_mantle, @@ -231,14 +240,16 @@ const fetchVolumeMantle = async ( } ); response_mantle.dailyHistories.forEach((data) => { - dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); + dailyMakerVolume = dailyMakerVolume.plus(new BigNumber(data.tradeVolume)); + dailyTakerVolume = dailyTakerVolume.plus(new BigNumber(data.tradeVolume)); }); response_mantle.totalHistories.forEach((data) => { - totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); + totalMakerVolume = totalMakerVolume.plus(new BigNumber(data.tradeVolume)); + totalTakerVolume = totalTakerVolume.plus(new BigNumber(data.tradeVolume)); }); - dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); - totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); + const dailyVolume = dailyMakerVolume.plus(dailyTakerVolume); + const totalVolume = totalMakerVolume.plus(totalTakerVolume const _dailyVolume = toString(dailyVolume); const _totalVolume = toString(totalVolume); From ad95c8c160a0d638c19b86f9b7693334d4173fb6 Mon Sep 17 00:00:00 2001 From: degencreator <156078277+degencreator@users.noreply.github.com> Date: Thu, 1 Aug 2024 12:52:11 +0200 Subject: [PATCH 1086/1590] fix: Compilation issue --- dexs/intent-x/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/intent-x/index.tsx b/dexs/intent-x/index.tsx index a19906eacb..8e1e6d16e0 100644 --- a/dexs/intent-x/index.tsx +++ b/dexs/intent-x/index.tsx @@ -249,7 +249,7 @@ const fetchVolumeMantle = async ( }); const dailyVolume = dailyMakerVolume.plus(dailyTakerVolume); - const totalVolume = totalMakerVolume.plus(totalTakerVolume + const totalVolume = totalMakerVolume.plus(totalTakerVolume); const _dailyVolume = toString(dailyVolume); const _totalVolume = toString(totalVolume); From fcb44bf0337fb2e14171633cfe141493f1d337e8 Mon Sep 17 00:00:00 2001 From: roderick Date: Fri, 2 Aug 2024 00:56:47 +0800 Subject: [PATCH 1087/1590] fix: ticker server --- dexs/apex-omni/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/apex-omni/index.ts b/dexs/apex-omni/index.ts index 8a8d575c65..0bf1e56fd8 100644 --- a/dexs/apex-omni/index.ts +++ b/dexs/apex-omni/index.ts @@ -6,8 +6,8 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume const historicalVolumeEndpoint = (symbol: string, endTime: number) => `https://omni.apex.exchange/api/v3/klines?end=${endTime}&interval=D&start=1718380800&symbol=${symbol}&limit=10` const allTiker = (symbol: string) => `https://omni.apex.exchange/api/v3/ticker?symbol=${symbol}` const getSumbols = async ()=>{ - const res = await fetchURL('https://omni.apex.exchange/api/v3/symbols') - const symbol = res?.data?.contractConfig?.perpetualContract?.map((i: any)=>i?.crossSymbolName) + const res = await fetchURL('https://omni.apex.exchange/api/v3/all-open-tickers') + const symbol = res?.data?.map((i: any)=>i?.ticker_id) return symbol || [] } interface IVolumeall { From 79a6daf976eae70820b3783e8c6e9f5b6a1630b5 Mon Sep 17 00:00:00 2001 From: MevX Date: Fri, 2 Aug 2024 00:16:39 +0700 Subject: [PATCH 1088/1590] Add MevX fee trackers Add MevX fee trackers --- fees/mevx.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 fees/mevx.ts diff --git a/fees/mevx.ts b/fees/mevx.ts new file mode 100644 index 0000000000..42024d69ed --- /dev/null +++ b/fees/mevx.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("3958680", { + 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 5d6c6c362406041cc7bf0fee4b4ceec4d14f762b Mon Sep 17 00:00:00 2001 From: Mario Reder Date: Fri, 2 Aug 2024 13:38:56 +0200 Subject: [PATCH 1089/1590] feat: orderly fee adapter --- fees/orderly/index.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 fees/orderly/index.ts diff --git a/fees/orderly/index.ts b/fees/orderly/index.ts new file mode 100644 index 0000000000..fcee791643 --- /dev/null +++ b/fees/orderly/index.ts @@ -0,0 +1,37 @@ +import type { Adapter, FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import fetchURL from "../../utils/fetchURL"; + +const apiEVM = "https://api-evm.orderly.org/md/volume/daily_stats"; + +type DailyStats = { + volume: string; + date: string; + netFee: number; + dateString: string; + createdAt: string; + updatedAt: string; +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.ARBITRUM]: { + start: async () => 1698278400, + fetch: async (__t: number, _: any, { startOfDay }: FetchOptions) => { + const t = getUniqStartOfTodayTimestamp(new Date(startOfDay * 1000)); + const data: DailyStats[] = await fetchURL(apiEVM); + const totalFee = data.reduce((acc, { netFee }) => acc + netFee, 0); + return { + timestamp: t, + dailyFee: data.find( + ({ createdAt }) => new Date(createdAt).valueOf() / 1_000 === t + )?.netFee, + totalFee, + }; + }, + }, + }, +}; + +export default adapter; From e7c9b7e7ab56072f8b65aa8a63a1a3b805faf640 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 2 Aug 2024 15:25:48 +0000 Subject: [PATCH 1090/1590] fix cetus --- .../cetus}/cetus-aggregator/index.ts | 12 ++++--- dexs/cetus/index.ts | 32 +++++++++++-------- 2 files changed, 26 insertions(+), 18 deletions(-) rename {aggregators => dexs/cetus}/cetus-aggregator/index.ts (65%) diff --git a/aggregators/cetus-aggregator/index.ts b/dexs/cetus/cetus-aggregator/index.ts similarity index 65% rename from aggregators/cetus-aggregator/index.ts rename to dexs/cetus/cetus-aggregator/index.ts index 40752565fe..2b99bdf473 100644 --- a/aggregators/cetus-aggregator/index.ts +++ b/dexs/cetus/cetus-aggregator/index.ts @@ -1,6 +1,6 @@ -import { CHAIN } from "../../helpers/chains"; -import { httpGet } from "../../utils/fetchURL"; -import { FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../../helpers/chains"; +import { httpGet } from "../../../utils/fetchURL"; +import { FetchOptions } from "../../../adapters/types"; const fetchVolume = async (options: FetchOptions) => { const url = `https://api-sui.cetus.zone/v2/sui/aggregator_vol?startTimestamp=${options.startOfDay}&endTimestamp=${options.startOfDay}`; @@ -10,7 +10,7 @@ const fetchVolume = async (options: FetchOptions) => { } }; -const adapter: any = { +const adapter_agge: any = { version: 2, adapter: { [CHAIN.SUI]: { @@ -20,4 +20,6 @@ const adapter: any = { }, }; -export default adapter; \ No newline at end of file +export { + adapter_agge, +} diff --git a/dexs/cetus/index.ts b/dexs/cetus/index.ts index c1055d7c72..d2edb27f07 100644 --- a/dexs/cetus/index.ts +++ b/dexs/cetus/index.ts @@ -1,8 +1,9 @@ import fetchURL from "../../utils/fetchURL" import { Chain } from "@defillama/sdk/build/general"; -import { SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { adapter_agge } from './cetus-aggregator/index' type IUrl = { [s: string]: string; @@ -19,8 +20,8 @@ interface IVolumeall { } const fetch = (chain: Chain) => { - return async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + return async (options: FetchOptions) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) const historicalVolume: IVolumeall[] = (await fetchURL(url[chain])).data.list; const totalVolume = historicalVolume .filter(volItem => (new Date(volItem.date.split('T')[0]).getTime() / 1000) <= dayTimestamp) @@ -39,17 +40,22 @@ const fetch = (chain: Chain) => { -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.APTOS]: { - fetch: fetch(CHAIN.APTOS), - start: 1666224000, +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + cetus: { + [CHAIN.APTOS]: { + fetch: fetch(CHAIN.APTOS), + start: 1666224000, + }, + [CHAIN.SUI]: { + fetch: fetch(CHAIN.SUI), + start: 1682985600, + } }, - [CHAIN.SUI]: { - fetch: fetch(CHAIN.SUI), - start: 1682985600, - } - }, + "cetus-aggregator": adapter_agge.adapter + } + }; export default adapter; From 1303b61e97cc60af5f07e8f6e18ee6326e30eceb Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 2 Aug 2024 16:03:47 +0000 Subject: [PATCH 1091/1590] fix naming --- fees/orderly/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/orderly/index.ts b/fees/orderly/index.ts index fcee791643..f3c983e12a 100644 --- a/fees/orderly/index.ts +++ b/fees/orderly/index.ts @@ -24,10 +24,10 @@ const adapter: Adapter = { const totalFee = data.reduce((acc, { netFee }) => acc + netFee, 0); return { timestamp: t, - dailyFee: data.find( + dailyFees: data.find( ({ createdAt }) => new Date(createdAt).valueOf() / 1_000 === t )?.netFee, - totalFee, + totalFees: totalFee, }; }, }, From a1db41846d482716072fd0740175d81b45d1966b Mon Sep 17 00:00:00 2001 From: Matias Hermida <158588059+MatHermida@users.noreply.github.com> Date: Fri, 2 Aug 2024 14:41:20 -0300 Subject: [PATCH 1092/1590] Add C3 Exchange Volumes --- dexs/c3-exchange/index.ts | 69 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 dexs/c3-exchange/index.ts diff --git a/dexs/c3-exchange/index.ts b/dexs/c3-exchange/index.ts new file mode 100644 index 0000000000..a98a24de66 --- /dev/null +++ b/dexs/c3-exchange/index.ts @@ -0,0 +1,69 @@ +import { + Adapter, + FetchOptions, + FetchResultV2, + FetchV2, +} from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import fetchURL from "../../utils/fetchURL"; + +const barsEndpoint = "https://api.c3.io/v1/markets/{id}/bars"; + +const ONE_DAY_IN_MILISECONDS = 60 * 60 * 24 * 1000; +const HALF_DAY_IN_MILISECONDS = ONE_DAY_IN_MILISECONDS / 2; + +const marketsOfChains = { + [CHAIN.ALGORAND]: ["ALGO-USDC"], + [CHAIN.AVAX]: ["AVAX-USDC"], + [CHAIN.BITCOIN]: ["WBTC-USDC"], + [CHAIN.ETHEREUM]: ["ETH-USDC"], + [CHAIN.ARBITRUM]: ["ARB-USDC"], + [CHAIN.BSC]: ["BNB-USDC"], + [CHAIN.SOLANA]: ["SOL-USDC", "PYTH-USDC", "W-USDC"], +}; + +async function fetchVolume({ chain, startOfDay }: FetchOptions): Promise { + const markets = marketsOfChains[chain]; + + const from = Math.floor(startOfDay) * 1000 - HALF_DAY_IN_MILISECONDS; + const to = Math.floor(startOfDay) * 1000 + HALF_DAY_IN_MILISECONDS; + const barsPromises = markets.map((market) => { + const endpoint = barsEndpoint.replace("{id}", market); + const url = `${endpoint}?from=${from}&to=${to}&granularity=1D`; + return fetchURL(url); + }); + + const volume24h = (await Promise.all(barsPromises)).reduce((acc, bars) => { + const last = bars[bars.length - 1]; + const quoteVolume = last?.quoteVolume ?? 0; + return acc + +quoteVolume; + }, 0); + + return { + dailyVolume: Math.round(volume24h), + timestamp: startOfDay, + }; +} + +function adapterConstructor(fetchVolumeFunc: FetchV2, chains: string[]): Adapter { + const chainVolumes = chains.reduce( + (obj, chain) => ({ + ...obj, + [chain]: { + fetch: fetchVolumeFunc, + start: 1688169600, // 2023-7-1 00:00:00 GMT + // runAtCurrTime: false, + }, + }), + {} + ); + + return { + version: 2, + adapter: chainVolumes, + }; +} + +const adapter: Adapter = adapterConstructor(fetchVolume, Object.keys(marketsOfChains)); + +export default adapter; From 688f1a869cc99582ac4ca3b752dca398090e74f3 Mon Sep 17 00:00:00 2001 From: degencreator <156078277+degencreator@users.noreply.github.com> Date: Sat, 3 Aug 2024 12:29:42 +0200 Subject: [PATCH 1093/1590] fix: Volume decimals --- dexs/intent-x/index.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dexs/intent-x/index.tsx b/dexs/intent-x/index.tsx index 8e1e6d16e0..017560c5cc 100644 --- a/dexs/intent-x/index.tsx +++ b/dexs/intent-x/index.tsx @@ -171,8 +171,8 @@ const fetchVolume = async (timestamp: number): Promise => { totalTakerVolume = totalTakerVolume.plus(new BigNumber(data.tradeVolume)); }); - const dailyVolume = dailyMakerVolume.plus(dailyTakerVolume); - const totalVolume = totalMakerVolume.plus(totalTakerVolume); + const dailyVolume = dailyMakerVolume.plus(dailyTakerVolume).dividedBy(new BigNumber(1e18)); + const totalVolume = totalMakerVolume.plus(totalTakerVolume).dividedBy(new BigNumber(1e18)); const _dailyVolume = toString(dailyVolume); const _totalVolume = toString(totalVolume); @@ -211,8 +211,8 @@ const fetchVolumeBlast = async ( totalTakerVolume = totalTakerVolume.plus(new BigNumber(data.tradeVolume)); }); - const _dailyVolume = toString(dailyMakerVolume.plus(dailyTakerVolume)); - const _totalVolume = toString(totalMakerVolume.plus(totalTakerVolume)); + const _dailyVolume = toString(dailyMakerVolume.plus(dailyTakerVolume)).dividedBy(new BigNumber(1e18)); + const _totalVolume = toString(totalMakerVolume.plus(totalTakerVolume)).dividedBy(new BigNumber(1e18)); const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); @@ -248,8 +248,8 @@ const fetchVolumeMantle = async ( totalTakerVolume = totalTakerVolume.plus(new BigNumber(data.tradeVolume)); }); - const dailyVolume = dailyMakerVolume.plus(dailyTakerVolume); - const totalVolume = totalMakerVolume.plus(totalTakerVolume); + const dailyVolume = dailyMakerVolume.plus(dailyTakerVolume).dividedBy(new BigNumber(1e18)); + const totalVolume = totalMakerVolume.plus(totalTakerVolume).dividedBy(new BigNumber(1e18)); const _dailyVolume = toString(dailyVolume); const _totalVolume = toString(totalVolume); From 11f34bc6e44b9dd88a4d9c177d2d02fc4bca1246 Mon Sep 17 00:00:00 2001 From: degencreator <156078277+degencreator@users.noreply.github.com> Date: Sat, 3 Aug 2024 12:31:38 +0200 Subject: [PATCH 1094/1590] fix: Blast toString --- dexs/intent-x/index.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dexs/intent-x/index.tsx b/dexs/intent-x/index.tsx index 017560c5cc..3b36302291 100644 --- a/dexs/intent-x/index.tsx +++ b/dexs/intent-x/index.tsx @@ -211,8 +211,11 @@ const fetchVolumeBlast = async ( totalTakerVolume = totalTakerVolume.plus(new BigNumber(data.tradeVolume)); }); - const _dailyVolume = toString(dailyMakerVolume.plus(dailyTakerVolume)).dividedBy(new BigNumber(1e18)); - const _totalVolume = toString(totalMakerVolume.plus(totalTakerVolume)).dividedBy(new BigNumber(1e18)); + const dailyVolume = dailyMakerVolume.plus(dailyTakerVolume).dividedBy(new BigNumber(1e18)); + const totalVolume = totalMakerVolume.plus(totalTakerVolume).dividedBy(new BigNumber(1e18)); + + const _dailyVolume = toString(dailyVolume); + const _totalVolume = toString(totalVolume); const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); From 6c90de9323525b6430b0b07854a517b4dacc41a0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 3 Aug 2024 15:56:00 +0000 Subject: [PATCH 1095/1590] fix filter pool tvl more than 100k --- dexs/orca/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dexs/orca/index.ts b/dexs/orca/index.ts index c82d735214..ba1a8bb646 100644 --- a/dexs/orca/index.ts +++ b/dexs/orca/index.ts @@ -5,7 +5,9 @@ const wpEndpoint = "https://api.mainnet.orca.so/v1/whirlpool/list"; async function fetch(timestamp: number) { const [whirlpools] = await Promise.all([httpGet(wpEndpoint)]); - const wpVol = whirlpools.whirlpools.reduce((sum: number, pool: any) => + const wpVol = whirlpools.whirlpools + .filter((pool: any) => pool?.tvl > 100_000) + .reduce((sum: number, pool: any) => sum + (pool?.volume?.day || 0) , 0); return { From 7e8fb8892272377777b3e737f0f4c2885ee3ddba Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 4 Aug 2024 14:36:38 +0000 Subject: [PATCH 1096/1590] allow run current --- fees/dedust/index.ts | 96 ++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 49 deletions(-) diff --git a/fees/dedust/index.ts b/fees/dedust/index.ts index d9eef279e8..2c3f01b6bf 100644 --- a/fees/dedust/index.ts +++ b/fees/dedust/index.ts @@ -1,3 +1,4 @@ +import { FetchResultV2 } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains' import { postURL } from "../../utils/fetchURL" @@ -32,12 +33,56 @@ query GetAssets { // LPs get 80% of fees const FEES_PERCENT_TO_LP = 0.8; +const fetchFees = async (): Promise => { + 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 + } + } + + const poolsList = (await postURL(GRAPHQL_ENDPOINT, { + query: POOLS_QUERY, + operationName: 'GetPools' + })).data.pools; + + let dailyFees = 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]; + + dailyFees += (left.price * Number(pool.fees[0]) / Math.pow(10, left.decimals) + + right.price * Number(pool.fees[1]) / Math.pow(10, right.decimals)) / 2; + } + + + return { + dailyUserFees: dailyFees, + dailyFees: dailyFees, + dailySupplySideRevenue: dailyFees * FEES_PERCENT_TO_LP, + dailyRevenue: dailyFees * (1 - FEES_PERCENT_TO_LP) + } +} export default { version: 2, adapter: { [CHAIN.TON]: { - runAtCurrTime: true, start: 1700000000, meta: { methodology: { @@ -46,54 +91,7 @@ export default { SupplySideRevenue: "80% of user fees are distributed among LPs.", }, }, - fetch: async () => { - 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 dailyFees = 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]; - - dailyFees += (left.price * Number(pool.fees[0]) / Math.pow(10, left.decimals) - + right.price * Number(pool.fees[1]) / Math.pow(10, right.decimals)) / 2; - } - - - return { - dailyUserFees: dailyFees, - dailyFees: dailyFees, - dailySupplySideRevenue: dailyFees * FEES_PERCENT_TO_LP, - dailyRevenue: dailyFees * (1 - FEES_PERCENT_TO_LP) - } - }, + fetch: fetchFees, }, }, } From b3fa23db247f72c521bfe7af84f80b78830ccb31 Mon Sep 17 00:00:00 2001 From: sdasda1z Date: Mon, 5 Aug 2024 15:39:25 +0800 Subject: [PATCH 1097/1590] fix: update cetus --- dexs/cetus/index.ts | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/dexs/cetus/index.ts b/dexs/cetus/index.ts index d2edb27f07..ce4ab0f8d1 100644 --- a/dexs/cetus/index.ts +++ b/dexs/cetus/index.ts @@ -6,14 +6,25 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume import { adapter_agge } from './cetus-aggregator/index' type IUrl = { - [s: string]: string; + [s: string]: { + countUrl: string, + histogramUrl: string, + }; } + const url: IUrl = { - [CHAIN.APTOS]: "https://api.cetus.zone/v1/histogram?date_type=day&typ=vol", - [CHAIN.SUI]: "https://api-sui.cetus.zone/v2/sui/histogram?date_type=day&typ=vol" + [CHAIN.APTOS]: { + countUrl: 'https://api.cetus.zone/v2/swap/count', + histogramUrl: "https://api.cetus.zone/v2/histogram?date_type=day&typ=vol&limit=99999", + }, + [CHAIN.SUI]: { + countUrl: 'https://api-sui.cetus.zone/v2/sui/swap/count/v3', + histogramUrl: "https://api-sui.cetus.zone/v2/sui/histogram?date_type=day&typ=vol&limit=99999" + } } + interface IVolumeall { num: string; date: string; @@ -22,14 +33,10 @@ interface IVolumeall { const fetch = (chain: Chain) => { return async (options: FetchOptions) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) - const historicalVolume: IVolumeall[] = (await fetchURL(url[chain])).data.list; - const totalVolume = historicalVolume - .filter(volItem => (new Date(volItem.date.split('T')[0]).getTime() / 1000) <= dayTimestamp) - .reduce((acc, { num }) => acc + Number(num), 0) - + const historicalVolume: IVolumeall[] = (await fetchURL(url[chain].histogramUrl)).data.list; + const totalVolume = (await fetchURL(url[chain].countUrl)).data.vol_in_usd const dailyVolume = historicalVolume .find(dayItem => (new Date(dayItem.date.split('T')[0]).getTime() / 1000) === dayTimestamp)?.num - return { totalVolume: `${totalVolume}`, dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, @@ -40,6 +47,7 @@ const fetch = (chain: Chain) => { + const adapter: BreakdownAdapter = { version: 2, breakdown: { @@ -58,4 +66,4 @@ const adapter: BreakdownAdapter = { }; -export default adapter; +export default adapter; \ No newline at end of file From 034ea465cea0db3661ee711ac57404acb9e1a091 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 5 Aug 2024 12:21:57 +0100 Subject: [PATCH 1098/1590] rewrite ethena not to use indexer --- fees/ethena.ts | 64 ++++++++++++++++++++------------------------------ 1 file changed, 26 insertions(+), 38 deletions(-) diff --git a/fees/ethena.ts b/fees/ethena.ts index 90f5e031a3..31d7047383 100644 --- a/fees/ethena.ts +++ b/fees/ethena.ts @@ -1,6 +1,8 @@ +import { ethers } from "ethers"; import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { queryIndexer } from "../helpers/indexer"; + +const usdt = "0xdac17f958d2ee523a2206206994597c13d831ec7" const mint_event = "event Mint( address indexed minter,address indexed benefactor,address indexed beneficiary,address collateral_asset,uint256 collateral_amount,uint256 usde_amount)"; @@ -9,50 +11,36 @@ const fetch = async (options: FetchOptions) => { eventAbi: mint_event, target: "0x2cc440b721d2cafd6d64908d6d8c4acc57f8afc3", }); - const in_flow = await queryIndexer( - ` - SELECT - '0x' || encode(data, 'hex') AS data, - '0x' || encode(contract_address, 'hex') AS token - FROM - ethereum.event_logs - WHERE - block_number > 18637861 - AND contract_address NOT IN ('\\x4c9edd5852cd905f086c759e8383e09bff1e68b3') - AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' - AND topic_1 NOT IN ('\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87', '\\x0000000000000000000000002b5ab59163a6e93b4486f6055d33ca4a115dd4d5') - AND topic_2 in ('\\x00000000000000000000000071e4f98e8f20c88112489de3dded4489802a3a87', '\\x0000000000000000000000002b5ab59163a6e93b4486f6055d33ca4a115dd4d5') - AND block_time BETWEEN llama_replace_date_range; -`, - options - ); + const in_flow = (await options.getLogs({ + targets: [usdt], + flatten: false, + eventAbi: 'event Transfer (address indexed from, address indexed to, uint256 value)', + topics: ['0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', null, [ + ethers.zeroPadValue("0x71e4f98e8f20c88112489de3dded4489802a3a87", 32), + ethers.zeroPadValue("0x2b5ab59163a6e93b4486f6055d33ca4a115dd4d5", 32), + ]] as any, + }))[0].filter((log:any[])=>!["0x71e4f98e8f20c88112489de3dded4489802a3a87", "0x2b5ab59163a6e93b4486f6055d33ca4a115dd4d5"] + .some(a=>a.toLowerCase() === log[0].toLowerCase())) + + const out_flow = (await options.getLogs({ + targets: [usdt], + flatten: false, + eventAbi: 'event Transfer (address indexed from, address indexed to, uint256 value)', + topics: ['0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', null, [ + ethers.zeroPadValue("0xf2fa332bd83149c66b09b45670bce64746c6b439", 32), + ]] as any, + }))[0] - const out_flow = await queryIndexer( - ` - SELECT - '0x' || encode(data, 'hex') AS data, - '0x' || encode(contract_address, 'hex') AS token - FROM - ethereum.event_logs - WHERE - block_number > 18637861 - AND contract_address NOT IN ('\\x4c9edd5852cd905f086c759e8383e09bff1e68b3') - AND topic_0 = '\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' - AND topic_2 in ('\\x000000000000000000000000f2fa332bd83149c66b09b45670bce64746c6b439') - AND block_time BETWEEN llama_replace_date_range; -`, - options - ); const dailyFeesInflow = options.createBalances(); const supplyRewards = options.createBalances(); in_flow.map((log: any) => { - const amount = Number(log.data); - dailyFeesInflow.add(log.token, amount); + const amount = Number(log.value); + dailyFeesInflow.add(usdt, amount); }); out_flow.map((log: any) => { - const amount = Number(log.data); - supplyRewards.add(log.token, amount); + const amount = Number(log.value); + supplyRewards.add(usdt, amount); }); const dailyFeesMint = options.createBalances(); logs.map((log) => { From dd642bd612d627856646019f796ee6c5e87474ef Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 5 Aug 2024 12:30:20 +0100 Subject: [PATCH 1099/1590] use v1 --- fees/ethena.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/ethena.ts b/fees/ethena.ts index 31d7047383..7de8454b4a 100644 --- a/fees/ethena.ts +++ b/fees/ethena.ts @@ -58,7 +58,7 @@ const fetch = async (options: FetchOptions) => { }; const adapters: SimpleAdapter = { - version: 2, + // version v1 because if we track expenses but not income it leads to wrong data, need to include both adapter: { [CHAIN.ETHEREUM]: { fetch: fetch, From 26149d1b002e368d10dcfc3f0e67121386cb8fba Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 5 Aug 2024 12:40:38 +0100 Subject: [PATCH 1100/1590] fix for v1 --- fees/ethena.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/ethena.ts b/fees/ethena.ts index 7de8454b4a..3cef12538e 100644 --- a/fees/ethena.ts +++ b/fees/ethena.ts @@ -1,12 +1,12 @@ import { ethers } from "ethers"; -import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; const usdt = "0xdac17f958d2ee523a2206206994597c13d831ec7" const mint_event = "event Mint( address indexed minter,address indexed benefactor,address indexed beneficiary,address collateral_asset,uint256 collateral_amount,uint256 usde_amount)"; -const fetch = async (options: FetchOptions) => { +const fetch = async (toTimestamp:number, chainBlocks:any, options: FetchOptions) => { const logs = await options.getLogs({ eventAbi: mint_event, target: "0x2cc440b721d2cafd6d64908d6d8c4acc57f8afc3", @@ -57,7 +57,7 @@ const fetch = async (options: FetchOptions) => { }; }; -const adapters: SimpleAdapter = { +const adapters = { // version v1 because if we track expenses but not income it leads to wrong data, need to include both adapter: { [CHAIN.ETHEREUM]: { From e315f1c7e0da1639efd444254467b5a77a0030c1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 5 Aug 2024 15:03:02 +0000 Subject: [PATCH 1101/1590] fix stuck --- dexs/meteora/index.ts | 14 +++++++------- fees/apex-omni.ts | 12 ++++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dexs/meteora/index.ts b/dexs/meteora/index.ts index 741f360d68..82f0694c05 100644 --- a/dexs/meteora/index.ts +++ b/dexs/meteora/index.ts @@ -19,18 +19,18 @@ async function fetch(timestamp: number): Promise { let dailyVolume = 0; let page = 0; try { - while (true) { - const url = `${meteoraStatsEndpoint}?page=${page}&size=500`; + // while (true) { + const url = `${meteoraStatsEndpoint}?page=${page}&size=100000`; const response:Pool = (await httpGet(url)); response.data.forEach(pool => { dailyVolume += pool.trading_volume; }) - if (response.data.length < 500) { - break; - } - if (page > 50) break; + // if (response.data.length < 500) { + // break; + // } + // if (page > 50) break; page++; - } + // } return { dailyVolume: dailyVolume, timestamp: timestamp diff --git a/fees/apex-omni.ts b/fees/apex-omni.ts index 3fcc912dba..f5180359be 100644 --- a/fees/apex-omni.ts +++ b/fees/apex-omni.ts @@ -1,21 +1,21 @@ -import { FetchResultFees, SimpleAdapter } from "../adapters/types" +import { FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types" import { CHAIN } from "../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../utils/date" -import fetchURL from "../utils/fetchURL" +import fetchURL, { httpGet } from "../utils/fetchURL" interface IFees { feeOfDate: string; } -const fees = async (timestamp: number): Promise => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp) * 1000; +const fees = async (_:any, _b: any, options: FetchOptions): Promise => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(options.startOfDay) * 1000; const url = `https://omni.apex.exchange/api/v3/data/fee-by-date?time=${todaysTimestamp}`; - const feesData: IFees = (await fetchURL(url)).data; + const feesData: IFees = (await httpGet(url, { timeout: 10000 })).data; const dailyFees = feesData?.feeOfDate || '0'; return { dailyFees: dailyFees, dailyUserFees: dailyFees, - timestamp + timestamp: todaysTimestamp } } const adapter: SimpleAdapter = { From 5bbf8a3633a04c6d89a43898bf90939d54c4981f Mon Sep 17 00:00:00 2001 From: MatHermida Date: Mon, 5 Aug 2024 12:40:25 -0300 Subject: [PATCH 1102/1590] add methodology --- dexs/c3-exchange/index.ts | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/dexs/c3-exchange/index.ts b/dexs/c3-exchange/index.ts index a98a24de66..fae2cae3a2 100644 --- a/dexs/c3-exchange/index.ts +++ b/dexs/c3-exchange/index.ts @@ -1,5 +1,6 @@ import { Adapter, + BaseAdapter, FetchOptions, FetchResultV2, FetchV2, @@ -22,7 +23,10 @@ const marketsOfChains = { [CHAIN.SOLANA]: ["SOL-USDC", "PYTH-USDC", "W-USDC"], }; -async function fetchVolume({ chain, startOfDay }: FetchOptions): Promise { +async function fetchVolume({ + chain, + startOfDay, +}: FetchOptions): Promise { const markets = marketsOfChains[chain]; const from = Math.floor(startOfDay) * 1000 - HALF_DAY_IN_MILISECONDS; @@ -45,14 +49,22 @@ async function fetchVolume({ chain, startOfDay }: FetchOptions): Promise ({ ...obj, [chain]: { fetch: fetchVolumeFunc, start: 1688169600, // 2023-7-1 00:00:00 GMT // runAtCurrTime: false, + meta: { + methodology: { + dailyVolume: "Volume is calculated by summing the quote token volume of all trades settled on the protocol that day.", + } + }, }, }), {} @@ -64,6 +76,9 @@ function adapterConstructor(fetchVolumeFunc: FetchV2, chains: string[]): Adapter }; } -const adapter: Adapter = adapterConstructor(fetchVolume, Object.keys(marketsOfChains)); +const adapter: Adapter = adapterConstructor( + fetchVolume, + Object.keys(marketsOfChains) +); export default adapter; From dfc2a420da6e26b82f051c27d87f6e172065d9c6 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 5 Aug 2024 15:48:21 +0000 Subject: [PATCH 1103/1590] allow runcurrent --- dexs/drift-protocol/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index 693caf35cf..e4155afe5f 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -104,14 +104,12 @@ const adapter: BreakdownAdapter = { swap: { [CHAIN.SOLANA]: { fetch: () => fetch("spot"), - runAtCurrTime: true, start: 1690239600, }, }, derivatives: { [CHAIN.SOLANA]: { fetch: () => fetch("perp"), - runAtCurrTime: true, start: 1690239600, }, }, From dc6c7c4d19fca0944dddd25718c5b31f27f0085f Mon Sep 17 00:00:00 2001 From: K-Lascar <36436810+K-Lascar@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:01:52 +1000 Subject: [PATCH 1104/1590] Update GMX V2 Volume and Swaps Tracking --- dexs/gmx-v2/index.ts | 130 +++++++++++++++++++++++-------------------- 1 file changed, 71 insertions(+), 59 deletions(-) diff --git a/dexs/gmx-v2/index.ts b/dexs/gmx-v2/index.ts index 2f7ef9892c..8852dcd96d 100644 --- a/dexs/gmx-v2/index.ts +++ b/dexs/gmx-v2/index.ts @@ -1,77 +1,89 @@ -import { BreakdownAdapter, FetchOptions, FetchResultV2, FetchResultVolume } from "../../adapters/types"; +import request, { gql } from "graphql-request"; +import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { Chain } from "@defillama/sdk/build/general"; -import { adapter_trade } from './gmx-v2-trade/index' +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; - -interface ILog { - data: string; - transactionHash: string; - topics: string[]; +const endpoints: { [key: string]: string } = { + [CHAIN.ARBITRUM]: "https://subgraph.satsuma-prod.com/3b2ced13c8d9/gmx/synthetics-arbitrum-stats/api", + [CHAIN.AVAX]: "https://subgraph.satsuma-prod.com/3b2ced13c8d9/gmx/synthetics-avalanche-stats/api", } -const topic0_ins = '0x137a44067c8961cd7e1d876f4754a5a3a75989b4552f1843fc69c3b372def160'; -const topic1_ins = '0xf35c99b746450c623be607459294d15f458678f99d535718db6cfcbccb117c09'; - -interface IToken { - amount: number; - token: string; -} +const historicalDataSwap = gql` + query get_volume($period: String!, $id: String!) { + volumeInfos(where: {period: $period, id: $id}) { + swapVolumeUsd + } + } +` -type TChain = { - [s: Chain | string]: string; -} +const historicalDataDerivatives = gql` + query get_volume($period: String!, $id: String!) { + volumeStats(where: {period: $period, id: $id}) { + marginVolumeUsd + } + } +` -const contract: TChain = { - [CHAIN.ARBITRUM]: '0xc8ee91a54287db53897056e12d9819156d3822fb', - [CHAIN.AVAX]: '0xdb17b211c34240b014ab6d61d4a31fa0c0e20c26' +interface IGraphResponse { + volumeStats: Array<{ + marginVolumeUsd: string, + swapVolumeUsd: string, + }> } -const fetch = async (options: FetchOptions): Promise => { - const dailyVolume = options.createBalances(); - const swap_logs: ILog[] = await options.getLogs({ - target: contract[options.chain], - topics: [topic0_ins, topic1_ins], - }); - const raw_in = swap_logs.map((e: ILog) => { - const data = e.data.replace('0x', ''); - const volume = Number('0x' + data.slice(53 * 64, (53 * 64) + 64)); - const address = data.slice(27 * 64, (27 * 64) + 64); - const contract_address = '0x' + address.slice(24, address.length); - return { - amount: volume, - token: contract_address, - } as IToken - }) - - raw_in.map((e: IToken) => { - dailyVolume.add(e.token, e.amount) - }) +const getFetch = (query: string)=> (chain: string): Fetch => async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000))) + const dailyData: IGraphResponse = await request(endpoints[chain], query, { + id: '1d:' + chain === CHAIN.ARBITRUM + ? String(dayTimestamp) + : String(dayTimestamp), + period: '1d', + }) + const totalData: IGraphResponse = await request(endpoints[chain], query, { + id: 'total', + period: 'total', + }) - return { - dailyVolume: dailyVolume, - } + return { + timestamp: dayTimestamp, + dailyVolume: + dailyData.volumeStats.length == 1 + ? String(Number(Object.values(dailyData.volumeStats[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30) + : undefined, + totalVolume: + totalData.volumeStats.length == 1 + ? String(Number(Object.values(totalData.volumeStats[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30) + : undefined, + } } - -const adapter: any = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch: fetch, - start: 1688428800, - }, - [CHAIN.AVAX]: { - fetch: fetch, - start: 1688428800, - }, - }, -}; +const startTimestamps: { [chain: string]: number } = { + [CHAIN.ARBITRUM]: 1630368000, + [CHAIN.AVAX]: 1640131200, +} const adapters: BreakdownAdapter = { version: 2, breakdown: { - "gmx-v2-swap": adapter["adapter"], - "gmx-v2-trade": adapter_trade["adapter"], + "swap": Object.keys(endpoints).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: getFetch(historicalDataSwap)(chain), + start: startTimestamps[chain] + } + } + }, {}), + "derivatives": Object.keys(endpoints).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: getFetch(historicalDataDerivatives)(chain), + start: startTimestamps[chain] + } + } + }, {}) } } + export default adapters; From 76e5e40d5d28a3c89fb0f5e7f657105b4adae5c8 Mon Sep 17 00:00:00 2001 From: K-Lascar <36436810+K-Lascar@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:02:09 +1000 Subject: [PATCH 1105/1590] Delete dexs/gmx-v2/gmx-v2-trade directory --- dexs/gmx-v2/gmx-v2-trade/index.ts | 59 ------------------------------- 1 file changed, 59 deletions(-) delete mode 100644 dexs/gmx-v2/gmx-v2-trade/index.ts diff --git a/dexs/gmx-v2/gmx-v2-trade/index.ts b/dexs/gmx-v2/gmx-v2-trade/index.ts deleted file mode 100644 index 2d3c0d96ef..0000000000 --- a/dexs/gmx-v2/gmx-v2-trade/index.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { FetchOptions, FetchResultV2 } from "../../../adapters/types"; -import { CHAIN } from "../../../helpers/chains"; -import { Chain } from "@defillama/sdk/build/general"; - -interface ILog { - data: string; - transactionHash: string; - topics: string[]; -} - -const topic0_trades = '0x137a44067c8961cd7e1d876f4754a5a3a75989b4552f1843fc69c3b372def160'; -const topic1_trades = '0xe096982abd597114bdaa4a60612f87fabfcc7206aa12d61c50e7ba1e6c291100'; - -type TChain = { - [s: Chain | string]: string; -} - -const contract: TChain = { - [CHAIN.ARBITRUM]: '0xc8ee91a54287db53897056e12d9819156d3822fb', - [CHAIN.AVAX]: '0xdb17b211c34240b014ab6d61d4a31fa0c0e20c26' -} - -const fetch = async (options: FetchOptions): Promise => { - const trade_logs = await options.getLogs({ - target: contract[options.chain], - topics: [topic0_trades, topic1_trades] - }); - - let hash: string[] = []; - const raw_trades = trade_logs.map((e: ILog) => { - const data = e.data.replace('0x', ''); - const volume = data.slice(81 * 64, (81 * 64) + 64); - return Number('0x' + volume) / 1e30; - }) - - const dailyVolume: number = [...raw_trades] - .reduce((a: number, b: number) => a + b, 0); - - return { - dailyVolume: `${dailyVolume}`, - } -} - - -const adapter_trade: any = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch: fetch, - start: 1688428800, - }, - [CHAIN.AVAX]: { - fetch: fetch, - start: 1688428800, - }, - }, -}; -export { - adapter_trade -} From cf665f2746a1c635e6dced3b82793f4c4bae01da Mon Sep 17 00:00:00 2001 From: K-Lascar <36436810+K-Lascar@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:15:23 +1000 Subject: [PATCH 1106/1590] Fix interface --- dexs/gmx-v2/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dexs/gmx-v2/index.ts b/dexs/gmx-v2/index.ts index 8852dcd96d..3daa5ec2f1 100644 --- a/dexs/gmx-v2/index.ts +++ b/dexs/gmx-v2/index.ts @@ -18,14 +18,14 @@ const historicalDataSwap = gql` const historicalDataDerivatives = gql` query get_volume($period: String!, $id: String!) { - volumeStats(where: {period: $period, id: $id}) { + volumeInfos(where: {period: $period, id: $id}) { marginVolumeUsd } } ` interface IGraphResponse { - volumeStats: Array<{ + volumeInfos: Array<{ marginVolumeUsd: string, swapVolumeUsd: string, }> @@ -62,7 +62,7 @@ const startTimestamps: { [chain: string]: number } = { [CHAIN.AVAX]: 1640131200, } -const adapters: BreakdownAdapter = { +const adapter: BreakdownAdapter = { version: 2, breakdown: { "swap": Object.keys(endpoints).reduce((acc, chain) => { @@ -86,4 +86,4 @@ const adapters: BreakdownAdapter = { } } -export default adapters; +export default adapter; From f589b8066097f2883b648e0bfb018f69da34b708 Mon Sep 17 00:00:00 2001 From: K-Lascar <36436810+K-Lascar@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:19:23 +1000 Subject: [PATCH 1107/1590] Update index.ts --- dexs/gmx-v2/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/gmx-v2/index.ts b/dexs/gmx-v2/index.ts index 3daa5ec2f1..8ce6dc69b4 100644 --- a/dexs/gmx-v2/index.ts +++ b/dexs/gmx-v2/index.ts @@ -48,11 +48,11 @@ const getFetch = (query: string)=> (chain: string): Fetch => async (timestamp: n timestamp: dayTimestamp, dailyVolume: dailyData.volumeStats.length == 1 - ? String(Number(Object.values(dailyData.volumeStats[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30) + ? String(Number(Object.values(dailyData.volumeInfos[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30) : undefined, totalVolume: totalData.volumeStats.length == 1 - ? String(Number(Object.values(totalData.volumeStats[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30) + ? String(Number(Object.values(totalData.volumeInfos[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30) : undefined, } } From 87dac85e983a27cd40d60ea76212424ffc22ea36 Mon Sep 17 00:00:00 2001 From: K-Lascar <36436810+K-Lascar@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:21:01 +1000 Subject: [PATCH 1108/1590] Fix dailyData pulling from volumeInfo --- dexs/gmx-v2/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/gmx-v2/index.ts b/dexs/gmx-v2/index.ts index 8ce6dc69b4..e4b7b75235 100644 --- a/dexs/gmx-v2/index.ts +++ b/dexs/gmx-v2/index.ts @@ -47,11 +47,11 @@ const getFetch = (query: string)=> (chain: string): Fetch => async (timestamp: n return { timestamp: dayTimestamp, dailyVolume: - dailyData.volumeStats.length == 1 + dailyData.volumeInfos.length == 1 ? String(Number(Object.values(dailyData.volumeInfos[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30) : undefined, totalVolume: - totalData.volumeStats.length == 1 + totalData.volumeInfos.length == 1 ? String(Number(Object.values(totalData.volumeInfos[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30) : undefined, } From 0b1aeacd22ce2354d12a908dbda1d5578dbd1179 Mon Sep 17 00:00:00 2001 From: K-Lascar <36436810+K-Lascar@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:31:46 +1000 Subject: [PATCH 1109/1590] Add methodology. --- dexs/gmx-v2/index.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/dexs/gmx-v2/index.ts b/dexs/gmx-v2/index.ts index e4b7b75235..2b65432774 100644 --- a/dexs/gmx-v2/index.ts +++ b/dexs/gmx-v2/index.ts @@ -62,6 +62,13 @@ const startTimestamps: { [chain: string]: number } = { [CHAIN.AVAX]: 1640131200, } +const methodology = { + dailyVolume: + "Sum of daily total volume for all markets on a given day.", + totalVolume: + "Sum of overall total volume for all markets since inception." +} + const adapter: BreakdownAdapter = { version: 2, breakdown: { @@ -70,7 +77,8 @@ const adapter: BreakdownAdapter = { ...acc, [chain]: { fetch: getFetch(historicalDataSwap)(chain), - start: startTimestamps[chain] + start: startTimestamps[chain], + meta: {methodology} } } }, {}), @@ -79,7 +87,8 @@ const adapter: BreakdownAdapter = { ...acc, [chain]: { fetch: getFetch(historicalDataDerivatives)(chain), - start: startTimestamps[chain] + start: startTimestamps[chain], + meta: {methodology} } } }, {}) From d8c30fd170913c6e10eaa3f9f183b08c4eae221c Mon Sep 17 00:00:00 2001 From: K-Lascar <36436810+K-Lascar@users.noreply.github.com> Date: Tue, 6 Aug 2024 18:16:23 +1000 Subject: [PATCH 1110/1590] Add in Base Fees for Radiant --- fees/radiant.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fees/radiant.ts b/fees/radiant.ts index 3fa4c2506c..bd84077234 100644 --- a/fees/radiant.ts +++ b/fees/radiant.ts @@ -14,7 +14,8 @@ type TAddress = { const address: TAddress = { [CHAIN.ARBITRUM]: '0xE10997B8d5C6e8b660451f61accF4BBA00bc901f', [CHAIN.BSC]: '0xcebdff400A23E5Ad1CDeB11AfdD0087d5E9dFed8', - [CHAIN.ETHEREUM]: '0x28E395a54a64284DBA39652921Cd99924f4e3797' + [CHAIN.ETHEREUM]: '0x28E395a54a64284DBA39652921Cd99924f4e3797', + [CHAIN.BASE]: '0xC49b4D1e6CbbF4cAEf542f297449696d8B47E411' } interface ITx { @@ -86,6 +87,10 @@ const adapter: Adapter = { fetch: fetch(CHAIN.ETHEREUM), start: 1698796800, }, + [CHAIN.BASE]: { + fetch: fetch(CHAIN.BASE), + start: 1719592253, + }, } } From 68b88a87c68d2827265cef6a9a6e703283bce0c4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 6 Aug 2024 12:39:07 +0000 Subject: [PATCH 1111/1590] fix woofi --- dexs/woofi/index.ts | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/dexs/woofi/index.ts b/dexs/woofi/index.ts index 3af651b47a..bcc37ab5ec 100644 --- a/dexs/woofi/index.ts +++ b/dexs/woofi/index.ts @@ -3,6 +3,7 @@ import { Chain } from "@defillama/sdk/build/general"; import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import request, { gql } from "graphql-request"; const endpoints = { @@ -55,14 +56,33 @@ const graphs = getChainVolume({ }, }); +const dailyQuery = gql` + query getDailyVolume($Id: Int!) { + dayData(id: $Id) { + volumeUSD + }, + globalVariables { + totalVolumeUSD + } + } +` + +interface FetchResult { + dayData: { + volumeUSD: string; + } + globalVariables: Array<{ + totalVolumeUSD: string; + }> +} const fetch = async (options: FetchOptions) => { try { - const result = await graphs(options.chain)(options); - if (!result) return {}; + const dateId = Math.floor(options.endTimestamp / 86400); + const response: FetchResult = await request(endpoints[options.chain], dailyQuery, { Id: dateId }); + if (!response) return {}; return { - ...result, - totalVolume: `${(result?.totalVolume || 0) / 10 ** 18}`, - dailyVolume: `${(result?.dailyVolume || 0) / 10 ** 18}` + dailyVolume: Number(response?.dayData?.volumeUSD || 0) / 1e18, + totalVolume: Number(response?.globalVariables[0]?.totalVolumeUSD || 0) / 1e18, }; } catch (error) { console.error(error); From cbea600e0f7c5bfb5e2d22a6e596571022d540cd Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 6 Aug 2024 12:59:32 +0000 Subject: [PATCH 1112/1590] fix symbol --- dexs/apex-omni/index.ts | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/dexs/apex-omni/index.ts b/dexs/apex-omni/index.ts index 0bf1e56fd8..6bd9264dcf 100644 --- a/dexs/apex-omni/index.ts +++ b/dexs/apex-omni/index.ts @@ -1,5 +1,5 @@ -import fetchURL from "../../utils/fetchURL" -import { SimpleAdapter, Fetch } from "../../adapters/types"; +import fetchURL, { httpGet } from "../../utils/fetchURL"; +import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; @@ -25,14 +25,28 @@ interface IOpenInterest { } const getVolume = async (timestamp: number) => { - const _symbol: string[] = await getSumbols() - const symbol = [...new Set(_symbol)] + const symbol = [ + 'BTCUSDT', 'ETHUSDT', 'SOLUSDT', + 'TONUSDT', 'NEARUSDT', 'XRPUSDT', + 'ADAUSDT', 'SUIUSDT', 'AVAXUSDT', + 'BCHUSDT', 'LTCUSDT', 'MATICUSDT', + 'ARBUSDT', 'OPUSDT', 'STXUSDT', + 'DOGEUSDT', '1000SHIBUSDT', '1000PEPEUSDT', + '1000BONKUSDT', 'WIFUSDT', 'ORDIUSDT', + 'PEOPLEUSDT', 'WLDUSDT', 'RNDRUSDT', + 'ONDOUSDT', 'LINKUSDT', 'ENSUSDT', + 'UNIUSDT', 'ENAUSDT', 'PENDLEUSDT', + 'LDOUSDT', 'JUPUSDT', 'RONUSDT', + 'FILUSDT', 'ARUSDT', 'ZKUSDT', + 'IOUSDT', 'NOTUSDT', 'ZROUSDT', + 'BLASTUSDT' + ] const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const historical: any[] = (await Promise.all(symbol.map((coins: string) => fetchURL(historicalVolumeEndpoint(coins, dayTimestamp + 60 * 60 * 24))))) + const historical: any[] = (await Promise.all(symbol.map((coins: string) => httpGet(historicalVolumeEndpoint(coins, dayTimestamp + 60 * 60 * 24), { timeout: 10000 })))) .map((e: any) => Object.values(e.data)).flat().flat() .map((e: any) => { return { timestamp: e.t / 1000, volume: e.v, price: e.c } }); - const openInterestHistorical: IOpenInterest[] = (await Promise.all(symbol.map((coins: string) => fetchURL(allTiker(coins))))) + const openInterestHistorical: IOpenInterest[] = (await Promise.all(symbol.map((coins: string) => httpGet(allTiker(coins), { timeout: 10000 })))) .map((e: any) => e.data).flat().map((e: any) => { return { id: e.symbol, openInterest: e.openInterest, lastPrice: e.lastPrice } }); const dailyOpenInterest = openInterestHistorical.reduce((a: number, { openInterest, lastPrice }) => a + Number(openInterest) * Number(lastPrice), 0); const historicalUSD = historical.map((e: IVolumeall) => { @@ -45,7 +59,7 @@ const getVolume = async (timestamp: number) => { .reduce((a: number, { volumeUSD }) => a + volumeUSD, 0); const totalVolume = historicalUSD.filter((e: IVolumeall) => e.timestamp <= dayTimestamp) .reduce((a: number, { volumeUSD }) => a + volumeUSD, 0); - + return { totalVolume: `${totalVolume}`, dailyOpenInterest: `${dailyOpenInterest}`, From d1c9fe3e94037c5d498dad71df95c9e54f6a9a4f Mon Sep 17 00:00:00 2001 From: MevX Date: Tue, 6 Aug 2024 20:02:19 +0700 Subject: [PATCH 1113/1590] Update query --- fees/mevx.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/mevx.ts b/fees/mevx.ts index 42024d69ed..3053a5201b 100644 --- a/fees/mevx.ts +++ b/fees/mevx.ts @@ -4,7 +4,7 @@ import { queryDune } from "../helpers/dune"; const fetch: any = async (options: FetchOptions) => { const dailyFees = options.createBalances(); - const value = (await queryDune("3958680", { + const value = (await queryDune("3967214", { start: options.startTimestamp, end: options.endTimestamp, })); @@ -24,4 +24,4 @@ const adapter: SimpleAdapter = { isExpensiveAdapter: true }; -export default adapter; \ No newline at end of file +export default adapter; From a8719c63be0d63a2a7237400381ef621915a335d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 6 Aug 2024 13:34:56 +0000 Subject: [PATCH 1114/1590] fix linting --- fees/ethena.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/ethena.ts b/fees/ethena.ts index 3cef12538e..04f1c0332b 100644 --- a/fees/ethena.ts +++ b/fees/ethena.ts @@ -6,7 +6,7 @@ const usdt = "0xdac17f958d2ee523a2206206994597c13d831ec7" const mint_event = "event Mint( address indexed minter,address indexed benefactor,address indexed beneficiary,address collateral_asset,uint256 collateral_amount,uint256 usde_amount)"; -const fetch = async (toTimestamp:number, chainBlocks:any, options: FetchOptions) => { +const fetch = async (_t:number, _c:any, options: FetchOptions) => { const logs = await options.getLogs({ eventAbi: mint_event, target: "0x2cc440b721d2cafd6d64908d6d8c4acc57f8afc3", From 06eb17ec22626fd2201707a376a3ab67315d84a0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 6 Aug 2024 13:38:50 +0000 Subject: [PATCH 1115/1590] fix breakdown key --- dexs/gmx-v2/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/gmx-v2/index.ts b/dexs/gmx-v2/index.ts index 2b65432774..70dd58952d 100644 --- a/dexs/gmx-v2/index.ts +++ b/dexs/gmx-v2/index.ts @@ -72,7 +72,7 @@ const methodology = { const adapter: BreakdownAdapter = { version: 2, breakdown: { - "swap": Object.keys(endpoints).reduce((acc, chain) => { + "gmx-v2-swap": Object.keys(endpoints).reduce((acc, chain) => { return { ...acc, [chain]: { @@ -82,7 +82,7 @@ const adapter: BreakdownAdapter = { } } }, {}), - "derivatives": Object.keys(endpoints).reduce((acc, chain) => { + "gmx-v2-trade": Object.keys(endpoints).reduce((acc, chain) => { return { ...acc, [chain]: { From 623599f6ddab378246320e8dd7d0eb084a9bfc4f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 6 Aug 2024 14:02:55 +0000 Subject: [PATCH 1116/1590] enable metaplex --- fees/metaplex.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 fees/metaplex.ts diff --git a/fees/metaplex.ts b/fees/metaplex.ts new file mode 100644 index 0000000000..17f780f095 --- /dev/null +++ b/fees/metaplex.ts @@ -0,0 +1,34 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types" +import { CHAIN } from "../helpers/chains" +import { httpGet } from "../utils/fetchURL" + +const METAPLEX_API_KEY = process.env.METAPLEX_API_KEY +const url = `https://analytics.topledger.xyz/metaplex/api/queries/10849/results.json?api_key=${METAPLEX_API_KEY}` + +interface IFees { + block_date: string; + revenue_in_usd: number; + cumulative_revenue_in_usd: number; +} +const fetchFees = async (timestamp: number, _t: any, options: FetchOptions) => { + const res: IFees[] = (await httpGet(url)).query_result.data.rows; + const dateStr = new Date(options.endTimestamp * 1000).toISOString().split('T')[0] + const dailyItem = res.find(item => item.block_date === dateStr) + return { + dailyFees: dailyItem?.revenue_in_usd || 0, + totalFees: dailyItem?.cumulative_revenue_in_usd || 0, + dailyRevenue: dailyItem?.revenue_in_usd || 0, + totalRevenue: dailyItem?.cumulative_revenue_in_usd || 0, + timestamp, + } +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.SOLANA]: { + fetch: fetchFees, + start: 1631952000, + } + } +} +export default adapter From f1788b76079dd2f7c04c1c1e667198eb4be3a7b8 Mon Sep 17 00:00:00 2001 From: ideapacito Date: Tue, 6 Aug 2024 21:12:27 +0700 Subject: [PATCH 1117/1590] update fwx baseUrl --- dexs/fwx/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/fwx/index.ts b/dexs/fwx/index.ts index d6b872fd72..dbd9a63329 100644 --- a/dexs/fwx/index.ts +++ b/dexs/fwx/index.ts @@ -14,7 +14,7 @@ interface IRes { data: IDailyData[]; } -const baseUrl = "https://app.fwx.finance/api/v2"; +const baseUrl = "https://analytics.fwx.finance"; interface IEndpoint { tradingVolume: string; From 99e5b3967cd79faa0296e2b50497e033abde503d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 6 Aug 2024 15:09:25 +0000 Subject: [PATCH 1118/1590] fix cow protocol --- fees/cow-protocol.ts | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/fees/cow-protocol.ts b/fees/cow-protocol.ts index b2aefd1254..6f42fd81f5 100644 --- a/fees/cow-protocol.ts +++ b/fees/cow-protocol.ts @@ -1,6 +1,7 @@ import { Adapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { Chain, } from "@defillama/sdk/build/general"; +import { queryDune } from "../helpers/dune"; type TAddress = { [l: string | Chain]: string; @@ -11,18 +12,24 @@ const address: TAddress = { } -const fetch = (chain: Chain) => { +const fetch = (_: Chain) => { return async (options: FetchOptions) => { - const logs = await options.getLogs({ - target: address[chain], - eventAbi: "event Trade (address indexed owner, address sellToken, address buyToken, uint256 sellAmount, uint256 buyAmount, uint256 feeAmount, bytes orderUid)", - }) const dailyFees = options.createBalances(); - logs.forEach((tx: any) => { - dailyFees.add(tx.sellToken, tx.feeAmount) - }) - const dailyRevenue = dailyFees.clone() - return { dailyUserFees: dailyFees, dailyFees, dailyRevenue } + try { + const value = (await queryDune("3968762")); + const dateStr = new Date(options.endTimestamp * 1000).toISOString().split("T")[0]; + const dayItem = value.find((item: any) => item.time.split(' ')[0] === dateStr); + dailyFees.addGasToken((dayItem?.total_revenue) * 1e18 || 0) + return { + dailyFees: dailyFees, + dailyRevenue: dailyFees, + } + } catch (e) { + return { + dailyFees: dailyFees, + dailyRevenue: dailyFees, + } + } } } @@ -49,7 +56,8 @@ const adapter: Adapter = { // methodology // } // } - } + }, + isExpensiveAdapter: true, } export default adapter; From f6f1dbb7a830bb2ea23af52fef35e436d01dd32c Mon Sep 17 00:00:00 2001 From: Jaimi Patel Date: Tue, 6 Aug 2024 17:21:38 +0100 Subject: [PATCH 1119/1590] add dexalot chain --- helpers/chains.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/helpers/chains.ts b/helpers/chains.ts index 38e1556ee2..5b43632433 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -160,6 +160,7 @@ export enum CHAIN { SKALE_EUROPA = "skale_europa", IOTAEVM = "iotaevm", ZKLINK = "zklink", + DEXALOT = "dexalot", } // Don´t use From 7a4692576b1c2cee1fe502064473674904e962d2 Mon Sep 17 00:00:00 2001 From: Jaimi Patel Date: Tue, 6 Aug 2024 17:21:59 +0100 Subject: [PATCH 1120/1590] get dexalot volumes by chain via api --- dexs/dexalot/index.ts | 87 +++++++++++++++++++++++++++++-------------- 1 file changed, 60 insertions(+), 27 deletions(-) diff --git a/dexs/dexalot/index.ts b/dexs/dexalot/index.ts index 3d12c94acf..570ccb05dd 100644 --- a/dexs/dexalot/index.ts +++ b/dexs/dexalot/index.ts @@ -1,43 +1,76 @@ -import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { BaseAdapter, BreakdownAdapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; + +const historicalVolumeEndpoint = "https://api.dexalot.com/api/stats/chaindailyvolumes" interface IVolumeall { volumeusd: string; date: number; } -const address: any = { - [CHAIN.ARBITRUM]: "0x010224949cCa211Fb5dDfEDD28Dc8Bf9D2990368", - [CHAIN.AVAX]: "0xEed3c159F3A96aB8d41c8B9cA49EE1e5071A7cdD" +const swapChains = [CHAIN.AVAX, CHAIN.ARBITRUM, CHAIN.BASE] + +const chainToEnv = (chain: CHAIN) => { + switch (chain) { + case CHAIN.AVAX: + return "production-multi-avax" + case CHAIN.ARBITRUM: + return "production-multi-arb" + case CHAIN.BASE: + return "production-multi-base" + default: + return "production-multi-subnet" + } } -const event = "event SwapExecuted(uint256 indexed nonceAndMeta,address taker,address destTrader,uint256 destChainId,address srcAsset,address destAsset,uint256 srcAmount,uint256 destAmount)" - -const fetch = async (options: FetchOptions) => { - const dailyVolume = options.createBalances(); - const logs = await options.getLogs({ - target: address[options.chain], - eventAbi: event - }) - logs.forEach(log => { - dailyVolume.add(log.destAsset, log.destAmount) - }) - return { dailyVolume } +const fetchFromChain = (chain: CHAIN) => { + const endpoint = `${historicalVolumeEndpoint}?env=${chainToEnv(chain)}` + + return async (options: FetchOptions): Promise => { + const dayTimestamp = new Date(options.startOfDay * 1000) + const historicalVolume: IVolumeall[] = await httpGet(endpoint) + + const totalVolume = historicalVolume + .filter(volItem => new Date(volItem.date) <= dayTimestamp) + .reduce((acc, { volumeusd }) => acc + Number(volumeusd), 0) + const dailyVolume = historicalVolume + .find(dayItem => new Date(dayItem.date) === dayTimestamp)?.volumeusd + + return { + totalVolume: `${totalVolume}`, + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + }; + } }; +const getStartTimestamp = (chain: CHAIN) => { + const endpoint = `${historicalVolumeEndpoint}?env=${chainToEnv(chain)}` + return async () => { + const historicalVolume: IVolumeall[] = await httpGet(endpoint) + return (new Date(historicalVolume[0].date).getTime()) / 1000 + } +} -const adapter: SimpleAdapter = { +const adapter: BreakdownAdapter = { version: 2, - adapter: { - [CHAIN.AVAX]: { - fetch: fetch, - start: 0, - }, - [CHAIN.ARBITRUM]: { - fetch: fetch, - start: 0, - }, - }, + breakdown: { + swap: swapChains.reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: fetchFromChain(chain), + start: getStartTimestamp(chain), + } + } + }, {} as BaseAdapter), + spot: { + [CHAIN.DEXALOT]: { + fetch: fetchFromChain(CHAIN.DEXALOT), + start: getStartTimestamp(CHAIN.DEXALOT), + } + } + } }; export default adapter; From 4a6830d8e55aa7f14d8023b799a6092e40cad5ca Mon Sep 17 00:00:00 2001 From: ethzoomer Date: Tue, 6 Aug 2024 22:19:03 -0500 Subject: [PATCH 1121/1590] perf: event getLogs pagination --- dexs/aerodrome/index.ts | 52 +++++++++++++++++++++++++++++++++-------- dexs/velodrome/v2.ts | 43 +++++++++++++++++++++++++++++----- 2 files changed, 79 insertions(+), 16 deletions(-) diff --git a/dexs/aerodrome/index.ts b/dexs/aerodrome/index.ts index 2c69be1647..82c9027115 100644 --- a/dexs/aerodrome/index.ts +++ b/dexs/aerodrome/index.ts @@ -57,11 +57,27 @@ const fetch = async (options: FetchOptions): Promise => { 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 { token0, token1, pool_fee } = allForSwaps[idx] @@ -91,11 +107,27 @@ const fetch = async (options: FetchOptions): Promise => { const targets = forSwapsOld.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 { token0, token1, pool_fee } = forSwapsOld[idx] diff --git a/dexs/velodrome/v2.ts b/dexs/velodrome/v2.ts index 32d0c3a575..e474df42aa 100644 --- a/dexs/velodrome/v2.ts +++ b/dexs/velodrome/v2.ts @@ -57,11 +57,27 @@ while (unfinished) { const targets = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) -const logs: ILog[][] = await getLogs({ - targets, +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 { token0, token1, pool_fee } = allForSwaps[idx] @@ -73,11 +89,26 @@ logs.forEach((logs: ILog[], idx: number) => { }) }) -const slipstreamLogs: ILog[][] = await getLogs({ - targets, +let slipstreamLogs: ILog[][] = []; +currentTargetOffset = 0; +unfinished = true; + +while (unfinished) { + let endOffset = currentTargetOffset + targetChunkSize; + if (endOffset >= targets.length) { + unfinished = false; + endOffset = targets.length; + } + + let currentSlipstreamLogs: ILog[][] = await getLogs({ + targets: targets.slice(currentTargetOffset, endOffset), eventAbi: event_swap_slipstream, flatten: false, -}) + }) + + slipstreamLogs.push(...currentSlipstreamLogs); + currentTargetOffset += targetChunkSize; +} slipstreamLogs.forEach((logs: ILog[], idx: number) => { const { token1, pool_fee } = allForSwaps[idx] From 96d05d7c290947ca8ef06daf8ad6a78a13719123 Mon Sep 17 00:00:00 2001 From: ideapacito Date: Wed, 7 Aug 2024 15:19:49 +0700 Subject: [PATCH 1122/1590] fix baseUrl & map chain id --- dexs/fwx/index.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/dexs/fwx/index.ts b/dexs/fwx/index.ts index dbd9a63329..ee6560aede 100644 --- a/dexs/fwx/index.ts +++ b/dexs/fwx/index.ts @@ -14,16 +14,19 @@ interface IRes { data: IDailyData[]; } -const baseUrl = "https://analytics.fwx.finance"; - interface IEndpoint { tradingVolume: string; openInterest: string; } + +const CHAIN_ID = { + [CHAIN.AVAX]: 43114, +}; + const endpoints: Record = { [CHAIN.AVAX]: { - tradingVolume: `${baseUrl}/trade/volume`, - openInterest: `${baseUrl}/trade/daily-open-interest`, + tradingVolume: `https://app.fwx.finance/api/v2/trade/volume`, + openInterest: `https://analytics.fwx.finance/trade/daily-open-interest`, }, }; @@ -39,7 +42,7 @@ const fetch = (chain: Chain) => { const tradingVolumeRes = await httpPost(endpoints[chain].tradingVolume, { from_date: formattedDate, to_date: formattedDate, - chain_id: 43114, + chain_id: CHAIN_ID[chain], }); const tradingVolume = tradingVolumeRes as IRes; const dailyVolumeData = tradingVolume?.data.find( From 7820fe2bff9a448ccdeb8167f03da074d1f19048 Mon Sep 17 00:00:00 2001 From: sean35809 Date: Wed, 7 Aug 2024 17:28:43 +0800 Subject: [PATCH 1123/1590] Add edgeX volume --- dexs/edgeX/index.ts | 61 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 dexs/edgeX/index.ts diff --git a/dexs/edgeX/index.ts b/dexs/edgeX/index.ts new file mode 100644 index 0000000000..40e51aedec --- /dev/null +++ b/dexs/edgeX/index.ts @@ -0,0 +1,61 @@ +import fetchURL from "../../utils/fetchURL" +import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const metaDataEndpoint = "https://pro.edgex.exchange/api/v1/public/meta/getMetaData" +const klineDailyEndpoint = (contractId: string, startTime: number, endTime: number) => `https://pro.edgex.exchange/api/v1/public/quote/getKline?contractId=${contractId}&klineType=DAY_1&filterBeginKlineTimeInclusive=${startTime}&filterEndKlineTimeExclusive=${endTime}&priceType=LAST_PRICE` + +interface KlineData { + contractId: string; + contractName: string; + klineType: string; + klineTime: string; + priceType: string; + trades: string; + size: string; + value: string; +} + +interface ResponseData { + dataList: KlineData[]; +} + +interface ApiResponse { + code: string; + data: ResponseData; + msg: string | null; + errorParam: string | null; +} + +function parseContractIds(response: any): string[] { + return response.data.contractList.map(contract => contract.contractId); +} + + +const fetch = async (timestamp: number): Promise => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) * 1000 + const toTimestamp = dayTimestamp + 60 * 60 * 24 * 1000; + const contractIds: string[] = parseContractIds(await fetchURL(metaDataEndpoint)); + const klines = await Promise.all(contractIds.map(async (contractId) => { + const response: ApiResponse = await fetchURL(klineDailyEndpoint(contractId, dayTimestamp, toTimestamp)); + return response.data.dataList; + } + )); + const volumes = klines + .flat() + .map(kline => parseFloat(kline.value)) + .reduce((acc, value) => acc + value, 0); + return { dailyVolume: volumes, timestamp: toTimestamp / 1000 - 1 }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch, + start: 1722902400, + }, + }, +}; + +export default adapter; From a98a51691de8e2757f27e6351f6a22e61aa76ae7 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 7 Aug 2024 12:35:32 +0000 Subject: [PATCH 1124/1590] fix metaplex --- fees/metaplex.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/metaplex.ts b/fees/metaplex.ts index 17f780f095..89c9443939 100644 --- a/fees/metaplex.ts +++ b/fees/metaplex.ts @@ -12,7 +12,7 @@ interface IFees { } const fetchFees = async (timestamp: number, _t: any, options: FetchOptions) => { const res: IFees[] = (await httpGet(url)).query_result.data.rows; - const dateStr = new Date(options.endTimestamp * 1000).toISOString().split('T')[0] + const dateStr = new Date(options.startOfDay * 1000).toISOString().split('T')[0] const dailyItem = res.find(item => item.block_date === dateStr) return { dailyFees: dailyItem?.revenue_in_usd || 0, From 79897db765d93a4a6dc5167257a813ea013e6e3e Mon Sep 17 00:00:00 2001 From: Jaimi Patel Date: Wed, 7 Aug 2024 14:26:59 +0100 Subject: [PATCH 1125/1590] revert dexalot from breakdown to simple adapter --- dexs/dexalot/index.ts | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/dexs/dexalot/index.ts b/dexs/dexalot/index.ts index 570ccb05dd..9457de19d0 100644 --- a/dexs/dexalot/index.ts +++ b/dexs/dexalot/index.ts @@ -1,4 +1,4 @@ -import { BaseAdapter, BreakdownAdapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { BaseAdapter, FetchOptions, FetchResultV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; @@ -9,7 +9,7 @@ interface IVolumeall { date: number; } -const swapChains = [CHAIN.AVAX, CHAIN.ARBITRUM, CHAIN.BASE] +const supportedChains = [CHAIN.DEXALOT, CHAIN.AVAX, CHAIN.ARBITRUM, CHAIN.BASE] const chainToEnv = (chain: CHAIN) => { switch (chain) { @@ -52,25 +52,17 @@ const getStartTimestamp = (chain: CHAIN) => { } } -const adapter: BreakdownAdapter = { +const adapter: SimpleAdapter = { version: 2, - breakdown: { - swap: swapChains.reduce((acc, chain) => { - return { - ...acc, - [chain]: { - fetch: fetchFromChain(chain), - start: getStartTimestamp(chain), - } - } - }, {} as BaseAdapter), - spot: { - [CHAIN.DEXALOT]: { - fetch: fetchFromChain(CHAIN.DEXALOT), - start: getStartTimestamp(CHAIN.DEXALOT), + adapter: supportedChains.reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: fetchFromChain(chain), + start: getStartTimestamp(chain), } } - } + }, {} as BaseAdapter), }; export default adapter; From 79b14516e0fe354e90a3d21561736754a2984d5a Mon Sep 17 00:00:00 2001 From: Alexander Gotovets Date: Wed, 7 Aug 2024 15:33:09 +0200 Subject: [PATCH 1126/1590] CSPT-454 Added Chainspot adapter --- aggregators/chainspot/index.ts | 102 +++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 aggregators/chainspot/index.ts diff --git a/aggregators/chainspot/index.ts b/aggregators/chainspot/index.ts new file mode 100644 index 0000000000..9420b4bdcd --- /dev/null +++ b/aggregators/chainspot/index.ts @@ -0,0 +1,102 @@ +import fetchURL from "../../utils/fetchURL"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; + +const chains = [ + CHAIN.ETHEREUM, + CHAIN.POLYGON, + CHAIN.BSC, + CHAIN.AVAX, + CHAIN.OPTIMISM, + CHAIN.FANTOM, + CHAIN.ARBITRUM, + CHAIN.AURORA, + CHAIN.CELO, + CHAIN.BOBA, + CHAIN.XDAI, + CHAIN.TELOS, + CHAIN.BASE, + CHAIN.LINEA, + CHAIN.MANTLE, + CHAIN.MOONBEAM, + CHAIN.CRONOS, + CHAIN.BLAST, + CHAIN.EVMOS, + CHAIN.FUSE, + CHAIN.HARMONY, + CHAIN.KAVA, + CHAIN.MOONRIVER, + CHAIN.OKEXCHAIN, + CHAIN.SCROLL, + CHAIN.TRON, + CHAIN.TON, + CHAIN.WAN, + CHAIN.ZKLINK, + CHAIN.ZKSYNC, +]; + +const chainToId: Record = { + [CHAIN.ETHEREUM]: 1, + [CHAIN.POLYGON]: 137, + [CHAIN.BSC]: 56, + [CHAIN.AVAX]: 43114, + [CHAIN.OPTIMISM]: 10, + [CHAIN.FANTOM]: 250, + [CHAIN.ARBITRUM]: 42161, + [CHAIN.AURORA]: 1313161554, + [CHAIN.CELO]: 42220, + [CHAIN.BOBA]: 288, + [CHAIN.XDAI]: 100, + [CHAIN.TELOS]: 40, + [CHAIN.BASE]: 8453, + [CHAIN.LINEA]: 59144, + [CHAIN.MANTLE]: 5000, + [CHAIN.MOONBEAM]: 1284, + [CHAIN.CRONOS]: 25, + [CHAIN.BLAST]: 81457, + [CHAIN.EVMOS]: 9001, + [CHAIN.FUSE]: 122, + [CHAIN.HARMONY]: 1666600000, + [CHAIN.KAVA]: 2222, + [CHAIN.MOONRIVER]: 1285, + [CHAIN.OKEXCHAIN]: 66, + [CHAIN.SCROLL]: 534352, + [CHAIN.TRON]: 728126428, + [CHAIN.TON]: -239, + [CHAIN.WAN]: 888, + [CHAIN.ZKLINK]: 810180, + [CHAIN.ZKSYNC]: 324, +}; + +const fetch = (chain: string) => async (timestamp: number) => { + const unixTimestamp = getUniqStartOfTodayTimestamp( + new Date(timestamp * 1000) + ); + + const volume = ( + await fetchURL( + `https://app.chainspot.io/api/2.0/statistic/daily-volume?chainId=${chainToId[chain]}×tamp=${unixTimestamp}` + ) + )?.volume; + + return { + dailyVolume: volume, + timestamp: unixTimestamp, + }; +}; + +const adapter: any = { + adapter: { + ...chains.reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: fetch(chain), + start: 1704067200, + }, + }; + }, {}), + }, +}; + +export default adapter; From 20bdbbaa3340bd03895729054010145f107c51a7 Mon Sep 17 00:00:00 2001 From: Maxence Raballand Date: Wed, 7 Aug 2024 16:33:14 +0200 Subject: [PATCH 1127/1590] feat: add mangrove on arbitrum --- dexs/mangrove/index.ts | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/dexs/mangrove/index.ts b/dexs/mangrove/index.ts index 387daf307b..4ebcde2913 100644 --- a/dexs/mangrove/index.ts +++ b/dexs/mangrove/index.ts @@ -1,6 +1,7 @@ import type { ChainApi } from "@defillama/sdk"; import type { Adapter, + BaseAdapter, FetchOptions, FetchResultV2, } from "../../adapters/types"; @@ -8,11 +9,17 @@ import { CHAIN } from "../../helpers/chains"; type ChainConfig = { core: string; + start: number; }; const mangrove: Record = { [CHAIN.BLAST]: { core: "0xb1a49C54192Ea59B233200eA38aB56650Dfb448C", + start: 1708992000, + }, + [CHAIN.ARBITRUM]: { + core: "0x109d9CDFA4aC534354873EF634EF63C235F93f61", + start: 1721664539, }, }; @@ -76,15 +83,18 @@ async function fetch({ const adapter: Adapter = { version: 2, adapter: { - [CHAIN.BLAST]: { - meta: { - methodology: { - dailyVolume: "Sum of all offers taken in the last 24hrs", + ...Object.entries(mangrove).reduce((acc, [key, config]) => { + acc[key] = { + meta: { + methodology: { + dailyVolume: "Sum of all offers taken in the last 24hrs", + }, }, - }, - fetch, - start: 1708992000, - }, + fetch, + start: config.start, + }; + return acc; + }, {} as BaseAdapter), }, }; From 3887d0da7710bc005d708216c7684044ac70ec9e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 7 Aug 2024 16:17:33 +0000 Subject: [PATCH 1128/1590] fix query --- fees/gmx-v2/index.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/fees/gmx-v2/index.ts b/fees/gmx-v2/index.ts index ba32f49562..1ffbeb04ed 100644 --- a/fees/gmx-v2/index.ts +++ b/fees/gmx-v2/index.ts @@ -1,5 +1,5 @@ import { Chain } from "@defillama/sdk/build/general"; -import { Adapter, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions, FetchResultFees } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { queryDune } from "../../helpers/dune"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; @@ -12,12 +12,12 @@ interface IFee { } const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { + return async (timestamp: number, _t: any, options: FetchOptions): Promise => { const fees: IFee[] = (await queryDune(chain === CHAIN.ARBITRUM ? "3464532" : "3464559")) // const queryId = chain === CHAIN.ARBITRUM ? "3186689" : "3186714"; // const fees: IFee[] = (await fetchURLWithRetry(`https://api.dune.com/api/v1/query/${queryId}/results`)).result.rows; // const fees: IFee[] = require(`./${chain}.json`); - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)); const dateString = new Date(dayTimestamp * 1000).toISOString().split("T")[0]; const daily = fees.find(fee => fee.time.split(' ')[0] === dateString); const dailyFees = daily?.v2_fees || 0 @@ -39,12 +39,10 @@ const adapter: Adapter = { [CHAIN.ARBITRUM]: { fetch: fetch(CHAIN.ARBITRUM), start: 1690848000, - runAtCurrTime: true, }, [CHAIN.AVAX]: { fetch: fetch(CHAIN.AVAX), start: 1692835200, - runAtCurrTime: true, }, }, isExpensiveAdapter: true, From 94690cb103cd5d1a9f56dfdc6f88f2b8ccf2c812 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 7 Aug 2024 17:31:53 +0000 Subject: [PATCH 1129/1590] fix gmx --- fees/gmx-v2/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/gmx-v2/index.ts b/fees/gmx-v2/index.ts index 1ffbeb04ed..930c1bc4cd 100644 --- a/fees/gmx-v2/index.ts +++ b/fees/gmx-v2/index.ts @@ -13,7 +13,7 @@ interface IFee { const fetch = (chain: Chain) => { return async (timestamp: number, _t: any, options: FetchOptions): Promise => { - const fees: IFee[] = (await queryDune(chain === CHAIN.ARBITRUM ? "3464532" : "3464559")) + const fees: IFee[] = (await queryDune(chain === CHAIN.ARBITRUM ? "3971843" : "3971936")) // const queryId = chain === CHAIN.ARBITRUM ? "3186689" : "3186714"; // const fees: IFee[] = (await fetchURLWithRetry(`https://api.dune.com/api/v1/query/${queryId}/results`)).result.rows; // const fees: IFee[] = require(`./${chain}.json`); From 0a1eb2fd9c146b65d68cdd15e65b0caa666c52b0 Mon Sep 17 00:00:00 2001 From: Ben Date: Wed, 7 Aug 2024 23:22:25 +0000 Subject: [PATCH 1130/1590] fixed url --- 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 3e9e02dbbc..072bd5c15b 100644 --- a/dexs/apestore/index.ts +++ b/dexs/apestore/index.ts @@ -1,7 +1,7 @@ import { httpPost } from "../../utils/fetchURL" import { FetchOptions, FetchResultV2, Adapter } from "../../adapters/types"; -const URL = 'https://ape.store/api/public/base/volume' +const URL = 'https://test.ape.store/api/public/base/volume' interface VolumeInfo { dailyVolume: string; From 7bed6414c14188ac718c99016c8927804cf23103 Mon Sep 17 00:00:00 2001 From: "naijia.zheng" Date: Thu, 8 Aug 2024 13:32:48 +0800 Subject: [PATCH 1131/1590] update ktx subgraph endpoints --- dexs/ktx/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/ktx/index.ts b/dexs/ktx/index.ts index 0f38b3aff2..56c2a9b140 100644 --- a/dexs/ktx/index.ts +++ b/dexs/ktx/index.ts @@ -4,9 +4,9 @@ import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - [CHAIN.BSC]: "https://subgraph.ktx.finance/subgraphs/name/ktx", - [CHAIN.MANTLE]: "https://mantlesubgraph.ktx.finance/subgraphs/name/ktx", - [CHAIN.ARBITRUM]: "https://arbisubgraph.ktx.systems/subgraphs/name/ktx", + [CHAIN.BSC]: "https://subgraph.satsuma-prod.com/dff088b6cd75/kesters-team/bsc_stats/api", + [CHAIN.MANTLE]: "https://subgraph.satsuma-prod.com/dff088b6cd75/kesters-team/mantle_stats/api", + [CHAIN.ARBITRUM]: "https://subgraph.satsuma-prod.com/dff088b6cd75/kesters-team/ktx_stats/api", }; const historicalDataSwap = gql` From dab5632aeaf712ee69b328cf7ff79bac84f2359e Mon Sep 17 00:00:00 2001 From: 0xMasayoshi <0xMasayoshi@protonmail.com> Date: Thu, 8 Aug 2024 19:51:55 +0700 Subject: [PATCH 1132/1590] feat: add RouteProcessor5 to sushiswap aggregator adapter --- dexs/sushiswap/swap.ts | 45 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/dexs/sushiswap/swap.ts b/dexs/sushiswap/swap.ts index 1360df814c..147a0953ee 100644 --- a/dexs/sushiswap/swap.ts +++ b/dexs/sushiswap/swap.ts @@ -76,6 +76,42 @@ const RP4_ADDRESS = { [CHAIN.ROOTSTOCK]: '0xb46e319390De313B8cc95EA5aa30C7bBFD79Da94', } +const RP5_ADDRESS = { + [CHAIN.ETHEREUM]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.ARBITRUM]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.OPTIMISM]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.BASE]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.POLYGON]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.AVAX]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.BSC]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.LINEA]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.ARBITRUM_NOVA]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.XDAI]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.FANTOM]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.BITTORRENT]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.CELO]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.FILECOIN]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.HAQQ]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.KAVA]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.METIS]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.THUNDERCORE]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.SCROLL]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.ZETA]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.MOONBEAM]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.MOONRIVER]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.POLYGON_ZKEVM]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.FUSE]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.HARMONY]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.TELOS]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.BOBA]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.BOBA_BNB]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.CORE]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.CRONOS]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.BLAST]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.SKALE_EUROPA]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', + [CHAIN.ROOTSTOCK]: '0xf2614A233c7C3e7f08b1F887Ba133a13f1eb2c55', +} + const WNATIVE_ADDRESS = { [CHAIN.ETHEREUM]: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', [CHAIN.ARBITRUM]: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', @@ -118,8 +154,13 @@ const useSushiAPIPrice = (chain) => [ ].includes(chain) const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise => { + const logs = await Promise.all([ + getLogs({ target: RP4_ADDRESS[chain], eventAbi: ROUTE_EVENT }), + getLogs({ target: RP5_ADDRESS[chain], eventAbi: ROUTE_EVENT }) + ]).then(([rp4Logs, rp5Logs]) => [...rp4Logs, ...rp5Logs]) + if (useSushiAPIPrice(chain)) { - const [tokensQuery, pricesQuery, logs] = await Promise.all([ + const [tokensQuery, pricesQuery] = await Promise.all([ axios.get(`https://tokens.sushi.com/v0/${CHAIN_ID[chain]}`) .then(response => response.data), axios.get(`https://api.sushi.com/price/v1/${CHAIN_ID[chain]}`) @@ -130,7 +171,6 @@ const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise { @@ -156,7 +196,6 @@ const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise { if (log.tokenIn === '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE') From 2819289cb06945740f8c63c19fa200f726b949c0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 8 Aug 2024 16:02:58 +0000 Subject: [PATCH 1133/1590] fix cetus --- .../cetus-aggregator/index.ts | 10 ++++------ dexs/cetus/index.ts | 15 +++++---------- 2 files changed, 9 insertions(+), 16 deletions(-) rename {dexs/cetus => aggregators}/cetus-aggregator/index.ts (70%) diff --git a/dexs/cetus/cetus-aggregator/index.ts b/aggregators/cetus-aggregator/index.ts similarity index 70% rename from dexs/cetus/cetus-aggregator/index.ts rename to aggregators/cetus-aggregator/index.ts index 2b99bdf473..7132e7c6b0 100644 --- a/dexs/cetus/cetus-aggregator/index.ts +++ b/aggregators/cetus-aggregator/index.ts @@ -1,6 +1,6 @@ -import { CHAIN } from "../../../helpers/chains"; -import { httpGet } from "../../../utils/fetchURL"; -import { FetchOptions } from "../../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; +import { FetchOptions } from "../../adapters/types"; const fetchVolume = async (options: FetchOptions) => { const url = `https://api-sui.cetus.zone/v2/sui/aggregator_vol?startTimestamp=${options.startOfDay}&endTimestamp=${options.startOfDay}`; @@ -20,6 +20,4 @@ const adapter_agge: any = { }, }; -export { - adapter_agge, -} +export default adapter_agge; diff --git a/dexs/cetus/index.ts b/dexs/cetus/index.ts index ce4ab0f8d1..f041c58e8b 100644 --- a/dexs/cetus/index.ts +++ b/dexs/cetus/index.ts @@ -1,9 +1,8 @@ -import fetchURL from "../../utils/fetchURL" +import fetchURL from "../../utils/fetchURL"; import { Chain } from "@defillama/sdk/build/general"; -import { BreakdownAdapter, FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import { adapter_agge } from './cetus-aggregator/index' type IUrl = { [s: string]: { @@ -48,10 +47,9 @@ const fetch = (chain: Chain) => { -const adapter: BreakdownAdapter = { +const adapter: SimpleAdapter = { version: 2, - breakdown: { - cetus: { + adapter: { [CHAIN.APTOS]: { fetch: fetch(CHAIN.APTOS), start: 1666224000, @@ -60,10 +58,7 @@ const adapter: BreakdownAdapter = { fetch: fetch(CHAIN.SUI), start: 1682985600, } - }, - "cetus-aggregator": adapter_agge.adapter } - }; -export default adapter; \ No newline at end of file +export default adapter; From b1d5f0c2c58854931ef6db02ccdae7388ea14fd9 Mon Sep 17 00:00:00 2001 From: Dongminh1997 Date: Fri, 9 Aug 2024 00:25:57 +0700 Subject: [PATCH 1134/1590] Update data endpoint --- aggregators/magpie/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts index a633797290..4c0f876f1d 100644 --- a/aggregators/magpie/index.ts +++ b/aggregators/magpie/index.ts @@ -6,7 +6,7 @@ import { CHAIN } from "../../helpers/chains"; const fetch = async (timestamp: number, _: ChainBlocks, {chain}: FetchOptions): Promise => { const unixTimestamp= getTimestampAtStartOfDayUTC(timestamp) console.log(chain, unixTimestamp) - const data = await postURL(`https://nj4rp6s90f.execute-api.us-west-1.amazonaws.com/v1/llama`, {timestamp: unixTimestamp, chain:chain}, 10); + const data = await postURL(`https://prewimvk04.execute-api.us-west-1.amazonaws.com/prod/llama`, {timestamp: unixTimestamp, chain:chain}, 10); const chainData = data.result if (chainData === undefined ) { return { From d91ae2648080af00ec7e75dc9bf061339f1cfad1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 9 Aug 2024 13:33:04 +0000 Subject: [PATCH 1135/1590] swith to version 1 --- dexs/woofi/index.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dexs/woofi/index.ts b/dexs/woofi/index.ts index bcc37ab5ec..fe5ba6784c 100644 --- a/dexs/woofi/index.ts +++ b/dexs/woofi/index.ts @@ -75,9 +75,10 @@ interface FetchResult { totalVolumeUSD: string; }> } -const fetch = async (options: FetchOptions) => { +const fetch = async (_t: any, _c: any,options: FetchOptions) => { try { - const dateId = Math.floor(options.endTimestamp / 86400); + console.log('fetching volume for', options.startOfDay); + const dateId = Math.floor(options.startOfDay / 86400); const response: FetchResult = await request(endpoints[options.chain], dailyQuery, { Id: dateId }); if (!response) return {}; return { @@ -102,7 +103,7 @@ const volume = Object.keys(endpoints).reduce( ); const adapter: SimpleAdapter = { - version: 2, + version: 1, adapter: volume, }; export default adapter; From 756225b6326fc1d6bff734aee061403c649b0020 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 9 Aug 2024 13:49:08 +0000 Subject: [PATCH 1136/1590] enable polygon --- protocols/uniswap/index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 1312f71932..10117aef27 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -63,13 +63,11 @@ const blacklisted = { ] } -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.POLYGON]: sdk.graph.modifyEndpoint('3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm'), // [CHAIN.CELO]: sdk.graph.modifyEndpoint('ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4'), [CHAIN.BSC]: sdk.graph.modifyEndpoint('F85MNzUGYqgSHSHRGgeVMNsdnW1KtZSVgFULumXRZTw2'), // [CHAIN.AVAX]: sdk.graph.modifyEndpoint('4gTHdWa9PbqUugt9vsMmpzUowmjb6eRiFRnUSrYLeSJF'), From 9a0618e1ef27645e219045ec81b31af5c1445a4a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 10 Aug 2024 15:15:05 +0000 Subject: [PATCH 1137/1590] fix magpie --- aggregators/magpie/index.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts index 4c0f876f1d..3b3a04638a 100644 --- a/aggregators/magpie/index.ts +++ b/aggregators/magpie/index.ts @@ -3,9 +3,8 @@ import { ChainBlocks, FetchOptions, FetchResult, SimpleAdapter } from "../../ada import { getTimestampAtStartOfDayUTC } from "../../utils/date" import { CHAIN } from "../../helpers/chains"; -const fetch = async (timestamp: number, _: ChainBlocks, {chain}: FetchOptions): Promise => { - const unixTimestamp= getTimestampAtStartOfDayUTC(timestamp) - console.log(chain, unixTimestamp) +const fetch = async (_t: number, _: ChainBlocks, {chain, startOfDay}: FetchOptions): Promise => { + const unixTimestamp= getTimestampAtStartOfDayUTC(startOfDay) const data = await postURL(`https://prewimvk04.execute-api.us-west-1.amazonaws.com/prod/llama`, {timestamp: unixTimestamp, chain:chain}, 10); const chainData = data.result if (chainData === undefined ) { @@ -94,7 +93,7 @@ const fetch = async (timestamp: number, _: ChainBlocks, {chain}: FetchOptions): start: 1662595200, }, }, - isExpensiveAdapter: true, + // isExpensiveAdapter: true, }; export default adapter; From 4b79100c75024e987c27d0bc9fae49b4a662df95 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 11 Aug 2024 15:03:45 +0000 Subject: [PATCH 1138/1590] limit offset --- dexs/aerodrome/index.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dexs/aerodrome/index.ts b/dexs/aerodrome/index.ts index 82c9027115..cf67048447 100644 --- a/dexs/aerodrome/index.ts +++ b/dexs/aerodrome/index.ts @@ -35,7 +35,7 @@ const fetch = async (options: FetchOptions): Promise => { if (options.startOfDay > 1714743000) { - while (unfinished) { + while (unfinished && currentOffset < 970) { const forSwaps: IForSwap[] = (await options.api.call({ target: sugar, params: [chunkSize, currentOffset], @@ -52,10 +52,13 @@ const fetch = async (options: FetchOptions): Promise => { unfinished = forSwaps.length !== 0; currentOffset += chunkSize; + if (currentOffset > 970) { // slipstream launched after ~970 v2 then we need to start from the beginning + currentOffset = 970; + } allForSwaps.push(...forSwaps); } - const targets = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) + const targets = [...new Set(allForSwaps.map((forSwap: IForSwap) => forSwap.lp))] let logs: ILog[][] = []; const targetChunkSize = 5; From 70b8c1a17c8ecfec864add2943fb0188a946c863 Mon Sep 17 00:00:00 2001 From: kinglee Date: Mon, 12 Aug 2024 14:55:05 +0800 Subject: [PATCH 1139/1590] add arbitrum --- dexs/satori/index.ts | 49 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/dexs/satori/index.ts b/dexs/satori/index.ts index 4899861d61..f78c3807d2 100644 --- a/dexs/satori/index.ts +++ b/dexs/satori/index.ts @@ -3,11 +3,12 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const ZKEVM_URL = 'https://zksync.satori.finance/api/data-center/pub/overview/integration' +const ZKEVM_URL = 'https://zkevm.satori.finance/api/data-center/pub/overview/integration' const ZkSYNC_URL = 'https://zksync.satori.finance/api/data-center/pub/overview/integration' const SCROLL_URL = 'https://scroll.satori.finance/api/data-center/pub/overview/integration' const LINEA_URL = 'https://linea.satori.finance/api/data-center/pub/overview/integration' - +const BASE_URL = 'https://base.satori.finance/api/data-center/pub/overview/integration' +const ARBITRUM_URL = 'https://arbitrum.satori.finance/api/data-center/pub/overview/integration' interface VolumeInfo { fee24h: string; tradVol24h: string; @@ -28,6 +29,12 @@ const scroll = { const linea = { "exchange":"linea" } +const base = { + "exchange":"base" +} +const arbitrum = { + "exchange":"arbitrum-one" +} const evm_fetch = async (_timestamp: number) => { const volumeData: VolumeInfo = (await postURL(ZKEVM_URL,zk_evm)).data; @@ -53,7 +60,7 @@ const era_fetch = async (_timestamp: number) => { }; const linea_fetch = async (_timestamp: number) => { - const volumeData: VolumeInfo = (await postURL(ZkSYNC_URL,linea)).data; + const volumeData: VolumeInfo = (await postURL(LINEA_URL,linea)).data; return { totalVolume: volumeData.totalTradVol, @@ -65,7 +72,31 @@ const linea_fetch = async (_timestamp: number) => { }; const scroll_fetch = async (_timestamp: number) => { - const volumeData: VolumeInfo = (await postURL(ZkSYNC_URL,scroll)).data; + const volumeData: VolumeInfo = (await postURL(SCROLL_URL,scroll)).data; + + return { + totalVolume: volumeData.totalTradVol, + dailyVolume: volumeData.tradVol24h, + dailyFees: volumeData.fee24h, + dailyRevenue : volumeData.fee24h, + timestamp: parseInt(volumeData.time), + }; +}; + +const base_fetch = async (_timestamp: number) => { + const volumeData: VolumeInfo = (await postURL(BASE_URL,base)).data; + + return { + totalVolume: volumeData.totalTradVol, + dailyVolume: volumeData.tradVol24h, + dailyFees: volumeData.fee24h, + dailyRevenue : volumeData.fee24h, + timestamp: parseInt(volumeData.time), + }; +}; + +const arbitrum_fetch = async (_timestamp: number) => { + const volumeData: VolumeInfo = (await postURL(ARBITRUM_URL,arbitrum)).data; return { totalVolume: volumeData.totalTradVol, @@ -96,6 +127,16 @@ const adapter: SimpleAdapter = { fetch:scroll_fetch, runAtCurrTime: true, start: 1684003134, + }, + [CHAIN.BASE]: { + fetch:base_fetch, + runAtCurrTime: true, + start: 1684003134, + }, + [CHAIN.ARBITRUM]: { + fetch:arbitrum_fetch, + runAtCurrTime: true, + start: 1684003134, } }, }; From c6eb1ba946791cc8c2a7fdcadde8c159a7485720 Mon Sep 17 00:00:00 2001 From: kinglee Date: Mon, 12 Aug 2024 15:07:58 +0800 Subject: [PATCH 1140/1590] add xlayer --- dexs/satori/index.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/dexs/satori/index.ts b/dexs/satori/index.ts index f78c3807d2..f5ec32d2b3 100644 --- a/dexs/satori/index.ts +++ b/dexs/satori/index.ts @@ -9,6 +9,7 @@ const SCROLL_URL = 'https://scroll.satori.finance/api/data-center/pub/overview/i const LINEA_URL = 'https://linea.satori.finance/api/data-center/pub/overview/integration' const BASE_URL = 'https://base.satori.finance/api/data-center/pub/overview/integration' const ARBITRUM_URL = 'https://arbitrum.satori.finance/api/data-center/pub/overview/integration' +const XLARY_URL = 'https://xlayer.satori.finance/api/data-center/pub/overview/integration' interface VolumeInfo { fee24h: string; tradVol24h: string; @@ -35,6 +36,9 @@ const base = { const arbitrum = { "exchange":"arbitrum-one" } +const xlayer = { + "exchange":"xlayer" +} const evm_fetch = async (_timestamp: number) => { const volumeData: VolumeInfo = (await postURL(ZKEVM_URL,zk_evm)).data; @@ -106,6 +110,18 @@ const arbitrum_fetch = async (_timestamp: number) => { timestamp: parseInt(volumeData.time), }; }; + +const xlayer_fetch = async (_timestamp: number) => { + const volumeData: VolumeInfo = (await postURL(XLARY_URL,xlayer)).data; + + return { + totalVolume: volumeData.totalTradVol, + dailyVolume: volumeData.tradVol24h, + dailyFees: volumeData.fee24h, + dailyRevenue : volumeData.fee24h, + timestamp: parseInt(volumeData.time), + }; +}; const adapter: SimpleAdapter = { adapter: { [CHAIN.POLYGON_ZKEVM]: { @@ -137,6 +153,11 @@ const adapter: SimpleAdapter = { fetch:arbitrum_fetch, runAtCurrTime: true, start: 1684003134, + }, + [CHAIN.XLAYER]: { + fetch:xlayer_fetch, + runAtCurrTime: true, + start: 1684003134, } }, }; From 5516c53e7ad24192709811f338e88b3cd177c447 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 12 Aug 2024 08:16:12 +0000 Subject: [PATCH 1141/1590] fix contract id --- dexs/edgeX/index.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/dexs/edgeX/index.ts b/dexs/edgeX/index.ts index 40e51aedec..12670dee6e 100644 --- a/dexs/edgeX/index.ts +++ b/dexs/edgeX/index.ts @@ -36,12 +36,15 @@ function parseContractIds(response: any): string[] { const fetch = async (timestamp: number): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) * 1000 const toTimestamp = dayTimestamp + 60 * 60 * 24 * 1000; - const contractIds: string[] = parseContractIds(await fetchURL(metaDataEndpoint)); - const klines = await Promise.all(contractIds.map(async (contractId) => { - const response: ApiResponse = await fetchURL(klineDailyEndpoint(contractId, dayTimestamp, toTimestamp)); - return response.data.dataList; - } - )); + const contractIds: string[] = [ + '10000001', '10000002', + '10000003', '10000004', + '10000005', '10000006', + '10000007', '10000008', + '10000009', '10000010' + ] + const klines = (await Promise.all(contractIds.map(async (contractId) => fetchURL(klineDailyEndpoint(contractId, dayTimestamp, toTimestamp))))) + .map((response: ApiResponse) => response.data.dataList); const volumes = klines .flat() .map(kline => parseFloat(kline.value)) From e94dd50bccbca932c58713556fcf952e1725e11a Mon Sep 17 00:00:00 2001 From: TechRiderWR Date: Mon, 12 Aug 2024 16:12:03 +0600 Subject: [PATCH 1142/1590] Update WingRiders adapter --- dexs/wingriders/index.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/dexs/wingriders/index.ts b/dexs/wingriders/index.ts index 13cce6283d..ca2b95d9e8 100644 --- a/dexs/wingriders/index.ts +++ b/dexs/wingriders/index.ts @@ -1,14 +1,28 @@ import { Adapter, ChainBlocks, FetchOptions } from "../../adapters/types" import { CHAIN } from "../../helpers/chains"; -import { httpPost } from "../../utils/fetchURL"; +import request, { gql } from "graphql-request"; -const volUrl = 'https://aggregator.mainnet.wingriders.com/volumeInAda'; +const url = 'https://api.mainnet.wingriders.com/graphql'; + +const query = gql` +query Volume($input: VolumeInput!) { + volume(input: $input) +} +` + +interface IResponse { + volume: number +} async function fetchVolume(timestamp: number , _: ChainBlocks, { createBalances }: FetchOptions) { const dailyVolume = createBalances() - const last24hVolInAda = await httpPost(volUrl, { "lastNHours": 24 }); - // const totalVolumeInAda = await httpPost(volUrl, {}); - dailyVolume.addGasToken(last24hVolInAda * 1e6); + const response: IResponse = await request(url, query, { + input: { + lastNHours: 24, + baseCurrency: "ADA" + } + }); + dailyVolume.addGasToken(response.volume * 1e6); return { dailyVolume, timestamp From 3b7cbc2b185a2ec210d4858f98173276c9dc189c Mon Sep 17 00:00:00 2001 From: Mr-Lucky Date: Mon, 12 Aug 2024 19:09:41 +0800 Subject: [PATCH 1143/1590] add new fees --- fees/secwarex.ts | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 fees/secwarex.ts diff --git a/fees/secwarex.ts b/fees/secwarex.ts new file mode 100644 index 0000000000..11db869f1c --- /dev/null +++ b/fees/secwarex.ts @@ -0,0 +1,68 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import BigNumber from "bignumber.js"; + +const USDT_MINT = "0x55d398326f99059ff775485246999027b3197955"; +const SECWAREX_FOUNDATION = "0x34ebddd30ccbd3f1e385b41bdadb30412323e34f"; +const SECWAREX_REVENUE_POOL = "0x648d7f4ad39186949e37e9223a152435ab97706c"; + +const BALANCE_ABI = 'erc20:balanceOf'; + +const fetch = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const totalFees = options.createBalances(); + const dailyProtocolRevenue = options.createBalances(); + const totalProtocolRevenue = options.createBalances(); + const [foundationBalanceStart, revenueBalanceStart] = await options.fromApi.multiCall({ + abi: BALANCE_ABI, + calls: [ + { + target: USDT_MINT, + params: [SECWAREX_FOUNDATION] + }, + { + target: USDT_MINT, + params: [SECWAREX_REVENUE_POOL] + }, + ] + }); + const [foundationBalanceEnd, revenueBalanceEnd] = await options.toApi.multiCall({ + abi: BALANCE_ABI, + calls: [ + { + target: USDT_MINT, + params: [SECWAREX_FOUNDATION] + }, + { + target: USDT_MINT, + params: [SECWAREX_REVENUE_POOL] + }, + ] + }); + const dailyFoundationReceived = BigNumber(foundationBalanceEnd).minus(BigNumber(foundationBalanceStart)); + const dailyRevenueReceived = BigNumber(revenueBalanceEnd).minus(BigNumber(revenueBalanceStart)); + const dailyTotal = dailyFoundationReceived.plus(dailyRevenueReceived).toFixed(0); + dailyFees.add(USDT_MINT, dailyTotal); + totalFees.add(USDT_MINT, BigNumber(foundationBalanceEnd).plus(BigNumber(revenueBalanceEnd)).toFixed(0)); + dailyProtocolRevenue.add(USDT_MINT, dailyFoundationReceived.toFixed(0)); + totalProtocolRevenue.add(USDT_MINT, foundationBalanceEnd); + return { dailyFees, totalFees, dailyProtocolRevenue, totalProtocolRevenue }; +}; + +const adapter: SimpleAdapter = { + version: 1, + adapter: { + [CHAIN.BSC]: { + fetch: fetch, + start: 36724659, + meta: { + methodology: { + ProtocolRevenue: "Treasury receives 30% of each purchase.", + Fees: "All fees comes from users for transaction security." + } + } + }, + }, +}; + +export default adapter; From 4ddd965d30d5585a5c61c3d04359b4b1afe966ab Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 12 Aug 2024 15:32:25 +0000 Subject: [PATCH 1144/1590] fix shuff --- dexs/aerodrome/index.ts | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/dexs/aerodrome/index.ts b/dexs/aerodrome/index.ts index cf67048447..dd4288e316 100644 --- a/dexs/aerodrome/index.ts +++ b/dexs/aerodrome/index.ts @@ -1,5 +1,5 @@ -import { FetchOptions, FetchResult, FetchResultV2, SimpleAdapter } from "../../adapters/types" -import { CHAIN } from "../../helpers/chains" +import { FetchOptions, FetchResultV2, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; const sugar = '0xe521fc2C55AF632cdcC3D69E7EFEd93d56c89015'; const sugarOld = '0x2073D8035bB2b0F2e85aAF5a8732C6f397F9ff9b'; @@ -28,7 +28,7 @@ const event_swap = 'event Swap(address indexed sender,address indexed to,uint256 const fetch = async (options: FetchOptions): Promise => { const dailyVolume = options.createBalances() const dailyFees = options.createBalances() - const chunkSize = 400; + const chunkSize = 500; let currentOffset = 0; const allForSwaps: IForSwap[] = []; let unfinished = true; @@ -55,44 +55,43 @@ const fetch = async (options: FetchOptions): Promise => { if (currentOffset > 970) { // slipstream launched after ~970 v2 then we need to start from the beginning currentOffset = 970; } - allForSwaps.push(...forSwaps); + allForSwaps.push(...forSwaps.sort(() => Math.random() - 0.5)); // shuffle the array to avoid getting stuck on a single pool } const targets = [...new Set(allForSwaps.map((forSwap: IForSwap) => forSwap.lp))] + console.log(targets[0]) let logs: ILog[][] = []; - const targetChunkSize = 5; + const targetChunkSize = 10; let currentTargetOffset = 0; unfinished = true; while (unfinished) { - let endOffset = currentTargetOffset + targetChunkSize; + const randomNumber = Math.floor(Math.random() * 5); + let endOffset = currentTargetOffset + targetChunkSize + randomNumber; if (endOffset >= targets.length) { unfinished = false; endOffset = targets.length; } - let currentLogs: ILog[][] = await options.getLogs({ + const currentLogs: ILog[][] = await options.getLogs({ targets: targets.slice(currentTargetOffset, endOffset), eventAbi: event_swap, flatten: false, }) - logs.push(...currentLogs); - currentTargetOffset += targetChunkSize; + currentTargetOffset += targetChunkSize + randomNumber; } logs.forEach((logs: ILog[], idx: number) => { - const { token0, token1, pool_fee } = allForSwaps[idx] + const { token0, token1 } = allForSwaps[idx] logs.forEach((log: any) => { - dailyVolume.add(token0, BigInt(Math.abs(Number(log.amount0In)))) - dailyVolume.add(token1, BigInt(Math.abs(Number(log.amount1In)))) - dailyFees.add(token0, BigInt( Math.round((((Math.abs(Number(log.amount0In))) * Number(pool_fee)) / 10000)))) // 1% fee represented as pool_fee=100 - dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1In))) * Number(pool_fee)) / 10000)))) + dailyVolume.add(token0, log.amount0Out) + dailyVolume.add(token1, log.amount1Out) }) }) - return { dailyVolume, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } + return { dailyVolume } } else { const forSwapsOld: IForSwap[] = (await options.api.call({ From 96241ba771555e315eb73ea76be61972de98268a Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Mon, 12 Aug 2024 17:39:03 +0200 Subject: [PATCH 1145/1590] feat:Adapter, Factor --- fees/factor/index.ts | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 fees/factor/index.ts diff --git a/fees/factor/index.ts b/fees/factor/index.ts new file mode 100644 index 0000000000..06a33692fc --- /dev/null +++ b/fees/factor/index.ts @@ -0,0 +1,46 @@ +// https://docs.factor.fi/governance/factordao/platform-fees#harvest-fees +// https://docs.factor.fi/factor-sdk/rest-apis/utility-apis/stats + +import axios from "axios"; +import { Adapter, FetchResultFees } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const url = "https://factor-stats-api.fly.dev/stats/dao-revenues/"; + +interface Date { + year: number; + month: number; + day: number; +} + +const getFormattedDate = (timestamp: number): Date => { + const date = new Date(timestamp * 1000); + const year = date.getFullYear(); + const month = date.getMonth() + 1; + const day = date.getDate(); + return { year, month, day }; +}; + +const fetch = async (timestamp: number): Promise => { + const { year, month, day } = getFormattedDate(timestamp); + const { data } = await axios.get(`${url}${year}/${month}`); + const dateKey = `${year}-${month}-${day}`; + const relevantData = data[dateKey]; + + return { + timestamp, + dailyFees: relevantData.todayIncome, + dailyRevenue: relevantData.todayIncome / 2, + }; +}; +const adapter: Adapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch, + start: 1714687200, + runAtCurrTime: false, + }, + }, +}; + +export default adapter; From 7d3ee4c3c31b23607e33074e51ade84616a1e27e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 12 Aug 2024 16:27:32 +0000 Subject: [PATCH 1146/1590] remove logs --- dexs/aerodrome/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/dexs/aerodrome/index.ts b/dexs/aerodrome/index.ts index dd4288e316..3c0866a016 100644 --- a/dexs/aerodrome/index.ts +++ b/dexs/aerodrome/index.ts @@ -59,7 +59,6 @@ const fetch = async (options: FetchOptions): Promise => { } const targets = [...new Set(allForSwaps.map((forSwap: IForSwap) => forSwap.lp))] - console.log(targets[0]) let logs: ILog[][] = []; const targetChunkSize = 10; From 4569f8fb1a8882eec6454e47949b4e36addfd683 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 12 Aug 2024 17:08:17 +0000 Subject: [PATCH 1147/1590] add filter out pool is less than 1000 usd tvl --- dexs/aerodrome/index.ts | 49 ++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/dexs/aerodrome/index.ts b/dexs/aerodrome/index.ts index 3c0866a016..7969dc22d4 100644 --- a/dexs/aerodrome/index.ts +++ b/dexs/aerodrome/index.ts @@ -1,5 +1,7 @@ -import { FetchOptions, FetchResultV2, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, FetchResultV2, IJSON, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import { addOneToken } from "../../helpers/prices"; +import { filterPools } from "../../helpers/uniswap"; const sugar = '0xe521fc2C55AF632cdcC3D69E7EFEd93d56c89015'; const sugarOld = '0x2073D8035bB2b0F2e85aAF5a8732C6f397F9ff9b'; @@ -58,38 +60,21 @@ const fetch = async (options: FetchOptions): Promise => { allForSwaps.push(...forSwaps.sort(() => Math.random() - 0.5)); // shuffle the array to avoid getting stuck on a single pool } - const targets = [...new Set(allForSwaps.map((forSwap: IForSwap) => forSwap.lp))] - - let logs: ILog[][] = []; - const targetChunkSize = 10; - let currentTargetOffset = 0; - unfinished = true; - - while (unfinished) { - const randomNumber = Math.floor(Math.random() * 5); - let endOffset = currentTargetOffset + targetChunkSize + randomNumber; - if (endOffset >= targets.length) { - unfinished = false; - endOffset = targets.length; - } - - const currentLogs: ILog[][] = await options.getLogs({ - targets: targets.slice(currentTargetOffset, endOffset), - eventAbi: event_swap, - flatten: false, - }) - logs.push(...currentLogs); - currentTargetOffset += targetChunkSize + randomNumber; - } - - logs.forEach((logs: ILog[], idx: number) => { - const { token0, token1 } = allForSwaps[idx] - logs.forEach((log: any) => { - dailyVolume.add(token0, log.amount0Out) - dailyVolume.add(token1, log.amount1Out) - }) + const pairObject: IJSON = {} + const pairs = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) + pairs.forEach((pair: string, i: number) => { + pairObject[pair] = [allForSwaps[i].token0, allForSwaps[i].token1] }) - + // filter out the pairs with less than 1000 USD pooled value + const filteredPairs = await filterPools({ api: options.api, pairs: pairObject, createBalances: options.createBalances }) + const dailyVolume = options.createBalances() + await Promise.all(Object.keys(filteredPairs).map(async (pair) => { + const [token0, token1] = pairObject[pair] + const logs = await options.getLogs({ target: pair, eventAbi: event_swap }) + logs.forEach(log => { + addOneToken({ chain: options.chain, balances: dailyVolume, token0, token1, amount0: log.amount0Out, amount1: log.amount1Out }) + }) + })) return { dailyVolume } } else { From 93b6af2d3ffd2b4b24a0785c96539a684ecd14c0 Mon Sep 17 00:00:00 2001 From: "naijia.zheng" Date: Tue, 13 Aug 2024 13:14:41 +0800 Subject: [PATCH 1148/1590] fix ktx subgraph url --- fees/ktx.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/ktx.ts b/fees/ktx.ts index 69b8c6442f..8e3b60ece3 100644 --- a/fees/ktx.ts +++ b/fees/ktx.ts @@ -6,9 +6,9 @@ import { Chain } from "@defillama/sdk/build/general"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints = { - [BSC]: "https://subgraph.ktx.finance/subgraphs/name/ktx", - [MANTLE]: "https://mantlesubgraph.ktx.finance/subgraphs/name/ktx", - [ARBITRUM]: "https://arbisubgraph.ktx.systems/subgraphs/name/ktx", + [BSC]: "https://subgraph.satsuma-prod.com/dff088b6cd75/kesters-team/bsc_stats/api", + [MANTLE]: "https://subgraph.satsuma-prod.com/dff088b6cd75/kesters-team/mantle_stats/api", + [ARBITRUM]: "https://subgraph.satsuma-prod.com/dff088b6cd75/kesters-team/ktx_stats/api", }; const methodology = { From eacebd55eec69e5b0ed163da6c80208cf6f85f05 Mon Sep 17 00:00:00 2001 From: 0xbeekeeper Date: Tue, 13 Aug 2024 15:00:41 +0800 Subject: [PATCH 1149/1590] chore: rename the address const --- fees/secwarex.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/fees/secwarex.ts b/fees/secwarex.ts index 11db869f1c..24e10e0a1a 100644 --- a/fees/secwarex.ts +++ b/fees/secwarex.ts @@ -3,8 +3,8 @@ import { CHAIN } from "../helpers/chains"; import BigNumber from "bignumber.js"; const USDT_MINT = "0x55d398326f99059ff775485246999027b3197955"; -const SECWAREX_FOUNDATION = "0x34ebddd30ccbd3f1e385b41bdadb30412323e34f"; -const SECWAREX_REVENUE_POOL = "0x648d7f4ad39186949e37e9223a152435ab97706c"; +const GOPLUS_FOUNDATION = "0x34ebddd30ccbd3f1e385b41bdadb30412323e34f"; +const GOPLUS_REVENUE_POOL = "0x648d7f4ad39186949e37e9223a152435ab97706c"; const BALANCE_ABI = 'erc20:balanceOf'; @@ -18,11 +18,11 @@ const fetch = async (options: FetchOptions) => { calls: [ { target: USDT_MINT, - params: [SECWAREX_FOUNDATION] + params: [GOPLUS_FOUNDATION] }, { target: USDT_MINT, - params: [SECWAREX_REVENUE_POOL] + params: [GOPLUS_REVENUE_POOL] }, ] }); @@ -31,11 +31,11 @@ const fetch = async (options: FetchOptions) => { calls: [ { target: USDT_MINT, - params: [SECWAREX_FOUNDATION] + params: [GOPLUS_FOUNDATION] }, { target: USDT_MINT, - params: [SECWAREX_REVENUE_POOL] + params: [GOPLUS_REVENUE_POOL] }, ] }); @@ -57,8 +57,8 @@ const adapter: SimpleAdapter = { start: 36724659, meta: { methodology: { - ProtocolRevenue: "Treasury receives 30% of each purchase.", - Fees: "All fees comes from users for transaction security." + ProtocolRevenue: "Treasury receives 30% of each security service purchase.", + Fees: "All fees comes from users for security service provided by GoPlus Network." } } }, From 64eb236924058af5253f57fefc07c1ffb193052a Mon Sep 17 00:00:00 2001 From: Mr-Lucky Date: Tue, 13 Aug 2024 18:23:27 +0800 Subject: [PATCH 1150/1590] fix --- fees/{secwarex.ts => goplus.ts} | 34 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 21 deletions(-) rename fees/{secwarex.ts => goplus.ts} (81%) diff --git a/fees/secwarex.ts b/fees/goplus.ts similarity index 81% rename from fees/secwarex.ts rename to fees/goplus.ts index 24e10e0a1a..2991f151cf 100644 --- a/fees/secwarex.ts +++ b/fees/goplus.ts @@ -7,6 +7,16 @@ const GOPLUS_FOUNDATION = "0x34ebddd30ccbd3f1e385b41bdadb30412323e34f"; const GOPLUS_REVENUE_POOL = "0x648d7f4ad39186949e37e9223a152435ab97706c"; const BALANCE_ABI = 'erc20:balanceOf'; +const CALLS = [ + { + target: USDT_MINT, + params: [GOPLUS_FOUNDATION] + }, + { + target: USDT_MINT, + params: [GOPLUS_REVENUE_POOL] + }, + ]; const fetch = async (options: FetchOptions) => { const dailyFees = options.createBalances(); @@ -15,29 +25,11 @@ const fetch = async (options: FetchOptions) => { const totalProtocolRevenue = options.createBalances(); const [foundationBalanceStart, revenueBalanceStart] = await options.fromApi.multiCall({ abi: BALANCE_ABI, - calls: [ - { - target: USDT_MINT, - params: [GOPLUS_FOUNDATION] - }, - { - target: USDT_MINT, - params: [GOPLUS_REVENUE_POOL] - }, - ] + calls: CALLS }); const [foundationBalanceEnd, revenueBalanceEnd] = await options.toApi.multiCall({ abi: BALANCE_ABI, - calls: [ - { - target: USDT_MINT, - params: [GOPLUS_FOUNDATION] - }, - { - target: USDT_MINT, - params: [GOPLUS_REVENUE_POOL] - }, - ] + calls: CALLS }); const dailyFoundationReceived = BigNumber(foundationBalanceEnd).minus(BigNumber(foundationBalanceStart)); const dailyRevenueReceived = BigNumber(revenueBalanceEnd).minus(BigNumber(revenueBalanceStart)); @@ -50,7 +42,7 @@ const fetch = async (options: FetchOptions) => { }; const adapter: SimpleAdapter = { - version: 1, + version: 2, adapter: { [CHAIN.BSC]: { fetch: fetch, From c468cda4f6461b811218e6af7426cfbec9f9d076 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 13 Aug 2024 15:25:02 +0000 Subject: [PATCH 1151/1590] fix rev --- fees/goplus.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/goplus.ts b/fees/goplus.ts index 2991f151cf..5074bacb7a 100644 --- a/fees/goplus.ts +++ b/fees/goplus.ts @@ -38,7 +38,7 @@ const fetch = async (options: FetchOptions) => { totalFees.add(USDT_MINT, BigNumber(foundationBalanceEnd).plus(BigNumber(revenueBalanceEnd)).toFixed(0)); dailyProtocolRevenue.add(USDT_MINT, dailyFoundationReceived.toFixed(0)); totalProtocolRevenue.add(USDT_MINT, foundationBalanceEnd); - return { dailyFees, totalFees, dailyProtocolRevenue, totalProtocolRevenue }; + return { dailyFees, totalFees, dailyProtocolRevenue, dailyRevenue: dailyProtocolRevenue, totalProtocolRevenue }; }; const adapter: SimpleAdapter = { @@ -46,7 +46,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.BSC]: { fetch: fetch, - start: 36724659, + start: 1717200000, meta: { methodology: { ProtocolRevenue: "Treasury receives 30% of each security service purchase.", From 9676ad9e1ee000bb2e43bde710a3f0bd7d4f3538 Mon Sep 17 00:00:00 2001 From: dementedgames Date: Tue, 13 Aug 2024 12:30:25 -0300 Subject: [PATCH 1152/1590] Add demented-games to fees dashboard --- fees/demented-games/abi.ts | 16 +++++++++++++ fees/demented-games/index.ts | 44 ++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 fees/demented-games/abi.ts create mode 100644 fees/demented-games/index.ts diff --git a/fees/demented-games/abi.ts b/fees/demented-games/abi.ts new file mode 100644 index 0000000000..cdd290362c --- /dev/null +++ b/fees/demented-games/abi.ts @@ -0,0 +1,16 @@ +export const commonAbi = [ + { + constant: true, + inputs: [], + name: 'accumulatedFees', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + ]; \ No newline at end of file diff --git a/fees/demented-games/index.ts b/fees/demented-games/index.ts new file mode 100644 index 0000000000..a3458ffb03 --- /dev/null +++ b/fees/demented-games/index.ts @@ -0,0 +1,44 @@ +import { ETHER_ADDRESS } from '@defillama/sdk/build/general'; +import { Adapter, FetchOptions } from '../../adapters/types'; +import { CHAIN } from '../../helpers/chains'; +import { commonAbi } from './abi'; + +const ROULETTE_ADDRESS = '0x94ba26ee118ef6c407c75dbb23385b1ad71a4547'; +const PUMP_OR_REKT_ADDRESS = '0xcbc003cb76c5d218cba2dfb3a2b2f101950ed7e7'; + +async function fetch({ createBalances, api }: FetchOptions) { + const totalFees = createBalances(); + + const pumpOrRektFees = await api.call({ + abi: commonAbi[0], + target: ROULETTE_ADDRESS, + }); + + const roulletteFees = await api.call({ + abi: commonAbi[0], + target: PUMP_OR_REKT_ADDRESS, + }); + + totalFees.add(ETHER_ADDRESS, pumpOrRektFees); + totalFees.add(ETHER_ADDRESS, roulletteFees); + + return { totalFees }; +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.FUSE]: { + fetch, + runAtCurrTime: true, + start: 1720396800, + meta: { + methodology: { + Fees: 'Sum of all fees from each game on the Demented Games platform.', + }, + }, + }, + }, +}; + +export default adapter; From 4a280039e79c0319a4e1c8a6f36ceeb753371527 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 13 Aug 2024 17:13:08 +0100 Subject: [PATCH 1153/1590] photon fees --- fees/photon.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 fees/photon.ts diff --git a/fees/photon.ts b/fees/photon.ts new file mode 100644 index 0000000000..14f8d53380 --- /dev/null +++ b/fees/photon.ts @@ -0,0 +1,29 @@ +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("3521814", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: 'AVUCZyuT35YSuj4RH7fwiyPu82Djn2Hfg7y2ND2XcnZH' + })); + 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 dcb428f04b75e34aa8919a446bd835bbfa015dbd Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 13 Aug 2024 16:20:23 +0000 Subject: [PATCH 1154/1590] fix jupiter-perpetual --- dexs/jupiter-perpetual/index.ts | 39 ++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/dexs/jupiter-perpetual/index.ts b/dexs/jupiter-perpetual/index.ts index 7c49506af9..e5b70d1ddc 100644 --- a/dexs/jupiter-perpetual/index.ts +++ b/dexs/jupiter-perpetual/index.ts @@ -1,19 +1,40 @@ +import { version } from "os"; import { FetchResult } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import { queryDune } from "../../helpers/dune"; +import { httpGet } from "../../utils/fetchURL"; + +const list_of_mints: string[] = [ + "So11111111111111111111111111111111111111112", + "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh", + "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs", +] const fetch = async (timestamp: number): Promise => { - const unixTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - // 3385640 old query id - const data = await queryDune("3391484", { endTime: unixTimestamp + 86400 }); + const header_user = { + "accept": "*/*", + "accept-language": "en-US,en;q=0.9", + "content-type": "application/json", + "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"90\", \"Google Chrome\";v=\"90\"", + "sec-ch-ua-mobile": "?0", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "sec-gpc": "1", + "referrer": "https://www.jup.ag/", + "referrerPolicy": "strict-origin-when-cross-origin", + "mode": "cors", + } + const url = (token: string) => `https://perp-api.jup.ag/trpc/tradeVolume?batch=1&input={"0":{"json":{"mint":"${token}"}}}` + const fetches = (await Promise.all(list_of_mints.map(token => httpGet(url(token), { headers: header_user })))).flat(); + const dailyVolume = fetches.reduce((acc, { result }) => acc + result.data.json.volume, 0); return { - dailyVolume: data[0].volume, - timestamp: unixTimestamp, + dailyVolume: dailyVolume, + timestamp: timestamp, }; }; const adapter = { + version: 2, breakdown: { derivatives: { [CHAIN.SOLANA]: { @@ -22,8 +43,6 @@ const adapter = { start: 1705968000, }, }, - }, - isExpensiveAdapter: true, + } }; - export default adapter; From 6ad478fa6f2a64ac55e896d4e6c7eb933220e195 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 13 Aug 2024 16:23:21 +0000 Subject: [PATCH 1155/1590] remove not use --- dexs/jupiter-perpetual/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/dexs/jupiter-perpetual/index.ts b/dexs/jupiter-perpetual/index.ts index e5b70d1ddc..d3a7a20a96 100644 --- a/dexs/jupiter-perpetual/index.ts +++ b/dexs/jupiter-perpetual/index.ts @@ -1,4 +1,3 @@ -import { version } from "os"; import { FetchResult } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; From 035589fa7434a983b9a61ff8cc2ca048e18c0ba0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 13 Aug 2024 16:24:03 +0000 Subject: [PATCH 1156/1590] add header --- dexs/jupiter-perpetual/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/jupiter-perpetual/index.ts b/dexs/jupiter-perpetual/index.ts index d3a7a20a96..ee3cf5cd74 100644 --- a/dexs/jupiter-perpetual/index.ts +++ b/dexs/jupiter-perpetual/index.ts @@ -22,6 +22,7 @@ const fetch = async (timestamp: number): Promise => { "referrer": "https://www.jup.ag/", "referrerPolicy": "strict-origin-when-cross-origin", "mode": "cors", + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36", } const url = (token: string) => `https://perp-api.jup.ag/trpc/tradeVolume?batch=1&input={"0":{"json":{"mint":"${token}"}}}` const fetches = (await Promise.all(list_of_mints.map(token => httpGet(url(token), { headers: header_user })))).flat(); From 7cfcd7e6bf67564e178af46007a55020980f7a28 Mon Sep 17 00:00:00 2001 From: khaled grira Date: Tue, 13 Aug 2024 19:30:43 +0200 Subject: [PATCH 1157/1590] Allez Labs: Adding Fee data for Kamino lending, this includes Interest, Liquidation and origination revenue as well as interest generated data --- fees/kamino-lending/index.ts | 57 ++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 fees/kamino-lending/index.ts diff --git a/fees/kamino-lending/index.ts b/fees/kamino-lending/index.ts new file mode 100644 index 0000000000..1e93b36f95 --- /dev/null +++ b/fees/kamino-lending/index.ts @@ -0,0 +1,57 @@ +import { Adapter, FetchV2 } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; +import { getTimestampAtStartOfPreviousDayUTC } from "../../utils/date"; + +// Define the URL of the endpoint +const AllezLabsKaminoFeeEndpoint = 'https://allez-xyz--kamino-fees-api-get-fees-lifetime-kamino.modal.run'; +const KaminoStartTimestamp = 1697068700; + +// Function to make the GET request +const fetch: FetchV2 = async ({ endTimestamp }) => { + const dayTimestamp = getTimestampAtStartOfPreviousDayUTC(endTimestamp); + const historicalFeesRes = (await fetchURL(AllezLabsKaminoFeeEndpoint)); + + const totalFee = historicalFeesRes['data'] + .filter(row => row.timestamp <= dayTimestamp) + .reduce((acc, {KlendFeesUsd}) => acc + KlendFeesUsd, 0); + + const totalRevenue = historicalFeesRes['data'] + .filter(row => row.timestamp <= dayTimestamp) + .reduce((acc, {KlendRevenueUsd}) => acc + KlendRevenueUsd, 0); + + + const dailyFee = historicalFeesRes['data'] + .find(row => Math.abs(row.timestamp - dayTimestamp) < 3600*24 - 1)?.KlendFeesUsd; + + const dailyRevenue = historicalFeesRes['data'] + .find(row => Math.abs(row.timestamp - dayTimestamp) < 3600*24 - 1)?.KlendRevenueUsd; + + return { + timestamp: dayTimestamp, + totalFees: `${totalFee}`, + dailyFees: `${dailyFee}`, + totalRevenue: `${totalRevenue}`, + dailyRevenue: `${dailyRevenue}` + }; +}; +const methodology = { + Fees: "Fees are aggregated by Allez Labs using the Kamino API" +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.SOLANA]: { + fetch, + runAtCurrTime: true, + start: 1697068700, + meta: { + methodology + } + } + } +} +export default adapter; + + From eab682ab03cff924b7ffe2c3d7e5b842e68aadce Mon Sep 17 00:00:00 2001 From: bergben Date: Tue, 13 Aug 2024 21:45:38 +0200 Subject: [PATCH 1158/1590] fluid: add base --- fees/fluid/index.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index 1c681d31b9..e1d867369d 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -56,6 +56,9 @@ const revenueResolver = async (api: sdk.ChainApi) => { case CHAIN.ARBITRUM: address = "0xFe4affaD55c7AeC012346195654634F7C786fA2c"; break; + case CHAIN.BASE: + address = "0xFe4affaD55c7AeC012346195654634F7C786fA2c"; + break; } return { @@ -110,6 +113,9 @@ const liquidityResolver = async (api: sdk.ChainApi) => { case CHAIN.ARBITRUM: address = "0x46859d33E662d4bF18eEED88f74C36256E606e44"; break; + case CHAIN.BASE: + address = "0x35A915336e2b3349FA94c133491b915eD3D3b0cd"; + break; } return { @@ -176,6 +182,9 @@ const vaultResolver = async (api: sdk.ChainApi) => { case CHAIN.ARBITRUM: address = "0x77648D39be25a1422467060e11E5b979463bEA3d"; break; + case CHAIN.BASE: + address = "0x94695A9d0429aD5eFec0106a467aDEaDf71762F9"; + break; } return { @@ -222,6 +231,14 @@ const config = { vaultResolverExistAfterTimestamp: 1720018637, vaultResolverExistAfterBlock: 228361632, }, + base: { + dataStartTimestamp: 1723484700, // ~ before any activity started (block 18347681) + + revenueResolverExistAfterBlock: 18347681, + // vault resolver related revenue only exists after this timestamp. revenue / fees before are negligible + vaultResolverExistAfterTimestamp: 1723484700, + vaultResolverExistAfterBlock: 18347681, + }, }; const methodologyFluid = { @@ -262,6 +279,13 @@ const adapter: Adapter = { methodology: methodologyFluid, }, }, + [CHAIN.BASE]: { + fetch, + start: config.base.dataStartTimestamp, + meta: { + methodology: methodologyFluid, + }, + }, }, }; From 70282ab59e1dae6234e9141094ff84d1ade6fd99 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 14 Aug 2024 01:34:10 +0100 Subject: [PATCH 1159/1590] add dexscreener fees --- fees/dexscreener.ts | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 fees/dexscreener.ts diff --git a/fees/dexscreener.ts b/fees/dexscreener.ts new file mode 100644 index 0000000000..d3e307683a --- /dev/null +++ b/fees/dexscreener.ts @@ -0,0 +1,52 @@ +import { Adapter, FetchOptions } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import coreAssets from "../helpers/coreAssets.json"; +import { queryDune } from "../helpers/dune"; +import { addTokensReceived } from '../helpers/token'; + +const USDC = { + ethereum: coreAssets.ethereum.USDC, + polygon: coreAssets.polygon.USDC_CIRCLE, + base: coreAssets.base.USDC, +} as any + +const eth = async (options: FetchOptions) => { + const dailyFees = await addTokensReceived({ options, tokens: [USDC[options.chain]], target: '0xbf07aFF5114BAd83720A8b9Fc7585aFd2ef9E4C2' }) + return { + dailyFees, + dailyRevenue: dailyFees, + } +} + +const sol = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const value = (await queryDune("3986808", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: '23vEM5NAmK68uBHFM52nfNtZn7CgpHDSmAGWebsjg5ft', + token_mint_address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' + })); + dailyFees.add('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', value[0].received*1e6); + return { + dailyFees, + dailyRevenue: dailyFees, + } +} + +const adapter: Adapter = { + version: 2, + adapter: [CHAIN.ETHEREUM, CHAIN.BASE, CHAIN.POLYGON].reduce((all, chain) => ({ + ...all, + [chain]: { + fetch: eth, + start: 0, + } + }), { + [CHAIN.SOLANA]: { + fetch: sol, + start: 0 + } + }) +} + +export default adapter; \ No newline at end of file From b54d4cd39a2ce00ff928ca033a656656cb6b79a5 Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Wed, 14 Aug 2024 08:59:29 +0400 Subject: [PATCH 1160/1590] Add Ston.fi fees and revenue calculations --- fees/ston/index.ts | 87 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 fees/ston/index.ts diff --git a/fees/ston/index.ts b/fees/ston/index.ts new file mode 100644 index 0000000000..715505a13f --- /dev/null +++ b/fees/ston/index.ts @@ -0,0 +1,87 @@ +import { CHAIN } from '../../helpers/chains' +import postURL from "../../utils/fetchURL" +import fetchURL from "../../utils/fetchURL" +import { FetchOptions } from "../../adapters/types"; + + +const endpoint = "https://api.ston.fi/v1/stats/operations?" + + +const fetchFees = async (options: FetchOptions) => { + console.log("Requesting pools list") + const pool_list = (await fetchURL('https://api.ston.fi/v1/pools')).pool_list; + // store pools info for each asset to calculate weigthed price later + const asset2pools = {}; + const add_pool = (address: string, tvl: number, reserve: number) => { + if (!asset2pools[address]) { + asset2pools[address] = [] + } + asset2pools[address].push({tvl, reserve}) + } + for (const pool of pool_list) { + // ignore pools with low liquidity + if (pool['lp_total_supply_usd'] < 1000) { + continue + } + add_pool(pool['token0_address'], Number(pool['lp_total_supply_usd']) / 2, Number(pool['reserve0'])) + add_pool(pool['token1_address'], Number(pool['lp_total_supply_usd']) / 2, Number(pool['reserve1'])) + } + // price is calculated as total tvl / total reserve across all pools + const asset_prices = {} + for (const asset in asset2pools) { + const pools = asset2pools[asset] + const price = pools.map((pool) => pool.tvl).reduce((a, b) => a + b, 0) / pools.map((pool) => pool.reserve).reduce((a, b) => a + b, 0) + asset_prices[asset] = price + } + // explicitly set price for pTON based on TON price + asset_prices['EQCM3B12QK1e4yZSf8GtBRT0aLMNyEsBc_DhVfRRtOEffLez'] = asset_prices['EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c'] + + const startTime = new Date(options.startTimestamp * 1000).toISOString().split(".")[0] + const endTime = new Date(options.endTimestamp * 1000).toISOString().split(".")[0] + console.log(`Requesting last day operations: ${startTime}, ${endTime}`) + const res = await postURL(`${endpoint}since=${startTime}&until=${endTime}`) + + let total_lp_fees = 0 + let total_protocol_fees = 0 + + // go through all operations and calculate fees based on the current prices + for (const item of res['operations']) { + const operation = item.operation + if (operation.success && operation.operation_type == 'swap' && operation.exit_code == 'swap_ok' ) { + if (operation.fee_asset_address in asset_prices) { + const price = asset_prices[operation.fee_asset_address] + total_lp_fees += operation.lp_fee_amount * price + total_protocol_fees += operation.protocol_fee_amount * price + } else { + console.log("Fee asset not found", operation.fee_asset_address) + continue + } + } + } + + return { + dailyUserFees: total_lp_fees + total_protocol_fees, + dailyFees: total_lp_fees + total_protocol_fees, + dailySupplySideRevenue: total_lp_fees, + dailyRevenue: total_protocol_fees + } + + }; + +export default { + version: 2, + runAtCurrTime: true, + adapter: { + [CHAIN.TON]: { + start: 1700000000, + meta: { + methodology: { + UserFees: "User pays fee on each swap.", + Revenue: "Protocol receives 1/3 of fees paid by users.", + SupplySideRevenue: "2/3 of user fees are distributed among LPs.", + }, + }, + fetch: fetchFees, + }, + }, +} From ae35c067820a2c9afe0dbcc8d11c7eb28e1a50ea Mon Sep 17 00:00:00 2001 From: MonkeyD1uffy <34332336+MonkeyD1uffy@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:08:15 +0700 Subject: [PATCH 1161/1590] Update lifinity.ts Update API URL --- fees/lifinity.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/lifinity.ts b/fees/lifinity.ts index 4125c7ffc1..e9dcd3371b 100644 --- a/fees/lifinity.ts +++ b/fees/lifinity.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; import fetchURL from "../utils/fetchURL"; -const historicalVolumeEndpoint = "https://lifinity.io/api/dashboard/volume" +const historicalVolumeEndpoint = "https://api.lifinity.io/api/dashboard/volume" interface IVolumeall { fees: number; From 262183a7ebaf2387bae8823c020aa86e07a414d0 Mon Sep 17 00:00:00 2001 From: rasplarry Date: Wed, 14 Aug 2024 19:59:40 +0900 Subject: [PATCH 1162/1590] feat: Implement seiyan-fun adapter --- dexs/seiyan-fun/index.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 dexs/seiyan-fun/index.ts diff --git a/dexs/seiyan-fun/index.ts b/dexs/seiyan-fun/index.ts new file mode 100644 index 0000000000..aa93c63714 --- /dev/null +++ b/dexs/seiyan-fun/index.ts @@ -0,0 +1,37 @@ +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; +import { + getTimestampAtStartOfDayUTC, + getTimestampAtStartOfNextDayUTC, +} from "../../utils/date"; + +const SEIYAN_FUN_BASE_URL = "https://seiyan.fun/api/public/v1"; +const SEI_PACIFIC_CAIP_CHAIN_ID = "cosmos:sei-pacific-1"; +const SEIYAN_FUN_INITIAL_TIMESTAMP = 1722510000; // 2024-08-01 11:00:00 UTC + +const buildTradingVolumeUrl = (startAt: number, endAt: number) => + `${SEIYAN_FUN_BASE_URL}/trading-volume?caipChainID=${SEI_PACIFIC_CAIP_CHAIN_ID}&startAt=${startAt}&endAt=${endAt}`; + +const fetch = async (timestamp: number) => { + const dayStart = getTimestampAtStartOfDayUTC(timestamp); + const nextDayStart = getTimestampAtStartOfNextDayUTC(timestamp); + const url = buildTradingVolumeUrl(dayStart, nextDayStart); + + const { volume } = await fetchURL(url); + + return { + dailyVolume: volume, + timestamp, + }; +}; + +const adapter = { + adapter: { + [CHAIN.SEI]: { + fetch, + start: SEIYAN_FUN_INITIAL_TIMESTAMP, + }, + }, +}; + +export default adapter; From 501b1ff257053e0294a4c8d56ebe30483bbe5bc9 Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Wed, 14 Aug 2024 15:11:00 +0400 Subject: [PATCH 1163/1590] Add referral fees --- fees/ston/index.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/fees/ston/index.ts b/fees/ston/index.ts index 715505a13f..1beaf36fe7 100644 --- a/fees/ston/index.ts +++ b/fees/ston/index.ts @@ -43,6 +43,8 @@ const fetchFees = async (options: FetchOptions) => { let total_lp_fees = 0 let total_protocol_fees = 0 + let referral_fees = 0 + // go through all operations and calculate fees based on the current prices for (const item of res['operations']) { @@ -52,16 +54,17 @@ const fetchFees = async (options: FetchOptions) => { const price = asset_prices[operation.fee_asset_address] total_lp_fees += operation.lp_fee_amount * price total_protocol_fees += operation.protocol_fee_amount * price + referral_fees += (operation.referral_fee_amount || 0) * price } else { - console.log("Fee asset not found", operation.fee_asset_address) + // console.log("Fee asset not found", operation.fee_asset_address) continue } } } return { - dailyUserFees: total_lp_fees + total_protocol_fees, - dailyFees: total_lp_fees + total_protocol_fees, + dailyUserFees: total_lp_fees + total_protocol_fees + referral_fees, + dailyFees: total_lp_fees + total_protocol_fees + referral_fees, dailySupplySideRevenue: total_lp_fees, dailyRevenue: total_protocol_fees } @@ -76,9 +79,9 @@ export default { start: 1700000000, meta: { methodology: { - UserFees: "User pays fee on each swap.", - Revenue: "Protocol receives 1/3 of fees paid by users.", - SupplySideRevenue: "2/3 of user fees are distributed among LPs.", + UserFees: "User pays fee on each swap. Fees go to the protocol, LPs and optinally to the referral address.", + Revenue: "Protocol receives 1/3 of fees paid by users (not including referral fees).", + SupplySideRevenue: "2/3 of user fees are distributed among LPs (not including referral fees).", }, }, fetch: fetchFees, From b5712cfa12c59683ab151336a26079bf78a8cbc2 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 14 Aug 2024 14:57:25 +0000 Subject: [PATCH 1164/1590] fix ragage --- fees/gmx-v2/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/gmx-v2/index.ts b/fees/gmx-v2/index.ts index 930c1bc4cd..921d669609 100644 --- a/fees/gmx-v2/index.ts +++ b/fees/gmx-v2/index.ts @@ -12,12 +12,12 @@ interface IFee { } const fetch = (chain: Chain) => { - return async (timestamp: number, _t: any, options: FetchOptions): Promise => { + return async (timestamp: number, _t: any, _: FetchOptions): Promise => { const fees: IFee[] = (await queryDune(chain === CHAIN.ARBITRUM ? "3971843" : "3971936")) // const queryId = chain === CHAIN.ARBITRUM ? "3186689" : "3186714"; // const fees: IFee[] = (await fetchURLWithRetry(`https://api.dune.com/api/v1/query/${queryId}/results`)).result.rows; // const fees: IFee[] = require(`./${chain}.json`); - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)); + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); const dateString = new Date(dayTimestamp * 1000).toISOString().split("T")[0]; const daily = fees.find(fee => fee.time.split(' ')[0] === dateString); const dailyFees = daily?.v2_fees || 0 From 62bf03c58f00fa5d5a24190a8e3741366e9be0ac Mon Sep 17 00:00:00 2001 From: dementedgames Date: Wed, 14 Aug 2024 14:57:33 -0300 Subject: [PATCH 1165/1590] Add dailyFees --- fees/demented-games/index.ts | 45 ++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/fees/demented-games/index.ts b/fees/demented-games/index.ts index a3458ffb03..ad0d412bfc 100644 --- a/fees/demented-games/index.ts +++ b/fees/demented-games/index.ts @@ -1,4 +1,5 @@ import { ETHER_ADDRESS } from '@defillama/sdk/build/general'; +import BigNumber from 'bignumber.js'; import { Adapter, FetchOptions } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains'; import { commonAbi } from './abi'; @@ -6,23 +7,37 @@ import { commonAbi } from './abi'; const ROULETTE_ADDRESS = '0x94ba26ee118ef6c407c75dbb23385b1ad71a4547'; const PUMP_OR_REKT_ADDRESS = '0xcbc003cb76c5d218cba2dfb3a2b2f101950ed7e7'; +const startDate = new Date('2024-07-26T00:00:00.000Z').getTime(); +const currentDate = new Date().getTime(); +const differenceInTime = currentDate - startDate; +const totalDays = Math.floor(differenceInTime / (1000 * 60 * 60 * 24)); + async function fetch({ createBalances, api }: FetchOptions) { const totalFees = createBalances(); - - const pumpOrRektFees = await api.call({ - abi: commonAbi[0], - target: ROULETTE_ADDRESS, - }); - - const roulletteFees = await api.call({ - abi: commonAbi[0], - target: PUMP_OR_REKT_ADDRESS, - }); - - totalFees.add(ETHER_ADDRESS, pumpOrRektFees); - totalFees.add(ETHER_ADDRESS, roulletteFees); - - return { totalFees }; + const dailyFees = createBalances(); + + const pumpOrRektFees = BigNumber( + await api.call({ + abi: commonAbi[0], + target: ROULETTE_ADDRESS, + }) + ); + const roulletteFees = BigNumber( + await api.call({ + abi: commonAbi[0], + target: PUMP_OR_REKT_ADDRESS, + }) + ); + + const total = pumpOrRektFees.plus(roulletteFees); + + totalFees.add(ETHER_ADDRESS, total); + dailyFees.add(ETHER_ADDRESS, total.dividedToIntegerBy(totalDays)); + + return { + totalFees, + dailyFees, + }; } const adapter: Adapter = { From c1f75579d851b96473c3736f45df5e8c8ccfbf23 Mon Sep 17 00:00:00 2001 From: Leonardo Nagasaki <56836200+Leoakin43@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:08:51 -0300 Subject: [PATCH 1166/1590] add moonwell fees --- fees/moonwell/index.ts | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 fees/moonwell/index.ts diff --git a/fees/moonwell/index.ts b/fees/moonwell/index.ts new file mode 100644 index 0000000000..9d622a01ee --- /dev/null +++ b/fees/moonwell/index.ts @@ -0,0 +1,8 @@ +import { compoundV2Export, } from "../../helpers/compoundV2"; + +const baseUnitroller = "0xfBb21d0380beE3312B33c4353c8936a0F13EF26C"; +const moonbeamUnitroller = "0x8E00D5e02E65A19337Cdba98bbA9F84d4186a180"; +const moonriverUnitroller = "0x0b7a0EAA884849c6Af7a129e899536dDDcA4905E"; +const optimismUnitroller = "0xCa889f40aae37FFf165BccF69aeF1E82b5C511B9"; + +export default compoundV2Export({ base: baseUnitroller, moonbeam: moonbeamUnitroller, moonriver: moonriverUnitroller, optimism: optimismUnitroller }); From 2c272116de76bf929fb3a5ff0fa1867b996e4fdb Mon Sep 17 00:00:00 2001 From: Define101 Date: Wed, 14 Aug 2024 21:28:09 +0100 Subject: [PATCH 1167/1590] add sei to vertex --- fees/vertex-protocol.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fees/vertex-protocol.ts b/fees/vertex-protocol.ts index 554461f8e6..358a94f729 100644 --- a/fees/vertex-protocol.ts +++ b/fees/vertex-protocol.ts @@ -13,6 +13,7 @@ interface MarketSnapshots { interface QueryBody { market_snapshots: MarketSnapshots; } + interface IData { [s: string]: string; } @@ -27,6 +28,7 @@ interface Response { const archiveBaseUrl = "https://archive.prod.vertexprotocol.com/v1"; const archiveMatleBaseUrl = "https://archive.mantle-prod.vertexprotocol.com/v1"; +const archiveSeiBaseUrl = "https://archive.sei-prod.vertexprotocol.com/v1"; type TURL = { [s: string]: string; @@ -35,6 +37,7 @@ type TURL = { const url: TURL = { [CHAIN.ARBITRUM]: archiveBaseUrl, [CHAIN.MANTLE]: archiveMatleBaseUrl, + [CHAIN.SEI]: archiveSeiBaseUrl, // Added Sei chain URL }; const query = async (max_time: number, fetchOptions: FetchOptions): Promise => { @@ -48,7 +51,6 @@ const query = async (max_time: number, fetchOptions: FetchOptions): Promise Date: Wed, 14 Aug 2024 21:35:17 +0100 Subject: [PATCH 1168/1590] add derivatives and volume sei vertex --- dexs/vertex-protocol/index.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/dexs/vertex-protocol/index.ts b/dexs/vertex-protocol/index.ts index 1b094dc0cd..25ab8c8b83 100644 --- a/dexs/vertex-protocol/index.ts +++ b/dexs/vertex-protocol/index.ts @@ -14,6 +14,9 @@ const archiveBaseUrl = "https://archive.prod.vertexprotocol.com/v1"; const gatewayMatleBaseUrl = "https://gateway.mantle-prod.vertexprotocol.com/v1"; const archiveMatleBaseUrl = "https://archive.mantle-prod.vertexprotocol.com/v1"; +const gatewaySeiBaseUrl = "https://gateway.sei-prod.vertexprotocol.com/v1"; +const archiveSeiBaseUrl = "https://archive.sei-prod.vertexprotocol.com/v1"; + type TURL = { [s: string]: { gateway: string; @@ -28,7 +31,11 @@ const url: TURL = { [CHAIN.MANTLE]: { gateway: gatewayMatleBaseUrl, archive: archiveMatleBaseUrl, - } + }, + [CHAIN.SEI]: { + gateway: gatewaySeiBaseUrl, + archive: archiveSeiBaseUrl, + }, } const fetchValidSymbols = async (fetchOptions: FetchOptions): Promise => { @@ -105,6 +112,7 @@ const fetchPerps = async (timeStamp: number, _: any, fetchOptions: FetchOptions) }; const startTime = 1682514000; +const seiStartTime = 1723649209 const adapter: BreakdownAdapter = { breakdown: { @@ -116,6 +124,10 @@ const adapter: BreakdownAdapter = { [CHAIN.MANTLE]: { fetch: fetchSpots, start: startTime, + }, + [CHAIN.SEI]: { + fetch: fetchSpots, + start: seiStartTime, } }, derivatives: { @@ -126,6 +138,10 @@ const adapter: BreakdownAdapter = { [CHAIN.MANTLE]: { fetch: fetchPerps, start: 1718841600, + }, + [CHAIN.SEI]: { + fetch: fetchSpots, + start: seiStartTime, } }, }, From 961753f16df4bcc1ad4c5f8fd75e96cfcd8c2d4c Mon Sep 17 00:00:00 2001 From: Leonardo Nagasaki <56836200+Leoakin43@users.noreply.github.com> Date: Wed, 14 Aug 2024 19:02:47 -0300 Subject: [PATCH 1169/1590] Add ReservesAdded event --- fees/moonwell/index.ts | 91 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 2 deletions(-) diff --git a/fees/moonwell/index.ts b/fees/moonwell/index.ts index 9d622a01ee..1617478590 100644 --- a/fees/moonwell/index.ts +++ b/fees/moonwell/index.ts @@ -1,8 +1,95 @@ -import { compoundV2Export, } from "../../helpers/compoundV2"; +import ADDRESSES from '../../helpers/coreAssets.json' +import { BaseAdapter, FetchOptions, IJSON, SimpleAdapter } from "../../adapters/types"; +import * as sdk from "@defillama/sdk"; + +const comptrollerABI = { + underlying: "address:underlying", + getAllMarkets: "address[]:getAllMarkets", + accrueInterest: "event AccrueInterest(uint256 cashPrior,uint256 interestAccumulated,uint256 borrowIndex,uint256 totalBorrows)", + reservesAdded: "event ReservesAdded(address benefactor,uint256 addAmount,uint256 newTotalReserves)", + reserveFactor: "uint256:reserveFactorMantissa", +}; const baseUnitroller = "0xfBb21d0380beE3312B33c4353c8936a0F13EF26C"; const moonbeamUnitroller = "0x8E00D5e02E65A19337Cdba98bbA9F84d4186a180"; const moonriverUnitroller = "0x0b7a0EAA884849c6Af7a129e899536dDDcA4905E"; const optimismUnitroller = "0xCa889f40aae37FFf165BccF69aeF1E82b5C511B9"; -export default compoundV2Export({ base: baseUnitroller, moonbeam: moonbeamUnitroller, moonriver: moonriverUnitroller, optimism: optimismUnitroller }); +async function getFees(market: string, { createBalances, api, getLogs, }: FetchOptions, { + dailyFees, + dailyRevenue, + abis = {}, +}: { + dailyFees?: sdk.Balances, + dailyRevenue?: sdk.Balances, + abis?: any +}) { + if (!dailyFees) dailyFees = createBalances() + if (!dailyRevenue) dailyRevenue = createBalances() + const markets = await api.call({ target: market, abi: comptrollerABI.getAllMarkets, }) + const underlyings = await api.multiCall({ calls: markets, abi: comptrollerABI.underlying, permitFailure: true, }); + underlyings.forEach((underlying, index) => { + if (!underlying) underlyings[index] = ADDRESSES.null + }) + const reserveFactors = await api.multiCall({ calls: markets, abi: abis.reserveFactor ?? comptrollerABI.reserveFactor, }); + const logs: any[] = (await getLogs({ + targets: markets, + flatten: false, + eventAbi: comptrollerABI.accrueInterest, + })).map((log: any, index: number) => { + return log.map((i: any) => ({ + ...i, + interestAccumulated: Number(i.interestAccumulated), + marketIndex: index, + })); + }).flat() + + const reservesAddedLogs: any[] = (await getLogs({ + targets: markets, + flatten: false, + eventAbi: comptrollerABI.reservesAdded, + })).map((log: any, index: number) => { + return log.map((i: any) => ({ + ...i, + addAmount: Number(i.addAmount), + marketIndex: index, + })); + }).flat() + + logs.forEach((log: any) => { + const marketIndex = log.marketIndex; + const underlying = underlyings[marketIndex] + dailyFees!.add(underlying, log.interestAccumulated); + dailyRevenue!.add(underlying, log.interestAccumulated * Number(reserveFactors[marketIndex]) / 1e18); + }) + + reservesAddedLogs.forEach((log: any) => { + const marketIndex = log.marketIndex; + const underlying = underlyings[marketIndex] + dailyRevenue!.add(underlying, log.addAmount / 1e18); + }) + + return { dailyFees, dailyRevenue } +} + +function moonwellExport(config: IJSON) { + const exportObject: BaseAdapter = {} + Object.entries(config).map(([chain, market]) => { + exportObject[chain] = { + fetch: (async (options: FetchOptions) => { + const { dailyFees, dailyRevenue } = await getFees(market, options, {}) + const dailyHoldersRevenue = dailyRevenue + const dailySupplySideRevenue = options.createBalances() + dailySupplySideRevenue.addBalances(dailyFees) + Object.entries(dailyRevenue.getBalances()).forEach(([token, balance]) => { + dailySupplySideRevenue.addTokenVannila(token, Number(balance) * -1) + }) + return { dailyFees, dailyRevenue, dailyHoldersRevenue, dailySupplySideRevenue } + }), + start: 0, + } + }) + return { adapter: exportObject, version: 2 } as SimpleAdapter +} + +export default moonwellExport({ base: baseUnitroller, moonbeam: moonbeamUnitroller, moonriver: moonriverUnitroller, optimism: optimismUnitroller }); \ No newline at end of file From ddd4f598e8bd49556f2a29bd4e10135039bc94a8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:16:46 +0200 Subject: [PATCH 1170/1590] fix start time --- dexs/vertex-protocol/index.ts | 2 +- fees/vertex-protocol.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/vertex-protocol/index.ts b/dexs/vertex-protocol/index.ts index 25ab8c8b83..edfeed8c5c 100644 --- a/dexs/vertex-protocol/index.ts +++ b/dexs/vertex-protocol/index.ts @@ -112,7 +112,7 @@ const fetchPerps = async (timeStamp: number, _: any, fetchOptions: FetchOptions) }; const startTime = 1682514000; -const seiStartTime = 1723649209 +const seiStartTime = 1723547681 const adapter: BreakdownAdapter = { breakdown: { diff --git a/fees/vertex-protocol.ts b/fees/vertex-protocol.ts index 358a94f729..ccc4f92036 100644 --- a/fees/vertex-protocol.ts +++ b/fees/vertex-protocol.ts @@ -147,7 +147,7 @@ const adapter: Adapter = { [CHAIN.SEI]: { fetch: fetch, runAtCurrTime: true, - start: 1723649209 + start: 1723547681 }, }, }; From 53b1061c421af06bfa4639b6580f87a97202f967 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:32:14 +0200 Subject: [PATCH 1171/1590] print message if a chain is skipped --- adapters/utils/runAdapter.ts | 9 +++++++-- cli/testAdapter.ts | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/adapters/utils/runAdapter.ts b/adapters/utils/runAdapter.ts index 4ab8ba45e5..ea3dd2863b 100644 --- a/adapters/utils/runAdapter.ts +++ b/adapters/utils/runAdapter.ts @@ -10,7 +10,8 @@ function getUnixTimeNow() { } export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurrentDayTimestamp: number, chainBlocks: ChainBlocks, id?: string, version?: string, { - adapterVersion = 1 + adapterVersion = 1, + isTest = false, }: any = {}) { const closeToCurrentTime = Math.trunc(Date.now() / 1000) - cleanCurrentDayTimestamp < 24 * 60 * 60 // 12 hours @@ -23,7 +24,11 @@ export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurren } await Promise.all(chains.map(setChainValidStart)) - const response = await Promise.all(chains.filter(chain => validStart[chain]?.canRun).map(getChainResult)) + const response = await Promise.all(chains.filter(chain => { + const res = validStart[chain]?.canRun + if (isTest && !res) console.log(`Skipping ${chain} because the configured start time is ${new Date(validStart[chain]?.startTimestamp * 1e3).toUTCString()} \n\n`) + return validStart[chain]?.canRun + }).map(getChainResult)) return response async function getChainResult(chain: string) { diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index 600d6aaa76..dfb50e5fa3 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -82,6 +82,7 @@ const passedFile = path.resolve(process.cwd(), `./${adapterType}/${process.argv[ const allVolumes = await Promise.all(Object.entries(breakdownAdapter).map(([version, adapter]) => runAdapter(adapter, endTimestamp, chainBlocks, undefined, undefined, { adapterVersion, + isTest: true, }).then(res => ({ version, res })) )) allVolumes.forEach(({ version, res }) => { From 9b0b42859c45346fed7cbb445417828ddbe52347 Mon Sep 17 00:00:00 2001 From: Timan Rebel Date: Thu, 15 Aug 2024 14:00:33 +0200 Subject: [PATCH 1172/1590] add astrolescent volume --- dexs/astrolescent/index.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 dexs/astrolescent/index.ts diff --git a/dexs/astrolescent/index.ts b/dexs/astrolescent/index.ts new file mode 100644 index 0000000000..c7fc2fa492 --- /dev/null +++ b/dexs/astrolescent/index.ts @@ -0,0 +1,27 @@ +import { FetchResultFees, FetchResultVolume, SimpleAdapter } from "../../adapters/types" +import { CHAIN } from "../../helpers/chains" +import fetchURL from "../../utils/fetchURL" + +interface AstrolescentStats { + volumeUSD: number; +} +const fetchVolume = async (timestamp: number): Promise => { + const response: AstrolescentStats = (await fetchURL(`https://api.astrolescent.com/stats/history?timestamp=${timestamp}`)); + const dailyVolume = Number(response?.volumeUSD); + + return { + dailyVolume, + timestamp + } +} + +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.RADIXDLT]: { + fetch: fetchVolume, + start: 1698624000, + runAtCurrTime: false + } + } +} +export default adapters; From 62fb49e51f9ed6bf64787ba71cdd572e8c149fba Mon Sep 17 00:00:00 2001 From: Timan Rebel Date: Thu, 15 Aug 2024 14:05:07 +0200 Subject: [PATCH 1173/1590] add custom backfill to Astrolescent --- dexs/astrolescent/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dexs/astrolescent/index.ts b/dexs/astrolescent/index.ts index c7fc2fa492..58c930f176 100644 --- a/dexs/astrolescent/index.ts +++ b/dexs/astrolescent/index.ts @@ -1,6 +1,7 @@ import { FetchResultFees, FetchResultVolume, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" import fetchURL from "../../utils/fetchURL" +import customBackfill from "../../helpers/customBackfill"; interface AstrolescentStats { volumeUSD: number; @@ -20,6 +21,7 @@ const adapters: SimpleAdapter = { [CHAIN.RADIXDLT]: { fetch: fetchVolume, start: 1698624000, + customBackfill: customBackfill(CHAIN.RADIXDLT, () => fetchVolume), runAtCurrTime: false } } From 2388dd7bd4fecb22c2fcd6405ffdd2d3ca2c067f Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 15 Aug 2024 16:27:06 +0100 Subject: [PATCH 1174/1590] patch --- helpers/getUniSubgraph/index.ts | 94 +++++++++++---------------------- 1 file changed, 31 insertions(+), 63 deletions(-) diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 6a10e2aa29..047d182166 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -3,14 +3,14 @@ import { request, gql } from "graphql-request"; 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 { handle200Errors } from "./utils"; import { getStartTimestamp } from "../getStartTimestamp"; const DEFAULT_TOTAL_VOLUME_FACTORY = "uniswapFactories"; const DEFAULT_TOTAL_VOLUME_FIELD = "totalVolumeUSD"; -const DEFAULT_DAILY_VOLUME_FACTORY = "uniswapDayData"; -const DEFAULT_DAILY_VOLUME_FIELD = "dailyVolumeUSD"; +const DEFAULT_DAILY_VOLUME_FACTORY = "uniswapFactories"; +const DEFAULT_DAILY_VOLUME_FIELD = "totalVolumeUSD"; const DEFAULT_DAILY_DATE_FIELD = "date"; const DEFAULT_DAILY_PAIR_FACTORY = "pairDayDatas"; @@ -96,6 +96,7 @@ function getGraphDimensions({ feesPercent, blacklistTokens = {} }: IGetChainVolumeParams) { + dailyFees; getCustomBlock; // DAILY VOLUME // Graph fields const graphFieldsDailyVolume = { @@ -105,21 +106,6 @@ function getGraphDimensions({ pairs: dailyVolume.pairs ?? DEFAULT_DAILY_PAIR_FACTORY, idGraphType: dailyVolume.idGraphType ?? DEFAULT_ID_TYPE } - // Queries - const dailyVolumeQuery = gql` - query daily_volume ($id: ${graphFieldsDailyVolume.idGraphType}) { - ${graphFieldsDailyVolume.factory} (id: $id) { - ${graphFieldsDailyVolume.field} - } - }`; - const alternativeDailyQuery = gql` - query daily_volume_alternative ($timestamp: Int) { - ${graphFieldsDailyVolume.factory}s (where: {${graphFieldsDailyVolume.dateField}: $timestamp}) { - ${graphFieldsDailyVolume.dateField} - ${graphFieldsDailyVolume.field} - } - }`; - // TOTAL VOLUME // Graph fields const graphFieldsTotalVolume = { @@ -135,20 +121,6 @@ function getGraphDimensions({ } }`; - // DAILY FEES - // Graph fields - const graphFieldsDailyFees = { - factory: dailyFees.factory ?? DEFAULT_DAILY_FEES_FACTORY, - field: dailyFees.field ?? DEFAULT_DAILY_FEES_FIELD - } - // Query - const dailyFeesQuery = gql` - query daily_fees ($id: ID!) { - ${graphFieldsDailyFees.factory}(id: $id) { - ${graphFieldsDailyFees.field} - } - }`; - // TOTAL FEES // Graph fields const graphFieldsTotalFees = { @@ -157,8 +129,8 @@ function getGraphDimensions({ } // Query const totalFeesQuery = gql` - query total_fees { - ${graphFieldsTotalFees.factory} { + query total_fees ($block: ${graphFieldsTotalVolume.blockGraphType}) { + ${graphFieldsTotalFees.factory}(block: { number: $block }) { ${graphFieldsTotalFees.field} } }`; @@ -183,17 +155,15 @@ 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) => + const { endTimestamp, startTimestamp, getEndBlock, getStartBlock } = options; + + const endBlock = (await getEndBlock().catch((e: any) => + console.log(wrapGraphError(e).message), + )) ?? undefined; + const startBlock = (await getStartBlock().catch((e: any) => console.log(wrapGraphError(e).message), )) ?? undefined; - // Get params - const id = String(getUniswapDateId(new Date(endTimestamp * 1000))); - // Execute queries - // DAILY VOLUME + let graphResDailyVolume; let dailyVolume: any; if (dailyVolumePairsQuery) { @@ -202,7 +172,7 @@ function getGraphDimensions({ graphUrls[chain], dailyVolumePairsQuery, { - timestamp_gt: endTimestamp - 3600 * 24, + timestamp_gt: startTimestamp, timestamp_lte: endTimestamp, }, graphRequestHeaders?.[chain], @@ -229,38 +199,36 @@ function getGraphDimensions({ } return acc }, undefined as number | undefined) - } else { - graphResDailyVolume = await request(graphUrls[chain], dailyVolumeQuery, { id }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`GraphFetchError: Failed to get daily volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)) - 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}`)) - 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); - } } - // TOTAL VOLUME - const graphResTotalVolume = await request(graphUrls[chain], totalVolumeQuery, { block }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`GraphFetchError: Failed to get total volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)); + const graphResTotalVolume = await request(graphUrls[chain], totalVolumeQuery, { block: endBlock }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`GraphFetchError: Failed to get total volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)); const totalVolume = graphResTotalVolume?.[graphFieldsTotalVolume.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalVolume.field]), 0)?.toString() - // DAILY FEES - const graphResDailyFees = await request(graphUrls[chain], dailyFeesQuery, { id }, graphRequestHeaders?.[chain]).catch(_e => { - if (dailyVolume === undefined || feesPercent?.Fees === undefined) - console.error(`Unable to get daily fees on ${chain} from graph.`) - }); - const dailyFees = graphResDailyFees?.[graphFieldsDailyFees.factory]?.[graphFieldsDailyFees.field] + // PREV TOTAL VOLUME + const graphResPrevTotalVolume = await request(graphUrls[chain], totalVolumeQuery, { block: startBlock }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`GraphFetchError: Failed to get total volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)); + const prevTotalVolume = graphResPrevTotalVolume?.[graphFieldsTotalVolume.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalVolume.field]), 0)?.toString() + dailyVolume = totalVolume - prevTotalVolume // TOTAL FEES - const graphResTotalFees = await request(graphUrls[chain], totalFeesQuery, { id }, graphRequestHeaders?.[chain]).catch(_e => { + const graphResTotalFees = await request(graphUrls[chain], totalFeesQuery, { block: endBlock }, graphRequestHeaders?.[chain]).catch(_e => { if (totalVolume === undefined || feesPercent?.Fees === undefined) console.error(`Unable to get total fees on ${chain} from graph.`) }); const totalFees = graphResTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) + // PREV TOTAL FEES + const graphResPrevTotalFees = await request(graphUrls[chain], totalFeesQuery, { block: startBlock }, graphRequestHeaders?.[chain]).catch(_e => { + if (totalVolume === undefined || feesPercent?.Fees === undefined) + console.error(`Unable to get total fees on ${chain} from graph.`) + }); + const prevTotalFees = graphResPrevTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) + + const dailyFees = totalFees - prevTotalFees + + // ts-node --transpile-only cli/testAdapter.ts protocols uniswap const response: FetchResultGeneric = { timestamp: endTimestamp, - block, + block: endBlock, totalVolume, dailyVolume, dailyFees, From 0aa2fae9f5531728b178de709182433ab67507a8 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 15 Aug 2024 16:29:56 +0100 Subject: [PATCH 1175/1590] custom block --- helpers/getUniSubgraph/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 047d182166..2a659a4db5 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -96,7 +96,7 @@ function getGraphDimensions({ feesPercent, blacklistTokens = {} }: IGetChainVolumeParams) { - dailyFees; getCustomBlock; + dailyFees; // DAILY VOLUME // Graph fields const graphFieldsDailyVolume = { @@ -157,10 +157,10 @@ function getGraphDimensions({ return async (options: FetchOptions) => { const { endTimestamp, startTimestamp, getEndBlock, getStartBlock } = options; - const endBlock = (await getEndBlock().catch((e: any) => + const endBlock = (await (getCustomBlock ? getCustomBlock(endTimestamp) : getEndBlock()).catch((e: any) => console.log(wrapGraphError(e).message), )) ?? undefined; - const startBlock = (await getStartBlock().catch((e: any) => + const startBlock = (await (getCustomBlock ? getCustomBlock(startTimestamp) :getStartBlock()).catch((e: any) => console.log(wrapGraphError(e).message), )) ?? undefined; From 39f77fc80f9679946c68be3e8bc4be11b4a6bf7c Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 15 Aug 2024 16:51:19 +0100 Subject: [PATCH 1176/1590] pendle active addresses --- users/routers/routerAddresses.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index e3de6e6d92..e677c446f0 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -2396,5 +2396,17 @@ export default ( ], }, }, + { + "id":"382", + "name": "Pendle", + "addresses":{ + // routers + ethereum: ["0x888888888889758F76e7103c6CbF23ABbF58F946"], + arbitrum: ["0x888888888889758F76e7103c6CbF23ABbF58F946"], + optimism: ["0x888888888889758F76e7103c6CbF23ABbF58F946"], + mantle: ["0x888888888889758F76e7103c6CbF23ABbF58F946"], + bsc: ["0x888888888889758F76e7103c6CbF23ABbF58F946"], + } + }, ] as ProtocolAddresses[] ).filter(isAddressesUsable); From 768943e674d051b9f1b883e7a26ab70de9e9f891 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 15 Aug 2024 17:14:46 +0000 Subject: [PATCH 1177/1590] switch too v1 --- aggregators/akka/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aggregators/akka/index.ts b/aggregators/akka/index.ts index 528cc4181c..0a24fc2158 100644 --- a/aggregators/akka/index.ts +++ b/aggregators/akka/index.ts @@ -23,10 +23,11 @@ const fetch = async (timestamp: number): Promise => { } const adapter: SimpleAdapter = { - version: 2, + version: 1, adapter: { [CHAIN.CORE]: { fetch, + runAtCurrTime: true, start: startTimestamp, }, }, From 5a1c3e2f99a68730b99c11d1cb155c3429af68ee Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 16 Aug 2024 01:37:56 +0000 Subject: [PATCH 1178/1590] add pancake optiobs --- options/pancakeswap-options/index.ts | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 options/pancakeswap-options/index.ts diff --git a/options/pancakeswap-options/index.ts b/options/pancakeswap-options/index.ts new file mode 100644 index 0000000000..c44557de1e --- /dev/null +++ b/options/pancakeswap-options/index.ts @@ -0,0 +1,49 @@ +import request, { gql } from "graphql-request"; +import { CHAIN } from "../../helpers/chains"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; + +const url: { [s: string]: string } = { + [CHAIN.ARBITRUM]: "https://api.0xgraph.xyz/api/public/e2146f32-5728-4755-b1d1-84d17708c119/subgraphs/dopex-v2-clamm-public/v0.0.2/gn" +} + +const query = gql` + query getVolume($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + optionMarketDailyStats(where: { startTimestamp_gte: $startTimestamp, startTimestamp_lte: $endTimestamp }) { + startTimestamp + volume + premium + fees + } + } +` +interface IData { + optionMarketDailyStats:Array<{ + startTimestamp: number; + volume: string; + premium: string; + fees: string; + }> +} +const fetchOptions = async (fetchOptions: FetchOptions): Promise => { + const today = fetchOptions.startOfDay; + const end = today + 86400; + const data: IData = await request(url[fetchOptions.chain], query, { startTimestamp: today, endTimestamp: end }); + const daily_premium = data.optionMarketDailyStats.reduce((acc, { premium }) => acc + Number(premium), 0); + const daily_volume = data.optionMarketDailyStats.reduce((acc, { volume }) => acc + Number(volume), 0); + return { + dailyNotionalVolume: daily_volume, + dailyPremiumVolume: daily_premium, + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetchOptions, + start: 1713205800, + }, + } +} + +export default adapter; From 1d4dffc54c8911b6ecaf36af3515f9567e27fbf4 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 16 Aug 2024 01:43:42 +0000 Subject: [PATCH 1179/1590] fix timestamp --- options/pancakeswap-options/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options/pancakeswap-options/index.ts b/options/pancakeswap-options/index.ts index c44557de1e..27bfb4001e 100644 --- a/options/pancakeswap-options/index.ts +++ b/options/pancakeswap-options/index.ts @@ -41,7 +41,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM]: { fetch: fetchOptions, - start: 1713205800, + start: 1699660800, }, } } From c7ddf2caed1c8617f9e9153b116205fbb2eeaf52 Mon Sep 17 00:00:00 2001 From: Mr-Lucky Date: Fri, 16 Aug 2024 14:41:00 +0800 Subject: [PATCH 1180/1590] remove ProtocolRevenue --- fees/goplus.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/fees/goplus.ts b/fees/goplus.ts index 2991f151cf..072c9aeefb 100644 --- a/fees/goplus.ts +++ b/fees/goplus.ts @@ -21,8 +21,6 @@ const CALLS = [ const fetch = async (options: FetchOptions) => { const dailyFees = options.createBalances(); const totalFees = options.createBalances(); - const dailyProtocolRevenue = options.createBalances(); - const totalProtocolRevenue = options.createBalances(); const [foundationBalanceStart, revenueBalanceStart] = await options.fromApi.multiCall({ abi: BALANCE_ABI, calls: CALLS @@ -36,9 +34,7 @@ const fetch = async (options: FetchOptions) => { const dailyTotal = dailyFoundationReceived.plus(dailyRevenueReceived).toFixed(0); dailyFees.add(USDT_MINT, dailyTotal); totalFees.add(USDT_MINT, BigNumber(foundationBalanceEnd).plus(BigNumber(revenueBalanceEnd)).toFixed(0)); - dailyProtocolRevenue.add(USDT_MINT, dailyFoundationReceived.toFixed(0)); - totalProtocolRevenue.add(USDT_MINT, foundationBalanceEnd); - return { dailyFees, totalFees, dailyProtocolRevenue, totalProtocolRevenue }; + return { dailyFees, totalFees }; }; const adapter: SimpleAdapter = { @@ -49,7 +45,6 @@ const adapter: SimpleAdapter = { start: 36724659, meta: { methodology: { - ProtocolRevenue: "Treasury receives 30% of each security service purchase.", Fees: "All fees comes from users for security service provided by GoPlus Network." } } From e8cce364fa43a82b697b6be45760a6d4bf4d077f Mon Sep 17 00:00:00 2001 From: trungbach Date: Fri, 16 Aug 2024 18:20:26 +0700 Subject: [PATCH 1181/1590] orai: add volume for oraidex v3 --- dexs/oraidex-v3/index.ts | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 dexs/oraidex-v3/index.ts diff --git a/dexs/oraidex-v3/index.ts b/dexs/oraidex-v3/index.ts new file mode 100644 index 0000000000..1067b3a869 --- /dev/null +++ b/dexs/oraidex-v3/index.ts @@ -0,0 +1,42 @@ +import { gql, GraphQLClient } from "graphql-request"; +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const historicalVolumeEndpoint = "https://staging-ammv3-indexer.oraidex.io/"; +const fetch = async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + const dayIndex = Math.floor(dayTimestamp / 86400000) - 1; + const query = gql` + query PoolDayData { + poolDayData( + filter: { + dayIndex: { equalTo: ${dayIndex} } + } + ) { + aggregates { + sum { + volumeInUSD + } + } + } + }`; + + const res = await new GraphQLClient(historicalVolumeEndpoint).request(query); + const dailyVolume = res.poolDayData.aggregates.sum.volumeInUSD; + return { + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + timestamp: dayTimestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ORAI]: { + fetch, + start: 1722587676, + }, + }, +}; + +export default adapter; From 84913ca3ea83cdb1f1ac36854661107706d00a41 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Fri, 16 Aug 2024 12:36:53 +0100 Subject: [PATCH 1182/1590] change query --- fees/pumpdotfun.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fees/pumpdotfun.ts b/fees/pumpdotfun.ts index 0c2bc80820..54eda8844b 100644 --- a/fees/pumpdotfun.ts +++ b/fees/pumpdotfun.ts @@ -4,10 +4,9 @@ import { queryDune } from "../helpers/dune"; const fetch: any = async (options: FetchOptions) => { const dailyFees = options.createBalances(); - const value = (await queryDune("3521814", { + const value = (await queryDune("3993882", { start: options.startTimestamp, end: options.endTimestamp, - receiver: 'CebN5WGQ4jvEPvsVU4EoHEpgzq1VV7AbicfhtW4xC9iM' })); dailyFees.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); From 256bd6b20ec40bdfa9efd7d65cb1845c389721fa Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Fri, 16 Aug 2024 14:31:34 +0200 Subject: [PATCH 1183/1590] feat:Adapter, Spiko Fees --- fees/spiko/index.ts | 100 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 fees/spiko/index.ts diff --git a/fees/spiko/index.ts b/fees/spiko/index.ts new file mode 100644 index 0000000000..1ef6b2a42b --- /dev/null +++ b/fees/spiko/index.ts @@ -0,0 +1,100 @@ +// https://docs.spiko.xyz/spiko-mmfs/fees + +import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +type IFunds = { + [s: string]: string; +}; + +type IAddress = { + [key: string]: IFunds; +}; + +const funds: IAddress = { + [CHAIN.ETHEREUM]: { + EUTBL: "0xa0769f7A8fC65e47dE93797b4e21C073c117Fc80", + USTBL: "0xe4880249745eAc5F1eD9d8F7DF844792D560e750", + }, + [CHAIN.POLYGON]: { + EUTBL: "0xa0769f7A8fC65e47dE93797b4e21C073c117Fc80", + USTBL: "0xe4880249745eAc5F1eD9d8F7DF844792D560e750", + }, +}; + +const calcFees = (totalSupply: number, isEUTBL: boolean) => { + const baseFeeRate = 0.1; + const performanceFeeRate = 0.3; + const revenueRate = 0.15; + const minAumForFees = 100 * 1e6; + + const managementFee = + isEUTBL && totalSupply <= minAumForFees ? 0 : baseFeeRate; + const totalFeesBalance = + (totalSupply * (managementFee + performanceFeeRate)) / 100; + const totalRevenuesBalance = + (totalSupply * + (isEUTBL && totalSupply <= minAumForFees ? 0 : revenueRate)) / + 100; + + return { + fees: totalFeesBalance, + revenues: totalRevenuesBalance, + }; +}; + +async function getFundsFees( + funds: IFunds, + { api, createBalances }: FetchOptions +): Promise { + const dailyFees = createBalances(); + const dailyRevenues = createBalances(); + const totalFees = createBalances(); + const totalRevenues = createBalances(); + const { EUTBL, USTBL } = funds; + + const totalSupplies = await api.multiCall({ + calls: [EUTBL, USTBL], + abi: "erc20:totalSupply", + }); + + const [eutlbSupply, ustblSupply] = [EUTBL, USTBL].map((fund, index) => { + const totalSupply: number = totalSupplies[index]; + return { fund, totalSupply }; + }); + + const ustblFees = calcFees(ustblSupply.totalSupply, false); + const eutblFees = calcFees(eutlbSupply.totalSupply, true); + + const feesDatas = [ + { ...ustblFees, fund: ustblSupply.fund }, + { ...eutblFees, fund: eutlbSupply.fund }, + ]; + + feesDatas.forEach(({ fund, fees, revenues }) => { + dailyFees.add(fund, fees / 365); + totalFees.add(fund, fees); + dailyRevenues.add(fund, revenues / 365); + totalRevenues.add(fund, revenues); + }); + + return { dailyFees, dailyRevenues, totalFees, totalRevenues }; +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.ETHEREUM]: { + start: 1714514400, + fetch: (options: FetchOptions) => + getFundsFees(funds[CHAIN.ETHEREUM], options), + }, + [CHAIN.POLYGON]: { + start: 1713564000, + fetch: (options: FetchOptions) => + getFundsFees(funds[CHAIN.POLYGON], options), + }, + }, +}; + +export default adapter; From 742deebe9a00989d72793020dd03825c909a6f7b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 16 Aug 2024 12:58:46 +0000 Subject: [PATCH 1184/1590] fix default value --- aggregators/chainspot/index.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/aggregators/chainspot/index.ts b/aggregators/chainspot/index.ts index 9420b4bdcd..4638726942 100644 --- a/aggregators/chainspot/index.ts +++ b/aggregators/chainspot/index.ts @@ -1,6 +1,7 @@ -import fetchURL from "../../utils/fetchURL"; +import { httpGet } from "../../utils/fetchURL"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; +import { FetchOptions } from "../../adapters/types"; const chains = [ CHAIN.ETHEREUM, @@ -68,19 +69,19 @@ const chainToId: Record = { [CHAIN.ZKSYNC]: 324, }; -const fetch = (chain: string) => async (timestamp: number) => { +const fetch = async (_at: number, _t: any, options: FetchOptions) => { const unixTimestamp = getUniqStartOfTodayTimestamp( - new Date(timestamp * 1000) + new Date(options.startOfDay * 1000) ); const volume = ( - await fetchURL( - `https://app.chainspot.io/api/2.0/statistic/daily-volume?chainId=${chainToId[chain]}×tamp=${unixTimestamp}` + await httpGet( + `https://app.chainspot.io/api/2.0/statistic/daily-volume?chainId=${chainToId[options.chain]}×tamp=${unixTimestamp}` ) )?.volume; return { - dailyVolume: volume, + dailyVolume: volume || 0, timestamp: unixTimestamp, }; }; @@ -91,7 +92,7 @@ const adapter: any = { return { ...acc, [chain]: { - fetch: fetch(chain), + fetch: fetch, start: 1704067200, }, }; From 10b4646c754c4ba807adf3d8a252e8901e37fc4c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 16 Aug 2024 14:57:03 +0000 Subject: [PATCH 1185/1590] fix ston fees --- fees/ston/index.ts | 149 ++++++++++++++++++++++----------------------- 1 file changed, 73 insertions(+), 76 deletions(-) diff --git a/fees/ston/index.ts b/fees/ston/index.ts index 1beaf36fe7..807b407648 100644 --- a/fees/ston/index.ts +++ b/fees/ston/index.ts @@ -1,90 +1,87 @@ -import { CHAIN } from '../../helpers/chains' -import postURL from "../../utils/fetchURL" -import fetchURL from "../../utils/fetchURL" -import { FetchOptions } from "../../adapters/types"; - - -const endpoint = "https://api.ston.fi/v1/stats/operations?" +import { CHAIN } from "../../helpers/chains"; +import postURL from "../../utils/fetchURL"; +import fetchURL from "../../utils/fetchURL"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +const endpoint = "https://api.ston.fi/v1/stats/operations?"; const fetchFees = async (options: FetchOptions) => { - console.log("Requesting pools list") - const pool_list = (await fetchURL('https://api.ston.fi/v1/pools')).pool_list; - // store pools info for each asset to calculate weigthed price later - const asset2pools = {}; - const add_pool = (address: string, tvl: number, reserve: number) => { - if (!asset2pools[address]) { - asset2pools[address] = [] - } - asset2pools[address].push({tvl, reserve}) - } - for (const pool of pool_list) { - // ignore pools with low liquidity - if (pool['lp_total_supply_usd'] < 1000) { - continue - } - add_pool(pool['token0_address'], Number(pool['lp_total_supply_usd']) / 2, Number(pool['reserve0'])) - add_pool(pool['token1_address'], Number(pool['lp_total_supply_usd']) / 2, Number(pool['reserve1'])) + const pool_list = (await fetchURL("https://api.ston.fi/v1/pools")).pool_list; + // store pools info for each asset to calculate weigthed price later + const asset2pools = {}; + const add_pool = (address: string, tvl: number, reserve: number) => { + if (!asset2pools[address]) { + asset2pools[address] = []; } - // price is calculated as total tvl / total reserve across all pools - const asset_prices = {} - for (const asset in asset2pools) { - const pools = asset2pools[asset] - const price = pools.map((pool) => pool.tvl).reduce((a, b) => a + b, 0) / pools.map((pool) => pool.reserve).reduce((a, b) => a + b, 0) - asset_prices[asset] = price + asset2pools[address].push({ tvl, reserve }); + }; + for (const pool of pool_list) { + // ignore pools with low liquidity + if (pool["lp_total_supply_usd"] < 1000) { + continue; } - // explicitly set price for pTON based on TON price - asset_prices['EQCM3B12QK1e4yZSf8GtBRT0aLMNyEsBc_DhVfRRtOEffLez'] = asset_prices['EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c'] - - const startTime = new Date(options.startTimestamp * 1000).toISOString().split(".")[0] - const endTime = new Date(options.endTimestamp * 1000).toISOString().split(".")[0] - console.log(`Requesting last day operations: ${startTime}, ${endTime}`) - const res = await postURL(`${endpoint}since=${startTime}&until=${endTime}`) + add_pool(pool["token0_address"], Number(pool["lp_total_supply_usd"]) / 2, Number(pool["reserve0"])); + add_pool(pool["token1_address"], Number(pool["lp_total_supply_usd"]) / 2, Number(pool["reserve1"])); + } + // price is calculated as total tvl / total reserve across all pools + const asset_prices = {}; + for (const asset in asset2pools) { + const pools = asset2pools[asset]; + const price = + pools.map((pool) => pool.tvl).reduce((a, b) => a + b, 0) / + pools.map((pool) => pool.reserve).reduce((a, b) => a + b, 0); + asset_prices[asset] = price; + } + // explicitly set price for pTON based on TON price + asset_prices["EQCM3B12QK1e4yZSf8GtBRT0aLMNyEsBc_DhVfRRtOEffLez"] = + asset_prices["EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c"]; - let total_lp_fees = 0 - let total_protocol_fees = 0 - let referral_fees = 0 - + const startTime = new Date(options.startTimestamp * 1000).toISOString().split(".")[0]; + const endTime = new Date(options.endTimestamp * 1000).toISOString().split(".")[0]; + const res = await postURL(`${endpoint}since=${startTime}&until=${endTime}`); - // go through all operations and calculate fees based on the current prices - for (const item of res['operations']) { - const operation = item.operation - if (operation.success && operation.operation_type == 'swap' && operation.exit_code == 'swap_ok' ) { - if (operation.fee_asset_address in asset_prices) { - const price = asset_prices[operation.fee_asset_address] - total_lp_fees += operation.lp_fee_amount * price - total_protocol_fees += operation.protocol_fee_amount * price - referral_fees += (operation.referral_fee_amount || 0) * price - } else { - // console.log("Fee asset not found", operation.fee_asset_address) - continue - } - } - } + let total_lp_fees = 0; + let total_protocol_fees = 0; + let referral_fees = 0; - return { - dailyUserFees: total_lp_fees + total_protocol_fees + referral_fees, - dailyFees: total_lp_fees + total_protocol_fees + referral_fees, - dailySupplySideRevenue: total_lp_fees, - dailyRevenue: total_protocol_fees + // go through all operations and calculate fees based on the current prices + for (const item of res["operations"]) { + const operation = item.operation; + if (operation.success && operation.operation_type == "swap" && operation.exit_code == "swap_ok") { + if (operation.fee_asset_address in asset_prices) { + const price = asset_prices[operation.fee_asset_address]; + total_lp_fees += operation.lp_fee_amount * price; + total_protocol_fees += operation.protocol_fee_amount * price; + referral_fees += (operation.referral_fee_amount || 0) * price; + } else { + // console.log("Fee asset not found", operation.fee_asset_address) + continue; + } } + } + return { + dailyUserFees: total_lp_fees + total_protocol_fees + referral_fees, + dailyFees: total_lp_fees + total_protocol_fees + referral_fees, + dailySupplySideRevenue: total_lp_fees, + dailyRevenue: total_protocol_fees, }; +}; -export default { - version: 2, - runAtCurrTime: true, - adapter: { - [CHAIN.TON]: { - start: 1700000000, - meta: { - methodology: { - UserFees: "User pays fee on each swap. Fees go to the protocol, LPs and optinally to the referral address.", - Revenue: "Protocol receives 1/3 of fees paid by users (not including referral fees).", - SupplySideRevenue: "2/3 of user fees are distributed among LPs (not including referral fees).", - }, - }, - fetch: fetchFees, +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.TON]: { + start: 1700000000, + meta: { + methodology: { + UserFees: "User pays fee on each swap. Fees go to the protocol, LPs and optinally to the referral address.", + Revenue: "Protocol receives 1/3 of fees paid by users (not including referral fees).", + SupplySideRevenue: "2/3 of user fees are distributed among LPs (not including referral fees).", }, + }, + fetch: fetchFees, }, -} + }, +}; +export default adapter; From fd1a28b1a684a9e72eb3971a609df66848399388 Mon Sep 17 00:00:00 2001 From: daedboi <87483308+daedboi@users.noreply.github.com> Date: Fri, 16 Aug 2024 22:08:53 +0300 Subject: [PATCH 1186/1590] fix: Update subgraph links --- dexs/bmx/index.ts | 4 +++- fees/bmx.ts | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/dexs/bmx/index.ts b/dexs/bmx/index.ts index 1b3746e486..8ea9c5bab3 100644 --- a/dexs/bmx/index.ts +++ b/dexs/bmx/index.ts @@ -5,7 +5,9 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume const endpoints: { [key: string]: string } = { [CHAIN.BASE]: - "https://api.thegraph.com/subgraphs/name/morphex-labs/bmx-base-stats", + "https://api.studio.thegraph.com/query/71696/bmx-base-stats/version/latest", + [CHAIN.MODE]: + "https://api.studio.thegraph.com/query/42444/bmx-mode-stats/version/latest", }; const historicalDataSwap = gql` diff --git a/fees/bmx.ts b/fees/bmx.ts index 06563fed28..aa68412672 100644 --- a/fees/bmx.ts +++ b/fees/bmx.ts @@ -5,7 +5,9 @@ import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints: { [key: string]: string } = { [CHAIN.BASE]: - "https://api.thegraph.com/subgraphs/name/morphex-labs/bmx-base-stats", + "https://api.studio.thegraph.com/query/71696/bmx-base-stats/version/latest", + [CHAIN.MODE]: + "https://api.studio.thegraph.com/query/42444/bmx-mode-stats/version/latest", }; const methodology = { @@ -64,6 +66,13 @@ const adapter: Adapter = { methodology, }, }, + [CHAIN.MODE]: { + fetch: graphs(CHAIN.MODE), + start: 1720627435, + meta: { + methodology, + }, + } }, }; From 95babb2f986e612158aefe751bd22e42275807c6 Mon Sep 17 00:00:00 2001 From: daedboi <87483308+daedboi@users.noreply.github.com> Date: Sat, 17 Aug 2024 13:35:37 +0300 Subject: [PATCH 1187/1590] Add historical OI + Freestyle volume for BMX --- dexs/bmx/index.ts | 178 +++++++++++++++++++++++++++++++++++++++++++--- fees/bmx.ts | 15 ++-- 2 files changed, 175 insertions(+), 18 deletions(-) diff --git a/dexs/bmx/index.ts b/dexs/bmx/index.ts index 8ea9c5bab3..d4d8985683 100644 --- a/dexs/bmx/index.ts +++ b/dexs/bmx/index.ts @@ -1,14 +1,33 @@ import request, { gql } from "graphql-request"; -import { BreakdownAdapter, Fetch } from "../../adapters/types"; +import { + BreakdownAdapter, + Fetch, + FetchResultVolume, +} from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import BigNumber from "bignumber.js"; +const ONE_DAY_IN_SECONDS = 60 * 60 * 24; +const toString = (x: BigNumber) => { + if (x.isEqualTo(0)) return undefined; + return x.toString(); +}; + +const startTimestamps: { [chain: string]: number } = { + [CHAIN.BASE]: 1694304000, + [CHAIN.MODE]: 1720627435, +}; const endpoints: { [key: string]: string } = { [CHAIN.BASE]: "https://api.studio.thegraph.com/query/71696/bmx-base-stats/version/latest", [CHAIN.MODE]: "https://api.studio.thegraph.com/query/42444/bmx-mode-stats/version/latest", }; +const freestyleEndpoints: { [key: string]: string } = { + [CHAIN.BASE]: + "https://api.studio.thegraph.com/query/62454/analytics_base_8_2/version/latest", +}; const historicalDataSwap = gql` query get_volume($period: String!, $id: String!) { @@ -17,7 +36,6 @@ const historicalDataSwap = gql` } } `; - const historicalDataDerivatives = gql` query get_volume($period: String!, $id: String!) { volumeStats(where: { period: $period, id: $id }) { @@ -26,6 +44,39 @@ const historicalDataDerivatives = gql` } } `; +const historicalOI = gql` + query get_trade_stats($period: String!, $id: String!) { + tradingStats(where: { period: $period, id: $id }) { + id + longOpenInterest + shortOpenInterest + } + } +`; +const freestyleQuery = gql` + query stats($from: String!, $to: String!) { + dailyHistories( + where: { + timestamp_gte: $from + timestamp_lte: $to + accountSource: "0x6D63921D8203044f6AbaD8F346d3AEa9A2719dDD" + } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + totalHistories( + where: { accountSource: "0x6D63921D8203044f6AbaD8F346d3AEa9A2719dDD" } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + } +`; interface IGraphResponse { volumeStats: Array<{ @@ -36,6 +87,27 @@ interface IGraphResponse { swap: string; }>; } +interface IGraphResponseOI { + tradingStats: Array<{ + id: string; + longOpenInterest: string; + shortOpenInterest: string; + }>; +} +interface IGraphResponseFreestyle { + dailyHistories: Array<{ + tiemstamp: string; + platformFee: string; + accountSource: string; + tradeVolume: string; + }>; + totalHistories: Array<{ + tiemstamp: string; + platformFee: string; + accountSource: string; + tradeVolume: BigNumber; + }>; +} const getFetch = (query: string) => @@ -52,9 +124,41 @@ const getFetch = id: "total", period: "total", }); + let dailyOpenInterest = 0; + let dailyLongOpenInterest = 0; + let dailyShortOpenInterest = 0; + + if (query === historicalDataDerivatives) { + const tradingStats: IGraphResponseOI = await request( + endpoints[chain], + historicalOI, + { + id: String(dayTimestamp) + ":daily", + period: "daily", + } + ); + dailyOpenInterest = + Number(tradingStats.tradingStats[0].longOpenInterest) + + Number(tradingStats.tradingStats[0].shortOpenInterest); + dailyLongOpenInterest = Number( + tradingStats.tradingStats[0].longOpenInterest + ); + dailyShortOpenInterest = Number( + tradingStats.tradingStats[0].shortOpenInterest + ); + } return { timestamp: dayTimestamp, + dailyLongOpenInterest: dailyLongOpenInterest + ? String(dailyLongOpenInterest * 10 ** -30) + : undefined, + dailyShortOpenInterest: dailyShortOpenInterest + ? String(dailyShortOpenInterest * 10 ** -30) + : undefined, + dailyOpenInterest: dailyOpenInterest + ? String(dailyOpenInterest * 10 ** -30) + : undefined, dailyVolume: dailyData.volumeStats.length == 1 ? String( @@ -80,18 +184,70 @@ const getFetch = }; }; +const fetchFreestyleVolume = + (query: string) => + (chain: string): Fetch => + async (timestamp: number): Promise => { + const response: IGraphResponseFreestyle = await request( + freestyleEndpoints[chain], + query, + { + from: String(timestamp - ONE_DAY_IN_SECONDS), + to: String(timestamp), + } + ); + + let dailyVolume = new BigNumber(0); + let totalVolume = new BigNumber(0); + + response.dailyHistories.forEach((data) => { + dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); + }); + response.totalHistories.forEach((data) => { + totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); + }); + + dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); + totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); + + const _dailyVolume = toString(dailyVolume); + const _totalVolume = toString(totalVolume); + + const dayTimestamp = getUniqStartOfTodayTimestamp( + new Date(timestamp * 1000) + ); + + return { + timestamp: dayTimestamp, + dailyVolume: _dailyVolume ?? "0", + totalVolume: _totalVolume ?? "0", + }; + }; + const adapter: BreakdownAdapter = { breakdown: { - swap: { - [CHAIN.BASE]: { - fetch: getFetch(historicalDataSwap)(CHAIN.BASE), - start: 1694304000, - }, - }, - derivatives: { + swap: Object.keys(endpoints).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: getFetch(historicalDataSwap)(chain), + start: startTimestamps[chain], + }, + }; + }, {}), + "derivatives-classic": Object.keys(endpoints).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: getFetch(historicalDataDerivatives)(chain), + start: startTimestamps[chain], + }, + }; + }, {}), + "derivatives-freestyle": { [CHAIN.BASE]: { - fetch: getFetch(historicalDataDerivatives)(CHAIN.BASE), - start: 1694304000, + fetch: fetchFreestyleVolume(freestyleQuery)(CHAIN.BASE), + start: 1714681913, }, }, }, diff --git a/fees/bmx.ts b/fees/bmx.ts index aa68412672..42a7f97c46 100644 --- a/fees/bmx.ts +++ b/fees/bmx.ts @@ -1,6 +1,7 @@ import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; +import type { FetchV2 } from "../adapters/types" import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints: { [key: string]: string } = { @@ -20,8 +21,8 @@ const methodology = { "Revenue is 40% of all collected fees, which are distributed to BMX/wBLT LP stakers and BMX stakers", }; -const graphs = (chain: string) => async (timestamp: number) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); +const graphs: FetchV2 = async ({ chain, endTimestamp }) => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(endTimestamp); const searchTimestamp = todaysTimestamp + ":daily"; const graphQuery = gql`{ @@ -47,27 +48,27 @@ const graphs = (chain: string) => async (timestamp: number) => { const finalUserFee = userFee / 1e30; return { - timestamp, + endTimestamp, dailyFees: finalDailyFee.toString(), dailyUserFees: finalUserFee.toString(), dailyRevenue: (finalDailyFee * 0.4).toString(), - dailyHoldersRevenue: (finalDailyFee * 0.1).toString(), + dailyHoldersRevenue: (finalDailyFee * 0.4).toString(), dailySupplySideRevenue: (finalDailyFee * 0.6).toString(), }; }; const adapter: Adapter = { - version: 1, + version: 2, adapter: { [CHAIN.BASE]: { - fetch: graphs(CHAIN.BASE), + fetch: graphs, start: 1694304000, meta: { methodology, }, }, [CHAIN.MODE]: { - fetch: graphs(CHAIN.MODE), + fetch: graphs, start: 1720627435, meta: { methodology, From c8123fe7ec746fdaa4f339f1a8f4e94883b4fa97 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 17 Aug 2024 17:05:13 +0100 Subject: [PATCH 1188/1590] add sunpump --- fees/sunpump.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 fees/sunpump.ts diff --git a/fees/sunpump.ts b/fees/sunpump.ts new file mode 100644 index 0000000000..ef9f9ff592 --- /dev/null +++ b/fees/sunpump.ts @@ -0,0 +1,25 @@ +import { Adapter, FetchOptions, } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.TRON]: { + fetch: (async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const logs = await options.getLogs({ + targets: ['0x43d0a427d390301e84e46896ae980d35ecdaa2ae'], + eventAbi: "event TRXReceived(address indexed from,uint256 amount)", + }) + logs.map((tx: any) => { + dailyFees.addGasToken(tx.amount) + }) + return { dailyFees, dailyRevenue: dailyFees, } + }) as any, + start: 0 + }, + }, + +} + +export default adapter; From a013885d082d0e7cb17b217eaf428a99b7991d3e Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 17 Aug 2024 17:05:33 +0100 Subject: [PATCH 1189/1590] add helio --- fees/helio.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 fees/helio.ts diff --git a/fees/helio.ts b/fees/helio.ts new file mode 100644 index 0000000000..34d5ecbdda --- /dev/null +++ b/fees/helio.ts @@ -0,0 +1,45 @@ +/* +Example swap tx: https://solscan.io/tx/4ZNV9hKmmRch2wiQvoQWuVttTADC38Cf3bSVkyEp8G9uQ1cAzyGgiR6SdPCgWo6sgBVBUuAgYnECrVJ6iZSZtmSM +Helio Fee Account: FudPMePeNqmnjMX19zEKDfGXpbp6HAdW6ZGprB5gYRTZ +Dao Fee Account: JBGUGPmKUEHCpxGGoMowQxoV4c7HyqxEnyrznVPxftqk +*/ + +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { queryDune } from "../helpers/dune"; + +const solanaDecimals = { + EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: 6, + Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB: 6 +} as any + +const fetch: any = async (options: FetchOptions) => { + const receivedTokens = (await queryDune("3996080", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: 'FudPMePeNqmnjMX19zEKDfGXpbp6HAdW6ZGprB5gYRTZ' + })) as any[] + const dailyFees = options.createBalances(); + receivedTokens.forEach(row=>{ + if(!solanaDecimals[row.token_mint_address]){ + throw new Error("unsupported token") + } + dailyFees.add(row.token_mint_address, (row.received * 10**solanaDecimals[row.token_mint_address]).toFixed(0)) + }) + dailyFees.resizeBy(1.11) + + return { dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees.clone(0.1) } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.SOLANA]: { + fetch: fetch, + start: 0, + }, + }, + isExpensiveAdapter: true +}; + +export default adapter; From ad05cf8d9464498b765a8c92bd8af943be12f6e4 Mon Sep 17 00:00:00 2001 From: "andreapn.eth" Date: Sat, 17 Aug 2024 23:24:02 +0700 Subject: [PATCH 1190/1590] DackieSwap update endpoint subgraph --- dexs/dackieswap-v2/index.ts | 4 ++-- dexs/dackieswap/index.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dexs/dackieswap-v2/index.ts b/dexs/dackieswap-v2/index.ts index 7d8aa9092a..51e8e9048c 100644 --- a/dexs/dackieswap-v2/index.ts +++ b/dexs/dackieswap-v2/index.ts @@ -10,8 +10,8 @@ const endpoints: ChainEndpoints = { [CHAIN.OPTIMISM]: "https://api.studio.thegraph.com/query/50473/v2-optimism/version/latest", [CHAIN.ARBITRUM]: "https://api.studio.thegraph.com/query/50473/v2-arbitrum/version/latest", [CHAIN.BLAST]: "https://api.studio.thegraph.com/query/50473/v2-blast/version/latest", - [CHAIN.MODE]: "https://graph.dackieswap.xyz/mode/subgraphs/name/v2-mode", - [CHAIN.XLAYER]: "https://graph.dackieswap.xyz/xlayer/subgraphs/name/v2-xlayer", + [CHAIN.MODE]: "https://api.studio.thegraph.com/query/50473/v2-mode/version/latest", + [CHAIN.XLAYER]: "https://api.studio.thegraph.com/query/50473/v2-xlayer/version/latest", }; // Fetch function to query the subgraphs diff --git a/dexs/dackieswap/index.ts b/dexs/dackieswap/index.ts index 981e9e22be..4c41209576 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -13,9 +13,9 @@ const v3Endpoint = { [CHAIN.BLAST]: "https://api.studio.thegraph.com/query/50473/v3-blast/version/latest", [CHAIN.MODE]: - "https://graph.dackieswap.xyz/mode/subgraphs/name/v3-mode", + "https://api.studio.thegraph.com/query/50473/v3-mode/version/latest", [CHAIN.XLAYER]: - "https://graph.dackieswap.xyz/xlayer/subgraphs/name/v3-xlayer", + "https://api.studio.thegraph.com/query/50473/v3-xlayer/version/latest", }; const VOLUME_USD = "volumeUSD"; From 7059f429cbf5c64c70ba04c78f805b3faace4b15 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 17 Aug 2024 17:55:59 +0100 Subject: [PATCH 1191/1590] add dextools --- fees/dexscreener.ts | 3 +- fees/dextools.ts | 92 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 fees/dextools.ts diff --git a/fees/dexscreener.ts b/fees/dexscreener.ts index d3e307683a..4081c79aa8 100644 --- a/fees/dexscreener.ts +++ b/fees/dexscreener.ts @@ -46,7 +46,8 @@ const adapter: Adapter = { fetch: sol, start: 0 } - }) + }), + isExpensiveAdapter: true } export default adapter; \ No newline at end of file diff --git a/fees/dextools.ts b/fees/dextools.ts new file mode 100644 index 0000000000..33e2484eed --- /dev/null +++ b/fees/dextools.ts @@ -0,0 +1,92 @@ +/* +Payment Transaction Link (etherscan,bscscan...) +* +Fast Track Update Fee (for tokens deployed on all chains): + +The fee for a fast track update can be paid using either 1500 $DEXT, 0.4 $ETH, or 2 $BNB. +Please make the payment exclusively to this address: 0x997Cc123cF292F46E55E6E63e806CD77714DB70f +Submit the form immediately after payment to avoid losing its validity. +Fast Track Update Fee ONLY for tokens deployed on Solana: + +The discounted fee for a fast track update can be paid using 5 $SOL. +Please make the payment exclusively to this address: GZ7GGigCJF5AUDky2kts5GAsHwdfkzuFXochCQy3cxfW + +Ensure all information in the form is accurate before submitting, we do not issue refunds. Do NOT send from an exchange. For a smoother update, it is advised to send funds from the token's deployer. + +Correct: https://etherscan.io/tx/0x123.... +Not correct: 0x123.... + +🔥 🔥 🔥 Get 50% discount on your update for tokens deployed on BASE Blockchain for a limited time: +The fee for a fast track update on BASE can be paid using either 750 $DEXT, 0.2 $ETH, or 1 $BNB. +Please make the payment exclusively to this address: 0x997Cc123cF292F46E55E6E63e806CD77714DB70f +Submit the form immediately after payment to avoid losing its validity. + +🔥 🔥 🔥 Get 70% discount on your update for tokens deployed on TON and TRON Blockchain for a limited time: +The fee for a fast track update on TON can be paid using 60 $TON, 0.12 $ETH, 450 $DEXT, or 0.6 $BNB. +Please make the payment exclusively to this address (ERC20 payments to the ERC20 address above): +UQC2-PvRTlqkHfeUdDx80rVRnaW7WoNWlpq4LBx7oWVhKisC + +Submit the form immediately after payment to avoid losing its validity. +The discount is valid only if applied at payment and while it is displayed in the form; no refunds for overpayments or unused discounts! + +For Tokens created with https://creator.dextools.io, enter "//TOKENCREATOR//" as the payment code. Entering the token creator's payment code without creating the token through the creator will mark your update request as spam. +*/ + +import { Adapter, FetchOptions } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { queryDune } from "../helpers/dune"; +import { addTokensReceived } from '../helpers/token'; + +const tokens = { + ethereum: [ + "0xfb7b4564402e5500db5bb6d63ae671302777c75a", // DEXT + ], + bsc: [ + "0xe91a8d2c584ca93c7405f15c22cdfe53c29896e3", // DEXT + ], + base: [] +} as any + +const evm = async (options: FetchOptions) => { + const dailyFees = await addTokensReceived({ options, tokens: tokens[options.chain], target: '0x997Cc123cF292F46E55E6E63e806CD77714DB70f' }) + // add eth/bnb received + + return { + dailyFees, + dailyRevenue: dailyFees, + } +} + +const sol = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const value = (await queryDune("3521814", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: 'GZ7GGigCJF5AUDky2kts5GAsHwdfkzuFXochCQy3cxfW' + })); + dailyFees.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); + return { + dailyFees, + dailyRevenue: dailyFees, + } +} + +const adapter: Adapter = { + version: 2, + isExpensiveAdapter: true, + adapter: [CHAIN.ETHEREUM, CHAIN.BASE, CHAIN.BSC].reduce((all, chain) => ({ + ...all, + [chain]: { + fetch: evm, + start: 0, + } + }), { + [CHAIN.SOLANA]: { + fetch: sol, + start: 0 + } + }) + // missing tron and ton +} + +export default adapter; \ No newline at end of file From 1ae380aa6384a8e9fec445241338fbdb38ee9d8b Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 17 Aug 2024 22:23:53 +0100 Subject: [PATCH 1192/1590] add manifold --- fees/manifold.ts | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 fees/manifold.ts diff --git a/fees/manifold.ts b/fees/manifold.ts new file mode 100644 index 0000000000..780aa39a5e --- /dev/null +++ b/fees/manifold.ts @@ -0,0 +1,58 @@ +import { Adapter, FetchOptions } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { nullAddress } from "../helpers/token"; + +// Found by looking at contracts deployed by 0xa8863bf1c8933f649e7b03eb72109e5e187505ea +// Yes, i manually checked hundreds of txs T_T + +const CREATE2_CONTRACTS = ["0x1eb73fee2090fb1c20105d5ba887e3c3ba14a17e", "0x04ba6cf3c5aa6d4946f5b7f7adf111012a9fac65", "0x23aa05a271debffaa3d75739af5581f744b326e4", "0x26bbea7803dcac346d5f5f135b57cf2c752a02be"] +const contracts = { + ethereum: ["0x3b8c2feb0f4953870f825df64322ec967aa26b8c", "0xDb8d79C775452a3929b86ac5DEaB3e9d38e1c006", "0x26bbea7803dcac346d5f5f135b57cf2c752a02be", "0x23aa05a271debffaa3d75739af5581f744b326e4"], + optimism: CREATE2_CONTRACTS, + base: CREATE2_CONTRACTS, + +} as any + + +const evm = async ({ fromApi, toApi, chain, createBalances }: FetchOptions) => { + const pre = await fromApi.sumTokens({ + token: nullAddress, + owners: contracts[chain] + }) + const post = await toApi.sumTokens({ + token: nullAddress, + owners: contracts[chain] + }) as any + const dailyFees = createBalances(); + dailyFees.addBalances(post) + dailyFees.subtract(pre) + if(Object.values(dailyFees)[0]<0){ + /* + When a new NFT is minted, a fee gets paid, the fee changes based on whether the NFT was minted with no whitelist or with a merkle whitelist + However there's no event emitted that can be used to differentiate those two cases, so its impossible to track exact fees via events, only upper and lower bounds + Because of that, the best way to track fees would be to track the difference in ETH balance for the contract and then subtract any withdrawal from the team + But withdrawals don't emit any event + So, given that withdrawals are very rare, what we do is just track the balance difference and when there's a withdrawal we error out so no data is produced + */ + throw new Error("negative rev") + } + + return { + dailyFees: dailyFees, + dailyRevenue: dailyFees, + } +} + +const adapter: Adapter = { + version: 2, + isExpensiveAdapter: true, + adapter: Object.keys(contracts).reduce((all, chain) => ({ + ...all, + [chain]: { + fetch: evm, + start: 0, + } + }), {}) +} + +export default adapter; \ No newline at end of file From 66dc18620e89561da8a95ee446beb778f398b105 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 17 Aug 2024 22:35:45 +0100 Subject: [PATCH 1193/1590] clean --- fees/manifold.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/fees/manifold.ts b/fees/manifold.ts index 780aa39a5e..be502570c0 100644 --- a/fees/manifold.ts +++ b/fees/manifold.ts @@ -1,5 +1,4 @@ import { Adapter, FetchOptions } from "../adapters/types"; -import { CHAIN } from "../helpers/chains"; import { nullAddress } from "../helpers/token"; // Found by looking at contracts deployed by 0xa8863bf1c8933f649e7b03eb72109e5e187505ea @@ -10,7 +9,6 @@ const contracts = { ethereum: ["0x3b8c2feb0f4953870f825df64322ec967aa26b8c", "0xDb8d79C775452a3929b86ac5DEaB3e9d38e1c006", "0x26bbea7803dcac346d5f5f135b57cf2c752a02be", "0x23aa05a271debffaa3d75739af5581f744b326e4"], optimism: CREATE2_CONTRACTS, base: CREATE2_CONTRACTS, - } as any From 8ff83e2eddbe6f5a2cc5438362bf80e738f66cd6 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sat, 17 Aug 2024 23:48:42 +0100 Subject: [PATCH 1194/1590] add stablecoins + minor fix --- fees/circle.ts | 29 +++++++++++++++++++++++++++++ fees/manifold.ts | 1 - fees/tether.ts | 29 +++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 fees/circle.ts create mode 100644 fees/tether.ts diff --git a/fees/circle.ts b/fees/circle.ts new file mode 100644 index 0000000000..70ccf159dd --- /dev/null +++ b/fees/circle.ts @@ -0,0 +1,29 @@ +import { Adapter, FetchOptions } from "../adapters/types"; + +const adapter: Adapter = { + version: 2, + adapter: { + ethereum: { + fetch: async ({ fromTimestamp, createBalances }: FetchOptions) => { + const dailyFees = createBalances() + + // Based on https://www.circle.com/en/transparency + if(fromTimestamp > 1719709261){ + let annualYield = 0 + // per the last report, there's: + annualYield += 11.2e9*5.287/100 // 11.2bn in tbills + annualYield += 17.1e9*5.35/100 // in repos, which should be earning SOFR + dailyFees.addCGToken("usd-coin", annualYield/365) + } + + return { + dailyFees, + dailyRevenue: dailyFees + } + }, + start: 0 + } + } +} + +export default adapter; \ No newline at end of file diff --git a/fees/manifold.ts b/fees/manifold.ts index be502570c0..09b4927d87 100644 --- a/fees/manifold.ts +++ b/fees/manifold.ts @@ -43,7 +43,6 @@ const evm = async ({ fromApi, toApi, chain, createBalances }: FetchOptions) => { const adapter: Adapter = { version: 2, - isExpensiveAdapter: true, adapter: Object.keys(contracts).reduce((all, chain) => ({ ...all, [chain]: { diff --git a/fees/tether.ts b/fees/tether.ts new file mode 100644 index 0000000000..b6205798b8 --- /dev/null +++ b/fees/tether.ts @@ -0,0 +1,29 @@ +import { Adapter, FetchOptions } from "../adapters/types"; + +const adapter: Adapter = { + version: 2, + adapter: { + ethereum: { + fetch: async ({ fromTimestamp, createBalances }: FetchOptions) => { + const dailyFees = createBalances() + + // Based on https://tether.to/en/transparency/?tab=reports + if(fromTimestamp > 1719709261){ + let annualYield = 0 + // per the last report, there's: + annualYield += 80948e6*5.287/100 // 80.9bn in treasury bills with a maturity of less tham 90d, so picking the lowest yield between 1/2/3 mo treasurys + annualYield += 11.2e9*5.35/100 // 11.2bn in repos, which should be earning SOFR + dailyFees.addCGToken("tether", annualYield/365) + } + + return { + dailyFees, + dailyRevenue: dailyFees + } + }, + start: 0 + } + } +} + +export default adapter; \ No newline at end of file From af4672ba6bfbc5c0d593731fd6b9ec7bc6a64031 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 18 Aug 2024 01:20:22 +0100 Subject: [PATCH 1195/1590] add thegraph --- fees/dexscreener.ts | 1 + fees/thegraph.ts | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 fees/thegraph.ts diff --git a/fees/dexscreener.ts b/fees/dexscreener.ts index 4081c79aa8..1bd67e033d 100644 --- a/fees/dexscreener.ts +++ b/fees/dexscreener.ts @@ -18,6 +18,7 @@ const eth = async (options: FetchOptions) => { } } +// TODO: check whether 5qR17nnyyBjoHPiGiAD4ZHFCSJixebJCYymArGgZiDnh was an older address where they received payments const sol = async (options: FetchOptions) => { const dailyFees = options.createBalances(); const value = (await queryDune("3986808", { diff --git a/fees/thegraph.ts b/fees/thegraph.ts new file mode 100644 index 0000000000..25b83b3e80 --- /dev/null +++ b/fees/thegraph.ts @@ -0,0 +1,25 @@ +import { Adapter, FetchOptions, } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: (async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const logs = await options.getLogs({ + targets: ['0x1B07D3344188908Fb6DEcEac381f3eE63C48477a'], + eventAbi: "event TokensPulled(address indexed user,uint256 amount)", + }) + logs.map((tx: any) => { + dailyFees.add("0x9623063377ad1b27544c965ccd7342f7ea7e88c7", tx.amount) + }) + return { dailyFees, dailyRevenue: dailyFees, } + }) as any, + start: 0 + }, + }, + +} + +export default adapter; From 6844bd3beb01b693650d538fe1110ee7138e8810 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 18 Aug 2024 02:37:11 +0100 Subject: [PATCH 1196/1590] dextools add native transfers --- fees/dextools.ts | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/fees/dextools.ts b/fees/dextools.ts index 33e2484eed..8935380313 100644 --- a/fees/dextools.ts +++ b/fees/dextools.ts @@ -35,7 +35,7 @@ For Tokens created with https://creator.dextools.io, enter "//TOKENCREATOR//" as import { Adapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { queryDune } from "../helpers/dune"; -import { addTokensReceived } from '../helpers/token'; +import { addTokensReceived, nullAddress } from '../helpers/token'; const tokens = { ethereum: [ @@ -47,9 +47,23 @@ const tokens = { base: [] } as any +const tableName = { + bsc: "bnb", + ethereum: "ethereum", + base: "base" +} as any + const evm = async (options: FetchOptions) => { - const dailyFees = await addTokensReceived({ options, tokens: tokens[options.chain], target: '0x997Cc123cF292F46E55E6E63e806CD77714DB70f' }) - // add eth/bnb received + const receiverWallet = '0x997Cc123cF292F46E55E6E63e806CD77714DB70f' + const dailyFees = await addTokensReceived({ options, tokens: tokens[options.chain], target: receiverWallet }) + const query = `select sum(value) as received from ${tableName[options.chain]}.transactions + where to = ${receiverWallet} + AND block_time >= from_unixtime(${options.startTimestamp}) + AND block_time <= from_unixtime(${options.endTimestamp})` + const nativeTransfers = await queryDune('3996608', { + fullQuery: query, + }) + dailyFees.add(nullAddress, nativeTransfers[0].received) return { dailyFees, From 6c95cf41f49332b4de665f146237755610fd4dff Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 18 Aug 2024 13:03:16 +0100 Subject: [PATCH 1197/1590] fix sideshift --- fees/sideshift.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/sideshift.ts b/fees/sideshift.ts index 8047168b68..63a93e93f5 100644 --- a/fees/sideshift.ts +++ b/fees/sideshift.ts @@ -16,9 +16,9 @@ const fetchFees = async (options: FetchOptions) => { dailyFees.add(token, Number(log.data)) }) const holderRevenue = dailyFees.clone() - holderRevenue.resizeBy(4) + dailyFees.resizeBy(4) - return { dailyFees, dailyRevenue: holderRevenue, holdersRevenue: holderRevenue } + return { dailyFees, dailyRevenue: dailyFees, holdersRevenue: holderRevenue } } const adapters: SimpleAdapter = { version: 2, From 8cc238a2f85410a703270347f597265c50c30ce9 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 18 Aug 2024 13:28:09 +0000 Subject: [PATCH 1198/1590] fix skip unknow token --- fees/helio.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/helio.ts b/fees/helio.ts index 34d5ecbdda..c31ecca717 100644 --- a/fees/helio.ts +++ b/fees/helio.ts @@ -22,7 +22,7 @@ const fetch: any = async (options: FetchOptions) => { const dailyFees = options.createBalances(); receivedTokens.forEach(row=>{ if(!solanaDecimals[row.token_mint_address]){ - throw new Error("unsupported token") + return; // skip unknown tokens } dailyFees.add(row.token_mint_address, (row.received * 10**solanaDecimals[row.token_mint_address]).toFixed(0)) }) From cf4fd4802552be2972adfdd3a0b655820804f555 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 18 Aug 2024 14:26:06 +0000 Subject: [PATCH 1199/1590] block volume less than 0 --- dexs/ref-finance/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dexs/ref-finance/index.ts b/dexs/ref-finance/index.ts index 65adbb8c6d..cc258c57fe 100644 --- a/dexs/ref-finance/index.ts +++ b/dexs/ref-finance/index.ts @@ -16,6 +16,10 @@ const adapter: SimpleAdapter = { fetch: async(ts)=>{ const data = await httpGet(api) const cleanTimestamp = getUniqStartOfTodayTimestamp(new Date(ts * 1000)) + const dailyVolume = data.find((t:any)=>dateToTs(t.date) === cleanTimestamp)?.volume + if (!dailyVolume || Number(dailyVolume) < 0 || Number((dailyVolume)) > 1_000_000_000) { + throw new Error(`Invalid daily volume: ${dailyVolume}`) + } return { timestamp: cleanTimestamp, dailyVolume: data.find((t:any)=>dateToTs(t.date) === cleanTimestamp)?.volume @@ -25,4 +29,4 @@ const adapter: SimpleAdapter = { } }; -export default adapter; \ No newline at end of file +export default adapter; From 88a53b6306da22991c0cecc196ac9f0d802e97fd Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 18 Aug 2024 15:24:17 +0000 Subject: [PATCH 1200/1590] fix wrong set aadapter --- dexs/vertex-protocol/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/vertex-protocol/index.ts b/dexs/vertex-protocol/index.ts index edfeed8c5c..2291397853 100644 --- a/dexs/vertex-protocol/index.ts +++ b/dexs/vertex-protocol/index.ts @@ -140,7 +140,7 @@ const adapter: BreakdownAdapter = { start: 1718841600, }, [CHAIN.SEI]: { - fetch: fetchSpots, + fetch: fetchPerps, start: seiStartTime, } }, From 5b9bc9c0f9077652cf5a1ce0545384df9274e684 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 18 Aug 2024 16:35:41 +0000 Subject: [PATCH 1201/1590] skip map work --- fees/cellula/index.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/fees/cellula/index.ts b/fees/cellula/index.ts index b55a32f585..abab1bf826 100644 --- a/fees/cellula/index.ts +++ b/fees/cellula/index.ts @@ -20,7 +20,7 @@ const adapter: Adapter = { const dailyFees = createBalances() // ✅ // Revenue - const dailyRevenue = createBalances() // ✅ + const dailyRevenue = createBalances() // ✅ const dailyProtocolRevenue = createBalances() // 70% + Food const dailyHoldersRevenue = createBalances() // 5% const dailySupplySideRevenue = createBalances() // 25% @@ -50,12 +50,15 @@ const adapter: Adapter = { "604800": "11900000000000000", } buyFoodLogs.map(e => { + if (!workTimePrice[e.workTime]) { + return + } dailyFees.addGasToken(workTimePrice[e.workTime]) dailyRevenue.addGasToken(workTimePrice[e.workTime]) dailyProtocolRevenue.addGasToken(workTimePrice[e.workTime]) }) return { - dailyFees, + dailyFees, dailyRevenue, dailyProtocolRevenue, dailyHoldersRevenue, dailySupplySideRevenue } }) as FetchV2, @@ -68,4 +71,4 @@ const adapter: Adapter = { version: 2, } -export default adapter; \ No newline at end of file +export default adapter; From fafedec9a433619cbd13582abdeb7416959c76b4 Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Sun, 18 Aug 2024 20:00:11 +0100 Subject: [PATCH 1202/1590] Update sideshift.ts --- fees/sideshift.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/sideshift.ts b/fees/sideshift.ts index 63a93e93f5..47238f1e56 100644 --- a/fees/sideshift.ts +++ b/fees/sideshift.ts @@ -18,7 +18,7 @@ const fetchFees = async (options: FetchOptions) => { const holderRevenue = dailyFees.clone() dailyFees.resizeBy(4) - return { dailyFees, dailyRevenue: dailyFees, holdersRevenue: holderRevenue } + return { dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: holderRevenue } } const adapters: SimpleAdapter = { version: 2, From 04d1097d7ccbbdb05f53309391d64ff17493b95b Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 18 Aug 2024 22:03:19 +0100 Subject: [PATCH 1203/1590] soltradingbot --- fees/stbot.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/stbot.ts b/fees/stbot.ts index 55b49fdb8b..ad7f57819c 100644 --- a/fees/stbot.ts +++ b/fees/stbot.ts @@ -4,7 +4,7 @@ import { queryDune } from "../helpers/dune"; const fetch: any = async (options: FetchOptions) => { const dailyFees = options.createBalances(); - const value = (await queryDune("3929011", { + const value = (await queryDune("3997872", { start: options.startTimestamp, end: options.endTimestamp, })); From bf265c2c42492b18fa69e4afadfcf80ae5af5afd Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 18 Aug 2024 22:15:10 +0100 Subject: [PATCH 1204/1590] fix --- fees/manifold.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/manifold.ts b/fees/manifold.ts index 09b4927d87..28fa094b81 100644 --- a/fees/manifold.ts +++ b/fees/manifold.ts @@ -24,7 +24,7 @@ const evm = async ({ fromApi, toApi, chain, createBalances }: FetchOptions) => { const dailyFees = createBalances(); dailyFees.addBalances(post) dailyFees.subtract(pre) - if(Object.values(dailyFees)[0]<0){ + if(Number(Object.values(dailyFees.getBalances())[0])<0){ /* When a new NFT is minted, a fee gets paid, the fee changes based on whether the NFT was minted with no whitelist or with a merkle whitelist However there's no event emitted that can be used to differentiate those two cases, so its impossible to track exact fees via events, only upper and lower bounds From 0c79261c803c49cb5a1c2796d707f65e81de4aef Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 18 Aug 2024 23:12:09 +0100 Subject: [PATCH 1205/1590] fix negative rev --- fees/dextools.ts | 16 +++------------- fees/manifold.ts | 26 ++++++++++++++++---------- helpers/dune.ts | 13 +++++++++++++ 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/fees/dextools.ts b/fees/dextools.ts index 8935380313..19d24399e6 100644 --- a/fees/dextools.ts +++ b/fees/dextools.ts @@ -34,7 +34,7 @@ For Tokens created with https://creator.dextools.io, enter "//TOKENCREATOR//" as import { Adapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { queryDune } from "../helpers/dune"; +import { queryDune, queryDuneSql } from "../helpers/dune"; import { addTokensReceived, nullAddress } from '../helpers/token'; const tokens = { @@ -47,22 +47,12 @@ const tokens = { base: [] } as any -const tableName = { - bsc: "bnb", - ethereum: "ethereum", - base: "base" -} as any - const evm = async (options: FetchOptions) => { const receiverWallet = '0x997Cc123cF292F46E55E6E63e806CD77714DB70f' const dailyFees = await addTokensReceived({ options, tokens: tokens[options.chain], target: receiverWallet }) - const query = `select sum(value) as received from ${tableName[options.chain]}.transactions + const nativeTransfers = await queryDuneSql(options, `select sum(value) as received from CHAIN.transactions where to = ${receiverWallet} - AND block_time >= from_unixtime(${options.startTimestamp}) - AND block_time <= from_unixtime(${options.endTimestamp})` - const nativeTransfers = await queryDune('3996608', { - fullQuery: query, - }) + AND TIME_RANGE`) dailyFees.add(nullAddress, nativeTransfers[0].received) return { diff --git a/fees/manifold.ts b/fees/manifold.ts index 28fa094b81..e2aea6b720 100644 --- a/fees/manifold.ts +++ b/fees/manifold.ts @@ -1,27 +1,28 @@ import { Adapter, FetchOptions } from "../adapters/types"; +import { queryDune, queryDuneSql } from "../helpers/dune"; import { nullAddress } from "../helpers/token"; // Found by looking at contracts deployed by 0xa8863bf1c8933f649e7b03eb72109e5e187505ea // Yes, i manually checked hundreds of txs T_T -const CREATE2_CONTRACTS = ["0x1eb73fee2090fb1c20105d5ba887e3c3ba14a17e", "0x04ba6cf3c5aa6d4946f5b7f7adf111012a9fac65", "0x23aa05a271debffaa3d75739af5581f744b326e4", "0x26bbea7803dcac346d5f5f135b57cf2c752a02be"] +const CREATE2_CONTRACTS = ["0x1eb73fee2090fb1c20105d5ba887e3c3ba14a17e", "0x04ba6cf3c5aa6d4946f5b7f7adf111012a9fac65", "0x23aa05a271debffaa3d75739af5581f744b326e4", "0x26bbea7803dcac346d5f5f135b57cf2c752a02be", "0xfc29813beeb3c7395c7a5f8dfc3352491d5ea0e2"] const contracts = { - ethereum: ["0x3b8c2feb0f4953870f825df64322ec967aa26b8c", "0xDb8d79C775452a3929b86ac5DEaB3e9d38e1c006", "0x26bbea7803dcac346d5f5f135b57cf2c752a02be", "0x23aa05a271debffaa3d75739af5581f744b326e4"], + ethereum: ["0x3b8c2feb0f4953870f825df64322ec967aa26b8c", "0xDb8d79C775452a3929b86ac5DEaB3e9d38e1c006", ...CREATE2_CONTRACTS], // missing old burn redeem and erc721 burn redeem optimism: CREATE2_CONTRACTS, base: CREATE2_CONTRACTS, } as any -const evm = async ({ fromApi, toApi, chain, createBalances }: FetchOptions) => { - const pre = await fromApi.sumTokens({ +const evm = async (options: FetchOptions) => { + const pre = await options.fromApi.sumTokens({ token: nullAddress, - owners: contracts[chain] + owners: contracts[options.chain] }) - const post = await toApi.sumTokens({ + const post = await options.toApi.sumTokens({ token: nullAddress, - owners: contracts[chain] + owners: contracts[options.chain] }) as any - const dailyFees = createBalances(); + const dailyFees = options.createBalances(); dailyFees.addBalances(post) dailyFees.subtract(pre) if(Number(Object.values(dailyFees.getBalances())[0])<0){ @@ -30,9 +31,14 @@ const evm = async ({ fromApi, toApi, chain, createBalances }: FetchOptions) => { However there's no event emitted that can be used to differentiate those two cases, so its impossible to track exact fees via events, only upper and lower bounds Because of that, the best way to track fees would be to track the difference in ETH balance for the contract and then subtract any withdrawal from the team But withdrawals don't emit any event - So, given that withdrawals are very rare, what we do is just track the balance difference and when there's a withdrawal we error out so no data is produced + So, given that withdrawals are very rare, what we do is just track the balance difference and when there's a withdrawal we fetch from traces */ - throw new Error("negative rev") + const nativeTransfers = await queryDuneSql(options, `select sum(value) as withdrawn from CHAIN.traces + where "from" IN (${contracts[options.chain].join(', ')}) + AND to IN (0x93fd235c56964e0ffb49229e8d642c3fd81310a5, 0xfa0f022aac5a1fd99094df8aadb947ce08f79d5b) + AND success = TRUE + AND TIME_RANGE`) + dailyFees.add(nullAddress, nativeTransfers[0].withdrawn) } return { diff --git a/helpers/dune.ts b/helpers/dune.ts index ab0efcb284..d3e3876439 100644 --- a/helpers/dune.ts +++ b/helpers/dune.ts @@ -90,3 +90,16 @@ export const queryDune = async (queryId: string, query_parameters = {}) => { } } } + +const tableName = { + bsc: "bnb", + ethereum: "ethereum", + base: "base" +} as any + +export const queryDuneSql = (options:any, query:string) => { + return queryDune("3996608", { + fullQuery: query.replace("CHAIN", tableName[options.chain]).replace("TIME_RANGE", `block_time >= from_unixtime(${options.startTimestamp}) + AND block_time <= from_unixtime(${options.endTimestamp})`) + }) +} From 76a0fcf433a13a237c2541e899fb1fa0e4ccfa47 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Sun, 18 Aug 2024 23:18:33 +0100 Subject: [PATCH 1206/1590] add address --- fees/manifold.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/manifold.ts b/fees/manifold.ts index e2aea6b720..52a5bbf39e 100644 --- a/fees/manifold.ts +++ b/fees/manifold.ts @@ -35,7 +35,7 @@ const evm = async (options: FetchOptions) => { */ const nativeTransfers = await queryDuneSql(options, `select sum(value) as withdrawn from CHAIN.traces where "from" IN (${contracts[options.chain].join(', ')}) - AND to IN (0x93fd235c56964e0ffb49229e8d642c3fd81310a5, 0xfa0f022aac5a1fd99094df8aadb947ce08f79d5b) + AND to IN (0x93fd235c56964e0ffb49229e8d642c3fd81310a5, 0xfa0f022aac5a1fd99094df8aadb947ce08f79d5b, 0x3a0079197027d80c260f8cd482210fdc48ec51e5) AND success = TRUE AND TIME_RANGE`) dailyFees.add(nullAddress, nativeTransfers[0].withdrawn) From 5b637467ae436e6b6417953c81fe5bbfc06dd3dc Mon Sep 17 00:00:00 2001 From: rasplarry Date: Mon, 19 Aug 2024 11:50:26 +0900 Subject: [PATCH 1207/1590] chore: Update seiyanfun initial timestamp --- dexs/seiyan-fun/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/seiyan-fun/index.ts b/dexs/seiyan-fun/index.ts index aa93c63714..eb0a247378 100644 --- a/dexs/seiyan-fun/index.ts +++ b/dexs/seiyan-fun/index.ts @@ -7,7 +7,7 @@ import { const SEIYAN_FUN_BASE_URL = "https://seiyan.fun/api/public/v1"; const SEI_PACIFIC_CAIP_CHAIN_ID = "cosmos:sei-pacific-1"; -const SEIYAN_FUN_INITIAL_TIMESTAMP = 1722510000; // 2024-08-01 11:00:00 UTC +const SEIYAN_FUN_INITIAL_TIMESTAMP = 1722470400; // 2024-08-01 00:00:00 UTC const buildTradingVolumeUrl = (startAt: number, endAt: number) => `${SEIYAN_FUN_BASE_URL}/trading-volume?caipChainID=${SEI_PACIFIC_CAIP_CHAIN_ID}&startAt=${startAt}&endAt=${endAt}`; From 03ca07f05bd9174903f0d10ba0cbf2bdecec2515 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 19 Aug 2024 04:16:45 +0100 Subject: [PATCH 1208/1590] fix --- fees/manifold.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/manifold.ts b/fees/manifold.ts index 52a5bbf39e..01be640f99 100644 --- a/fees/manifold.ts +++ b/fees/manifold.ts @@ -35,7 +35,7 @@ const evm = async (options: FetchOptions) => { */ const nativeTransfers = await queryDuneSql(options, `select sum(value) as withdrawn from CHAIN.traces where "from" IN (${contracts[options.chain].join(', ')}) - AND to IN (0x93fd235c56964e0ffb49229e8d642c3fd81310a5, 0xfa0f022aac5a1fd99094df8aadb947ce08f79d5b, 0x3a0079197027d80c260f8cd482210fdc48ec51e5) + AND to IN (0x93fd235c56964e0ffb49229e8d642c3fd81310a5, 0xfa0f022aac5a1fd99094df8aadb947ce08f79d5b, 0x3a0079197027d80c260f8cd482210fdc48ec51e5, 0x267bfe2905dccec10cb22115ca1d0b1da11ddad5) AND success = TRUE AND TIME_RANGE`) dailyFees.add(nullAddress, nativeTransfers[0].withdrawn) From 68b2b9dc99d658dd2ae1b844e5e916c2e77992e6 Mon Sep 17 00:00:00 2001 From: unyoungwax Date: Mon, 19 Aug 2024 13:19:05 +0800 Subject: [PATCH 1209/1590] add 4Cast fees adaptor --- fees/4cast/index.ts | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 fees/4cast/index.ts diff --git a/fees/4cast/index.ts b/fees/4cast/index.ts new file mode 100644 index 0000000000..2c4f602cd1 --- /dev/null +++ b/fees/4cast/index.ts @@ -0,0 +1,41 @@ +import { Adapter, FetchOptions, FetchV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { postURL } from "../../utils/fetchURL"; + +interface IData { + dailyFees: string; +} + +const endpoint = "https://www.4cast.win/api/api/platformFees"; + +function createSolBalances(options: FetchOptions, value: string) { + const balances = options.createBalances(); + + balances.addGasToken(Number(value)); + + return balances; +} + +const fetch: FetchV2 = async (options) => { + const data: IData = await postURL(endpoint, { + startTimestamp: options.startTimestamp, + endTimestamp: options.endTimestamp, + }); + + return { + dailyFees: createSolBalances(options, data.dailyFees), + }; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.SOLANA]: { + fetch, + runAtCurrTime: false, + start: 1721174400, + }, + }, +}; + +export default adapter; From 3b0573a261a746bb9a39b2bbe3b987c6a9a04a2e Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 19 Aug 2024 14:25:29 +0900 Subject: [PATCH 1210/1590] update: change endpoint url. --- options/moby/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options/moby/index.ts b/options/moby/index.ts index 9995072e39..055745f83d 100644 --- a/options/moby/index.ts +++ b/options/moby/index.ts @@ -11,7 +11,7 @@ interface IMobyVolumeResponse { // endTime is in ms export const mobyVolumeEndpoint = (endTime: number) => { - return `https://kv6mtyhua5.execute-api.ap-northeast-2.amazonaws.com/prod/getVolumeData?end_time=${endTime}`; + return `https://u63601xvgc.execute-api.ap-northeast-2.amazonaws.com/prod/getVolumeData?end_time=${endTime}`; } export const moby_adapter: SimpleAdapter = { From 49848cd18a5e1e39e0da36fb16dd0260cd614c54 Mon Sep 17 00:00:00 2001 From: MatHermida Date: Mon, 19 Aug 2024 09:35:41 -0300 Subject: [PATCH 1211/1590] edit start date --- dexs/c3-exchange/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/c3-exchange/index.ts b/dexs/c3-exchange/index.ts index fae2cae3a2..33db0459f9 100644 --- a/dexs/c3-exchange/index.ts +++ b/dexs/c3-exchange/index.ts @@ -58,7 +58,7 @@ function adapterConstructor( ...obj, [chain]: { fetch: fetchVolumeFunc, - start: 1688169600, // 2023-7-1 00:00:00 GMT + start: 1688169600, // 1st July 2023, 00:00:00 GMT // runAtCurrTime: false, meta: { methodology: { From d7a50f3d04ff617426ffe9bb43c1eab00c7f4e73 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 19 Aug 2024 13:17:20 +0000 Subject: [PATCH 1212/1590] fix filter by date id --- dexs/oraidex-v3/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/oraidex-v3/index.ts b/dexs/oraidex-v3/index.ts index 1067b3a869..1c9d2aede0 100644 --- a/dexs/oraidex-v3/index.ts +++ b/dexs/oraidex-v3/index.ts @@ -6,7 +6,7 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume const historicalVolumeEndpoint = "https://staging-ammv3-indexer.oraidex.io/"; const fetch = async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - const dayIndex = Math.floor(dayTimestamp / 86400000) - 1; + const dayIndex = Math.floor(dayTimestamp / 86400); const query = gql` query PoolDayData { poolDayData( From 0dbc0aaff2977f3c566c21f228114b6f6156eb41 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 19 Aug 2024 13:18:35 +0000 Subject: [PATCH 1213/1590] fix date --- dexs/oraidex-v3/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/oraidex-v3/index.ts b/dexs/oraidex-v3/index.ts index 1c9d2aede0..ecf8fbb772 100644 --- a/dexs/oraidex-v3/index.ts +++ b/dexs/oraidex-v3/index.ts @@ -1,11 +1,11 @@ import { gql, GraphQLClient } from "graphql-request"; -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const historicalVolumeEndpoint = "https://staging-ammv3-indexer.oraidex.io/"; -const fetch = async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); +const fetch = async (timestamp: number, _t: any, options: FetchOptions) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.startOfDay * 1000)); const dayIndex = Math.floor(dayTimestamp / 86400); const query = gql` query PoolDayData { From b6a4c02bda0c909058243add3d89cba4d78f1cc6 Mon Sep 17 00:00:00 2001 From: swan-of-bodom <0xHyoga@cygnusdao.finance> Date: Mon, 19 Aug 2024 15:20:44 +0200 Subject: [PATCH 1214/1590] impermax: add new chains fees --- fees/impermax-finance.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/fees/impermax-finance.ts b/fees/impermax-finance.ts index 316ed1089a..33eb712bbd 100644 --- a/fees/impermax-finance.ts +++ b/fees/impermax-finance.ts @@ -108,6 +108,22 @@ const adapter: Adapter = { methodology } }, + [CHAIN.BASE]: { + fetch: graphs()(CHAIN.BASE), + runAtCurrTime: true, + start: 1698019200, + meta: { + methodology + } + }, + [CHAIN.SCROLL]: { + fetch: graphs()(CHAIN.SCROLL), + runAtCurrTime: true, + start: 1698019200, + meta: { + methodology + } + }, }, } From 2ca03316f28ad998986e958b3bf563bb3e5643fd Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 19 Aug 2024 14:23:57 +0100 Subject: [PATCH 1215/1590] pendle volumes --- fees/pendle.ts | 153 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 106 insertions(+), 47 deletions(-) diff --git a/fees/pendle.ts b/fees/pendle.ts index a2b51e88d8..21f93ea039 100644 --- a/fees/pendle.ts +++ b/fees/pendle.ts @@ -1,7 +1,7 @@ import { - ChainBlocks, + FetchGetLogsOptions, FetchOptions, - FetchResultFees, + FetchResultV2, SimpleAdapter, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; @@ -9,12 +9,14 @@ import { Chain } from "@defillama/sdk/build/general"; import { addTokensReceived } from "../helpers/token"; import BigNumber from "bignumber.js"; import { getConfig } from "../helpers/cache"; -import { ChainApi } from "@defillama/sdk"; +import { Balances, ChainApi } from "@defillama/sdk"; const ABI = { assetInfo: "function assetInfo() view returns (uint8,address,uint8)", getRewardTokens: "function getRewardTokens() view returns (address[])", exchangeRate: "function exchangeRate() view returns (uint256)", + orderFilledV2: + "event OrderFilledV2(bytes32 indexed orderHash, uint8 indexed orderType, address indexed YT, address token, uint256 netInputFromMaker, uint256 netOutputToMaker, uint256 feeAmount, uint256 notionalVolume, address maker, address taker)", marketSwapEvent: "event Swap(address indexed caller, address indexed receiver, int256 netPtOut, int256 netSyOut, uint256 netSyFee, uint256 netSyToReserve)", }; @@ -25,6 +27,24 @@ type IConfig = { }; }; +type MarketData = { + address: string; + sy: { + address: string; + }; + yt: { + address: string; + }; +}; + +const chains: { [chain: string]: { id: number; start: number } } = { + [CHAIN.ETHEREUM]: { id: 1, start: 1686268800 }, + [CHAIN.ARBITRUM]: { id: 42161, start: 1686268800 }, + [CHAIN.MANTLE]: { id: 5000, start: 1711506087 }, + [CHAIN.BSC]: { id: 56, start: 1686268800 }, + [CHAIN.OPTIMISM]: { id: 10, start: 1691733600 }, +}; + const STETH_ETHEREUM = "ethereum:0xae7ab96520de3a18e5e111b5eaab095312d7fe84"; const EETH_ETHEREUM = "ethereum:0x35fa164735182de50811e8e2e824cfb9b6118ac2"; const WETH_ETHEREUM = "ethereum:0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; @@ -62,20 +82,64 @@ const chainConfig: IConfig = { treasury: "0xe972d450ec5b11b99d97760422e0e054afbc8042", }, [CHAIN.MANTLE]: { - treasury: "0x5c30d3578a4d07a340650a76b9ae5df20d5bdf55" - } + treasury: "0x5c30d3578a4d07a340650a76b9ae5df20d5bdf55", + }, }; +async function amm( + marketToSy: Map, + getLogs: (params: FetchGetLogsOptions) => Promise, + balances: Balances, +): Promise { + const swapEvents: { [address: string]: any[] } = {}; + await Promise.all( + Object.keys(marketToSy).map( + async (target: string) => + await getLogs({ + eventAbi: ABI.marketSwapEvent, + target, + }).then((e) => { + swapEvents[target] = e; + }), + ), + ); + + Object.keys(swapEvents).map((market) => { + swapEvents[market].map((swap) => { + balances.add(marketToSy.get(market)!, Math.abs(Number(swap.netSyOut))); + }); + }); +} + +async function limitOrder( + ytToSy: Map, + getLogs: (params: FetchGetLogsOptions) => Promise, + balances: Balances, +): Promise { + const fills = await getLogs({ + target: "0x000000000000c9b3e2c3ec88b1b4c0cd853f4321", + eventAbi: ABI.orderFilledV2, + }); + + fills.map((fill) => { + const sy = ytToSy.get(fill.YT.toLowerCase()); + if (!sy) return; + balances.add(sy, fill.notionalVolume); + }); +} + const fetch = (chain: Chain) => { - return async ( - timestamp: number, - _: ChainBlocks, - options: FetchOptions - ): Promise => { - await getWhitelistedAssets(options.api); - const { api, getLogs, createBalances } = options; + return async (options: FetchOptions): Promise => { + const { markets, sys, marketToSy, ytToSy } = await getWhitelistedAssets( + options.api, + ); + const dailyVolume: Balances = options.createBalances(); - const { markets, sys, marketToSy } = await getWhitelistedAssets(api); + const volumePromises = [ + await amm(marketToSy, options.getLogs, dailyVolume), + await limitOrder(ytToSy, options.getLogs, dailyVolume), + ]; + const { api, getLogs, createBalances } = options; const rewardTokens: string[] = ( await api.multiCall({ @@ -115,10 +179,10 @@ const fetch = (chain: Chain) => { const netSyToReserve = swapEvent.netSyToReserve; dailySupplySideFees.add( marketToSy.get(market)!, - netSyFee - netSyToReserve + netSyFee - netSyToReserve, ); // excluding revenue fee } - }) + }), ); const dailyRevenue = await addTokensReceived({ @@ -174,7 +238,7 @@ const fetch = (chain: Chain) => { ? { skipChain: true, } - : undefined + : undefined, ); if (rawAmountSupplySide !== undefined) { @@ -185,7 +249,7 @@ const fetch = (chain: Chain) => { ? { skipChain: true, } - : undefined + : undefined, ); } } @@ -193,49 +257,27 @@ const fetch = (chain: Chain) => { const dailyFees = dailyRevenue.clone(); dailyFees.addBalances(dailySupplySideFees); + await Promise.all(volumePromises); + return { - dailyFees: dailyFees, - dailyRevenue: dailyRevenue, + dailyVolume, + dailyFees, + dailyRevenue, dailyHoldersRevenue: dailyRevenue, dailySupplySideRevenue: dailySupplySideFees, - timestamp, }; }; }; -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.ETHEREUM]: { - fetch: fetch(CHAIN.ETHEREUM), - start: 1686268800, - }, - [CHAIN.ARBITRUM]: { - fetch: fetch(CHAIN.ARBITRUM), - start: 1686268800, - }, - [CHAIN.BSC]: { - fetch: fetch(CHAIN.BSC), - start: 1686268800, - }, - [CHAIN.OPTIMISM]: { - fetch: fetch(CHAIN.OPTIMISM), - start: 1691733600, - }, - [CHAIN.MANTLE]: { - fetch: fetch(CHAIN.MANTLE), - start: 1711506087, - }, - }, -}; - async function getWhitelistedAssets(api: ChainApi): Promise<{ markets: string[]; sys: string[]; marketToSy: Map; + ytToSy: Map; }> { const { results } = await getConfig( "pendle/v2/revenue-" + api.chain, - `https://api-v2.pendle.finance/core/v1/${api.chainId!}/markets?order_by=name%3A1&skip=0&limit=100&select=all` + `https://api-v2.pendle.finance/core/v1/${api.chainId!}/markets?order_by=name%3A1&skip=0&limit=100&select=all`, ); const markets = results.map((d: any) => d.lp.address); const sySet: Set = new Set(results.map((d: any) => d.sy.address)); @@ -246,7 +288,24 @@ async function getWhitelistedAssets(api: ChainApi): Promise<{ marketToSy.set(result.lp.address, result.sy.address); } - return { markets, sys, marketToSy }; + const ytToSy = new Map(); + results.map((market: MarketData) => { + ytToSy.set(market.yt.address.toLowerCase(), market.sy.address); + }); + + return { markets, sys, marketToSy, ytToSy }; } +const adapter: SimpleAdapter = { + version: 2, + adapter: {}, +}; + +Object.keys(chains).map((chain) => { + adapter.adapter[chain] = { + fetch: fetch(chain), + start: chains[chain].start, + }; +}); + export default adapter; From 5fc452c9dea790ac2671c259aa9ae393fcde253f Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 19 Aug 2024 14:30:20 +0100 Subject: [PATCH 1216/1590] v2 func --- helpers/getUniSubgraph/index.ts | 224 +++++++++++++++++++++++++++++++- 1 file changed, 220 insertions(+), 4 deletions(-) diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 2a659a4db5..2b69bbf772 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -3,14 +3,14 @@ import { request, gql } from "graphql-request"; 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 { handle200Errors } from "./utils"; +import { getUniqStartOfTodayTimestamp, getUniswapDateId, handle200Errors } from "./utils"; import { getStartTimestamp } from "../getStartTimestamp"; const DEFAULT_TOTAL_VOLUME_FACTORY = "uniswapFactories"; const DEFAULT_TOTAL_VOLUME_FIELD = "totalVolumeUSD"; -const DEFAULT_DAILY_VOLUME_FACTORY = "uniswapFactories"; -const DEFAULT_DAILY_VOLUME_FIELD = "totalVolumeUSD"; +const DEFAULT_DAILY_VOLUME_FACTORY = "uniswapDayData"; +const DEFAULT_DAILY_VOLUME_FIELD = "dailyVolumeUSD"; const DEFAULT_DAILY_DATE_FIELD = "date"; const DEFAULT_DAILY_PAIR_FACTORY = "pairDayDatas"; @@ -69,6 +69,7 @@ type pair = { } } & IJSON + function getGraphDimensions({ graphUrls, graphRequestHeaders, @@ -96,7 +97,6 @@ function getGraphDimensions({ feesPercent, blacklistTokens = {} }: IGetChainVolumeParams) { - dailyFees; // DAILY VOLUME // Graph fields const graphFieldsDailyVolume = { @@ -106,6 +106,222 @@ function getGraphDimensions({ pairs: dailyVolume.pairs ?? DEFAULT_DAILY_PAIR_FACTORY, idGraphType: dailyVolume.idGraphType ?? DEFAULT_ID_TYPE } + // Queries + const dailyVolumeQuery = gql` + query daily_volume ($id: ${graphFieldsDailyVolume.idGraphType}) { + ${graphFieldsDailyVolume.factory} (id: $id) { + ${graphFieldsDailyVolume.field} + } + }`; + const alternativeDailyQuery = gql` + query daily_volume_alternative ($timestamp: Int) { + ${graphFieldsDailyVolume.factory}s (where: {${graphFieldsDailyVolume.dateField}: $timestamp}) { + ${graphFieldsDailyVolume.dateField} + ${graphFieldsDailyVolume.field} + } + }`; + + // TOTAL VOLUME + // Graph fields + const graphFieldsTotalVolume = { + factory: totalVolume.factory ?? DEFAULT_TOTAL_VOLUME_FACTORY, + field: totalVolume.field ?? DEFAULT_TOTAL_VOLUME_FIELD, + blockGraphType: totalVolume.blockGraphType ?? DEFAULT_BLOCK_TYPE + } + // Queries + const totalVolumeQuery = gql` + query total_volume ($block: ${graphFieldsTotalVolume.blockGraphType}) { + ${graphFieldsTotalVolume.factory}(block: { number: $block }) { + ${graphFieldsTotalVolume.field} + } + }`; + + // DAILY FEES + // Graph fields + const graphFieldsDailyFees = { + factory: dailyFees.factory ?? DEFAULT_DAILY_FEES_FACTORY, + field: dailyFees.field ?? DEFAULT_DAILY_FEES_FIELD + } + // Query + const dailyFeesQuery = gql` + query daily_fees ($id: ID!) { + ${graphFieldsDailyFees.factory}(id: $id) { + ${graphFieldsDailyFees.field} + } + }`; + + // TOTAL FEES + // Graph fields + const graphFieldsTotalFees = { + factory: totalFees.factory ?? DEFAULT_TOTAL_FEES_FACTORY, + field: totalFees.field ?? DEFAULT_TOTAL_FEES_FIELD + } + // Query + const totalFeesQuery = gql` + query total_fees { + ${graphFieldsTotalFees.factory} { + ${graphFieldsTotalFees.field} + } + }`; + + return (chain: Chain) => { + + const dailyVolumePairsQuery = blacklistTokens[chain] ? gql` + query daily_volume_byPair ($timestamp_gt: Int, $timestamp_lte: Int) { + pairDayDatas(where:{${graphFieldsDailyVolume.dateField}_gt: $timestamp_gt, ${graphFieldsDailyVolume.dateField}_lte: $timestamp_lte, ${graphFieldsDailyVolume.field}_not: 0}, orderBy: ${graphFieldsDailyVolume.field}, orderDirection: desc, first: 1000){ + date + token0{ + symbol + id + } + token1{ + symbol + id + } + ${graphFieldsDailyVolume.field} + } + } + ` + : 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; + // Get params + const id = String(getUniswapDateId(new Date(endTimestamp * 1000))); + // Execute queries + // DAILY VOLUME + let graphResDailyVolume; + let dailyVolume: any; + if (dailyVolumePairsQuery) { + console.info("Calculating volume excluding blacklisted tokens..."); + graphResDailyVolume = await request( + graphUrls[chain], + dailyVolumePairsQuery, + { + timestamp_gt: endTimestamp - 3600 * 24, + timestamp_lte: endTimestamp, + }, + graphRequestHeaders?.[chain], + ) + .catch(handle200Errors) + .catch((e) => + console.error( + `GraphFetchError: Failed to get daily volume on ${chain} with graph ${ + graphUrls[chain] + }: ${wrapGraphError(e).message}`, + ), + ); + dailyVolume = graphResDailyVolume?.[ + graphFieldsDailyVolume.pairs + ]?.reduce((acc: number | undefined, current: pair) => { + if ( + blacklistTokens[chain].includes(current.token0.id) || + blacklistTokens[chain].includes(current.token1.id) + ) + return acc; + if (current?.[graphFieldsDailyVolume.field]) { + if (acc) return acc += +current?.[graphFieldsDailyVolume.field] + return +current?.[graphFieldsDailyVolume.field] + } + return acc + }, undefined as number | undefined) + } else { + graphResDailyVolume = await request(graphUrls[chain], dailyVolumeQuery, { id }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`GraphFetchError: Failed to get daily volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)) + 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}`)) + 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); + } + } + + // TOTAL VOLUME + const graphResTotalVolume = await request(graphUrls[chain], totalVolumeQuery, { block }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`GraphFetchError: Failed to get total volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)); + const totalVolume = graphResTotalVolume?.[graphFieldsTotalVolume.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalVolume.field]), 0)?.toString() + + // DAILY FEES + const graphResDailyFees = await request(graphUrls[chain], dailyFeesQuery, { id }, graphRequestHeaders?.[chain]).catch(_e => { + if (dailyVolume === undefined || feesPercent?.Fees === undefined) + console.error(`Unable to get daily fees on ${chain} from graph.`) + }); + const dailyFees = graphResDailyFees?.[graphFieldsDailyFees.factory]?.[graphFieldsDailyFees.field] + + // TOTAL FEES + const graphResTotalFees = await request(graphUrls[chain], totalFeesQuery, { id }, graphRequestHeaders?.[chain]).catch(_e => { + if (totalVolume === undefined || feesPercent?.Fees === undefined) + console.error(`Unable to get total fees on ${chain} from graph.`) + }); + const totalFees = graphResTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) + + const response: FetchResultGeneric = { + timestamp: endTimestamp, + block, + totalVolume, + dailyVolume, + dailyFees, + totalFees + }; + + if (feesPercent) { + const feeBase = feesPercent.type + const dailyBase = feeBase === 'volume' ? dailyVolume : dailyFees + const totalBase = feeBase === 'volume' ? totalVolume : totalFees + Object.entries(feesPercent).forEach(([feeType, feePercentType]) => { + if (typeof feePercentType !== "number") return + if (dailyBase !== undefined && response[`daily${feeType}`] === undefined) + response[`daily${feeType}`] = new BigNumber(dailyBase).multipliedBy(feePercentType / 100).toString() + if (totalBase && response[`total${feeType}`] === undefined) + response[`total${feeType}`] = new BigNumber(totalBase).multipliedBy(feePercentType / 100).toString() + }) + } + return response + }; + }; +} + +function getGraphDimensions2({ + graphUrls, + graphRequestHeaders, + totalVolume = { + factory: DEFAULT_TOTAL_VOLUME_FACTORY, + field: DEFAULT_TOTAL_VOLUME_FIELD, + blockGraphType: DEFAULT_BLOCK_TYPE + }, + dailyVolume = { + factory: DEFAULT_TOTAL_VOLUME_FACTORY, + field: DEFAULT_TOTAL_VOLUME_FIELD, + dateField: DEFAULT_DAILY_DATE_FIELD, + pairs: DEFAULT_DAILY_PAIR_FACTORY, + idGraphType: DEFAULT_ID_TYPE + }, + totalFees = { + factory: DEFAULT_TOTAL_FEES_FACTORY, + field: DEFAULT_TOTAL_FEES_FIELD, + }, + dailyFees = { + factory: DEFAULT_DAILY_FEES_FACTORY, + field: DEFAULT_DAILY_FEES_FIELD, + }, + getCustomBlock, + feesPercent, + blacklistTokens = {} +}: IGetChainVolumeParams) { + dailyFees; + // DAILY VOLUME + // Graph fields + const graphFieldsDailyVolume = { + factory: dailyVolume.factory ?? DEFAULT_TOTAL_VOLUME_FACTORY, + field: dailyVolume.field ?? DEFAULT_TOTAL_VOLUME_FIELD, + dateField: dailyVolume.dateField ?? DEFAULT_DAILY_DATE_FIELD, // For alternative query + pairs: dailyVolume.pairs ?? DEFAULT_DAILY_PAIR_FACTORY, + idGraphType: dailyVolume.idGraphType ?? DEFAULT_ID_TYPE + } // TOTAL VOLUME // Graph fields const graphFieldsTotalVolume = { From 9c6e75393ef00ff074854151bbb48c5b12770533 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 19 Aug 2024 13:37:48 +0000 Subject: [PATCH 1217/1590] fix get daily data --- fees/demented-games/index.ts | 50 +++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/fees/demented-games/index.ts b/fees/demented-games/index.ts index ad0d412bfc..bc0726f152 100644 --- a/fees/demented-games/index.ts +++ b/fees/demented-games/index.ts @@ -7,32 +7,34 @@ import { commonAbi } from './abi'; const ROULETTE_ADDRESS = '0x94ba26ee118ef6c407c75dbb23385b1ad71a4547'; const PUMP_OR_REKT_ADDRESS = '0xcbc003cb76c5d218cba2dfb3a2b2f101950ed7e7'; -const startDate = new Date('2024-07-26T00:00:00.000Z').getTime(); -const currentDate = new Date().getTime(); -const differenceInTime = currentDate - startDate; -const totalDays = Math.floor(differenceInTime / (1000 * 60 * 60 * 24)); - -async function fetch({ createBalances, api }: FetchOptions) { +async function fetch({ createBalances, api, fromApi, toApi }: FetchOptions) { const totalFees = createBalances(); const dailyFees = createBalances(); - - const pumpOrRektFees = BigNumber( - await api.call({ - abi: commonAbi[0], - target: ROULETTE_ADDRESS, - }) - ); - const roulletteFees = BigNumber( - await api.call({ - abi: commonAbi[0], - target: PUMP_OR_REKT_ADDRESS, - }) - ); - - const total = pumpOrRektFees.plus(roulletteFees); - - totalFees.add(ETHER_ADDRESS, total); - dailyFees.add(ETHER_ADDRESS, total.dividedToIntegerBy(totalDays)); + const pumpOrRektFeesFrom = await fromApi.call({ + abi: commonAbi[0], + target: PUMP_OR_REKT_ADDRESS, + }); + const pumpOrRektFeesTo = await toApi.call({ + abi: commonAbi[0], + target: PUMP_OR_REKT_ADDRESS, + }); + + const roulletteFeesFrom = await fromApi.call({ + abi: commonAbi[0], + target: ROULETTE_ADDRESS, + }); + + const roulletteFeesTo = await toApi.call({ + abi: commonAbi[0], + target: ROULETTE_ADDRESS, + }); + + const dailypumpOrRektFees = Number(pumpOrRektFeesTo) - Number(pumpOrRektFeesFrom); + const dailyroulletteFees = Number(roulletteFeesTo) - Number(roulletteFeesFrom); + const tottal = Number(pumpOrRektFeesTo) + Number(roulletteFeesTo); + const dailyTotal = dailypumpOrRektFees + dailyroulletteFees; + totalFees.add(ETHER_ADDRESS, tottal); + dailyFees.add(ETHER_ADDRESS, dailyTotal); return { totalFees, From 03d96274833d23478943a4315e3b52eac99082df Mon Sep 17 00:00:00 2001 From: Leonardo Nagasaki <56836200+Leoakin43@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:38:32 -0300 Subject: [PATCH 1218/1590] Fixed reserve calculation --- fees/moonwell/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/moonwell/index.ts b/fees/moonwell/index.ts index 1617478590..704614c651 100644 --- a/fees/moonwell/index.ts +++ b/fees/moonwell/index.ts @@ -66,7 +66,7 @@ async function getFees(market: string, { createBalances, api, getLogs, }: FetchO reservesAddedLogs.forEach((log: any) => { const marketIndex = log.marketIndex; const underlying = underlyings[marketIndex] - dailyRevenue!.add(underlying, log.addAmount / 1e18); + dailyRevenue!.add(underlying, log.addAmount); }) return { dailyFees, dailyRevenue } From 98ec5c1b48a9648188d573949560c053fd270a91 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 19 Aug 2024 13:40:24 +0000 Subject: [PATCH 1219/1590] fix version of api --- dexs/dexalot/index.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dexs/dexalot/index.ts b/dexs/dexalot/index.ts index 9457de19d0..ca9811fb93 100644 --- a/dexs/dexalot/index.ts +++ b/dexs/dexalot/index.ts @@ -6,7 +6,7 @@ const historicalVolumeEndpoint = "https://api.dexalot.com/api/stats/chaindailyvo interface IVolumeall { volumeusd: string; - date: number; + date: string; } const supportedChains = [CHAIN.DEXALOT, CHAIN.AVAX, CHAIN.ARBITRUM, CHAIN.BASE] @@ -29,13 +29,14 @@ const fetchFromChain = (chain: CHAIN) => { return async (options: FetchOptions): Promise => { const dayTimestamp = new Date(options.startOfDay * 1000) + const dateStr = dayTimestamp.toISOString().split('T')[0] const historicalVolume: IVolumeall[] = await httpGet(endpoint) const totalVolume = historicalVolume .filter(volItem => new Date(volItem.date) <= dayTimestamp) .reduce((acc, { volumeusd }) => acc + Number(volumeusd), 0) const dailyVolume = historicalVolume - .find(dayItem => new Date(dayItem.date) === dayTimestamp)?.volumeusd + .find(dayItem => dayItem.date.split('T')[0] === dateStr)?.volumeusd return { totalVolume: `${totalVolume}`, @@ -53,7 +54,7 @@ const getStartTimestamp = (chain: CHAIN) => { } const adapter: SimpleAdapter = { - version: 2, + version: 1, adapter: supportedChains.reduce((acc, chain) => { return { ...acc, From 878116d8a3af0708c574dae49c76b41a65a90d6e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 19 Aug 2024 13:49:17 +0000 Subject: [PATCH 1220/1590] fix version --- dexs/dexalot/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dexs/dexalot/index.ts b/dexs/dexalot/index.ts index ca9811fb93..cbf52c0780 100644 --- a/dexs/dexalot/index.ts +++ b/dexs/dexalot/index.ts @@ -1,4 +1,4 @@ -import { BaseAdapter, FetchOptions, FetchResultV2, SimpleAdapter } from "../../adapters/types"; +import { BaseAdapter, FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; @@ -27,7 +27,7 @@ const chainToEnv = (chain: CHAIN) => { const fetchFromChain = (chain: CHAIN) => { const endpoint = `${historicalVolumeEndpoint}?env=${chainToEnv(chain)}` - return async (options: FetchOptions): Promise => { + return async (_a:any, _t: any, options: FetchOptions): Promise => { const dayTimestamp = new Date(options.startOfDay * 1000) const dateStr = dayTimestamp.toISOString().split('T')[0] const historicalVolume: IVolumeall[] = await httpGet(endpoint) @@ -39,6 +39,7 @@ const fetchFromChain = (chain: CHAIN) => { .find(dayItem => dayItem.date.split('T')[0] === dateStr)?.volumeusd return { + timestamp: options.startOfDay, totalVolume: `${totalVolume}`, dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, }; From fece622700e7d6cb06a3ae3259a73c11d86823ca Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:53:30 +0200 Subject: [PATCH 1221/1590] update icpswap --- dexs/icpswap/index.ts | 32 ++------------------------------ 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/dexs/icpswap/index.ts b/dexs/icpswap/index.ts index bb4ff9d86f..962b32e8a0 100644 --- a/dexs/icpswap/index.ts +++ b/dexs/icpswap/index.ts @@ -1,39 +1,11 @@ import { Adapter, FetchResultVolume } from "../../adapters/types" import { CHAIN } from "../../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import fetchURL from "../../utils/fetchURL"; -const pairsURL = "https://uvevg-iyaaa-aaaak-ac27q-cai.raw.ic0.app/pairs"; -const volumeURL = (pool_id: string) => `https://uvevg-iyaaa-aaaak-ac27q-cai.raw.ic0.app/totalVolumeUSD?poolId=${pool_id}&limit=1000`; - -interface IPairs { - pool_id: string; - ticker_id: string; - base: string; - target: string; -} - -interface IVolume { - day: string; - totalVolumeUSD: string; - volumeUSDChange: string; - volumeUSD: string; -} -const pairs: IPairs[] = [{"ticker_id": "CHAT_GHOST","base": "CHAT","target": "GHOST","pool_id": "m6cnd-wiaaa-aaaag-qchkq-cai"},{"ticker_id": "TENDY_KINIC","base": "TENDY","target": "KINIC","pool_id": "344ln-paaaa-aaaag-qcdkq-cai"},{"ticker_id": "CHAT_TENDY","base": "CHAT","target": "TENDY","pool_id": "ebw3a-fiaaa-aaaag-qcbda-cai"},{"ticker_id": "DOGMI_ICP","base": "DOGMI","target": "ICP","pool_id": "pkhyt-7iaaa-aaaag-qca7a-cai"},{"ticker_id": "TENDY_BABY AROF token","base": "TENDY","target": "BABY AROF token","pool_id": "3o24u-dqaaa-aaaag-qcdjq-cai"},{"ticker_id": "TENDY_CLOUD","base": "TENDY","target": "CLOUD","pool_id": "2yre7-waaaa-aaaag-qcdmq-cai"},{"ticker_id": "ckBTC_ICP","base": "ckBTC","target": "ICP","pool_id": "xmiu5-jqaaa-aaaag-qbz7q-cai"},{"ticker_id": "CHAT_ICL","base": "CHAT","target": "ICL","pool_id": "yt4cy-4yaaa-aaaag-qce5q-cai"},{"ticker_id": "ICP_NDP","base": "ICP","target": "NDP","pool_id": "yp7ey-cyaaa-aaaag-qblqq-cai"},{"ticker_id": "DMD_ICP","base": "DMD","target": "ICP","pool_id": "3ynik-taaaa-aaaag-qblya-cai"},{"ticker_id": "GHOST_ICP","base": "GHOST","target": "ICP","pool_id": "dwahc-eyaaa-aaaag-qcgnq-cai"},{"ticker_id": "BOX_ICP","base": "BOX","target": "ICP","pool_id": "yg4pe-uqaaa-aaaag-qblra-cai"},{"ticker_id": "KINIC_ICP","base": "KINIC","target": "ICP","pool_id": "335nz-cyaaa-aaaag-qcdka-cai"},{"ticker_id": "GHOST_BABY AROF token","base": "GHOST","target": "BABY AROF token","pool_id": "6vaaf-faaaa-aaaag-qcdwq-cai"},{"ticker_id": "OGY_ICP","base": "OGY","target": "ICP","pool_id": "yu2y5-yaaaa-aaaag-qblsa-cai"},{"ticker_id": "TENDY_ALIEN","base": "TENDY","target": "ALIEN","pool_id": "rghwb-niaaa-aaaag-qccta-cai"},{"ticker_id": "_ICP","base": "","target": "ICP","pool_id": "5ufyj-eiaaa-aaaag-qblpq-cai"},{"ticker_id": "$LAND_ICP","base": "$LAND","target": "ICP","pool_id": "zlslk-3yaaa-aaaag-qblwq-cai"},{"ticker_id": "TENDY_SNS1","base": "TENDY","target": "SNS1","pool_id": "etqmz-jyaaa-aaaag-qcbaa-cai"},{"ticker_id": "🥕_ICP","base": "🥕","target": "ICP","pool_id": "zmtn6-waaaa-aaaag-qblwa-cai"},{"ticker_id": "ICP_","base": "ICP","target": "","pool_id": "f6zug-pqaaa-aaaag-qboiq-cai"},{"ticker_id": "GHOST_SNS1","base": "GHOST","target": "SNS1","pool_id": "p4xq4-gyaaa-aaaag-qchbq-cai"},{"ticker_id": "TENDY_SPICE","base": "TENDY","target": "SPICE","pool_id": "to5je-7iaaa-aaaag-qcc7a-cai"},{"ticker_id": "ICYPEES_SPICE","base": "ICYPEES","target": "SPICE","pool_id": "tj4pq-sqaaa-aaaag-qcc7q-cai"},{"ticker_id": "STAR_ICP","base": "STAR","target": "ICP","pool_id": "y2yvv-dqaaa-aaaag-qblta-cai"},{"ticker_id": "ICP_ALIEN","base": "ICP","target": "ALIEN","pool_id": "r5cke-xqaaa-aaaag-qccrq-cai"},{"ticker_id": "GHOST_WOJAKIC","base": "GHOST","target": "WOJAKIC","pool_id": "62vrv-pyaaa-aaaag-qcigq-cai"},{"ticker_id": "WOJAKIC_ICP","base": "WOJAKIC","target": "ICP","pool_id": "qckzt-uiaaa-aaaag-qccva-cai"},{"ticker_id": "ICYPEES_ICP","base": "ICYPEES","target": "ICP","pool_id": "y5ztb-oiaaa-aaaag-qbltq-cai"},{"ticker_id": "TENDY_OGY","base": "TENDY","target": "OGY","pool_id": "vlws3-6iaaa-aaaag-qccja-cai"},{"ticker_id": "ICL_ICP","base": "ICL","target": "ICP","pool_id": "zqxxp-baaaa-aaaag-qblua-cai"},{"ticker_id": "PLAT_ICP","base": "PLAT","target": "ICP","pool_id": "3rodw-fiaaa-aaaag-qblzq-cai"},{"ticker_id": "SONICX_ICP","base": "SONICX","target": "ICP","pool_id": "6ktdw-kyaaa-aaaag-qcejq-cai"},{"ticker_id": "TENDY_GHOST","base": "TENDY","target": "GHOST","pool_id": "3kmdc-wqaaa-aaaag-qceua-cai"},{"ticker_id": "CHAT_ckBTC","base": "CHAT","target": "ckBTC","pool_id": "nm7k6-wyaaa-aaaag-qcasa-cai"},{"ticker_id": "XCANIC_SNS1","base": "XCANIC","target": "SNS1","pool_id": "ntmjn-zaaaa-aaaag-qchna-cai"},{"ticker_id": "SPICE_SNS1","base": "SPICE","target": "SNS1","pool_id": "howsv-wqaaa-aaaag-qcgua-cai"},{"ticker_id": "HOT_ICP","base": "HOT","target": "ICP","pool_id": "rxwy2-zaaaa-aaaag-qcfna-cai"},{"ticker_id": "BABY AROF token_ICP","base": "BABY AROF token","target": "ICP","pool_id": "s7qlk-oaaaa-aaaag-qbnvq-cai"},{"ticker_id": "EMC_ICP","base": "EMC","target": "ICP","pool_id": "fx5dl-qyaaa-aaaag-qcbga-cai"},{"ticker_id": "WHALE_ICP","base": "WHALE","target": "ICP","pool_id": "zzu4t-xiaaa-aaaag-qblvq-cai"},{"ticker_id": "GHOST_GHOST","base": "GHOST","target": "GHOST","pool_id": "ddhwp-fqaaa-aaaag-qcgoa-cai"},{"ticker_id": "ICP_SPICE","base": "ICP","target": "SPICE","pool_id": "x7ixp-3iaaa-aaaag-qccha-cai"},{"ticker_id": "DOGMI_DOGMI","base": "DOGMI","target": "DOGMI","pool_id": "pdetp-jaaaa-aaaag-qca6q-cai"},{"ticker_id": "CHAT_ICP","base": "CHAT","target": "ICP","pool_id": "ne2vj-6yaaa-aaaag-qb3ia-cai"},{"ticker_id": "TENDY_ICYPEES","base": "TENDY","target": "ICYPEES","pool_id": "png6h-sqaaa-aaaag-qca7q-cai"},{"ticker_id": "GHOST_ICP","base": "GHOST","target": "ICP","pool_id": "yi6cm-paaaa-aaaag-qblqa-cai"},{"ticker_id": "AVOCADO_ICP","base": "AVOCADO","target": "ICP","pool_id": "zfqgc-aiaaa-aaaag-qblxq-cai"},{"ticker_id": "GHOST_TENDY","base": "GHOST","target": "TENDY","pool_id": "on5od-6qaaa-aaaag-qchea-cai"},{"ticker_id": "TENDY_ckBTC","base": "TENDY","target": "ckBTC","pool_id": "dswyu-ryaaa-aaaag-qcbqa-cai"},{"ticker_id": "GHOST_EMC","base": "GHOST","target": "EMC","pool_id": "psv5u-5iaaa-aaaag-qchaq-cai"},{"ticker_id": "DOGMI_ICP","base": "DOGMI","target": "ICP","pool_id": "yt36j-vyaaa-aaaag-qblsq-cai"},{"ticker_id": "01_ICP","base": "01","target": "ICP","pool_id": "37mo6-6yaaa-aaaag-qblyq-cai"},{"ticker_id": "CHAT_GHOST","base": "CHAT","target": "GHOST","pool_id": "nl6mk-3aaaa-aaaag-qcasq-cai"},{"ticker_id": "TENDY_","base": "TENDY","target": "","pool_id": "w7thl-xiaaa-aaaag-qcf4q-cai"},{"ticker_id": "ICD_ICP","base": "ICD","target": "ICP","pool_id": "zxwr3-myaaa-aaaag-qbluq-cai"},{"ticker_id": "XCANIC_ICP","base": "XCANIC","target": "ICP","pool_id": "z6v2h-2qaaa-aaaag-qblva-cai"},{"ticker_id": "TENDY_EMC","base": "TENDY","target": "EMC","pool_id": "q2y4u-wiaaa-aaaag-qcfkq-cai"},{"ticker_id": "ICP_SNS1","base": "ICP","target": "SNS1","pool_id": "3ejs3-eaaaa-aaaag-qbl2a-cai"},{"ticker_id": "WOJAKIC_GHOST","base": "WOJAKIC","target": "GHOST","pool_id": "5rdhw-jaaaa-aaaag-qcima-cai"},{"ticker_id": "CLOUD_ICP","base": "CLOUD","target": "ICP","pool_id": "3s6gf-uqaaa-aaaag-qcdlq-cai"},{"ticker_id": "ckBTC_SNS1","base": "ckBTC","target": "SNS1","pool_id": "nx2w3-maaaa-aaaag-qcaqq-cai"},{"ticker_id": "ICL_TENDY","base": "ICL","target": "TENDY","pool_id": "eivq4-taaaa-aaaag-qcbcq-cai"},{"ticker_id": "CHAT_","base": "CHAT","target": "","pool_id": "nzy3t-xqaaa-aaaag-qcarq-cai"},{"ticker_id": "TENDY_ICP","base": "TENDY","target": "ICP","pool_id": "ojlrv-lqaaa-aaaag-qcazq-cai"}]; - const fetch = async (timestamp: number): Promise => { - const pools = pairs.map((e: IPairs) => e.pool_id); - const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - const dateId = Math.floor(getTimestampAtStartOfDayUTC(todayTimestamp) / 86400) - const historicalVolume: IVolume[] = (await Promise.all(pools.map((e: string) => fetchURL(volumeURL(e))))).map((e: any) => e).flat(); - const dailyVolume = historicalVolume.filter((e: IVolume) => Number(e.day) === dateId) - .reduce((a: number, b: IVolume) => a + Number(b.volumeUSD), 0) - const totalVolume = historicalVolume.filter((e: IVolume) => Number(e.day) <= dateId) - .reduce((a: number, b: IVolume) => a + Number(b.totalVolumeUSD), 0) + const { volumeUSD } = await fetchURL('https://uvevg-iyaaa-aaaak-ac27q-cai.raw.ic0.app/overview') return { - dailyVolume: `${dailyVolume}`, - totalVolume: `${totalVolume}`, + dailyVolume: volumeUSD, timestamp } } From 16c8aaee9882bebb5951dae3cd8df28082cf0ede Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 19 Aug 2024 14:55:59 +0100 Subject: [PATCH 1222/1590] change directory --- dexs/pendle/index.ts | 117 ++++++++++++++++++++++++++++++++ fees/pendle.ts | 155 ++++++++++++++----------------------------- 2 files changed, 165 insertions(+), 107 deletions(-) create mode 100644 dexs/pendle/index.ts diff --git a/dexs/pendle/index.ts b/dexs/pendle/index.ts new file mode 100644 index 0000000000..7a996d5d56 --- /dev/null +++ b/dexs/pendle/index.ts @@ -0,0 +1,117 @@ +import { + FetchGetLogsOptions, + FetchOptions, + FetchResultV2, + SimpleAdapter, +} from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { Chain } from "@defillama/sdk/build/general"; +import fetchURL from "../../utils/fetchURL"; +import { Balances } from "@defillama/sdk"; + +type MarketData = { + address: string; + sy: { + address: string; + }; + yt: { + address: string; + }; +}; + +const abi: { [event: string]: string } = { + orderFilledV2: + "event OrderFilledV2(bytes32 indexed orderHash, uint8 indexed orderType, address indexed YT, address token, uint256 netInputFromMaker, uint256 netOutputToMaker, uint256 feeAmount, uint256 notionalVolume, address maker, address taker)", + marketSwapEvent: + "event Swap(address indexed caller, address indexed receiver, int256 netPtOut, int256 netSyOut, uint256 netSyFee, uint256 netSyToReserve)", +}; + +const chains: { [chain: string]: { id: number; start: number } } = { + [CHAIN.ETHEREUM]: { id: 1, start: 1686268800 }, + [CHAIN.ARBITRUM]: { id: 42161, start: 1686268800 }, + [CHAIN.MANTLE]: { id: 5000, start: 1711506087 }, + [CHAIN.BSC]: { id: 56, start: 1686268800 }, + [CHAIN.OPTIMISM]: { id: 10, start: 1691733600 }, +}; + +async function amm( + apiData: MarketData[], + getLogs: (params: FetchGetLogsOptions) => Promise, + balances: Balances, +): Promise { + const assets: { [address: string]: string } = {}; + apiData.map((market: MarketData) => { + assets[market.address] = market.sy.address; + }); + + const swapEvents: { [address: string]: any[] } = {}; + await Promise.all( + Object.keys(assets).map( + async (target: string) => + await getLogs({ + eventAbi: abi.marketSwapEvent, + target, + }).then((e) => { + swapEvents[target] = e; + }), + ), + ); + + Object.keys(swapEvents).map((market) => { + swapEvents[market].map((swap) => { + balances.add(assets[market], Math.abs(Number(swap.netSyOut))); + }); + }); +} + +async function limitOrder( + apiData: MarketData[], + getLogs: (params: FetchGetLogsOptions) => Promise, + balances: Balances, +): Promise { + const fills = await getLogs({ + target: "0x000000000000c9b3e2c3ec88b1b4c0cd853f4321", + eventAbi: abi.orderFilledV2, + }); + + const ytToSy: { [yt: string]: string } = {}; + apiData.map((market: MarketData) => { + ytToSy[market.yt.address.toLowerCase()] = market.sy.address; + }); + + fills.map((fill) => + balances.add(ytToSy[fill.YT.toLowerCase()], fill.notionalVolume), + ); +} + +const fetch = (chain: Chain) => { + return async (options: FetchOptions): Promise => { + const dailyVolume: Balances = options.createBalances(); + const res = await fetchURL( + `https://api-v2.pendle.finance/core/v1/${chains[chain].id}/markets?limit=100&select=pro&is_active=true`, + ); + + await Promise.all([ + await amm(res.results, options.getLogs, dailyVolume), + await limitOrder(res.results, options.getLogs, dailyVolume), + ]); + + return { + dailyVolume, + }; + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: {}, +}; + +Object.keys(chains).map((chain) => { + adapter.adapter[chain] = { + fetch: fetch(chain), + start: chains[chain].start, + }; +}); + +export default adapter; diff --git a/fees/pendle.ts b/fees/pendle.ts index 21f93ea039..80510599e6 100644 --- a/fees/pendle.ts +++ b/fees/pendle.ts @@ -1,7 +1,7 @@ import { - FetchGetLogsOptions, + ChainBlocks, FetchOptions, - FetchResultV2, + FetchResultFees, SimpleAdapter, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; @@ -9,14 +9,12 @@ import { Chain } from "@defillama/sdk/build/general"; import { addTokensReceived } from "../helpers/token"; import BigNumber from "bignumber.js"; import { getConfig } from "../helpers/cache"; -import { Balances, ChainApi } from "@defillama/sdk"; +import { ChainApi } from "@defillama/sdk"; const ABI = { assetInfo: "function assetInfo() view returns (uint8,address,uint8)", getRewardTokens: "function getRewardTokens() view returns (address[])", exchangeRate: "function exchangeRate() view returns (uint256)", - orderFilledV2: - "event OrderFilledV2(bytes32 indexed orderHash, uint8 indexed orderType, address indexed YT, address token, uint256 netInputFromMaker, uint256 netOutputToMaker, uint256 feeAmount, uint256 notionalVolume, address maker, address taker)", marketSwapEvent: "event Swap(address indexed caller, address indexed receiver, int256 netPtOut, int256 netSyOut, uint256 netSyFee, uint256 netSyToReserve)", }; @@ -27,24 +25,6 @@ type IConfig = { }; }; -type MarketData = { - address: string; - sy: { - address: string; - }; - yt: { - address: string; - }; -}; - -const chains: { [chain: string]: { id: number; start: number } } = { - [CHAIN.ETHEREUM]: { id: 1, start: 1686268800 }, - [CHAIN.ARBITRUM]: { id: 42161, start: 1686268800 }, - [CHAIN.MANTLE]: { id: 5000, start: 1711506087 }, - [CHAIN.BSC]: { id: 56, start: 1686268800 }, - [CHAIN.OPTIMISM]: { id: 10, start: 1691733600 }, -}; - const STETH_ETHEREUM = "ethereum:0xae7ab96520de3a18e5e111b5eaab095312d7fe84"; const EETH_ETHEREUM = "ethereum:0x35fa164735182de50811e8e2e824cfb9b6118ac2"; const WETH_ETHEREUM = "ethereum:0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; @@ -82,65 +62,21 @@ const chainConfig: IConfig = { treasury: "0xe972d450ec5b11b99d97760422e0e054afbc8042", }, [CHAIN.MANTLE]: { - treasury: "0x5c30d3578a4d07a340650a76b9ae5df20d5bdf55", - }, + treasury: "0x5c30d3578a4d07a340650a76b9ae5df20d5bdf55" + } }; -async function amm( - marketToSy: Map, - getLogs: (params: FetchGetLogsOptions) => Promise, - balances: Balances, -): Promise { - const swapEvents: { [address: string]: any[] } = {}; - await Promise.all( - Object.keys(marketToSy).map( - async (target: string) => - await getLogs({ - eventAbi: ABI.marketSwapEvent, - target, - }).then((e) => { - swapEvents[target] = e; - }), - ), - ); - - Object.keys(swapEvents).map((market) => { - swapEvents[market].map((swap) => { - balances.add(marketToSy.get(market)!, Math.abs(Number(swap.netSyOut))); - }); - }); -} - -async function limitOrder( - ytToSy: Map, - getLogs: (params: FetchGetLogsOptions) => Promise, - balances: Balances, -): Promise { - const fills = await getLogs({ - target: "0x000000000000c9b3e2c3ec88b1b4c0cd853f4321", - eventAbi: ABI.orderFilledV2, - }); - - fills.map((fill) => { - const sy = ytToSy.get(fill.YT.toLowerCase()); - if (!sy) return; - balances.add(sy, fill.notionalVolume); - }); -} - const fetch = (chain: Chain) => { - return async (options: FetchOptions): Promise => { - const { markets, sys, marketToSy, ytToSy } = await getWhitelistedAssets( - options.api, - ); - const dailyVolume: Balances = options.createBalances(); - - const volumePromises = [ - await amm(marketToSy, options.getLogs, dailyVolume), - await limitOrder(ytToSy, options.getLogs, dailyVolume), - ]; + return async ( + timestamp: number, + _: ChainBlocks, + options: FetchOptions + ): Promise => { + await getWhitelistedAssets(options.api); const { api, getLogs, createBalances } = options; + const { markets, sys, marketToSy } = await getWhitelistedAssets(api); + const rewardTokens: string[] = ( await api.multiCall({ permitFailure: true, @@ -179,10 +115,10 @@ const fetch = (chain: Chain) => { const netSyToReserve = swapEvent.netSyToReserve; dailySupplySideFees.add( marketToSy.get(market)!, - netSyFee - netSyToReserve, + netSyFee - netSyToReserve ); // excluding revenue fee } - }), + }) ); const dailyRevenue = await addTokensReceived({ @@ -238,7 +174,7 @@ const fetch = (chain: Chain) => { ? { skipChain: true, } - : undefined, + : undefined ); if (rawAmountSupplySide !== undefined) { @@ -249,7 +185,7 @@ const fetch = (chain: Chain) => { ? { skipChain: true, } - : undefined, + : undefined ); } } @@ -257,27 +193,49 @@ const fetch = (chain: Chain) => { const dailyFees = dailyRevenue.clone(); dailyFees.addBalances(dailySupplySideFees); - await Promise.all(volumePromises); - return { - dailyVolume, - dailyFees, - dailyRevenue, + dailyFees: dailyFees, + dailyRevenue: dailyRevenue, dailyHoldersRevenue: dailyRevenue, dailySupplySideRevenue: dailySupplySideFees, + timestamp, }; }; }; +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: fetch(CHAIN.ETHEREUM), + start: 1686268800, + }, + [CHAIN.ARBITRUM]: { + fetch: fetch(CHAIN.ARBITRUM), + start: 1686268800, + }, + [CHAIN.BSC]: { + fetch: fetch(CHAIN.BSC), + start: 1686268800, + }, + [CHAIN.OPTIMISM]: { + fetch: fetch(CHAIN.OPTIMISM), + start: 1691733600, + }, + [CHAIN.MANTLE]: { + fetch: fetch(CHAIN.MANTLE), + start: 1711506087, + }, + }, +}; + async function getWhitelistedAssets(api: ChainApi): Promise<{ markets: string[]; sys: string[]; marketToSy: Map; - ytToSy: Map; }> { const { results } = await getConfig( "pendle/v2/revenue-" + api.chain, - `https://api-v2.pendle.finance/core/v1/${api.chainId!}/markets?order_by=name%3A1&skip=0&limit=100&select=all`, + `https://api-v2.pendle.finance/core/v1/${api.chainId!}/markets?order_by=name%3A1&skip=0&limit=100&select=all` ); const markets = results.map((d: any) => d.lp.address); const sySet: Set = new Set(results.map((d: any) => d.sy.address)); @@ -288,24 +246,7 @@ async function getWhitelistedAssets(api: ChainApi): Promise<{ marketToSy.set(result.lp.address, result.sy.address); } - const ytToSy = new Map(); - results.map((market: MarketData) => { - ytToSy.set(market.yt.address.toLowerCase(), market.sy.address); - }); - - return { markets, sys, marketToSy, ytToSy }; + return { markets, sys, marketToSy }; } -const adapter: SimpleAdapter = { - version: 2, - adapter: {}, -}; - -Object.keys(chains).map((chain) => { - adapter.adapter[chain] = { - fetch: fetch(chain), - start: chains[chain].start, - }; -}); - -export default adapter; +export default adapter; \ No newline at end of file From 8acc00c752cbb354cb0bcb651921624fd8aafea8 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 19 Aug 2024 14:42:28 +0100 Subject: [PATCH 1223/1590] upgrade sdk for tron --- helpers/getBlock.ts | 1 - package-lock.json | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/helpers/getBlock.ts b/helpers/getBlock.ts index dee9bc9077..1930191579 100644 --- a/helpers/getBlock.ts +++ b/helpers/getBlock.ts @@ -7,7 +7,6 @@ import { httpGet } from "../utils/fetchURL"; const retry = require("async-retry") const blacklistedChains: string[] = [ - "tron", "juno", "cardano", "litecoin", diff --git a/package-lock.json b/package-lock.json index 03e4be76ab..1cc199ebdf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -804,9 +804,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.69", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.69.tgz", - "integrity": "sha512-IYdT4P5vG9xt14tM9RuT1+uBUyD8oL6fdTWC3iwOlwATjWKA1kwOhucCXNFE8sc2KKugwTUfQuGp8Q3fHDxAfw==", + "version": "5.0.80", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.80.tgz", + "integrity": "sha512-XG1tm90rWmTnv55Du6cUHvSI3XVCSbVVjAHcDh9f2hOHuoKezx1zTjBrDUirYQ4yCCe2zl2g4QmUgD6JR96ibA==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From dabbf72e0d4300d807122814c2f5ad31ad6a9b93 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 19 Aug 2024 14:55:23 +0100 Subject: [PATCH 1224/1590] fix sunpump --- fees/sunpump.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/sunpump.ts b/fees/sunpump.ts index ef9f9ff592..7373839c28 100644 --- a/fees/sunpump.ts +++ b/fees/sunpump.ts @@ -8,7 +8,7 @@ const adapter: Adapter = { fetch: (async (options: FetchOptions) => { const dailyFees = options.createBalances(); const logs = await options.getLogs({ - targets: ['0x43d0a427d390301e84e46896ae980d35ecdaa2ae'], + targets: ['TG9nDZMUtC4LBmrWSdNXNi8xrKzXTMMSKT'], eventAbi: "event TRXReceived(address indexed from,uint256 amount)", }) logs.map((tx: any) => { From 841aee9d278f8e3d7ca89580d9f5a9446401a20a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 19 Aug 2024 14:57:14 +0000 Subject: [PATCH 1225/1590] fix not use param --- dexs/oraidex-v3/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/oraidex-v3/index.ts b/dexs/oraidex-v3/index.ts index ecf8fbb772..66810c943d 100644 --- a/dexs/oraidex-v3/index.ts +++ b/dexs/oraidex-v3/index.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const historicalVolumeEndpoint = "https://staging-ammv3-indexer.oraidex.io/"; -const fetch = async (timestamp: number, _t: any, options: FetchOptions) => { +const fetch = async (_timestamp: number, _t: any, options: FetchOptions) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.startOfDay * 1000)); const dayIndex = Math.floor(dayTimestamp / 86400); const query = gql` From 4f9cd543e7110150a5eb1d453ebda907ce9128cc Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 19 Aug 2024 17:31:06 +0200 Subject: [PATCH 1226/1590] check metric against whitelist --- adapters/types.ts | 13 +++++++++++-- cli/utils.ts | 11 ++++++++--- dexs/icpswap/index.ts | 4 ++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/adapters/types.ts b/adapters/types.ts index d25caf1011..7f33c77211 100644 --- a/adapters/types.ts +++ b/adapters/types.ts @@ -70,9 +70,9 @@ export type IStartTimestamp = () => Promise export type BaseAdapter = { [chain: string]: { start: IStartTimestamp | number - fetch: Fetch|FetchV2; + fetch: Fetch | FetchV2; runAtCurrTime?: boolean; - customBackfill?: Fetch|FetchV2; + customBackfill?: Fetch | FetchV2; meta?: { methodology?: string | IJSON hallmarks?: [number, string][] @@ -177,6 +177,15 @@ export enum AdapterType { export type FetchResult = FetchResultVolume & FetchResultFees & FetchResultAggregators & FetchResultOptions & FetchResultIncentives +export const whitelistedDimensionKeys = new Set([ + 'startTimestamp', 'chain', 'timestamp', + + 'dailyVolume', 'totalVolume', 'dailyShortOpenInterest', 'dailyLongOpenInterest', 'dailyOpenInterest', 'dailyBridgeVolume', 'totalBridgeVolume', + 'totalFees', 'dailyFees', 'dailyUserFees', 'totalRevenue', 'dailyRevenue', 'dailyProtocolRevenue', 'dailyHoldersRevenue', 'dailySupplySideRevenue', 'totalProtocolRevenue', 'totalSupplySideRevenue', 'totalUserFees', 'dailyBribesRevenue', 'dailyTokenTaxes', + 'tokenIncentives', + 'totalPremiumVolume', 'totalNotionalVolume', 'dailyPremiumVolume', 'dailyNotionalVolume', +]) + // End of specific adaptors type export interface IJSON { diff --git a/cli/utils.ts b/cli/utils.ts index 13a90f147d..a6aa457e90 100644 --- a/cli/utils.ts +++ b/cli/utils.ts @@ -1,5 +1,5 @@ import { getLatestBlock } from "@defillama/sdk/build/util"; -import { BaseAdapter, } from "../adapters/types"; +import { BaseAdapter, whitelistedDimensionKeys, } from "../adapters/types"; import { humanizeNumber } from "@defillama/sdk/build/computeTVL/humanizeNumber"; export const ERROR_STRING = '------ ERROR ------' @@ -24,6 +24,11 @@ export async function getLatestBlockRetry(chain: string) { export function printVolumes(volumes: any[], baseAdapter?: BaseAdapter) { const exclude2Print = ['startTimestamp', 'chain'] + let keys = volumes.map((element) => Object.keys(element)).flat() + keys.forEach((key) => { + if (!whitelistedDimensionKeys.has(key)) + throw new Error(`"${key}" is not a supported metric.Supported metrics can be found in adapters/types.ts`) + }) volumes.forEach((element) => { const methodology = baseAdapter?.[element.chain].meta?.methodology if (typeof element.chain === 'string') @@ -35,8 +40,8 @@ export function printVolumes(volumes: any[], baseAdapter?: BaseAdapter) { else if (!methodology) console.log("NO METHODOLOGY SPECIFIED") Object.entries(element).forEach(([attribute, value]) => { if (!exclude2Print.includes(attribute)) { - const valueFormatted = typeof value === 'object' ? JSON.stringify(value, null, 2) : attribute === "timestamp" ? value + ` (${new Date((value as any) * 1e3).toISOString()})` : humanizeNumber(Number(value)) - console.info(`${camelCaseToSpaces(attribute === "timestamp"?"endTimestamp":attribute)}: ${valueFormatted}`) + const valueFormatted = typeof value === 'object' ? JSON.stringify(value, null, 2) : attribute === "timestamp" ? value + ` (${new Date((value as any) * 1e3).toISOString()})` : humanizeNumber(Number(value)) + console.info(`${camelCaseToSpaces(attribute === "timestamp" ? "endTimestamp" : attribute)}: ${valueFormatted}`) if (valueFormatted !== undefined && typeof methodology === 'object' && methodology[attribute.slice(5)]) console.log("└─ Methodology:", methodology?.[attribute.slice(5)]) } diff --git a/dexs/icpswap/index.ts b/dexs/icpswap/index.ts index 962b32e8a0..eeeea0b488 100644 --- a/dexs/icpswap/index.ts +++ b/dexs/icpswap/index.ts @@ -1,9 +1,12 @@ import { Adapter, FetchResultVolume } from "../../adapters/types" import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraph/utils"; import fetchURL from "../../utils/fetchURL"; const fetch = async (timestamp: number): Promise => { const { volumeUSD } = await fetchURL('https://uvevg-iyaaa-aaaak-ac27q-cai.raw.ic0.app/overview') + + timestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); return { dailyVolume: volumeUSD, timestamp @@ -15,6 +18,7 @@ const adapter: Adapter = { adapter: { [CHAIN.ICP]: { fetch: fetch, + runAtCurrTime: true, start: 1689465600, }, } From 65b77079f2ab376a62765dbe28fe6945cd38a218 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 19 Aug 2024 17:28:20 +0000 Subject: [PATCH 1227/1590] fix unidex --- .../unidex-agg-perp/index.ts | 10 ++++------ dexs/unidex/index.ts | 6 ++---- 2 files changed, 6 insertions(+), 10 deletions(-) rename {dexs/unidex => aggregator-derivatives}/unidex-agg-perp/index.ts (96%) diff --git a/dexs/unidex/unidex-agg-perp/index.ts b/aggregator-derivatives/unidex-agg-perp/index.ts similarity index 96% rename from dexs/unidex/unidex-agg-perp/index.ts rename to aggregator-derivatives/unidex-agg-perp/index.ts index 4ddf61dc20..3962f11ec1 100644 --- a/dexs/unidex/unidex-agg-perp/index.ts +++ b/aggregator-derivatives/unidex-agg-perp/index.ts @@ -1,7 +1,7 @@ import * as sdk from "@defillama/sdk"; -import { SimpleAdapter, FetchResultVolume } from "../../../adapters/types"; -import { CHAIN } from "../../../helpers/chains"; -import { getTimestampAtStartOfDayUTC } from "../../../utils/date"; +import { FetchResultVolume } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; @@ -218,6 +218,4 @@ const adapteraggderivative: any = { } }; -export { - adapteraggderivative -} \ No newline at end of file +export default adapteraggderivative; diff --git a/dexs/unidex/index.ts b/dexs/unidex/index.ts index 270ecd6df0..6cc3037c4a 100644 --- a/dexs/unidex/index.ts +++ b/dexs/unidex/index.ts @@ -1,9 +1,8 @@ -import { SimpleAdapter, FetchResultVolume, BreakdownAdapter } from "../../adapters/types"; +import { FetchResultVolume, BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; -import { adapteraggderivative } from './unidex-agg-perp/index'; import { adapter_dexs_agg } from './unidex-dexs-agg/index'; type TChainIDs = { [key in Chain]?: number; }; @@ -105,9 +104,8 @@ const adapter: any = { const adapterbreakdown: BreakdownAdapter = { breakdown: { "unidex": adapter["adapter"], - "unidex-agg-derivative": adapteraggderivative["adapter"], "unidex-dexs-agg": adapter_dexs_agg["adapter"], } }; -export default adapterbreakdown; \ No newline at end of file +export default adapterbreakdown; From 672a469943dc1730f5306142b368cfb5c7f113de Mon Sep 17 00:00:00 2001 From: cdavitt Date: Mon, 19 Aug 2024 19:25:16 -0600 Subject: [PATCH 1228/1590] feat: bellum exchange fees and revenue --- fees/bellumexchange.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 fees/bellumexchange.ts diff --git a/fees/bellumexchange.ts b/fees/bellumexchange.ts new file mode 100644 index 0000000000..b5f8586327 --- /dev/null +++ b/fees/bellumexchange.ts @@ -0,0 +1,33 @@ +import { Adapter, FetchOptions, } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const FACTORIES = [ + '0x9f383e31aA37b6a4F0F57033558C54c37B5De45F', + '0xE0C0Cb05b6dFe6C7d196493963Bf083E726fc517', + '0xde11a16D6e04551168dfD54e936829B024A236C4', +]; + +const FEE = BigInt(100); + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.AVAX]: { + fetch: (async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const logs = await options.getLogs({ + targets: FACTORIES, + eventAbi: "event BellumSwap(address indexed token, address indexed sender, uint amount0In, uint amount0Out, uint amount1In, uint amount1Out)", + }) + logs.map((tx: any) => { + dailyFees.addGasToken((tx.amount1In + tx.amount1Out) / FEE) + }) + return { dailyFees, dailyRevenue: dailyFees } + }) as any, + start: 1723360238 + }, + }, + +} + +export default adapter; From b141a0251eb858ef343360e2998e9b59948e0b4d Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Tue, 20 Aug 2024 09:10:21 +0200 Subject: [PATCH 1229/1590] feat: Adapter Splash (fees) --- fees/splash/index.ts | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 fees/splash/index.ts diff --git a/fees/splash/index.ts b/fees/splash/index.ts new file mode 100644 index 0000000000..e596c41007 --- /dev/null +++ b/fees/splash/index.ts @@ -0,0 +1,32 @@ +// https://docs.splash.trade/concepts/dao/dao-business-model#dao-fees-from-pools + +import axios from "axios"; +import { Adapter, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const url: string = "https://api2.splash.trade/platform-api/v1/platform/stats"; + +const fetch = async (): Promise => { + const { + data: { lpFeeUsd, volumeUsd }, + } = await axios.get(url); + + return { + dailyFees: lpFeeUsd, + dailyRevenue: lpFeeUsd / 2, + dailyVolume: volumeUsd, + }; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.CARDANO]: { + fetch, + start: 1717452000, + }, + }, + timetravel: false, +}; + +export default adapter; From a9a427ef9135a199575d8b98b3b9cdba3589f44e Mon Sep 17 00:00:00 2001 From: ideapacito Date: Tue, 20 Aug 2024 15:34:55 +0700 Subject: [PATCH 1230/1590] update fee --- fees/fwx/index.ts | 100 +++++++++++++++++++++++++++++++++------------- 1 file changed, 72 insertions(+), 28 deletions(-) diff --git a/fees/fwx/index.ts b/fees/fwx/index.ts index 41499fd5b5..b87a5cb36b 100644 --- a/fees/fwx/index.ts +++ b/fees/fwx/index.ts @@ -6,34 +6,33 @@ import { httpPost } from "../../utils/fetchURL"; interface IEndpoint { dailyFees: string; - realtimeCompanyRevenue: string; + chainId: number; } interface IDailyFeeData { - claimable_token_interest: string; - held_token_interest: string; - fee_profit: string; - fee_auction: string; - daily_revenue: string; - daily_fees: string; -} - -interface ICompanyRevenue { - total_claimable_token_interest: string; - total_held_token_interest: string; - total_fee_profit: string; - total_fee_auction: string; - total_revenue: string; - total_fees: string; + daily_interest_paid: string; + daily_trading_fee: string; + daily_bounty_fee_to_protocol: string; + daily_bounty_fee_to_liquidator: string; + daily_liquidation_fee: string; + total_interest_paid: string; + total_trading_fee: string; + total_bounty_fee_to_protocol: string; + total_bounty_fee_to_liquidator: string; + total_liquidation_fee: string; } const endpoints: Record = { [CHAIN.AVAX]: { - dailyFees: "https://app.fwx.finance/api/43114/v1/dashboard/daily-fees", - realtimeCompanyRevenue: "https://app.fwx.finance/api/43114/v1/realtime/company-revenue", + dailyFees: "https://analytics.fwx.finance/api/fees", + chainId: 43114, }, }; +const CHAIN_ID = { + [CHAIN.AVAX]: 43114, +}; + const fetch = (chain: Chain) => { return async (timestamp: number): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp( @@ -43,20 +42,65 @@ const fetch = (chain: Chain) => { const formattedDate = date.toISOString().replace(/\.(\d{3})Z$/, ".$1Z"); // * call api for daily fees and revenue - const dailyRes = await httpPost(endpoints[chain].dailyFees, { date: formattedDate }); + const dailyRes = await httpPost(endpoints[chain].dailyFees, { + date: formattedDate, + chain_id: CHAIN_ID[chain], + }); const dailyData = dailyRes as IDailyFeeData; + const dailyInterestPaid = parseFloat(dailyData.daily_interest_paid); + const dailyTradingFee = parseFloat(dailyData.daily_trading_fee); + const dailyBountyFeeToProtocol = parseFloat( + dailyData.daily_bounty_fee_to_protocol + ); + const dailyBountyFeeToLiquidator = parseFloat( + dailyData.daily_bounty_fee_to_liquidator + ); + const dailyLiquidationFee = parseFloat(dailyData.daily_liquidation_fee); + const totalInterestPaid = parseFloat(dailyData.total_interest_paid); + const totalTradingFee = parseFloat(dailyData.total_trading_fee); + const totalBountyFeeToProtocol = parseFloat( + dailyData.total_bounty_fee_to_protocol + ); + const totalBountyFeeToLiquidator = parseFloat( + dailyData.total_bounty_fee_to_liquidator + ); + const totalLiquidationFee = parseFloat(dailyData.total_liquidation_fee); - // * call api for realtime total fees and revenue - const realtimeRes = await httpPost(endpoints[chain].realtimeCompanyRevenue, {}); - const realtimeData = realtimeRes as ICompanyRevenue; + const dailyFees = + dailyInterestPaid + + dailyTradingFee + + dailyLiquidationFee + + dailyBountyFeeToLiquidator + + dailyBountyFeeToProtocol; + const dailySupplySideRevenue = + 0.1 * dailyInterestPaid + + 0.8 * dailyTradingFee + + dailyBountyFeeToProtocol; + const dailyProtocolRevenue = + 0.9 * dailyInterestPaid + 0.2 * dailyTradingFee; + const totalFees = + totalInterestPaid + + totalTradingFee + + totalLiquidationFee + + totalBountyFeeToLiquidator + + totalBountyFeeToProtocol; + const totalSupplySideRevenue = + 0.1 * totalInterestPaid + + 0.8 * totalTradingFee + + totalBountyFeeToProtocol; + const totalProtocolRevenue = + 0.9 * totalInterestPaid + 0.2 * totalTradingFee; return { timestamp, - dailyFees: dailyData.daily_fees, - dailyRevenue: dailyData.daily_revenue, - dailySupplySideRevenue: dailyData.claimable_token_interest, - totalFees: realtimeData.total_fees, - totalRevenue: realtimeData.total_revenue, + dailyFees: dailyFees, + dailyRevenue: dailyProtocolRevenue + dailySupplySideRevenue, + dailyProtocolRevenue: dailyProtocolRevenue, + dailySupplySideRevenue: dailySupplySideRevenue, + totalFees: totalFees, + totalRevenue: totalProtocolRevenue + totalSupplySideRevenue, + totalProtocolRevenue: totalProtocolRevenue, + totalSupplySideRevenue: totalSupplySideRevenue, }; }; }; @@ -68,6 +112,6 @@ const adapter: Adapter = { start: 1701907200, }, }, - version: 1 + version: 1, }; export default adapter; From f909f7cdcb3d1032489ab495d3050e1f52a8e74f Mon Sep 17 00:00:00 2001 From: ideapacito Date: Tue, 20 Aug 2024 15:35:16 +0700 Subject: [PATCH 1231/1590] fix fwx dexs --- dexs/fwx/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dexs/fwx/index.ts b/dexs/fwx/index.ts index ee6560aede..af77e6bdc1 100644 --- a/dexs/fwx/index.ts +++ b/dexs/fwx/index.ts @@ -26,7 +26,7 @@ const CHAIN_ID = { const endpoints: Record = { [CHAIN.AVAX]: { tradingVolume: `https://app.fwx.finance/api/v2/trade/volume`, - openInterest: `https://analytics.fwx.finance/trade/daily-open-interest`, + openInterest: `https://analytics.fwx.finance/api/trade/daily-open-interest`, }, }; @@ -61,7 +61,6 @@ const fetch = (chain: Chain) => { (x: IDailyData) => new Date(x.date).getTime() == new Date(formattedDate).getTime() ); - console.log(dailyVolumeData?.total, dailyOpenInterestData?.total); return { dailyVolume: convertStringNumber(dailyVolumeData?.total || "0"), From 690c907d942e6b4d6906cf30c6f5c428e12875c1 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Tue, 20 Aug 2024 12:45:31 +0200 Subject: [PATCH 1232/1590] Feat:Adapter, Ribbon, fees & volume --- fees/ribbon/index.ts | 96 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 fees/ribbon/index.ts diff --git a/fees/ribbon/index.ts b/fees/ribbon/index.ts new file mode 100644 index 0000000000..675c56954b --- /dev/null +++ b/fees/ribbon/index.ts @@ -0,0 +1,96 @@ +import * as sdk from "@defillama/sdk"; +import request, { gql } from "graphql-request"; +import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +interface IVault { + id: string; + totalFeeCollected: number; + totalNominalVolume: number; + underlyingAsset: string; +} + +interface IVaultsResponse { + vaults: IVault[]; +} + +const ethereum_endpointId: string = + "3GhHcRwF6yH7WXGcJJvac9B5MHPuoXhS9uxc49TPqLf6"; +const avax_endpointId: string = "AmJzFkqot9NjxPCRLK8yXopYt3rtS736ZEX2zEFg7Tz2"; + +const query = gql` + query getVaults($block: Int!) { + vaults(block: { number: $block }) { + id + totalFeeCollected + totalNominalVolume + underlyingAsset + } + } +`; + +const fetch = async ( + endpointId: string, + { getStartBlock, getEndBlock, createBalances }: FetchOptions +): Promise => { + const dailyFees = createBalances(); + const totalFees = createBalances(); + const dailyVolume = createBalances(); + const totalVolume = createBalances(); + + const [prevDayBlock, toDayBlock] = await Promise.all([ + getStartBlock(), + getEndBlock(), + ]); + + const endpoint = sdk.graph.modifyEndpoint(endpointId); + + const [{ vaults: fromVaults }, { vaults: toVaults }] = await Promise.all([ + request(endpoint, query, { block: prevDayBlock - 50 }), + request(endpoint, query, { block: toDayBlock - 50 }), + ]); + + toVaults.forEach((toVault) => { + const fromVault = fromVaults.find((vault) => vault.id === toVault.id); + + const token = toVault.underlyingAsset; + const prevFee = fromVault ? fromVault.totalFeeCollected : 0; + const currFee = toVault.totalFeeCollected; + + const prevVolume = fromVault ? fromVault.totalNominalVolume : 0; + const currVolume = toVault.totalNominalVolume; + + if (token) { + totalFees.add(token, currFee); + const dailyFee = currFee - prevFee; + if (dailyFee >= 0) { + dailyFees.add(token, dailyFee); + } + + totalVolume.add(token, currVolume); + const dailyVolumee = currVolume - prevVolume; + if (dailyVolumee >= 0) { + dailyVolume.add(token, dailyVolumee); + } + } + }); + + return { dailyFees, dailyVolume, totalFees, totalVolume }; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.ETHEREUM]: { + fetch: (options: FetchOptions) => fetch(ethereum_endpointId, options), + start: 1617228000, + }, + [CHAIN.AVAX]: { + fetch: (options: FetchOptions) => fetch(avax_endpointId, options), + start: 1617228000, + runAtCurrTime: false, + }, + }, +}; + +export default adapter; From 099be5c40ea31f0962e5a5461c6496e6756dbf98 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Tue, 20 Aug 2024 12:50:45 +0200 Subject: [PATCH 1233/1590] small fix --- fees/ribbon/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/fees/ribbon/index.ts b/fees/ribbon/index.ts index 675c56954b..1fffc12f14 100644 --- a/fees/ribbon/index.ts +++ b/fees/ribbon/index.ts @@ -88,7 +88,6 @@ const adapter: Adapter = { [CHAIN.AVAX]: { fetch: (options: FetchOptions) => fetch(avax_endpointId, options), start: 1617228000, - runAtCurrTime: false, }, }, }; From 39b6a79046bf25036082357b0d77db34deb71663 Mon Sep 17 00:00:00 2001 From: ideapacito Date: Tue, 20 Aug 2024 20:19:14 +0700 Subject: [PATCH 1234/1590] implement fwx-dex fees --- fees/fwx-dex/index.ts | 76 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 fees/fwx-dex/index.ts diff --git a/fees/fwx-dex/index.ts b/fees/fwx-dex/index.ts new file mode 100644 index 0000000000..33b1456d36 --- /dev/null +++ b/fees/fwx-dex/index.ts @@ -0,0 +1,76 @@ +import * as sdk from "@defillama/sdk"; +import { CHAIN } from "../../helpers/chains"; +import { univ2DimensionAdapter } from "../../helpers/getUniSubgraph"; +import { SimpleAdapter } from "../../adapters/types"; + +const chainConfigs = { + [CHAIN.AVAX]: { + graphUrl: + "https://subgraphs.fwx.finance/avac/subgraphs/name/fwx-exchange-avac", + feesPercent: { + UserFees: 0.1, + Fees: 0.1, + SupplySideRevenue: 0.075, + ProtocolRevenue: 0.025, + Revenue: 0.025, + }, + methodology: { + UserFees: "User pays 0.1% fees on each swap", + Fees: "A 0.1% of each swap is collected as trading fees", + SupplySideRevenue: + "A 0.075% from each swap is distributed to liquidity providers", + ProtocolRevenue: "A 0.025% fees goes to FWX treasury", + Revenue: "Governance revenue is 0.025% trading fees", + }, + start: 1717632000, + }, + [CHAIN.BASE]: { + graphUrl: + "https://subgraphs.fwx.finance/base/subgraphs/name/fwx-exchange-base", + feesPercent: { + UserFees: 0.1, + Fees: 0.1, + SupplySideRevenue: 0.075, + ProtocolRevenue: 0.025, + Revenue: 0.025, + }, + methodology: { + UserFees: "User pays 0.25% fees on each swap", + Fees: "A 0.25% of each swap is collected as trading fees", + SupplySideRevenue: + "A 0.20833% from each swap is distributed to liquidity providers", + ProtocolRevenue: "A 0.04167% fees goes to FWX treasury", + Revenue: "Governance revenue is 0.04167% trading fees", + }, + start: 1722988800, + }, +}; + +const adapters: SimpleAdapter = { + adapter: {}, + version: 2, +}; + +Object.entries(chainConfigs).reduce((acc, [chain, value]) => { + adapters.adapter[chain] = { + ...univ2DimensionAdapter( + { + graphUrls: { + [chain]: sdk.graph.modifyEndpoint(value.graphUrl), + }, + dailyVolume: { + factory: "pancakeDayData", + }, + totalVolume: { + factory: "pancakeFactories", + }, + feesPercent: { ...value.feesPercent, type: "volume" }, + }, + { methodology: value.methodology } + ).adapter[chain], + start: value.start, + }; + return acc; +}, {} as SimpleAdapter); + +export default adapters; From 1af7bfdf3ec97037f1a97cee6b8a888d1d5ad4ea Mon Sep 17 00:00:00 2001 From: pho-phoenix Date: Tue, 20 Aug 2024 15:55:29 +0200 Subject: [PATCH 1235/1590] Add Jellyverse adapter for SEI chain - Create new directory for Jellyverse - Implement index.ts with adapter for tracking daily volume and fees - Configure endpoint for SEI chain subgraph - Implement volume and fees calculation based on poolSnapshots - Set up adapter with v2 breakdown for SEI chain --- dexs/jellyverse/index.ts | 86 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 dexs/jellyverse/index.ts diff --git a/dexs/jellyverse/index.ts b/dexs/jellyverse/index.ts new file mode 100644 index 0000000000..8a46d3c29c --- /dev/null +++ b/dexs/jellyverse/index.ts @@ -0,0 +1,86 @@ +import * as sdk from "@defillama/sdk"; +import { Chain } from "@defillama/sdk/build/general"; +import request, { gql } from "graphql-request"; +import { BaseAdapter, BreakdownAdapter, ChainEndpoints, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getStartTimestamp } from "../../helpers/getStartTimestamp"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; + +const endpoints: ChainEndpoints = { + [CHAIN.SEI]: "https://graph.mainnet.jellyverse.org/subgraphs/name/jelly/verse" +}; + +interface IPool { + id: string; + swapVolume: string; + swapFees: string; +} + +interface IPoolSnapshot { + today: IPool[]; + yesterday: IPool[]; +} + +const v2Graphs = (chain: Chain) => { + return async ({ endTimestamp }): Promise => { + const startTimestamp = getTimestampAtStartOfDayUTC(endTimestamp) + const fromTimestamp = startTimestamp - 60 * 60 * 24 + const toTimestamp = startTimestamp + + const graphQuery = gql` + query volumes { + today: poolSnapshots(where: {timestamp: ${toTimestamp}}, orderBy: swapVolume, orderDirection: desc) { + id + swapVolume + swapFees + } + yesterday: poolSnapshots(where: {timestamp: ${fromTimestamp}}, orderBy: swapVolume, orderDirection: desc) { + id + swapVolume + swapFees + } + } + `; + + const graphRes: IPoolSnapshot = await request(endpoints[chain], graphQuery); + + const { dailyVolume, dailyFees } = graphRes.today.reduce((acc, p: IPool) => { + const yesterdayPool = graphRes.yesterday.find((e: IPool) => e.id.split('-')[0] === p.id.split('-')[0]); + const yesterdayVolume = Number(yesterdayPool?.swapVolume || '0'); + const yesterdayFees = Number(yesterdayPool?.swapFees || '0'); + + const volumeDiff = Number(p.swapVolume) - yesterdayVolume; + const feesDiff = Number(p.swapFees) - yesterdayFees; + + acc.dailyVolume += volumeDiff; + acc.dailyFees += feesDiff; + + return acc; + }, { dailyVolume: 0, dailyFees: 0 }); + + return { + dailyVolume: dailyVolume.toString(), + dailyFees: dailyFees.toString(), + }; + }; +}; + +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + v2: { + [CHAIN.SEI]: { + fetch: v2Graphs(CHAIN.SEI), + start: getStartTimestamp({ + endpoints, + chain: CHAIN.SEI, + dailyDataField: `balancerSnapshots`, + dateField: 'timestamp', + volumeField: 'totalSwapVolume' + }), + } + } + } +}; + +export default adapter; From 96877ddc09451b9d49478390877a20304f41a8a3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 20 Aug 2024 14:42:53 +0000 Subject: [PATCH 1236/1590] fix nagative value --- adapters/types.ts | 4 ++-- dexs/swaap/index.ts | 23 ++++++++++++++++------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/adapters/types.ts b/adapters/types.ts index 7f33c77211..e0bffa5578 100644 --- a/adapters/types.ts +++ b/adapters/types.ts @@ -178,8 +178,8 @@ export enum AdapterType { export type FetchResult = FetchResultVolume & FetchResultFees & FetchResultAggregators & FetchResultOptions & FetchResultIncentives export const whitelistedDimensionKeys = new Set([ - 'startTimestamp', 'chain', 'timestamp', - + 'startTimestamp', 'chain', 'timestamp','block', + 'dailyVolume', 'totalVolume', 'dailyShortOpenInterest', 'dailyLongOpenInterest', 'dailyOpenInterest', 'dailyBridgeVolume', 'totalBridgeVolume', 'totalFees', 'dailyFees', 'dailyUserFees', 'totalRevenue', 'dailyRevenue', 'dailyProtocolRevenue', 'dailyHoldersRevenue', 'dailySupplySideRevenue', 'totalProtocolRevenue', 'totalSupplySideRevenue', 'totalUserFees', 'dailyBribesRevenue', 'dailyTokenTaxes', 'tokenIncentives', diff --git a/dexs/swaap/index.ts b/dexs/swaap/index.ts index 87f2e7cc6f..c22b7915ad 100644 --- a/dexs/swaap/index.ts +++ b/dexs/swaap/index.ts @@ -1,5 +1,5 @@ import * as sdk from "@defillama/sdk"; -import { BreakdownAdapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions, FetchResult } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, GraphQLClient } from "graphql-request"; import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; @@ -70,8 +70,8 @@ interface Data { const getVolume = async (options: FetchOptions) => { - const endtimestamp = options.startOfDay - const starttimestamp = endtimestamp - 86400 + const starttimestamp = options.startOfDay; + const endtimestamp = starttimestamp + 86400 const startId = config[options.chain].id + '-' + starttimestamp const endId = config[options.chain].id + '-' + endtimestamp @@ -93,14 +93,16 @@ const getVolume = async (options: FetchOptions) => { const dailyVolume = Number(result.end?.totalSwapVolume || 0) - Number(result.start?.totalSwapVolume || 0) const totalVolume = Number(result.end?.totalSwapVolume || 0) return { - dailyVolume, + // If the daily volume is negative, set it to 0 + dailyVolume: dailyVolume < 0 ? 0 : dailyVolume, totalVolume, } } -const v2graphs = async (options: FetchOptions): Promise => { +const v2graphs = async (_t: any, _tt: any ,options: FetchOptions): Promise => { const { dailyVolume, totalVolume } = await getVolume(options) return { + timestamp: options.startOfDay, dailyVolume, totalVolume } @@ -122,11 +124,18 @@ const v1graphs = getChainVolume({ }); const adapter: BreakdownAdapter = { - version: 2, + version: 1, breakdown: { v1: { [CHAIN.POLYGON]: { - fetch: v1graphs(CHAIN.POLYGON), + fetch: async (_t: any, _tt: any ,options: FetchOptions) => { + const { dailyVolume, totalVolume } = await getVolume(options) + return { + timestamp: options.startOfDay, + dailyVolume, + totalVolume + } + }, start: 1655195452 }, }, From f44aaef4bc9ed74f16193303bd99bfde0fbbd804 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 20 Aug 2024 15:57:30 +0100 Subject: [PATCH 1237/1590] 3xcalibur --- dexs/3xcalibur/index.ts | 8 ++--- helpers/getUniSubgraphVolume.ts | 58 +++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/dexs/3xcalibur/index.ts b/dexs/3xcalibur/index.ts index 265468e4eb..865104b7ae 100644 --- a/dexs/3xcalibur/index.ts +++ b/dexs/3xcalibur/index.ts @@ -1,23 +1,19 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('J9xPBr2XdBxWvLi2HSiz8hW76HUU91WQ9ztkicCRccDS'), }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "swapFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "uniswapDayData", - field: DEFAULT_DAILY_VOLUME_FIELD, - }, }); const adapter: SimpleAdapter = { diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index c1397e57b8..f3a10737f6 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -149,7 +149,64 @@ function getChainVolume({ }; }; } +function getChainVolume2({ + graphUrls, + totalVolume = { + factory: DEFAULT_TOTAL_VOLUME_FACTORY, + field: DEFAULT_TOTAL_VOLUME_FIELD, + }, + hasTotalVolume = true, + getCustomBlock = undefined, +}: IGetChainVolumeParams) { + const totalVolumeQuery = gql` + ${totalVolume.factory}( + block: { number: $block } + ) { + ${totalVolume.field} + } + `; + const graphQueryTotalVolume = gql`${hasTotalVolume ? `query get_total_volume($block: Int) { ${totalVolumeQuery} }` : ""}` + + return (chain: Chain) => { + return async (options: FetchOptions) => { + const { endTimestamp, startTimestamp, getEndBlock, getStartBlock } = options; + + const endBlock = (await (getCustomBlock ? getCustomBlock(endTimestamp) : getEndBlock()).catch((e: any) => + console.log(wrapGraphError(e).message), + )) ?? undefined; + const startBlock = (await (getCustomBlock ? getCustomBlock(startTimestamp) :getStartBlock()).catch((e: any) => + console.log(wrapGraphError(e).message), + )) ?? undefined; + + const graphResTotal = hasTotalVolume ? await request(graphUrls[chain], graphQueryTotalVolume, { block: endBlock }).catch(e => { + try { + return JSON.parse(e.response.error).data + } catch (error) { + console.error(`Failed to get total volume on ${chain} ${graphUrls[chain]}: ${wrapGraphError(e).message}`) + } + }) : undefined; + const total = graphResTotal ? graphResTotal[totalVolume.factory]?.reduce((total: number, factory: any) => total + Number(factory[totalVolume.field]), 0) : undefined; + + const graphResPrevTotal = hasTotalVolume ? await request(graphUrls[chain], graphQueryTotalVolume, { block: startBlock }).catch(e => { + try { + return JSON.parse(e.response.error).data + } catch (error) { + console.error(`Failed to get total volume on ${chain} ${graphUrls[chain]}: ${wrapGraphError(e).message}`) + } + }) : undefined; + const prevTotal = graphResPrevTotal ? graphResPrevTotal[totalVolume.factory]?.reduce((total: number, factory: any) => total + Number(factory[totalVolume.field]), 0) : undefined; + + let dailyVolumeValue = total - prevTotal + + return { + block: endBlock, + totalVolume: total, + dailyVolume: dailyVolumeValue, + }; + }; + }; +} function getChainVolumeWithGasToken({ graphUrls, totalVolume = { @@ -240,6 +297,7 @@ function univ2Adapter(endpoints: { export { getUniqStartOfTodayTimestamp, getChainVolume, + getChainVolume2, getChainVolumeWithGasToken, univ2Adapter, DEFAULT_TOTAL_VOLUME_FACTORY, From 6ceb818514e016256e53c5bb736b2ea50a836fbf Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 20 Aug 2024 16:14:50 +0100 Subject: [PATCH 1238/1590] arbitrum ex --- dexs/ArbitrumExchange/index.ts | 13 ++--- helpers/getUniSubgraph/index.ts | 84 ++------------------------------- 2 files changed, 8 insertions(+), 89 deletions(-) diff --git a/dexs/ArbitrumExchange/index.ts b/dexs/ArbitrumExchange/index.ts index 53c1042e64..e70b32c602 100644 --- a/dexs/ArbitrumExchange/index.ts +++ b/dexs/ArbitrumExchange/index.ts @@ -5,8 +5,7 @@ import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, + getGraphDimensions2, DEFAULT_TOTAL_VOLUME_FIELD, } from "../../helpers/getUniSubgraph" @@ -18,9 +17,7 @@ const v3Endpoints = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('AQPMJVpukYUo96WvuKqn7aPZn3m8BHckYs82ZLSMKyeu'), }; -const VOLUME_USD = "volumeUSD"; - -const v2Graph = getGraphDimensions({ +const v2Graph = getGraphDimensions2({ graphUrls: v2Endpoints, feesPercent: { type: "volume", @@ -33,16 +30,12 @@ const v2Graph = getGraphDimensions({ } }); -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", ProtocolRevenue: 0, diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 2b69bbf772..200487d8b0 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -293,35 +293,13 @@ function getGraphDimensions2({ field: DEFAULT_TOTAL_VOLUME_FIELD, blockGraphType: DEFAULT_BLOCK_TYPE }, - dailyVolume = { - factory: DEFAULT_TOTAL_VOLUME_FACTORY, - field: DEFAULT_TOTAL_VOLUME_FIELD, - dateField: DEFAULT_DAILY_DATE_FIELD, - pairs: DEFAULT_DAILY_PAIR_FACTORY, - idGraphType: DEFAULT_ID_TYPE - }, totalFees = { factory: DEFAULT_TOTAL_FEES_FACTORY, field: DEFAULT_TOTAL_FEES_FIELD, }, - dailyFees = { - factory: DEFAULT_DAILY_FEES_FACTORY, - field: DEFAULT_DAILY_FEES_FIELD, - }, getCustomBlock, feesPercent, - blacklistTokens = {} }: IGetChainVolumeParams) { - dailyFees; - // DAILY VOLUME - // Graph fields - const graphFieldsDailyVolume = { - factory: dailyVolume.factory ?? DEFAULT_TOTAL_VOLUME_FACTORY, - field: dailyVolume.field ?? DEFAULT_TOTAL_VOLUME_FIELD, - dateField: dailyVolume.dateField ?? DEFAULT_DAILY_DATE_FIELD, // For alternative query - pairs: dailyVolume.pairs ?? DEFAULT_DAILY_PAIR_FACTORY, - idGraphType: dailyVolume.idGraphType ?? DEFAULT_ID_TYPE - } // TOTAL VOLUME // Graph fields const graphFieldsTotalVolume = { @@ -352,24 +330,6 @@ function getGraphDimensions2({ }`; return (chain: Chain) => { - - const dailyVolumePairsQuery = blacklistTokens[chain] ? gql` - query daily_volume_byPair ($timestamp_gt: Int, $timestamp_lte: Int) { - pairDayDatas(where:{${graphFieldsDailyVolume.dateField}_gt: $timestamp_gt, ${graphFieldsDailyVolume.dateField}_lte: $timestamp_lte, ${graphFieldsDailyVolume.field}_not: 0}, orderBy: ${graphFieldsDailyVolume.field}, orderDirection: desc, first: 1000){ - date - token0{ - symbol - id - } - token1{ - symbol - id - } - ${graphFieldsDailyVolume.field} - } - } - ` - : undefined; return async (options: FetchOptions) => { const { endTimestamp, startTimestamp, getEndBlock, getStartBlock } = options; @@ -380,42 +340,7 @@ function getGraphDimensions2({ console.log(wrapGraphError(e).message), )) ?? undefined; - let graphResDailyVolume; let dailyVolume: any; - if (dailyVolumePairsQuery) { - console.info("Calculating volume excluding blacklisted tokens..."); - graphResDailyVolume = await request( - graphUrls[chain], - dailyVolumePairsQuery, - { - timestamp_gt: startTimestamp, - timestamp_lte: endTimestamp, - }, - graphRequestHeaders?.[chain], - ) - .catch(handle200Errors) - .catch((e) => - console.error( - `GraphFetchError: Failed to get daily volume on ${chain} with graph ${ - graphUrls[chain] - }: ${wrapGraphError(e).message}`, - ), - ); - dailyVolume = graphResDailyVolume?.[ - graphFieldsDailyVolume.pairs - ]?.reduce((acc: number | undefined, current: pair) => { - if ( - blacklistTokens[chain].includes(current.token0.id) || - blacklistTokens[chain].includes(current.token1.id) - ) - return acc; - if (current?.[graphFieldsDailyVolume.field]) { - if (acc) return acc += +current?.[graphFieldsDailyVolume.field] - return +current?.[graphFieldsDailyVolume.field] - } - return acc - }, undefined as number | undefined) - } // TOTAL VOLUME const graphResTotalVolume = await request(graphUrls[chain], totalVolumeQuery, { block: endBlock }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`GraphFetchError: Failed to get total volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)); const totalVolume = graphResTotalVolume?.[graphFieldsTotalVolume.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalVolume.field]), 0)?.toString() @@ -430,19 +355,19 @@ function getGraphDimensions2({ if (totalVolume === undefined || feesPercent?.Fees === undefined) console.error(`Unable to get total fees on ${chain} from graph.`) }); - const totalFees = graphResTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) + const totalFees = graphResTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) // PREV TOTAL FEES const graphResPrevTotalFees = await request(graphUrls[chain], totalFeesQuery, { block: startBlock }, graphRequestHeaders?.[chain]).catch(_e => { if (totalVolume === undefined || feesPercent?.Fees === undefined) console.error(`Unable to get total fees on ${chain} from graph.`) }); - const prevTotalFees = graphResPrevTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) + const prevTotalFees = graphResPrevTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) - const dailyFees = totalFees - prevTotalFees + const dailyFees = (totalFees == undefined && prevTotalFees == undefined) ? undefined : totalFees - prevTotalFees // ts-node --transpile-only cli/testAdapter.ts protocols uniswap - const response: FetchResultGeneric = { + let response: FetchResultGeneric = { timestamp: endTimestamp, block: endBlock, totalVolume, @@ -506,6 +431,7 @@ function wrapGraphError(e: Error) { export { wrapGraphError, getGraphDimensions, + getGraphDimensions2, univ2DimensionAdapter, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, From 7a132aae6fb9177d0061209c9b5face645cf18cb Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 20 Aug 2024 16:18:30 +0100 Subject: [PATCH 1239/1590] derp --- dexs/DerpDEX/index.ts | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/dexs/DerpDEX/index.ts b/dexs/DerpDEX/index.ts index f4dc81e508..29d3e98e30 100644 --- a/dexs/DerpDEX/index.ts +++ b/dexs/DerpDEX/index.ts @@ -1,7 +1,7 @@ import * as sdk from "@defillama/sdk"; import { Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpoints = { [CHAIN.ERA]: @@ -17,21 +17,12 @@ const v3StartTimes = { // [CHAIN.OP_BNB]: 1695275237, }; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "volumeUSD", - dateField: "date", - }, - dailyFees: { - factory: "uniswapDayData", - field: "feesUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 0, From 8fcd0a1ac5ee4d82cea34c560eaeae564c2178f4 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 20 Aug 2024 16:20:07 +0100 Subject: [PATCH 1240/1590] smardex --- dexs/SmarDex/index.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/dexs/SmarDex/index.ts b/dexs/SmarDex/index.ts index 7bc1ae13a0..d1c88910cc 100644 --- a/dexs/SmarDex/index.ts +++ b/dexs/SmarDex/index.ts @@ -1,8 +1,7 @@ import { SimpleAdapter } from "../../adapters/types"; import { - DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, - getGraphDimensions, + getGraphDimensions2, } from "../../helpers/getUniSubgraph"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; @@ -52,18 +51,13 @@ const startTimes = { * The method `getGraphDimensions` try returns daily fees and total fees * but we are currently not using them in our subgraphs, so they are undefined */ -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls, graphRequestHeaders, totalVolume: { factory: "smardexFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "factoryDayData", - field: DEFAULT_DAILY_VOLUME_FIELD, - dateField: "date", - }, }); const adapter: SimpleAdapter = { adapter: {}, version: 2 } From f56b300bbdfe7347a3ac5c894d93eb1785266a61 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 20 Aug 2024 15:26:58 +0000 Subject: [PATCH 1241/1590] fix wrong calling --- dexs/swaap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/swaap/index.ts b/dexs/swaap/index.ts index c22b7915ad..ec51ccd072 100644 --- a/dexs/swaap/index.ts +++ b/dexs/swaap/index.ts @@ -129,7 +129,7 @@ const adapter: BreakdownAdapter = { v1: { [CHAIN.POLYGON]: { fetch: async (_t: any, _tt: any ,options: FetchOptions) => { - const { dailyVolume, totalVolume } = await getVolume(options) + const { dailyVolume, totalVolume } = await v1graphs(options.chain)(options) return { timestamp: options.startOfDay, dailyVolume, From e22c6da40ae6c13b4ae204ba632c659ac1b18003 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 20 Aug 2024 16:35:47 +0000 Subject: [PATCH 1242/1590] update houdini-swap fees --- fees/houdini-swap.ts | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/fees/houdini-swap.ts b/fees/houdini-swap.ts index 7648272071..d9581075b7 100644 --- a/fees/houdini-swap.ts +++ b/fees/houdini-swap.ts @@ -1,20 +1,11 @@ -import { Chain } from "@defillama/sdk/build/general" +import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../helpers/chains"; import { Adapter, FetchOptions, FetchResultFees } from "../adapters/types"; -import { queryIndexer } from "../helpers/indexer"; +import { addTokensReceived } from "../helpers/token"; const graph = (_chain: Chain): any => { return async (timestamp: number, _: any, options: FetchOptions): Promise => { - const dailyFees = options.createBalances(); - const query = await queryIndexer(` - SELECT value FROM ethereum.transactions - WHERE block_number > 16416220 - and to_address = '\\xc36d36dd4a45f8817a49d3751557fec9871f0e32' - and success = true - and encode(data, 'hex') = '' - AND block_time BETWEEN llama_replace_date_range; - `, options); - query.map((a: any) => dailyFees.addGasToken(a.value)) + const dailyFees = await addTokensReceived({target: '0x45CF73349a4895fabA18c0f51f06D79f0794898D', tokens: ['0x922d8563631b03c2c4cf817f4d18f6883aba0109'], options}) return { dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees, timestamp } } } From d004f76d79a90bc1f416cc566eee304f404ecb21 Mon Sep 17 00:00:00 2001 From: Leonardo Nagasaki <56836200+Leoakin43@users.noreply.github.com> Date: Tue, 20 Aug 2024 14:33:27 -0300 Subject: [PATCH 1243/1590] Added seize tokens to daily fees --- fees/moonwell/index.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/fees/moonwell/index.ts b/fees/moonwell/index.ts index 704614c651..838ab5e60a 100644 --- a/fees/moonwell/index.ts +++ b/fees/moonwell/index.ts @@ -7,6 +7,7 @@ const comptrollerABI = { getAllMarkets: "address[]:getAllMarkets", accrueInterest: "event AccrueInterest(uint256 cashPrior,uint256 interestAccumulated,uint256 borrowIndex,uint256 totalBorrows)", reservesAdded: "event ReservesAdded(address benefactor,uint256 addAmount,uint256 newTotalReserves)", + liquidateBorrow: "event LiquidateBorrow (address liquidator, address borrower, uint256 repayAmount, address mTokenCollateral, uint256 seizeTokens)", reserveFactor: "uint256:reserveFactorMantissa", }; @@ -56,6 +57,18 @@ async function getFees(market: string, { createBalances, api, getLogs, }: FetchO })); }).flat() + const liquidateBorrowLogs: any[] = (await getLogs({ + targets: markets, + flatten: false, + eventAbi: comptrollerABI.liquidateBorrow, + })).map((log: any, index: number) => { + return log.map((i: any) => ({ + ...i, + seizeTokens: Number(i.seizeTokens), + marketIndex: index, + })); + }).flat() + logs.forEach((log: any) => { const marketIndex = log.marketIndex; const underlying = underlyings[marketIndex] @@ -69,6 +82,12 @@ async function getFees(market: string, { createBalances, api, getLogs, }: FetchO dailyRevenue!.add(underlying, log.addAmount); }) + liquidateBorrowLogs.forEach((log: any) => { + const marketIndex = log.marketIndex; + const underlying = underlyings[marketIndex] + dailyFees!.add(underlying, log.seizeTokens); + }) + return { dailyFees, dailyRevenue } } From 6f9e242866d593af397cc218a0057e1d4bd85533 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 21 Aug 2024 00:59:44 +0100 Subject: [PATCH 1244/1590] add illuvium --- fees/illuvium.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 fees/illuvium.ts diff --git a/fees/illuvium.ts b/fees/illuvium.ts new file mode 100644 index 0000000000..a145f54925 --- /dev/null +++ b/fees/illuvium.ts @@ -0,0 +1,36 @@ +import { Adapter, FetchOptions, } from '../adapters/types'; +import { CHAIN } from '../helpers/chains'; + +const fetchFees = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + let transfers = [] as any[] + let cursor = "" + do{ + const url = `https://api.immutable.com/v1/transfers?receiver=0x2208850ea5569617d5350f8cf681031102c1d931&max_timestamp=${new Date(options.toTimestamp*1e3).toISOString()}&min_timestamp=${new Date(options.fromTimestamp*1e3).toISOString()}&cursor=${cursor}` + const data = await fetch(url).then(r=>r.json()) + transfers = transfers.concat(data.result) + cursor=data.cursor + } while(cursor !== "") + + transfers.forEach(transfer=>{ + if(transfer.token.type === "ETH"){ + dailyFees.addCGToken("ethereum", transfer.token.data.quantity/1e18) + } + }) + return { + dailyFees, + dailyRevenue: dailyFees, + } +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.IMX]: { + fetch: fetchFees, + start: 0 + } + } +} + +export default adapter; From 6b8b3e7c6b925e900101d9aacb8683739cdcc174 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 21 Aug 2024 01:08:16 +0100 Subject: [PATCH 1245/1590] methodology --- fees/illuvium.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/fees/illuvium.ts b/fees/illuvium.ts index a145f54925..3360e7ad94 100644 --- a/fees/illuvium.ts +++ b/fees/illuvium.ts @@ -28,9 +28,14 @@ const adapter: Adapter = { adapter: { [CHAIN.IMX]: { fetch: fetchFees, - start: 0 - } - } + start: 0, + meta: { + methodology: { + Fees: "ETH paid to purchase fuel", + } + } + }, + }, } export default adapter; From a18cca211407d4802a848960330aebfb4b1d74a4 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 21 Aug 2024 01:09:31 +0100 Subject: [PATCH 1246/1590] add raybot --- fees/raybot.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 fees/raybot.ts diff --git a/fees/raybot.ts b/fees/raybot.ts new file mode 100644 index 0000000000..527639d2b8 --- /dev/null +++ b/fees/raybot.ts @@ -0,0 +1,29 @@ +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("3521814", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: '4mih95RmBqfHYvEfqq6uGGLp1Fr3gVS3VNSEa3JVRfQK' + })); + 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; From 13bb5405ab568b89043a5cf8cadff9844f70b611 Mon Sep 17 00:00:00 2001 From: unyoungwax Date: Wed, 21 Aug 2024 14:36:09 +0800 Subject: [PATCH 1247/1590] fix createSolBalances --- fees/4cast/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/4cast/index.ts b/fees/4cast/index.ts index 2c4f602cd1..e1e02bc05f 100644 --- a/fees/4cast/index.ts +++ b/fees/4cast/index.ts @@ -11,7 +11,7 @@ const endpoint = "https://www.4cast.win/api/api/platformFees"; function createSolBalances(options: FetchOptions, value: string) { const balances = options.createBalances(); - balances.addGasToken(Number(value)); + balances.add('So11111111111111111111111111111111111111112', Number(value) * 1e9); return balances; } From 8956a845c3fefda340e10c452255dd829709df3d Mon Sep 17 00:00:00 2001 From: ideapacito Date: Wed, 21 Aug 2024 14:38:52 +0700 Subject: [PATCH 1248/1590] implement fwx-dex dexs --- dexs/fwx-dex/index.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 dexs/fwx-dex/index.ts diff --git a/dexs/fwx-dex/index.ts b/dexs/fwx-dex/index.ts new file mode 100644 index 0000000000..377a991ee5 --- /dev/null +++ b/dexs/fwx-dex/index.ts @@ -0,0 +1,18 @@ +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter( + { + [CHAIN.AVAX]: + "https://subgraphs.fwx.finance/avac/subgraphs/name/fwx-exchange-avac", + [CHAIN.BASE]: + "https://subgraphs.fwx.finance/base/subgraphs/name/fwx-exchange-base", + }, + { + factoriesName: "pancakeFactories", + dayData: "pancakeDayData", + } +); +adapters.adapter.avax.start = 1717632000; +adapters.adapter.base.start = 1722988800; +export default adapters; From 71261908288553c8b86b7dcdc14957eb81940f2a Mon Sep 17 00:00:00 2001 From: ideapacito Date: Wed, 21 Aug 2024 16:09:24 +0700 Subject: [PATCH 1249/1590] remove fwx-dex --- dexs/fwx-dex/index.ts | 18 ---------- fees/fwx-dex/index.ts | 76 ------------------------------------------- 2 files changed, 94 deletions(-) delete mode 100644 dexs/fwx-dex/index.ts delete mode 100644 fees/fwx-dex/index.ts diff --git a/dexs/fwx-dex/index.ts b/dexs/fwx-dex/index.ts deleted file mode 100644 index 377a991ee5..0000000000 --- a/dexs/fwx-dex/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; - -const adapters = univ2Adapter( - { - [CHAIN.AVAX]: - "https://subgraphs.fwx.finance/avac/subgraphs/name/fwx-exchange-avac", - [CHAIN.BASE]: - "https://subgraphs.fwx.finance/base/subgraphs/name/fwx-exchange-base", - }, - { - factoriesName: "pancakeFactories", - dayData: "pancakeDayData", - } -); -adapters.adapter.avax.start = 1717632000; -adapters.adapter.base.start = 1722988800; -export default adapters; diff --git a/fees/fwx-dex/index.ts b/fees/fwx-dex/index.ts deleted file mode 100644 index 33b1456d36..0000000000 --- a/fees/fwx-dex/index.ts +++ /dev/null @@ -1,76 +0,0 @@ -import * as sdk from "@defillama/sdk"; -import { CHAIN } from "../../helpers/chains"; -import { univ2DimensionAdapter } from "../../helpers/getUniSubgraph"; -import { SimpleAdapter } from "../../adapters/types"; - -const chainConfigs = { - [CHAIN.AVAX]: { - graphUrl: - "https://subgraphs.fwx.finance/avac/subgraphs/name/fwx-exchange-avac", - feesPercent: { - UserFees: 0.1, - Fees: 0.1, - SupplySideRevenue: 0.075, - ProtocolRevenue: 0.025, - Revenue: 0.025, - }, - methodology: { - UserFees: "User pays 0.1% fees on each swap", - Fees: "A 0.1% of each swap is collected as trading fees", - SupplySideRevenue: - "A 0.075% from each swap is distributed to liquidity providers", - ProtocolRevenue: "A 0.025% fees goes to FWX treasury", - Revenue: "Governance revenue is 0.025% trading fees", - }, - start: 1717632000, - }, - [CHAIN.BASE]: { - graphUrl: - "https://subgraphs.fwx.finance/base/subgraphs/name/fwx-exchange-base", - feesPercent: { - UserFees: 0.1, - Fees: 0.1, - SupplySideRevenue: 0.075, - ProtocolRevenue: 0.025, - Revenue: 0.025, - }, - methodology: { - UserFees: "User pays 0.25% fees on each swap", - Fees: "A 0.25% of each swap is collected as trading fees", - SupplySideRevenue: - "A 0.20833% from each swap is distributed to liquidity providers", - ProtocolRevenue: "A 0.04167% fees goes to FWX treasury", - Revenue: "Governance revenue is 0.04167% trading fees", - }, - start: 1722988800, - }, -}; - -const adapters: SimpleAdapter = { - adapter: {}, - version: 2, -}; - -Object.entries(chainConfigs).reduce((acc, [chain, value]) => { - adapters.adapter[chain] = { - ...univ2DimensionAdapter( - { - graphUrls: { - [chain]: sdk.graph.modifyEndpoint(value.graphUrl), - }, - dailyVolume: { - factory: "pancakeDayData", - }, - totalVolume: { - factory: "pancakeFactories", - }, - feesPercent: { ...value.feesPercent, type: "volume" }, - }, - { methodology: value.methodology } - ).adapter[chain], - start: value.start, - }; - return acc; -}, {} as SimpleAdapter); - -export default adapters; From cd53dc49c275ad46e55aa49fbf05fdc3ebe8b8d9 Mon Sep 17 00:00:00 2001 From: axtezy Date: Wed, 21 Aug 2024 11:59:24 +0200 Subject: [PATCH 1250/1590] Add bitlayer network, rename vars --- aggregators/rubic/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/aggregators/rubic/index.ts b/aggregators/rubic/index.ts index 0a1630267a..e313bd6264 100644 --- a/aggregators/rubic/index.ts +++ b/aggregators/rubic/index.ts @@ -38,10 +38,11 @@ const chains: Record = { [CHAIN.MERLIN]: 'merlin', [CHAIN.CORE]: 'core', [CHAIN.TAIKO]: 'taiko', - [CHAIN.ZKLINK]: 'zklink' + [CHAIN.ZKLINK]: 'zklink', + [CHAIN.BITLAYER]: 'bitlayer' }; -interface ApiResponce { +interface ApiResponse { daily_volume_in_usd: string; daily_transaction_count: string; total_volume_in_usd: string; @@ -49,13 +50,13 @@ interface ApiResponce { } const fetch = (chain: string) => async (options: FetchOptions): Promise => { - const responce: ApiResponce = ( + const response: ApiResponse = ( await fetchURL(`https://api.rubic.exchange/api/stats/defilama_onchain?date=${options.startTimestamp}&network=${chain}`) ); return { - dailyVolume: responce?.daily_volume_in_usd || '0', - totalVolume: responce?.total_volume_in_usd || '0', + dailyVolume: response?.daily_volume_in_usd || '0', + totalVolume: response?.total_volume_in_usd || '0', timestamp: options.startTimestamp, }; }; @@ -63,8 +64,7 @@ const fetch = (chain: string) => async (options: FetchOptions): Promise { - const key = chain[0]; - const value = chain[1]; + const [key, value] = chain; return { ...acc, From c2e6bc923d573dddbef8ad643a67b7b88bc06107 Mon Sep 17 00:00:00 2001 From: Bohdan Ilchenko Date: Wed, 21 Aug 2024 14:12:46 +0300 Subject: [PATCH 1251/1590] feat: add cyberPerp adapter --- dexs/cyberperp/cyberperp.ts | 48 +++++++++++++++++++++++++++++++++++++ dexs/cyberperp/index.ts | 14 +++++++++++ 2 files changed, 62 insertions(+) create mode 100644 dexs/cyberperp/cyberperp.ts create mode 100644 dexs/cyberperp/index.ts diff --git a/dexs/cyberperp/cyberperp.ts b/dexs/cyberperp/cyberperp.ts new file mode 100644 index 0000000000..d700b0c36c --- /dev/null +++ b/dexs/cyberperp/cyberperp.ts @@ -0,0 +1,48 @@ +import { request, gql } from "graphql-request"; +import { FetchOptions } from "../../adapters/types"; +import BigNumber from "bignumber.js"; + +const graphUrl = + "https://iota.graph.cyberperp.io/api/subgraphs/name/cyberLP-pool"; + +const getData = async (timestamp: number) => { + const query = gql` + { + volumeStats(first: 1, where: { period: daily, timestamp: ${timestamp} }) { + id + burn + margin + mint + swap + period + timestamp + } + } + `; + + const response = await request(graphUrl, query); + let dailyVolume = new BigNumber(0); + + if (response.volumeStats) { + const data = response.volumeStats[0]; + dailyVolume = dailyVolume + .plus(new BigNumber(data.mint)) + .plus(new BigNumber(data.swap)) + .plus(new BigNumber(data.burn)) + .plus(new BigNumber(data.margin)) + .dividedBy(new BigNumber(1e30)); + } + const _dailyVolume = dailyVolume.toString(); + return { + dailyVolume: _dailyVolume, + timestamp: timestamp, + }; +}; + +export const fetchVolume = async (options: FetchOptions) => { + const data = await getData(options.startOfDay); + return { + dailyVolume: data.dailyVolume, + timestamp: data.timestamp, + }; +}; diff --git a/dexs/cyberperp/index.ts b/dexs/cyberperp/index.ts new file mode 100644 index 0000000000..55f5aefbb9 --- /dev/null +++ b/dexs/cyberperp/index.ts @@ -0,0 +1,14 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { fetchVolume } from "./cyberperp"; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.IOTAEVM]: { + fetch: fetchVolume, + start: 1721692800, + }, + }, +}; +export default adapter; From 8276e2f242f26e667638017ea6a2c11395c4b920 Mon Sep 17 00:00:00 2001 From: Denys Proskura <57964380+MrJeleika@users.noreply.github.com> Date: Wed, 21 Aug 2024 17:06:56 +0300 Subject: [PATCH 1252/1590] Update api url --- aggregators/injex/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregators/injex/index.ts b/aggregators/injex/index.ts index 6f876f988b..24b7a95a54 100644 --- a/aggregators/injex/index.ts +++ b/aggregators/injex/index.ts @@ -1,7 +1,7 @@ import { httpGet } from '../../utils/fetchURL'; const fetchLogs = async (timestamp: any) => { - const res = await httpGet(`https://injex-api-cb4a9db30875.herokuapp.com/api/volume-stats/usd?timestamp=${timestamp.startOfDay}`); + const res = await httpGet(`https://inj-api-78847b1b16a1.herokuapp.com/api/volume-stats/usd?timestamp=${timestamp.startOfDay}`); return { dailyVolume: res.dailyVolume, totalVolume: res.totalVolume, From 59d52b35d9c8d897a65949afe36f6b5c5a7f4ffc Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 21 Aug 2024 14:27:48 +0000 Subject: [PATCH 1253/1590] mul by 13e --- aggregators/chainspot/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/aggregators/chainspot/index.ts b/aggregators/chainspot/index.ts index 4638726942..eff1ca543f 100644 --- a/aggregators/chainspot/index.ts +++ b/aggregators/chainspot/index.ts @@ -73,11 +73,9 @@ const fetch = async (_at: number, _t: any, options: FetchOptions) => { const unixTimestamp = getUniqStartOfTodayTimestamp( new Date(options.startOfDay * 1000) ); - + const url = `https://app.chainspot.io/api/2.0/statistic/daily-volume?chainId=${chainToId[options.chain]}×tamp=${unixTimestamp * 1e3}`; const volume = ( - await httpGet( - `https://app.chainspot.io/api/2.0/statistic/daily-volume?chainId=${chainToId[options.chain]}×tamp=${unixTimestamp}` - ) + await httpGet(url) )?.volume; return { From 2c8d2572ffa71da8820d31deb35ec32723d76ef0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 21 Aug 2024 16:08:57 +0000 Subject: [PATCH 1254/1590] fix version --- fees/splash/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/splash/index.ts b/fees/splash/index.ts index e596c41007..08ceb40ebd 100644 --- a/fees/splash/index.ts +++ b/fees/splash/index.ts @@ -19,14 +19,14 @@ const fetch = async (): Promise => { }; const adapter: Adapter = { - version: 2, + version: 1, adapter: { [CHAIN.CARDANO]: { fetch, start: 1717452000, + runAtCurrTime: true, }, }, - timetravel: false, }; export default adapter; From 2b4c88e6745cbbb1bec34961d9848b0e2eaee492 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 21 Aug 2024 17:30:26 +0000 Subject: [PATCH 1255/1590] fix delay dune query --- fees/pumpdotfun.ts | 2 +- helpers/dune.ts | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/fees/pumpdotfun.ts b/fees/pumpdotfun.ts index 54eda8844b..ad94bfbf66 100644 --- a/fees/pumpdotfun.ts +++ b/fees/pumpdotfun.ts @@ -4,7 +4,7 @@ import { queryDune } from "../helpers/dune"; const fetch: any = async (options: FetchOptions) => { const dailyFees = options.createBalances(); - const value = (await queryDune("3993882", { + const value = (await queryDune("4006384", { start: options.startTimestamp, end: options.endTimestamp, })); diff --git a/helpers/dune.ts b/helpers/dune.ts index d3e3876439..11da710219 100644 --- a/helpers/dune.ts +++ b/helpers/dune.ts @@ -27,7 +27,12 @@ const getLatestData = async (queryId: string) => { throw e; } } -const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) + + +async function randomDelay() { + const delay = Math.floor(Math.random() * 5) + 2 + return new Promise((resolve) => setTimeout(resolve, delay * 1000)) +} const inquiryStatus = async (execution_id: string, queryId:string) => { let _status = undefined; @@ -40,7 +45,7 @@ const inquiryStatus = async (execution_id: string, queryId:string) => { }))).state if (['QUERY_STATE_PENDING', 'QUERY_STATE_EXECUTING'].includes(_status)) { console.info(`waiting for query id ${queryId} to complete...`) - await delay(5000) // 5s + await randomDelay() // 1 - 4s } } catch (e: any) { throw e; From 3494cf46a0df7fb4ec892f6487258ba8100bb5cd Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 21 Aug 2024 17:47:03 +0000 Subject: [PATCH 1256/1590] fix disable count swap for derivation --- dexs/cyberperp/cyberperp.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/cyberperp/cyberperp.ts b/dexs/cyberperp/cyberperp.ts index d700b0c36c..456ff4db37 100644 --- a/dexs/cyberperp/cyberperp.ts +++ b/dexs/cyberperp/cyberperp.ts @@ -27,7 +27,7 @@ const getData = async (timestamp: number) => { const data = response.volumeStats[0]; dailyVolume = dailyVolume .plus(new BigNumber(data.mint)) - .plus(new BigNumber(data.swap)) + // .plus(new BigNumber(data.swap)) // is not list spot .plus(new BigNumber(data.burn)) .plus(new BigNumber(data.margin)) .dividedBy(new BigNumber(1e30)); From f5ddbe8321c6d52288fa42fb260dec084b97188e Mon Sep 17 00:00:00 2001 From: Leonardo Nagasaki <56836200+Leoakin43@users.noreply.github.com> Date: Wed, 21 Aug 2024 17:51:19 -0300 Subject: [PATCH 1257/1590] Fix seize tokens --- fees/moonwell/index.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fees/moonwell/index.ts b/fees/moonwell/index.ts index 838ab5e60a..eab3494d0d 100644 --- a/fees/moonwell/index.ts +++ b/fees/moonwell/index.ts @@ -4,7 +4,9 @@ import * as sdk from "@defillama/sdk"; const comptrollerABI = { underlying: "address:underlying", + exchangeRateCurrent: "uint256:exchangeRateCurrent", getAllMarkets: "address[]:getAllMarkets", + liquidationIncentiveMantissa: "uint256:liquidationIncentiveMantissa", accrueInterest: "event AccrueInterest(uint256 cashPrior,uint256 interestAccumulated,uint256 borrowIndex,uint256 totalBorrows)", reservesAdded: "event ReservesAdded(address benefactor,uint256 addAmount,uint256 newTotalReserves)", liquidateBorrow: "event LiquidateBorrow (address liquidator, address borrower, uint256 repayAmount, address mTokenCollateral, uint256 seizeTokens)", @@ -28,7 +30,9 @@ async function getFees(market: string, { createBalances, api, getLogs, }: FetchO if (!dailyFees) dailyFees = createBalances() if (!dailyRevenue) dailyRevenue = createBalances() const markets = await api.call({ target: market, abi: comptrollerABI.getAllMarkets, }) + const liquidationIncentiveMantissa = await api.call({ target: market, abi: comptrollerABI.liquidationIncentiveMantissa, }) const underlyings = await api.multiCall({ calls: markets, abi: comptrollerABI.underlying, permitFailure: true, }); + const exchangeRatesCurrent = await api.multiCall({ calls: markets, abi: comptrollerABI.exchangeRateCurrent, permitFailure: true, }); underlyings.forEach((underlying, index) => { if (!underlying) underlyings[index] = ADDRESSES.null }) @@ -65,7 +69,7 @@ async function getFees(market: string, { createBalances, api, getLogs, }: FetchO return log.map((i: any) => ({ ...i, seizeTokens: Number(i.seizeTokens), - marketIndex: index, + marketIndex: markets.indexOf(i.mTokenCollateral), })); }).flat() @@ -85,7 +89,7 @@ async function getFees(market: string, { createBalances, api, getLogs, }: FetchO liquidateBorrowLogs.forEach((log: any) => { const marketIndex = log.marketIndex; const underlying = underlyings[marketIndex] - dailyFees!.add(underlying, log.seizeTokens); + dailyFees!.add(underlying, (log.seizeTokens * ((liquidationIncentiveMantissa / 1e18) - 1) * (exchangeRatesCurrent[marketIndex] / 1e18))); }) return { dailyFees, dailyRevenue } From 20efc21d085e6e6954bf1717d8ee79f2d7454e05 Mon Sep 17 00:00:00 2001 From: brianbodollo Date: Thu, 22 Aug 2024 10:07:25 +0800 Subject: [PATCH 1258/1590] feat: added Stride stBAND and stISLM fees --- fees/stride.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/fees/stride.ts b/fees/stride.ts index 23ddf870e5..8a0c88e180 100644 --- a/fees/stride.ts +++ b/fees/stride.ts @@ -10,13 +10,15 @@ interface DailyFeeResponse { } const chainOverrides: { [key: string]: string } = { - "terra": "terra2", + terra: "terra2", }; const fetch = (chain: string) => { return async (timestamp: number): Promise => { const overriddenChain = chainOverrides[chain] || chain; // Override if exists, else use original - const response: DailyFeeResponse = await httpGet(`https://edge.stride.zone/api/${overriddenChain}/stats/fees`); + const response: DailyFeeResponse = await httpGet( + `https://edge.stride.zone/api/${overriddenChain}/stats/fees` + ); return { timestamp: timestamp, @@ -26,7 +28,6 @@ const fetch = (chain: string) => { }; }; - const meta = { methodology: { Fees: "Fees are staking rewards earned by tokens staked with Stride. They are measured across Stride's LSD tokens' yields and converted to USD terms.", @@ -109,6 +110,18 @@ const adapter: Adapter = { start: 0, meta, }, + haqq: { + fetch: fetch("haqq"), + runAtCurrTime: true, + start: 0, + meta, + }, + band: { + fetch: fetch("band"), + runAtCurrTime: true, + start: 0, + meta, + }, }, }; From 6a455146bdb0adeee8d7f8bddf1877d731ffd419 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 22 Aug 2024 03:50:54 +0100 Subject: [PATCH 1259/1590] fix chain --- fees/illuvium.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/fees/illuvium.ts b/fees/illuvium.ts index 3360e7ad94..ced47a22c6 100644 --- a/fees/illuvium.ts +++ b/fees/illuvium.ts @@ -3,20 +3,25 @@ import { CHAIN } from '../helpers/chains'; const fetchFees = async (options: FetchOptions) => { const dailyFees = options.createBalances(); + const end = Date.now() + const start = end - 3600*24*1e3 let transfers = [] as any[] let cursor = "" do{ - const url = `https://api.immutable.com/v1/transfers?receiver=0x2208850ea5569617d5350f8cf681031102c1d931&max_timestamp=${new Date(options.toTimestamp*1e3).toISOString()}&min_timestamp=${new Date(options.fromTimestamp*1e3).toISOString()}&cursor=${cursor}` + const url = `https://api.immutable.com/v1/transfers?receiver=0x2208850ea5569617d5350f8cf681031102c1d931&max_timestamp=${new Date(end).toISOString()}&min_timestamp=${new Date(start).toISOString()}&cursor=${cursor}` const data = await fetch(url).then(r=>r.json()) transfers = transfers.concat(data.result) cursor=data.cursor } while(cursor !== "") + const users = new Set() transfers.forEach(transfer=>{ if(transfer.token.type === "ETH"){ + users.add(transfer.user) dailyFees.addCGToken("ethereum", transfer.token.data.quantity/1e18) } }) + console.log(Array.from(users).length) return { dailyFees, dailyRevenue: dailyFees, @@ -26,7 +31,7 @@ const fetchFees = async (options: FetchOptions) => { const adapter: Adapter = { version: 2, adapter: { - [CHAIN.IMX]: { + "immutablex": { fetch: fetchFees, start: 0, meta: { From 526f96c0668de8ed726fd8c66412161a77fc7dc3 Mon Sep 17 00:00:00 2001 From: Ronnachate Gate Date: Thu, 22 Aug 2024 11:07:27 +0700 Subject: [PATCH 1260/1590] Add velo fee canculation. --- fees/velo/index.ts | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 fees/velo/index.ts diff --git a/fees/velo/index.ts b/fees/velo/index.ts new file mode 100644 index 0000000000..4b9a4e5b19 --- /dev/null +++ b/fees/velo/index.ts @@ -0,0 +1,39 @@ +import ADDRESSES from '../../helpers/coreAssets.json' +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { addTokensReceived } from "../../helpers/token"; + +const config: any = { + bsc: { + targets: ["0x6C22422f4044dfBA79f4EA6BbB9C09162c3BF912"], + tokens: [ + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.WBNB, + "0xf486ad071f3bEE968384D2E39e2D8aF0fCf6fd46", // VELO + "0xBe0D3526fc797583Dada3F30BC390013062A048B" , // PLEARN + "0x80458Df7142Ab707346020A180C44d02271C64Be", // USDV + "0xC2d4A3709e076A7A3487816362994a78ddaeabB6", // EVRY + ] + }, +}; + +const fetch = async (options: FetchOptions) => { + const dailyFees = await addTokensReceived({ + ...config[options.chain], + options, + }); + + return { dailyFees }; +}; + +const adapters: SimpleAdapter = { + adapter: Object.keys(config).reduce( + (all, chain) => ({ + ...all, + [chain]: { fetch, start: 1634010700 }, + }), + {} + ), + version: 2, +}; +export default adapters; \ No newline at end of file From 2e24c7fe39934aaca73e6c091abfbd22f4d10a60 Mon Sep 17 00:00:00 2001 From: ayman Date: Thu, 22 Aug 2024 11:12:53 +0530 Subject: [PATCH 1261/1590] fix: garden fee url --- fees/garden/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fees/garden/index.ts b/fees/garden/index.ts index 83fc5429f0..d203b762e5 100644 --- a/fees/garden/index.ts +++ b/fees/garden/index.ts @@ -9,25 +9,25 @@ const chainMapper: Record = { [CHAIN.ARBITRUM]: "ethereum_arbitrum", }; -const baseUrl = "http://leaderboard.garden.finance"; +const baseUrl = "https://referral.garden.finance"; const feeUrl = (chain: string, timestamp: number, interval?: string) => `${baseUrl}/fee?chain=${chain}&end=${timestamp}${ interval ? `&interval=${interval}` : "" }`; -type IApiFeeResponse = { +type ApiFeeResponse = { data: { fee: string; }; }; const fetch = (chain: string) => async ({ endTimestamp }: FetchOptions) => { - const dailyFeeResponse: IApiFeeResponse = ( + const dailyFeeResponse: ApiFeeResponse = ( await fetchURL(feeUrl(chainMapper[chain], endTimestamp, "day")) ); - const totalFeeResponse: IApiFeeResponse = ( + const totalFeeResponse: ApiFeeResponse = ( await fetchURL(feeUrl(chainMapper[chain], endTimestamp)) ); From cc3e1dc2bad39127b879d18aa89a24fea6d2d0ac Mon Sep 17 00:00:00 2001 From: TerrenceAddison Date: Thu, 22 Aug 2024 13:00:25 +0700 Subject: [PATCH 1262/1590] add arrow-markets volume API --- options/arrow-markets/index.ts | 40 + yarn.lock | 2443 ++++++++++++++++++++++++++++++++ 2 files changed, 2483 insertions(+) create mode 100644 options/arrow-markets/index.ts create mode 100644 yarn.lock diff --git a/options/arrow-markets/index.ts b/options/arrow-markets/index.ts new file mode 100644 index 0000000000..37b22d4bd0 --- /dev/null +++ b/options/arrow-markets/index.ts @@ -0,0 +1,40 @@ +import { SimpleAdapter } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; + +interface ArrowMarketsVolumeResponse { + total_notional_volume: string; +} + +// endTime is in ms +export const arrowMarketsVolumeEndpoint = "https://api-rfq-testnet.prd.arrowmarkets.delivery/admin/volume" + +export const v2_adapter: SimpleAdapter = { + adapter: { + [CHAIN.AVAX]: { + fetch: fetchArrowMarketsVolumeData, + start: 1702630075 + }, + }, +}; + +export async function fetchArrowMarketsVolumeData( + /** Timestamp representing the end of the 24 hour period */ + timestamp: number +) { + let timestamp_in_ms = timestamp * 1000 + const ArrowMarketsVolumeData = await getArrowMarketsVolumeData(arrowMarketsVolumeEndpoint); + + const totalNotionalVolume = Number(ArrowMarketsVolumeData.total_notional_volume).toFixed(2); + + return { + timestamp, + totalNotionalVolume, + }; +} + +async function getArrowMarketsVolumeData(endpoint: string): Promise { + return fetchURL(endpoint) +} + +export default v2_adapter; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..f8d7721b94 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2443 @@ +# 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.633.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.633.0.tgz#662535e1217f4276781b6bce6e6bc7cbaf88f327" + integrity sha512-KPwNGlZlCRUADNTvwPJmvDvlh8N/jxjcv5e71M/mWxLXwSPdlHlRjVSBL1/CPSXUr86XRAsPL+BCRkdiytUhbg== + 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.632.0" + "@aws-sdk/client-sts" "3.632.0" + "@aws-sdk/core" "3.629.0" + "@aws-sdk/credential-provider-node" "3.632.0" + "@aws-sdk/middleware-bucket-endpoint" "3.620.0" + "@aws-sdk/middleware-expect-continue" "3.620.0" + "@aws-sdk/middleware-flexible-checksums" "3.620.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-location-constraint" "3.609.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-sdk-s3" "3.633.0" + "@aws-sdk/middleware-ssec" "3.609.0" + "@aws-sdk/middleware-user-agent" "3.632.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/signature-v4-multi-region" "3.633.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.632.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@aws-sdk/xml-builder" "3.609.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.2" + "@smithy/eventstream-serde-browser" "^3.0.6" + "@smithy/eventstream-serde-config-resolver" "^3.0.3" + "@smithy/eventstream-serde-node" "^3.0.5" + "@smithy/fetch-http-handler" "^3.2.4" + "@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.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@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.14" + "@smithy/util-defaults-mode-node" "^3.0.14" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-stream" "^3.1.3" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.1.2" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.632.0": + version "3.632.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.632.0.tgz#38d0b11980f0716c85e63acf2bce0ac1e6ccc9b5" + integrity sha512-Oh1fIWaoZluihOCb/zDEpRTi+6an82fgJz7fyRBugyLhEtDjmvpCQ3oKjzaOhoN+4EvXAm1ZS/ZgpvXBlIRTgw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.629.0" + "@aws-sdk/credential-provider-node" "3.632.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.632.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.632.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.2" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@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.14" + "@smithy/util-defaults-mode-node" "^3.0.14" + "@smithy/util-endpoints" "^2.0.5" + "@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.632.0": + version "3.632.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.632.0.tgz#cc7d7c7578ba34d3689574dc015a0a71b35872e1" + integrity sha512-iYWHiKBz44m3chCFvtvHnvCpL2rALzyr1e6tOZV3dLlOKtQtDUlPy6OtnXDu4y+wyJCniy8ivG3+LAe4klzn1Q== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.629.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.632.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.632.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.2" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@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.14" + "@smithy/util-defaults-mode-node" "^3.0.14" + "@smithy/util-endpoints" "^2.0.5" + "@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.632.0": + version "3.632.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.632.0.tgz#dc0e9d9958752f620adbe9783fb8ba2f2f915463" + integrity sha512-Ss5cBH09icpTvT+jtGGuQlRdwtO7RyE9BF4ZV/CEPATdd9whtJt4Qxdya8BUnkWR7h5HHTrQHqai3YVYjku41A== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.632.0" + "@aws-sdk/core" "3.629.0" + "@aws-sdk/credential-provider-node" "3.632.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.632.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.632.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.2" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@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.14" + "@smithy/util-defaults-mode-node" "^3.0.14" + "@smithy/util-endpoints" "^2.0.5" + "@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.629.0": + version "3.629.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.629.0.tgz#1ed02c657edcd22ffdce9b3b5bdbd2a36fe899aa" + integrity sha512-+/ShPU/tyIBM3oY1cnjgNA/tFyHtlWq+wXF9xEKRv19NOpYbWQ+xzNwVjGq8vR07cCRqy/sDQLWPhxjtuV/FiQ== + dependencies: + "@smithy/core" "^2.3.2" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz#d4692c49a65ebc11dae3f7f8b053fee9268a953c" + integrity sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg== + 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.622.0": + version "3.622.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz#db481fdef859849d07dd5870894f45df2debab3d" + integrity sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.632.0": + version "3.632.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.632.0.tgz#55c2aa6e59fb9f19cf4e9c1e4ebf70235de32930" + integrity sha512-m6epoW41xa1ajU5OiHcmQHoGVtrbXBaRBOUhlCLZmcaqMLYsboM4iD/WZP8aatKEON5tTnVXh/4StV8D/+wemw== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.622.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.632.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.632.0": + version "3.632.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.632.0.tgz#33a21d722b620c6a9cc43c38981cba69345e251f" + integrity sha512-cL8fuJWm/xQBO4XJPkeuZzl3XinIn9EExWgzpG48NRMKR5us1RI/ucv7xFbBBaG+r/sDR2HpYBIA3lVIpm1H3Q== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.622.0" + "@aws-sdk/credential-provider-ini" "3.632.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.632.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz#10387cf85400420bb4bbda9cc56937dcc6d6d0ee" + integrity sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.632.0": + version "3.632.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.632.0.tgz#c217b853fd7d00511f3f14accdd3bf27ec4426a6" + integrity sha512-P/4wB6j7ym5QCPTL2xlMfvf2NcXSh+z0jmsZP4WW/tVwab4hvgabPPbLeEZDSWZ0BpgtxKGvRq0GSHuGeirQbA== + dependencies: + "@aws-sdk/client-sso" "3.632.0" + "@aws-sdk/token-providers" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz#b25878c0a05dad60cd5f91e7e5a31a145c2f14be" + integrity sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w== + 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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz#c5dc0e98b6209a91479cad6c2c74fbc5a3429fab" + integrity sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz#6a362c0f0696dc6749108a33de9998e0fa6b50ec" + integrity sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz#42cd48cdc0ad9639545be000bf537969210ce8c5" + integrity sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA== + 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.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" + integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" + integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.633.0": + version "3.633.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.633.0.tgz#034ec7bfdcbc2a7bc98c4cc58452249e45c27eac" + integrity sha512-7jjmWVw28wIHOdrHyTCvwKr1EYGrZI13DviwAOwRC0y9dB8gGCdRiA4fNczripUBxolCCE9mpqLrqy5pXtTzvA== + dependencies: + "@aws-sdk/core" "3.629.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/core" "^2.3.2" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-stream" "^3.1.3" + "@smithy/util-utf8" "^3.0.0" + 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.632.0": + version "3.632.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.632.0.tgz#274bbf2789268f30c1ff2ef20c395c9dc4f91c96" + integrity sha512-yY/sFsHKwG9yzSf/DTclqWJaGPI2gPBJDCGBujSqTG1zlS7Ot4fqi91DZ6088BFWzbOorDzJFcAhAEFzc6LuQg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.632.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" + integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== + dependencies: + "@aws-sdk/types" "3.609.0" + "@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" + +"@aws-sdk/signature-v4-multi-region@3.633.0": + version "3.633.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.633.0.tgz#d4a37f2820c7952b5c482731379e6b62e8da0a74" + integrity sha512-96F7Mx4lybMZdE0TTEkw6EKpeB0hxqp3J8fUJasesekTnO7jsklc47GHL5R3whyS/L4/JaPazm0Pi2DEH3kw1w== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.633.0" + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" + integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@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.632.0": + version "3.632.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.632.0.tgz#f8716bdc75fc322babc6a3faf943ee1d0e462124" + integrity sha512-LlYMU8pAbcEQphOpE6xaNLJ8kPGhklZZTVzZVpVW477NaaGgoGTMYNXTABYHcxeF5E2lLrxql9OmVpvr8GWN8Q== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + "@smithy/util-endpoints" "^2.0.5" + 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.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" + integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@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.78" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.78.tgz#77c22ce7acc8284c9c946f449d42d0cec6fbf888" + integrity sha512-VnK7/9DeBjrEaN/CG6dNR6G9624ntVEPy8DRWSVDhaQ8FM4sMWfsYDQbM4o028BKT7CM3vxKku8SrI2iwcZsGQ== + 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.15.0" + resolved "https://registry.yarnpkg.com/@elastic/elasticsearch/-/elasticsearch-8.15.0.tgz#cb29b3ae33203c545d435cf3dc4b557c8b4961d5" + integrity sha512-mG90EMdTDoT6GFSdqpUAhWK9LGuiJo6tOWqs0Usd/t15mPQDj7ZqHXfCBqNkASZpwPZpbAYVjd57S6nbUBINCg== + dependencies: + "@elastic/transport" "^8.7.0" + tslib "^2.4.0" + +"@elastic/transport@^8.7.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.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.3.2": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.4.0.tgz#56e917b6ab2dffeba681a05395c40a757d681147" + integrity sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w== + dependencies: + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.15" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz#0e0e7ddaff1a8633cb927aee1056c0ab506b7ecf" + integrity sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA== + 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.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.6.tgz#a4ab4f7cfbd137bcaa54c375276f9214e568fd8f" + integrity sha512-2hM54UWQUOrki4BtsUI1WzmD13/SeaqT/AB3EUJKbcver/WgKNaiJ5y5F5XXuVe6UekffVzuUDrBZVAA3AWRpQ== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.5" + "@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.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.5.tgz#2bbf5c9312a28f23bc55ae284efa9499f8b8f982" + integrity sha512-+upXvnHNyZP095s11jF5dhGw/Ihzqwl5G+/KtMnoQOpdfC3B5HYCcDVG9EmgkhJMXJlM64PyN5gjJl0uXFQehQ== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.5" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.5.tgz#e1cc2f71f4d174a03e00ce4b563395a81dd17bec" + integrity sha512-5u/nXbyoh1s4QxrvNre9V6vfyoLWuiVvvd5TlZjGThIikc3G+uNiG9uOTCWweSRjv1asdDIWK7nOmN7le4RYHQ== + dependencies: + "@smithy/eventstream-codec" "^3.1.2" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz#c754de7e0ff2541b73ac9ba7cc955940114b3d62" + integrity sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg== + dependencies: + "@smithy/protocol-http" "^4.1.0" + "@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.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz#1680aa4fb2a1c0505756103c9a5c2916307d9035" + integrity sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw== + dependencies: + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz#9b8a496d87a68ec43f3f1a0139868d6765a88119" + integrity sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw== + 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.14", "@smithy/middleware-retry@^3.0.15": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz#9b96900cde70d8aafd267e13f4e79241be90e0c7" + integrity sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ== + dependencies: + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/service-error-classification" "^3.0.3" + "@smithy/smithy-client" "^3.2.0" + "@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.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.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz#be4195e45639e690d522cd5f11513ea822ff9d5f" + integrity sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg== + dependencies: + "@smithy/abort-controller" "^3.1.1" + "@smithy/protocol-http" "^4.1.0" + "@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.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.0.tgz#23519d8f45bf4f33960ea5415847bc2b620a010b" + integrity sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA== + 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.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@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.1.0.tgz#251ff43dc1f4ad66776122732fea9e56efc56443" + integrity sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.1.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.12", "@smithy/smithy-client@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.2.0.tgz#6db94024e4bdaefa079ac68dbea23dafbea230c8" + integrity sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw== + dependencies: + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" + 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.14": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz#df73b9ae3dddc9126e0bb93ebc720b09d7163858" + integrity sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg== + dependencies: + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.14": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz#d52476e1f2e66525d918b51f8d5a9b0972bf518e" + integrity sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A== + dependencies: + "@smithy/config-resolver" "^3.0.5" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.5": + 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.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.3.tgz#699ee2397cc1d474e46d2034039d5263812dca64" + integrity sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw== + dependencies: + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" + "@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 "22.4.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.4.0.tgz#c295fe1d6f5f58916cc61dbef8cf65b5b9b71de9" + integrity sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ== + dependencies: + undici-types "~6.19.2" + +"@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.44" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.44.tgz#875a8322d17ff12bf82b3af8c07b9310a00e72f8" + integrity sha512-ZsbGerYg72WMXUIE9fYxtvfzLEuq6q8mKERdWFnqTmOvudMxnz+CBNRoOwJ2kNpFOncrKjT1hZwxjlFgQ9qvQA== + 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.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.4.tgz#4c8ded1b43683c8dd362973c393f3ede24052aa2" + integrity sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw== + 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.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + 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.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.2.tgz#4b67d4b49e69b59893931a032560999e5e4419fe" + integrity sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg== + 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.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== + 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.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + 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.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + 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.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +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.12" + resolved "https://registry.yarnpkg.com/tron-format-address/-/tron-format-address-0.1.12.tgz#4c6b6ba717a57424e9d12343b1fce0e466690362" + integrity sha512-dtlfwSZEdWA9Cj3Mqypw/WNhQPlQf5JWT+/H5gYX5Viu+ntIq+7zJvcWCrmcDJ48L0EHt2xzGme2eErW9Y7spQ== + +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.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== + +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-types@~6.19.2: + version "6.19.6" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.6.tgz#e218c3df0987f4c0e0008ca00d6b6472d9b89b36" + integrity sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org== + +undici@^6.12.0: + version "6.19.7" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.7.tgz#7d4cf26dc689838aa8b6753a3c5c4288fc1e0216" + integrity sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A== + +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 3a0653405cbae1380c1e4345785494b3be1c28ef Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Thu, 22 Aug 2024 17:41:27 +0800 Subject: [PATCH 1263/1590] Update index.ts --- dexs/kiloex/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dexs/kiloex/index.ts b/dexs/kiloex/index.ts index 2a47b551a2..077ad5de40 100644 --- a/dexs/kiloex/index.ts +++ b/dexs/kiloex/index.ts @@ -14,6 +14,7 @@ const historicalVolumeEndpoints: ChainMap = { [CHAIN.OP_BNB]: "https://opapi.kiloex.io/common/queryTradeSummary", [CHAIN.MANTA]: "https://mantaapi.kiloex.io/common/queryTradeSummary", [CHAIN.TAIKO]: "https://taikoapi.kiloex.io/common/queryTradeSummary", + [CHAIN.BSQUARED]: "https://b2api.kiloex.io/common/queryTradeSummary", }; interface IVolume { @@ -56,6 +57,9 @@ const adapter: SimpleAdapter = { [CHAIN.TAIKO]: { fetch: fetch(CHAIN.TAIKO), start: async () => 1717027200 }, + [CHAIN.BSQUARED]: { + fetch: fetch(CHAIN.BSQUARED), start: async () => 1722297600 + }, }, }; From d0cb8b06c58ad74323fd27c32061e1d738735acf Mon Sep 17 00:00:00 2001 From: LeeRyanj <138840879+LeeRyanj@users.noreply.github.com> Date: Thu, 22 Aug 2024 17:42:38 +0800 Subject: [PATCH 1264/1590] Update index.ts --- fees/kiloex/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fees/kiloex/index.ts b/fees/kiloex/index.ts index 00599ab584..da3baab6b7 100644 --- a/fees/kiloex/index.ts +++ b/fees/kiloex/index.ts @@ -13,7 +13,8 @@ const endpoints: ChainMap = { [CHAIN.BSC]: "https://api.kiloex.io/common/queryTradeSummary", [CHAIN.OP_BNB]: "https://opapi.kiloex.io/common/queryTradeSummary", [CHAIN.MANTA]: "https://mantaapi.kiloex.io/common/queryTradeSummary", - [CHAIN.TAIKO]: "https://taikoapi.kiloex.io/common/queryTradeSummary" + [CHAIN.TAIKO]: "https://taikoapi.kiloex.io/common/queryTradeSummary", + [CHAIN.BSQUARED]: "https://b2api.kiloex.io/common/queryTradeSummary" }; interface IFee { @@ -57,6 +58,9 @@ const adapter: SimpleAdapter = { [CHAIN.TAIKO]: { fetch: fetch(CHAIN.TAIKO), start: async () => 1717027200 }, + [CHAIN.BSQUARED]: { + fetch: fetch(CHAIN.BSQUARED), start: async () => 1722297600 + }, }, }; From b1caf88ce62ff55fb21eaef014244b2a654bff6d Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Thu, 22 Aug 2024 12:22:45 +0200 Subject: [PATCH 1265/1590] feat:Adapter, OpenEden-t-bills Fees --- fees/openeden-t-bills/index.ts | 65 ++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 fees/openeden-t-bills/index.ts diff --git a/fees/openeden-t-bills/index.ts b/fees/openeden-t-bills/index.ts new file mode 100644 index 0000000000..5f6454ca96 --- /dev/null +++ b/fees/openeden-t-bills/index.ts @@ -0,0 +1,65 @@ +// https://docs.openeden.com/treasury-bills-vault/fees + +import { Chain } from "@defillama/sdk/build/general"; +import { Adapter, FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import ADDRESSES from "../../helpers/coreAssets.json"; + +const eventAbi = `event ProcessDeposit( + address sender, + address receiver, + uint256 assets, + uint256 shares, + uint256 oeFee, + uint256 pFee, + uint256 totalFee, + address oplTreasury, + address treasury +)`; + +const VAULT_ADDRESSES: Record = { + [CHAIN.ETHEREUM]: "0xdd50C053C096CB04A3e3362E2b622529EC5f2e8a", + [CHAIN.ARBITRUM]: "0xF84D28A8D28292842dD73D1c5F99476A80b6666A", +}; + +const MANAGEMENT_FEES: number = 0.003; +const DAILY_MANAGEMENT_FEES: number = MANAGEMENT_FEES / 365; + +const fetch = async ( + vault: string, + { api, getLogs, createBalances }: FetchOptions +) => { + const dailyFees = createBalances(); + + const [logs, totalUSDC] = await Promise.all([ + getLogs({ target: vault, eventAbi }), + api.call({ target: vault, abi: "uint256:totalAssets" }), + ]); + + dailyFees.add(ADDRESSES[api.chain].USDC, totalUSDC * DAILY_MANAGEMENT_FEES); + + logs.forEach((log) => { + const feeAmount = log[4]; + dailyFees.add(ADDRESSES[api.chain].USDC, feeAmount); + }); + + return { dailyFees }; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.ETHEREUM]: { + fetch: (options: FetchOptions) => + fetch(VAULT_ADDRESSES[CHAIN.ETHEREUM], options), + start: 1697580000, + }, + [CHAIN.ARBITRUM]: { + fetch: (options: FetchOptions) => + fetch(VAULT_ADDRESSES[CHAIN.ARBITRUM], options), + start: 1707778800, + }, + }, +}; + +export default adapter; From c102f76d4b81608ef88d94d9caed1abd618a9635 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Thu, 22 Aug 2024 12:23:44 +0200 Subject: [PATCH 1266/1590] promise type --- fees/openeden-t-bills/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/openeden-t-bills/index.ts b/fees/openeden-t-bills/index.ts index 5f6454ca96..ebc9e37d0c 100644 --- a/fees/openeden-t-bills/index.ts +++ b/fees/openeden-t-bills/index.ts @@ -1,7 +1,7 @@ // https://docs.openeden.com/treasury-bills-vault/fees import { Chain } from "@defillama/sdk/build/general"; -import { Adapter, FetchOptions } from "../../adapters/types"; +import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import ADDRESSES from "../../helpers/coreAssets.json"; @@ -28,7 +28,7 @@ const DAILY_MANAGEMENT_FEES: number = MANAGEMENT_FEES / 365; const fetch = async ( vault: string, { api, getLogs, createBalances }: FetchOptions -) => { +): Promise => { const dailyFees = createBalances(); const [logs, totalUSDC] = await Promise.all([ From ea854521bfcc209d50d0e253ad0c1d64d1bc4ee1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 22 Aug 2024 12:39:47 +0000 Subject: [PATCH 1267/1590] fix allow error get block chain dymension --- helpers/getBlock.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/helpers/getBlock.ts b/helpers/getBlock.ts index 1930191579..60667616d0 100644 --- a/helpers/getBlock.ts +++ b/helpers/getBlock.ts @@ -48,7 +48,8 @@ const blacklistedChains: string[] = [ "persistence", "sui", "neutron", - "terra2" + "terra2", + "dymension" ]; async function getBlock(timestamp: number, chain: Chain, chainBlocks = {} as ChainBlocks) { From 4fbd80ec2872f81681c82a2bf82a0d49d5ba2101 Mon Sep 17 00:00:00 2001 From: TerrenceAddison Date: Thu, 22 Aug 2024 20:25:10 +0700 Subject: [PATCH 1268/1590] remove yarn lock --- yarn.lock | 2443 ----------------------------------------------------- 1 file changed, 2443 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index f8d7721b94..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2443 +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.633.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.633.0.tgz#662535e1217f4276781b6bce6e6bc7cbaf88f327" - integrity sha512-KPwNGlZlCRUADNTvwPJmvDvlh8N/jxjcv5e71M/mWxLXwSPdlHlRjVSBL1/CPSXUr86XRAsPL+BCRkdiytUhbg== - 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.632.0" - "@aws-sdk/client-sts" "3.632.0" - "@aws-sdk/core" "3.629.0" - "@aws-sdk/credential-provider-node" "3.632.0" - "@aws-sdk/middleware-bucket-endpoint" "3.620.0" - "@aws-sdk/middleware-expect-continue" "3.620.0" - "@aws-sdk/middleware-flexible-checksums" "3.620.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-location-constraint" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-sdk-s3" "3.633.0" - "@aws-sdk/middleware-ssec" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.632.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/signature-v4-multi-region" "3.633.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.632.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@aws-sdk/xml-builder" "3.609.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.2" - "@smithy/eventstream-serde-browser" "^3.0.6" - "@smithy/eventstream-serde-config-resolver" "^3.0.3" - "@smithy/eventstream-serde-node" "^3.0.5" - "@smithy/fetch-http-handler" "^3.2.4" - "@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.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.14" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.12" - "@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.14" - "@smithy/util-defaults-mode-node" "^3.0.14" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-stream" "^3.1.3" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.1.2" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.632.0": - version "3.632.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.632.0.tgz#38d0b11980f0716c85e63acf2bce0ac1e6ccc9b5" - integrity sha512-Oh1fIWaoZluihOCb/zDEpRTi+6an82fgJz7fyRBugyLhEtDjmvpCQ3oKjzaOhoN+4EvXAm1ZS/ZgpvXBlIRTgw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.629.0" - "@aws-sdk/credential-provider-node" "3.632.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.632.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.632.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.2" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.14" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.12" - "@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.14" - "@smithy/util-defaults-mode-node" "^3.0.14" - "@smithy/util-endpoints" "^2.0.5" - "@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.632.0": - version "3.632.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.632.0.tgz#cc7d7c7578ba34d3689574dc015a0a71b35872e1" - integrity sha512-iYWHiKBz44m3chCFvtvHnvCpL2rALzyr1e6tOZV3dLlOKtQtDUlPy6OtnXDu4y+wyJCniy8ivG3+LAe4klzn1Q== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.629.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.632.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.632.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.2" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.14" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.12" - "@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.14" - "@smithy/util-defaults-mode-node" "^3.0.14" - "@smithy/util-endpoints" "^2.0.5" - "@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.632.0": - version "3.632.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.632.0.tgz#dc0e9d9958752f620adbe9783fb8ba2f2f915463" - integrity sha512-Ss5cBH09icpTvT+jtGGuQlRdwtO7RyE9BF4ZV/CEPATdd9whtJt4Qxdya8BUnkWR7h5HHTrQHqai3YVYjku41A== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.632.0" - "@aws-sdk/core" "3.629.0" - "@aws-sdk/credential-provider-node" "3.632.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.632.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.632.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.2" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.14" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.12" - "@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.14" - "@smithy/util-defaults-mode-node" "^3.0.14" - "@smithy/util-endpoints" "^2.0.5" - "@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.629.0": - version "3.629.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.629.0.tgz#1ed02c657edcd22ffdce9b3b5bdbd2a36fe899aa" - integrity sha512-+/ShPU/tyIBM3oY1cnjgNA/tFyHtlWq+wXF9xEKRv19NOpYbWQ+xzNwVjGq8vR07cCRqy/sDQLWPhxjtuV/FiQ== - dependencies: - "@smithy/core" "^2.3.2" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/smithy-client" "^3.1.12" - "@smithy/types" "^3.3.0" - "@smithy/util-middleware" "^3.0.3" - fast-xml-parser "4.4.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.620.1": - version "3.620.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz#d4692c49a65ebc11dae3f7f8b053fee9268a953c" - integrity sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg== - 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.622.0": - version "3.622.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz#db481fdef859849d07dd5870894f45df2debab3d" - integrity sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.12" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.1.3" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.632.0": - version "3.632.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.632.0.tgz#55c2aa6e59fb9f19cf4e9c1e4ebf70235de32930" - integrity sha512-m6epoW41xa1ajU5OiHcmQHoGVtrbXBaRBOUhlCLZmcaqMLYsboM4iD/WZP8aatKEON5tTnVXh/4StV8D/+wemw== - dependencies: - "@aws-sdk/credential-provider-env" "3.620.1" - "@aws-sdk/credential-provider-http" "3.622.0" - "@aws-sdk/credential-provider-process" "3.620.1" - "@aws-sdk/credential-provider-sso" "3.632.0" - "@aws-sdk/credential-provider-web-identity" "3.621.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.632.0": - version "3.632.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.632.0.tgz#33a21d722b620c6a9cc43c38981cba69345e251f" - integrity sha512-cL8fuJWm/xQBO4XJPkeuZzl3XinIn9EExWgzpG48NRMKR5us1RI/ucv7xFbBBaG+r/sDR2HpYBIA3lVIpm1H3Q== - dependencies: - "@aws-sdk/credential-provider-env" "3.620.1" - "@aws-sdk/credential-provider-http" "3.622.0" - "@aws-sdk/credential-provider-ini" "3.632.0" - "@aws-sdk/credential-provider-process" "3.620.1" - "@aws-sdk/credential-provider-sso" "3.632.0" - "@aws-sdk/credential-provider-web-identity" "3.621.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.620.1": - version "3.620.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz#10387cf85400420bb4bbda9cc56937dcc6d6d0ee" - integrity sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.632.0": - version "3.632.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.632.0.tgz#c217b853fd7d00511f3f14accdd3bf27ec4426a6" - integrity sha512-P/4wB6j7ym5QCPTL2xlMfvf2NcXSh+z0jmsZP4WW/tVwab4hvgabPPbLeEZDSWZ0BpgtxKGvRq0GSHuGeirQbA== - dependencies: - "@aws-sdk/client-sso" "3.632.0" - "@aws-sdk/token-providers" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz#b25878c0a05dad60cd5f91e7e5a31a145c2f14be" - integrity sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w== - 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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz#c5dc0e98b6209a91479cad6c2c74fbc5a3429fab" - integrity sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz#6a362c0f0696dc6749108a33de9998e0fa6b50ec" - integrity sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz#42cd48cdc0ad9639545be000bf537969210ce8c5" - integrity sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA== - 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.1.0" - "@smithy/types" "^3.3.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" - integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" - integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.633.0": - version "3.633.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.633.0.tgz#034ec7bfdcbc2a7bc98c4cc58452249e45c27eac" - integrity sha512-7jjmWVw28wIHOdrHyTCvwKr1EYGrZI13DviwAOwRC0y9dB8gGCdRiA4fNczripUBxolCCE9mpqLrqy5pXtTzvA== - dependencies: - "@aws-sdk/core" "3.629.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/core" "^2.3.2" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/smithy-client" "^3.1.12" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-stream" "^3.1.3" - "@smithy/util-utf8" "^3.0.0" - 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.632.0": - version "3.632.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.632.0.tgz#274bbf2789268f30c1ff2ef20c395c9dc4f91c96" - integrity sha512-yY/sFsHKwG9yzSf/DTclqWJaGPI2gPBJDCGBujSqTG1zlS7Ot4fqi91DZ6088BFWzbOorDzJFcAhAEFzc6LuQg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.632.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" - integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== - dependencies: - "@aws-sdk/types" "3.609.0" - "@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" - -"@aws-sdk/signature-v4-multi-region@3.633.0": - version "3.633.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.633.0.tgz#d4a37f2820c7952b5c482731379e6b62e8da0a74" - integrity sha512-96F7Mx4lybMZdE0TTEkw6EKpeB0hxqp3J8fUJasesekTnO7jsklc47GHL5R3whyS/L4/JaPazm0Pi2DEH3kw1w== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.633.0" - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" - integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@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.632.0": - version "3.632.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.632.0.tgz#f8716bdc75fc322babc6a3faf943ee1d0e462124" - integrity sha512-LlYMU8pAbcEQphOpE6xaNLJ8kPGhklZZTVzZVpVW477NaaGgoGTMYNXTABYHcxeF5E2lLrxql9OmVpvr8GWN8Q== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - "@smithy/util-endpoints" "^2.0.5" - 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.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" - integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/node-config-provider" "^3.1.4" - "@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.78" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.78.tgz#77c22ce7acc8284c9c946f449d42d0cec6fbf888" - integrity sha512-VnK7/9DeBjrEaN/CG6dNR6G9624ntVEPy8DRWSVDhaQ8FM4sMWfsYDQbM4o028BKT7CM3vxKku8SrI2iwcZsGQ== - 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.15.0" - resolved "https://registry.yarnpkg.com/@elastic/elasticsearch/-/elasticsearch-8.15.0.tgz#cb29b3ae33203c545d435cf3dc4b557c8b4961d5" - integrity sha512-mG90EMdTDoT6GFSdqpUAhWK9LGuiJo6tOWqs0Usd/t15mPQDj7ZqHXfCBqNkASZpwPZpbAYVjd57S6nbUBINCg== - dependencies: - "@elastic/transport" "^8.7.0" - tslib "^2.4.0" - -"@elastic/transport@^8.7.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.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.3.2": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.4.0.tgz#56e917b6ab2dffeba681a05395c40a757d681147" - integrity sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w== - dependencies: - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.15" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz#0e0e7ddaff1a8633cb927aee1056c0ab506b7ecf" - integrity sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA== - 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.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.6.tgz#a4ab4f7cfbd137bcaa54c375276f9214e568fd8f" - integrity sha512-2hM54UWQUOrki4BtsUI1WzmD13/SeaqT/AB3EUJKbcver/WgKNaiJ5y5F5XXuVe6UekffVzuUDrBZVAA3AWRpQ== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.5" - "@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.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.5.tgz#2bbf5c9312a28f23bc55ae284efa9499f8b8f982" - integrity sha512-+upXvnHNyZP095s11jF5dhGw/Ihzqwl5G+/KtMnoQOpdfC3B5HYCcDVG9EmgkhJMXJlM64PyN5gjJl0uXFQehQ== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.5" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.5.tgz#e1cc2f71f4d174a03e00ce4b563395a81dd17bec" - integrity sha512-5u/nXbyoh1s4QxrvNre9V6vfyoLWuiVvvd5TlZjGThIikc3G+uNiG9uOTCWweSRjv1asdDIWK7nOmN7le4RYHQ== - dependencies: - "@smithy/eventstream-codec" "^3.1.2" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz#c754de7e0ff2541b73ac9ba7cc955940114b3d62" - integrity sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg== - dependencies: - "@smithy/protocol-http" "^4.1.0" - "@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.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz#1680aa4fb2a1c0505756103c9a5c2916307d9035" - integrity sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw== - dependencies: - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz#9b8a496d87a68ec43f3f1a0139868d6765a88119" - integrity sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw== - 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.14", "@smithy/middleware-retry@^3.0.15": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz#9b96900cde70d8aafd267e13f4e79241be90e0c7" - integrity sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ== - dependencies: - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/service-error-classification" "^3.0.3" - "@smithy/smithy-client" "^3.2.0" - "@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.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.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz#be4195e45639e690d522cd5f11513ea822ff9d5f" - integrity sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg== - dependencies: - "@smithy/abort-controller" "^3.1.1" - "@smithy/protocol-http" "^4.1.0" - "@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.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.0.tgz#23519d8f45bf4f33960ea5415847bc2b620a010b" - integrity sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA== - 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.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@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.1.0.tgz#251ff43dc1f4ad66776122732fea9e56efc56443" - integrity sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.1.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.12", "@smithy/smithy-client@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.2.0.tgz#6db94024e4bdaefa079ac68dbea23dafbea230c8" - integrity sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw== - dependencies: - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.1.3" - 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.14": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz#df73b9ae3dddc9126e0bb93ebc720b09d7163858" - integrity sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg== - dependencies: - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.14": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz#d52476e1f2e66525d918b51f8d5a9b0972bf518e" - integrity sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A== - dependencies: - "@smithy/config-resolver" "^3.0.5" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.0.5": - 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.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.3.tgz#699ee2397cc1d474e46d2034039d5263812dca64" - integrity sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw== - dependencies: - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/node-http-handler" "^3.1.4" - "@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 "22.4.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.4.0.tgz#c295fe1d6f5f58916cc61dbef8cf65b5b9b71de9" - integrity sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ== - dependencies: - undici-types "~6.19.2" - -"@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.44" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.44.tgz#875a8322d17ff12bf82b3af8c07b9310a00e72f8" - integrity sha512-ZsbGerYg72WMXUIE9fYxtvfzLEuq6q8mKERdWFnqTmOvudMxnz+CBNRoOwJ2kNpFOncrKjT1hZwxjlFgQ9qvQA== - 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.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.4.tgz#4c8ded1b43683c8dd362973c393f3ede24052aa2" - integrity sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw== - 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.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== - 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.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.2.tgz#4b67d4b49e69b59893931a032560999e5e4419fe" - integrity sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg== - 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.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" - integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== - 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.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== - 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.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - 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.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -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.12" - resolved "https://registry.yarnpkg.com/tron-format-address/-/tron-format-address-0.1.12.tgz#4c6b6ba717a57424e9d12343b1fce0e466690362" - integrity sha512-dtlfwSZEdWA9Cj3Mqypw/WNhQPlQf5JWT+/H5gYX5Viu+ntIq+7zJvcWCrmcDJ48L0EHt2xzGme2eErW9Y7spQ== - -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.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" - integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== - -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-types@~6.19.2: - version "6.19.6" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.6.tgz#e218c3df0987f4c0e0008ca00d6b6472d9b89b36" - integrity sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org== - -undici@^6.12.0: - version "6.19.7" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.7.tgz#7d4cf26dc689838aa8b6753a3c5c4288fc1e0216" - integrity sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A== - -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 548d3d964e11c1285c216539f7b56d48a410c5e1 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 22 Aug 2024 15:09:21 +0100 Subject: [PATCH 1269/1590] update chain --- fees/illuvium.ts | 2 +- helpers/chains.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/illuvium.ts b/fees/illuvium.ts index ced47a22c6..993f613312 100644 --- a/fees/illuvium.ts +++ b/fees/illuvium.ts @@ -31,7 +31,7 @@ const fetchFees = async (options: FetchOptions) => { const adapter: Adapter = { version: 2, adapter: { - "immutablex": { + [CHAIN.IMMUTABLEX]: { fetch: fetchFees, start: 0, meta: { diff --git a/helpers/chains.ts b/helpers/chains.ts index 5b43632433..96f6b47760 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -161,6 +161,7 @@ export enum CHAIN { IOTAEVM = "iotaevm", ZKLINK = "zklink", DEXALOT = "dexalot", + IMMUTABLEX = "immutablex" } // Don´t use From 6c9e4907dcffede64cff3194ddcb31af4c0f10a4 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Thu, 22 Aug 2024 16:20:38 +0200 Subject: [PATCH 1270/1590] feat:Adapter, Paxos-Gold (Fees) --- fees/paxos-gold/index.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 fees/paxos-gold/index.ts diff --git a/fees/paxos-gold/index.ts b/fees/paxos-gold/index.ts new file mode 100644 index 0000000000..2270017707 --- /dev/null +++ b/fees/paxos-gold/index.ts @@ -0,0 +1,36 @@ +import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const PAXG = "0x45804880de22913dafe09f4980848ece6ecbaf78"; + +const eventAbi = `event FeeCollected( + address indexed from, + address indexed to, + uint256 value +)`; + +const fetch = async ({ + getLogs, + createBalances, +}: FetchOptions): Promise => { + const dailyFees = createBalances(); + const logs = await getLogs({ target: PAXG, eventAbi }); + + logs.forEach(([_from, _to, fee]) => { + dailyFees.add(PAXG, fee); + }); + + return { dailyFees }; +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.ETHEREUM]: { + fetch, + start: 1704063600, + }, + }, +}; + +export default adapter; From 93d060102f43825ffba128873a81422f0b8eb255 Mon Sep 17 00:00:00 2001 From: Nicolas Zozol Date: Thu, 22 Aug 2024 15:26:19 +0200 Subject: [PATCH 1271/1590] update: and chains Scroll, mantle and linea update: adding chains Scroll, mantle and linea --- dexs/swaap/index.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/dexs/swaap/index.ts b/dexs/swaap/index.ts index ec51ccd072..6e562f234a 100644 --- a/dexs/swaap/index.ts +++ b/dexs/swaap/index.ts @@ -55,6 +55,25 @@ const config:Record = { id: '2', firstDayVolume: 0 }, + [CHAIN.SCROLL]: { + api: "https://api.goldsky.com/api/public/project_clws2t7g7ae9c01xsbnu80a51/subgraphs/swaapv2-scroll/prod/gn", + start: 1719508309, + id: '2', + firstDayVolume: 0 + }, + [CHAIN.LINEA]: { + api: "https://api.goldsky.com/api/public/project_clws2t7g7ae9c01xsbnu80a51/subgraphs/swaapv2-linea/prod/gn", + start: 1719507890, + id: '2', + firstDayVolume: 0 + }, + [CHAIN.MANTLE]: { + api: "https://api.goldsky.com/api/public/project_clws2t7g7ae9c01xsbnu80a51/subgraphs/swaapv2-linea/prod/gn", + start: 1719508654, + id: '2', + firstDayVolume: 0 + }, + } interface Data { @@ -170,6 +189,18 @@ const adapter: BreakdownAdapter = { fetch: v2graphs, start: 1714652681, }, + [CHAIN.SCROLL]: { + fetch: v2graphs, + start: 1719508309, + }, + [CHAIN.LINEA]: { + fetch: v2graphs, + start: 1719507890, + }, + [CHAIN.MANTLE]: { + fetch: v2graphs, + start: 1719508654, + }, } } From c0885f58d9c40cb8b0bc188824153a8c40f984b2 Mon Sep 17 00:00:00 2001 From: "mikhail.d" Date: Thu, 22 Aug 2024 17:22:13 +0200 Subject: [PATCH 1272/1590] Add aquarius adapter --- dexs/aqua-network/index.ts | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 dexs/aqua-network/index.ts diff --git a/dexs/aqua-network/index.ts b/dexs/aqua-network/index.ts new file mode 100644 index 0000000000..f2150973c3 --- /dev/null +++ b/dexs/aqua-network/index.ts @@ -0,0 +1,41 @@ +import fetchURL from "../../utils/fetchURL" +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const AQUA_VOLUME_ENDPOINT = "https://amm-api.aqua.network/api/external/v1/statistics/totals/?size=all" + +interface IVolumeAll { + volume: number; + tvl: number; + date: string; +} + +const fetch = async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + const historicalVolume: IVolumeAll[] = (await fetchURL(AQUA_VOLUME_ENDPOINT)); + + const totalVolume = historicalVolume + .filter(volItem => (new Date(volItem.date).getTime() / 1000) <= dayTimestamp) + .reduce((acc, { volume }) => acc + Number(volume), 0) + + const dailyVolume = historicalVolume + .find(dayItem => (new Date(dayItem.date).getTime() / 1000) === dayTimestamp)?.volume + + return { + totalVolume: `${totalVolume / 10e7}`, + dailyVolume: dailyVolume ? `${Number(dailyVolume) / 10e7}` : undefined, + timestamp: dayTimestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.STELLAR]: { + fetch, + start: 1719792000, + }, + }, +}; + +export default adapter; From 477e4e96fd53436af5e14a39ddc1f485dbdb6d5e Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Thu, 22 Aug 2024 17:35:19 +0200 Subject: [PATCH 1273/1590] feat:Adapter, Franklin (Fees) --- fees/franklin-templeton/index.ts | 82 ++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 fees/franklin-templeton/index.ts diff --git a/fees/franklin-templeton/index.ts b/fees/franklin-templeton/index.ts new file mode 100644 index 0000000000..0a9692a8dc --- /dev/null +++ b/fees/franklin-templeton/index.ts @@ -0,0 +1,82 @@ +// https://www.franklintempleton.com/investments/options/money-market-funds/products/29386/SINGLCLASS/franklin-on-chain-u-s-government-money-fund/FOBXX#distributions + +import { ChainApi } from "@defillama/sdk"; +import { Chain } from "@defillama/sdk/build/general"; +import axios from "axios"; +import { + Adapter, + Fetch, + FetchOptions, + FetchResultFees, +} from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import ADDRESSES from "../../helpers/coreAssets.json"; + +const CONFIG: Record = { + [CHAIN.POLYGON]: "0x408a634b8a8f0de729b48574a3a7ec3fe820b00a", + [CHAIN.STELLAR]: + "BENJI-GBHNGLLIE3KWGKCHIKMHJ5HVZHYIK7WTBE4QF5PLAKL4CJGSEU7HZIW5", +}; + +const EXPENSE_LIMITATION_TIMESTAMP = 1754006400; // 08/2025 +const GROSS_EXPENSE_YEAR = 0.0026; +const NET_EXPENSE_YEAR = 0.002; + +const stellarAUM = async (token: string): Promise => { + const stellarApi = `https://api.stellar.expert/explorer/public/asset/${token}`; + const { data } = await axios.get(stellarApi); + const { supply, toml_info } = data; + const adjustedSupply = supply / 10 ** (toml_info.decimals - 6); + return adjustedSupply; +}; + +const polygonAUM = async (token: string, api: ChainApi): Promise => { + const [decimals, supply] = await Promise.all([ + api.call({ target: token, abi: "erc20:decimals" }), + api.call({ target: token, abi: "erc20:totalSupply" }), + ]); + + const adjustedSupplyInUSDT = supply / 10 ** (decimals - 6); + return adjustedSupplyInUSDT; +}; + +const fetch = async ( + timestamp: number, + _: any, + { api, createBalances, endTimestamp }: FetchOptions, + token: string +): Promise => { + const dailyFees = createBalances(); + let supply: number = 0; + + if (api.chain === "polygon") supply = await polygonAUM(token, api); + if (api.chain === "stellar") supply = await stellarAUM(token); + + const expenseRatio = + endTimestamp < EXPENSE_LIMITATION_TIMESTAMP + ? NET_EXPENSE_YEAR + : GROSS_EXPENSE_YEAR; + + const dailySupply = (supply * expenseRatio) / 365; + dailyFees.add(ADDRESSES.ethereum.USDT, dailySupply, { skipChain: true }); + + return { timestamp, dailyFees }; +}; + +const adapter: Adapter = { + timetravel: false, + adapter: { + [CHAIN.POLYGON]: { + fetch: (...args: Parameters) => + fetch(...args, CONFIG[CHAIN.POLYGON]), + start: 1696370400, + }, + [CHAIN.STELLAR]: { + fetch: (...args: Parameters) => + fetch(...args, CONFIG[CHAIN.STELLAR]), + start: 1696370400, + }, + }, +}; + +export default adapter; From 399a4d7806d4fd8a9d203e9ef8bf730b2888dce9 Mon Sep 17 00:00:00 2001 From: Darruma Date: Thu, 22 Aug 2024 21:39:12 +0100 Subject: [PATCH 1274/1590] add fees for bcraft clans and mines --- fees/bcraft.ts | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 fees/bcraft.ts diff --git a/fees/bcraft.ts b/fees/bcraft.ts new file mode 100644 index 0000000000..e44d628cc3 --- /dev/null +++ b/fees/bcraft.ts @@ -0,0 +1,47 @@ +import { Adapter, FetchV2 } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const adapter: Adapter = { + adapter: { + [CHAIN.BASE]: { + fetch: (async ({ getLogs, createBalances }) => { + const dailyFees = createBalances(); + const dailyRevenue = createBalances(); + const coinBuyLogs = await getLogs({ + target: "0x7BaEA50509d5d742909592CF045101526b306bE4", + eventAbi: + "event MineUpgraded(address indexed user, uint256 newLevel, uint256 cost)", + }); + coinBuyLogs.map((e: any) => { + dailyFees.addGasToken(e.cost); + dailyRevenue.addGasToken(e.cost); + }); + const buySharesLogs = await getLogs({ + target: "0x0De0D0cF717af57D2101F6Be0962fA890c1FBeC6", + eventAbi: + "event BuyClanShare(address indexed buyer, uint256 indexed clanId, uint256 amount, uint256 price, uint256 protocolFee, uint256 subjectFee)", + }); + buySharesLogs.map((e: any) => { + dailyFees.addGasToken(e.protocolFee); + dailyRevenue.addGasToken(e.protocolFee); + }); + + const sellSharesLogs = await getLogs({ + target: "0x0De0D0cF717af57D2101F6Be0962fA890c1FBeC6", + eventAbi: + "event SellClanShare(address indexed seller, uint256 indexed clanId, uint256 amount, uint256 price, uint256 protocolFee, uint256 subjectFee)", + }); + sellSharesLogs.map((e: any) => { + dailyFees.addGasToken(e.protocolFee); + dailyRevenue.addGasToken(e.protocolFee); + }); + + return { dailyFees, dailyRevenue }; + }) as FetchV2, + start: 18607509, + }, + }, + version: 2, +}; + +export default adapter; From 49f12e42abde48fcabbf6e867f8262f029ec8dc6 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 22 Aug 2024 22:00:50 +0100 Subject: [PATCH 1275/1590] incorrect v2 adapter --- dexs/gmx-v2/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/dexs/gmx-v2/index.ts b/dexs/gmx-v2/index.ts index 70dd58952d..32fda6101c 100644 --- a/dexs/gmx-v2/index.ts +++ b/dexs/gmx-v2/index.ts @@ -70,7 +70,6 @@ const methodology = { } const adapter: BreakdownAdapter = { - version: 2, breakdown: { "gmx-v2-swap": Object.keys(endpoints).reduce((acc, chain) => { return { From d7f4be0f916db272ad081cf0c5f3a8ec6b4a985e Mon Sep 17 00:00:00 2001 From: TerrenceAddison Date: Fri, 23 Aug 2024 12:22:40 +0700 Subject: [PATCH 1276/1590] add daily volumes --- options/arrow-markets/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/options/arrow-markets/index.ts b/options/arrow-markets/index.ts index 37b22d4bd0..2a1d0e51f1 100644 --- a/options/arrow-markets/index.ts +++ b/options/arrow-markets/index.ts @@ -3,6 +3,8 @@ import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; interface ArrowMarketsVolumeResponse { + daily_notional_volume: string; + daily_premium_volume: string; total_notional_volume: string; } @@ -25,10 +27,14 @@ export async function fetchArrowMarketsVolumeData( let timestamp_in_ms = timestamp * 1000 const ArrowMarketsVolumeData = await getArrowMarketsVolumeData(arrowMarketsVolumeEndpoint); + const dailyPremiumVolume = Number(ArrowMarketsVolumeData.daily_premium_volume).toFixed(2); + const dailyNotionalVolume = Number(ArrowMarketsVolumeData.daily_notional_volume).toFixed(2); const totalNotionalVolume = Number(ArrowMarketsVolumeData.total_notional_volume).toFixed(2); return { timestamp, + dailyNotionalVolume, + dailyPremiumVolume, totalNotionalVolume, }; } From f9448c9b0ca9503f30bcc739f0550700ce1f5539 Mon Sep 17 00:00:00 2001 From: Mr-Lucky Date: Fri, 23 Aug 2024 13:35:54 +0800 Subject: [PATCH 1277/1590] add ProtocalRevenue & fix start timestamp --- fees/goplus.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/fees/goplus.ts b/fees/goplus.ts index 072c9aeefb..01611b2f57 100644 --- a/fees/goplus.ts +++ b/fees/goplus.ts @@ -21,6 +21,8 @@ const CALLS = [ const fetch = async (options: FetchOptions) => { const dailyFees = options.createBalances(); const totalFees = options.createBalances(); + const dailyProtocolRevenue = options.createBalances(); + const totalProtocolRevenue = options.createBalances(); const [foundationBalanceStart, revenueBalanceStart] = await options.fromApi.multiCall({ abi: BALANCE_ABI, calls: CALLS @@ -32,9 +34,12 @@ const fetch = async (options: FetchOptions) => { const dailyFoundationReceived = BigNumber(foundationBalanceEnd).minus(BigNumber(foundationBalanceStart)); const dailyRevenueReceived = BigNumber(revenueBalanceEnd).minus(BigNumber(revenueBalanceStart)); const dailyTotal = dailyFoundationReceived.plus(dailyRevenueReceived).toFixed(0); + const totalFee = BigNumber(foundationBalanceEnd).plus(BigNumber(revenueBalanceEnd)).toFixed(0); dailyFees.add(USDT_MINT, dailyTotal); - totalFees.add(USDT_MINT, BigNumber(foundationBalanceEnd).plus(BigNumber(revenueBalanceEnd)).toFixed(0)); - return { dailyFees, totalFees }; + totalFees.add(USDT_MINT, totalFee); + dailyProtocolRevenue.add(USDT_MINT, dailyTotal); + totalProtocolRevenue.add(USDT_MINT, totalFee); + return { dailyFees, totalFees, dailyProtocolRevenue, totalProtocolRevenue }; }; const adapter: SimpleAdapter = { @@ -42,9 +47,10 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.BSC]: { fetch: fetch, - start: 36724659, + start: 1709740800, meta: { methodology: { + ProtocolRevenue: "The revenue of the agreement comes from users purchasing security services, and the total cost equals the revenue.", Fees: "All fees comes from users for security service provided by GoPlus Network." } } From 33f24417f5f7341590130d69d58777b899368aae Mon Sep 17 00:00:00 2001 From: David Cumps Date: Fri, 23 Aug 2024 15:46:12 +0200 Subject: [PATCH 1278/1590] feat: add chainflip dexs --- dexs/chainflip/index.ts | 32 ++++++++++++++++++++++++++++++++ helpers/chains.ts | 3 ++- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 dexs/chainflip/index.ts diff --git a/dexs/chainflip/index.ts b/dexs/chainflip/index.ts new file mode 100644 index 0000000000..c7045cb633 --- /dev/null +++ b/dexs/chainflip/index.ts @@ -0,0 +1,32 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; + +const dimensionsEndpoint = "https://chainflip-broker.io/defillama/dexs" + +const fetch = async (timestamp: number) => { + const dimensionsData = await httpGet(`${dimensionsEndpoint}?timestamp=${timestamp}`, { headers: {"x-client-id": "defillama"}}); + + return { + timestamp: dimensionsData.timestamp, + dailyVolume: dimensionsData.dailyVolume, + totalVolume: dimensionsData.totalVolume + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.CHAINFLIP]: { + fetch, + start: 1700740800, // FLIP went live on 2023-11-23 12:00 UTC + runAtCurrTime: true, + meta: { + methodology: { + Volume: "Deposit value of a swap.", + } + } + }, + }, +}; + +export default adapter; diff --git a/helpers/chains.ts b/helpers/chains.ts index 96f6b47760..058d0bf155 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -161,7 +161,8 @@ export enum CHAIN { IOTAEVM = "iotaevm", ZKLINK = "zklink", DEXALOT = "dexalot", - IMMUTABLEX = "immutablex" + IMMUTABLEX = "immutablex", + CHAINFLIP = "chainflip" } // Don´t use From e9469f8fbf1a98b183eb0a3dd777cec3680dc664 Mon Sep 17 00:00:00 2001 From: David Cumps Date: Fri, 23 Aug 2024 23:02:45 +0200 Subject: [PATCH 1279/1590] feat: add chainflip fees adapter --- fees/chainflip/index.ts | 57 +++++++++++++++++++++++++++++++++++++++++ helpers/chains.ts | 3 ++- 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 fees/chainflip/index.ts diff --git a/fees/chainflip/index.ts b/fees/chainflip/index.ts new file mode 100644 index 0000000000..edf64f7123 --- /dev/null +++ b/fees/chainflip/index.ts @@ -0,0 +1,57 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; + +const dimensionsEndpoint = "https://chainflip-broker.io/defillama/fees" + +const fetch = async (timestamp: number) => { + const dimensionsData = await httpGet(`${dimensionsEndpoint}?timestamp=${timestamp}`, { headers: {"x-client-id": "defillama"}}); + + return { + timestamp: timestamp, + + // All fees and value collected from all sources, this also includes liquid staking rewards, generated yields and possible mint and burn fees paid by LP (but not transaction or gas fees). + dailyFees: dimensionsData.dailyFees, + + // Fees paid by protocol users excluding gas fees. This includes swap fees to open/close positions, borrow fees and all fees user has to pay. + dailyUserFees: dimensionsData.dailyUserFees, + + // (FLIP Burn) Revenue of the protocol governance, this includes treasury and gov token holders + dailyRevenue: dimensionsData.dailyRevenue, + + // Value earned by liquidity providers + dailySupplySideRevenue: dimensionsData.dailySupplySideRevenue, + + // Cumulative value of dailyFees + totalFees: dimensionsData.totalFees, + + // Cumulative value of dailyUserFees + totalUserFees: dimensionsData.totalUserFees, + + // Cumulative value of dailyRevenue + totalRevenue: dimensionsData.totalRevenue, + + // Cumulative value of dailySupplySideRevenue + totalSupplySideRevenue: dimensionsData.totalSupplySideRevenue + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.CHAINFLIP]: { + fetch, + start: 1717113600, // First decent swap was 2024-05-31 09:22:30.000000 + runAtCurrTime: true, + meta: { + methodology: { + Fees: "Ingress, Broker, LP, Protocol and Egress fees.", + UserFees: "Broker, LP, Protocol fees.", + Revenue: "Protocol burns 0.10% of each swap.", + SupplySideRevenue: "LP pools have a 0.05% fee.", + } + } + }, + }, +}; + +export default adapter; diff --git a/helpers/chains.ts b/helpers/chains.ts index 96f6b47760..058d0bf155 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -161,7 +161,8 @@ export enum CHAIN { IOTAEVM = "iotaevm", ZKLINK = "zklink", DEXALOT = "dexalot", - IMMUTABLEX = "immutablex" + IMMUTABLEX = "immutablex", + CHAINFLIP = "chainflip" } // Don´t use From 107118d7c006c62353e22b980177bca597c19be2 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Fri, 23 Aug 2024 23:41:35 +0100 Subject: [PATCH 1280/1590] fix --- dexs/gmx-v2/index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/dexs/gmx-v2/index.ts b/dexs/gmx-v2/index.ts index 32fda6101c..976328a834 100644 --- a/dexs/gmx-v2/index.ts +++ b/dexs/gmx-v2/index.ts @@ -34,9 +34,7 @@ interface IGraphResponse { const getFetch = (query: string)=> (chain: string): Fetch => async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000))) const dailyData: IGraphResponse = await request(endpoints[chain], query, { - id: '1d:' + chain === CHAIN.ARBITRUM - ? String(dayTimestamp) - : String(dayTimestamp), + id: '1d:' + String(dayTimestamp), period: '1d', }) const totalData: IGraphResponse = await request(endpoints[chain], query, { From 541674dba4c47522c59269bb92731bae6f8fcb45 Mon Sep 17 00:00:00 2001 From: Strategic Reserve Date: Fri, 23 Aug 2024 17:42:00 -0700 Subject: [PATCH 1281/1590] Create Xtrade volume --- protocols/xtrade/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 protocols/xtrade/index.js diff --git a/protocols/xtrade/index.js b/protocols/xtrade/index.js new file mode 100644 index 0000000000..eb9332bbeb --- /dev/null +++ b/protocols/xtrade/index.js @@ -0,0 +1,9 @@ +import { uniV3Exports } from "../helpers/uniswap"; + +const poolEvent = 'event Pool(address indexed token0,address indexed token1,address pool)' +export default uniV3Exports({ + xlayer: { + poolCreatedEvent: poolEvent, + factory: '0x612D9EA08be59479B112D8d400C7F0A2E4aD4172', + }, +}) From 5acdd0d3afdf990464828d1896ff99a5bb746b56 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 24 Aug 2024 12:44:53 +0000 Subject: [PATCH 1282/1590] fix split block ragg for get fees --- fees/sunpump.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/fees/sunpump.ts b/fees/sunpump.ts index 7373839c28..59dde6ed5b 100644 --- a/fees/sunpump.ts +++ b/fees/sunpump.ts @@ -7,10 +7,18 @@ const adapter: Adapter = { [CHAIN.TRON]: { fetch: (async (options: FetchOptions) => { const dailyFees = options.createBalances(); - const logs = await options.getLogs({ - targets: ['TG9nDZMUtC4LBmrWSdNXNi8xrKzXTMMSKT'], - eventAbi: "event TRXReceived(address indexed from,uint256 amount)", - }) + const start = await options.getFromBlock(); + const end = await options.getToBlock(); + const logs = [] + for(let i = start; i <= end; i+=2000) { + const _logs = await options.getLogs({ + target: 'TG9nDZMUtC4LBmrWSdNXNi8xrKzXTMMSKT', + eventAbi: "event TRXReceived(address indexed from,uint256 amount)", + fromBlock: start, + toBlock: start + 2000, + }) + logs.push(..._logs) + } logs.map((tx: any) => { dailyFees.addGasToken(tx.amount) }) From 887a81a0c8ed49fbadb7547fb040c9d47d8ac548 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 24 Aug 2024 12:53:50 +0000 Subject: [PATCH 1283/1590] fix dodo fees --- fees/dodo-fees.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fees/dodo-fees.ts b/fees/dodo-fees.ts index 4b77063623..3fed62070f 100644 --- a/fees/dodo-fees.ts +++ b/fees/dodo-fees.ts @@ -21,7 +21,9 @@ const adapter: Adapter = { "Content-Type": "application/json", "user-agent": "insomnia/2022.5.0" }) - const fees = Object.values(pairs.dashboard_pairs_rate_24.pairs).reduce((sum:number, p:any)=>sum+Number(p.fee), 0); + const fees = Object.values(pairs.dashboard_pairs_rate_24.pairs) + .filter((p:any)=> Number(p.tvl) > 1000) + .reduce((sum:number, p:any)=>sum+Number(p.fee), 0); return { timestamp: Date.now()/1e3, dailyFees: fees, From f4a97cdd72be7462755c96b1980ae0bfb0c3a575 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 24 Aug 2024 13:02:52 +0000 Subject: [PATCH 1284/1590] fix version dodo --- fees/dodo-fees.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/dodo-fees.ts b/fees/dodo-fees.ts index 3fed62070f..3943a283fc 100644 --- a/fees/dodo-fees.ts +++ b/fees/dodo-fees.ts @@ -37,7 +37,7 @@ const adapter: Adapter = { }; const breakdownAdapter: BreakdownAdapter = { - version: 2, + version: 1, breakdown: { "dodo": adapter.adapter } From f7ee9747937daf94495808c37da9f2853fa4165a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 24 Aug 2024 13:16:01 +0000 Subject: [PATCH 1285/1590] fix breakdown --- dexs/bmx/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/bmx/index.ts b/dexs/bmx/index.ts index d4d8985683..55839bac91 100644 --- a/dexs/bmx/index.ts +++ b/dexs/bmx/index.ts @@ -235,7 +235,7 @@ const adapter: BreakdownAdapter = { }, }; }, {}), - "derivatives-classic": Object.keys(endpoints).reduce((acc, chain) => { + "derivatives": Object.keys(endpoints).reduce((acc, chain) => { return { ...acc, [chain]: { From e405152c39f9a6095f5c21be6a31b5d6d2272fee Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 24 Aug 2024 13:23:39 +0000 Subject: [PATCH 1286/1590] bmx --- dexs/bmx-freestyle/index.ts | 115 ++++++++++++++++++++++++++++++++++++ dexs/bmx/index.ts | 77 +----------------------- 2 files changed, 116 insertions(+), 76 deletions(-) create mode 100644 dexs/bmx-freestyle/index.ts diff --git a/dexs/bmx-freestyle/index.ts b/dexs/bmx-freestyle/index.ts new file mode 100644 index 0000000000..6feafeecf3 --- /dev/null +++ b/dexs/bmx-freestyle/index.ts @@ -0,0 +1,115 @@ +import BigNumber from "bignumber.js"; +import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import request, { gql } from "graphql-request"; +import { CHAIN } from "../../helpers/chains"; + + +const freestyleEndpoints: { [key: string]: string } = { + [CHAIN.BASE]: + "https://api.studio.thegraph.com/query/62454/analytics_base_8_2/version/latest", +}; + +interface IGraphResponseFreestyle { + dailyHistories: Array<{ + tiemstamp: string; + platformFee: string; + accountSource: string; + tradeVolume: string; + }>; + totalHistories: Array<{ + tiemstamp: string; + platformFee: string; + accountSource: string; + tradeVolume: BigNumber; + }>; +} + +interface IGraphResponse { + volumeStats: Array<{ + burn: string; + liquidation: string; + margin: string; + mint: string; + swap: string; + }>; +} + +const ONE_DAY_IN_SECONDS = 60 * 60 * 24; + +const toString = (x: BigNumber) => { + if (x.isEqualTo(0)) return undefined; + return x.toString(); +}; + +const freestyleQuery = gql` + query stats($from: String!, $to: String!) { + dailyHistories( + where: { + timestamp_gte: $from + timestamp_lte: $to + accountSource: "0x6D63921D8203044f6AbaD8F346d3AEa9A2719dDD" + } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + totalHistories( + where: { accountSource: "0x6D63921D8203044f6AbaD8F346d3AEa9A2719dDD" } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + } +`; + +const fetchFreestyleVolume = async (timestamp: number, _t: any, options: FetchOptions): Promise => { + const startTime = options.startOfDay; + const endTime = startTime + ONE_DAY_IN_SECONDS; + const response: IGraphResponseFreestyle = await request( + freestyleEndpoints[options.chain], + freestyleQuery, + { + from: String(startTime), + to: String(endTime), + } + ); + + let dailyVolume = new BigNumber(0); + let totalVolume = new BigNumber(0); + + response.dailyHistories.forEach((data) => { + dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); + }); + response.totalHistories.forEach((data) => { + totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); + }); + + dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); + totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); + + const _dailyVolume = toString(dailyVolume); + const _totalVolume = toString(totalVolume); + + + return { + timestamp: timestamp, + dailyVolume: _dailyVolume ?? "0", + totalVolume: _totalVolume ?? "0", + }; + }; + +const adapter: SimpleAdapter = { + version: 1, + adapter: { + [CHAIN.BASE]: { + fetch: fetchFreestyleVolume, + start: 0 + } + } +} + +export default adapter; diff --git a/dexs/bmx/index.ts b/dexs/bmx/index.ts index 55839bac91..cc1802ef7a 100644 --- a/dexs/bmx/index.ts +++ b/dexs/bmx/index.ts @@ -1,18 +1,12 @@ import request, { gql } from "graphql-request"; import { BreakdownAdapter, - Fetch, - FetchResultVolume, + Fetch } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import BigNumber from "bignumber.js"; -const ONE_DAY_IN_SECONDS = 60 * 60 * 24; -const toString = (x: BigNumber) => { - if (x.isEqualTo(0)) return undefined; - return x.toString(); -}; const startTimestamps: { [chain: string]: number } = { [CHAIN.BASE]: 1694304000, @@ -53,30 +47,6 @@ const historicalOI = gql` } } `; -const freestyleQuery = gql` - query stats($from: String!, $to: String!) { - dailyHistories( - where: { - timestamp_gte: $from - timestamp_lte: $to - accountSource: "0x6D63921D8203044f6AbaD8F346d3AEa9A2719dDD" - } - ) { - timestamp - platformFee - accountSource - tradeVolume - } - totalHistories( - where: { accountSource: "0x6D63921D8203044f6AbaD8F346d3AEa9A2719dDD" } - ) { - timestamp - platformFee - accountSource - tradeVolume - } - } -`; interface IGraphResponse { volumeStats: Array<{ @@ -184,45 +154,6 @@ const getFetch = }; }; -const fetchFreestyleVolume = - (query: string) => - (chain: string): Fetch => - async (timestamp: number): Promise => { - const response: IGraphResponseFreestyle = await request( - freestyleEndpoints[chain], - query, - { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp), - } - ); - - let dailyVolume = new BigNumber(0); - let totalVolume = new BigNumber(0); - - response.dailyHistories.forEach((data) => { - dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); - }); - response.totalHistories.forEach((data) => { - totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); - }); - - dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); - totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); - - const _dailyVolume = toString(dailyVolume); - const _totalVolume = toString(totalVolume); - - const dayTimestamp = getUniqStartOfTodayTimestamp( - new Date(timestamp * 1000) - ); - - return { - timestamp: dayTimestamp, - dailyVolume: _dailyVolume ?? "0", - totalVolume: _totalVolume ?? "0", - }; - }; const adapter: BreakdownAdapter = { breakdown: { @@ -244,12 +175,6 @@ const adapter: BreakdownAdapter = { }, }; }, {}), - "derivatives-freestyle": { - [CHAIN.BASE]: { - fetch: fetchFreestyleVolume(freestyleQuery)(CHAIN.BASE), - start: 1714681913, - }, - }, }, }; From d74a711e1cab55e490a4300629bf72b819e589fd Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 24 Aug 2024 14:08:21 +0000 Subject: [PATCH 1287/1590] fix allow null --- dexs/bmx/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dexs/bmx/index.ts b/dexs/bmx/index.ts index cc1802ef7a..ce071df1b9 100644 --- a/dexs/bmx/index.ts +++ b/dexs/bmx/index.ts @@ -108,13 +108,13 @@ const getFetch = } ); dailyOpenInterest = - Number(tradingStats.tradingStats[0].longOpenInterest) + - Number(tradingStats.tradingStats[0].shortOpenInterest); + Number(tradingStats.tradingStats[0]?.longOpenInterest || 0) + + Number(tradingStats.tradingStats[0]?.shortOpenInterest || 0); dailyLongOpenInterest = Number( - tradingStats.tradingStats[0].longOpenInterest + tradingStats.tradingStats[0]?.longOpenInterest || 0 ); dailyShortOpenInterest = Number( - tradingStats.tradingStats[0].shortOpenInterest + tradingStats.tradingStats[0]?.shortOpenInterest || 0 ); } From d76d688c541a876bb70e98c8d9c5294b1c5f38dd Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Sat, 24 Aug 2024 20:09:33 +0100 Subject: [PATCH 1288/1590] trigger --- fees/dexscreener.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/dexscreener.ts b/fees/dexscreener.ts index 1bd67e033d..042413725e 100644 --- a/fees/dexscreener.ts +++ b/fees/dexscreener.ts @@ -40,12 +40,12 @@ const adapter: Adapter = { ...all, [chain]: { fetch: eth, - start: 0, + start: 1709251200, } }), { [CHAIN.SOLANA]: { fetch: sol, - start: 0 + start: 1709251200 } }), isExpensiveAdapter: true From 88b08cf735df4519a52acdd655dc484666a13e73 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 25 Aug 2024 10:06:01 +0000 Subject: [PATCH 1289/1590] disab;e terra --- aggregators/hallswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregators/hallswap/index.ts b/aggregators/hallswap/index.ts index 31dcc6182b..92642ead0c 100644 --- a/aggregators/hallswap/index.ts +++ b/aggregators/hallswap/index.ts @@ -19,7 +19,7 @@ const CHAINS = { osmosis: "osmosis", sei: "sei", solana: "solana", - terra: "terraclassic", + // terra: "terraclassic", terra2: "terra", } as const; // Number of milliseconds in a day (24 hours) From 48b36fcf9c0c87921144d3546d21192bd725ad3a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 25 Aug 2024 11:54:51 +0000 Subject: [PATCH 1290/1590] change to ts file --- protocols/xtrade/{index.js => index.ts} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename protocols/xtrade/{index.js => index.ts} (81%) diff --git a/protocols/xtrade/index.js b/protocols/xtrade/index.ts similarity index 81% rename from protocols/xtrade/index.js rename to protocols/xtrade/index.ts index eb9332bbeb..6fd277379e 100644 --- a/protocols/xtrade/index.js +++ b/protocols/xtrade/index.ts @@ -1,4 +1,4 @@ -import { uniV3Exports } from "../helpers/uniswap"; +import { uniV3Exports } from '../../helpers/uniswap' const poolEvent = 'event Pool(address indexed token0,address indexed token1,address pool)' export default uniV3Exports({ From ad4cb33ac589508c3fc1e73193636a6343541958 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 25 Aug 2024 15:41:45 +0000 Subject: [PATCH 1291/1590] set number of retry --- helpers/getBlock.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/helpers/getBlock.ts b/helpers/getBlock.ts index 60667616d0..c941b295eb 100644 --- a/helpers/getBlock.ts +++ b/helpers/getBlock.ts @@ -82,15 +82,15 @@ async function getBlock(timestamp: number, chain: Chain, chainBlocks = {} as Cha if (chain === CHAIN.CELO) block = Number((await retry(async () => (await httpGet("https://explorer.celo.org/api?module=block&action=getblocknobytime×tamp=" + timestamp + "&closest=before").catch((e) => { throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.result?.blockNumber))); + }))?.result?.blockNumber, { retries: 3 }))); else if (chain === CHAIN.KAVA) block = Number((await retry(async () => (await httpGet(`https://explorer.kava.io/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.result?.blockNumber))); + }))?.result?.blockNumber, { retries: 3 }))); else if (chain === CHAIN.ONUS) block = Number((await retry(async () => (await httpGet(`https://explorer.onuschain.io/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.result?.blockNumber))); + }))?.result?.blockNumber, { retries: 3 }))); else if (chain as CHAIN === CHAIN.POLYGON_ZKEVM || chain === CHAIN.VISION || chain as CHAIN === CHAIN.ERA) return sdk.api.util.lookupBlock(timestamp, { chain }).then((blockData: any) => blockData.block) // TODO after get block support chain polygon_zkevm then swith to use api https://coins.llama.fi/block else if (chain as CHAIN === CHAIN.WAVES) @@ -100,11 +100,11 @@ async function getBlock(timestamp: number, chain: Chain, chainBlocks = {} as Cha else if (chain === CHAIN.BASE) block = Number((await retry(async () => (await httpGet(`https://base.blockscout.com/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.result?.blockNumber))); + }))?.result?.blockNumber, { retries: 3 }))); else if (chain === CHAIN.SCROLL) block = Number((await retry(async () => (await httpGet(`https://blockscout.scroll.io/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.result?.blockNumber))); + }))?.result?.blockNumber, { retries: 3 }))); else block = Number((await retry(async () => (await httpGet(`https://coins.llama.fi/block/${chain}/${timestamp}`, { timeout: 10000 }).catch((e) => { throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) From 7a056b77629f0c693f5222a2547807943480c59e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 25 Aug 2024 15:50:46 +0000 Subject: [PATCH 1292/1590] fix get block --- adapters/types.ts | 2 +- helpers/getBlock.ts | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/adapters/types.ts b/adapters/types.ts index e0bffa5578..7c9f4fa55b 100644 --- a/adapters/types.ts +++ b/adapters/types.ts @@ -181,7 +181,7 @@ export const whitelistedDimensionKeys = new Set([ 'startTimestamp', 'chain', 'timestamp','block', 'dailyVolume', 'totalVolume', 'dailyShortOpenInterest', 'dailyLongOpenInterest', 'dailyOpenInterest', 'dailyBridgeVolume', 'totalBridgeVolume', - 'totalFees', 'dailyFees', 'dailyUserFees', 'totalRevenue', 'dailyRevenue', 'dailyProtocolRevenue', 'dailyHoldersRevenue', 'dailySupplySideRevenue', 'totalProtocolRevenue', 'totalSupplySideRevenue', 'totalUserFees', 'dailyBribesRevenue', 'dailyTokenTaxes', + 'totalFees', 'dailyFees', 'dailyUserFees', 'totalRevenue', 'dailyRevenue', 'dailyProtocolRevenue', 'dailyHoldersRevenue', 'dailySupplySideRevenue', 'totalProtocolRevenue', 'totalSupplySideRevenue', 'totalUserFees', 'dailyBribesRevenue', 'dailyTokenTaxes', 'totalHoldersRevenue', 'tokenIncentives', 'totalPremiumVolume', 'totalNotionalVolume', 'dailyPremiumVolume', 'dailyNotionalVolume', ]) diff --git a/helpers/getBlock.ts b/helpers/getBlock.ts index c941b295eb..045df6420b 100644 --- a/helpers/getBlock.ts +++ b/helpers/getBlock.ts @@ -83,10 +83,6 @@ async function getBlock(timestamp: number, chain: Chain, chainBlocks = {} as Cha block = Number((await retry(async () => (await httpGet("https://explorer.celo.org/api?module=block&action=getblocknobytime×tamp=" + timestamp + "&closest=before").catch((e) => { throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) }))?.result?.blockNumber, { retries: 3 }))); - else if (chain === CHAIN.KAVA) - block = Number((await retry(async () => (await httpGet(`https://explorer.kava.io/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { - throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.result?.blockNumber, { retries: 3 }))); else if (chain === CHAIN.ONUS) block = Number((await retry(async () => (await httpGet(`https://explorer.onuschain.io/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) From 3d8ab6a495d46cac80ee8e2280c8d2fe2642be80 Mon Sep 17 00:00:00 2001 From: marsclimber0109 Date: Mon, 26 Aug 2024 16:26:06 +0900 Subject: [PATCH 1293/1590] feat: add linea and cronos chain for eisen --- aggregators/eisen/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/aggregators/eisen/index.ts b/aggregators/eisen/index.ts index 1a9f373954..924a800768 100644 --- a/aggregators/eisen/index.ts +++ b/aggregators/eisen/index.ts @@ -18,6 +18,8 @@ const FEE_COLLECTORS: TPool = { [CHAIN.MANTLE]: ["0x31d6F212142D3B222EF11c9eBB6AF3569b8442EE"], [CHAIN.BLAST]: ["0xd57Ed7F46D64Ec7b6f04E4A8409D88C55Ef8AA3b"], [CHAIN.BITLAYER]: ["0x5722c0B501e7B9880F9bB13A14217851e45C454f"], + [CHAIN.LINEA]: ["0x206168f099013b9eAb979d3520cA00aAD453De55"], + [CHAIN.CRONOS]: ["0x0C15c845C4A970b284c0dd61Bcf01c4DC1117d0F"], }; const START_BLOCKS = { @@ -26,6 +28,8 @@ const START_BLOCKS = { [CHAIN.MANTLE]: 1704067200, [CHAIN.BLAST]: 1704067200, [CHAIN.BITLAYER]: 1704067200, + [CHAIN.LINEA]: 1704067200, + [CHAIN.CRONOS]: 1704067200, }; async function fetch({ getLogs, createBalances, chain }: FetchOptions) { From 0025b019a6146a750965d5992e393c2cde325f63 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Mon, 26 Aug 2024 12:24:23 +0200 Subject: [PATCH 1294/1590] feat:Adapter,Hashnote-usyc (fees) --- fees/hashnote-usyc/index.ts | 55 +++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 fees/hashnote-usyc/index.ts diff --git a/fees/hashnote-usyc/index.ts b/fees/hashnote-usyc/index.ts new file mode 100644 index 0000000000..ba3911a4a4 --- /dev/null +++ b/fees/hashnote-usyc/index.ts @@ -0,0 +1,55 @@ +// https://usyc.hashnote.com/api/price-reports +// https://usyc.hashnote.com/ + +import axios from "axios"; +import { Adapter, FetchOptions, FetchResultFees } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import ADDRESSES from "../../helpers/coreAssets.json"; + +type IResponse = { + timestamp: string; + fee: number; +}; + +const url: string = "https://usyc.hashnote.com/api/price-reports"; + +const formatTimestampToISO = (timestamp: number | string): string => { + const date = new Date(Number(timestamp) * 1000); + return date.toISOString().split("T")[0]; +}; + +const formatDatasToISO = (datas: IResponse[]): IResponse[] => { + return datas.map(({ timestamp, fee }) => ({ + timestamp: formatTimestampToISO(timestamp), + fee, + })); +}; + +const fetch = async ( + timestamp: number, + _: any, + { createBalances }: FetchOptions +): Promise => { + const dailyFees = createBalances(); + const response = await axios.get(url); + + const datas = formatDatasToISO(response.data.data); + const isoTimestamp = formatTimestampToISO(timestamp); + + const fees = datas.find(({ timestamp }) => timestamp === isoTimestamp); + if (fees) dailyFees.add(ADDRESSES.ethereum.USDC, Math.round(fees.fee) * 1e6); + + return { timestamp, dailyFees }; +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch, + start: 1686693600, + runAtCurrTime: false, + }, + }, +}; + +export default adapter; From 8f7bd0fe515550e6ade9060bbcdbdcfbca05c6e2 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Mon, 26 Aug 2024 14:43:56 +0100 Subject: [PATCH 1295/1590] revert change to start timestamp --- fees/dexscreener.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/dexscreener.ts b/fees/dexscreener.ts index 042413725e..1bd67e033d 100644 --- a/fees/dexscreener.ts +++ b/fees/dexscreener.ts @@ -40,12 +40,12 @@ const adapter: Adapter = { ...all, [chain]: { fetch: eth, - start: 1709251200, + start: 0, } }), { [CHAIN.SOLANA]: { fetch: sol, - start: 1709251200 + start: 0 } }), isExpensiveAdapter: true From a41347ab7e42be729d1b1e7dc0c9be41fa6cf4bf Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 26 Aug 2024 15:48:33 +0000 Subject: [PATCH 1296/1590] fix add base and tron --- fees/maestro.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fees/maestro.ts b/fees/maestro.ts index ec903238db..8ba7e968a8 100644 --- a/fees/maestro.ts +++ b/fees/maestro.ts @@ -7,6 +7,8 @@ const dispatcher: any = { [CHAIN.ETHEREUM]: "0x2ff99ee6b22aedaefd8fd12497e504b18983cb14", [CHAIN.BSC]: "0x7176456e98443a7000b44e09149a540d06733965", [CHAIN.ARBITRUM]: "0x34b5561c30a152b5882c8924973f19df698470f4", + [CHAIN.BASE]: "0xb0999731f7c2581844658a9d2ced1be0077b7397", + [CHAIN.TRON]: "TS4yvUzwmaSh4XM1scBXRgoKeVdb4oot4S" } const feesAddress = '0xB0999731f7c2581844658A9d2ced1be0077b7397' @@ -58,6 +60,8 @@ const adapter: Adapter = { fetch: fetchSolana, start: 1656633600, // wrong? }, + [CHAIN.BASE]: chainAdapter, + [CHAIN.TRON]: chainAdapter, }, isExpensiveAdapter: true } From b1521384e565f139b556eefbac183ecbdbbcd0c2 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 26 Aug 2024 19:04:32 +0100 Subject: [PATCH 1297/1590] add farcaster and separate utils code --- fees/farcaster.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 fees/farcaster.ts diff --git a/fees/farcaster.ts b/fees/farcaster.ts new file mode 100644 index 0000000000..838212b875 --- /dev/null +++ b/fees/farcaster.ts @@ -0,0 +1,20 @@ +import { Adapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { evmReceivedGasAndTokens } from "../helpers/token"; + +const adapter: Adapter = { + version: 2, + isExpensiveAdapter: true, + adapter: { + [CHAIN.OPTIMISM]: { + fetch: evmReceivedGasAndTokens('0x00000000fcce7f938e7ae6d3c335bd6a1a7c593d', []), // actual protocol payments + start: 0, + }, + [CHAIN.BASE]: { + fetch: evmReceivedGasAndTokens('0xbc698ce1933afb2980d4a5a0f85fea1b02fbb1c9', []), // zora rewards + start: 0, + } + } +} + +export default adapter; \ No newline at end of file From e7fbb8a360e3382e9afa1e94c8dd3c251c43c0d3 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Mon, 26 Aug 2024 22:06:12 +0100 Subject: [PATCH 1298/1590] evmReceivedGasAndTokens --- fees/dextools.ts | 20 +++----------------- helpers/dune.ts | 6 +++--- helpers/token.ts | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/fees/dextools.ts b/fees/dextools.ts index 19d24399e6..c380f7d8b1 100644 --- a/fees/dextools.ts +++ b/fees/dextools.ts @@ -34,8 +34,8 @@ For Tokens created with https://creator.dextools.io, enter "//TOKENCREATOR//" as import { Adapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { queryDune, queryDuneSql } from "../helpers/dune"; -import { addTokensReceived, nullAddress } from '../helpers/token'; +import { queryDune } from "../helpers/dune"; +import { evmReceivedGasAndTokens } from '../helpers/token'; const tokens = { ethereum: [ @@ -47,20 +47,6 @@ const tokens = { base: [] } as any -const evm = async (options: FetchOptions) => { - const receiverWallet = '0x997Cc123cF292F46E55E6E63e806CD77714DB70f' - const dailyFees = await addTokensReceived({ options, tokens: tokens[options.chain], target: receiverWallet }) - const nativeTransfers = await queryDuneSql(options, `select sum(value) as received from CHAIN.transactions - where to = ${receiverWallet} - AND TIME_RANGE`) - dailyFees.add(nullAddress, nativeTransfers[0].received) - - return { - dailyFees, - dailyRevenue: dailyFees, - } -} - const sol = async (options: FetchOptions) => { const dailyFees = options.createBalances(); const value = (await queryDune("3521814", { @@ -81,7 +67,7 @@ const adapter: Adapter = { adapter: [CHAIN.ETHEREUM, CHAIN.BASE, CHAIN.BSC].reduce((all, chain) => ({ ...all, [chain]: { - fetch: evm, + fetch: evmReceivedGasAndTokens('0x997Cc123cF292F46E55E6E63e806CD77714DB70f', tokens[chain]), start: 0, } }), { diff --git a/helpers/dune.ts b/helpers/dune.ts index 11da710219..f70cacd19a 100644 --- a/helpers/dune.ts +++ b/helpers/dune.ts @@ -74,7 +74,7 @@ const submitQuery = async (queryId: string, query_parameters = {}) => { } -export const queryDune = async (queryId: string, query_parameters = {}) => { +export const queryDune = async (queryId: string, query_parameters:any = {}) => { if (Object.keys(query_parameters).length === 0) { const latest_result = await getLatestData(queryId) if (latest_result !== undefined) return latest_result @@ -99,12 +99,12 @@ export const queryDune = async (queryId: string, query_parameters = {}) => { const tableName = { bsc: "bnb", ethereum: "ethereum", - base: "base" + base: "base", } as any export const queryDuneSql = (options:any, query:string) => { return queryDune("3996608", { - fullQuery: query.replace("CHAIN", tableName[options.chain]).replace("TIME_RANGE", `block_time >= from_unixtime(${options.startTimestamp}) + fullQuery: query.replace("CHAIN", tableName[options.chain] ?? options.chain).replace("TIME_RANGE", `block_time >= from_unixtime(${options.startTimestamp}) AND block_time <= from_unixtime(${options.endTimestamp})`) }) } diff --git a/helpers/token.ts b/helpers/token.ts index c7bf258997..a92220a6b8 100644 --- a/helpers/token.ts +++ b/helpers/token.ts @@ -6,6 +6,7 @@ import { getCache, setCache } from "./cache"; import { ethers } from "ethers"; import { getUniqueAddresses } from '@defillama/sdk/build/generalUtil'; import { getEnv } from './env'; +import { queryDuneSql } from './dune'; export const nullAddress = ADDRESSES.null @@ -244,3 +245,21 @@ export async function getTokenDiff(params: { return balances } + + +export const evmReceivedGasAndTokens = (receiverWallet:string, tokens:string[]) => + async (options: FetchOptions) => { + let dailyFees = options.createBalances() + if(tokens.length > 0){ + dailyFees = await addTokensReceived({ options, tokens: tokens, target: receiverWallet }) + } + const nativeTransfers = await queryDuneSql(options, `select sum(value) as received from CHAIN.traces + where to = ${receiverWallet} AND tx_success = TRUE + AND TIME_RANGE`) + dailyFees.add(nullAddress, nativeTransfers[0].received) + + return { + dailyFees, + dailyRevenue: dailyFees, + } +} \ No newline at end of file From f5bec9a04a839679a72be0c461c81e5b59b2a4cf Mon Sep 17 00:00:00 2001 From: Olga Kanishcheva Date: Tue, 27 Aug 2024 16:27:57 +0400 Subject: [PATCH 1299/1590] Add lumia adapter --- aggregators/lumia/index.ts | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 aggregators/lumia/index.ts diff --git a/aggregators/lumia/index.ts b/aggregators/lumia/index.ts new file mode 100644 index 0000000000..33c6a6022c --- /dev/null +++ b/aggregators/lumia/index.ts @@ -0,0 +1,50 @@ +import fetchURL from "../../utils/fetchURL"; +import {FetchOptions, FetchResult, SimpleAdapter} from "../../adapters/types"; +import {CHAIN} from "../../helpers/chains"; + +const chains: Record = { + [CHAIN.ETHEREUM]: 'ethereum', + [CHAIN.BSC]: 'binance-smart-chain', + [CHAIN.POLYGON]: 'polygon', + [CHAIN.ARBITRUM]: 'arbitrum', + [CHAIN.OP_BNB]: 'opbnb', + [CHAIN.LINEA]: 'linea' +}; + +interface ApiResponse { + daily_volume_in_usd: string; + daily_transaction_count: string; + total_volume_in_usd: string; + total_transaction_count: string; +} + +const fetch = (chain: string) => async (options: FetchOptions): Promise => { + const response: ApiResponse = ( + await fetchURL(`https://trade.orion.xyz/frontage/api/v1/statistics/defilama?date=${options.startTimestamp}&network=${chain}`) + ); + + return { + dailyVolume: response?.daily_volume_in_usd || '0', + totalVolume: response?.total_volume_in_usd || '0', + timestamp: options.startTimestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + ...Object.entries(chains).reduce((acc, chain) => { + const [key, value] = chain; + + return { + ...acc, + [key]: { + fetch: fetch(value), + start: 1672531200, // 01.01.2023 + }, + }; + }, {}), + }, + version: 2 +}; + +export default adapter; From 30fe165ca3c29e0748e6a60ff2a3273cd6550981 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 27 Aug 2024 13:38:59 +0000 Subject: [PATCH 1300/1590] fix dydx v4 fees --- fees/dydx-v4/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/fees/dydx-v4/index.ts b/fees/dydx-v4/index.ts index 2e4e7d0397..a20ffdaa16 100644 --- a/fees/dydx-v4/index.ts +++ b/fees/dydx-v4/index.ts @@ -18,7 +18,6 @@ const fetchFees = async (options: FetchOptions) => { } const adapter: SimpleAdapter = { - version: 2, adapter: { "dydx": { fetch: fetchFees, From a91e6c1bd3686b2f95e311b60d9d6ebc1dcd05d6 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 27 Aug 2024 13:43:50 +0000 Subject: [PATCH 1301/1590] fix v4 version --- fees/dydx-v4/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fees/dydx-v4/index.ts b/fees/dydx-v4/index.ts index a20ffdaa16..9034580dcd 100644 --- a/fees/dydx-v4/index.ts +++ b/fees/dydx-v4/index.ts @@ -1,11 +1,11 @@ -import { FetchOptions, SimpleAdapter } from '../../adapters/types' +import { ChainBlocks, FetchOptions, SimpleAdapter } from '../../adapters/types' import { httpGet } from '../../utils/fetchURL' interface IFees { day: string sum_tradingfeecollection: string } -const fetchFees = async (options: FetchOptions) => { +const fetchFees = async (timestamp: number, _t: ChainBlocks ,options: FetchOptions) => { const url = 'https://api.lacertalabs.xyz/data/tradingfeecollection' const dateStr = new Date(options.startOfDay * 1000).toISOString().split('T')[0] const res = await httpGet(url) @@ -14,6 +14,7 @@ const fetchFees = async (options: FetchOptions) => { const dailyFees = item.find((i) => i.day.split('T')[0] === dateStr)?.sum_tradingfeecollection return { dailyFees: dailyFees ? dailyFees : undefined, + timestamp: timestamp, } } From c4b1a050388762e47c3f2b8b5e6135279d6d1337 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 27 Aug 2024 15:43:39 +0000 Subject: [PATCH 1302/1590] init slisbnb --- fees/slisbnb/index.ts | 102 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 fees/slisbnb/index.ts diff --git a/fees/slisbnb/index.ts b/fees/slisbnb/index.ts new file mode 100644 index 0000000000..0c6543c686 --- /dev/null +++ b/fees/slisbnb/index.ts @@ -0,0 +1,102 @@ +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + + +const ListaStakeManagerAddress = "0x1adB950d8bB3dA4bE104211D5AB038628e477fE6"; +const HelioETHProvider = "0x0326c157bfF399e25dd684613aEF26DBb40D3BA4" +const MasterVault = "0x986b40C2618fF295a49AC442c5ec40febB26CC54" +const SnBnbYieldConverterStrategy = "0x6F28FeC449dbd2056b76ac666350Af8773E03873" +const CeETHVault = "0xA230805C28121cc97B348f8209c79BEBEa3839C0" +const HayJoin = "0x4C798F81de7736620Cd8e6510158b1fE758e22F7" + +// token +const slibBNB = "0xb0b84d294e0c75a6abe60171b70edeb2efd14a1b" +const weth = "0x4db5a66e937a9f4473fa95b1caf1d1e1d62e29ea" +const bnb = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" + +const fetch = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const logs_reward = await options.getLogs({ + target: ListaStakeManagerAddress, + eventAbi: "event RewardsCompounded(uint256 _amount)" + }); + + const logs_claim = await options.getLogs({ + target: HelioETHProvider, + eventAbi: "event Claim(address recipient, uint256 amount)" + }); + + const logs_fees_claim = await options.getLogs({ + target: MasterVault, + eventAbi: "event FeeClaimed(address receiver, uint256 amount)" + }); + + const logs_fees_harvested = await options.getLogs({ + target: SnBnbYieldConverterStrategy, + eventAbi: "event Harvested(address to, uint256 amount)" + }); + + const logs_transfer = await options.getLogs({ + target: CeETHVault, + topics: [ + '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', + '0x000000000000000000000000a230805c28121cc97b348f8209c79bebea3839c0', + '0x0000000000000000000000008d388136d578dcd791d081c6042284ced6d9b0c6' + ] + }); + const urs = '0x8d388136d578dCD791D081c6042284CED6d9B0c6'; + const logs_exit = await options.getLogs({ + target: HayJoin, + topics: [ + '0x22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b299631', + '0x0000000000000000000000008d388136d578dcd791d081c6042284ced6d9b0c6' + ] + }); + + logs_reward.forEach(log => { + const amount = log._amount; + dailyFees.add(slibBNB, amount); + }) + + logs_claim.forEach(log => { + const amount = log.amount; + dailyFees.add(weth, amount); + }) + + logs_fees_claim.forEach(log => { + const amount = log.amount; + dailyFees.add(bnb, amount); + }) + + logs_fees_harvested.forEach(log => { + const amount = log.amount; + dailyFees.add(slibBNB, amount); + }) + + logs_transfer.forEach(log => { + const amount = Number(log.data) + dailyFees.add(weth, amount); + }) + + logs_exit.forEach(log => { + const amount = Number(log.data); + dailyFees.add(weth, amount); + }) + + return { + dailyFees, + dailyRevenue: dailyFees + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.BSC]: { + fetch, + start: 0 + } + } +} + +export default adapter; From dcbbc1d59db3e1274db9f159ae9a00d504e66399 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 27 Aug 2024 15:44:10 +0000 Subject: [PATCH 1303/1590] remove not use --- fees/slisbnb/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/slisbnb/index.ts b/fees/slisbnb/index.ts index 0c6543c686..dbb8f3cc3a 100644 --- a/fees/slisbnb/index.ts +++ b/fees/slisbnb/index.ts @@ -44,7 +44,7 @@ const fetch = async (options: FetchOptions) => { '0x0000000000000000000000008d388136d578dcd791d081c6042284ced6d9b0c6' ] }); - const urs = '0x8d388136d578dCD791D081c6042284CED6d9B0c6'; + const logs_exit = await options.getLogs({ target: HayJoin, topics: [ From 741f437937cc922a29bf61453705680ddc10c105 Mon Sep 17 00:00:00 2001 From: echo-pro-dev Date: Wed, 28 Aug 2024 09:11:01 +0800 Subject: [PATCH 1304/1590] Added aBTC on Aptos in coreAssets.json --- helpers/coreAssets.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/helpers/coreAssets.json b/helpers/coreAssets.json index 090b19cabb..7424bd45fc 100644 --- a/helpers/coreAssets.json +++ b/helpers/coreAssets.json @@ -798,7 +798,8 @@ "CELER_DAI": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::DaiCoin", "CELER_ETH": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::WethCoin", "CELER_WBTC": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::WbtcCoin", - "amAPT": "0x111ae3e5bc816a5e63c2da97d0aa3886519e0cd5e4b046659fa35796bd11542a::amapt_token::AmnisApt" + "amAPT": "0x111ae3e5bc816a5e63c2da97d0aa3886519e0cd5e4b046659fa35796bd11542a::amapt_token::AmnisApt", + "aBTC": "0x4e1854f6d332c9525e258fb6e66f84b6af8aba687bbcb832a24768c4e175feec::abtc::ABTC" }, "dogechain": { "WWDOGE": "0xb7ddc6414bf4f5515b52d8bdd69973ae205ff101", From 128f5ede185f259b75d0fc1b3d40764c80022511 Mon Sep 17 00:00:00 2001 From: CronosLabsDev <106642922+CronosLabsDev@users.noreply.github.com> Date: Wed, 28 Aug 2024 12:59:18 +1000 Subject: [PATCH 1305/1590] feat: add cronos zk evm fee and vol --- dexs/fulcrom-finance/index.ts | 84 ++++++++++++++++++----------------- fees/fulcrom-finance.ts | 8 ++++ helpers/chains.ts | 3 +- 3 files changed, 53 insertions(+), 42 deletions(-) diff --git a/dexs/fulcrom-finance/index.ts b/dexs/fulcrom-finance/index.ts index f180408a87..80341d76a2 100644 --- a/dexs/fulcrom-finance/index.ts +++ b/dexs/fulcrom-finance/index.ts @@ -8,6 +8,7 @@ const endpoints: { [key: string]: string } = { "https://graph.cronoslabs.com/subgraphs/name/fulcrom/stats-prod", [CHAIN.ERA]: "https://api.studio.thegraph.com/query/52869/stats-prod/version/latest", + [CHAIN.CRONOS_ZKEVM]: "https://api.goldsky.com/api/public/project_clwrfupe2elf301wlhnd7bvva/subgraphs/fulcrom-stats-mainnet/prod/gn" }; const historicalDataSwap = gql` @@ -39,51 +40,52 @@ interface IGraphResponse { const getFetch = (query: string) => - (chain: string): Fetch => - async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp( - new Date(timestamp * 1000) - ); - const dailyData: IGraphResponse = await request(endpoints[chain], query, { - id: "daily:" + String(dayTimestamp), - period: "daily", - }); - const totalData: IGraphResponse = await request(endpoints[chain], query, { - id: "total", - period: "total", - }); + (chain: string): Fetch => + async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp( + new Date(timestamp * 1000) + ); + const dailyData: IGraphResponse = await request(endpoints[chain], query, { + id: "daily:" + String(dayTimestamp), + period: "daily", + }); + const totalData: IGraphResponse = await request(endpoints[chain], query, { + id: "total", + period: "total", + }); - return { - timestamp: dayTimestamp, - dailyVolume: - dailyData.volumeStats.length == 1 - ? String( - Number( - Object.values(dailyData.volumeStats[0]).reduce((sum, element) => - String(Number(sum) + Number(element)) - ) - ) * + return { + timestamp: dayTimestamp, + dailyVolume: + dailyData.volumeStats.length == 1 + ? String( + Number( + Object.values(dailyData.volumeStats[0]).reduce((sum, element) => + String(Number(sum) + Number(element)) + ) + ) * 10 ** -30 - ) - : undefined, - totalVolume: - totalData.volumeStats.length == 1 - ? String( - Number( - Object.values(totalData.volumeStats[0]).reduce((sum, element) => - String(Number(sum) + Number(element)) - ) - ) * + ) + : undefined, + totalVolume: + totalData.volumeStats.length == 1 + ? String( + Number( + Object.values(totalData.volumeStats[0]).reduce((sum, element) => + String(Number(sum) + Number(element)) + ) + ) * 10 ** -30 - ) - : undefined, - }; - }; + ) + : undefined, + }; + }; - const startTimestamps: { [chain: string]: number } = { - [CHAIN.CRONOS]: 1677470400, - [CHAIN.ERA]: 1696496400, - }; +const startTimestamps: { [chain: string]: number } = { + [CHAIN.CRONOS]: 1677470400, + [CHAIN.ERA]: 1696496400, + [CHAIN.CRONOS_ZKEVM]: 1723698700, +}; const adapter: BreakdownAdapter = { breakdown: { diff --git a/fees/fulcrom-finance.ts b/fees/fulcrom-finance.ts index eda0a42544..dc05ba8d20 100644 --- a/fees/fulcrom-finance.ts +++ b/fees/fulcrom-finance.ts @@ -9,6 +9,7 @@ const endpoints = { "https://graph.cronoslabs.com/subgraphs/name/fulcrom/stats-prod", [CHAIN.ERA]: "https://api.studio.thegraph.com/query/52869/stats-prod/version/latest", + [CHAIN.CRONOS_ZKEVM]: "https://api.goldsky.com/api/public/project_clwrfupe2elf301wlhnd7bvva/subgraphs/fulcrom-stats-mainnet/prod/gn" }; const methodology = { @@ -99,6 +100,13 @@ const adapter: Adapter = { methodology, }, }, + [CHAIN.CRONOS_ZKEVM]: { + fetch: graphs(endpoints)(CHAIN.CRONOS_ZKEVM), + start: 1723698700, + meta: { + methodology, + }, + }, }, }; diff --git a/helpers/chains.ts b/helpers/chains.ts index 058d0bf155..bbb61fb8f8 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -162,7 +162,8 @@ export enum CHAIN { ZKLINK = "zklink", DEXALOT = "dexalot", IMMUTABLEX = "immutablex", - CHAINFLIP = "chainflip" + CHAINFLIP = "chainflip", + CRONOS_ZKEVM = "cronos_zkevm", } // Don´t use From 7bf1770c0826ea5238d37987ccdf61ec81e96323 Mon Sep 17 00:00:00 2001 From: lil-il <> Date: Wed, 28 Aug 2024 14:35:33 +0300 Subject: [PATCH 1306/1590] added base, blast and opBNB to Vooi volumes --- aggregator-derivatives/vooi/index.ts | 90 ++++++++++++++++++++++------ 1 file changed, 73 insertions(+), 17 deletions(-) diff --git a/aggregator-derivatives/vooi/index.ts b/aggregator-derivatives/vooi/index.ts index ae4a8e5cb6..7027e96672 100644 --- a/aggregator-derivatives/vooi/index.ts +++ b/aggregator-derivatives/vooi/index.ts @@ -1,33 +1,89 @@ import fetchURL from "../../utils/fetchURL"; -import { FetchResult } from "../../adapters/types"; +import { FetchResult, SimpleAdapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const URL = "https://defilama-stats.vooi.workers.dev/"; -const endpoint = ""; -const startTimestamp = 1714608000; // 02.05.2024 +const URL = "https://vooi-rebates.fly.dev/"; +const endpoint = "defillama/volumes"; +const startTimestampArbitrum = 1714608000; // 02.05.2024 +const startTimestampBlast = 1719792000; // 01.07.2024 +const startTimestampOpBNB = 1717200000; // 01.06.2024 +const startTimestampBase = 1722470400; // 01.08.2024 +const fetchArbitrum = async (options: FetchOptions): Promise => { + const timestamp = options.toTimestamp + const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) + const orderlyItem = fetchData.find(((item) => item.protocol == "orderly")) + if (!orderlyItem) return {dailyVolume: 0, totalVolume: 0, timestamp} + const dailyVolume = orderlyItem.dailyVolume + const totalVolume = orderlyItem.totalVolume + return { + dailyVolume, + totalVolume, + timestamp + }; +}; -interface IAPIResponse { - dailyVolume: string; - totalVolume: string; -} -const fetch = async (timestamp: number): Promise => { - const { dailyVolume, totalVolume }: IAPIResponse = ( - (await fetchURL(`${URL}${endpoint}?ts=${timestamp}`)).data - ); +const fetchBlast = async (options: FetchOptions): Promise => { + const timestamp = options.toTimestamp + const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) + const synfuturesItem = fetchData.find(((item) => item.protocol == "synfutures" && item.network == "blast")) + if (!synfuturesItem) return {dailyVolume: 0, totalVolume: 0, timestamp} + const dailyVolume = synfuturesItem.dailyVolume + const totalVolume = synfuturesItem.totalVolume return { - timestamp, dailyVolume, totalVolume, + timestamp }; }; -export default { +const fetchBase = async (options: FetchOptions): Promise => { + const timestamp = options.toTimestamp + const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) + const synfuturesItem = fetchData.find(((item) => item.protocol == "synfutures" && item.network == "base")) + if (!synfuturesItem) return {dailyVolume: 0, totalVolume: 0, timestamp} + const dailyVolume = synfuturesItem.dailyVolume + const totalVolume = synfuturesItem.totalVolume + return { + dailyVolume, + totalVolume, + timestamp + }; +}; + +const fetchOpBNB = async (options: any): Promise => { + const timestamp = options.toTimestamp + const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) + const kiloexItem = fetchData.find(((item) => item.protocol == "kiloex")) + if (!kiloexItem) return {dailyVolume: 0, totalVolume: 0, timestamp} + const dailyVolume = kiloexItem.dailyVolume + const totalVolume = kiloexItem.totalVolume + return { + dailyVolume, + totalVolume, + timestamp + }; +}; + +const adapter: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM]: { - fetch: fetch, - start: startTimestamp + fetch: fetchArbitrum, + start: startTimestampArbitrum + }, + [CHAIN.BLAST]: { + fetch: fetchBlast, + start: startTimestampBlast + }, + [CHAIN.OP_BNB]: { + fetch: fetchOpBNB, + start: startTimestampOpBNB + }, + [CHAIN.BASE]: { + fetch: fetchBase, + start: startTimestampBase }, }, - // version: 2 // data accepts only one input to timestamp + version: 2 } +export default adapter \ No newline at end of file From 2dab35700c6c4a9e0d24fdf46cac97844e43cd44 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 28 Aug 2024 12:57:05 +0000 Subject: [PATCH 1307/1590] fix gmx value --- dexs/gmx-v2/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/gmx-v2/index.ts b/dexs/gmx-v2/index.ts index 976328a834..61935a4ba6 100644 --- a/dexs/gmx-v2/index.ts +++ b/dexs/gmx-v2/index.ts @@ -1,5 +1,5 @@ import request, { gql } from "graphql-request"; -import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, Fetch, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; @@ -31,8 +31,8 @@ interface IGraphResponse { }> } -const getFetch = (query: string)=> (chain: string): Fetch => async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000))) +const getFetch = (query: string)=> (chain: string): Fetch => async (_tt: number, _t: any, options: FetchOptions) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((options.startOfDay * 1000))) const dailyData: IGraphResponse = await request(endpoints[chain], query, { id: '1d:' + String(dayTimestamp), period: '1d', From deb596364797fc2d92ff99cafe6baac544c5644f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 28 Aug 2024 14:03:35 +0000 Subject: [PATCH 1308/1590] fix prevent spike --- dexs/jellyverse/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dexs/jellyverse/index.ts b/dexs/jellyverse/index.ts index 8a46d3c29c..c085e81c88 100644 --- a/dexs/jellyverse/index.ts +++ b/dexs/jellyverse/index.ts @@ -58,6 +58,10 @@ const v2Graphs = (chain: Chain) => { return acc; }, { dailyVolume: 0, dailyFees: 0 }); + if (dailyVolume > 1_000_000_000) { + return {} + } + return { dailyVolume: dailyVolume.toString(), dailyFees: dailyFees.toString(), From 1e7d007151236b2bc01c400b3eb3f07e2c1d06bd Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 28 Aug 2024 15:35:45 +0000 Subject: [PATCH 1309/1590] init magicsea-lb --- dexs/magicsea-lb/index.ts | 61 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 dexs/magicsea-lb/index.ts diff --git a/dexs/magicsea-lb/index.ts b/dexs/magicsea-lb/index.ts new file mode 100644 index 0000000000..1c7170f16b --- /dev/null +++ b/dexs/magicsea-lb/index.ts @@ -0,0 +1,61 @@ +import { ChainBlocks, FetchOptions, IJSON, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { addOneToken } from "../../helpers/prices"; +import { filterPools } from "../../helpers/uniswap"; + +const event_swap = 'event Swap(address indexed sender, address indexed to, uint24 id, bytes32 amountsIn, bytes32 amountsOut, uint24 volatilityAccumulator, bytes32 totalFees, bytes32 protocolFees)'; +const FACTORY_ADDRESS = '0x8Cce20D17aB9C6F60574e678ca96711D907fD08c'; + +type TABI = { + [k: string]: string; +} +const ABIs: TABI = { + "getNumberOfLBPairs": "uint256:getNumberOfLBPairs", + "getLBPairAtIndex": "function getLBPairAtIndex(uint256 index) view returns (address lbPair)" +} + +const fetch: any = async (timestamp: number, _: ChainBlocks, { getLogs, api, createBalances }: FetchOptions) => { + const dailyVolume = createBalances(); + const dailyFees = createBalances(); + const dailyRevenue = createBalances(); + const lpTokens = await api.fetchList({ lengthAbi: ABIs.getNumberOfLBPairs, itemAbi: ABIs.getLBPairAtIndex, target: FACTORY_ADDRESS }) + const [tokens0, tokens1] = await Promise.all(['address:getTokenX', 'address:getTokenY'].map((abi: string) => api.multiCall({ abi, calls: lpTokens }))); + + + const pairObject: IJSON = {} + lpTokens.forEach((pair: string, i: number) => { + pairObject[pair] = [tokens0[i], tokens1[i]] + }) + + // filter out the pairs with less than 1000 USD pooled value + const filteredPairs = await filterPools({ api: api, pairs: pairObject, createBalances: createBalances }) + await Promise.all(Object.keys(filteredPairs).map(async (pair) => { + const [token0, token1] = pairObject[pair] + const logs = await getLogs({ target: pair, eventAbi: event_swap }) + logs.forEach(log => { + const amountInX = Number('0x' + '0'.repeat(32) + log.amountsOut.replace('0x', '').slice(0, 32)) + const amountInY = Number('0x' + '0'.repeat(32) + log.amountsOut.replace('0x', '').slice(32, 64)) + dailyVolume.add(token1, amountInX); + dailyVolume.add(token0, amountInY); + + const protocolFeesY = Number('0x' + log.protocolFees.replace('0x', '').slice(0, 32)) + const protocolFeesX = Number('0x' + log.protocolFees.replace('0x', '').slice(32, 64)) + const totalFeesY = Number('0x' + log.totalFees.replace('0x', '').slice(0, 32)); + const totalFeesX = Number('0x' + log.totalFees.replace('0x', '').slice(32, 64)); + dailyFees.add(token0, totalFeesX ) + dailyFees.add(token1, totalFeesY ) + dailyRevenue.add(token0, protocolFeesX) + dailyRevenue.add(token1, protocolFeesY) + }) + })) + + return { dailyVolume, dailyFees, dailyRevenue, timestamp }; +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.IOTAEVM]: { fetch, start: 1681130543, }, + } +}; + +export default adapter; From b1f7c44cae1ea6beccfad9f0053d54df04c6993a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 28 Aug 2024 15:39:23 +0000 Subject: [PATCH 1310/1590] remove file --- {dexs => protocols}/magicsea-lb/index.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {dexs => protocols}/magicsea-lb/index.ts (100%) diff --git a/dexs/magicsea-lb/index.ts b/protocols/magicsea-lb/index.ts similarity index 100% rename from dexs/magicsea-lb/index.ts rename to protocols/magicsea-lb/index.ts From 6fae556231180624d3a46fc6fe770ab635d31b9a Mon Sep 17 00:00:00 2001 From: Trevor Collins <25141495+DJHellscream@users.noreply.github.com> Date: Wed, 28 Aug 2024 14:52:57 -0400 Subject: [PATCH 1311/1590] feat: Add support for fetching fees, revenue and volume for Apex DeFi --- fees/apexdefi/index.ts | 104 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 fees/apexdefi/index.ts diff --git a/fees/apexdefi/index.ts b/fees/apexdefi/index.ts new file mode 100644 index 0000000000..f349893672 --- /dev/null +++ b/fees/apexdefi/index.ts @@ -0,0 +1,104 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { Adapter, FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const abis = { + allTokens: "address[]:getAllTokens", +}; + +type TAddress = { + [s: string | Chain]: string; +}; + +type Swap = { + sender: string; + amountTokenIn: string; + amountNativeIn: string; + amountTokenOut: string; + amountNativeOut: string; + flashSwap: boolean; +}; + +const methodology = { + Fees: "Swap fees paid by users of 0.03%", + UserFees: "Swap fees paid by users of 0.03%", + Revenue: "30% of collected swap fees", + ProtocolRevenue: "30% of collected swap fees", + SupplySideRevenue: + "70% of collected swap fees are distributed to liquidity providers", +}; + +const FACTORIES: TAddress = { + [CHAIN.AVAX]: "0x3D193de151F8e4e3cE1C4CB2977F806663106A87", + [CHAIN.BASE]: "0x4ccf7aa5736c5e8b6da5234d1014b5019f50cb56", + [CHAIN.ETHEREUM]: "0x820c889D5749847217599B43ab86FcC91781019f", +}; + +const scaleFactor = BigInt(10000); +const factoryFee = BigInt(10); // 0.1% +const lpFee = BigInt(20); // 0.2% + +const fetch = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const dailySupplySideRevenue = options.createBalances(); + const dailyProtocolRevenue = options.createBalances(); + const dailyVolume = options.createBalances(); + const totalVolume = options.createBalances(); + + const allTokens = await options.api.call({ + target: FACTORIES[options.chain], + abi: abis.allTokens, + }); + + const logs = await options.getLogs({ + targets: allTokens, + eventAbi: + "event Swap(address indexed sender, uint256 amountTokenIn, uint256 amountNativeIn, uint256 amountTokenOut, uint256 amountNativeOut, bool flashSwap)", + }); + + logs.map((tx: Swap) => { + const nativeAmount = BigInt(tx.amountNativeIn) + BigInt(tx.amountNativeOut); + const fee = (nativeAmount * lpFee) / scaleFactor; + const protocolRevenue = (nativeAmount * factoryFee) / scaleFactor; + dailyFees.addGasToken(fee + protocolRevenue); + dailyProtocolRevenue.addGasToken(protocolRevenue); + dailySupplySideRevenue.addGasToken(fee); + dailyVolume.addGasToken(nativeAmount); + }); + + return { + dailyFees, + dailyVolume, + dailyProtocolRevenue, + dailySupplySideRevenue, + }; +}; + +const adapters: Adapter = { + version: 2, + adapter: { + [CHAIN.AVAX]: { + fetch: fetch, + start: 1716868800, + meta: { + methodology, + }, + }, + [CHAIN.BASE]: { + fetch: fetch, + start: 1716868800, + meta: { + methodology, + }, + }, + [CHAIN.ETHEREUM]: { + fetch: fetch, + start: 1716868800, + meta: { + methodology, + }, + }, + }, +}; + +export default adapters; From 7c0caa79c84858d768235381fd15aa165f3b07b3 Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Thu, 29 Aug 2024 09:52:06 +0400 Subject: [PATCH 1312/1590] Switch StormTrade volume adapter to the project API endpoint --- dexs/stormtrade/index.ts | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/dexs/stormtrade/index.ts b/dexs/stormtrade/index.ts index e728aba5d8..93a252865d 100644 --- a/dexs/stormtrade/index.ts +++ b/dexs/stormtrade/index.ts @@ -1,6 +1,8 @@ +import { time } from 'console'; import { CHAIN } from '../../helpers/chains' -import fetchURL from '../../utils/fetchURL' +import { postURL } from '../../utils/fetchURL' +const GRAPHQL_ENDPOINT = 'https://api5.storm.tg/graphql'; export default { adapter: { @@ -10,15 +12,23 @@ export default { meta: { methodology: { DailyVolume: 'Leverage trading volume', - DataSource: 'Data collected by the re:doubt team, available at https://beta.redoubt.online/tracker' + DataSource: 'Data prepared by the project team by indexing blockchain data' }, }, - fetch: async () => { - const response = await fetchURL('https://api.redoubt.online/dapps/v1/export/defi/storm') + fetch: async (timestamp: number) => { + const response = (await postURL(GRAPHQL_ENDPOINT, { + query: ` + query VolumeDaily { + marketInfo { + exchangedTradeVolume + } + } + ` + })); return { - dailyVolume: response.volume.toString(), - timestamp: response.timestamp + dailyVolume: response.data.marketInfo.exchangedTradeVolume / 1e9, + timestamp: new Date().getTime() / 1000 } }, }, From d8b242d37701eeb7b09574197b23ae2761db4722 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 29 Aug 2024 09:41:35 +0100 Subject: [PATCH 1313/1590] agni --- dexs/agni-fi/index.ts | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/dexs/agni-fi/index.ts b/dexs/agni-fi/index.ts index 9262673b16..32a7d1da22 100644 --- a/dexs/agni-fi/index.ts +++ b/dexs/agni-fi/index.ts @@ -1,6 +1,6 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const v3Endpoints = { [CHAIN.MANTLE]: "https://agni.finance/graph/subgraphs/name/agni/exchange-v3" @@ -8,20 +8,12 @@ const v3Endpoints = { const VOLUME_USD = "volumeUSD"; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "pancakeDayData", - field: VOLUME_USD, - }, - dailyFees: { - factory: "pancakeDayData", - field: "feesUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 0, From f0ab6e9c786b2cf116ac9f7438f145d9a2f1ed2d Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 29 Aug 2024 09:42:25 +0100 Subject: [PATCH 1314/1590] archly --- dexs/agni-fi/index.ts | 2 -- dexs/archly-finance/index.ts | 7 ++----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/dexs/agni-fi/index.ts b/dexs/agni-fi/index.ts index 32a7d1da22..66e31d4ad3 100644 --- a/dexs/agni-fi/index.ts +++ b/dexs/agni-fi/index.ts @@ -6,8 +6,6 @@ const v3Endpoints = { [CHAIN.MANTLE]: "https://agni.finance/graph/subgraphs/name/agni/exchange-v3" } -const VOLUME_USD = "volumeUSD"; - const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { diff --git a/dexs/archly-finance/index.ts b/dexs/archly-finance/index.ts index e8b48b3d57..757b051d39 100644 --- a/dexs/archly-finance/index.ts +++ b/dexs/archly-finance/index.ts @@ -1,17 +1,14 @@ import { Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpoints = { [CHAIN.TELOS]: "https://api.archly.fi/subgraphs/name/archly/amm", }; -const graphFetch = getGraphDimensions({ +const graphFetch = getGraphDimensions2({ graphUrls: endpoints, - totalVolume: { - factory: "factories" - }, dailyVolume: { factory: "dayData" }, From 2bd9357c6a98ccac6baf417b4327b3862ea6dd6e Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 29 Aug 2024 09:47:07 +0100 Subject: [PATCH 1315/1590] baseswap --- dexs/ascent/index.ts | 19 +++---------------- dexs/auragi/index.ts | 8 ++------ dexs/balancer/index.ts | 13 ++++--------- dexs/baseswap/index.ts | 16 +++------------- 4 files changed, 12 insertions(+), 44 deletions(-) diff --git a/dexs/ascent/index.ts b/dexs/ascent/index.ts index 7eef0dc886..522f650d54 100644 --- a/dexs/ascent/index.ts +++ b/dexs/ascent/index.ts @@ -1,42 +1,29 @@ import { BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; - - - +import { DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.EON]: "https://eon-graph.horizenlabs.io/subgraphs/name/Ascent/ascent-subgraph", }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: DEFAULT_TOTAL_VOLUME_FACTORY, field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - dateField: "date" - }, }); const endpointsV3 = { [CHAIN.EON]: "https://eon-graph.horizenlabs.io/subgraphs/name/surfacing8671/v3AscentFull2", }; -const graphsV3 = getChainVolume({ +const graphsV3 = getChainVolume2({ graphUrls: endpointsV3, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "pancakeDayData", - field: "volumeUSD", - dateField: "date" - }, }); diff --git a/dexs/auragi/index.ts b/dexs/auragi/index.ts index 32b9bf2845..3994730b1d 100644 --- a/dexs/auragi/index.ts +++ b/dexs/auragi/index.ts @@ -1,23 +1,19 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('DtNQcRXx82k4azEb5QvUjRbmXSNLTUsUePzPY6PtryEc'), }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "dayData", - field: DEFAULT_DAILY_VOLUME_FIELD, - }, }); const adapter: SimpleAdapter = { diff --git a/dexs/balancer/index.ts b/dexs/balancer/index.ts index b798f41412..9a6138d775 100644 --- a/dexs/balancer/index.ts +++ b/dexs/balancer/index.ts @@ -1,12 +1,10 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; -import { BaseAdapter, BreakdownAdapter, ChainEndpoints, FetchResultV2, FetchResultVolume, FetchV2 } from "../../adapters/types"; +import { BaseAdapter, BreakdownAdapter, ChainEndpoints, FetchOptions, FetchResultV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import customBackfill from "../../helpers/customBackfill"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints: ChainEndpoints = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('C4ayEZP2yTXRAB8vSaTrgN4m9anTe9Mdm2ViyiAuV9TV'), @@ -40,10 +38,7 @@ interface IPoolSnapshot { const v2Graphs = (chain: Chain) => { - return async ({ endTimestamp }): Promise => { - const startTimestamp = getTimestampAtStartOfDayUTC(endTimestamp) - const fromTimestamp = startTimestamp - 60 * 60 * 24 - const toTimestamp = startTimestamp + return async ({ toTimestamp, fromTimestamp }: FetchOptions): Promise => { const graphQuery = gql `query fees { today:poolSnapshots(where: {timestamp:${toTimestamp}, protocolFee_gt:0}, orderBy:swapFees, orderDirection: desc) { @@ -70,7 +65,7 @@ const v2Graphs = (chain: Chain) => { }; -const v1graphs = getChainVolume({ +const v1graphs = getChainVolume2({ graphUrls: { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB') }, diff --git a/dexs/baseswap/index.ts b/dexs/baseswap/index.ts index e4b014d39c..d1b1f31076 100644 --- a/dexs/baseswap/index.ts +++ b/dexs/baseswap/index.ts @@ -3,13 +3,11 @@ import customBackfill from "../../helpers/customBackfill"; import { DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, - DEFAULT_DAILY_VOLUME_FACTORY, - DEFAULT_DAILY_VOLUME_FIELD, } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import type { BaseAdapter, BreakdownAdapter, ChainEndpoints } from "../../adapters/types"; import type { Chain } from "@defillama/sdk/build/general"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const v2Endpoints: ChainEndpoints = { [CHAIN.BASE]: sdk.graph.modifyEndpoint('BWHCfpXMHFDx3u4E14hEwv4ST7SUyN89FKJ2RjzWKgA9'), @@ -19,16 +17,12 @@ const v3Endpoints = { }; // Fetch function to query the subgraphs -const v2Graph = getGraphDimensions({ +const v2Graph = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: DEFAULT_TOTAL_VOLUME_FACTORY, field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - }, feesPercent: { type: "volume", UserFees: 0.25, @@ -39,16 +33,12 @@ const v2Graph = getGraphDimensions({ }, }); -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: "volumeUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 64, From 2c6af4d8a876b2dd09306951c20949781e1e9a31 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 29 Aug 2024 10:15:20 +0100 Subject: [PATCH 1316/1590] bladeswap check --- dexs/beamswap-v3/index.ts | 13 ++---- dexs/beamswap/index.ts | 22 +++------- dexs/bladeswap/index.ts | 6 +-- helpers/getUniSubgraphVolume.ts | 77 ++++++++++++++++++++++++++++++++- 4 files changed, 88 insertions(+), 30 deletions(-) diff --git a/dexs/beamswap-v3/index.ts b/dexs/beamswap-v3/index.ts index 531c4f6ed6..3fed8eabde 100644 --- a/dexs/beamswap-v3/index.ts +++ b/dexs/beamswap-v3/index.ts @@ -2,26 +2,21 @@ import { BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; import { - DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, - getGraphDimensions, + getGraphDimensions2, } from "../../helpers/getUniSubgraph"; const endpointV3 = { [CHAIN.MOONBEAM]: - 'https://graph.beamswap.io/subgraphs/name/beamswap/beamswap-amm-v3', + "https://graph.beamswap.io/subgraphs/name/beamswap/beamswap-amm-v3", }; -const VOLUME_USD = "volumeUSD"; -const v3Graphs = getGraphDimensions({ + +const v3Graphs = getGraphDimensions2({ graphUrls: endpointV3, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", ProtocolRevenue: 16, diff --git a/dexs/beamswap/index.ts b/dexs/beamswap/index.ts index 79edc89899..d0319e6877 100644 --- a/dexs/beamswap/index.ts +++ b/dexs/beamswap/index.ts @@ -2,25 +2,19 @@ import { BreakdownAdapter, ChainEndpoints } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpoints: ChainEndpoints = { [CHAIN.MOONBEAN]: - 'https://graph.beamswap.io/subgraphs/name/beamswap/beamswap-amm-v2', + "https://graph.beamswap.io/subgraphs/name/beamswap/beamswap-amm-v2", }; - - -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "uniswapFactories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "dailyVolumeUSD", - }, feesPercent: { type: "volume", UserFees: 0.3, @@ -32,20 +26,15 @@ const graphs = getGraphDimensions({ }, }); -const v1graphs = getGraphDimensions({ +const v1graphs = getGraphDimensions2({ graphUrls: { [CHAIN.MOONBEAN]: - 'https://graph.beamswap.io/subgraphs/name/beamswap/beamswap-stableamm', + "https://graph.beamswap.io/subgraphs/name/beamswap/beamswap-stableamm", }, totalVolume: { factory: "tradeVolumes", field: "volume", }, - dailyVolume: { - factory: "dailyVolume", - field: "volume", - dateField: "timestamp", - }, feesPercent: { type: "volume", UserFees: 0.04, @@ -57,7 +46,6 @@ const v1graphs = getGraphDimensions({ }, }); - const methodology = { UserFees: "User pays 0.30% fees on each swap.", Fees: "A 0.30% of each swap is collected as trading fees", diff --git a/dexs/bladeswap/index.ts b/dexs/bladeswap/index.ts index f3d0f54b38..c43e221122 100644 --- a/dexs/bladeswap/index.ts +++ b/dexs/bladeswap/index.ts @@ -1,7 +1,7 @@ import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; import { FetchOptions, BreakdownAdapter } from "../../adapters/types"; -const adapters = univ2Adapter( +const adapters = univ2Adapter2( { [CHAIN.BLAST]: "https://api.studio.thegraph.com/query/75205/blade-algebra/mainnet-info-1.0.3", @@ -34,7 +34,7 @@ const fetch: any = async ({ getLogs, createBalances, }: FetchOptions) => { } adapters.adapter.blast.start = 1717740000; - +// ts-node --transpile-only cli/testAdapter.ts dexs bladeswap const adapter: BreakdownAdapter = { breakdown: { v2: { diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index f3a10737f6..ddc34349d3 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -1,7 +1,7 @@ import { Chain } from "@defillama/sdk/build/general"; import { request, gql } from "graphql-request"; import { getBlock } from "./getBlock"; -import { BaseAdapter, ChainBlocks, FetchOptions } from "../adapters/types"; +import { BaseAdapter, ChainBlocks, FetchOptions, FetchResultV2 } from "../adapters/types"; import { SimpleAdapter } from "../adapters/types"; import { DEFAULT_DATE_FIELD, getStartTimestamp } from "./getStartTimestamp"; import { Balances } from "@defillama/sdk"; @@ -246,6 +246,37 @@ function getChainVolumeWithGasToken({ }; } +function getChainVolumeWithGasToken2({ + graphUrls, + totalVolume = { + factory: DEFAULT_TOTAL_VOLUME_FACTORY, + field: 'totalVolumeETH', + }, + getCustomBlock = undefined, + priceToken, +}: IGetChainVolumeParams & {priceToken:string}) { + const basic = getChainVolume2({graphUrls, totalVolume, getCustomBlock}) + return (chain: Chain) => { + return async (options: FetchOptions): Promise => { + const { + block, + dailyVolume, + totalVolume + } = await basic(chain)(options); + + const timestamp = options.endTimestamp + const balances = new Balances({ chain, timestamp }) + balances.add(priceToken, Number(dailyVolume).toFixed(0), { skipChain: true }) + + return { + block, + dailyVolume: await balances.getUSDString(), + totalVolume + } + }; + }; +} + function univ2Adapter(endpoints: { [chain: string]: string }, { @@ -272,6 +303,48 @@ function univ2Adapter(endpoints: { priceToken: gasToken } as any); + const adapter: SimpleAdapter = { + adapter: Object.keys(endpoints).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: graphs(chain as Chain), + start: getStartTimestamp({ + endpoints: endpoints, + chain, + volumeField: dailyVolume, + dailyDataField: dayData + "s", + dateField: dailyVolumeTimestampField + }), + } + } + }, {} as BaseAdapter), + version: 1 + }; + + return adapter; +} + + +function univ2Adapter2(endpoints: { + [chain: string]: string +}, { + factoriesName = DEFAULT_TOTAL_VOLUME_FACTORY, + dayData = DEFAULT_DAILY_VOLUME_FACTORY, + totalVolume = DEFAULT_TOTAL_VOLUME_FIELD, + dailyVolume = DEFAULT_DAILY_VOLUME_FIELD, + dailyVolumeTimestampField = DEFAULT_DATE_FIELD, + gasToken = null as string|null +}) { + const graphs = (gasToken === null ? getChainVolume2 : getChainVolumeWithGasToken2 as typeof getChainVolume)({ + graphUrls: endpoints, + totalVolume: { + factory: factoriesName, + field: totalVolume + }, + priceToken: gasToken + } as any); + const adapter: SimpleAdapter = { adapter: Object.keys(endpoints).reduce((acc, chain) => { return { @@ -299,7 +372,9 @@ export { getChainVolume, getChainVolume2, getChainVolumeWithGasToken, + getChainVolumeWithGasToken2, univ2Adapter, + univ2Adapter2, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, DEFAULT_DAILY_VOLUME_FACTORY, From d14d8e32958231fefad92584359dfc7d39002106 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 29 Aug 2024 10:16:33 +0100 Subject: [PATCH 1317/1590] remove debug --- 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 c43e221122..c7af6a01ad 100644 --- a/dexs/bladeswap/index.ts +++ b/dexs/bladeswap/index.ts @@ -34,7 +34,7 @@ const fetch: any = async ({ getLogs, createBalances, }: FetchOptions) => { } adapters.adapter.blast.start = 1717740000; -// ts-node --transpile-only cli/testAdapter.ts dexs bladeswap + const adapter: BreakdownAdapter = { breakdown: { v2: { From fa2434218fdc1a61b0d6aea5a1396ad3d2a3677f Mon Sep 17 00:00:00 2001 From: lil-il <> Date: Thu, 29 Aug 2024 14:46:18 +0300 Subject: [PATCH 1318/1590] added all protocols to arbitrum --- aggregator-derivatives/vooi/index.ts | 64 ++++++++++++++-------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/aggregator-derivatives/vooi/index.ts b/aggregator-derivatives/vooi/index.ts index 7027e96672..1e93de568f 100644 --- a/aggregator-derivatives/vooi/index.ts +++ b/aggregator-derivatives/vooi/index.ts @@ -12,10 +12,24 @@ const startTimestampBase = 1722470400; // 01.08.2024 const fetchArbitrum = async (options: FetchOptions): Promise => { const timestamp = options.toTimestamp const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) - const orderlyItem = fetchData.find(((item) => item.protocol == "orderly")) - if (!orderlyItem) return {dailyVolume: 0, totalVolume: 0, timestamp} - const dailyVolume = orderlyItem.dailyVolume - const totalVolume = orderlyItem.totalVolume + let orderlyItem = fetchData.find(((item) => item.protocol == "orderly")) + if (!orderlyItem) { + orderlyItem = {dailyVolume: 0, totalVolume: 0} + } + let synfuturesItem = fetchData.filter(((item) => item.protocol == "synfutures")) + if (!synfuturesItem) { + synfuturesItem = {dailyVolume: 0, totalVolume: 0} + } + let kiloexItem = fetchData.find(((item) => item.protocol == "kiloex")) + if (!kiloexItem) { + kiloexItem = {dailyVolume: 0, totalVolume: 0} + } + let dailyVolume = Number(orderlyItem.dailyVolume) + Number(kiloexItem.dailyVolume) + let totalVolume = Number(orderlyItem.totalVolume) + Number(kiloexItem.totalVolume) + for (let i in synfuturesItem){ + dailyVolume = Number(dailyVolume) + Number(synfuturesItem[i].dailyVolume) + totalVolume = Number(totalVolume) + Number(synfuturesItem[i].totalVolume) + } return { dailyVolume, totalVolume, @@ -23,44 +37,30 @@ const fetchArbitrum = async (options: FetchOptions): Promise => { }; }; -const fetchBlast = async (options: FetchOptions): Promise => { + +const fetchOpBNB = async (options: any): Promise => { const timestamp = options.toTimestamp - const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) - const synfuturesItem = fetchData.find(((item) => item.protocol == "synfutures" && item.network == "blast")) - if (!synfuturesItem) return {dailyVolume: 0, totalVolume: 0, timestamp} - const dailyVolume = synfuturesItem.dailyVolume - const totalVolume = synfuturesItem.totalVolume return { - dailyVolume, - totalVolume, + dailyVolume: 0, + totalVolume: 0, timestamp }; }; -const fetchBase = async (options: FetchOptions): Promise => { +const fetchBlast = async (options: any): Promise => { const timestamp = options.toTimestamp - const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) - const synfuturesItem = fetchData.find(((item) => item.protocol == "synfutures" && item.network == "base")) - if (!synfuturesItem) return {dailyVolume: 0, totalVolume: 0, timestamp} - const dailyVolume = synfuturesItem.dailyVolume - const totalVolume = synfuturesItem.totalVolume return { - dailyVolume, - totalVolume, + dailyVolume: 0, + totalVolume: 0, timestamp }; }; -const fetchOpBNB = async (options: any): Promise => { +const fetchBase = async (options: any): Promise => { const timestamp = options.toTimestamp - const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) - const kiloexItem = fetchData.find(((item) => item.protocol == "kiloex")) - if (!kiloexItem) return {dailyVolume: 0, totalVolume: 0, timestamp} - const dailyVolume = kiloexItem.dailyVolume - const totalVolume = kiloexItem.totalVolume return { - dailyVolume, - totalVolume, + dailyVolume: 0, + totalVolume: 0, timestamp }; }; @@ -71,14 +71,14 @@ const adapter: SimpleAdapter = { fetch: fetchArbitrum, start: startTimestampArbitrum }, - [CHAIN.BLAST]: { - fetch: fetchBlast, - start: startTimestampBlast - }, [CHAIN.OP_BNB]: { fetch: fetchOpBNB, start: startTimestampOpBNB }, + [CHAIN.BLAST]: { + fetch: fetchBlast, + start: startTimestampBlast + }, [CHAIN.BASE]: { fetch: fetchBase, start: startTimestampBase From 1af37b57286200b417ebad342239698399e98078 Mon Sep 17 00:00:00 2001 From: Define101 Date: Thu, 29 Aug 2024 13:00:53 +0100 Subject: [PATCH 1319/1590] add mode to iziswap --- dexs/iziswap/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/iziswap/index.ts b/dexs/iziswap/index.ts index 02b4acf279..4031dbd121 100644 --- a/dexs/iziswap/index.ts +++ b/dexs/iziswap/index.ts @@ -34,7 +34,8 @@ const chains: TChains = { [CHAIN.SCROLL]: 534352, [CHAIN.BASE]: 8453, [CHAIN.MANTA]: 169, - [CHAIN.ZETA]: 7000 + [CHAIN.ZETA]: 7000, + [CHAIN.MODE]: 34443 }; const fetch = (chain: Chain) => { From dbb01de1b4d60e053b4e1c336abbfc47c4ccac65 Mon Sep 17 00:00:00 2001 From: nicetomeetyou1 Date: Thu, 29 Aug 2024 22:30:20 +0700 Subject: [PATCH 1320/1590] feat: add scallop adapter --- aggregators/scallop/index.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 aggregators/scallop/index.ts diff --git a/aggregators/scallop/index.ts b/aggregators/scallop/index.ts new file mode 100644 index 0000000000..c53c0e88f4 --- /dev/null +++ b/aggregators/scallop/index.ts @@ -0,0 +1,22 @@ +import fetchURL from '../../utils/fetchURL'; +import { FetchV2, SimpleAdapter } from '../../adapters/types'; +import { CHAIN } from '../../helpers/chains'; + +const fetch: FetchV2 = async ({ startTimestamp, endTimestamp }) => { + const dailyVolume = await fetchURL( + `https://sui.apis.scallop.io/statistic/swap/daily-volume?fromTimestamp=${startTimestamp}&toTimestamp=${endTimestamp}`, + ); + return { dailyVolume: dailyVolume.swapVolume }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.SUI]: { + fetch, + start: 1722877683, + }, + }, +}; + +export default adapter; From 19059c4e6b405c396da1e56caf60bd79549a8952 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 29 Aug 2024 16:42:25 +0000 Subject: [PATCH 1321/1590] fix rev --- fees/dydx-v4/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fees/dydx-v4/index.ts b/fees/dydx-v4/index.ts index 9034580dcd..5d45c53286 100644 --- a/fees/dydx-v4/index.ts +++ b/fees/dydx-v4/index.ts @@ -12,8 +12,11 @@ const fetchFees = async (timestamp: number, _t: ChainBlocks ,options: FetchOpti delete res['latestTen'] const item: IFees[] = Object.values(res) const dailyFees = item.find((i) => i.day.split('T')[0] === dateStr)?.sum_tradingfeecollection + const dailyFeesNum = dailyFees ? parseFloat(dailyFees) : undefined return { - dailyFees: dailyFees ? dailyFees : undefined, + dailyFees: dailyFeesNum, + dailyRevenue: dailyFeesNum, + dailyHoldersRevenue: dailyFeesNum, timestamp: timestamp, } } From de9814f17c3b741da965bf7b149fedd4c282e9e8 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 29 Aug 2024 21:47:17 +0100 Subject: [PATCH 1322/1590] update paraswap for v5+v6 --- aggregators/paraswap/index.ts | 39 +------------ aggregators/paraswap/paraswapApi.ts | 77 +++++++++++++++++++++++++ fees/paraswap.ts | 89 +---------------------------- 3 files changed, 81 insertions(+), 124 deletions(-) create mode 100644 aggregators/paraswap/paraswapApi.ts diff --git a/aggregators/paraswap/index.ts b/aggregators/paraswap/index.ts index ba2a4f9f3c..0e0a3a2fab 100644 --- a/aggregators/paraswap/index.ts +++ b/aggregators/paraswap/index.ts @@ -1,38 +1,3 @@ -// https://developers.paraswap.network/smart-contracts -const chains = [ - "ethereum", - "arbitrum", - "avax", - "bsc", - "fantom", - "optimism", - "polygon", - "base", - "polygon_zkevm", -]; +import { getParaswapAdapter } from "./paraswapApi"; -import { ChainBlocks, FetchOptions } from "../../adapters/types"; - -const abis = { - "SwappedDirect": "event SwappedDirect(bytes16 uuid, address partner, uint256 feePercent, address initiator, uint8 kind, address indexed beneficiary, address indexed srcToken, address indexed destToken, uint256 srcAmount, uint256 receivedAmount, uint256 expectedAmount)", - "SwappedV3": "event SwappedV3(bytes16 uuid, address partner, uint256 feePercent, address initiator, address indexed beneficiary, address indexed srcToken, address indexed destToken, uint256 srcAmount, uint256 receivedAmount, uint256 expectedAmount)", -} - -const defaultSwapper = '0xDEF171Fe48CF0115B1d80b88dc8eAB59176FEe57' -const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, }: FetchOptions) => { - const dailyVolume = createBalances() - let target = defaultSwapper - if (chain === "polygon_zkevm") target = '0xb83b554730d29ce4cb55bb42206c3e2c03e4a40a' - const swappedDirectLogs = await getLogs({ target, eventAbi: abis.SwappedDirect, }) - const swappedV3Logs = await getLogs({ target, eventAbi: abis.SwappedV3, }); - [swappedDirectLogs, swappedV3Logs].flat().forEach((log: any) => { - dailyVolume.add(log.destToken, log.receivedAmount) - }) - return { timestamp, dailyVolume } -}; - -const adapter: any = { adapter: {}, }; - -chains.forEach((chain) => adapter.adapter[chain] = { fetch, start: 1676592000, }); - -export default adapter; +export default getParaswapAdapter("volume"); diff --git a/aggregators/paraswap/paraswapApi.ts b/aggregators/paraswap/paraswapApi.ts new file mode 100644 index 0000000000..ebc5b52535 --- /dev/null +++ b/aggregators/paraswap/paraswapApi.ts @@ -0,0 +1,77 @@ +import { Adapter, FetchResultFees, FetchResultVolume } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; +import { Chain } from "@defillama/sdk/build/general"; +import fetchURL from "../../utils/fetchURL"; + + +const feesMMURL = "https://api.paraswap.io/stk/volume-stats/breakdown-by-chain"; +type TChainId = { + [l: string | Chain]: string; +} +const mapChainId: TChainId = { + [CHAIN.ETHEREUM]: '1', + [CHAIN.POLYGON]: '137', + [CHAIN.BSC]: '56', + [CHAIN.AVAX]: '43114', + [CHAIN.FANTOM]: '250', + [CHAIN.ARBITRUM]: '42161', + [CHAIN.OPTIMISM]: '10', + [CHAIN.BASE]: '8453', + [CHAIN.POLYGON_ZKEVM]: '1101' +} + +interface IResponse { + daily: any[]; + allTime: any; +} + +export function getParaswapAdapter(type:"fees"|"volume"){ +const fetch = (chain: Chain) => { + return async (timestamp: number): Promise => { + const timestampToday = getTimestampAtStartOfDayUTC(timestamp) + const response: IResponse = (await fetchURL(feesMMURL)); + const dailyResultFees: any[] = response.daily; + const [totalVolume,totalPartnerRevenue, totalProtocolRevenue]: number[] = response.allTime[mapChainId[chain]]; + const [dailyVolume, partnerRevenue, protocolRevenue]: number[] = dailyResultFees.filter(([time]: any) => time === timestampToday) + .map(([_, data]: any) => data[mapChainId[chain]]).flat() + const otherFees = partnerRevenue + protocolRevenue; + const otherProtocolReveune = protocolRevenue; + + const dailyFees = otherFees; + if (dailyFees > 1_000_000) { + return {} as FetchResultFees; + } + const dailyRevenue = otherProtocolReveune; + const totalFees = totalPartnerRevenue + totalProtocolRevenue; + const totalRevenue = totalProtocolRevenue; + if(type === "fees"){ + return { + dailyFees: dailyFees ? dailyFees.toString() : undefined, + dailyRevenue: dailyRevenue ? dailyRevenue.toString() : undefined, + totalRevenue: totalRevenue ? totalRevenue.toString() : undefined, + totalFees: totalFees ? totalFees.toString(): undefined, + timestamp + } + } else { + return { + dailyVolume: dailyVolume.toString(), + totalVolume: totalVolume.toString(), + timestamp + } + } + } +} + +const adapter: Adapter = { + adapter: Object.keys(mapChainId).reduce((all, chain)=>({ + ...all, + [chain]:{ + fetch: fetch(chain), + start: 1647907200, + } + }), {} as any) +} + +return adapter +} diff --git a/fees/paraswap.ts b/fees/paraswap.ts index 9989ddfef0..63766e3543 100644 --- a/fees/paraswap.ts +++ b/fees/paraswap.ts @@ -1,88 +1,3 @@ -import { Adapter, FetchResultFees } from "../adapters/types"; -import { CHAIN } from "../helpers/chains"; -import { getTimestampAtStartOfDayUTC } from "../utils/date"; -import { Chain } from "@defillama/sdk/build/general"; -import fetchURL from "../utils/fetchURL"; +import {getParaswapAdapter} from "../aggregators/paraswap/paraswapApi" - -const feesMMURL = "https://api.paraswap.io/stk/volume-stats/breakdown-by-chain"; -type TChainId = { - [l: string | Chain]: string; -} -const mapChainId: TChainId = { - [CHAIN.ETHEREUM]: '1', - [CHAIN.POLYGON]: '137', - [CHAIN.BSC]: '56', - [CHAIN.AVAX]: '43114', - [CHAIN.FANTOM]: '250', - [CHAIN.ARBITRUM]: '42161', - [CHAIN.OPTIMISM]: '10', -} - -interface IResponse { - daily: any[]; - allTime: any; -} - -const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { - const timestampToday = getTimestampAtStartOfDayUTC(timestamp) - const response: IResponse = (await fetchURL(feesMMURL)); - const dailyResultFees: any[] = response.daily; - const [__,totalPartnerRevenue, totalProtocolRevenue]: number[] = response.allTime[mapChainId[chain]]; - const [_, partnerRevenue, protocolRevenue]: number[] = dailyResultFees.filter(([time]: any) => time === timestampToday) - .map(([_, data]: any) => data[mapChainId[chain]]).flat() - const otherFees = partnerRevenue + protocolRevenue; - const otherProtocolReveune = protocolRevenue; - - const dailyFees = otherFees; - if (dailyFees > 1_000_000) { - return {} as FetchResultFees; - } - const dailyRevenue = otherProtocolReveune; - const totalFees = totalPartnerRevenue + totalProtocolRevenue; - const totalRevenue = totalProtocolRevenue; - return { - dailyFees: dailyFees ? dailyFees.toString() : undefined, - dailyRevenue: dailyRevenue ? dailyRevenue.toString() : undefined, - totalRevenue: totalRevenue ? totalRevenue.toString() : undefined, - totalFees: totalFees ? totalFees.toString(): undefined, - timestamp - } - } -} - -const adapter: Adapter = { - adapter: { - [CHAIN.ETHEREUM]: { - fetch: fetch(CHAIN.ETHEREUM), - start: 1647907200, - }, - [CHAIN.POLYGON]: { - fetch: fetch(CHAIN.POLYGON), - start: 1647907200, - }, - [CHAIN.BSC]: { - fetch: fetch(CHAIN.BSC), - start: 1647907200, - }, - [CHAIN.AVAX]: { - fetch: fetch(CHAIN.AVAX), - start: 1647907200, - }, - [CHAIN.FANTOM]: { - fetch: fetch(CHAIN.FANTOM), - start: 1647907200, - }, - [CHAIN.ARBITRUM]: { - fetch: fetch(CHAIN.ARBITRUM), - start: 1647907200, - }, - [CHAIN.OPTIMISM]: { - fetch: fetch(CHAIN.OPTIMISM), - start: 1647907200, - } - } -} - -export default adapter; +export default getParaswapAdapter("fees"); \ No newline at end of file From 6673e8d39953e1fba68308c6e2744940e353e607 Mon Sep 17 00:00:00 2001 From: 0xmer1in <39942523+0xmer1in@users.noreply.github.com> Date: Fri, 30 Aug 2024 11:17:11 +0800 Subject: [PATCH 1323/1590] chore: update Mantle subgraph url --- dexs/woofi/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/woofi/index.ts b/dexs/woofi/index.ts index fe5ba6784c..120f568159 100644 --- a/dexs/woofi/index.ts +++ b/dexs/woofi/index.ts @@ -17,7 +17,7 @@ const endpoints = { [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/71937/woofi-polygon-zkevm/version/latest", [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/71937/woofi-linea/version/latest", [CHAIN.BASE]: "https://api.studio.thegraph.com/query/71937/woofi-base/version/latest", - [CHAIN.MANTLE]: "https://woofi-subgraph.mer1in.com/subgraphs/name/woonetwork/woofi-mantle", + [CHAIN.MANTLE]: "https://subgraph-api.mantle.xyz/api/public/9e9d6e8a-be9d-42d1-9747-3a8f001214c5/subgraphs/woonetwork/woofi-mantle/v0.0.1/gn", }; type TStartTime = { From ec8f7d15ad49e3f5290011a81b0be044ee79fb83 Mon Sep 17 00:00:00 2001 From: Tyler Tsai Date: Fri, 30 Aug 2024 13:18:36 +0800 Subject: [PATCH 1324/1590] feat: add lista-dao fees --- fees/lista-dao/index.ts | 114 ++++++++++++++++++++++++++++++++++++++++ fees/slisbnb/index.ts | 102 ----------------------------------- 2 files changed, 114 insertions(+), 102 deletions(-) create mode 100644 fees/lista-dao/index.ts delete mode 100644 fees/slisbnb/index.ts diff --git a/fees/lista-dao/index.ts b/fees/lista-dao/index.ts new file mode 100644 index 0000000000..b03965d126 --- /dev/null +++ b/fees/lista-dao/index.ts @@ -0,0 +1,114 @@ +import BigNumber from "bignumber.js"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import ADDRESSES from "../../helpers/coreAssets.json"; + +const treasury = "0x8d388136d578dCD791D081c6042284CED6d9B0c6"; + +/** + * Fetches data from Lista DAO + * @doc https://listaorg.notion.site/Profit-cfd754931df449eaa9a207e38d3e0a54 + * @test npx ts-node --transpile-only cli/testAdapter.ts fees lista-dao + */ + +const ListaStakeManagerAddress = "0x1adB950d8bB3dA4bE104211D5AB038628e477fE6"; +const HelioETHProvider = "0x0326c157bfF399e25dd684613aEF26DBb40D3BA4"; +// const MasterVault = "0x986b40C2618fF295a49AC442c5ec40febB26CC54"; +const SnBnbYieldConverterStrategy = + "0x6F28FeC449dbd2056b76ac666350Af8773E03873"; +const CeETHVault = "0xA230805C28121cc97B348f8209c79BEBEa3839C0"; +const HayJoin = "0x4C798F81de7736620Cd8e6510158b1fE758e22F7"; + +// token +const slisBNB = "0xb0b84d294e0c75a6abe60171b70edeb2efd14a1b"; +const eth = "0x2170Ed0880ac9A755fd29B2688956BD959F933F8"; +const bnb = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; +const lisUSD = "0x0782b6d8c4551B9760e74c0545a9bCD90bdc41E5"; + +const fetch = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + + const logs_reward = await options.getLogs({ + target: ListaStakeManagerAddress, + eventAbi: "event RewardsCompounded(uint256 _amount)", + }); + + const logs_claim = await options.getLogs({ + target: HelioETHProvider, + eventAbi: "event Claim(address recipient, uint256 amount)", + entireLog: true, + }); + + // const logs_fees_claim = await options.getLogs({ + // target: MasterVault, + // eventAbi: "event FeeClaimed(address receiver, uint256 amount)", + // }); + + const logs_fees_harvested = await options.getLogs({ + target: SnBnbYieldConverterStrategy, + eventAbi: "event Harvested(address to, uint256 amount)", + }); + + const logs_transfer = await options.getLogs({ + target: eth, + topics: [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000a230805c28121cc97b348f8209c79bebea3839c0", + "0x0000000000000000000000008d388136d578dcd791d081c6042284ced6d9b0c6", + ], + }); + + const logs_exit = await options.getLogs({ + target: HayJoin, + topics: [ + "0x22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b299631", + "0x0000000000000000000000008d388136d578dcd791d081c6042284ced6d9b0c6", + ], + }); + + logs_reward.forEach((log) => { + const amount = log._amount; + dailyFees.add(slisBNB, amount); + }); + + logs_claim.forEach((log) => { + const amount = Number(log.data); + dailyFees.add(eth, amount); + }); + + // logs_fees_claim.forEach((log) => { + // const amount = log.amount; + // dailyFees.add(bnb, amount); + // }); + + logs_fees_harvested.forEach((log) => { + const amount = log.amount; + dailyFees.add(slisBNB, amount); + }); + + logs_transfer.forEach((log) => { + const amount = Number(log.data); + dailyFees.add(eth, amount); + }); + + logs_exit.forEach((log) => { + dailyFees.add(lisUSD, Number(log.data)); + }); + + return { + dailyFees, + dailyRevenue: dailyFees, + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.BSC]: { + fetch, + start: 1693361953, + }, + }, +}; + +export default adapter; diff --git a/fees/slisbnb/index.ts b/fees/slisbnb/index.ts deleted file mode 100644 index dbb8f3cc3a..0000000000 --- a/fees/slisbnb/index.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { FetchOptions, SimpleAdapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; - - -const ListaStakeManagerAddress = "0x1adB950d8bB3dA4bE104211D5AB038628e477fE6"; -const HelioETHProvider = "0x0326c157bfF399e25dd684613aEF26DBb40D3BA4" -const MasterVault = "0x986b40C2618fF295a49AC442c5ec40febB26CC54" -const SnBnbYieldConverterStrategy = "0x6F28FeC449dbd2056b76ac666350Af8773E03873" -const CeETHVault = "0xA230805C28121cc97B348f8209c79BEBEa3839C0" -const HayJoin = "0x4C798F81de7736620Cd8e6510158b1fE758e22F7" - -// token -const slibBNB = "0xb0b84d294e0c75a6abe60171b70edeb2efd14a1b" -const weth = "0x4db5a66e937a9f4473fa95b1caf1d1e1d62e29ea" -const bnb = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" - -const fetch = async (options: FetchOptions) => { - const dailyFees = options.createBalances(); - const logs_reward = await options.getLogs({ - target: ListaStakeManagerAddress, - eventAbi: "event RewardsCompounded(uint256 _amount)" - }); - - const logs_claim = await options.getLogs({ - target: HelioETHProvider, - eventAbi: "event Claim(address recipient, uint256 amount)" - }); - - const logs_fees_claim = await options.getLogs({ - target: MasterVault, - eventAbi: "event FeeClaimed(address receiver, uint256 amount)" - }); - - const logs_fees_harvested = await options.getLogs({ - target: SnBnbYieldConverterStrategy, - eventAbi: "event Harvested(address to, uint256 amount)" - }); - - const logs_transfer = await options.getLogs({ - target: CeETHVault, - topics: [ - '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', - '0x000000000000000000000000a230805c28121cc97b348f8209c79bebea3839c0', - '0x0000000000000000000000008d388136d578dcd791d081c6042284ced6d9b0c6' - ] - }); - - const logs_exit = await options.getLogs({ - target: HayJoin, - topics: [ - '0x22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b299631', - '0x0000000000000000000000008d388136d578dcd791d081c6042284ced6d9b0c6' - ] - }); - - logs_reward.forEach(log => { - const amount = log._amount; - dailyFees.add(slibBNB, amount); - }) - - logs_claim.forEach(log => { - const amount = log.amount; - dailyFees.add(weth, amount); - }) - - logs_fees_claim.forEach(log => { - const amount = log.amount; - dailyFees.add(bnb, amount); - }) - - logs_fees_harvested.forEach(log => { - const amount = log.amount; - dailyFees.add(slibBNB, amount); - }) - - logs_transfer.forEach(log => { - const amount = Number(log.data) - dailyFees.add(weth, amount); - }) - - logs_exit.forEach(log => { - const amount = Number(log.data); - dailyFees.add(weth, amount); - }) - - return { - dailyFees, - dailyRevenue: dailyFees - } -} - -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.BSC]: { - fetch, - start: 0 - } - } -} - -export default adapter; From 76b0b67a6dba7f7f40a503a1f8a2f2f91105e323 Mon Sep 17 00:00:00 2001 From: Krunal Amin Date: Fri, 30 Aug 2024 05:24:58 -0500 Subject: [PATCH 1325/1590] adjustment --- .../unidex-agg-perp/index.ts | 78 +- yarn.lock | 2443 +++++++++++++++++ 2 files changed, 2452 insertions(+), 69 deletions(-) create mode 100644 yarn.lock diff --git a/aggregator-derivatives/unidex-agg-perp/index.ts b/aggregator-derivatives/unidex-agg-perp/index.ts index 3962f11ec1..084344af33 100644 --- a/aggregator-derivatives/unidex-agg-perp/index.ts +++ b/aggregator-derivatives/unidex-agg-perp/index.ts @@ -4,6 +4,7 @@ import { CHAIN } from "../../helpers/chains"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; +import customBackfill from "../../helpers/customBackfill"; interface IReferralRecord { volume: string; // Assuming volume is a string that represents a number @@ -34,86 +35,25 @@ const fetchReferralVolume = async (timestamp: number): Promise => { const referralQuery = gql` { - referrerStats( - where: {referrer: "0x8c128f336b479b142429a5f351af225457a987fa", timestamp_gt: "${todaysTimestamp}"} + affiliateStats( + where: {affiliate: "0x8c128f336b479b142429a5f351af225457a987fa", timestamp_gt: "${todaysTimestamp}"} ) { volume } } `; - const referralEndpoint = sdk.graph.modifyEndpoint('Hww5kAfumpAbMm5iGWqEe83vJJCEE98kccmBBcMRy5fU'); + const referralEndpoint = "https://subgraph.satsuma-prod.com/3b2ced13c8d9/gmx/gmx-arbitrum-referrals/api"; const referralRes = await request(referralEndpoint, referralQuery); - // If there's no volume data, return 0 - if (!referralRes.referrerStats || referralRes.referrerStats.length === 0) { + if (!referralRes.affiliateStats || referralRes.affiliateStats.length === 0) { return 0; } - return Number(referralRes.referrerStats[0].volume) / 10 ** 30; + return Number(referralRes.affiliateStats[0].volume) / 10 ** 30; }; -const fetchMuxReferralVolume = async (chain: Chain, timestamp: number): Promise => { - const startOfDayTimestamp = getTimestampAtStartOfDayUTC(timestamp); - const endOfDayTimestamp = startOfDayTimestamp + 86400; // Add one day's worth of seconds for the end of the day - - const referralQuery = gql` - query MyQuery($timestamp_gte: BigInt = "", $timestamp_lte: BigInt = "") { - referralRecords( - where: { - referralCode: "0x556e694465780000000000000000000000000000000000000000000000000000", - timestamp_gte: $timestamp_gte, - timestamp_lte: $timestamp_lte - } - ) { - volume - timestamp - } - } - `; - - const variables = { - timestamp_gte: startOfDayTimestamp.toString(), - timestamp_lte: endOfDayTimestamp.toString() - }; - - let referralEndpoint = ''; - - switch (chain) { - case CHAIN.ARBITRUM: - referralEndpoint = sdk.graph.modifyEndpoint('GbsdbMy5X2xHoj8qrRKKTs3LhMgma3CzZ8nZCqo9T97v'); - break; - case CHAIN.OPTIMISM: - referralEndpoint = sdk.graph.modifyEndpoint('7CmYmJd9mghA17EP8NXqrLZPqT3vjw4B8PLAbA1K4PdJ'); - break; - case CHAIN.FANTOM: - referralEndpoint = sdk.graph.modifyEndpoint('2KNaZgvAu9zjn1oAomgoMgiafQHNBbsS3Eu4UwucPUC6'); - break; - default: - return 0; // Return 0 for unsupported chains - } - - const referralRes = await request(referralEndpoint, referralQuery, variables); - - // Sum up the volumes - let totalVolume = 0; - - if (referralRes.referralRecords && Array.isArray(referralRes.referralRecords)) { - referralRes.referralRecords.forEach((record: IReferralRecord) => { - const volume = parseFloat(record.volume); - if (!isNaN(volume)) { - totalVolume += volume / 10 ** 18; // Adjust the unit conversion as needed - } - }); - } - - return totalVolume; -}; - - - - const fetch = (chain: Chain) => { return async (timestamp: number): Promise => { const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp); @@ -145,10 +85,9 @@ const fetch = (chain: Chain) => { const chainID = chainIDs[chain]; let dailyVolumeUSD = chainID !== undefined ? volumeByChain[chainID] || 0 : 0; - if (chain === CHAIN.ARBITRUM || chain === CHAIN.OPTIMISM || chain === CHAIN.FANTOM) { + if (chain === CHAIN.ARBITRUM) { const referralVolumeUSD = await fetchReferralVolume(timestamp); - const muxReferralVolumeUSD = await fetchMuxReferralVolume(chain, timestamp); - dailyVolumeUSD += referralVolumeUSD + muxReferralVolumeUSD; + dailyVolumeUSD += referralVolumeUSD; } return { @@ -183,6 +122,7 @@ const adapteraggderivative: any = { [CHAIN.ARBITRUM]: { fetch: fetch(CHAIN.ARBITRUM), start: 1687422746, + customBackfill: customBackfill(CHAIN.ARBITRUM, fetch), meta: { methodology, }, diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..e5b1fdb1e8 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2443 @@ +# 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.637.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.637.0.tgz#2879bd8ddef84397b65fa9e61bca10bb4ba08211" + integrity sha512-y6UC94fsMvhKbf0dzfnjVP1HePeGjplfcYfilZU1COIJLyTkMcUv4XcT4I407CGIrvgEafONHkiC09ygqUauNA== + 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.637.0" + "@aws-sdk/client-sts" "3.637.0" + "@aws-sdk/core" "3.635.0" + "@aws-sdk/credential-provider-node" "3.637.0" + "@aws-sdk/middleware-bucket-endpoint" "3.620.0" + "@aws-sdk/middleware-expect-continue" "3.620.0" + "@aws-sdk/middleware-flexible-checksums" "3.620.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-location-constraint" "3.609.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-sdk-s3" "3.635.0" + "@aws-sdk/middleware-ssec" "3.609.0" + "@aws-sdk/middleware-user-agent" "3.637.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/signature-v4-multi-region" "3.635.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.637.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@aws-sdk/xml-builder" "3.609.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.4.0" + "@smithy/eventstream-serde-browser" "^3.0.6" + "@smithy/eventstream-serde-config-resolver" "^3.0.3" + "@smithy/eventstream-serde-node" "^3.0.5" + "@smithy/fetch-http-handler" "^3.2.4" + "@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.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.15" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@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.15" + "@smithy/util-defaults-mode-node" "^3.0.15" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-stream" "^3.1.3" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.1.2" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.637.0": + version "3.637.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.637.0.tgz#d7e22ce6627c3285bf311e6c9e64c22b99bbd76a" + integrity sha512-27bHALN6Qb6m6KZmPvRieJ/QRlj1lyac/GT2Rn5kJpre8Mpp+yxrtvp3h9PjNBty4lCeFEENfY4dGNSozBuBcw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.635.0" + "@aws-sdk/credential-provider-node" "3.637.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.637.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.637.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.4.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.15" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@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.15" + "@smithy/util-defaults-mode-node" "^3.0.15" + "@smithy/util-endpoints" "^2.0.5" + "@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.637.0": + version "3.637.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz#ae152759a5e1e576e1df6b8f4edaf59796e1758e" + integrity sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.635.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.637.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.637.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.4.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.15" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@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.15" + "@smithy/util-defaults-mode-node" "^3.0.15" + "@smithy/util-endpoints" "^2.0.5" + "@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.637.0": + version "3.637.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz#6dcde6640d8a5e60dd4a2df8557284a0226d182c" + integrity sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.637.0" + "@aws-sdk/core" "3.635.0" + "@aws-sdk/credential-provider-node" "3.637.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.637.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.637.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.4.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.15" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@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.15" + "@smithy/util-defaults-mode-node" "^3.0.15" + "@smithy/util-endpoints" "^2.0.5" + "@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.635.0": + version "3.635.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.635.0.tgz#74b7d0d7fa3aa39f87ea5cf4e6c97d4d84f4ef14" + integrity sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg== + dependencies: + "@smithy/core" "^2.4.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz#d4692c49a65ebc11dae3f7f8b053fee9268a953c" + integrity sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg== + 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.635.0": + version "3.635.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz#083439af1336693049958e4b61695e4712b30fd4" + integrity sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.637.0": + version "3.637.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz#dae0d8b05c8b9480da5a92beb4dd244985ecbd70" + integrity sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.635.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.637.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.637.0": + version "3.637.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz#0ac6678ab31783adf5b1cf03add5d1da101ea946" + integrity sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.635.0" + "@aws-sdk/credential-provider-ini" "3.637.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.637.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz#10387cf85400420bb4bbda9cc56937dcc6d6d0ee" + integrity sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.637.0": + version "3.637.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz#13acf77579df026e89ced33501489defd06a0518" + integrity sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA== + dependencies: + "@aws-sdk/client-sso" "3.637.0" + "@aws-sdk/token-providers" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz#b25878c0a05dad60cd5f91e7e5a31a145c2f14be" + integrity sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w== + 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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz#c5dc0e98b6209a91479cad6c2c74fbc5a3429fab" + integrity sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz#6a362c0f0696dc6749108a33de9998e0fa6b50ec" + integrity sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz#42cd48cdc0ad9639545be000bf537969210ce8c5" + integrity sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA== + 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.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" + integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" + integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.635.0": + version "3.635.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz#be7f61c6033a803cde59ec5a29db266b42fdbc01" + integrity sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw== + dependencies: + "@aws-sdk/core" "3.635.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/core" "^2.4.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-stream" "^3.1.3" + "@smithy/util-utf8" "^3.0.0" + 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.637.0": + version "3.637.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz#2b00de72b00953a477bcc02a68d8cbb5e9670c44" + integrity sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.637.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" + integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== + dependencies: + "@aws-sdk/types" "3.609.0" + "@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" + +"@aws-sdk/signature-v4-multi-region@3.635.0": + version "3.635.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz#76e8eb66bfd9b661b4f9768b18aca2e04dd781a2" + integrity sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.635.0" + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" + integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@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.637.0": + version "3.637.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz#e20bcb69028039fdbc06e98a3028c7f8d8e8adaa" + integrity sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + "@smithy/util-endpoints" "^2.0.5" + 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.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" + integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@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.83" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.83.tgz#f0f412410d7a99ee7b864887278e710a5479a686" + integrity sha512-JojVjzBR73GoVmyuC6gE7AfMgpWvHm2OEKEMIai53b7nkI91oFAVYu1PoX/YD+wTbOPhZwYWWhdVXR5hYPnNRQ== + 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.15.0" + resolved "https://registry.yarnpkg.com/@elastic/elasticsearch/-/elasticsearch-8.15.0.tgz#cb29b3ae33203c545d435cf3dc4b557c8b4961d5" + integrity sha512-mG90EMdTDoT6GFSdqpUAhWK9LGuiJo6tOWqs0Usd/t15mPQDj7ZqHXfCBqNkASZpwPZpbAYVjd57S6nbUBINCg== + dependencies: + "@elastic/transport" "^8.7.0" + tslib "^2.4.0" + +"@elastic/transport@^8.7.0": + version "8.7.1" + resolved "https://registry.yarnpkg.com/@elastic/transport/-/transport-8.7.1.tgz#b380f0b90ee98ff84892c0958b94477cfbf84a05" + integrity sha512-2eeMVkz57Ayxv+UAZkIKzzrUu7nm96jr3+N3kLfbBqALYe2jwDpLr9pR0jc/x9HyJKAM909YGaNlHFDZeb0+Mw== + 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.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.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.4.0.tgz#56e917b6ab2dffeba681a05395c40a757d681147" + integrity sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w== + dependencies: + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.15" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz#0e0e7ddaff1a8633cb927aee1056c0ab506b7ecf" + integrity sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA== + 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.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.6.tgz#a4ab4f7cfbd137bcaa54c375276f9214e568fd8f" + integrity sha512-2hM54UWQUOrki4BtsUI1WzmD13/SeaqT/AB3EUJKbcver/WgKNaiJ5y5F5XXuVe6UekffVzuUDrBZVAA3AWRpQ== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.5" + "@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.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.5.tgz#2bbf5c9312a28f23bc55ae284efa9499f8b8f982" + integrity sha512-+upXvnHNyZP095s11jF5dhGw/Ihzqwl5G+/KtMnoQOpdfC3B5HYCcDVG9EmgkhJMXJlM64PyN5gjJl0uXFQehQ== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.5" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.5.tgz#e1cc2f71f4d174a03e00ce4b563395a81dd17bec" + integrity sha512-5u/nXbyoh1s4QxrvNre9V6vfyoLWuiVvvd5TlZjGThIikc3G+uNiG9uOTCWweSRjv1asdDIWK7nOmN7le4RYHQ== + dependencies: + "@smithy/eventstream-codec" "^3.1.2" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz#c754de7e0ff2541b73ac9ba7cc955940114b3d62" + integrity sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg== + dependencies: + "@smithy/protocol-http" "^4.1.0" + "@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.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz#1680aa4fb2a1c0505756103c9a5c2916307d9035" + integrity sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw== + dependencies: + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz#9b8a496d87a68ec43f3f1a0139868d6765a88119" + integrity sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw== + 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.15": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz#9b96900cde70d8aafd267e13f4e79241be90e0c7" + integrity sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ== + dependencies: + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/service-error-classification" "^3.0.3" + "@smithy/smithy-client" "^3.2.0" + "@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.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.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz#be4195e45639e690d522cd5f11513ea822ff9d5f" + integrity sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg== + dependencies: + "@smithy/abort-controller" "^3.1.1" + "@smithy/protocol-http" "^4.1.0" + "@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.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.0.tgz#23519d8f45bf4f33960ea5415847bc2b620a010b" + integrity sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA== + 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.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@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.1.0.tgz#251ff43dc1f4ad66776122732fea9e56efc56443" + integrity sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.1.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.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.2.0.tgz#6db94024e4bdaefa079ac68dbea23dafbea230c8" + integrity sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw== + dependencies: + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" + 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.15": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz#df73b9ae3dddc9126e0bb93ebc720b09d7163858" + integrity sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg== + dependencies: + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.15": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz#d52476e1f2e66525d918b51f8d5a9b0972bf518e" + integrity sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A== + dependencies: + "@smithy/config-resolver" "^3.0.5" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.5": + 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.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.3.tgz#699ee2397cc1d474e46d2034039d5263812dca64" + integrity sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw== + dependencies: + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" + "@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 "22.5.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.1.tgz#de01dce265f6b99ed32b295962045d10b5b99560" + integrity sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw== + dependencies: + undici-types "~6.19.2" + +"@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.47" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.47.tgz#18076201ad7dd3445046df6ce9ead5fe5abd9387" + integrity sha512-1f7dB3BL/bpd9tnDJrrHb66Y+cVrhxSOTGorRNdHwYTUlTay3HuTDPKo9a/4vX9pMQkhYBcAbL4jQdNlhCFP9A== + 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.1" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.12.1.tgz#8835d22f7e25b261e624d02a42fe4ade2c689a3c" + integrity sha512-w0URwf7BQb0rD/EuiG12KP0bailHKHP5YVviJG9zw3ykAokL0TuxU2TUqMB7EwZ59bDHYdeTIvjI5m0S7qHfOA== + +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.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.5.tgz#21eed340eb5daf47d29b6e002424b3e88c8c54b1" + integrity sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw== + 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.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + 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.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.2.tgz#4b67d4b49e69b59893931a032560999e5e4419fe" + integrity sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg== + 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.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== + 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.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + 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.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + 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.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +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.12" + resolved "https://registry.yarnpkg.com/tron-format-address/-/tron-format-address-0.1.12.tgz#4c6b6ba717a57424e9d12343b1fce0e466690362" + integrity sha512-dtlfwSZEdWA9Cj3Mqypw/WNhQPlQf5JWT+/H5gYX5Viu+ntIq+7zJvcWCrmcDJ48L0EHt2xzGme2eErW9Y7spQ== + +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.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +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.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== + +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-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +undici@^6.12.0: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.8.tgz#002d7c8a28f8cc3a44ff33c3d4be4d85e15d40e1" + integrity sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g== + +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 ce5d03c4e5b539b652782faf88dce42997af1c4c Mon Sep 17 00:00:00 2001 From: dtmkeng <0xgnek@gmail.com> Date: Fri, 30 Aug 2024 22:25:46 +0800 Subject: [PATCH 1326/1590] Delete yarn.lock --- yarn.lock | 2443 ----------------------------------------------------- 1 file changed, 2443 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index e5b1fdb1e8..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2443 +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.637.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.637.0.tgz#2879bd8ddef84397b65fa9e61bca10bb4ba08211" - integrity sha512-y6UC94fsMvhKbf0dzfnjVP1HePeGjplfcYfilZU1COIJLyTkMcUv4XcT4I407CGIrvgEafONHkiC09ygqUauNA== - 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.637.0" - "@aws-sdk/client-sts" "3.637.0" - "@aws-sdk/core" "3.635.0" - "@aws-sdk/credential-provider-node" "3.637.0" - "@aws-sdk/middleware-bucket-endpoint" "3.620.0" - "@aws-sdk/middleware-expect-continue" "3.620.0" - "@aws-sdk/middleware-flexible-checksums" "3.620.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-location-constraint" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-sdk-s3" "3.635.0" - "@aws-sdk/middleware-ssec" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.637.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/signature-v4-multi-region" "3.635.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.637.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@aws-sdk/xml-builder" "3.609.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.4.0" - "@smithy/eventstream-serde-browser" "^3.0.6" - "@smithy/eventstream-serde-config-resolver" "^3.0.3" - "@smithy/eventstream-serde-node" "^3.0.5" - "@smithy/fetch-http-handler" "^3.2.4" - "@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.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.15" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@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.15" - "@smithy/util-defaults-mode-node" "^3.0.15" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-stream" "^3.1.3" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.1.2" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.637.0": - version "3.637.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.637.0.tgz#d7e22ce6627c3285bf311e6c9e64c22b99bbd76a" - integrity sha512-27bHALN6Qb6m6KZmPvRieJ/QRlj1lyac/GT2Rn5kJpre8Mpp+yxrtvp3h9PjNBty4lCeFEENfY4dGNSozBuBcw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.635.0" - "@aws-sdk/credential-provider-node" "3.637.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.637.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.637.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.4.0" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.15" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@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.15" - "@smithy/util-defaults-mode-node" "^3.0.15" - "@smithy/util-endpoints" "^2.0.5" - "@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.637.0": - version "3.637.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz#ae152759a5e1e576e1df6b8f4edaf59796e1758e" - integrity sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.635.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.637.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.637.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.4.0" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.15" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@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.15" - "@smithy/util-defaults-mode-node" "^3.0.15" - "@smithy/util-endpoints" "^2.0.5" - "@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.637.0": - version "3.637.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz#6dcde6640d8a5e60dd4a2df8557284a0226d182c" - integrity sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.637.0" - "@aws-sdk/core" "3.635.0" - "@aws-sdk/credential-provider-node" "3.637.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.637.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.637.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.4.0" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.15" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@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.15" - "@smithy/util-defaults-mode-node" "^3.0.15" - "@smithy/util-endpoints" "^2.0.5" - "@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.635.0": - version "3.635.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.635.0.tgz#74b7d0d7fa3aa39f87ea5cf4e6c97d4d84f4ef14" - integrity sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg== - dependencies: - "@smithy/core" "^2.4.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - "@smithy/util-middleware" "^3.0.3" - fast-xml-parser "4.4.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.620.1": - version "3.620.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz#d4692c49a65ebc11dae3f7f8b053fee9268a953c" - integrity sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg== - 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.635.0": - version "3.635.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz#083439af1336693049958e4b61695e4712b30fd4" - integrity sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.1.3" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.637.0": - version "3.637.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz#dae0d8b05c8b9480da5a92beb4dd244985ecbd70" - integrity sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw== - dependencies: - "@aws-sdk/credential-provider-env" "3.620.1" - "@aws-sdk/credential-provider-http" "3.635.0" - "@aws-sdk/credential-provider-process" "3.620.1" - "@aws-sdk/credential-provider-sso" "3.637.0" - "@aws-sdk/credential-provider-web-identity" "3.621.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.637.0": - version "3.637.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz#0ac6678ab31783adf5b1cf03add5d1da101ea946" - integrity sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA== - dependencies: - "@aws-sdk/credential-provider-env" "3.620.1" - "@aws-sdk/credential-provider-http" "3.635.0" - "@aws-sdk/credential-provider-ini" "3.637.0" - "@aws-sdk/credential-provider-process" "3.620.1" - "@aws-sdk/credential-provider-sso" "3.637.0" - "@aws-sdk/credential-provider-web-identity" "3.621.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.620.1": - version "3.620.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz#10387cf85400420bb4bbda9cc56937dcc6d6d0ee" - integrity sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.637.0": - version "3.637.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz#13acf77579df026e89ced33501489defd06a0518" - integrity sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA== - dependencies: - "@aws-sdk/client-sso" "3.637.0" - "@aws-sdk/token-providers" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz#b25878c0a05dad60cd5f91e7e5a31a145c2f14be" - integrity sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w== - 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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz#c5dc0e98b6209a91479cad6c2c74fbc5a3429fab" - integrity sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz#6a362c0f0696dc6749108a33de9998e0fa6b50ec" - integrity sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz#42cd48cdc0ad9639545be000bf537969210ce8c5" - integrity sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA== - 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.1.0" - "@smithy/types" "^3.3.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" - integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" - integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.635.0": - version "3.635.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz#be7f61c6033a803cde59ec5a29db266b42fdbc01" - integrity sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw== - dependencies: - "@aws-sdk/core" "3.635.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/core" "^2.4.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-stream" "^3.1.3" - "@smithy/util-utf8" "^3.0.0" - 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.637.0": - version "3.637.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz#2b00de72b00953a477bcc02a68d8cbb5e9670c44" - integrity sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.637.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" - integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== - dependencies: - "@aws-sdk/types" "3.609.0" - "@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" - -"@aws-sdk/signature-v4-multi-region@3.635.0": - version "3.635.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz#76e8eb66bfd9b661b4f9768b18aca2e04dd781a2" - integrity sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.635.0" - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" - integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@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.637.0": - version "3.637.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz#e20bcb69028039fdbc06e98a3028c7f8d8e8adaa" - integrity sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - "@smithy/util-endpoints" "^2.0.5" - 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.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" - integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/node-config-provider" "^3.1.4" - "@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.83" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.83.tgz#f0f412410d7a99ee7b864887278e710a5479a686" - integrity sha512-JojVjzBR73GoVmyuC6gE7AfMgpWvHm2OEKEMIai53b7nkI91oFAVYu1PoX/YD+wTbOPhZwYWWhdVXR5hYPnNRQ== - 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.15.0" - resolved "https://registry.yarnpkg.com/@elastic/elasticsearch/-/elasticsearch-8.15.0.tgz#cb29b3ae33203c545d435cf3dc4b557c8b4961d5" - integrity sha512-mG90EMdTDoT6GFSdqpUAhWK9LGuiJo6tOWqs0Usd/t15mPQDj7ZqHXfCBqNkASZpwPZpbAYVjd57S6nbUBINCg== - dependencies: - "@elastic/transport" "^8.7.0" - tslib "^2.4.0" - -"@elastic/transport@^8.7.0": - version "8.7.1" - resolved "https://registry.yarnpkg.com/@elastic/transport/-/transport-8.7.1.tgz#b380f0b90ee98ff84892c0958b94477cfbf84a05" - integrity sha512-2eeMVkz57Ayxv+UAZkIKzzrUu7nm96jr3+N3kLfbBqALYe2jwDpLr9pR0jc/x9HyJKAM909YGaNlHFDZeb0+Mw== - 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.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.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.4.0.tgz#56e917b6ab2dffeba681a05395c40a757d681147" - integrity sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w== - dependencies: - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.15" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz#0e0e7ddaff1a8633cb927aee1056c0ab506b7ecf" - integrity sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA== - 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.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.6.tgz#a4ab4f7cfbd137bcaa54c375276f9214e568fd8f" - integrity sha512-2hM54UWQUOrki4BtsUI1WzmD13/SeaqT/AB3EUJKbcver/WgKNaiJ5y5F5XXuVe6UekffVzuUDrBZVAA3AWRpQ== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.5" - "@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.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.5.tgz#2bbf5c9312a28f23bc55ae284efa9499f8b8f982" - integrity sha512-+upXvnHNyZP095s11jF5dhGw/Ihzqwl5G+/KtMnoQOpdfC3B5HYCcDVG9EmgkhJMXJlM64PyN5gjJl0uXFQehQ== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.5" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.5.tgz#e1cc2f71f4d174a03e00ce4b563395a81dd17bec" - integrity sha512-5u/nXbyoh1s4QxrvNre9V6vfyoLWuiVvvd5TlZjGThIikc3G+uNiG9uOTCWweSRjv1asdDIWK7nOmN7le4RYHQ== - dependencies: - "@smithy/eventstream-codec" "^3.1.2" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz#c754de7e0ff2541b73ac9ba7cc955940114b3d62" - integrity sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg== - dependencies: - "@smithy/protocol-http" "^4.1.0" - "@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.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz#1680aa4fb2a1c0505756103c9a5c2916307d9035" - integrity sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw== - dependencies: - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz#9b8a496d87a68ec43f3f1a0139868d6765a88119" - integrity sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw== - 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.15": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz#9b96900cde70d8aafd267e13f4e79241be90e0c7" - integrity sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ== - dependencies: - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/service-error-classification" "^3.0.3" - "@smithy/smithy-client" "^3.2.0" - "@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.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.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz#be4195e45639e690d522cd5f11513ea822ff9d5f" - integrity sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg== - dependencies: - "@smithy/abort-controller" "^3.1.1" - "@smithy/protocol-http" "^4.1.0" - "@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.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.0.tgz#23519d8f45bf4f33960ea5415847bc2b620a010b" - integrity sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA== - 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.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@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.1.0.tgz#251ff43dc1f4ad66776122732fea9e56efc56443" - integrity sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.1.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.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.2.0.tgz#6db94024e4bdaefa079ac68dbea23dafbea230c8" - integrity sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw== - dependencies: - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.1.3" - 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.15": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz#df73b9ae3dddc9126e0bb93ebc720b09d7163858" - integrity sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg== - dependencies: - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.15": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz#d52476e1f2e66525d918b51f8d5a9b0972bf518e" - integrity sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A== - dependencies: - "@smithy/config-resolver" "^3.0.5" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.0.5": - 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.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.3.tgz#699ee2397cc1d474e46d2034039d5263812dca64" - integrity sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw== - dependencies: - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/node-http-handler" "^3.1.4" - "@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 "22.5.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.1.tgz#de01dce265f6b99ed32b295962045d10b5b99560" - integrity sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw== - dependencies: - undici-types "~6.19.2" - -"@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.47" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.47.tgz#18076201ad7dd3445046df6ce9ead5fe5abd9387" - integrity sha512-1f7dB3BL/bpd9tnDJrrHb66Y+cVrhxSOTGorRNdHwYTUlTay3HuTDPKo9a/4vX9pMQkhYBcAbL4jQdNlhCFP9A== - 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.1" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.12.1.tgz#8835d22f7e25b261e624d02a42fe4ade2c689a3c" - integrity sha512-w0URwf7BQb0rD/EuiG12KP0bailHKHP5YVviJG9zw3ykAokL0TuxU2TUqMB7EwZ59bDHYdeTIvjI5m0S7qHfOA== - -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.5" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.5.tgz#21eed340eb5daf47d29b6e002424b3e88c8c54b1" - integrity sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw== - 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.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== - 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.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.2.tgz#4b67d4b49e69b59893931a032560999e5e4419fe" - integrity sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg== - 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.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" - integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== - 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.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== - 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.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - 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.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -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.12" - resolved "https://registry.yarnpkg.com/tron-format-address/-/tron-format-address-0.1.12.tgz#4c6b6ba717a57424e9d12343b1fce0e466690362" - integrity sha512-dtlfwSZEdWA9Cj3Mqypw/WNhQPlQf5JWT+/H5gYX5Viu+ntIq+7zJvcWCrmcDJ48L0EHt2xzGme2eErW9Y7spQ== - -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.7.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" - integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== - -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.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" - integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== - -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-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - -undici@^6.12.0: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.8.tgz#002d7c8a28f8cc3a44ff33c3d4be4d85e15d40e1" - integrity sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g== - -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 e117ed3ef9e37f9f08c1c6a4a3608a1a2924a5ff Mon Sep 17 00:00:00 2001 From: Dackie Date: Sat, 31 Aug 2024 16:50:29 +0700 Subject: [PATCH 1327/1590] DackieSwap update volume Linea --- dexs/dackieswap-v2/index.ts | 4 +++- dexs/dackieswap/index.ts | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dexs/dackieswap-v2/index.ts b/dexs/dackieswap-v2/index.ts index 51e8e9048c..5d27c7663b 100644 --- a/dexs/dackieswap-v2/index.ts +++ b/dexs/dackieswap-v2/index.ts @@ -12,6 +12,7 @@ const endpoints: ChainEndpoints = { [CHAIN.BLAST]: "https://api.studio.thegraph.com/query/50473/v2-blast/version/latest", [CHAIN.MODE]: "https://api.studio.thegraph.com/query/50473/v2-mode/version/latest", [CHAIN.XLAYER]: "https://api.studio.thegraph.com/query/50473/v2-xlayer/version/latest", + [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/50473/v2-linea/version/latest", }; // Fetch function to query the subgraphs @@ -57,7 +58,8 @@ const adapter: SimpleAdapter = { : chain === CHAIN.BLAST ? 1709722800 : chain === CHAIN.MODE ? 1712371653 : chain === CHAIN.XLAYER ? 1712369493 - : 0, + : chain === CHAIN.LINEA ? 1725062400 + : 0, customBackfill: customBackfill(chain, graphs), meta: {methodology}, } diff --git a/dexs/dackieswap/index.ts b/dexs/dackieswap/index.ts index 4c41209576..d3195a126c 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -16,6 +16,8 @@ const v3Endpoint = { "https://api.studio.thegraph.com/query/50473/v3-mode/version/latest", [CHAIN.XLAYER]: "https://api.studio.thegraph.com/query/50473/v3-xlayer/version/latest", + [CHAIN.LINEA]: + "https://api.studio.thegraph.com/query/50473/v3-linea/version/latest", }; const VOLUME_USD = "volumeUSD"; @@ -45,6 +47,7 @@ const v3StartTimes = { [CHAIN.BLAST]: 1709722800, [CHAIN.MODE]: 1712371653, [CHAIN.XLAYER]: 1712369493, + [CHAIN.LINEA]: 1725062400, } as IJSON; const adapter: SimpleAdapter = { @@ -73,6 +76,10 @@ const adapter: SimpleAdapter = { fetch: v3Graph(CHAIN.XLAYER), start: async () => v3StartTimes[CHAIN.XLAYER] }, + [CHAIN.LINEA]: { + fetch: v3Graph(CHAIN.LINEA), + start: async () => v3StartTimes[CHAIN.LINEA] + }, }, version: 2 }; From cc54b4383d3a441685607fef054e82420b926ebd Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:20:42 +0100 Subject: [PATCH 1328/1590] Update index.ts --- aggregator-derivatives/vooi/index.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/aggregator-derivatives/vooi/index.ts b/aggregator-derivatives/vooi/index.ts index 1e93de568f..357ac70945 100644 --- a/aggregator-derivatives/vooi/index.ts +++ b/aggregator-derivatives/vooi/index.ts @@ -11,7 +11,7 @@ const startTimestampBase = 1722470400; // 01.08.2024 const fetchArbitrum = async (options: FetchOptions): Promise => { const timestamp = options.toTimestamp - const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) + const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) // returns data for the day before let orderlyItem = fetchData.find(((item) => item.protocol == "orderly")) if (!orderlyItem) { orderlyItem = {dailyVolume: 0, totalVolume: 0} @@ -84,6 +84,5 @@ const adapter: SimpleAdapter = { start: startTimestampBase }, }, - version: 2 } -export default adapter \ No newline at end of file +export default adapter From 37702526718f3ab4773e05c9723d9f01c5e054e1 Mon Sep 17 00:00:00 2001 From: MonkeyD1uffy <34332336+MonkeyD1uffy@users.noreply.github.com> Date: Sat, 31 Aug 2024 23:56:30 +0700 Subject: [PATCH 1329/1590] Update index.ts Update API URL --- dexs/lifinity/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/lifinity/index.ts b/dexs/lifinity/index.ts index 9de281e50c..21641df9a3 100644 --- a/dexs/lifinity/index.ts +++ b/dexs/lifinity/index.ts @@ -5,7 +5,7 @@ import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -const historicalVolumeEndpoint = "https://lifinity.io/api/dashboard/volume" +const historicalVolumeEndpoint = "https://api.lifinity.io/api/dashboard/volume" interface IVolumeall { volume: number; From c62faeb3f67c019c5f142f02e83c6350f7478a2f Mon Sep 17 00:00:00 2001 From: lil-il <> Date: Mon, 2 Sep 2024 13:27:38 +0300 Subject: [PATCH 1330/1590] fixed fooi adapter --- aggregator-derivatives/vooi/index.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/aggregator-derivatives/vooi/index.ts b/aggregator-derivatives/vooi/index.ts index 357ac70945..9d88e45ba5 100644 --- a/aggregator-derivatives/vooi/index.ts +++ b/aggregator-derivatives/vooi/index.ts @@ -9,8 +9,8 @@ const startTimestampBlast = 1719792000; // 01.07.2024 const startTimestampOpBNB = 1717200000; // 01.06.2024 const startTimestampBase = 1722470400; // 01.08.2024 -const fetchArbitrum = async (options: FetchOptions): Promise => { - const timestamp = options.toTimestamp +const fetchArbitrum = async (timestamp: number): Promise => { + // const timestamp = options.toTimestamp const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) // returns data for the day before let orderlyItem = fetchData.find(((item) => item.protocol == "orderly")) if (!orderlyItem) { @@ -38,8 +38,7 @@ const fetchArbitrum = async (options: FetchOptions): Promise => { }; -const fetchOpBNB = async (options: any): Promise => { - const timestamp = options.toTimestamp +const fetchOpBNB = async (timestamp: number): Promise => { return { dailyVolume: 0, totalVolume: 0, @@ -47,8 +46,7 @@ const fetchOpBNB = async (options: any): Promise => { }; }; -const fetchBlast = async (options: any): Promise => { - const timestamp = options.toTimestamp +const fetchBlast = async (timestamp: number): Promise => { return { dailyVolume: 0, totalVolume: 0, @@ -56,8 +54,7 @@ const fetchBlast = async (options: any): Promise => { }; }; -const fetchBase = async (options: any): Promise => { - const timestamp = options.toTimestamp +const fetchBase = async (timestamp: number): Promise => { return { dailyVolume: 0, totalVolume: 0, From 02af6439eca3d5a4b720cd62cadd608a78a70ba9 Mon Sep 17 00:00:00 2001 From: 0xCrumbs <97379465+0xcrumb@users.noreply.github.com> Date: Mon, 2 Sep 2024 15:22:35 +0100 Subject: [PATCH 1331/1590] Add gTrade v9.2 partial increase/decrease events --- dexs/gains-network/index.ts | 86 ++++++++++++++++++++++++++----------- 1 file changed, 61 insertions(+), 25 deletions(-) diff --git a/dexs/gains-network/index.ts b/dexs/gains-network/index.ts index 83d9067af6..5484fa2930 100644 --- a/dexs/gains-network/index.ts +++ b/dexs/gains-network/index.ts @@ -25,6 +25,10 @@ const topic0_market_ex = [ "0xca42b0e44cd853d207b87e8f8914eaefef9c9463a8c77ca33754aa62f6904f00", // v7 V8_MARKET_TOPIC0, // v8 ]; +const topic0_partials = [ + "0xf09a9c949c4bd4cbe75b424bea11c683c3ae55e7cdb8321c3ec37e01af72c8d5", // PositionSizeIncreaseExecuted + "0xe74b50af866d7f8e3577bc959bf73a2690841f0abce22ab0cfb1b1c84122a7d7", // PositionSizeDecreaseExecuted +]; const precisionException: { [a: string | number]: number } = { "0x2ac6749d0affd42c8d61ef25e433f92e375a1aef": 1e6, @@ -32,43 +36,60 @@ const precisionException: { [a: string | number]: number } = { 3: 1e6, // v8 USDC }; +const diamonds = { + [CHAIN.POLYGON]: "0x209a9a01980377916851af2ca075c2b170452018", + [CHAIN.ARBITRUM]: "0xff162c694eaa571f685030649814282ea457f169", +}; + const contract_addresses: IAddresses = { [CHAIN.POLYGON]: [ "0x82e59334da8c667797009bbe82473b55c7a6b311", // DAI TradingCallbacks "0x0bbed2eac3237ba128643670b7cf3be475933755", // ETH TradingCallbacks "0x2ac6749d0affd42c8d61ef25e433f92e375a1aef", // USDC TradingCallbacks - "0x209a9a01980377916851af2ca075c2b170452018", // v8 Diamond + diamonds[CHAIN.POLYGON], // v8 Diamond ], [CHAIN.ARBITRUM]: [ "0x298a695906e16aea0a184a2815a76ead1a0b7522", // DAI TradingCallbacks "0x62a9f50c92a57c719ff741133caa55c7a81ce019", // ETH TradingCallbacks "0x4542256c583bcad66a19a525b57203773a6485bf", // USDC TradingCallbacks - "0xff162c694eaa571f685030649814282ea457f169", // v8 Diamond + diamonds[CHAIN.ARBITRUM], // v8 Diamond ], }; -const fetch: any = async (timestamp: number, _, { getLogs, createBalances, chain }): Promise => { - const limitLogs: ILog[] = ( - (await Promise.all( - topic0_limit_ex.map(async (topic0) => - getLogs({ - targets: contract_addresses[chain], - topics: [topic0], - }) - ) - )) as ILog[][] - ).flat(); - - const marketLogs: ILog[] = ( - (await Promise.all( - topic0_market_ex.map(async (topic0) => - getLogs({ - targets: contract_addresses[chain], - topics: [topic0], - }) - ) - )) as ILog[][] - ).flat(); +const fetch: any = async (timestamp: number, _, { getLogs, chain }): Promise => { + const [limitLogs, marketLogs, partialsLogs] = ( + await Promise.all([ + // Limit Executed logs + (await Promise.all( + topic0_limit_ex.map(async (topic0) => + getLogs({ + targets: contract_addresses[chain], + topics: [topic0], + }) + ) + )) as ILog[][], + + // Market Executed logs + (await Promise.all( + topic0_market_ex.map(async (topic0) => + getLogs({ + targets: contract_addresses[chain], + topics: [topic0], + }) + ) + )) as ILog[][], + + // Partial Increase/Decrease logs + (await Promise.all( + topic0_partials.map(async (topic0) => + getLogs({ + targets: [diamonds[chain]], + topics: [topic0], + }) + ) + )) as ILog[][], + ]) + ).map((logs: ILog[][]) => logs.flat()); const limit_volume = limitLogs .map((e: ILog) => { @@ -111,7 +132,22 @@ const fetch: any = async (timestamp: number, _, { getLogs, createBalances, chain }) .reduce((a: number, b: number) => a + b, 0); - const dailyVolume = limit_volume + market_volume; + const partials_volume = partialsLogs + .map((e: ILog) => { + const data = e.data.replace("0x", ""); + const cancelReason = Number("0x" + data.slice(128, 192)); + + if (cancelReason > 0) return 0; + + const collateralPrecision = precisionException[Number(e.topics[1])] ?? 1e18; + const collateralPriceUsd = Number("0x" + data.slice(384, 448)) / 1e8; + const positionSizeDelta = Number("0x" + data.slice(576, 640)) / collateralPrecision; + + return positionSizeDelta * collateralPriceUsd; + }) + .reduce((a: number, b: number) => a + b, 0); + + const dailyVolume = limit_volume + market_volume + partials_volume; return { dailyVolume, timestamp }; }; From caacfbf3aa2e66c5d93a0283602e42c329b50954 Mon Sep 17 00:00:00 2001 From: degencreator <156078277+degencreator@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:31:04 +0200 Subject: [PATCH 1332/1590] chore: Updated subgraphs --- dexs/intent-x/index.tsx | 4 ++-- fees/intent-x/index.tsx | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dexs/intent-x/index.tsx b/dexs/intent-x/index.tsx index 3b36302291..7dfe3ea32c 100644 --- a/dexs/intent-x/index.tsx +++ b/dexs/intent-x/index.tsx @@ -9,9 +9,9 @@ const ONE_DAY_IN_SECONDS = 60 * 60 * 24; const endpoint_0_8_0 = "https://api.studio.thegraph.com/query/62472/perpetuals-analytics_base/version/latest"; const endpoint = - "https://api.0xgraph.xyz/subgraphs/name/intentx-base-analytcs-082"; + "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-base-analytics-082/latest/gn"; const endpoint_blast = - "https://api.studio.thegraph.com/query/62472/intentx-analytics_082_blast/version/latest"; + "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-blast-analytics-083/latest/gn"; const endpoint_mantle = "https://subgraph-api.mantle.xyz/subgraphs/name/mantle_intentx-analytics_082"; diff --git a/fees/intent-x/index.tsx b/fees/intent-x/index.tsx index 554a05374f..d8c9f93e8f 100644 --- a/fees/intent-x/index.tsx +++ b/fees/intent-x/index.tsx @@ -5,10 +5,10 @@ import { CHAIN } from "../../helpers/chains"; const endpoint_0_8_0 = "https://api.studio.thegraph.com/query/62472/perpetuals-analytics_base/version/latest"; -const endpoint = - "https://api.0xgraph.xyz/subgraphs/name/intentx-base-analytcs-082"; + const endpoint = + "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-base-analytics-082/latest/gn"; const endpoint_blast = - "https://api.studio.thegraph.com/query/62472/intentx-analytics_082_blast/version/latest"; + "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-blast-analytics-083/latest/gn"; const endpoint_mantle = "https://subgraph-api.mantle.xyz/subgraphs/name/mantle_intentx-analytics_082"; From 341a5590dd853037df6a042948762e042cc6ef5e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 2 Sep 2024 16:44:13 +0000 Subject: [PATCH 1333/1590] fix vooi --- aggregator-derivatives/vooi/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aggregator-derivatives/vooi/index.ts b/aggregator-derivatives/vooi/index.ts index 9d88e45ba5..e5f52f6649 100644 --- a/aggregator-derivatives/vooi/index.ts +++ b/aggregator-derivatives/vooi/index.ts @@ -9,9 +9,9 @@ const startTimestampBlast = 1719792000; // 01.07.2024 const startTimestampOpBNB = 1717200000; // 01.06.2024 const startTimestampBase = 1722470400; // 01.08.2024 -const fetchArbitrum = async (timestamp: number): Promise => { +const fetchArbitrum = async (timestamp: number, _t: any, options: FetchOptions): Promise => { // const timestamp = options.toTimestamp - const fetchData = await fetchURL(`${URL}${endpoint}?ts=${timestamp}`) // returns data for the day before + const fetchData = await fetchURL(`${URL}${endpoint}?ts=${options.startOfDay}`) // returns data for the day before let orderlyItem = fetchData.find(((item) => item.protocol == "orderly")) if (!orderlyItem) { orderlyItem = {dailyVolume: 0, totalVolume: 0} From c07c3296a3e8551952f1248060195d20e100671f Mon Sep 17 00:00:00 2001 From: Dackie Date: Tue, 3 Sep 2024 08:24:36 +0700 Subject: [PATCH 1334/1590] update start time DackieSwap V3 Blast --- dexs/dackieswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/dackieswap/index.ts b/dexs/dackieswap/index.ts index d3195a126c..23cc4006e9 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -44,7 +44,7 @@ const v3StartTimes = { [CHAIN.BASE]: 1691712000, [CHAIN.OPTIMISM]: 1705993200, [CHAIN.ARBITRUM]: 1707885300, - [CHAIN.BLAST]: 1709722800, + [CHAIN.BLAST]: 1722556800, [CHAIN.MODE]: 1712371653, [CHAIN.XLAYER]: 1712369493, [CHAIN.LINEA]: 1725062400, From b572b2a01fd102321907adb9b8d82d90872bdf62 Mon Sep 17 00:00:00 2001 From: Levana Talented Dragon Date: Tue, 3 Sep 2024 09:59:46 +0200 Subject: [PATCH 1335/1590] [levana] add neutron stats --- dexs/levana/fetch.ts | 6 ++++-- dexs/levana/index.ts | 13 +++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/dexs/levana/fetch.ts b/dexs/levana/fetch.ts index 6fe7500d1c..46b20c3dab 100644 --- a/dexs/levana/fetch.ts +++ b/dexs/levana/fetch.ts @@ -4,18 +4,20 @@ import { httpGet } from "../../utils/fetchURL"; const INDEXER_URL = "https://indexer-mainnet.levana.finance"; const QUERIER_URL = "https://querier-mainnet.levana.finance"; -type Chain = "osmosis" | "injective" | "sei" +type Chain = "osmosis" | "injective" | "sei" | "neutron" const factoryAddr:Record = { osmosis: "osmo1ssw6x553kzqher0earlkwlxasfm2stnl3ms3ma2zz4tnajxyyaaqlucd45", sei: "sei18rdj3asllguwr6lnyu2sw8p8nut0shuj3sme27ndvvw4gakjnjqqper95h", injective: "inj1vdu3s39dl8t5l88tyqwuhzklsx9587adv8cnn9" + neutron: "neutron1an8ls6d57c4qcvjq0jmm27jtrpk65twewfjqzdn7annefv7gadqsjs7uc3", } const networkName:Record = { osmosis: "osmosis-mainnet", sei: "sei-mainnet", - injective: "injective-mainnet" + injective: "injective-mainnet", + neutron: "neutron-mainnet" } export interface MarketInfo { diff --git a/dexs/levana/index.ts b/dexs/levana/index.ts index 4ed1c5bed5..bd1deb9315 100644 --- a/dexs/levana/index.ts +++ b/dexs/levana/index.ts @@ -40,6 +40,19 @@ const adapter: SimpleAdapter = { return { timestamp, dailyVolume, totalVolume, } }, start: 1695738685 + }, + neutron: { + fetch: async (timestamp: number): Promise => { + const marketInfos = await fetchMarketInfos("neutron"); + + const [dailyVolume, totalVolume] = await Promise.all([ + fetchVolume("daily", marketInfos, timestamp), + fetchVolume("total", marketInfos, timestamp) + ]); + + return { timestamp, dailyVolume, totalVolume, } + }, + start: 1715168042 } } } From 05e927230d7020595e0292ca2cbc1c89556ac7e4 Mon Sep 17 00:00:00 2001 From: Levana Talented Dragon Date: Tue, 3 Sep 2024 10:02:42 +0200 Subject: [PATCH 1336/1590] [levana] fix: lint --- dexs/levana/fetch.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/levana/fetch.ts b/dexs/levana/fetch.ts index 46b20c3dab..eed5d4f6a4 100644 --- a/dexs/levana/fetch.ts +++ b/dexs/levana/fetch.ts @@ -9,7 +9,7 @@ type Chain = "osmosis" | "injective" | "sei" | "neutron" const factoryAddr:Record = { osmosis: "osmo1ssw6x553kzqher0earlkwlxasfm2stnl3ms3ma2zz4tnajxyyaaqlucd45", sei: "sei18rdj3asllguwr6lnyu2sw8p8nut0shuj3sme27ndvvw4gakjnjqqper95h", - injective: "inj1vdu3s39dl8t5l88tyqwuhzklsx9587adv8cnn9" + injective: "inj1vdu3s39dl8t5l88tyqwuhzklsx9587adv8cnn9", neutron: "neutron1an8ls6d57c4qcvjq0jmm27jtrpk65twewfjqzdn7annefv7gadqsjs7uc3", } From 7fd31a690dafa467aec0d31dca276688fa6e9ccf Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 3 Sep 2024 11:39:43 +0200 Subject: [PATCH 1337/1590] fix monocerus --- dexs/monocerus/index.ts | 50 +++++------------------------------------ 1 file changed, 5 insertions(+), 45 deletions(-) diff --git a/dexs/monocerus/index.ts b/dexs/monocerus/index.ts index 3b5b4ec443..aa384432b1 100644 --- a/dexs/monocerus/index.ts +++ b/dexs/monocerus/index.ts @@ -1,46 +1,6 @@ -import { Adapter, DISABLED_ADAPTER_KEY } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import disabledAdapter from "../../helpers/disabledAdapter"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { uniV3Exports } from "../../helpers/uniswap"; -const endpoints = { - [CHAIN.MANTA]: "https://api.goldsky.com/api/public/project_clpm9wvhralny01szb1oa4pue/subgraphs/monocerus/1.2.0/gn" -}; - -const v3Graphs = getGraphDimensions({ - graphUrls: endpoints, - totalVolume: { - factory: "factories", - field: "totalVolumeUSD", - }, - dailyVolume: { - factory: "uniswapDayData", - field: "volumeUSD", - dateField: "date" - }, - dailyFees: { - factory: "uniswapDayData", - field: "feesUSD", - }, - feesPercent: { - type: "fees", - ProtocolRevenue: 0, - HoldersRevenue: 0, - UserFees: 100, // User fees are 0% of collected fees - SupplySideRevenue: 100, // 100% of fees are going to LPs - Revenue: 0 // Revenue is 0% of collected fees - } -}); - -const adapter: Adapter = { - version: 2, - adapter: { - [DISABLED_ADAPTER_KEY]: disabledAdapter, - [CHAIN.MANTA]: { - fetch: v3Graphs(CHAIN.MANTA), - start: 1703548800 - } - } -}; - -export default adapter; +export default uniV3Exports({ + avax: { factory: "0x8d312c2B300239B84c304B5af5A3D00cBF0803F6", }, + manta: { factory: "0x481F4b658d1447A9559B220640Fb79C2B993032A", }, +}) From c314e9e473460a6675456dd17a4c9e2f93c61dba Mon Sep 17 00:00:00 2001 From: Tyler Tsai Date: Mon, 2 Sep 2024 13:16:17 +0800 Subject: [PATCH 1338/1590] feat: lista multi protocols --- fees/{lista-dao => lista-lisusd}/index.ts | 24 +++++++----- fees/lista-slisbnb/index.ts | 46 +++++++++++++++++++++++ 2 files changed, 60 insertions(+), 10 deletions(-) rename fees/{lista-dao => lista-lisusd}/index.ts (85%) create mode 100644 fees/lista-slisbnb/index.ts diff --git a/fees/lista-dao/index.ts b/fees/lista-lisusd/index.ts similarity index 85% rename from fees/lista-dao/index.ts rename to fees/lista-lisusd/index.ts index b03965d126..047c1d45f5 100644 --- a/fees/lista-dao/index.ts +++ b/fees/lista-lisusd/index.ts @@ -8,10 +8,9 @@ const treasury = "0x8d388136d578dCD791D081c6042284CED6d9B0c6"; /** * Fetches data from Lista DAO * @doc https://listaorg.notion.site/Profit-cfd754931df449eaa9a207e38d3e0a54 - * @test npx ts-node --transpile-only cli/testAdapter.ts fees lista-dao + * @test npx ts-node --transpile-only cli/testAdapter.ts fees lista-lisusd */ -const ListaStakeManagerAddress = "0x1adB950d8bB3dA4bE104211D5AB038628e477fE6"; const HelioETHProvider = "0x0326c157bfF399e25dd684613aEF26DBb40D3BA4"; // const MasterVault = "0x986b40C2618fF295a49AC442c5ec40febB26CC54"; const SnBnbYieldConverterStrategy = @@ -20,6 +19,7 @@ const CeETHVault = "0xA230805C28121cc97B348f8209c79BEBEa3839C0"; const HayJoin = "0x4C798F81de7736620Cd8e6510158b1fE758e22F7"; // token +const lista = "0xFceB31A79F71AC9CBDCF853519c1b12D379EdC46"; const slisBNB = "0xb0b84d294e0c75a6abe60171b70edeb2efd14a1b"; const eth = "0x2170Ed0880ac9A755fd29B2688956BD959F933F8"; const bnb = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; @@ -28,11 +28,6 @@ const lisUSD = "0x0782b6d8c4551B9760e74c0545a9bCD90bdc41E5"; const fetch = async (options: FetchOptions) => { const dailyFees = options.createBalances(); - const logs_reward = await options.getLogs({ - target: ListaStakeManagerAddress, - eventAbi: "event RewardsCompounded(uint256 _amount)", - }); - const logs_claim = await options.getLogs({ target: HelioETHProvider, eventAbi: "event Claim(address recipient, uint256 amount)", @@ -66,9 +61,18 @@ const fetch = async (options: FetchOptions) => { ], }); - logs_reward.forEach((log) => { - const amount = log._amount; - dailyFees.add(slisBNB, amount); + const early_claim_penalty = await options.getLogs({ + target: lista, + topics: [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000d0c380d31db43cd291e2bbe2da2fd6dc877b87b3", + "0x0000000000000000000000008d388136d578dcd791d081c6042284ced6d9b0c6", + ], + }); + + early_claim_penalty.forEach((log) => { + const amount = Number(log.data); + dailyFees.add(lista, amount); }); logs_claim.forEach((log) => { diff --git a/fees/lista-slisbnb/index.ts b/fees/lista-slisbnb/index.ts new file mode 100644 index 0000000000..bec91e6669 --- /dev/null +++ b/fees/lista-slisbnb/index.ts @@ -0,0 +1,46 @@ +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const treasury = "0x8d388136d578dCD791D081c6042284CED6d9B0c6"; + +/** + * Fetches data from Lista DAO + * @doc https://listaorg.notion.site/Profit-cfd754931df449eaa9a207e38d3e0a54 + * @test npx ts-node --transpile-only cli/testAdapter.ts fees lista-slisbnb + */ + +const ListaStakeManagerAddress = "0x1adB950d8bB3dA4bE104211D5AB038628e477fE6"; + +// token +const slisBNB = "0xb0b84d294e0c75a6abe60171b70edeb2efd14a1b"; + +const fetch = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + + const logs_reward = await options.getLogs({ + target: ListaStakeManagerAddress, + eventAbi: "event RewardsCompounded(uint256 _amount)", + }); + + logs_reward.forEach((log) => { + const amount = log._amount; + dailyFees.add(slisBNB, amount); + }); + + return { + dailyFees, + dailyRevenue: dailyFees, + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.BSC]: { + fetch, + start: 1693361953, + }, + }, +}; + +export default adapter; From 486488bb8a1bdc826534ed34d79781278e70763a Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 3 Sep 2024 14:44:45 +0100 Subject: [PATCH 1339/1590] butter --- dexs/butterxyz/index.ts | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/dexs/butterxyz/index.ts b/dexs/butterxyz/index.ts index 793a5c8ea7..91801b06c2 100644 --- a/dexs/butterxyz/index.ts +++ b/dexs/butterxyz/index.ts @@ -1,25 +1,22 @@ -import { SimpleAdapter } from '../../adapters/types'; -import { CHAIN } from '../../helpers/chains'; -import { getGraphDimensions } from '../../helpers/getUniSubgraph'; +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; -const dimensions = getGraphDimensions({ +const dimensions = getGraphDimensions2({ graphUrls: { - [CHAIN.MANTLE]: 'https://graph.butter.xyz/subgraphs/name/butterxyz/v3-subgraph', + [CHAIN.MANTLE]: + "https://graph.butter.xyz/subgraphs/name/butterxyz/v3-subgraph", }, totalVolume: { - factory: 'factories', - field: 'totalVolumeUSD', + factory: "factories", + field: "totalVolumeUSD", }, - dailyVolume: { - factory: 'butterDayData', - field: 'volumeUSD', - }, - dailyFees: { - factory: 'butterDayData', - field: 'feesUSD', + totalFees: { + factory: "factories", + field: "totalFeesUSD", }, feesPercent: { - type: 'fees', + type: "fees", ProtocolRevenue: 0, HoldersRevenue: 0, Fees: 0, @@ -35,6 +32,6 @@ export default { [CHAIN.MANTLE]: { fetch: dimensions(CHAIN.MANTLE), start: 1702339200, - } - } + }, + }, } as SimpleAdapter; From fa3104b5900ff4163bfec92e17d9416a806a0f47 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 3 Sep 2024 14:51:36 +0100 Subject: [PATCH 1340/1590] champagne --- dexs/carthage/index.ts | 16 ++++------------ dexs/champagneswap/index.ts | 19 +++++++------------ 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/dexs/carthage/index.ts b/dexs/carthage/index.ts index 4d5de83f59..d6f8f45669 100644 --- a/dexs/carthage/index.ts +++ b/dexs/carthage/index.ts @@ -1,16 +1,12 @@ import { BreakdownAdapter } from "../../adapters/types"; - const { - getChainVolume, + getChainVolume2, DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, } = require("../../helpers/getUniSubgraphVolume"); - const { CANDLE } = require("../../helpers/chains"); - const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); - const v3Endpoints = { [CANDLE]: "https://thegraph.cndlchain.com/subgraphs/name/ianlapham/uniswap-v3-test", @@ -18,7 +14,7 @@ const v3Endpoints = { const VOLUME_USD = "volumeUSD"; -const v3Graphs = getChainVolume({ +const v3Graphs = getChainVolume2({ graphUrls: { ...v3Endpoints, }, @@ -26,10 +22,6 @@ const v3Graphs = getChainVolume({ factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, }); const adapter: BreakdownAdapter = { @@ -42,8 +34,8 @@ const adapter: BreakdownAdapter = { endpoints: v3Endpoints, chain: CANDLE, volumeField: VOLUME_USD, - }) - } + }), + }, }, }, }; diff --git a/dexs/champagneswap/index.ts b/dexs/champagneswap/index.ts index 72debaafb7..291db63998 100644 --- a/dexs/champagneswap/index.ts +++ b/dexs/champagneswap/index.ts @@ -1,21 +1,20 @@ import * as sdk from "@defillama/sdk"; import { DISABLED_ADAPTER_KEY, SimpleAdapter } from "../../adapters/types"; import disabledAdapter from "../../helpers/disabledAdapter"; - const { - getChainVolume, + getChainVolume2, DEFAULT_TOTAL_VOLUME_FIELD, - DEFAULT_DAILY_VOLUME_FIELD, } = require("../../helpers/getUniSubgraphVolume"); const { BSC } = require("../../helpers/chains"); const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); + const endpoints = { - [BSC]: sdk.graph.modifyEndpoint('9gXThrkBPCRnK5ncBGySQJZoFUUSC5RDAYYciEZ323Pj'), + [BSC]: sdk.graph.modifyEndpoint( + "9gXThrkBPCRnK5ncBGySQJZoFUUSC5RDAYYciEZ323Pj", + ), }; -const DAILY_VOLUME_FACTORY = "champagneDayData"; - -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: { [BSC]: endpoints[BSC], }, @@ -23,10 +22,6 @@ const graphs = getChainVolume({ factory: "champagneFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - }, }); const adapter: SimpleAdapter = { @@ -38,7 +33,7 @@ const adapter: SimpleAdapter = { start: getStartTimestamp({ endpoints, chain: BSC, - dailyDataField: `${DAILY_VOLUME_FACTORY}s`, + dailyDataField: `champagneDayDatas`, }), }, }, From d2dc464ecf773055378b7499818321ed5aa464be Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 3 Sep 2024 15:07:46 +0100 Subject: [PATCH 1341/1590] crescent --- dexs/cherryswap/index.ts | 11 ++--------- dexs/crescent-swap/index.ts | 8 ++------ 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/dexs/cherryswap/index.ts b/dexs/cherryswap/index.ts index ee4a734055..e17f5a39b3 100644 --- a/dexs/cherryswap/index.ts +++ b/dexs/cherryswap/index.ts @@ -1,4 +1,4 @@ -import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import request, { gql } from "graphql-request"; import { SimpleAdapter } from "../../adapters/types"; @@ -39,19 +39,12 @@ const getCustomBlock = async (timestamp: number) => { return block; }; -const DAILY_VOLUME_FACTORY = "uniswapDayData"; - -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "uniswapFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - dateField: 'date' - }, getCustomBlock, }); diff --git a/dexs/crescent-swap/index.ts b/dexs/crescent-swap/index.ts index 9529856e85..7f68b79088 100644 --- a/dexs/crescent-swap/index.ts +++ b/dexs/crescent-swap/index.ts @@ -1,22 +1,18 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('8kFH5we1wSUT75VDWWyCB2Nqivawf6QaCE8L5k56nrfy'), }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "volumeUSD", - }, }); const adapter: SimpleAdapter = { From 7f81d25a65087b9ef7b1d17d92a8008ff3775e8c Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 3 Sep 2024 15:13:16 +0100 Subject: [PATCH 1342/1590] dackie --- dexs/cryptoswap/index.ts | 17 ++++++----------- dexs/dackieswap-v2/index.ts | 8 ++------ 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/dexs/cryptoswap/index.ts b/dexs/cryptoswap/index.ts index 925b5dc7f7..f7b5b3e6ba 100644 --- a/dexs/cryptoswap/index.ts +++ b/dexs/cryptoswap/index.ts @@ -1,8 +1,7 @@ import * as sdk from "@defillama/sdk"; const { - getChainVolume, + getChainVolume2, DEFAULT_TOTAL_VOLUME_FIELD, - DEFAULT_DAILY_VOLUME_FIELD, } = require("../../helpers/getUniSubgraphVolume"); const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); @@ -10,21 +9,17 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.BSC]: sdk.graph.modifyEndpoint('46UXg1gyUFk7q8WrmNEMp7qoc2paiDqy5HpMvF4UQBze'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint( + "46UXg1gyUFk7q8WrmNEMp7qoc2paiDqy5HpMvF4UQBze", + ), }; -const DAILY_VOLUME_FACTORY = "cstdayData"; - -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "cstfactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - }, }); const adapter: SimpleAdapter = { @@ -35,7 +30,7 @@ const adapter: SimpleAdapter = { start: getStartTimestamp({ endpoints, chain: CHAIN.BSC, - dailyDataField: `${DAILY_VOLUME_FACTORY}s`, + dailyDataField: "cstdayDatas", }), }, }, diff --git a/dexs/dackieswap-v2/index.ts b/dexs/dackieswap-v2/index.ts index 5d27c7663b..595317504d 100644 --- a/dexs/dackieswap-v2/index.ts +++ b/dexs/dackieswap-v2/index.ts @@ -2,7 +2,7 @@ import customBackfill from "../../helpers/customBackfill"; import {CHAIN} from "../../helpers/chains"; import type {ChainEndpoints, SimpleAdapter} from "../../adapters/types"; import type {Chain} from "@defillama/sdk/build/general"; -import {getGraphDimensions} from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2} from "../../helpers/getUniSubgraph"; // Subgraphs endpoints const endpoints: ChainEndpoints = { @@ -16,16 +16,12 @@ const endpoints: ChainEndpoints = { }; // Fetch function to query the subgraphs -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "pancakeFactories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "pancakeDayData", - field: "dailyVolumeUSD", - }, feesPercent: { type: "volume", UserFees: 0.25, From 12f1d9695e2ce1f86373050cbce8c18a79bc6e6e Mon Sep 17 00:00:00 2001 From: Kotevode Date: Tue, 3 Sep 2024 18:18:31 +0400 Subject: [PATCH 1343/1590] TON Hedge volumes adapter --- options/ton-hedge/index.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 options/ton-hedge/index.ts diff --git a/options/ton-hedge/index.ts b/options/ton-hedge/index.ts new file mode 100644 index 0000000000..f62a654cc4 --- /dev/null +++ b/options/ton-hedge/index.ts @@ -0,0 +1,18 @@ +// import { Chain } from "@defillama/sdk/build/general"; +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import fetchURL from "../../utils/fetchURL"; + + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.TON]: { + fetch: (timestamp) => fetchURL( + `https://tonhedge.com/api/metrics?timestamp=${timestamp * 1000}` + ), + start: 1719847914, + }, + }, +}; + +export default adapter; From 7874cb9393e98150f4a4d28787e0adb77a240505 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 3 Sep 2024 15:22:07 +0100 Subject: [PATCH 1344/1590] dove --- dexs/dackieswap/index.ts | 15 ++--------- dexs/doveswap/index.ts | 54 +++++++++++++++------------------------- 2 files changed, 22 insertions(+), 47 deletions(-) diff --git a/dexs/dackieswap/index.ts b/dexs/dackieswap/index.ts index 23cc4006e9..80e0130107 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -1,7 +1,6 @@ import { IJSON, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; - -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const v3Endpoint = { [CHAIN.BASE]: @@ -20,24 +19,14 @@ const v3Endpoint = { "https://api.studio.thegraph.com/query/50473/v3-linea/version/latest", }; -const VOLUME_USD = "volumeUSD"; - -const v3Graph = getGraphDimensions({ +const v3Graph = getGraphDimensions2({ graphUrls: v3Endpoint, totalVolume: { factory: "factories", }, - dailyVolume: { - factory: "pancakeDayData", - field: VOLUME_USD, - }, totalFees: { factory: "factories", }, - dailyFees: { - factory: "pancakeDayData", - field: "feesUSD", - }, }); const v3StartTimes = { diff --git a/dexs/doveswap/index.ts b/dexs/doveswap/index.ts index 266e95c726..c8ec1c0b45 100644 --- a/dexs/doveswap/index.ts +++ b/dexs/doveswap/index.ts @@ -1,59 +1,45 @@ import { Chain } from "@defillama/sdk/build/general"; -import { BreakdownAdapter, FetchResultGeneric, BaseAdapter } from "../../adapters/types"; +import { BreakdownAdapter, BaseAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getStartTimestamp } from "../../helpers/getStartTimestamp"; - import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, -} from "../../helpers/getUniSubgraph" -import { type } from "os"; - + getGraphDimensions2, +} from "../../helpers/getUniSubgraph"; const v3Endpoints = { [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/47443/v3-test/v0.0.5", - }; -const VOLUME_USD = "volumeUSD"; - - -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", ProtocolRevenue: 25, HoldersRevenue: 0, // Holders get no revenue directly for now because buy and burn mechanism is in place UserFees: 100, // User fees are 100% of collected fees SupplySideRevenue: 75, // 75% of fees are going to LPs - Revenue: 100 // Revenue is 100% of collected fees - } + Revenue: 100, // Revenue is 100% of collected fees + }, }); const methodology = { UserFees: "User pays 0.01%, 0.05%, 0.30%, or 1% on each swap.", ProtocolRevenue: "Protocol has revenue.", SupplySideRevenue: "75% of user fees are distributed among LPs.", - HoldersRevenue: "Holders have no revenue." -} + HoldersRevenue: "Holders have no revenue.", +}; type TStartTime = { [key: string]: number; -} -const startTimeV3:TStartTime = { - [CHAIN.POLYGON_ZKEVM]: 1679875200, - -} +}; +const startTimeV3: TStartTime = { + [CHAIN.POLYGON_ZKEVM]: 1679875200, +}; const adapter: BreakdownAdapter = { version: 2, breakdown: { @@ -64,13 +50,13 @@ const adapter: BreakdownAdapter = { meta: { methodology: { ...methodology, - UserFees: "User pays 0.01%, 0.05%, 0.30%, or 1% on each swap." - } - } - } - return acc - }, {} as BaseAdapter) - } -} + UserFees: "User pays 0.01%, 0.05%, 0.30%, or 1% on each swap.", + }, + }, + }; + return acc; + }, {} as BaseAdapter), + }, +}; export default adapter; From c120fea4ffb87f7ba6d192321c4e5b8c440aa096 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 3 Sep 2024 16:41:18 +0000 Subject: [PATCH 1345/1590] fix sunpump data --- fees/sunpump.ts | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/fees/sunpump.ts b/fees/sunpump.ts index 59dde6ed5b..6203a8f742 100644 --- a/fees/sunpump.ts +++ b/fees/sunpump.ts @@ -1,30 +1,32 @@ +import { time } from "console"; import { Adapter, FetchOptions, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; +import { httpGet } from "../utils/fetchURL"; + +const api = "https://openapi.sunpump.meme/pump-api/api/feeData" +interface IResponse { + date: number; + count: number; + amount: number; +} const adapter: Adapter = { - version: 2, + version: 1, adapter: { [CHAIN.TRON]: { - fetch: (async (options: FetchOptions) => { + fetch: (async (_t: any, _a: any ,options: FetchOptions) => { + const start = options.startOfDay * 1000; + const end = start + 86400; + const startStr = new Date(start).toISOString().split("T")[0]; + const endStr = new Date(end).toISOString().split("T")[0]; + const url = `${api}?fromDate=${startStr}&toDate=${endStr}`; + const res: IResponse[] = (await httpGet(url)).data; const dailyFees = options.createBalances(); - const start = await options.getFromBlock(); - const end = await options.getToBlock(); - const logs = [] - for(let i = start; i <= end; i+=2000) { - const _logs = await options.getLogs({ - target: 'TG9nDZMUtC4LBmrWSdNXNi8xrKzXTMMSKT', - eventAbi: "event TRXReceived(address indexed from,uint256 amount)", - fromBlock: start, - toBlock: start + 2000, - }) - logs.push(..._logs) - } - logs.map((tx: any) => { - dailyFees.addGasToken(tx.amount) - }) - return { dailyFees, dailyRevenue: dailyFees, } + const dayItem = res.find((item) => item.date === start); + dailyFees.addGasToken((dayItem?.amount || 0) * 1e6); + return { dailyFees, dailyRevenue: dailyFees, timestamp: options.startOfDay }; }) as any, - start: 0 + start: 1723334400 }, }, From 523e5424a5b2f40e45e109dc8ba20f0fe093a3af Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 3 Sep 2024 17:21:12 +0000 Subject: [PATCH 1346/1590] fix timestamp --- aggregators/kanalabs/index.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/aggregators/kanalabs/index.ts b/aggregators/kanalabs/index.ts index 169079264d..c00d1b42cd 100644 --- a/aggregators/kanalabs/index.ts +++ b/aggregators/kanalabs/index.ts @@ -1,7 +1,6 @@ import fetchURL from "../../utils/fetchURL"; -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getTimestampAtStartOfNextDayUTC } from "../../utils/date"; const URL = "https://stats.kanalabs.io/transaction/volume"; const TRADE_URL = "https://stats.kanalabs.io/trade/volume"; @@ -21,8 +20,8 @@ export enum KanaChainID { "optimistic" = 12, } -const fetch = (chain: KanaChainID) => async (timestamp: number) => { - const dayTimestamp = getTimestampAtStartOfNextDayUTC(timestamp); +const fetch = (chain: KanaChainID) => async (timestamp: number, _t: any, options: FetchOptions) => { + const dayTimestamp = options.startOfDay + 86400; const data = await fetchURL( `${URL}?timestamp=${dayTimestamp - 1}&chainId=${chain}` ); @@ -33,8 +32,8 @@ const fetch = (chain: KanaChainID) => async (timestamp: number) => { }; }; -const fetchDerivatives = (chain: KanaChainID) => async (timestamp: number) => { - const dayTimestamp = getTimestampAtStartOfNextDayUTC(timestamp); +const fetchDerivatives = (chain: KanaChainID) => async (timestamp: number, _t: any, options: FetchOptions) => { + const dayTimestamp = options.startOfDay + 86400; const data = await fetchURL( `${TRADE_URL}?timestamp=${dayTimestamp - 1}&chainId=${chain}` ); @@ -80,9 +79,9 @@ const adapter: SimpleAdapter = { start: startTimeBlock, }, [CHAIN.APTOS]: { - fetch: async (timestamp: number) => { - const swap = await fetch(KanaChainID.aptos)(timestamp); - const trade = await fetchDerivatives(KanaChainID.aptos)(timestamp); + fetch: async (timestamp: number, _t: any, options: FetchOptions) => { + const swap = await fetch(KanaChainID.aptos)(options.startOfDay, _t, options) + const trade = await fetchDerivatives(KanaChainID.aptos)(options.startOfDay, _t, options); return { dailyVolume: (+swap.dailyVolume + +trade.dailyVolume).toString(), totalVolume: (+swap.totalVolume + +trade.totalVolume).toString(), From b0123433c35d3c28f57a3362611839490725ce67 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Tue, 3 Sep 2024 22:46:46 +0100 Subject: [PATCH 1347/1590] add ethervista --- fees/ethervista.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 fees/ethervista.ts diff --git a/fees/ethervista.ts b/fees/ethervista.ts new file mode 100644 index 0000000000..6f18a30f16 --- /dev/null +++ b/fees/ethervista.ts @@ -0,0 +1,16 @@ +import { Adapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { evmReceivedGasAndTokens } from "../helpers/token"; + +const adapter: Adapter = { + version: 2, + isExpensiveAdapter: true, + adapter: { + [CHAIN.ETHEREUM]: { + fetch: evmReceivedGasAndTokens('0xca90d843288e35beeadfce14e5f906e3f1afc7cb', []), + start: 0, + }, + } +} + +export default adapter; \ No newline at end of file From 95fdaae10ad2d423bbe289932fc234b6f499f52a Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 4 Sep 2024 02:04:36 +0100 Subject: [PATCH 1348/1590] pull some bebop data from dune --- aggregators/bebop/index.ts | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/aggregators/bebop/index.ts b/aggregators/bebop/index.ts index b2da38f483..187b4d44ea 100644 --- a/aggregators/bebop/index.ts +++ b/aggregators/bebop/index.ts @@ -1,7 +1,8 @@ import { ethers } from "ethers"; -import { ChainBlocks, FetchOptions } from "../../adapters/types"; +import { Adapter, ChainBlocks, FetchOptions } from "../../adapters/types"; import { getTransactions } from "../../helpers/getTxReceipts"; import JAM_ABI from "./jamAbi"; +import {queryDuneSql} from "../../helpers/dune" const abis = { "AggregateOrderExecuted": "event AggregateOrderExecuted(bytes32 order_hash)", @@ -43,7 +44,7 @@ const jamAddress = { } -const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions) => { +const fetch = async ({ createBalances, getLogs, chain, api }: FetchOptions) => { const dailyVolume = createBalances() const cowswapData: any = {} const logs = await getLogs({ @@ -86,7 +87,6 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLog const jamLogs = await getLogs({ target: jamAddress[chain] || jamAddress.default, topics: ['0x7a70845dec8dc098eecb16e760b0c1569874487f0459ae689c738e281b28ed38'] // Settlement, - }); const jamData: any = await getTransactions(chain, jamLogs.map((log: any) => log.transactionHash), { cacheKey: 'bebop' }) @@ -105,21 +105,30 @@ const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLog }) } - return { timestamp, dailyVolume } + return { dailyVolume } }; -const adapter: any = { +async function fetchDune(options: FetchOptions){ + const vol = await queryDuneSql(options, `SELECT SUM(amount_usd) AS vol FROM bebop.trades WHERE blockchain = 'CHAIN' AND TIME_RANGE`) + const dailyVolume = options.createBalances() + dailyVolume.addCGToken("tether", vol[0].vol) + return { dailyVolume } +} + +const adapter: Adapter = { + version: 2, + isExpensiveAdapter: true, adapter: { - arbitrum: { fetch, start: 1685491200, }, - ethereum: { fetch, start: 1685491200, }, - polygon: { fetch, start: 1685491200, }, - bsc: { fetch, start: 1685491200, }, + arbitrum: { fetch: fetchDune, start: 1685491200, }, + ethereum: { fetch: fetchDune, start: 1685491200, }, + polygon: { fetch: fetchDune, start: 1685491200, }, + bsc: { fetch: fetchDune, start: 1685491200, }, blast: { fetch, start: 1685491200, }, era: { fetch, start: 1685491200, }, - optimism: { fetch, start: 1685491200, }, + optimism: { fetch: fetchDune, start: 1685491200, }, mode: { fetch, start: 1685491200, }, - base: { fetch, start: 1685491200, }, - scroll: { fetch, start: 1685491200, }, + base: { fetch: fetchDune, start: 1685491200, }, + scroll: { fetch: fetchDune, start: 1685491200, }, taiko: { fetch, start: 1685491200, }, }, }; From 4820ac13006cb948151757e7258fd5d3c2f4cf11 Mon Sep 17 00:00:00 2001 From: plonkai Date: Wed, 4 Sep 2024 10:43:02 +0800 Subject: [PATCH 1349/1590] add tradoor --- dexs/tradoor/index.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 dexs/tradoor/index.ts diff --git a/dexs/tradoor/index.ts b/dexs/tradoor/index.ts new file mode 100644 index 0000000000..911cadc7c5 --- /dev/null +++ b/dexs/tradoor/index.ts @@ -0,0 +1,31 @@ +import { postURL } from "../../utils/fetchURL" +import { CHAIN } from "../../helpers/chains"; +import { FetchOptions } from "../../adapters/types"; + +const endpoint = "https://www.tradoor.io/stats/volume" + + +const fetch = async (options: FetchOptions) => { + const res = await postURL(endpoint, { + "startTime": options.startTimestamp, + "endTime": options.endTimestamp + }) + + return { + dailyVolume: parseInt(res['data']), + timestamp: options.startTimestamp, + }; +}; + + +const adapter: any = { + version: 2, + adapter: { + [CHAIN.TON]: { + fetch, + start: 1716048000, + }, + }, +}; + +export default adapter; From 3804b64c8b86d76a1d7739e9e64ca29557d06f6f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 4 Sep 2024 05:33:22 +0000 Subject: [PATCH 1350/1590] fix spike --- fees/penpie.ts | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/fees/penpie.ts b/fees/penpie.ts index ac4cb77a0c..6421ae0485 100644 --- a/fees/penpie.ts +++ b/fees/penpie.ts @@ -17,6 +17,18 @@ const address_reward: TAddress = { [CHAIN.ETHEREUM]: '0x6E799758CEE75DAe3d84e09D40dc416eCf713652' } const reward_eth_pendle='0x8C237520a8E14D658170A633D96F8e80764433b9' +const exclude: any = { + [CHAIN.ETHEREUM]: [ + '0xd1D7D99764f8a52Aff007b7831cc02748b2013b5', + '0xC374f7eC85F8C7DE3207a10bB1978bA104bdA3B2', + '0x6010676Bc2534652aD1Ef5Fa8073DcF9AD7EBFBe', + '0x038C1b03daB3B891AfbCa4371ec807eDAa3e6eB6' + ], + [CHAIN.BSC]: [], + [CHAIN.ARBITRUM]: [ + '0xa877a0E177b54A37066c1786F91a1DAb68F094AF' + ] +} const address_bribe: TAddress = { [CHAIN.BSC]: '0x6E796bCF2B63b070F9cC0a7D3d857FeF628E9e5b', [CHAIN.ARBITRUM]: '0x8CE523cf1120d9B7703806c745B69663a2847504', @@ -32,10 +44,10 @@ const graph = (chain: Chain) => { (await getLogs({ target:reward_eth_pendle , eventAbi: event_pendle_fee, - fromBlock, + fromBlock, toBlock })).map((e: any) => { - // check if it is penpie + // check if it is penpie if (e.user === '0x6e799758cee75dae3d84e09d40dc416ecf713652') { dailyFees.add(ADDRESSES.null, e.sumTopUp); } @@ -44,18 +56,24 @@ const graph = (chain: Chain) => { (await getLogs({ target: address_reward[chain], eventAbi: event_paid_stream, - fromBlock, + fromBlock, toBlock })).map((e: any) => { - dailyFees.add(e._rewardToken, e._feeAmount) + if (exclude[chain].includes(e._rewardToken)) { + return + } + dailyFees.add(e._rewardToken, e._feeAmount) }), (await getLogs({ target: address_bribe[chain], eventAbi: event_paid_bribe, - fromBlock, + fromBlock, toBlock })).map((e: any) => { - dailyFees.add(e.token, e.amount) + if (exclude[chain].includes(e.token)) { + return + } + dailyFees.add(e.token, e.amount) }) return { dailyFees, dailyRevenue: dailyFees,dailyUserFees:dailyFees }; } @@ -65,7 +83,6 @@ const graph = (chain: Chain) => { const adapter: SimpleAdapter = { version: 2, adapter: { - [CHAIN.BSC]: { fetch: graph(CHAIN.BSC), start: 77678653, From 62d987e53fff28431cefe72b5f6e28ef67b9fdd1 Mon Sep 17 00:00:00 2001 From: grace0950 Date: Wed, 4 Sep 2024 15:13:23 +0800 Subject: [PATCH 1351/1590] add dexs/torch --- dexs/torch/index.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 dexs/torch/index.ts diff --git a/dexs/torch/index.ts b/dexs/torch/index.ts new file mode 100644 index 0000000000..893dc69b82 --- /dev/null +++ b/dexs/torch/index.ts @@ -0,0 +1,23 @@ +import fetchURL from '../../utils/fetchURL' +import { FetchOptions, SimpleAdapter } from '../../adapters/types' + +const fetch = async (options: FetchOptions) => { + const dailyVolumeResult = await fetchURL( + 'https://api.torch.finance/stats/daily-volume', + ) + + return { + dailyVolume: dailyVolumeResult.dailyVolume, + } +} + +const adapter: SimpleAdapter = { + adapter: { + ton: { + fetch, + start: 1725256740, + }, + }, +} + +export default adapter From 463ddf72aba385eef4a848fd8984c75b288a5fdd Mon Sep 17 00:00:00 2001 From: swan-of-bodom <0xHyoga@cygnusdao.finance> Date: Wed, 4 Sep 2024 09:22:14 +0200 Subject: [PATCH 1352/1590] update fees and revenue for impermax-finance --- fees/impermax-finance.ts | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/fees/impermax-finance.ts b/fees/impermax-finance.ts index 33eb712bbd..e59e3cb7da 100644 --- a/fees/impermax-finance.ts +++ b/fees/impermax-finance.ts @@ -1,36 +1,41 @@ import { Adapter } from "../adapters/types"; -import { ARBITRUM, AVAX, CHAIN, ETHEREUM, FANTOM, MOONRIVER, POLYGON } from "../helpers/chains"; +import { CHAIN } from "../helpers/chains"; import fetchURL from "../utils/fetchURL"; // NOTE: the yields server does not return all pools if liquidity is too low, which // may result in calculated fees and revenue being lower than what is real -const yieldPool = "https://yields.llama.fi/pools"; +const borrowPool = "https://yields.llama.fi/poolsBorrow"; const methodology = { Fees: "Fees are calculated as 90% of the borrowing fees for qualified pools, paid by the borrowers to the lenders.", Revenue: "Revenue is the remaining 10% of all collected borrowing fees and go to the protocol.", } -interface IYield { - apyBase: number; - project: string; - tvlUsd: number; - chain: string; -}; +interface IPoolBorrow { + chain: string, + project: string, + pool: string, + totalSupplyUsd: number, + totalBorrowUsd: number, + tvlUsd: number, + apyBase: number + apyBaseBorrow: number +} const graphs = () => { return (chain: CHAIN) => { return async (timestamp: number) => { - const poolsCall: IYield[] = (await fetchURL(yieldPool))?.data; + const poolsCall: IPoolBorrow[] = (await fetchURL(borrowPool))?.data; + const pools = poolsCall - .filter((e: IYield) => e.project === "impermax-finance") - .filter((e: IYield) => e.chain.toLowerCase() === chain.toLowerCase()); + .filter((e: IPoolBorrow) => e.project === "impermax-finance") + .filter((e: IPoolBorrow) => e.chain.toLowerCase() === chain.toLowerCase()); // Fees and revenue is derived from borrowing fees: 90% of the borrowing fees // go to the lenders, and 10% is routed to the treasury as revenue const fees = pools - .map(pool => pool.tvlUsd * pool.apyBase / 100 / 365) - .reduce((prev, curr) => prev + curr, 0) / .9; + .map(pool => pool.totalBorrowUsd * pool.apyBaseBorrow / 100 / 365) + .reduce((prev, curr) => prev + curr, 0); const revenue = fees * .1; return { timestamp, @@ -124,6 +129,14 @@ const adapter: Adapter = { methodology } }, + [CHAIN.OPTIMISM]: { + fetch: graphs()(CHAIN.OPTIMISM), + runAtCurrTime: true, + start: 1698019200, + meta: { + methodology + } + }, }, } From 5ea2555cfbc947315ba08e1c72ad552eb530d831 Mon Sep 17 00:00:00 2001 From: grace0950 Date: Wed, 4 Sep 2024 17:16:49 +0800 Subject: [PATCH 1353/1590] add fees/torch --- fees/torch/index.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 fees/torch/index.ts diff --git a/fees/torch/index.ts b/fees/torch/index.ts new file mode 100644 index 0000000000..d97564ff72 --- /dev/null +++ b/fees/torch/index.ts @@ -0,0 +1,34 @@ +import { FetchResultV2 } from '../../adapters/types' +import { CHAIN } from '../../helpers/chains' +import fetchURL, { postURL } from '../../utils/fetchURL' + +const fetchFees = async (): Promise => { + const dailyFeesResult = await fetchURL( + 'https://api.torch.finance/stats/daily-fees', + ) + + return { + dailyFees: dailyFeesResult.dailyUserFees, + dailyUserFees: dailyFeesResult.dailyUserFees, + dailyRevenue: dailyFeesResult.dailyRevenue, + dailySupplySideRevenue: dailyFeesResult.dailySupplySideRevenue + } +} + +export default { + version: 2, + adapter: { + [CHAIN.TON]: { + start: 1700000000, + meta: { + methodology: { + UserFees: 'User pays fee on each swap (depends on pool, 0.1% - 1%).', + Revenue: 'Protocol receives 50% of fees.', + SupplySideRevenue: + '50% of user fees are paid to liquidity providers, increasing the pool size.', + }, + }, + fetch: fetchFees, + }, + }, +} From 02b5a4e225bf96ff0e5a57c8c0ee85ac72ab8164 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 4 Sep 2024 12:49:17 +0000 Subject: [PATCH 1354/1590] fix balancer dexs --- dexs/balancer/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dexs/balancer/index.ts b/dexs/balancer/index.ts index 9a6138d775..a611d21995 100644 --- a/dexs/balancer/index.ts +++ b/dexs/balancer/index.ts @@ -38,14 +38,16 @@ interface IPoolSnapshot { const v2Graphs = (chain: Chain) => { - return async ({ toTimestamp, fromTimestamp }: FetchOptions): Promise => { + return async ({ startOfDay }: FetchOptions): Promise => { + const start = startOfDay - 86400; // 1 day before the start of the day to get the volume of the day before + const end = startOfDay; const graphQuery = gql `query fees { - today:poolSnapshots(where: {timestamp:${toTimestamp}, protocolFee_gt:0}, orderBy:swapFees, orderDirection: desc) { + today:poolSnapshots(where: {timestamp:${end}, protocolFee_gt:0}, orderBy:swapFees, orderDirection: desc) { id swapVolume } - yesterday:poolSnapshots(where: {timestamp:${fromTimestamp}, protocolFee_gt:0}, orderBy:swapFees, orderDirection: desc) { + yesterday:poolSnapshots(where: {timestamp:${start}, protocolFee_gt:0}, orderBy:swapFees, orderDirection: desc) { id swapVolume } From f22bac6ef372c7918ede11e2a2bc526fb298a2b2 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 4 Sep 2024 14:12:21 +0100 Subject: [PATCH 1355/1590] bal v2 --- dexs/balancer/index.ts | 127 +++++++++++++++++++++++------------------ 1 file changed, 73 insertions(+), 54 deletions(-) diff --git a/dexs/balancer/index.ts b/dexs/balancer/index.ts index a611d21995..d87a4f3797 100644 --- a/dexs/balancer/index.ts +++ b/dexs/balancer/index.ts @@ -1,23 +1,41 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; -import { BaseAdapter, BreakdownAdapter, ChainEndpoints, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { + BaseAdapter, + BreakdownAdapter, + ChainEndpoints, + FetchOptions, + FetchResultV2, +} from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints: ChainEndpoints = { - [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('C4ayEZP2yTXRAB8vSaTrgN4m9anTe9Mdm2ViyiAuV9TV'), - [CHAIN.POLYGON]: - sdk.graph.modifyEndpoint('78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN'), - [CHAIN.ARBITRUM]: - sdk.graph.modifyEndpoint('itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc'), - [CHAIN.XDAI]: sdk.graph.modifyEndpoint('EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg'), - [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest", - [CHAIN.AVAX]: sdk.graph.modifyEndpoint('7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu'), - [CHAIN.BASE]: "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest", - [CHAIN.MODE]: "https://api.studio.thegraph.com/query/75376/balancer-mode-v2/version/latest", - [CHAIN.FRAXTAL]: "https://api.goldsky.com/api/public/project_clwhu1vopoigi01wmbn514m1z/subgraphs/balancer-fraxtal-v2/latest/gn" + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint( + "C4ayEZP2yTXRAB8vSaTrgN4m9anTe9Mdm2ViyiAuV9TV", + ), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint( + "78nZMyM9yD77KG6pFaYap31kJvj8eUWLEntbiVzh8ZKN", + ), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint( + "itkjv6Vdh22HtNEPQuk5c9M3T7VeGLQtXxcH8rFi1vc", + ), + [CHAIN.XDAI]: sdk.graph.modifyEndpoint( + "EJezH1Cp31QkKPaBDerhVPRWsKVZLrDfzjrLqpmv6cGg", + ), + [CHAIN.POLYGON_ZKEVM]: + "https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest", + [CHAIN.AVAX]: sdk.graph.modifyEndpoint( + "7asfmtQA1KYu6CP7YVm5kv4bGxVyfAHEiptt2HMFgkHu", + ), + [CHAIN.BASE]: + "https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest", + [CHAIN.MODE]: + "https://api.studio.thegraph.com/query/75376/balancer-mode-v2/version/latest", + [CHAIN.FRAXTAL]: + "https://api.goldsky.com/api/public/project_clwhu1vopoigi01wmbn514m1z/subgraphs/balancer-fraxtal-v2/latest/gn", }; const graphParams = { @@ -26,52 +44,53 @@ const graphParams = { field: "totalSwapVolume", }, hasDailyVolume: false, -} -interface IPool { - id: string; - swapVolume: string; -} +}; interface IPoolSnapshot { - today: IPool[]; - yesterday: IPool[]; + today: { totalSwapVolume: number }[]; + yesterday: { totalSwapVolume: number }[]; } - const v2Graphs = (chain: Chain) => { - return async ({ startOfDay }: FetchOptions): Promise => { - const start = startOfDay - 86400; // 1 day before the start of the day to get the volume of the day before - const end = startOfDay; - const graphQuery = gql - `query fees { - today:poolSnapshots(where: {timestamp:${end}, protocolFee_gt:0}, orderBy:swapFees, orderDirection: desc) { - id - swapVolume - } - yesterday:poolSnapshots(where: {timestamp:${start}, protocolFee_gt:0}, orderBy:swapFees, orderDirection: desc) { - id - swapVolume - } + return async ({ + getFromBlock, + getToBlock, + }: FetchOptions): Promise => { + const [fromBlock, toBlock] = await Promise.all([ + getFromBlock(), + getToBlock(), + ]); + const graphQuery = gql`query fees { + today:balancers(block: { number: ${toBlock}}) { totalSwapVolume } + yesterday:balancers(block: { number: ${fromBlock}}) { totalSwapVolume } }`; - // const blackList = ['0x93d199263632a4ef4bb438f1feb99e57b4b5f0bd0000000000000000000005c2'] - const graphRes: IPoolSnapshot = (await request(endpoints[chain], graphQuery)); - const dailyVolume = graphRes["today"].map((p: IPool) => { - const yesterdayValue = Number(graphRes.yesterday.find((e: IPool) => e.id.split('-')[0] === p.id.split('-')[0])?.swapVolume || '0') - if (yesterdayValue === 0) return 0; - return Number(p.swapVolume) - yesterdayValue; - }).filter(e => e < 100_000_000).reduce((a: number, b: number) => a + b, 0) - return { - dailyVolume: `${dailyVolume}`, - }; + const graphRes: IPoolSnapshot = await request(endpoints[chain], graphQuery); + + const totalVolume = graphRes.today.reduce( + (p, c) => p + c.totalSwapVolume, + 0, + ); + const previousVolume = graphRes.yesterday.reduce( + (p, c) => p + c.totalSwapVolume, + 0, + ); + + const dailyVolume = totalVolume - previousVolume; + + return { + dailyVolume, + totalVolume, }; }; - +}; const v1graphs = getChainVolume2({ graphUrls: { - [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB') + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint( + "93yusydMYauh7cfe9jEfoGABmwnX4GffHd7in8KJi1XB", + ), }, - ...graphParams + ...graphParams, }); const adapter: BreakdownAdapter = { @@ -80,7 +99,7 @@ const adapter: BreakdownAdapter = { v1: { [CHAIN.ETHEREUM]: { fetch: v1graphs(CHAIN.ETHEREUM), - start: 1582761600 + start: 1582761600, }, }, v2: Object.keys(endpoints).reduce((acc, chain) => { @@ -92,13 +111,13 @@ const adapter: BreakdownAdapter = { endpoints, chain: chain, dailyDataField: `balancerSnapshots`, - dateField: 'timestamp', - volumeField: 'totalSwapVolume' + dateField: "timestamp", + volumeField: "totalSwapVolume", }), - } - } - }, {} as BaseAdapter) - } -} + }, + }; + }, {} as BaseAdapter), + }, +}; export default adapter; From 8eec0950b3d9e02d6db091a8189384310ef55690 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 4 Sep 2024 16:43:47 +0000 Subject: [PATCH 1356/1590] fix adapter --- dexs/seiyan-fun/index.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/dexs/seiyan-fun/index.ts b/dexs/seiyan-fun/index.ts index eb0a247378..6491a70dce 100644 --- a/dexs/seiyan-fun/index.ts +++ b/dexs/seiyan-fun/index.ts @@ -1,9 +1,6 @@ import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; -import { - getTimestampAtStartOfDayUTC, - getTimestampAtStartOfNextDayUTC, -} from "../../utils/date"; +import { FetchOptions } from "../../adapters/types"; const SEIYAN_FUN_BASE_URL = "https://seiyan.fun/api/public/v1"; const SEI_PACIFIC_CAIP_CHAIN_ID = "cosmos:sei-pacific-1"; @@ -12,13 +9,12 @@ const SEIYAN_FUN_INITIAL_TIMESTAMP = 1722470400; // 2024-08-01 00:00:00 UTC const buildTradingVolumeUrl = (startAt: number, endAt: number) => `${SEIYAN_FUN_BASE_URL}/trading-volume?caipChainID=${SEI_PACIFIC_CAIP_CHAIN_ID}&startAt=${startAt}&endAt=${endAt}`; -const fetch = async (timestamp: number) => { - const dayStart = getTimestampAtStartOfDayUTC(timestamp); - const nextDayStart = getTimestampAtStartOfNextDayUTC(timestamp); +const fetch = async (timestamp: number, _t: any, options: FetchOptions) => { + const dayStart = options.startOfDay; + const nextDayStart = dayStart + 86400; const url = buildTradingVolumeUrl(dayStart, nextDayStart); - - const { volume } = await fetchURL(url); - + console.log("fetching seiyan fun", url); + const { volume }= await fetchURL(url); return { dailyVolume: volume, timestamp, From 9368203e3a7f3044fbabb444ebeb36eb3b56b640 Mon Sep 17 00:00:00 2001 From: Maru Date: Wed, 4 Sep 2024 20:46:03 +0400 Subject: [PATCH 1357/1590] end timestamp added --- options/ton-hedge/index.ts | 18 ------------------ protocols/ton-hedge.ts | 29 +++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 18 deletions(-) delete mode 100644 options/ton-hedge/index.ts create mode 100644 protocols/ton-hedge.ts diff --git a/options/ton-hedge/index.ts b/options/ton-hedge/index.ts deleted file mode 100644 index f62a654cc4..0000000000 --- a/options/ton-hedge/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -// import { Chain } from "@defillama/sdk/build/general"; -import { SimpleAdapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import fetchURL from "../../utils/fetchURL"; - - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.TON]: { - fetch: (timestamp) => fetchURL( - `https://tonhedge.com/api/metrics?timestamp=${timestamp * 1000}` - ), - start: 1719847914, - }, - }, -}; - -export default adapter; diff --git a/protocols/ton-hedge.ts b/protocols/ton-hedge.ts new file mode 100644 index 0000000000..4f30e1adfc --- /dev/null +++ b/protocols/ton-hedge.ts @@ -0,0 +1,29 @@ +// import { Chain } from "@defillama/sdk/build/general"; +import { SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import fetchURL from "../utils/fetchURL"; + + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.TON]: { + fetch: async (timestamp) => { + const result = await fetchURL( + `https://tonhedge.com/api/metrics?timestamp=${timestamp * 1000}` + ) + return { + ...result, + timestamp + } + }, + start: 1719847914, + meta: { + methodology: { + Volume: "Total costs + payouts", + } + } + }, + }, +}; + +export default adapter; From 5477136a719bb5e388885a68990c8eca802ed6b6 Mon Sep 17 00:00:00 2001 From: Maru Date: Wed, 4 Sep 2024 20:47:09 +0400 Subject: [PATCH 1358/1590] end timestamp added --- protocols/ton-hedge.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/ton-hedge.ts b/protocols/ton-hedge.ts index 4f30e1adfc..45f6db304f 100644 --- a/protocols/ton-hedge.ts +++ b/protocols/ton-hedge.ts @@ -7,7 +7,7 @@ import fetchURL from "../utils/fetchURL"; const adapter: SimpleAdapter = { adapter: { [CHAIN.TON]: { - fetch: async (timestamp) => { + fetch: async (timestamp: number) => { const result = await fetchURL( `https://tonhedge.com/api/metrics?timestamp=${timestamp * 1000}` ) From 02d05793c1f3b34dd38c29429780b47fd5956eaa Mon Sep 17 00:00:00 2001 From: Lawson Graham Date: Wed, 4 Sep 2024 21:23:57 -0700 Subject: [PATCH 1359/1590] add fees for echelon market --- fees/echelon.ts | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 fees/echelon.ts diff --git a/fees/echelon.ts b/fees/echelon.ts new file mode 100644 index 0000000000..af3f4abcd9 --- /dev/null +++ b/fees/echelon.ts @@ -0,0 +1,47 @@ +import fetchURL from "../utils/fetchURL"; +import { SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const thalaDappURL = "https://app.echelon.market"; +const feesQueryURL = `${thalaDappURL}/api/defillama/fees?timeframe=`; + +interface IVolumeall { + value: number; + timestamp: string; +} + +const feesEndpoint = (endTimestamp: number, timeframe: string) => + endTimestamp + ? feesQueryURL + timeframe + `&endTimestamp=${endTimestamp}` + : feesQueryURL + timeframe; + +const fetch = async (timestamp: number) => { + const dayFeesQuery = (await fetchURL(feesEndpoint(timestamp, "1D")))?.data; + const dailyFees = dayFeesQuery.reduce( + (partialSum: number, a: IVolumeall) => partialSum + a.value, + 0 + ); + + const totalFeesQuery = (await fetchURL(feesEndpoint(0, "ALL")))?.data; + const totalFees = totalFeesQuery.reduce( + (partialSum: number, a: IVolumeall) => partialSum + a.value, + 0 + ); + + return { + totalFees: `${totalFees}`, + dailyFees: `${dailyFees}`, + timestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.APTOS]: { + fetch, + start: async () => 1680480000, + }, + }, +}; + +export default adapter; From c51315935daec0df77d232c0eb2e2d4c2dbbd543 Mon Sep 17 00:00:00 2001 From: ideapacito Date: Thu, 5 Sep 2024 15:55:00 +0700 Subject: [PATCH 1360/1590] add dexs of fwx-dex and update helper functions --- dexs/fwx-dex/index.ts | 27 ++++++++++++++ helpers/getUniSubgraphVolume.ts | 63 ++++++++++++++++++++++++++------- 2 files changed, 77 insertions(+), 13 deletions(-) create mode 100644 dexs/fwx-dex/index.ts diff --git a/dexs/fwx-dex/index.ts b/dexs/fwx-dex/index.ts new file mode 100644 index 0000000000..81cd2336ee --- /dev/null +++ b/dexs/fwx-dex/index.ts @@ -0,0 +1,27 @@ +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; + +const adapters = univ2Adapter( + { + [CHAIN.AVAX]: + "https://subgraphs.fwx.finance/avac/subgraphs/name/fwx-exchange-avac", + [CHAIN.BASE]: + "https://subgraphs.fwx.finance/base/subgraphs/name/fwx-exchange-base-prod", + }, + { + factoriesName: "pancakeDayDatas", + totalVolumeFilterParams: [ + { + name: "id", + type: "Int", + }, + ], + dayData: "pancakeDayData", + hasDailyVolume: true, + } +); + +adapters.adapter.avax.start = 1717632000; +adapters.adapter.base.start = 1725408000; + +export default adapters; diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index f3a10737f6..169d375d87 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -1,7 +1,6 @@ import { Chain } from "@defillama/sdk/build/general"; import { request, gql } from "graphql-request"; -import { getBlock } from "./getBlock"; -import { BaseAdapter, ChainBlocks, FetchOptions } from "../adapters/types"; +import { BaseAdapter, FetchOptions } from "../adapters/types"; import { SimpleAdapter } from "../adapters/types"; import { DEFAULT_DATE_FIELD, getStartTimestamp } from "./getStartTimestamp"; import { Balances } from "@defillama/sdk"; @@ -32,13 +31,19 @@ const DEFAULT_DAILY_VOLUME_FACTORY = "uniswapDayData"; const DEFAULT_DAILY_VOLUME_FIELD = "dailyVolumeUSD"; const DEFAULT_DAILY_DATE_FIELD = "date"; +interface IGetChainVolumeFilterParams { + name: string, + type: string +} + interface IGetChainVolumeParams { graphUrls: { [chains: string]: string }, totalVolume: { factory: string, - field: string + field: string, + filterParams?: IGetChainVolumeFilterParams[], }, dailyVolume?: { factory: string, @@ -67,12 +72,21 @@ function getChainVolume({ hasTotalVolume = true, getCustomBlock = undefined, }: IGetChainVolumeParams) { - const totalVolumeQuery = gql` - ${totalVolume.factory}( - block: { number: $block } - ) { - ${totalVolume.field} - } + const totalVolumeQuery = totalVolume.filterParams + ? gql`query get_total_volume(${totalVolume.filterParams.map(item => `$${item.name}: ${item.type}`).join(', ')}) { + ${totalVolume.factory}( + where: {${totalVolume.filterParams.map(item => `${item.name}: $${item.name}`).join(', ')}} + ) { + ${totalVolume.field} + } + } + ` : gql`query get_total_volume($block: Int) { + ${totalVolume.factory}( + block: { number: $block } + ) { + ${totalVolume.field} + } + } `; const dailyVolumeQuery = @@ -89,7 +103,7 @@ function getChainVolume({ } }`; - const graphQueryTotalVolume = gql`${hasTotalVolume ? `query get_total_volume($block: Int) { ${totalVolumeQuery} }` : ""}` + const graphQueryTotalVolume = gql`${hasTotalVolume ? totalVolumeQuery : ""}` const graphQueryDailyVolume = gql`${hasDailyVolume ? `query get_daily_volume($id: Int) { ${dailyVolumeQuery} }` : ""}`; return (chain: Chain) => { @@ -100,7 +114,22 @@ function getChainVolume({ console.log(wrapGraphError(e).message), )) ?? undefined; const id = getUniswapDateId(new Date(endTimestamp * 1000)); - const graphResTotal = hasTotalVolume ? await request(graphUrls[chain], graphQueryTotalVolume, { block }).catch(e => { + let graphQueryTodayTotalVolumeVariables: { [key: string]: any } = {} + let graphQueryYesterdayTotalVolumeVariables: { [key: string]: any } = {} + if (totalVolume.filterParams) { + totalVolume.filterParams.forEach((item) => { + switch (item.name) { + case "id": + graphQueryTodayTotalVolumeVariables["id"] = id; + graphQueryYesterdayTotalVolumeVariables["id"] = id-1 + default: + } + }); + } else { + graphQueryTodayTotalVolumeVariables = { block } + } + + const graphResTotal = hasTotalVolume ? await request(graphUrls[chain], graphQueryTotalVolume, graphQueryTodayTotalVolumeVariables).catch(e => { try { return JSON.parse(e.response.error).data } catch (error) { @@ -129,8 +158,12 @@ function getChainVolume({ if (!hasDailyVolume) { const fromBlock = await getFromBlock() const toBlock = await getToBlock(); + if (!totalVolume.filterParams) { + graphQueryTodayTotalVolumeVariables["block"] = toBlock; + graphQueryYesterdayTotalVolumeVariables["block"] = fromBlock + } try { - const [yesterdayResult, todayResult] = await Promise.all([request(graphUrls[chain], graphQueryTotalVolume, { block: fromBlock }), request(graphUrls[chain], graphQueryTotalVolume, { block: toBlock })]) + const [yesterdayResult, todayResult] = await Promise.all([request(graphUrls[chain], graphQueryTotalVolume, graphQueryYesterdayTotalVolumeVariables), request(graphUrls[chain], graphQueryTotalVolume, graphQueryTodayTotalVolumeVariables)]) 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; @@ -252,9 +285,11 @@ function univ2Adapter(endpoints: { factoriesName = DEFAULT_TOTAL_VOLUME_FACTORY, dayData = DEFAULT_DAILY_VOLUME_FACTORY, totalVolume = DEFAULT_TOTAL_VOLUME_FIELD, + totalVolumeFilterParams = undefined as IGetChainVolumeFilterParams[] | undefined, dailyVolume = DEFAULT_DAILY_VOLUME_FIELD, dailyVolumeTimestampField = DEFAULT_DATE_FIELD, hasTotalVolume = true, + hasDailyVolume = undefined as boolean|undefined, gasToken = null as string|null }) { const graphs = (gasToken === null ? getChainVolume : getChainVolumeWithGasToken as typeof getChainVolume)({ @@ -262,13 +297,15 @@ function univ2Adapter(endpoints: { hasTotalVolume, totalVolume: { factory: factoriesName, - field: totalVolume + field: totalVolume, + filterParams: totalVolumeFilterParams }, dailyVolume: { factory: dayData, field: dailyVolume, dateField: dailyVolumeTimestampField }, + hasDailyVolume, priceToken: gasToken } as any); From fda7b361a029745253f131515ca8604d45f69d19 Mon Sep 17 00:00:00 2001 From: ideapacito Date: Thu, 5 Sep 2024 16:36:34 +0700 Subject: [PATCH 1361/1590] add fees of fwx-dex and update helper functions --- fees/fwx-dex/index.ts | 80 +++++++++++++++++++++++++++++++++ helpers/getUniSubgraph/index.ts | 36 +++++++++++++-- 2 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 fees/fwx-dex/index.ts diff --git a/fees/fwx-dex/index.ts b/fees/fwx-dex/index.ts new file mode 100644 index 0000000000..97bde0a1f7 --- /dev/null +++ b/fees/fwx-dex/index.ts @@ -0,0 +1,80 @@ +import * as sdk from "@defillama/sdk"; +import { CHAIN } from "../../helpers/chains"; +import { univ2DimensionAdapter } from "../../helpers/getUniSubgraph"; +import { SimpleAdapter } from "../../adapters/types"; + +const chainConfigs = { + [CHAIN.AVAX]: { + graphUrl: + "https://subgraphs.fwx.finance/avac/subgraphs/name/fwx-exchange-avac", + feesPercent: { + UserFees: 0.1, + Fees: 0.1, + SupplySideRevenue: 0.075, + ProtocolRevenue: 0.025, + Revenue: 0.025, + }, + methodology: { + UserFees: "User pays 0.1% fees on each swap", + Fees: "A 0.1% of each swap is collected as trading fees", + SupplySideRevenue: + "A 0.075% from each swap is distributed to liquidity providers", + ProtocolRevenue: "A 0.025% fees goes to FWX treasury", + Revenue: "Governance revenue is 0.025% trading fees", + }, + start: 1717632000, + }, + [CHAIN.BASE]: { + graphUrl: + "https://subgraphs.fwx.finance/base/subgraphs/name/fwx-exchange-base-prod", + feesPercent: { + UserFees: 0.25, + Fees: 0.25, + SupplySideRevenue: 0.20833, + ProtocolRevenue: 0.04167, + Revenue: 0.04167, + }, + methodology: { + UserFees: "User pays 0.25% fees on each swap", + Fees: "A 0.25% of each swap is collected as trading fees", + SupplySideRevenue: + "A 0.20833% from each swap is distributed to liquidity providers", + ProtocolRevenue: "A 0.04167% fees goes to FWX treasury", + Revenue: "Governance revenue is 0.04167% trading fees", + }, + start: 1725408000, + }, +}; + +const adapters: SimpleAdapter = { + adapter: {}, + version: 2, +}; + +Object.entries(chainConfigs).reduce((acc, [chain, value]) => { + adapters.adapter[chain] = { + ...univ2DimensionAdapter( + { + graphUrls: { + [chain]: sdk.graph.modifyEndpoint(value.graphUrl), + }, + dailyVolume: { + factory: "pancakeDayData", + }, + totalVolume: { + factory: "pancakeDayDatas", + filterParams: [{ + name: "id", + type: "Int" + }] + }, + feesPercent: { ...value.feesPercent, type: "volume" }, + }, + { methodology: value.methodology } + ).adapter[chain], + start: value.start, + }; + return acc; +}, {} as SimpleAdapter); + +export default adapters; diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 200487d8b0..8380cfdbdf 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -17,6 +17,11 @@ const DEFAULT_DAILY_PAIR_FACTORY = "pairDayDatas"; const DEFAULT_ID_TYPE = 'ID!' const DEFAULT_BLOCK_TYPE = 'Int' +interface IGetChainVolumeFilterParams { + name: string, + type: string +} + interface IGetChainVolumeParams { graphUrls: { [chains: string]: string @@ -28,6 +33,7 @@ interface IGetChainVolumeParams { factory?: string, field?: string, blockGraphType?: string + filterParams?: IGetChainVolumeFilterParams[], }, dailyVolume?: { factory?: string, @@ -126,10 +132,19 @@ function getGraphDimensions({ const graphFieldsTotalVolume = { factory: totalVolume.factory ?? DEFAULT_TOTAL_VOLUME_FACTORY, field: totalVolume.field ?? DEFAULT_TOTAL_VOLUME_FIELD, - blockGraphType: totalVolume.blockGraphType ?? DEFAULT_BLOCK_TYPE + blockGraphType: totalVolume.blockGraphType ?? DEFAULT_BLOCK_TYPE, + filterParams: totalVolume.filterParams ?? undefined } // Queries - const totalVolumeQuery = gql` + const totalVolumeQuery = graphFieldsTotalVolume.filterParams + ? gql`query get_total_volume(${graphFieldsTotalVolume.filterParams.map(item => `$${item.name}: ${item.type}`).join(', ')}) { + ${graphFieldsTotalVolume.factory}( + where: {${graphFieldsTotalVolume.filterParams.map(item => `${item.name}: $${item.name}`).join(', ')}} + ) { + ${graphFieldsTotalVolume.field} + } + } + ` : gql` query total_volume ($block: ${graphFieldsTotalVolume.blockGraphType}) { ${graphFieldsTotalVolume.factory}(block: { number: $block }) { ${graphFieldsTotalVolume.field} @@ -242,7 +257,22 @@ function getGraphDimensions({ } // TOTAL VOLUME - const graphResTotalVolume = await request(graphUrls[chain], totalVolumeQuery, { block }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`GraphFetchError: Failed to get total volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)); + let graphQueryTodayTotalVolumeVariables: { [key: string]: any } = {} + let graphQueryYesterdayTotalVolumeVariables: { [key: string]: any } = {} + if (graphFieldsTotalVolume.filterParams) { + graphFieldsTotalVolume.filterParams.forEach((item) => { + switch (item.name) { + case "id": + graphQueryTodayTotalVolumeVariables["id"] = parseInt(id); + graphQueryYesterdayTotalVolumeVariables["id"] = parseInt(id)-1 + default: + } + }); + } else { + graphQueryTodayTotalVolumeVariables = { block } + } + + const graphResTotalVolume = await request(graphUrls[chain], totalVolumeQuery, graphQueryTodayTotalVolumeVariables, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`GraphFetchError: Failed to get total volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)); const totalVolume = graphResTotalVolume?.[graphFieldsTotalVolume.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalVolume.field]), 0)?.toString() // DAILY FEES From fb6f7bc6f8bae6c0ff605669143417be7eacf090 Mon Sep 17 00:00:00 2001 From: ideapacito Date: Thu, 5 Sep 2024 16:44:22 +0700 Subject: [PATCH 1362/1590] - --- helpers/getUniSubgraphVolume.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index 4d34add043..0dcc8e12dd 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -1,6 +1,6 @@ import { Chain } from "@defillama/sdk/build/general"; import { request, gql } from "graphql-request"; -import { BaseAdapter, FetchOptions } from "../adapters/types"; +import { BaseAdapter, FetchOptions, FetchResultV2 } from "../adapters/types"; import { SimpleAdapter } from "../adapters/types"; import { DEFAULT_DATE_FIELD, getStartTimestamp } from "./getStartTimestamp"; import { Balances } from "@defillama/sdk"; From 9b9e8b71324f699b7ca2964fc240b0ee79be6673 Mon Sep 17 00:00:00 2001 From: ideapacito Date: Thu, 5 Sep 2024 17:19:10 +0700 Subject: [PATCH 1363/1590] fix version --- helpers/getUniSubgraphVolume.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index 0dcc8e12dd..91ebcb3c16 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -356,7 +356,7 @@ function univ2Adapter(endpoints: { } } }, {} as BaseAdapter), - version: 1 + version: 2 }; return adapter; From 3289492cc3f7c00157abb826f4ecdeac6a244577 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 5 Sep 2024 13:51:57 +0000 Subject: [PATCH 1364/1590] move to optios --- {protocols => options}/ton-hedge.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename {protocols => options}/ton-hedge.ts (68%) diff --git a/protocols/ton-hedge.ts b/options/ton-hedge.ts similarity index 68% rename from protocols/ton-hedge.ts rename to options/ton-hedge.ts index 45f6db304f..72a5f4cbef 100644 --- a/protocols/ton-hedge.ts +++ b/options/ton-hedge.ts @@ -1,5 +1,5 @@ // import { Chain } from "@defillama/sdk/build/general"; -import { SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import fetchURL from "../utils/fetchURL"; @@ -7,9 +7,9 @@ import fetchURL from "../utils/fetchURL"; const adapter: SimpleAdapter = { adapter: { [CHAIN.TON]: { - fetch: async (timestamp: number) => { + fetch: async (timestamp: number, _t: any, options: FetchOptions) => { const result = await fetchURL( - `https://tonhedge.com/api/metrics?timestamp=${timestamp * 1000}` + `https://tonhedge.com/api/metrics?timestamp=${options.startOfDay * 1000}` ) return { ...result, From faea76313228cbf790ca5991eb8824037704cff1 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 5 Sep 2024 15:06:38 +0100 Subject: [PATCH 1365/1590] dragon --- dexs/dragonswap/index.ts | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/dexs/dragonswap/index.ts b/dexs/dragonswap/index.ts index 9c86871dc5..e1ecef611e 100644 --- a/dexs/dragonswap/index.ts +++ b/dexs/dragonswap/index.ts @@ -1,7 +1,7 @@ import { Chain } from "@defillama/sdk/build/types"; import { BaseAdapter, BreakdownAdapter, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpoints = { [CHAIN.KLAYTN]: "https://graph.dgswap.io/subgraphs/name/dragonswap/exchange-v2", @@ -11,8 +11,6 @@ const v3Endpoint = { [CHAIN.KLAYTN]: "https://graph.dgswap.io/subgraphs/name/dragonswap/exchange-v3", }; -const VOLUME_USD = "volumeUSD"; - const startTimes = { [CHAIN.KLAYTN]: 1707297572, } as IJSON; @@ -30,7 +28,7 @@ const methodology = { Fees: "All fees comes from the user." } -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, graphRequestHeaders: { [CHAIN.KLAYTN]: { @@ -40,9 +38,6 @@ const graphs = getGraphDimensions({ totalVolume: { factory: "pancakeFactories" }, - dailyVolume: { - factory: "pancakeDayData" - }, feesPercent: { type: "volume", Fees: 0.3, @@ -54,22 +49,14 @@ const graphs = getGraphDimensions({ } }); -const v3Graph = getGraphDimensions({ +const v3Graph = getGraphDimensions2({ graphUrls: v3Endpoint, totalVolume: { factory: "factories", }, - dailyVolume: { - factory: "pancakeDayData", - field: VOLUME_USD - }, totalFees: { factory: "factories", }, - dailyFees: { - factory: "pancakeDayData", - field: "feesUSD" - }, }); const adapter: BreakdownAdapter = { From b430ed8b238ce76f0ea57921320592ce653e5eb9 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 5 Sep 2024 15:09:31 +0100 Subject: [PATCH 1366/1590] fairy --- dexs/elektrik/index.ts | 8 ++------ dexs/fairyswap/index.ts | 11 ++--------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/dexs/elektrik/index.ts b/dexs/elektrik/index.ts index b7f0e0f974..18b2659856 100644 --- a/dexs/elektrik/index.ts +++ b/dexs/elektrik/index.ts @@ -1,21 +1,17 @@ import { SimpleAdapter } from "../../adapters/types"; -import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { [CHAIN.LIGHTLINK_PHOENIX]: "https://subgraph.elektrik.network/subgraphs/name/ELEKTRIK-GRAPH", }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "uniswapDayData", - field: "volumeUSD", - }, }); const adapter: SimpleAdapter = { diff --git a/dexs/fairyswap/index.ts b/dexs/fairyswap/index.ts index 22c14d3349..b47a1a8372 100644 --- a/dexs/fairyswap/index.ts +++ b/dexs/fairyswap/index.ts @@ -1,4 +1,4 @@ -import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import request, { gql } from "graphql-request"; import { SimpleAdapter } from "../../adapters/types"; @@ -39,19 +39,12 @@ const getCustomBlock = async (timestamp: number) => { return block; }; -const DAILY_VOLUME_FACTORY = "fairyDayData"; - -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "fairyFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - dateField: 'date' - }, getCustomBlock, }); From 235a8ba9f7222339f55c32e1f68b995e63643428 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 5 Sep 2024 15:11:32 +0100 Subject: [PATCH 1367/1590] ferro --- dexs/ferro/index.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/dexs/ferro/index.ts b/dexs/ferro/index.ts index 9a8925d1d0..a01ccb061f 100644 --- a/dexs/ferro/index.ts +++ b/dexs/ferro/index.ts @@ -1,23 +1,17 @@ import { SimpleAdapter } from "../../adapters/types"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; - const endpoints = { [CHAIN.CRONOS]: "https://graph.cronoslabs.com/subgraphs/name/ferro/swap", }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "tradeVolumes", field: "volume", }, - dailyVolume: { - factory: "dailyVolume", - field: "volume", - dateField: "timestamp" - }, }); const adapter: SimpleAdapter = { From d2212631bdfed12979f6150e4939a67a97bcdd35 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 5 Sep 2024 15:16:20 +0100 Subject: [PATCH 1368/1590] firefly --- dexs/firefly/index.ts | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/dexs/firefly/index.ts b/dexs/firefly/index.ts index e6d4232a20..d2fcabd911 100644 --- a/dexs/firefly/index.ts +++ b/dexs/firefly/index.ts @@ -1,30 +1,22 @@ import { Chain } from "@defillama/sdk/build/general"; import { BreakdownAdapter, BaseAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; - import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, } from "../../helpers/getUniSubgraph"; const v3Endpoints = { [CHAIN.MANTA]: "https://subgraph.fireflydex.io/subgraphs/name/firefly/v3", }; -const VOLUME_USD = "volumeUSD"; - -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, - feesPercent: { + feesPercent: { type: "fees", UserFees: 100, // User fees are 100% of collected fees SupplySideRevenue: 100, // 100% of fees are going to LPs From bbc51c44f1d0d801e8be516d571700ccc59a5a53 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 5 Sep 2024 15:16:48 +0100 Subject: [PATCH 1369/1590] camelot --- dexs/camelot-v3/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dexs/camelot-v3/index.ts b/dexs/camelot-v3/index.ts index 8e417947d3..4cdd583fb6 100644 --- a/dexs/camelot-v3/index.ts +++ b/dexs/camelot-v3/index.ts @@ -1,13 +1,11 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('7mPnp1UqmefcCycB8umy4uUkTkFxMoHn1Y7ncBUscePp') }, { factoriesName: "factories", - dayData: "algebraDayData", - dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); From 6c7e5dd9dffdba34c576534ac631258be42f320d Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 5 Sep 2024 15:24:10 +0100 Subject: [PATCH 1370/1590] fusionx --- dexs/forge/index.ts | 10 ++-------- dexs/fusionx-v2/index.ts | 8 ++------ dexs/fusionx-v3/index.ts | 26 ++++++++++---------------- 3 files changed, 14 insertions(+), 30 deletions(-) diff --git a/dexs/forge/index.ts b/dexs/forge/index.ts index a41be4dc7b..fa8ae2a48d 100644 --- a/dexs/forge/index.ts +++ b/dexs/forge/index.ts @@ -1,23 +1,17 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const { - getChainVolume, -} = require("../../helpers/getUniSubgraphVolume"); +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.EVMOS]: "https://subgraph.satsuma-prod.com/09c9cf3574cc/orbital-apes/v3-subgraph/api", }; -const v1Graph = getChainVolume({ +const v1Graph = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "volumeUSD" - }, }); diff --git a/dexs/fusionx-v2/index.ts b/dexs/fusionx-v2/index.ts index 0ec617436f..970388e6fd 100644 --- a/dexs/fusionx-v2/index.ts +++ b/dexs/fusionx-v2/index.ts @@ -1,21 +1,17 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const v2Endpoints = { [CHAIN.MANTLE]: "https://graphv3.fusionx.finance/subgraphs/name/fusionx/exchange" } -const v2Graphs = getGraphDimensions({ +const v2Graphs = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: "fusionxFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "fusionxDayData", - field: "dailyVolumeUSD", - }, feesPercent: { type: "volume", ProtocolRevenue: 0.04, diff --git a/dexs/fusionx-v3/index.ts b/dexs/fusionx-v3/index.ts index de797f05fd..e5669a381c 100644 --- a/dexs/fusionx-v3/index.ts +++ b/dexs/fusionx-v3/index.ts @@ -1,27 +1,21 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { + DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, +} from "../../helpers/getUniSubgraph"; const v3Endpoints = { - [CHAIN.MANTLE]: "https://graphv3.fusionx.finance/subgraphs/name/fusionx/exchange-v3" -} - -const VOLUME_USD = "volumeUSD"; + [CHAIN.MANTLE]: + "https://graphv3.fusionx.finance/subgraphs/name/fusionx/exchange-v3", +}; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "fusionXDayData", - field: VOLUME_USD, - }, - dailyFees: { - factory: "fusionXDayData", - field: "feesUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 16.7, @@ -29,8 +23,8 @@ const v3Graphs = getGraphDimensions({ Fees: 100, UserFees: 100, // User fees are 100% of collected fees SupplySideRevenue: 66.6, // 66% of fees are going to LPs - Revenue: 33.4 // Revenue is 33% of collected fees - } + Revenue: 33.4, // Revenue is 33% of collected fees + }, }); const adapter: SimpleAdapter = { From 4f31f466723c92a7fb98a39a079f5365900805b8 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 5 Sep 2024 15:28:35 +0100 Subject: [PATCH 1371/1590] glyph --- dexs/glyph-exchange-v4/index.ts | 96 +++++++++++++++------------------ dexs/glyph-exchange/index.ts | 15 +----- 2 files changed, 45 insertions(+), 66 deletions(-) diff --git a/dexs/glyph-exchange-v4/index.ts b/dexs/glyph-exchange-v4/index.ts index 017992e975..4d54bc800c 100644 --- a/dexs/glyph-exchange-v4/index.ts +++ b/dexs/glyph-exchange-v4/index.ts @@ -1,71 +1,61 @@ import { BreakdownAdapter } from "../../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpointsClassic = { - [CHAIN.CORE]: "https://thegraph.coredao.org/subgraphs/name/glyph/algebra" + [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 graphsClassic = getGraphDimensions2({ + graphUrls: endpointsClassic, + totalVolume: { + factory: "factories", + field: VOLUME_FIELD, + }, + totalFees: { + factory: "factories", + field: 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" - } - } + (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, - } -} + version: 2, + breakdown: { + classic: classic, + }, +}; -export default adapter +export default adapter; diff --git a/dexs/glyph-exchange/index.ts b/dexs/glyph-exchange/index.ts index a181dd2080..6f6a999975 100644 --- a/dexs/glyph-exchange/index.ts +++ b/dexs/glyph-exchange/index.ts @@ -1,15 +1,13 @@ import { BreakdownAdapter } from "../../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; -import { getStartTimestamp } from "../../helpers/getStartTimestamp"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpointsClassic = { [CHAIN.CORE]: "https://thegraph.coredao.org/subgraphs/name/glyph/glyph-tvl" }; const VOLUME_FIELD = "totalVolumeUSD"; -const DEFAULT_DAILY_VOLUME_FIELD = "dailyVolumeUSD"; //0.3 swap fee, 6/10 to lp, 4/10 to treasury const feesPercent = { @@ -21,24 +19,15 @@ const feesPercent = { SupplySideRevenue: 0.18 } -const graphsClassic = getGraphDimensions({ +const graphsClassic = getGraphDimensions2({ graphUrls: endpointsClassic, totalVolume: { factory: "glyphFactories", field: VOLUME_FIELD, }, - dailyVolume: { - factory: "glyphDayData", - field: DEFAULT_DAILY_VOLUME_FIELD, - }, feesPercent }); -const startTimeQueryClassic = { - endpoints: endpointsClassic, - dailyDataField: "glyphDayData", -}; - const classic = Object.keys(endpointsClassic).reduce( (acc, chain) => ({ ...acc, From 4eb20f145b3ad68458e6d6d7c3165727f0150cef Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 5 Sep 2024 15:32:15 +0100 Subject: [PATCH 1372/1590] hydradex --- dexs/hadouken-amm/index.ts | 18 +++++------ dexs/holdr/index.ts | 16 +++++----- dexs/horiza/index.ts | 10 ++----- dexs/hydradex/index.ts | 61 ++------------------------------------ 4 files changed, 22 insertions(+), 83 deletions(-) diff --git a/dexs/hadouken-amm/index.ts b/dexs/hadouken-amm/index.ts index 1656f2ee32..459720285f 100644 --- a/dexs/hadouken-amm/index.ts +++ b/dexs/hadouken-amm/index.ts @@ -1,12 +1,12 @@ -import { ChainEndpoints, DISABLED_ADAPTER_KEY, SimpleAdapter } from "../../adapters/types"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { ChainEndpoints, SimpleAdapter } from "../../adapters/types"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; import customBackfill from "../../helpers/customBackfill"; -import disabledAdapter from "../../helpers/disabledAdapter"; const endpoints: ChainEndpoints = { - [CHAIN.GODWOKEN_V1]: "https://graph-prod-http-hadouken-prod.hadouken.finance/subgraphs/name/balancer-godwoken-mainnet", + [CHAIN.GODWOKEN_V1]: + "https://graph-prod-http-hadouken-prod.hadouken.finance/subgraphs/name/balancer-godwoken-mainnet", }; const graphParams = { @@ -14,22 +14,20 @@ const graphParams = { factory: "balancers", field: "totalSwapVolume", }, - hasDailyVolume: false, -} +}; -const v1graphs = getChainVolume({ +const v1graphs = getChainVolume2({ graphUrls: endpoints, - ...graphParams + ...graphParams, }); - const adapter: SimpleAdapter = { version: 2, adapter: { [CHAIN.GODWOKEN_V1]: { fetch: v1graphs(CHAIN.GODWOKEN_V1 as Chain), start: 1669248000, - customBackfill: customBackfill(CHAIN.GODWOKEN_V1 as Chain, v1graphs) + customBackfill: customBackfill(CHAIN.GODWOKEN_V1 as Chain, v1graphs), }, }, }; diff --git a/dexs/holdr/index.ts b/dexs/holdr/index.ts index 52c79d0fb7..dd234f5519 100644 --- a/dexs/holdr/index.ts +++ b/dexs/holdr/index.ts @@ -1,12 +1,14 @@ import * as sdk from "@defillama/sdk"; import { ChainEndpoints, SimpleAdapter } from "../../adapters/types"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; import customBackfill from "../../helpers/customBackfill"; const endpoints: ChainEndpoints = { - [CHAIN.AURORA]: sdk.graph.modifyEndpoint('5Yn3qgjM8y6KnN1jZd8TjcDLPRioVpiTC46XYgEwK56S'), + [CHAIN.AURORA]: sdk.graph.modifyEndpoint( + "5Yn3qgjM8y6KnN1jZd8TjcDLPRioVpiTC46XYgEwK56S", + ), }; const graphParams = { @@ -14,22 +16,20 @@ const graphParams = { factory: "balancers", field: "totalSwapVolume", }, - hasDailyVolume: false, -} +}; -const v1graphs = getChainVolume({ +const v1graphs = getChainVolume2({ graphUrls: endpoints, - ...graphParams + ...graphParams, }); - const adapter: SimpleAdapter = { version: 2, adapter: { [CHAIN.AURORA]: { fetch: v1graphs(CHAIN.AURORA as Chain), start: 1672531200, - customBackfill: customBackfill(CHAIN.AURORA as Chain, v1graphs) + customBackfill: customBackfill(CHAIN.AURORA as Chain, v1graphs), }, }, }; diff --git a/dexs/horiza/index.ts b/dexs/horiza/index.ts index ef1f305ec5..fb96a97237 100644 --- a/dexs/horiza/index.ts +++ b/dexs/horiza/index.ts @@ -1,21 +1,17 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpointV3 = { [CHAIN.ARBITRUM]: 'https://subgraph-prod.goerli.horiza.io/subgraphs/name/retro-arbitrum-one-uniswap-v3' } -const VOLUME_USD = 'volumeUSD' -const v3Graphs = getGraphDimensions({ + +const v3Graphs = getGraphDimensions2({ graphUrls: endpointV3, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", ProtocolRevenue: 10, diff --git a/dexs/hydradex/index.ts b/dexs/hydradex/index.ts index d1595ba26b..326a8d2227 100644 --- a/dexs/hydradex/index.ts +++ b/dexs/hydradex/index.ts @@ -2,21 +2,13 @@ import { Chain } from '@defillama/sdk/build/general'; import { BreakdownAdapter, BaseAdapter, DISABLED_ADAPTER_KEY } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains'; import { getStartTimestamp } from '../../helpers/getStartTimestamp'; - import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, - DEFAULT_TOTAL_VOLUME_FIELD, - DEFAULT_DAILY_VOLUME_FIELD, wrapGraphError, + getGraphDimensions2, } from '../../helpers/getUniSubgraph'; -import request, { gql } from 'graphql-request'; +import request from 'graphql-request'; import disabledAdapter from '../../helpers/disabledAdapter'; -const v2Endpoints = { - [CHAIN.HYDRA]: 'https://info.hydradex.org/graphql', -}; - const v3Endpoints = { [CHAIN.HYDRA]: 'https://graph.hydradex.org/subgraphs/name/v3-subgraph', }; @@ -24,22 +16,6 @@ const v3Endpoints = { const VOLUME_USD = 'volumeUSD'; const FEES_USD = 'feesUSD'; -const getV2CustomBlock = async (timestamp: number) => { - const blockGraphQuery = ` - query get_block { - blocks(orderBy: "height", first: 1, orderDirection: "desc", where: { timestamp_lte: ${timestamp} }) { - number - } - } - `; - try { - const blocks = (await request(v2Endpoints[CHAIN.HYDRA], blockGraphQuery)).blocks; - return Number(blocks[0].number); - } catch (e) { - throw new Error(`Error getting block: ${CHAIN.HYDRA} ${timestamp} ${wrapGraphError(e).message}`) - } -}; - const getV3CustomBlock = async (timestamp: number) => { const blockGraphQuery = ` query get_block { @@ -59,43 +35,12 @@ const getV3CustomBlock = async (timestamp: number) => { } }; -const v2Graph = getGraphDimensions({ - graphUrls: v2Endpoints, - feesPercent: { - type: 'volume', - UserFees: 0.3, - ProtocolRevenue: 0, - SupplySideRevenue: 0.3, - HoldersRevenue: 0, - Revenue: 0, - Fees: 0.3, - }, - totalVolume: { - factory: 'hydraswapFactories', - field: DEFAULT_TOTAL_VOLUME_FIELD, - blockGraphType: 'Float!', - }, - dailyVolume: { - factory: 'getHydraswapDayDataById', - field: DEFAULT_DAILY_VOLUME_FIELD, - idGraphType: 'String!', - }, - dailyFees: { - factory: 'hydraswapDayData', - }, - getCustomBlock: getV2CustomBlock, -}); - -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: 'factories', field: VOLUME_USD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: 'fees', ProtocolRevenue: 0, From bad0f5e2ba8bc56ff3e52b4b8a527b83f8f764f0 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 5 Sep 2024 15:37:45 +0100 Subject: [PATCH 1373/1590] klex --- dexs/integral/index.ts | 8 ++------ dexs/jswap/index.ts | 11 ++--------- dexs/kinetix-v3/index.ts | 8 ++------ dexs/klex-finance/index.ts | 5 ++--- 4 files changed, 8 insertions(+), 24 deletions(-) diff --git a/dexs/integral/index.ts b/dexs/integral/index.ts index 9e1b3410d3..66769b2ded 100644 --- a/dexs/integral/index.ts +++ b/dexs/integral/index.ts @@ -4,7 +4,7 @@ import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, - getChainVolume, + getChainVolume2, } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; @@ -20,16 +20,12 @@ export const endpoints = { sdk.graph.modifyEndpoint('HXeVedRK7VgogXwbK5Sc4mjyLkhBAS5akskRvbSYnkHU'), }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "dayData", - field: DEFAULT_DAILY_VOLUME_FIELD, - }, }); const adapter: SimpleAdapter = { diff --git a/dexs/jswap/index.ts b/dexs/jswap/index.ts index 9048810a9f..85a8846142 100644 --- a/dexs/jswap/index.ts +++ b/dexs/jswap/index.ts @@ -1,7 +1,7 @@ import request, { gql } from "graphql-request"; import { DISABLED_ADAPTER_KEY, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph"; import disabledAdapter from "../../helpers/disabledAdapter"; const blocksGraph = @@ -40,19 +40,12 @@ const getCustomBlock = async (timestamp: number) => { return block; }; -const DAILY_VOLUME_FACTORY = "jswapDayData"; - -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "jswapFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - dateField: 'date' - }, getCustomBlock, }); diff --git a/dexs/kinetix-v3/index.ts b/dexs/kinetix-v3/index.ts index 99c3aa610a..7e104fd8b9 100644 --- a/dexs/kinetix-v3/index.ts +++ b/dexs/kinetix-v3/index.ts @@ -1,6 +1,6 @@ import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; import { BreakdownAdapter } from "../../adapters/types"; const endpointsV3 = { @@ -10,16 +10,12 @@ const endpointsV3 = { "https://api.studio.thegraph.com/query/55804/kinetixfi-base-v3/version/latest", }; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: endpointsV3, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "volumeUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 0, diff --git a/dexs/klex-finance/index.ts b/dexs/klex-finance/index.ts index c95bff5e4a..548f8885fa 100644 --- a/dexs/klex-finance/index.ts +++ b/dexs/klex-finance/index.ts @@ -1,5 +1,5 @@ import { ChainEndpoints, DISABLED_ADAPTER_KEY, SimpleAdapter } from "../../adapters/types"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import customBackfill from "../../helpers/customBackfill"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; @@ -15,11 +15,10 @@ const graphParams = { factory: "balancers", field: "totalSwapVolume", }, - hasDailyVolume: false, } -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, ...graphParams }); From d1a98cb58e7e7a579e15a0126d701dd89eef14bf Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 5 Sep 2024 16:11:11 +0100 Subject: [PATCH 1374/1590] koyo --- dexs/knightswap-finance/index.ts | 19 ++++++++----------- dexs/koyo/index.ts | 5 ++--- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/dexs/knightswap-finance/index.ts b/dexs/knightswap-finance/index.ts index 10f85113cf..3fdab08278 100644 --- a/dexs/knightswap-finance/index.ts +++ b/dexs/knightswap-finance/index.ts @@ -1,28 +1,25 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const { - getChainVolume -} = require("../../helpers/getUniSubgraphVolume"); +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints = { - [CHAIN.BSC]: sdk.graph.modifyEndpoint('GknVfnDT8h7aFsdS6Y6CeWTx3bHFnUnGxNgAUSSCQPz1'), - [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('GhBfNocNJJCjS4norsp6Cpiw2vJompiURM9frjgsnVdW'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint( + "GknVfnDT8h7aFsdS6Y6CeWTx3bHFnUnGxNgAUSSCQPz1", + ), + [CHAIN.FANTOM]: sdk.graph.modifyEndpoint( + "GhBfNocNJJCjS4norsp6Cpiw2vJompiURM9frjgsnVdW", + ), }; -const v2Graph = getChainVolume({ +const v2Graph = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "pancakeFactories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "pancakeDayData", - field: "dailyVolumeUSD", - }, }); - const adapter: SimpleAdapter = { version: 2, adapter: { diff --git a/dexs/koyo/index.ts b/dexs/koyo/index.ts index 78e9f90d32..fe2e6773e4 100644 --- a/dexs/koyo/index.ts +++ b/dexs/koyo/index.ts @@ -2,20 +2,19 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.BOBA]: sdk.graph.modifyEndpoint('3CdxAdbTrVDhM6WQCr5TN4y4zxAodMAmcZwFFWRnEKz3'), }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "koyos", field: "totalSwapVolume", }, - hasDailyVolume: false }); const adapter: SimpleAdapter = { From 8cd68ba2a8585579e37e3ba796c1a28ff3cff812 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 5 Sep 2024 16:27:01 +0000 Subject: [PATCH 1375/1590] add sunswap fees --- fees/sunswap-v1.ts | 34 ++++++++++++++++++++++++++++++++++ fees/sunswap-v2.ts | 34 ++++++++++++++++++++++++++++++++++ fees/sunswap-v3.ts | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 fees/sunswap-v1.ts create mode 100644 fees/sunswap-v2.ts create mode 100644 fees/sunswap-v3.ts diff --git a/fees/sunswap-v1.ts b/fees/sunswap-v1.ts new file mode 100644 index 0000000000..2123c475c8 --- /dev/null +++ b/fees/sunswap-v1.ts @@ -0,0 +1,34 @@ +import { time } from "console"; +import { Adapter, FetchOptions, } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { httpGet } from "../utils/fetchURL"; + +const api = "https://openapi.sun.io/open/api/feeData" +interface IResponse { + date: number; + fee: number; +} + +const adapter: Adapter = { + version: 1, + adapter: { + [CHAIN.TRON]: { + fetch: (async (_t: any, _a: any ,options: FetchOptions) => { + const start = options.startOfDay * 1000; + const end = start + 86400; + const startStr = new Date(start).toISOString().split("T")[0]; + const endStr = new Date(end).toISOString().split("T")[0]; + const url = `${api}?fromDate=${startStr}&toDate=${endStr}&version=v1`; + const res: IResponse[] = (await httpGet(url)).data; + const dailyFees = options.createBalances(); + const dayItem = res.find((item) => item.date === start); + dailyFees.addGasToken((dayItem?.fee || 0) * 1e6); + return { dailyFees, timestamp: options.startOfDay }; + }) as any, + start: 1723334400 + }, + }, + +} + +export default adapter; diff --git a/fees/sunswap-v2.ts b/fees/sunswap-v2.ts new file mode 100644 index 0000000000..a455a6498f --- /dev/null +++ b/fees/sunswap-v2.ts @@ -0,0 +1,34 @@ +import { time } from "console"; +import { Adapter, FetchOptions, } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { httpGet } from "../utils/fetchURL"; + +const api = "https://openapi.sun.io/open/api/feeData" +interface IResponse { + date: number; + fee: number; +} + +const adapter: Adapter = { + version: 1, + adapter: { + [CHAIN.TRON]: { + fetch: (async (_t: any, _a: any ,options: FetchOptions) => { + const start = options.startOfDay * 1000; + const end = start + 86400; + const startStr = new Date(start).toISOString().split("T")[0]; + const endStr = new Date(end).toISOString().split("T")[0]; + const url = `${api}?fromDate=${startStr}&toDate=${endStr}&version=v2`; + const res: IResponse[] = (await httpGet(url)).data; + const dailyFees = options.createBalances(); + const dayItem = res.find((item) => item.date === start); + dailyFees.addGasToken((dayItem?.fee || 0) * 1e6); + return { dailyFees, timestamp: options.startOfDay }; + }) as any, + start: 1723334400 + }, + }, + +} + +export default adapter; diff --git a/fees/sunswap-v3.ts b/fees/sunswap-v3.ts new file mode 100644 index 0000000000..f482f6d365 --- /dev/null +++ b/fees/sunswap-v3.ts @@ -0,0 +1,34 @@ +import { time } from "console"; +import { Adapter, FetchOptions, } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { httpGet } from "../utils/fetchURL"; + +const api = "https://openapi.sun.io/open/api/feeData" +interface IResponse { + date: number; + fee: number; +} + +const adapter: Adapter = { + version: 1, + adapter: { + [CHAIN.TRON]: { + fetch: (async (_t: any, _a: any ,options: FetchOptions) => { + const start = options.startOfDay * 1000; + const end = start + 86400; + const startStr = new Date(start).toISOString().split("T")[0]; + const endStr = new Date(end).toISOString().split("T")[0]; + const url = `${api}?fromDate=${startStr}&toDate=${endStr}&version=v3`; + const res: IResponse[] = (await httpGet(url)).data; + const dailyFees = options.createBalances(); + const dayItem = res.find((item) => item.date === start); + dailyFees.addGasToken((dayItem?.fee || 0) * 1e6); + return { dailyFees, timestamp: options.startOfDay }; + }) as any, + start: 1723334400 + }, + }, + +} + +export default adapter; From 13e80beee48835840ec6f30a849564a7a71b1276 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 5 Sep 2024 16:29:06 +0000 Subject: [PATCH 1376/1590] fix start --- fees/sunswap-v1.ts | 2 +- fees/sunswap-v2.ts | 2 +- fees/sunswap-v3.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/sunswap-v1.ts b/fees/sunswap-v1.ts index 2123c475c8..e971599294 100644 --- a/fees/sunswap-v1.ts +++ b/fees/sunswap-v1.ts @@ -25,7 +25,7 @@ const adapter: Adapter = { dailyFees.addGasToken((dayItem?.fee || 0) * 1e6); return { dailyFees, timestamp: options.startOfDay }; }) as any, - start: 1723334400 + start: 1704560436 }, }, diff --git a/fees/sunswap-v2.ts b/fees/sunswap-v2.ts index a455a6498f..8854071c7e 100644 --- a/fees/sunswap-v2.ts +++ b/fees/sunswap-v2.ts @@ -25,7 +25,7 @@ const adapter: Adapter = { dailyFees.addGasToken((dayItem?.fee || 0) * 1e6); return { dailyFees, timestamp: options.startOfDay }; }) as any, - start: 1723334400 + start: 1704560436 }, }, diff --git a/fees/sunswap-v3.ts b/fees/sunswap-v3.ts index f482f6d365..73280a5ce4 100644 --- a/fees/sunswap-v3.ts +++ b/fees/sunswap-v3.ts @@ -25,7 +25,7 @@ const adapter: Adapter = { dailyFees.addGasToken((dayItem?.fee || 0) * 1e6); return { dailyFees, timestamp: options.startOfDay }; }) as any, - start: 1723334400 + start: 1704560436 }, }, From 33a1d202a35afaa8912beb0ed1a101bbd6ecbb9a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 5 Sep 2024 16:40:07 +0000 Subject: [PATCH 1377/1590] fix set value --- fees/sunswap-v1.ts | 2 +- fees/sunswap-v2.ts | 5 ++--- fees/sunswap-v3.ts | 5 ++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/fees/sunswap-v1.ts b/fees/sunswap-v1.ts index e971599294..c37f0e6e2f 100644 --- a/fees/sunswap-v1.ts +++ b/fees/sunswap-v1.ts @@ -23,7 +23,7 @@ const adapter: Adapter = { const dailyFees = options.createBalances(); const dayItem = res.find((item) => item.date === start); dailyFees.addGasToken((dayItem?.fee || 0) * 1e6); - return { dailyFees, timestamp: options.startOfDay }; + return { dailyFees, dailyRevenue: dailyFees, timestamp: options.startOfDay }; }) as any, start: 1704560436 }, diff --git a/fees/sunswap-v2.ts b/fees/sunswap-v2.ts index 8854071c7e..9c4aad6c9c 100644 --- a/fees/sunswap-v2.ts +++ b/fees/sunswap-v2.ts @@ -20,10 +20,9 @@ const adapter: Adapter = { const endStr = new Date(end).toISOString().split("T")[0]; const url = `${api}?fromDate=${startStr}&toDate=${endStr}&version=v2`; const res: IResponse[] = (await httpGet(url)).data; - const dailyFees = options.createBalances(); const dayItem = res.find((item) => item.date === start); - dailyFees.addGasToken((dayItem?.fee || 0) * 1e6); - return { dailyFees, timestamp: options.startOfDay }; + const dailyFees = dayItem?.fee || 0; + return { dailyFees, dailyRevenue: dailyFees, timestamp: options.startOfDay }; }) as any, start: 1704560436 }, diff --git a/fees/sunswap-v3.ts b/fees/sunswap-v3.ts index 73280a5ce4..1bd99eb3c8 100644 --- a/fees/sunswap-v3.ts +++ b/fees/sunswap-v3.ts @@ -20,10 +20,9 @@ const adapter: Adapter = { const endStr = new Date(end).toISOString().split("T")[0]; const url = `${api}?fromDate=${startStr}&toDate=${endStr}&version=v3`; const res: IResponse[] = (await httpGet(url)).data; - const dailyFees = options.createBalances(); const dayItem = res.find((item) => item.date === start); - dailyFees.addGasToken((dayItem?.fee || 0) * 1e6); - return { dailyFees, timestamp: options.startOfDay }; + const dailyFees = dayItem?.fee || 0; + return { dailyFees, dailyRevenue: dailyFees, timestamp: options.startOfDay }; }) as any, start: 1704560436 }, From d25a0d218ce56c5ee0a8a2ffd304310e370c5710 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 5 Sep 2024 16:55:25 +0000 Subject: [PATCH 1378/1590] sunswap --- fees/sunswap-v1.ts | 2 +- fees/sunswap-v2.ts | 2 +- fees/sunswap-v3.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/sunswap-v1.ts b/fees/sunswap-v1.ts index c37f0e6e2f..e971599294 100644 --- a/fees/sunswap-v1.ts +++ b/fees/sunswap-v1.ts @@ -23,7 +23,7 @@ const adapter: Adapter = { const dailyFees = options.createBalances(); const dayItem = res.find((item) => item.date === start); dailyFees.addGasToken((dayItem?.fee || 0) * 1e6); - return { dailyFees, dailyRevenue: dailyFees, timestamp: options.startOfDay }; + return { dailyFees, timestamp: options.startOfDay }; }) as any, start: 1704560436 }, diff --git a/fees/sunswap-v2.ts b/fees/sunswap-v2.ts index 9c4aad6c9c..4003e37c2f 100644 --- a/fees/sunswap-v2.ts +++ b/fees/sunswap-v2.ts @@ -22,7 +22,7 @@ const adapter: Adapter = { const res: IResponse[] = (await httpGet(url)).data; const dayItem = res.find((item) => item.date === start); const dailyFees = dayItem?.fee || 0; - return { dailyFees, dailyRevenue: dailyFees, timestamp: options.startOfDay }; + return { dailyFees, timestamp: options.startOfDay }; }) as any, start: 1704560436 }, diff --git a/fees/sunswap-v3.ts b/fees/sunswap-v3.ts index 1bd99eb3c8..fc61e54740 100644 --- a/fees/sunswap-v3.ts +++ b/fees/sunswap-v3.ts @@ -22,7 +22,7 @@ const adapter: Adapter = { const res: IResponse[] = (await httpGet(url)).data; const dayItem = res.find((item) => item.date === start); const dailyFees = dayItem?.fee || 0; - return { dailyFees, dailyRevenue: dailyFees, timestamp: options.startOfDay }; + return { dailyFees, timestamp: options.startOfDay }; }) as any, start: 1704560436 }, From dfb3d0cee7e679c3921e4c06668fa0be8e18e2b9 Mon Sep 17 00:00:00 2001 From: Andrii Ivaniv Date: Thu, 5 Sep 2024 23:14:02 +0300 Subject: [PATCH 1379/1590] Rainbow Swap adapter added --- aggregators/rainbow-swap/index.ts | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 aggregators/rainbow-swap/index.ts diff --git a/aggregators/rainbow-swap/index.ts b/aggregators/rainbow-swap/index.ts new file mode 100644 index 0000000000..8815e34d25 --- /dev/null +++ b/aggregators/rainbow-swap/index.ts @@ -0,0 +1,32 @@ +import {Fetch, SimpleAdapter} from "../../adapters/types"; +import {CHAIN} from "../../helpers/chains"; +import fetchURL from "../../utils/fetchURL"; + +const URL = 'https://api.blackbot.technology'; +const endpoint = '/rainbow/analytics/volumes'; +const start = 1720645200;// 11.07.2024 + +interface IAPIResponse { + dailyVolume: string; + totalVolume: string; +} + +const fetch: Fetch = async (timestamp) => { + const {dailyVolume, totalVolume}: IAPIResponse = await fetchURL(`${URL}${endpoint}?timestamp=${timestamp * 1000}`); + + return { + timestamp, + dailyVolume, + totalVolume + }; +}; + +const adapters: SimpleAdapter = { + adapter: { + [CHAIN.TON]: { + start, + fetch + } + } +} +export default adapters From 5c2cfc7a7c36eebd8a7a53a8d307ade17838a0e7 Mon Sep 17 00:00:00 2001 From: tomshear32 Date: Fri, 6 Sep 2024 00:38:34 +0300 Subject: [PATCH 1380/1590] feat(Project): List Flat Money --- aggregators/flat-money/index.ts | 148 ++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 aggregators/flat-money/index.ts diff --git a/aggregators/flat-money/index.ts b/aggregators/flat-money/index.ts new file mode 100644 index 0000000000..5db77df912 --- /dev/null +++ b/aggregators/flat-money/index.ts @@ -0,0 +1,148 @@ +import { SimpleAdapter, FetchV2, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, GraphQLClient } from "graphql-request"; + +const CONFIG = { + [CHAIN.BASE]: { + startTimestamp: 1721161357, + endpoint: "https://api.studio.thegraph.com/query/48129/flatcoin-base/version/latest", + leverageOpensQuery: gql` + query leverageOpens($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + leverageOpens( + where: { blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { + margin, + size, + entryPrice + } + }`, + leverageAdjustsQuery: gql` + query leverageAdjusts($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + leverageAdjusts( + where: { blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { + marginDelta, + sizeDelta, + adjustPrice + } + }`, + leverageClosesQuery: gql` + query leverageCloses($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + leverageCloses( + where: { blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { + settledMargin, + size, + closePrice + } + }`, + leverageOpensField: "leverageOpens", + leverageAdjustsField: "leverageAdjusts", + leverageClosesField: "leverageCloses" + }, +}; + +const fetchVolume = async (chainId: CHAIN, query: string, volumeField: string, startTimestamp: number, endTimestamp: number) => { + const { endpoint } = CONFIG[chainId]; + + let allData = []; + let skip = 0; + const batchSize = 1000; + + while (true) { + try { + const data = await new GraphQLClient(endpoint).request(query, { + startTimestamp, + endTimestamp, + first: batchSize, + skip + }); + + const entries = data[volumeField]; + if (entries.length === 0) break; + allData = allData.concat(entries); + skip += batchSize; + + if (entries.length < batchSize) break; + + await sleep(500); + } catch (e) { + throw new Error(`Error fetching data for chain ${chainId}: ${e.message}`); + } + } + return allData; +}; + +const calculateOpensVolume = (data: any): number => + data.reduce((acc: number, item: any) => { + const priceFormatted = Number(item.entryPrice) / 1e18; + const marginFormatted = Number(item.margin) / 1e18; + const sizeFormatted = Number(item.size) / 1e18; + return acc + (marginFormatted + sizeFormatted) * priceFormatted; + }, 0); + +const calculateAdjustsVolume = (data: any): number => + data.reduce((acc: number, item: any) => { + const priceFormatted = Number(item.adjustPrice) / 1e18; + const marginDeltaFormatted = Number(Math.abs(item.marginDelta)) / 1e18; + const sizeDeltaFormatted = Number(Math.abs(item.sizeDelta)) / 1e18; + return acc + (marginDeltaFormatted + sizeDeltaFormatted) * priceFormatted; + }, 0); + +const calculateClosesVolume = (data: any): number => + data.reduce((acc: number, item: any) => { + const priceFormatted = Number(item.closePrice) / 1e18; + const settledMarginFormatted = Number(item.settledMargin) / 1e18; + const sizeFormatted = Number(item.size) / 1e18; + return acc + (settledMarginFormatted + sizeFormatted) * priceFormatted; + }, 0); + +const fetch: FetchV2 = async ({ startTimestamp, endTimestamp, chain }): Promise => { + const config = CONFIG[chain]; + if (!config) throw new Error(`Unsupported chain: ${chain}`); + + const [ + dailyOpensData, + dailyAdjustsData, + dailyClosesData, + totalOpensData, + totalAdjustsData, + totalClosesData + ] = await Promise.all([ + fetchVolume(chain as CHAIN, config.leverageOpensQuery, config.leverageOpensField, startTimestamp || (endTimestamp - 86400), endTimestamp), + fetchVolume(chain as CHAIN, config.leverageAdjustsQuery, config.leverageAdjustsField, startTimestamp || (endTimestamp - 86400), endTimestamp), + fetchVolume(chain as CHAIN, config.leverageClosesQuery, config.leverageClosesField, startTimestamp || (endTimestamp - 86400), endTimestamp), + fetchVolume(chain as CHAIN, config.leverageOpensQuery, config.leverageOpensField, config.startTimestamp, endTimestamp), + fetchVolume(chain as CHAIN, config.leverageAdjustsQuery, config.leverageAdjustsField, config.startTimestamp, endTimestamp), + fetchVolume(chain as CHAIN, config.leverageClosesQuery, config.leverageClosesField, config.startTimestamp, endTimestamp), + ]); + + return { + timestamp: endTimestamp, + dailyVolume: calculateOpensVolume(dailyOpensData) + + calculateAdjustsVolume(dailyAdjustsData) + + calculateClosesVolume(dailyClosesData), + totalVolume: calculateOpensVolume(totalOpensData) + + calculateAdjustsVolume(totalAdjustsData) + + calculateClosesVolume(totalClosesData) + }; +}; + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +const adapter: SimpleAdapter = { + adapter: Object.fromEntries( + Object.entries(CONFIG).map(([chain, config]) => [ + chain, + { fetch, start: config.startTimestamp } + ]) + ), + version: 2 +}; + +export default adapter; From eb72545686df0694ca31c9e462308e20715c4236 Mon Sep 17 00:00:00 2001 From: Jessie <50894289+Nicklaus6@users.noreply.github.com> Date: Fri, 6 Sep 2024 10:43:59 +0800 Subject: [PATCH 1381/1590] add delta trade volume --- dexs/delta-trade/index.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 dexs/delta-trade/index.ts diff --git a/dexs/delta-trade/index.ts b/dexs/delta-trade/index.ts new file mode 100644 index 0000000000..272ddfbe0a --- /dev/null +++ b/dexs/delta-trade/index.ts @@ -0,0 +1,29 @@ +import type { SimpleAdapter } from "../../adapters/types"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { httpGet } from "../../utils/fetchURL"; + +const api = "https://api.deltatrade.ai/api/home/data"; + +const fetch = async () => { + const timestamp = getUniqStartOfTodayTimestamp(); + const res = await httpGet(api); + const { total_24h, total } = res.data; + + return { + timestamp, + dailyVolume: total_24h, + totalVolume: total, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + near: { + fetch, + start: 0, + runAtCurrTime: true, + }, + }, +}; + +export default adapter; From 1994ec708ab2f16b85a73990976d95d1a8b3ffd4 Mon Sep 17 00:00:00 2001 From: ideapacito Date: Fri, 6 Sep 2024 15:02:47 +0700 Subject: [PATCH 1382/1590] add chain base to dexs --- dexs/fwx/index.ts | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/dexs/fwx/index.ts b/dexs/fwx/index.ts index af77e6bdc1..dddf4d0c78 100644 --- a/dexs/fwx/index.ts +++ b/dexs/fwx/index.ts @@ -14,20 +14,14 @@ interface IRes { data: IDailyData[]; } -interface IEndpoint { - tradingVolume: string; - openInterest: string; -} - const CHAIN_ID = { [CHAIN.AVAX]: 43114, + [CHAIN.BASE]: 8453, }; -const endpoints: Record = { - [CHAIN.AVAX]: { - tradingVolume: `https://app.fwx.finance/api/v2/trade/volume`, - openInterest: `https://analytics.fwx.finance/api/trade/daily-open-interest`, - }, +const endpoints = { + tradingVolume: `https://app.fwx.finance/api/v2/trade/volume`, + openInterest: `https://analytics.fwx.finance/api/trade/daily-open-interest`, }; const fetch = (chain: Chain) => { @@ -39,7 +33,7 @@ const fetch = (chain: Chain) => { const formattedDate = date.toISOString().replace(/\.(\d{3})Z$/, ".$1Z"); // * call api for daily volume - const tradingVolumeRes = await httpPost(endpoints[chain].tradingVolume, { + const tradingVolumeRes = await httpPost(endpoints.tradingVolume, { from_date: formattedDate, to_date: formattedDate, chain_id: CHAIN_ID[chain], @@ -51,10 +45,10 @@ const fetch = (chain: Chain) => { ); // * call api for daily open interest - const openInterestRes = await httpPost(endpoints[chain].openInterest, { + const openInterestRes = await httpPost(endpoints.openInterest, { from_date: formattedDate, to_date: formattedDate, - chain_id: 43114, + chain_id: CHAIN_ID[chain], }); const openInterestData = openInterestRes as IRes; const dailyOpenInterestData = openInterestData?.data.find( @@ -78,6 +72,10 @@ const adapter: SimpleAdapter = { fetch: fetch(CHAIN.AVAX), start: 1701907200, }, + [CHAIN.BASE]: { + fetch: fetch(CHAIN.BASE), + start: 1725408000, + }, }, }; From 6a675c0d51ad868c01e050ebcd82188f8de190ed Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 6 Sep 2024 14:27:58 +0100 Subject: [PATCH 1383/1590] mooni --- dexs/linehub-v3/index.ts | 8 ++------ dexs/maia-v3/index.ts | 10 ++-------- dexs/metavault-v3/index.ts | 10 +++------- dexs/miaswap/index.ts | 14 ++------------ dexs/mimo/index.ts | 11 ++--------- dexs/mobius-money/index.ts | 12 ++---------- dexs/mooniswap/index.ts | 12 +++--------- 7 files changed, 16 insertions(+), 61 deletions(-) diff --git a/dexs/linehub-v3/index.ts b/dexs/linehub-v3/index.ts index 252de64626..a35edc86ed 100644 --- a/dexs/linehub-v3/index.ts +++ b/dexs/linehub-v3/index.ts @@ -1,6 +1,6 @@ import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; import { BreakdownAdapter } from "../../adapters/types"; const endpointsV3 = { @@ -8,16 +8,12 @@ const endpointsV3 = { "https://api.studio.thegraph.com/query/55804/linehub-v3/version/latest", }; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: endpointsV3, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "volumeUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 0, diff --git a/dexs/maia-v3/index.ts b/dexs/maia-v3/index.ts index 3f378c053a..420aa8fd41 100644 --- a/dexs/maia-v3/index.ts +++ b/dexs/maia-v3/index.ts @@ -1,11 +1,9 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getStartTimestamp } from "../../helpers/getStartTimestamp"; - import { - getGraphDimensions, DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, } from "../../helpers/getUniSubgraph" const v3Endpoints = { @@ -14,16 +12,12 @@ const v3Endpoints = { const VOLUME_USD = "volumeUSD"; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", ProtocolRevenue: 10, // 10% of fees are going to protocol diff --git a/dexs/metavault-v3/index.ts b/dexs/metavault-v3/index.ts index bf5329928c..6de3304703 100644 --- a/dexs/metavault-v3/index.ts +++ b/dexs/metavault-v3/index.ts @@ -1,23 +1,19 @@ import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; -import { BreakdownAdapter, FetchOptions } from "../../adapters/types"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; +import { BreakdownAdapter } from "../../adapters/types"; const endpointsV3 = { // [CHAIN.LINEA]: "https://linea-graph-node.metavault.trade/subgraphs/name/metavault/v3", [CHAIN.SCROLL]: "https://api.studio.thegraph.com/query/55804/metavault-v3/version/latest", }; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: endpointsV3, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "volumeUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 0, diff --git a/dexs/miaswap/index.ts b/dexs/miaswap/index.ts index d726bb852d..f74942a9eb 100644 --- a/dexs/miaswap/index.ts +++ b/dexs/miaswap/index.ts @@ -1,28 +1,18 @@ import { DISABLED_ADAPTER_KEY, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; -import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const v3Endpoints = { [CHAIN.ONUS]: "https://subgraph.onuschain.io/subgraphs/name/onus/miaswap-v3-subgraph" } -const VOLUME_USD = "volumeUSD"; - -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "uniswapDayData", - field: VOLUME_USD, - }, - dailyFees: { - factory: "uniswapDayData", - field: "feesUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 0, diff --git a/dexs/mimo/index.ts b/dexs/mimo/index.ts index 7e92afd004..8d1096c1f0 100644 --- a/dexs/mimo/index.ts +++ b/dexs/mimo/index.ts @@ -1,25 +1,18 @@ import { Chain } from "@defillama/sdk/build/general"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; -const { - getChainVolume, -} = require("../../helpers/getUniSubgraphVolume"); const endpoints = { [CHAIN.IOTEX]: "https://graph.mimo.exchange/subgraphs/name/mimo/mainnet" }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "uniswapFactories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "dailyVolumeUSD", - dateField: "date" - } }); diff --git a/dexs/mobius-money/index.ts b/dexs/mobius-money/index.ts index 36935cadfd..2bcd8cfb4e 100644 --- a/dexs/mobius-money/index.ts +++ b/dexs/mobius-money/index.ts @@ -1,25 +1,18 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; -import { Chain } from "@defillama/sdk/build/general"; -import customBackfill from "../../helpers/customBackfill"; const endpoints = { [CHAIN.CELO]: sdk.graph.modifyEndpoint('CcSNm5hBSGYk3WT1faPGDKBxHCdHkyyXYFujHC9DPtmY'), }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "tradeVolumes", field: "volume", }, - dailyVolume: { - factory: "dailyVolume", - field: "volume", - dateField: "timestamp" - }, }); const adapter: SimpleAdapter = { @@ -28,7 +21,6 @@ const adapter: SimpleAdapter = { [CHAIN.CELO]: { fetch: graphs(CHAIN.CELO), start: 1636514733, - // customBackfill: customBackfill(CHAIN.CELO as Chain, graphs) }, }, }; diff --git a/dexs/mooniswap/index.ts b/dexs/mooniswap/index.ts index a4cfaf84a9..c8db6fc681 100644 --- a/dexs/mooniswap/index.ts +++ b/dexs/mooniswap/index.ts @@ -1,16 +1,14 @@ import { SimpleAdapter } from "../../adapters/types"; import { ETHEREUM } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [ETHEREUM]: "https://api.thegraph.com/subgraphs/name/1inch-exchange/oneinch-liquidity-protocol-v2", }; -const dailyDataFactory = "mooniswapDayData"; - -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: { [ETHEREUM]: endpoints[ETHEREUM], }, @@ -18,10 +16,6 @@ const graphs = getChainVolume({ factory: "mooniswapFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: dailyDataFactory, - field: DEFAULT_DAILY_VOLUME_FIELD, - }, }); const adapter: SimpleAdapter = { @@ -32,7 +26,7 @@ const adapter: SimpleAdapter = { start: getStartTimestamp({ endpoints, chain: ETHEREUM, - dailyDataField: `${dailyDataFactory}s`, + dailyDataField: `mooniswapDayDatas`, }), }, }, From f606925203d586879ae2f470fa9758898ed50af4 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 6 Sep 2024 14:44:56 +0100 Subject: [PATCH 1384/1590] quickswap dex --- dexs/nomiswap/index.ts | 10 ++-------- dexs/okcswap/index.ts | 11 ++--------- dexs/pegasys-v3/index.ts | 8 ++------ dexs/physica-finance/index.ts | 8 ++------ dexs/quickswap/index.ts | 2 +- 5 files changed, 9 insertions(+), 30 deletions(-) diff --git a/dexs/nomiswap/index.ts b/dexs/nomiswap/index.ts index 52e6f2605b..922a0c0ab0 100644 --- a/dexs/nomiswap/index.ts +++ b/dexs/nomiswap/index.ts @@ -1,9 +1,7 @@ import * as sdk from "@defillama/sdk"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; import { FetchOptions, SimpleAdapter } from "../../adapters/types"; -import { time } from "console"; const endpoints = { [CHAIN.BSC]: sdk.graph.modifyEndpoint('9ggB4DiKGyXfiS4vh1xqQJMcTQEvxxt715HVm8S3r27G'), @@ -15,16 +13,12 @@ const blacklistTokens = { "0x7f9ad7a5854658d984924e868187b2135514fb88" ] } -const graphsClassic = getGraphDimensions({ +const graphsClassic = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "nomiswapFactories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "nomiswapDayData", - field: VOLUME_FIELD, - }, blacklistTokens }); diff --git a/dexs/okcswap/index.ts b/dexs/okcswap/index.ts index 000558e8a0..ab3c23459b 100644 --- a/dexs/okcswap/index.ts +++ b/dexs/okcswap/index.ts @@ -1,4 +1,4 @@ -import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import request, { gql } from "graphql-request"; import { SimpleAdapter } from "../../adapters/types"; @@ -38,19 +38,12 @@ const getCustomBlock = async (timestamp: number) => { return block; }; -const DAILY_VOLUME_FACTORY = "uniswapDayData"; - -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "uniswapFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - dateField: 'date' - }, getCustomBlock, }); diff --git a/dexs/pegasys-v3/index.ts b/dexs/pegasys-v3/index.ts index 34927e4626..c58e8f8ec9 100644 --- a/dexs/pegasys-v3/index.ts +++ b/dexs/pegasys-v3/index.ts @@ -1,21 +1,17 @@ import { SimpleAdapter } from "../../adapters/types"; -import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { [CHAIN.ROLLUX]: "https://rollux.graph.pegasys.fi/subgraphs/name/pollum-io/pegasys-v3", }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "pegasysDayData", - field: "volumeUSD", - }, }); // rollux const adapter: SimpleAdapter = { diff --git a/dexs/physica-finance/index.ts b/dexs/physica-finance/index.ts index a94dfd6269..c843643b22 100644 --- a/dexs/physica-finance/index.ts +++ b/dexs/physica-finance/index.ts @@ -1,22 +1,18 @@ import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; import { BreakdownAdapter } from "../../adapters/types"; const endpointsV3 = { [CHAIN.PLANQ]: "https://subgraph.planq.finance/subgraphs/name/ianlapham/uniswap-v3", }; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: endpointsV3, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "volumeUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 14.2857, // 1/7th of generated LP fees are protocol fees diff --git a/dexs/quickswap/index.ts b/dexs/quickswap/index.ts index df845cb1f8..59d42de4d7 100644 --- a/dexs/quickswap/index.ts +++ b/dexs/quickswap/index.ts @@ -86,7 +86,7 @@ const fetchLiquidityHub = async (timestamp: number) => { const adapter: BreakdownAdapter = { - version: 2, + version: 1, breakdown: { v2: { [CHAIN.POLYGON]: { From f068f53a865df9f2229a754d18b7491a207ed05c Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 6 Sep 2024 14:50:50 +0100 Subject: [PATCH 1385/1590] saddle --- dexs/radioshack/index.ts | 8 ++------ dexs/reax-one-dex/index.ts | 6 ++---- dexs/retro/index.ts | 10 +++------- dexs/saddle-finance/index.ts | 9 ++------- 4 files changed, 9 insertions(+), 24 deletions(-) diff --git a/dexs/radioshack/index.ts b/dexs/radioshack/index.ts index 08fd11db05..ef44771b8a 100644 --- a/dexs/radioshack/index.ts +++ b/dexs/radioshack/index.ts @@ -2,7 +2,7 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('743VoDTGxZ1m3QHC3BCnTkKcvXqo8PfyTSs6QGHgcQKd'), @@ -12,16 +12,12 @@ const endpoints = { // [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('CK42aJEkVpr5kS3wygQrpmDegNcRDbdqtkzNhzRLfW21'), }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: DEFAULT_TOTAL_VOLUME_FACTORY, field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - }, }); const adapter: SimpleAdapter = { diff --git a/dexs/reax-one-dex/index.ts b/dexs/reax-one-dex/index.ts index 167d73dca9..18c261941a 100644 --- a/dexs/reax-one-dex/index.ts +++ b/dexs/reax-one-dex/index.ts @@ -1,9 +1,8 @@ import { ChainEndpoints, SimpleAdapter } from "../../adapters/types"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import customBackfill from "../../helpers/customBackfill"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; -import { getStartTimestamp } from "../../helpers/getStartTimestamp"; const endpoints: ChainEndpoints = { [CHAIN.MANTLE]: "https://subgraph-api.mantle.xyz/subgraphs/name/reax/swaps-1", @@ -14,11 +13,10 @@ const graphParams = { factory: "balancers", field: "totalSwapVolume", }, - hasDailyVolume: false, } -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, ...graphParams }); diff --git a/dexs/retro/index.ts b/dexs/retro/index.ts index b3f140b2fc..034b8e110e 100644 --- a/dexs/retro/index.ts +++ b/dexs/retro/index.ts @@ -1,22 +1,18 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpointV3 = { [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('DZyDuvUHNThtJJQAEbYGr32xYc93BZAdfqatpYUNMZbe') } -const VOLUME_USD = 'volumeUSD' -const v3Graphs = getGraphDimensions({ + +const v3Graphs = getGraphDimensions2({ graphUrls: endpointV3, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", ProtocolRevenue: 10, diff --git a/dexs/saddle-finance/index.ts b/dexs/saddle-finance/index.ts index 2420ef2446..f722d6b6ae 100644 --- a/dexs/saddle-finance/index.ts +++ b/dexs/saddle-finance/index.ts @@ -1,6 +1,6 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; @@ -9,17 +9,12 @@ const endpoints = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('AB2t32R1htdcguMQVVGt4biKGFeQ2HfXkEgJNkKi1dJa') }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "tradeVolumes", field: "volume", }, - dailyVolume: { - factory: "dailyVolume", - field: "volume", - dateField: "timestamp" - }, }); const adapter: SimpleAdapter = { From 2b011477be480eb4191fdd712c61eee967cbeb7c Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 6 Sep 2024 14:59:14 +0100 Subject: [PATCH 1386/1590] spirit --- dexs/shimmersea/index.ts | 10 +++------- dexs/sobal/index.ts | 7 +++---- dexs/soulswap/index.ts | 8 ++------ dexs/spiritswap/index.ts | 11 ++--------- 4 files changed, 10 insertions(+), 26 deletions(-) diff --git a/dexs/shimmersea/index.ts b/dexs/shimmersea/index.ts index 706467e701..1813e711c7 100644 --- a/dexs/shimmersea/index.ts +++ b/dexs/shimmersea/index.ts @@ -1,20 +1,16 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; -import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; +import { DEFAULT_TOTAL_VOLUME_FIELD } from "../../helpers/getUniSubgraphVolume"; const v3Endpoints = { [CHAIN.SHIMMER_EVM]: "https://graph-c-ha.shimmersea.finance/subgraphs/name/shimmersea/shimmer-dex", } -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "uniswapFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: "dailyVolumeUSD", - }, feesPercent: { type: "volume", UserFees: 0.3, diff --git a/dexs/sobal/index.ts b/dexs/sobal/index.ts index b34281f9e5..e3b0456598 100644 --- a/dexs/sobal/index.ts +++ b/dexs/sobal/index.ts @@ -1,5 +1,5 @@ -import { ChainEndpoints, BreakdownAdapter, BaseAdapter, SimpleAdapter } from "../../adapters/types"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { ChainEndpoints, SimpleAdapter } from "../../adapters/types"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; import { Chain } from "@defillama/sdk/build/general"; @@ -14,10 +14,9 @@ const graphParams = { factory: "balancers", field: "totalSwapVolume", }, - hasDailyVolume: false, } -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, ...graphParams }); diff --git a/dexs/soulswap/index.ts b/dexs/soulswap/index.ts index e432402073..3d96133867 100644 --- a/dexs/soulswap/index.ts +++ b/dexs/soulswap/index.ts @@ -1,5 +1,5 @@ import * as sdk from "@defillama/sdk"; -import { getChainVolumeWithGasToken } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolumeWithGasToken2 } from "../../helpers/getUniSubgraphVolume"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { /*AVAX,*/ FANTOM } from "../../helpers/chains"; import { SimpleAdapter } from "../../adapters/types"; @@ -12,7 +12,7 @@ const endpoints = { const VOLUME_FIELD = "volumeUSD"; -const graphs = getChainVolumeWithGasToken({ +const graphs = getChainVolumeWithGasToken2({ graphUrls: { //[AVAX]: endpoints[AVAX], [FANTOM]: endpoints[FANTOM] @@ -21,10 +21,6 @@ const graphs = getChainVolumeWithGasToken({ factory: "factories", field: VOLUME_FIELD, }, - dailyVolume: { - factory: "dayData", - field: VOLUME_FIELD, - }, priceToken: "coingecko:fantom" }); diff --git a/dexs/spiritswap/index.ts b/dexs/spiritswap/index.ts index 09527dfd9c..2343621998 100644 --- a/dexs/spiritswap/index.ts +++ b/dexs/spiritswap/index.ts @@ -1,15 +1,12 @@ import { SimpleAdapter } from "../../adapters/types"; import * as sdk from "@defillama/sdk"; - -const { - getChainVolumeWithGasToken, -} = require("../../helpers/getUniSubgraphVolume"); +import { getChainVolumeWithGasToken2 } from "../../helpers/getUniSubgraphVolume"; const endpoints = { fantom: sdk.graph.modifyEndpoint('E6viiLSqVvjLy9re7aBPkaXAB2itNDho2LR3CP2q1uqP'), }; -const graphs = getChainVolumeWithGasToken({ +const graphs = getChainVolumeWithGasToken2({ graphUrls: { fantom: endpoints.fantom, }, @@ -17,10 +14,6 @@ const graphs = getChainVolumeWithGasToken({ factory: "spiritswapFactories", field: 'totalVolumeFTM', }, - dailyVolume: { - factory: "spiritswapDayData", - field: 'dailyVolumeFTM', - }, priceToken: "coingecko:fantom" }); From 735ccc5bc9488891129a3fdafe9891fdcca68862 Mon Sep 17 00:00:00 2001 From: Digtyarenk0 Date: Sat, 7 Sep 2024 13:04:04 +0200 Subject: [PATCH 1387/1590] add open position v2 && add new swap/batch addresses --- dexs/primex-finance/index.ts | 11 +++++++++++ dexs/primex-finance/utils.ts | 24 ++++++++++++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/dexs/primex-finance/index.ts b/dexs/primex-finance/index.ts index 12e1d37db2..0c90241d69 100644 --- a/dexs/primex-finance/index.ts +++ b/dexs/primex-finance/index.ts @@ -11,6 +11,8 @@ const abi = { "event SpotSwap(address indexed trader, address indexed receiver, address tokenA, address tokenB, uint256 amountSold, uint256 amountBought)", OpenPosition: "event OpenPosition(uint256 indexed positionId, address indexed trader, address indexed openedBy, (uint256 id, uint256 scaledDebtAmount, address bucket, address soldAsset, uint256 depositAmountInSoldAsset, address positionAsset, uint256 positionAmount, address trader, uint256 openBorrowIndex, uint256 createdAt, uint256 updatedConditionsAt, bytes extraParams) position, address feeToken, uint256 protocolFee, uint256 entryPrice, uint256 leverage, (uint256 managerType, bytes params)[] closeConditions)", + OpenPositionV2: + "event OpenPosition( uint256 indexed positionId, address indexed trader, address indexed openedBy, PositionLibrary.Position position, uint256 entryPrice, uint256 leverage, LimitOrderLibrary.Condition[] closeConditions )", ClosePosition: "event ClosePosition(uint256 indexed positionId, address indexed trader, address indexed closedBy, address bucketAddress, address soldAsset, address positionAsset, uint256 decreasePositionAmount, int256 profit, uint256 positionDebt, uint256 amountOut, uint8 reason)", PartialClosePosition: @@ -34,6 +36,11 @@ const fetch = eventAbi: abi.OpenPosition, topic: topics.openPosition, }, + { + targets: positionManager, + eventAbi: abi.OpenPositionV2, + topic: topics.openPositionV2, + }, { targets: positionManager, eventAbi: abi.ClosePosition }, { targets: positionManager, eventAbi: abi.PartialClosePosition }, { targets: batchManager, eventAbi: abi.ClosePosition }, @@ -42,6 +49,7 @@ const fetch = const [ swapLogs, openPositionLogs, + openPositionV2Logs, closePositionLogs, partiallyClosePositionLogs, closePositionBatchLogs, @@ -51,6 +59,9 @@ const fetch = openPositionLogs.forEach((e: any) => dailyVolume.add(e.position.positionAsset, e.position.positionAmount) ); + openPositionV2Logs.forEach((e: any) => + dailyVolume.add(e.position.positionAsset, e.position.positionAmount) + ); closePositionLogs.forEach((e: any) => dailyVolume.add(e.soldAsset, e.amountOut) ); diff --git a/dexs/primex-finance/utils.ts b/dexs/primex-finance/utils.ts index 359eea20f4..066f4a67c4 100644 --- a/dexs/primex-finance/utils.ts +++ b/dexs/primex-finance/utils.ts @@ -11,25 +11,39 @@ const config: { [chain: string]: ChainConfig } = { [CHAIN.POLYGON]: { swapManager: [ "0x0AaDC2Eae6963ED983d85cbF088b0c294f4c26ff", + "0x140D437ac247D8D8FC43534f8f4E6c555B257a9e", "0xA0069a14Df3ECd19a38c509757eBc2C2Aaa44992", ], positionManager: ["0x02bcaA4633E466d151b34112608f60A82a4F6035"], batchManager: [ "0xC6B1AF3dEb9E379ccADF2Fa21263a50E91F4776C", + "0xc611c8c3689B67096180289643Bd086ae5833ADC", "0xc10771D8f5B6Ba702E3a44EC76969f07578F08b7", ], start: 1697587200, }, [CHAIN.ARBITRUM]: { - swapManager: ["0xbE3de856EB22bf6EFA03DD55e65DF22bA212e6Db"], + swapManager: [ + "0xbE3de856EB22bf6EFA03DD55e65DF22bA212e6Db", + "0xC024DE24f34eEc431D41340DA5A18d67eE46BA79", + ], positionManager: ["0x86890E30cE9E1e13Db5560BbEb435c55567Af1cd"], - batchManager: ["0xF2225a8f90311DaF9e989db1AfFd47617bb69E96"], + batchManager: [ + "0xF2225a8f90311DaF9e989db1AfFd47617bb69E96", + "0xE81ed447d923153f51207fdc41973B204F085f21", + ], start: 1700611200, }, [CHAIN.ETHEREUM]: { - swapManager: ["0xa6d76535e265357187653d4AAd9b362404D42EA8"], + swapManager: [ + "0xa6d76535e265357187653d4AAd9b362404D42EA8", + "0xb980D7b0F4A05572DE635E8916A222F05fC64552", + ], positionManager: ["0x99d63fEA4b3Ef6ca77941df3C5740dAd1586f0B8"], - batchManager: ["0x1da9c104C517C7b4465c8Eef458Da0a6c61835Fe"], + batchManager: [ + "0x1da9c104C517C7b4465c8Eef458Da0a6c61835Fe", + "0x2ff2D294312D3224d609fCc0b2EeE82b5f665753", + ], start: 1702771200, }, }; @@ -38,6 +52,8 @@ const topics = { swap: "0x5fcf6637f014854f918b233372226c5492e6a5157e517674a8588675550c40c6", openPosition: "0x3f505465ce78d219c28bcf9bed881a651c4800d1161454b0d5c93225196e7b8e", + openPositionV2: + "0x7eb8abd0eb2f629d9150adef2d047584ab0d0830368a1d5d5243955f73f884e7", partiallyClosePosition: "0xda47f84a849dfb28125ae28a0bf305b75e72bff27796fc4bca36e2f848b0a0e6", closePosition: From dce095d3d9ee31252ef29e2e974fa713af53376a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 8 Sep 2024 14:27:09 +0000 Subject: [PATCH 1388/1590] add supper chain --- fees/superchain.ts | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 fees/superchain.ts diff --git a/fees/superchain.ts b/fees/superchain.ts new file mode 100644 index 0000000000..bed84e278d --- /dev/null +++ b/fees/superchain.ts @@ -0,0 +1,44 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types" +import { CHAIN } from "../helpers/chains" +import ADDRESSES from '../helpers/coreAssets.json' + +const fees: any = { + [CHAIN.BASE]: ['0x9c3631dDE5c8316bE5B7554B0CcD2631C15a9A05'], + [CHAIN.ETHEREUM]: [ + '0xa3d596eafab6b13ab18d40fae1a962700c84adea', + '0x793e01dCf6F9759Bf26dd7869b03129e64217537', + '0x4a4962275DF8C60a80d3a25faEc5AA7De116A746', + '0xe900b3Edc1BA0430CFa9a204A1027B90825ac951', + '0xed4811010a86f7c39134fbc20206d906ad1176b6', + '0x13f37e6b638ca83e7090bb3722b3ae04bf884019', + '0x99c9fc46f92e8a1c0dec1b1747d010903e884be1' + ] +} +const fetchFees = async (options: FetchOptions) => { + const { api, fromApi, createBalances } = options; + await api.sumTokens({ owners: fees[options.chain], tokens: [ADDRESSES.null] }) + await fromApi.sumTokens({ owners: fees[options.chain], tokens: [ADDRESSES.null] }) + const balances = createBalances() + balances.addBalances(api.getBalancesV2()) + balances.subtract(fromApi.getBalancesV2()) + const dailyFees = balances.clone() + return { + dailyFees, + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.BASE]: { + fetch: fetchFees, + start: 0, + }, + [CHAIN.ETHEREUM]: { + fetch: fetchFees, + start: 0, + }, + } +} + +export default adapter From 82ac05e51390da20646a5c5e92627e0e80126321 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 8 Sep 2024 14:44:17 +0000 Subject: [PATCH 1389/1590] add koi-finance-cl --- dexs/koi-finance-cl/index.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 dexs/koi-finance-cl/index.ts diff --git a/dexs/koi-finance-cl/index.ts b/dexs/koi-finance-cl/index.ts new file mode 100644 index 0000000000..3cf7e6bb7a --- /dev/null +++ b/dexs/koi-finance-cl/index.ts @@ -0,0 +1,17 @@ +import { CHAIN } from "../../helpers/chains"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; + +const endpoints = { + [CHAIN.ERA]: "https://api.studio.thegraph.com/query/12332/koi-finance-v3/version/latest", + }; + +const adapter = univ2Adapter2(endpoints, { + factoriesName: "factories", + dayData: "koiFinanceDayData", + dailyVolume: "volumeUSD", + totalVolume: "totalVolumeUSD", +}); + +adapter.adapter.era.start = 1679529600 + +export default adapter From 209b547ee0e19dc46f06675d3eaab6712c43202c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 8 Sep 2024 14:52:48 +0000 Subject: [PATCH 1390/1590] fees --- fees/koi-finance-cl.ts | 48 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 fees/koi-finance-cl.ts diff --git a/fees/koi-finance-cl.ts b/fees/koi-finance-cl.ts new file mode 100644 index 0000000000..da11fcc200 --- /dev/null +++ b/fees/koi-finance-cl.ts @@ -0,0 +1,48 @@ +import request, { gql } from "graphql-request"; +import { FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphFees"; +import BigNumber from "bignumber.js"; + +const endpoints: any = { + [CHAIN.ERA]: "https://api.studio.thegraph.com/query/12332/koi-finance-v3/version/latest", +} + +interface IData { + feesUSD: string +} +interface IPoolDay { + poolDayDatas: IData[] +} + +const fetchFees = async (timestamp: number, _t: any, options: FetchOptions): Promise => { + const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.startOfDay * 1000)); + const graphQuery = gql`{ + poolDayDatas(frist: 1000, where:{date:${todayTimestamp},tvlUSD_gt: 1000},orderBy:feesUSD, orderDirection: desc) { + feesUSD + } + }`; + + try { + const graphRes: IPoolDay = await request(endpoints[options.chain], graphQuery); + const dailyFee = new BigNumber(graphRes.poolDayDatas.reduce((a: number, b: IData) => a + Number(b.feesUSD), 0)) + return { + timestamp, + dailyFees: dailyFee.toString(), + dailyRevenue: dailyFee.times(0.2).toString(), + }; + } catch (e) { + return { timestamp }; + } +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ERA]: { + fetch: fetchFees, + start: 0 + }, + }, +}; + +export default adapter; From ef50e882e0f012d93e3d115b3247bff610a0b2c9 Mon Sep 17 00:00:00 2001 From: vulntor <22735155+algtm@users.noreply.github.com> Date: Mon, 9 Sep 2024 10:35:58 +0800 Subject: [PATCH 1391/1590] new version udex --- aggregators/udex-agg/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/aggregators/udex-agg/index.ts b/aggregators/udex-agg/index.ts index c20476f89f..dd7081f0d8 100644 --- a/aggregators/udex-agg/index.ts +++ b/aggregators/udex-agg/index.ts @@ -10,10 +10,10 @@ type IContract = { } const contract: IContract = { - [CHAIN.BSC]: '0x15Fa1b705D85Cf35b625d0Afa3Ab4360b92D019a', - [CHAIN.POLYGON]:'0xc6C4013D6f7D4313634798D6E516ef72D1912915', - [CHAIN.ETHEREUM]:'0x94aa97b013b9b1cc7915199e8621ddf664646339', - [CHAIN.BASE]:'0x94aa97b013b9b1cc7915199e8621ddf664646339' + [CHAIN.BSC]: '0xfCD555b55AA785d46E8c6e9bBB109b10602c431c', + [CHAIN.POLYGON]:'0x464599BDaC77E8e5843D5BbC531EC8aD75d3F7b1', + [CHAIN.ETHEREUM]:'0x9556E8ce70ceA3c43e4A6c17ad2FAb258067b058', + [CHAIN.BASE]:'0x334F493613c1dD33a364684802fB9C728dfcE1A5' } From c155be4c11ee3c9ea468360761e7ac4d6bcb1fa7 Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Mon, 9 Sep 2024 18:49:55 +0800 Subject: [PATCH 1392/1590] add protocolFees poolFees --- fees/solv-finance/index.ts | 66 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 fees/solv-finance/index.ts diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts new file mode 100644 index 0000000000..8f3c6d868b --- /dev/null +++ b/fees/solv-finance/index.ts @@ -0,0 +1,66 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { CHAIN } from "../../helpers/chains"; +import { BreakdownAdapter, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { addTokensReceived } from "../../helpers/token"; +import { httpGet } from "../../utils/fetchURL"; + +const feesConfig = "https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solv-fees.json"; + +const chains: { + [chain: Chain]: { deployedAt: number }; +} = { + [CHAIN.ETHEREUM]: { + deployedAt: 1718236800, + } +}; + +const protocol: FetchV2 = async (options) => { + const contracts: { + [chain: Chain]: { + [protocolFees: string]: { address: string[]; token: string[]; deployedAt: number }; + } + } = await httpGet(feesConfig); + + const dailyFees = await addTokensReceived({ + options, + targets: contracts[options.chain]["protocolFees"].address, + tokens: contracts[options.chain]["protocolFees"].token, + }); + + return { + dailyFees, + dailyRevenue: dailyFees, + dailyProtocolRevenue: dailyFees, + }; +}; + +const pool: FetchV2 = async (options) => { + const dailyFees = options.createBalances(); + + return { + dailyFees, + dailyRevenue: dailyFees, + dailyProtocolRevenue: dailyFees, + }; +} + +const adapter: BreakdownAdapter = { breakdown: {}, version: 2 }; + +Object.keys(chains).forEach((chain: Chain) => { + adapter.breakdown = { + protocolFees: { + [chain]: { + fetch: protocol, + start: chains[chain].deployedAt, + } + }, + poolFees: { + [chain]: { + fetch: pool, + start: chains[chain].deployedAt, + } + } + } +}); + +export default adapter; \ No newline at end of file From 7a0a203921789256240ef727051931f738f55550 Mon Sep 17 00:00:00 2001 From: ideapacito Date: Mon, 9 Sep 2024 19:55:47 +0700 Subject: [PATCH 1393/1590] update fees of fwx --- fees/fwx/index.ts | 92 ++++++++++++++++++++++++++++++----------------- 1 file changed, 60 insertions(+), 32 deletions(-) diff --git a/fees/fwx/index.ts b/fees/fwx/index.ts index b87a5cb36b..60b8f58cde 100644 --- a/fees/fwx/index.ts +++ b/fees/fwx/index.ts @@ -4,33 +4,28 @@ import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpPost } from "../../utils/fetchURL"; -interface IEndpoint { - dailyFees: string; - chainId: number; -} - interface IDailyFeeData { daily_interest_paid: string; daily_trading_fee: string; + daily_otf_fee: string; daily_bounty_fee_to_protocol: string; daily_bounty_fee_to_liquidator: string; daily_liquidation_fee: string; total_interest_paid: string; total_trading_fee: string; + total_otf_fee: string; total_bounty_fee_to_protocol: string; total_bounty_fee_to_liquidator: string; total_liquidation_fee: string; } -const endpoints: Record = { - [CHAIN.AVAX]: { - dailyFees: "https://analytics.fwx.finance/api/fees", - chainId: 43114, - }, +const endpoints = { + dailyFees: "https://analytics.fwx.finance/api/fees", }; const CHAIN_ID = { [CHAIN.AVAX]: 43114, + [CHAIN.BASE]: 8453, }; const fetch = (chain: Chain) => { @@ -42,29 +37,56 @@ const fetch = (chain: Chain) => { const formattedDate = date.toISOString().replace(/\.(\d{3})Z$/, ".$1Z"); // * call api for daily fees and revenue - const dailyRes = await httpPost(endpoints[chain].dailyFees, { + const marginTradeRes = await httpPost(endpoints.dailyFees, { date: formattedDate, chain_id: CHAIN_ID[chain], + is_perp: false, }); - const dailyData = dailyRes as IDailyFeeData; - const dailyInterestPaid = parseFloat(dailyData.daily_interest_paid); - const dailyTradingFee = parseFloat(dailyData.daily_trading_fee); - const dailyBountyFeeToProtocol = parseFloat( - dailyData.daily_bounty_fee_to_protocol - ); - const dailyBountyFeeToLiquidator = parseFloat( - dailyData.daily_bounty_fee_to_liquidator - ); - const dailyLiquidationFee = parseFloat(dailyData.daily_liquidation_fee); - const totalInterestPaid = parseFloat(dailyData.total_interest_paid); - const totalTradingFee = parseFloat(dailyData.total_trading_fee); - const totalBountyFeeToProtocol = parseFloat( - dailyData.total_bounty_fee_to_protocol - ); - const totalBountyFeeToLiquidator = parseFloat( - dailyData.total_bounty_fee_to_liquidator - ); - const totalLiquidationFee = parseFloat(dailyData.total_liquidation_fee); + const marginTradeResData = marginTradeRes as IDailyFeeData; + + const perpRes = await httpPost(endpoints.dailyFees, { + date: formattedDate, + chain_id: CHAIN_ID[chain], + is_perp: true, + }); + const perpResData = perpRes as IDailyFeeData; + + const dailyInterestPaid = + parseFloat(marginTradeResData.daily_interest_paid) + + parseFloat(perpResData.daily_interest_paid); + const dailyTradingFee = + parseFloat(marginTradeResData.daily_trading_fee) + + parseFloat(perpResData.daily_trading_fee); + const dailyOtfFee = + parseFloat(marginTradeResData.daily_otf_fee) + + parseFloat(perpResData.daily_otf_fee); + const dailyBountyFeeToProtocol = + parseFloat(marginTradeResData.daily_bounty_fee_to_protocol) + + parseFloat(perpResData.daily_bounty_fee_to_protocol); + const dailyBountyFeeToLiquidator = + parseFloat(marginTradeResData.daily_bounty_fee_to_liquidator) + + parseFloat(perpResData.daily_bounty_fee_to_liquidator); + const dailyLiquidationFee = + parseFloat(marginTradeResData.daily_liquidation_fee) + + parseFloat(perpResData.daily_liquidation_fee); + const totalInterestPaid = + parseFloat(marginTradeResData.total_interest_paid) + + parseFloat(perpResData.total_interest_paid); + const totalTradingFee = + parseFloat(marginTradeResData.total_trading_fee) + + parseFloat(perpResData.total_trading_fee); + const totalOtfFee = + parseFloat(marginTradeResData.total_otf_fee) + + parseFloat(perpResData.total_otf_fee); + const totalBountyFeeToProtocol = + parseFloat(marginTradeResData.total_bounty_fee_to_protocol) + + parseFloat(perpResData.total_bounty_fee_to_protocol); + const totalBountyFeeToLiquidator = + parseFloat(marginTradeResData.total_bounty_fee_to_liquidator) + + parseFloat(perpResData.total_bounty_fee_to_liquidator); + const totalLiquidationFee = + parseFloat(marginTradeResData.total_liquidation_fee) + + parseFloat(perpResData.total_liquidation_fee); const dailyFees = dailyInterestPaid + @@ -75,7 +97,8 @@ const fetch = (chain: Chain) => { const dailySupplySideRevenue = 0.1 * dailyInterestPaid + 0.8 * dailyTradingFee + - dailyBountyFeeToProtocol; + dailyBountyFeeToProtocol + + dailyOtfFee; const dailyProtocolRevenue = 0.9 * dailyInterestPaid + 0.2 * dailyTradingFee; const totalFees = @@ -87,7 +110,8 @@ const fetch = (chain: Chain) => { const totalSupplySideRevenue = 0.1 * totalInterestPaid + 0.8 * totalTradingFee + - totalBountyFeeToProtocol; + totalBountyFeeToProtocol + + totalOtfFee; const totalProtocolRevenue = 0.9 * totalInterestPaid + 0.2 * totalTradingFee; @@ -111,6 +135,10 @@ const adapter: Adapter = { fetch: fetch(CHAIN.AVAX), start: 1701907200, }, + [CHAIN.BASE]: { + fetch: fetch(CHAIN.BASE), + start: 1725408000, + }, }, version: 1, }; From 228c430ff38c17523f5e52326389a6f305b870d3 Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Mon, 9 Sep 2024 22:30:23 +0400 Subject: [PATCH 1394/1590] Add volume and fees adapters for GasPump launchpad --- dexs/gaspump/index.ts | 34 ++++++++++++++++++++++++++++++++++ fees/gaspump/index.ts | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 dexs/gaspump/index.ts create mode 100644 fees/gaspump/index.ts diff --git a/dexs/gaspump/index.ts b/dexs/gaspump/index.ts new file mode 100644 index 0000000000..3d2eb13f4d --- /dev/null +++ b/dexs/gaspump/index.ts @@ -0,0 +1,34 @@ +import fetchURL from "../../utils/fetchURL" +import { CHAIN } from "../../helpers/chains"; +import { FetchOptions } from "../../adapters/types"; +import { getPrices } from "../../utils/prices"; + + +const endpoint = "https://api-dev.gas111.com/api/v1/internal/tokens/volume-stats?" + + +const fetch = async (options: FetchOptions) => { + const startTime = new Date(options.startTimestamp * 1000).toISOString().split(".")[0] + const endTime = new Date(options.endTimestamp * 1000).toISOString().split(".")[0] + const res = await fetchURL(`${endpoint}start_date=${startTime}&end_date=${endTime}`) + const TON = "coingecko:the-open-network" + const ton_price = await getPrices([TON], options.startTimestamp); + + return { + dailyVolume: parseInt(res.volume_ton) * ton_price[TON].price, + timestamp: options.startTimestamp, + }; +}; + + +const adapter: any = { + version: 2, + adapter: { + [CHAIN.TON]: { + fetch, + start: 1725134400, + }, + }, +}; + +export default adapter; diff --git a/fees/gaspump/index.ts b/fees/gaspump/index.ts new file mode 100644 index 0000000000..69ef6c56eb --- /dev/null +++ b/fees/gaspump/index.ts @@ -0,0 +1,34 @@ +import fetchURL from "../../utils/fetchURL" +import { CHAIN } from "../../helpers/chains"; +import { FetchOptions } from "../../adapters/types"; +import { getPrices } from "../../utils/prices"; + + +const endpoint = "https://api-dev.gas111.com/api/v1/internal/tokens/volume-stats?" + + +const fetch = async (options: FetchOptions) => { + const startTime = new Date(options.startTimestamp * 1000).toISOString().split(".")[0] + const endTime = new Date(options.endTimestamp * 1000).toISOString().split(".")[0] + const res = await fetchURL(`${endpoint}start_date=${startTime}&end_date=${endTime}`) + const TON = "coingecko:the-open-network" + const ton_price = await getPrices([TON], options.startTimestamp); + + return { + dailyFees: parseInt(res.fee_ton) * ton_price[TON].price, + timestamp: options.startTimestamp, + }; +}; + + +const adapter: any = { + version: 2, + adapter: { + [CHAIN.TON]: { + fetch, + start: 1725134400, + }, + }, +}; + +export default adapter; From 8fd9af8ecd50e811e73e4ec38a062d66a1ac1c78 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 9 Sep 2024 22:42:02 +0100 Subject: [PATCH 1395/1590] sushi --- dexs/kyberswap/index.ts | 103 +++++++++++++++---------------------- dexs/rubicon/index.ts | 14 ++--- dexs/spookyswap/index.ts | 13 ++--- dexs/squadswap-v2/index.ts | 10 ++-- dexs/squadswap-v3/index.ts | 15 ++---- dexs/supswap-v2/index.ts | 8 +-- dexs/supswap-v3/index.ts | 14 +---- dexs/surfswap/index.ts | 15 ++---- dexs/sushiswap/classic.ts | 31 +++-------- dexs/sushiswap/index.ts | 6 +-- dexs/sushiswap/trident.ts | 50 +++++++++--------- 11 files changed, 95 insertions(+), 184 deletions(-) diff --git a/dexs/kyberswap/index.ts b/dexs/kyberswap/index.ts index 81d8d00821..a2c0bf780e 100644 --- a/dexs/kyberswap/index.ts +++ b/dexs/kyberswap/index.ts @@ -1,54 +1,52 @@ import * as sdk from "@defillama/sdk"; -import ADDRESSES from '../../helpers/coreAssets.json' -import request from "graphql-request"; import { BaseAdapter, BreakdownAdapter, FetchOptions, FetchResultVolume } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { - getChainVolume, DEFAULT_TOTAL_VOLUME_FIELD, DEFAULT_DAILY_VOLUME_FIELD, - univ2Adapter, + univ2Adapter2, + getChainVolume2, getUniqStartOfTodayTimestamp, + getChainVolume, } from "../../helpers/getUniSubgraphVolume"; import { Chain } from "@defillama/sdk/build/general"; +import request from "graphql-request"; +import ADDRESSES from '../../helpers/coreAssets.json' const normalizeChain = { "avax": "avalanche" } as {[c:string]:string} -const kyberswapElasticV2 = univ2Adapter({ +const kyberswapElasticV2 = univ2Adapter2({ [CHAIN.ETHEREUM]: "https://ethereum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-ethereum-legacy", - [CHAIN.BSC]: "https://bsc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bsc-legacy", - [CHAIN.POLYGON]: "https://bsc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bsc-legacy", - [CHAIN.AVAX]: "https://avalanche-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-avalanche-legacy", - [CHAIN.ARBITRUM]: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum-legacy", + // [CHAIN.BSC]: "https://bsc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bsc-legacy", + // [CHAIN.POLYGON]: "https://bsc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bsc-legacy", + // [CHAIN.AVAX]: "https://avalanche-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-avalanche-legacy", + // [CHAIN.ARBITRUM]: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum-legacy", [CHAIN.OPTIMISM]: "https://optimism-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-optimism-legacy", - [CHAIN.FANTOM]: "https://fantom-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-fantom-legacy", - [CHAIN.BITTORRENT]: "https://bttc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bttc-legacy", - [CHAIN.CRONOS]: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-cronos-legacy", - [CHAIN.VELAS]: "https://velas-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-velas-legacy", - [CHAIN.OASIS]: "https://oasis-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-oasis-legacy", + // [CHAIN.FANTOM]: "https://fantom-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-fantom-legacy", + // [CHAIN.BITTORRENT]: "https://bttc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bttc-legacy", + // [CHAIN.CRONOS]: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-cronos-legacy", + // [CHAIN.VELAS]: "https://velas-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-velas-legacy", + // [CHAIN.OASIS]: "https://oasis-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-oasis-legacy", }, { factoriesName: "factories", - dayData: "kyberSwapDayData", - dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); kyberswapElasticV2.version = 2; kyberswapElasticV2.adapter.ethereum.start = 1654905600; -kyberswapElasticV2.adapter.bsc.start = 1654732800; -kyberswapElasticV2.adapter.polygon.start = 1654732800; -kyberswapElasticV2.adapter.avax.start = 1654905600; -kyberswapElasticV2.adapter.arbitrum.start = 1655942400; +// kyberswapElasticV2.adapter.bsc.start = 1654732800; +// kyberswapElasticV2.adapter.polygon.start = 1654732800; +// kyberswapElasticV2.adapter.avax.start = 1654905600; +// kyberswapElasticV2.adapter.arbitrum.start = 1655942400; kyberswapElasticV2.adapter.optimism.start = 1656460800; -kyberswapElasticV2.adapter.fantom.start = 1654732800; -kyberswapElasticV2.adapter.bittorrent.start = 1658188800; -kyberswapElasticV2.adapter.oasis.start = 1660780800; -kyberswapElasticV2.adapter.cronos.start = 1660780800; +// kyberswapElasticV2.adapter.fantom.start = 1654732800; +// kyberswapElasticV2.adapter.bittorrent.start = 1658188800; +// kyberswapElasticV2.adapter.oasis.start = 1660780800; +// kyberswapElasticV2.adapter.cronos.start = 1660780800; // velas, oasis & bittorrent missing -const elasticChains = ["ethereum", "polygon", "bsc", "avax", "fantom", "arbitrum", "optimism"] +const elasticChains = ["ethereum", "optimism"]//, "polygon", "bsc", "avax", "fantom", "arbitrum", "optimism"] const elasticEndpoints = elasticChains.reduce((acc, chain)=>({ [chain]: `https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-${normalizeChain[chain]??chain}`, @@ -56,16 +54,16 @@ const elasticEndpoints = elasticChains.reduce((acc, chain)=>({ }), { //cronos: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-cronos", // missing -> almost no volume and stale ethereum: sdk.graph.modifyEndpoint('4U9PxDR4asVvfXyoVy18fhuj6NHnQhLzZkjZ5Bmuc5xk'), - arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum", - polygon: sdk.graph.modifyEndpoint('8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT'), - [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", - [CHAIN.BASE]: "https://base-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-base", - [CHAIN.SCROLL]: "https://scroll-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-scroll" + // arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum", + // polygon: sdk.graph.modifyEndpoint('8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT'), + // [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", + // [CHAIN.BASE]: "https://base-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-base", + // [CHAIN.SCROLL]: "https://scroll-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-scroll" } as any); -elasticEndpoints.fantom = "https://fantom-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-fantom" +// elasticEndpoints.fantom = "https://fantom-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-fantom" -const elasticGraphs = getChainVolume({ +const elasticGraphs = getChainVolume2({ graphUrls: elasticEndpoints, totalVolume: { factory: "factories", @@ -77,23 +75,6 @@ const elasticGraphs = getChainVolume({ }, }); -interface IPoolDayData { - pool: { - id: string - token0: { - id: string - symbol: string - } - token1: { - id: string - symbol: string - } - } - volumeUSD: string - tvlUSD: string - date: number -} - const optimismElastic = async (timestamp: number) => { const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); const url = sdk.graph.modifyEndpoint('3Kpd8i7U94pTz3Mgdb8hyvT5o26fpwT7SUHAbTa6JzfZ'); @@ -124,7 +105,7 @@ const optimismElastic = async (timestamp: number) => { date } }`; - const response: IPoolDayData[] = (await request(url, query)).poolDayDatas; + const response: any[] = (await request(url, query)).poolDayDatas; const volumeUSD = response .filter((pool) => !blacklisted.includes(pool.pool.token0.id) && !blacklisted.includes(pool.pool.token1.id) && !poolBlacklist.includes(pool.pool.id)) .reduce((acc, pool) => { @@ -165,7 +146,7 @@ const ethereumElasicVolume = async (timestamp: number) => { date } }`; - const response: IPoolDayData[] = (await request(url, query)).poolDayDatas; + const response: any[] = (await request(url, query)).poolDayDatas; const volumeUSD = response .filter((pool) => !blacklisted.includes(pool.pool.token0.id) && !blacklisted.includes(pool.pool.token1.id)) .reduce((acc, pool) => { @@ -186,13 +167,13 @@ const classicEndpoints = [...elasticChains].reduce((acc, chain)=>({ ...acc, }), { // cronos: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-cronos", - arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-arbitrum", - [CHAIN.ERA]: "https://zksync-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-zksync", - [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/kybernetwork/kyberswap-classic-linea", - [CHAIN.SCROLL]: "https://scroll-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-scroll" + // arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-arbitrum", + // [CHAIN.ERA]: "https://zksync-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-zksync", + // [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/kybernetwork/kyberswap-classic-linea", + // [CHAIN.SCROLL]: "https://scroll-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-scroll" } as any); -const classicGraphs = getChainVolume({ +const classicGraphs = getChainVolume2({ graphUrls: classicEndpoints, totalVolume: { factory: "dmmFactories", @@ -205,15 +186,15 @@ const classicGraphs = getChainVolume({ }); const customeElasicVolumeFunctions: {[s: Chain]: any} = { - [CHAIN.OPTIMISM]: optimismElastic, - [CHAIN.ETHEREUM]: ethereumElasicVolume + // [CHAIN.OPTIMISM]: optimismElastic, + // [CHAIN.ETHEREUM]: ethereumElasicVolume } function buildFromEndpoints(endpoints: typeof classicEndpoints, graphs: typeof classicGraphs, volumeField:string, dailyDataField:string, isElastic: boolean){ return Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { fetch: async (options: FetchOptions) => { - const a = (customeElasicVolumeFunctions[chain] !== undefined) && isElastic ? await customeElasicVolumeFunctions[chain](options.endTimestamp) : (await graphs(chain as any)(options)) - const elasticV2 = (kyberswapElasticV2.adapter[chain as Chain]?.fetch != undefined && isElastic) ? (await kyberswapElasticV2.adapter[chain as Chain]?.fetch(options as any, {}, options)) : {} as FetchResultVolume; + const a = (customeElasicVolumeFunctions[chain] !== undefined) && isElastic ? await customeElasicVolumeFunctions[chain](options.endTimestamp) : (await graphs(chain as any)(options)) + const elasticV2 = (kyberswapElasticV2.adapter[chain as Chain]?.fetch != undefined && isElastic) ? (await kyberswapElasticV2.adapter[chain as Chain]?.fetch(options as any, {}, options)) : {} as FetchResultVolume; const dailyVolume = Number(a?.dailyVolume || 0) + Number(elasticV2?.dailyVolume || 0) const totalVolume = Number(a?.totalVolume || 0) + Number(elasticV2?.totalVolume || 0) return { diff --git a/dexs/rubicon/index.ts b/dexs/rubicon/index.ts index 076e92591c..189fbbe5cf 100644 --- a/dexs/rubicon/index.ts +++ b/dexs/rubicon/index.ts @@ -1,23 +1,19 @@ -import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter, univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; // Define the old and new adapters -const adapterOld = univ2Adapter({ +const adapterOld = univ2Adapter2({ [CHAIN.ARBITRUM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Metrics_Arbitrum_V2', [CHAIN.OPTIMISM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Metrics_Optimism_V2' }, { factoriesName: "rubicons", totalVolume: "total_volume_usd", - dayData: "dayVolume", - dailyVolume: "volume_usd", - dailyVolumeTimestampField: "dayStartUnix" }); adapterOld.adapter.arbitrum.start = 0; adapterOld.adapter.optimism.start = 0; -const adapterNew = univ2Adapter({ +const adapterNew = univ2Adapter2({ [CHAIN.OPTIMISM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Gladius_Metrics_Optimism_V2', [CHAIN.ARBITRUM]: 'https://graph-v2.rubicon.finance/subgraphs/name/Gladius_Metrics_Arbitrum_V2', [CHAIN.BASE]: 'https://graph-v2.rubicon.finance/subgraphs/name/Gladius_Metrics_Base_V2', @@ -25,9 +21,6 @@ const adapterNew = univ2Adapter({ }, { factoriesName: "rubicons", totalVolume: "total_volume_usd", - dayData: "dayVolume", - dailyVolume: "volume_usd", - dailyVolumeTimestampField: "dayStartUnix" }); adapterNew.adapter.arbitrum.start = 183178326; @@ -52,7 +45,6 @@ async function combinedFetch(chain, timestamp, chainBlocks, options) { if (!newData) return oldData; return { - timestamp: newData.timestamp, totalVolume: (oldData.totalVolume || 0) + (newData.totalVolume || 0), dailyVolume: (oldData.dailyVolume || 0) + (newData.dailyVolume || 0), // Add any other fields that need to be combined here diff --git a/dexs/spookyswap/index.ts b/dexs/spookyswap/index.ts index 31bdf4afdd..c86275539b 100644 --- a/dexs/spookyswap/index.ts +++ b/dexs/spookyswap/index.ts @@ -2,32 +2,27 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; - -const { getChainVolumeWithGasToken } = require("../../helpers/getUniSubgraphVolume"); +import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2, getChainVolumeWithGasToken2 } from "../../helpers/getUniSubgraphVolume"; const { FANTOM } = require("../../helpers/chains"); + const endpoints = { [FANTOM]: sdk.graph.modifyEndpoint('HyhMfT7gehNHMBmFiExqeg3pDtop9UikjvBPfAXT3b21'), [CHAIN.EON]: "https://eon-graph.horizenlabs.io/subgraphs/name/0xALUKARD/spookyswap-eon", // [CHAIN.BITTORRENT]: "https://subgraph.spook.fi/subgraphs/name/eerieeight/spooky-swap-new" }; -const graphs = getChainVolumeWithGasToken({ +const graphs = getChainVolumeWithGasToken2({ graphUrls: { [FANTOM]: endpoints[FANTOM], }, priceToken: "coingecko:fantom" }); -const graphsV3 = getChainVolume({ +const graphsV3 = getChainVolume2({ graphUrls: { [CHAIN.EON]: endpoints[CHAIN.EON], // [CHAIN.BITTORRENT]: endpoints[CHAIN.BITTORRENT] }, - dailyVolume: { - factory: "uniswapDayData", - field: DEFAULT_DAILY_VOLUME_FIELD, - }, totalVolume: { factory: "uniswapFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, diff --git a/dexs/squadswap-v2/index.ts b/dexs/squadswap-v2/index.ts index 55579b1da3..eb0a58773b 100644 --- a/dexs/squadswap-v2/index.ts +++ b/dexs/squadswap-v2/index.ts @@ -1,23 +1,19 @@ import * as sdk from "@defillama/sdk"; -import { DEFAULT_TOTAL_VOLUME_FIELD, univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_TOTAL_VOLUME_FIELD } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; -import { DEFAULT_DAILY_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; import { SimpleAdapter } from "../../adapters/types"; const endpoints = { [CHAIN.BSC]: sdk.graph.modifyEndpoint('FDn5m4S3bFqd8TV97P61i3dhZLpSigFwpRQEan2mrjTE'), }; -const v2Graph = getGraphDimensions({ +const v2Graph = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "pancakeFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "pancakeDayData", - field: DEFAULT_DAILY_VOLUME_FIELD, - }, feesPercent: { type: "volume", Fees: 0.02, diff --git a/dexs/squadswap-v3/index.ts b/dexs/squadswap-v3/index.ts index 0ea3735659..8aac3161bb 100644 --- a/dexs/squadswap-v3/index.ts +++ b/dexs/squadswap-v3/index.ts @@ -1,28 +1,19 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; -import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_TOTAL_VOLUME_FIELD } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpoints = { [CHAIN.BSC]: sdk.graph.modifyEndpoint('CTCJRpNgyiCMaQhPsKTWfsCfFBSPkzaQKKi2EjMyidCt'), }; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "pancakeDayData", - field: "volumeUSD", - }, - dailyFees: { - factory: "pancakeDayData", - field: "feesUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 25, diff --git a/dexs/supswap-v2/index.ts b/dexs/supswap-v2/index.ts index 4642869cf6..a941155a96 100644 --- a/dexs/supswap-v2/index.ts +++ b/dexs/supswap-v2/index.ts @@ -1,21 +1,17 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const v2Endpoints = { [CHAIN.MODE]: "https://api.goldsky.com/api/public/project_clrhmyxsvvuao01tu4aqj653e/subgraphs/supswap-exchange-v2/1.0.0/gn" } -const v2Graphs = getGraphDimensions({ +const v2Graphs = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: "supFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "supDayData", - field: "dailyVolumeUSD", - }, feesPercent: { type: "volume", ProtocolRevenue: 0.08, diff --git a/dexs/supswap-v3/index.ts b/dexs/supswap-v3/index.ts index 1d0569a1bf..23a2d8948a 100644 --- a/dexs/supswap-v3/index.ts +++ b/dexs/supswap-v3/index.ts @@ -1,27 +1,17 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const v3Endpoints = { [CHAIN.MODE]: "https://api.goldsky.com/api/public/project_clrhmyxsvvuao01tu4aqj653e/subgraphs/supswap-exchange-v3/1.0.0/gn" } -const VOLUME_USD = "volumeUSD"; - -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "supDayData", - field: VOLUME_USD, - }, - dailyFees: { - factory: "supDayData", - field: "feesUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 33.33, diff --git a/dexs/surfswap/index.ts b/dexs/surfswap/index.ts index ad2dccdb8e..1af9bb0250 100644 --- a/dexs/surfswap/index.ts +++ b/dexs/surfswap/index.ts @@ -1,5 +1,5 @@ import { ChainEndpoints, BreakdownAdapter } from "../../adapters/types"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; import request, { gql } from "graphql-request"; @@ -37,20 +37,16 @@ const getCustomBlock = async (timestamp: number) => { return Number(block.blocks[0].number); }; -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "uniswapFactories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "dailyVolumeUSD", - }, getCustomBlock }); -const v1graphs = getGraphDimensions({ +const v1graphs = getGraphDimensions2({ graphUrls: { [CHAIN.KAVA]: "https://the-graph.kava.io/subgraphs/name/surfswap-stable-amm", }, @@ -58,11 +54,6 @@ const v1graphs = getGraphDimensions({ factory: "tradeVolumes", field: "volume", }, - dailyVolume: { - factory: "dailyVolume", - field: "volume", - dateField: "timestamp" - }, getCustomBlock }); diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index df4c746801..0ac0d06235 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -1,13 +1,9 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import { - CHAIN, -} from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; -import { - getChainVolumeWithGasToken, -} from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; +import { getChainVolumeWithGasToken2 } from "../../helpers/getUniSubgraphVolume"; import { FetchOptions } from "../../adapters/types"; const blacklistTokens = { @@ -83,31 +79,22 @@ const feesPercent = { SupplySideRevenue: 0.25 } -const graphsClassic = getGraphDimensions({ +const graphsClassic = getGraphDimensions2({ graphUrls: endpointsClassic, totalVolume: { factory: "factories", field: VOLUME_FIELD, }, - dailyVolume: { - factory: "dayData", - field: VOLUME_FIELD, - }, feesPercent, blacklistTokens }); -const graphsClassicBoba = getGraphDimensions({ +const graphsClassicBoba = getGraphDimensions2({ graphUrls: endpointsClassic, totalVolume: { factory: "factories", field: VOLUME_FIELD, }, - dailyVolume: { - factory: "factoryDaySnapshot", - field: VOLUME_FIELD, - dateField: "date" - }, feesPercent }); @@ -138,7 +125,7 @@ const classic = Object.keys(endpointsClassic).reduce( {} ) as any; -const fantomGraphs = getChainVolumeWithGasToken({ +const fantomGraphs = getChainVolumeWithGasToken2({ graphUrls: { [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK') }, @@ -146,13 +133,9 @@ const fantomGraphs = getChainVolumeWithGasToken({ factory: "factories", field: 'volumeETH', }, - dailyVolume: { - factory: "dayData", - field: 'volumeETH', - dateField: "date" - }, priceToken: "coingecko:fantom" } as any); + classic[CHAIN.FANTOM] = { fetch: async (options: FetchOptions) => { const values = await fantomGraphs(CHAIN.FANTOM)(options); diff --git a/dexs/sushiswap/index.ts b/dexs/sushiswap/index.ts index 3f5b34e4dc..fbdf6b4b59 100644 --- a/dexs/sushiswap/index.ts +++ b/dexs/sushiswap/index.ts @@ -7,10 +7,10 @@ import swap from './swap' const adapter: BreakdownAdapter = { version: 2, breakdown: { - "agg-dex": swap, - classic: classic, + // "agg-dex": swap, + // classic: classic, trident: trident, - v3: v3 + // v3: v3 } } diff --git a/dexs/sushiswap/trident.ts b/dexs/sushiswap/trident.ts index d8312331b6..15aa5a6218 100644 --- a/dexs/sushiswap/trident.ts +++ b/dexs/sushiswap/trident.ts @@ -1,8 +1,6 @@ import * as sdk from "@defillama/sdk"; import request, { gql } from "graphql-request"; -import { - CHAIN, -} from "../../helpers/chains"; +import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { FetchOptions } from "../../adapters/types"; @@ -26,19 +24,13 @@ const startTimeQueryTrident = { }; const tridentQuery = gql` - query trident($timestampLow: Int, $timestampHigh: Int) { - factoryDaySnapshots(where: {date_gt: $timestampLow, date_lt: $timestampHigh}, first: 10) { - date + query trident($number: Int) { + factory( + id: "ALL" + block: { number: $number } + ) { volumeUSD feesUSD - factory { - type - } - } - factories(where: {type: "ALL"}) { - volumeUSD - feesUSD - type } } ` @@ -47,21 +39,25 @@ const trident = Object.keys(endpointsTrident).reduce( (acc, chain) => ({ ...acc, [chain]: { - fetch: async (options: FetchOptions) => { - const res = await request(endpointsTrident[chain], tridentQuery, { - timestampHigh: options.endTimestamp, - timestampLow: options.startTimestamp, + fetch: async ({ getStartBlock, getEndBlock }: FetchOptions) => { + const [startBlock, endBlock] = await Promise.all([ + getStartBlock(), + getEndBlock() + ]) + const beforeRes = await request(endpointsTrident[chain], tridentQuery, { + number: startBlock, }); - const daily = res.factoryDaySnapshots.find((snapshot: any) => { - return snapshot.factory.type == "ALL" - }) + const afterRes = await await request(endpointsTrident[chain], tridentQuery, { + number: endBlock, + }); + return { - totalVolume: res.factories[0]?.volumeUSD, - totalFees: res.factories[0]?.feesUSD, - totalUserFees: res.factories[0]?.feesUSD, - dailyVolume: daily?.volumeUSD || 0, - dailyFees: daily?.feesUSD || 0, - dailyUserFees: daily?.feesUSD || 0 + totalVolume: afterRes.factory.volumeUSD, + totalFees: afterRes.factory.feesUSD, + totalUserFees: afterRes.factory.feesUSD, + dailyVolume: afterRes.factory.volumeUSD - beforeRes.factory.volumeUSD, + dailyFees: afterRes.factory.feesUSD - beforeRes.factory.feesUSD, + dailyUserFees: afterRes.factory.feesUSD - beforeRes.factory.feesUSD } }, start: getStartTimestamp({ ...startTimeQueryTrident, chain }), From 046052bfe17fb546efd2cce05c662d245bf7b372 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 9 Sep 2024 22:46:55 +0100 Subject: [PATCH 1396/1590] traderjoe --- dexs/swapbased/index.ts | 2 +- dexs/tangleswap/index.ts | 10 +++------- dexs/templedao-trade/index.ts | 7 ++----- dexs/thena-v3/index.ts | 4 ++-- dexs/throne-v3/index.ts | 15 ++------------- dexs/traderjoe/index.ts | 2 +- 6 files changed, 11 insertions(+), 29 deletions(-) diff --git a/dexs/swapbased/index.ts b/dexs/swapbased/index.ts index 58fddaa849..844087aba3 100644 --- a/dexs/swapbased/index.ts +++ b/dexs/swapbased/index.ts @@ -191,7 +191,7 @@ const getFetch = }; const adapter: BreakdownAdapter = { - version: 2, + version: 1, breakdown: { v2: { [CHAIN.BASE]: { diff --git a/dexs/tangleswap/index.ts b/dexs/tangleswap/index.ts index 6354b59383..e4d279aef4 100644 --- a/dexs/tangleswap/index.ts +++ b/dexs/tangleswap/index.ts @@ -1,20 +1,16 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; -import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; +import { DEFAULT_TOTAL_VOLUME_FIELD } from "../../helpers/getUniSubgraphVolume"; const v3Endpoints = { [CHAIN.SHIMMER_EVM]: "https://shimmer.subgraph.tangleswap.space/subgraphs/name/tangleswap/shimmer-v3", } -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: "volumeUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 0, diff --git a/dexs/templedao-trade/index.ts b/dexs/templedao-trade/index.ts index f913785c74..b741d0ca05 100644 --- a/dexs/templedao-trade/index.ts +++ b/dexs/templedao-trade/index.ts @@ -3,22 +3,19 @@ import { Chain } from "@defillama/sdk/build/general"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; -const { - getChainVolume, -} = require("../../helpers/getUniSubgraphVolume"); const endpoints = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('6No9vpT4V56r2c4y4TxHsKs7hEbAWu66u19wNGAX8nxL') }; const VOLUME_FIELD = "volumeUSD"; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "metrics", field: VOLUME_FIELD, }, - hasDailyVolume: false, }); diff --git a/dexs/thena-v3/index.ts b/dexs/thena-v3/index.ts index 541fd01446..0250902c5b 100644 --- a/dexs/thena-v3/index.ts +++ b/dexs/thena-v3/index.ts @@ -1,8 +1,8 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.BSC]: sdk.graph.modifyEndpoint('Hnjf3ipVMCkQze3jmHp8tpSMgPmtPnXBR38iM4ix1cLt') }, { factoriesName: "factories", diff --git a/dexs/throne-v3/index.ts b/dexs/throne-v3/index.ts index 619672e576..553febae4e 100644 --- a/dexs/throne-v3/index.ts +++ b/dexs/throne-v3/index.ts @@ -1,32 +1,21 @@ import * as sdk from "@defillama/sdk"; import { IJSON, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; - -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const v3Endpoint = { [CHAIN.BASE]: sdk.graph.modifyEndpoint('HRaFknkbRxB17ziZoMcT7EJuT42BKRYeYvKyQvJrQWJf'), }; -const VOLUME_USD = "volumeUSD"; - -const v3Graph = getGraphDimensions({ +const v3Graph = getGraphDimensions2({ graphUrls: v3Endpoint, totalVolume: { factory: "factories", }, - dailyVolume: { - factory: "pancakeDayData", - field: VOLUME_USD, - }, totalFees: { factory: "factories", }, - dailyFees: { - factory: "pancakeDayData", - field: "feesUSD", - }, }); const v3StartTimes = { diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index c817dbbeba..652f528c52 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -75,7 +75,7 @@ const graphsV2 = getChainVolume({ }); const adapter: BreakdownAdapter = { - version: 2, + version: 1, breakdown: { v1: { [CHAIN.AVAX]: { From 5eda69a9773f711fc9b744483fbba48e0a210471 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 9 Sep 2024 22:48:21 +0100 Subject: [PATCH 1397/1590] revert kyber --- dexs/kyberswap/index.ts | 105 ++++++++++++++++++++++++---------------- 1 file changed, 62 insertions(+), 43 deletions(-) diff --git a/dexs/kyberswap/index.ts b/dexs/kyberswap/index.ts index a2c0bf780e..2f8292b23d 100644 --- a/dexs/kyberswap/index.ts +++ b/dexs/kyberswap/index.ts @@ -1,52 +1,54 @@ import * as sdk from "@defillama/sdk"; +import ADDRESSES from '../../helpers/coreAssets.json' +import request from "graphql-request"; import { BaseAdapter, BreakdownAdapter, FetchOptions, FetchResultVolume } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import { + getChainVolume, DEFAULT_TOTAL_VOLUME_FIELD, DEFAULT_DAILY_VOLUME_FIELD, - univ2Adapter2, - getChainVolume2, + univ2Adapter, getUniqStartOfTodayTimestamp, - getChainVolume, } from "../../helpers/getUniSubgraphVolume"; import { Chain } from "@defillama/sdk/build/general"; -import request from "graphql-request"; -import ADDRESSES from '../../helpers/coreAssets.json' const normalizeChain = { "avax": "avalanche" } as {[c:string]:string} -const kyberswapElasticV2 = univ2Adapter2({ +const kyberswapElasticV2 = univ2Adapter({ [CHAIN.ETHEREUM]: "https://ethereum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-ethereum-legacy", - // [CHAIN.BSC]: "https://bsc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bsc-legacy", - // [CHAIN.POLYGON]: "https://bsc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bsc-legacy", - // [CHAIN.AVAX]: "https://avalanche-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-avalanche-legacy", - // [CHAIN.ARBITRUM]: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum-legacy", + [CHAIN.BSC]: "https://bsc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bsc-legacy", + [CHAIN.POLYGON]: "https://bsc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bsc-legacy", + [CHAIN.AVAX]: "https://avalanche-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-avalanche-legacy", + [CHAIN.ARBITRUM]: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum-legacy", [CHAIN.OPTIMISM]: "https://optimism-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-optimism-legacy", - // [CHAIN.FANTOM]: "https://fantom-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-fantom-legacy", - // [CHAIN.BITTORRENT]: "https://bttc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bttc-legacy", - // [CHAIN.CRONOS]: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-cronos-legacy", - // [CHAIN.VELAS]: "https://velas-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-velas-legacy", - // [CHAIN.OASIS]: "https://oasis-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-oasis-legacy", + [CHAIN.FANTOM]: "https://fantom-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-fantom-legacy", + [CHAIN.BITTORRENT]: "https://bttc-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-bttc-legacy", + [CHAIN.CRONOS]: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-cronos-legacy", + [CHAIN.VELAS]: "https://velas-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-velas-legacy", + [CHAIN.OASIS]: "https://oasis-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-oasis-legacy", }, { factoriesName: "factories", + dayData: "kyberSwapDayData", + dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); kyberswapElasticV2.version = 2; kyberswapElasticV2.adapter.ethereum.start = 1654905600; -// kyberswapElasticV2.adapter.bsc.start = 1654732800; -// kyberswapElasticV2.adapter.polygon.start = 1654732800; -// kyberswapElasticV2.adapter.avax.start = 1654905600; -// kyberswapElasticV2.adapter.arbitrum.start = 1655942400; +kyberswapElasticV2.adapter.bsc.start = 1654732800; +kyberswapElasticV2.adapter.polygon.start = 1654732800; +kyberswapElasticV2.adapter.avax.start = 1654905600; +kyberswapElasticV2.adapter.arbitrum.start = 1655942400; kyberswapElasticV2.adapter.optimism.start = 1656460800; -// kyberswapElasticV2.adapter.fantom.start = 1654732800; -// kyberswapElasticV2.adapter.bittorrent.start = 1658188800; -// kyberswapElasticV2.adapter.oasis.start = 1660780800; -// kyberswapElasticV2.adapter.cronos.start = 1660780800; +kyberswapElasticV2.adapter.fantom.start = 1654732800; +kyberswapElasticV2.adapter.bittorrent.start = 1658188800; +kyberswapElasticV2.adapter.oasis.start = 1660780800; +kyberswapElasticV2.adapter.cronos.start = 1660780800; // velas, oasis & bittorrent missing -const elasticChains = ["ethereum", "optimism"]//, "polygon", "bsc", "avax", "fantom", "arbitrum", "optimism"] +const elasticChains = ["ethereum", "polygon", "bsc", "avax", "fantom", "arbitrum", "optimism"] const elasticEndpoints = elasticChains.reduce((acc, chain)=>({ [chain]: `https://api.thegraph.com/subgraphs/name/kybernetwork/kyberswap-elastic-${normalizeChain[chain]??chain}`, @@ -54,16 +56,16 @@ const elasticEndpoints = elasticChains.reduce((acc, chain)=>({ }), { //cronos: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-cronos", // missing -> almost no volume and stale ethereum: sdk.graph.modifyEndpoint('4U9PxDR4asVvfXyoVy18fhuj6NHnQhLzZkjZ5Bmuc5xk'), - // arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum", - // polygon: sdk.graph.modifyEndpoint('8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT'), - // [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", - // [CHAIN.BASE]: "https://base-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-base", - // [CHAIN.SCROLL]: "https://scroll-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-scroll" + arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-arbitrum", + polygon: sdk.graph.modifyEndpoint('8g4tJKCJ7eMAHjzZNeRWz9BkYG5U7vDNjdanSXfDXGXT'), + [CHAIN.LINEA]: "https://linea-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-linea", + [CHAIN.BASE]: "https://base-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-base", + [CHAIN.SCROLL]: "https://scroll-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-scroll" } as any); -// elasticEndpoints.fantom = "https://fantom-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-fantom" +elasticEndpoints.fantom = "https://fantom-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-elastic-fantom" -const elasticGraphs = getChainVolume2({ +const elasticGraphs = getChainVolume({ graphUrls: elasticEndpoints, totalVolume: { factory: "factories", @@ -75,6 +77,23 @@ const elasticGraphs = getChainVolume2({ }, }); +interface IPoolDayData { + pool: { + id: string + token0: { + id: string + symbol: string + } + token1: { + id: string + symbol: string + } + } + volumeUSD: string + tvlUSD: string + date: number +} + const optimismElastic = async (timestamp: number) => { const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); const url = sdk.graph.modifyEndpoint('3Kpd8i7U94pTz3Mgdb8hyvT5o26fpwT7SUHAbTa6JzfZ'); @@ -105,7 +124,7 @@ const optimismElastic = async (timestamp: number) => { date } }`; - const response: any[] = (await request(url, query)).poolDayDatas; + const response: IPoolDayData[] = (await request(url, query)).poolDayDatas; const volumeUSD = response .filter((pool) => !blacklisted.includes(pool.pool.token0.id) && !blacklisted.includes(pool.pool.token1.id) && !poolBlacklist.includes(pool.pool.id)) .reduce((acc, pool) => { @@ -146,7 +165,7 @@ const ethereumElasicVolume = async (timestamp: number) => { date } }`; - const response: any[] = (await request(url, query)).poolDayDatas; + const response: IPoolDayData[] = (await request(url, query)).poolDayDatas; const volumeUSD = response .filter((pool) => !blacklisted.includes(pool.pool.token0.id) && !blacklisted.includes(pool.pool.token1.id)) .reduce((acc, pool) => { @@ -167,13 +186,13 @@ const classicEndpoints = [...elasticChains].reduce((acc, chain)=>({ ...acc, }), { // cronos: "https://cronos-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-cronos", - // arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-arbitrum", - // [CHAIN.ERA]: "https://zksync-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-zksync", - // [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/kybernetwork/kyberswap-classic-linea", - // [CHAIN.SCROLL]: "https://scroll-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-scroll" + arbitrum: "https://arbitrum-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-arbitrum", + [CHAIN.ERA]: "https://zksync-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-zksync", + [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/kybernetwork/kyberswap-classic-linea", + [CHAIN.SCROLL]: "https://scroll-graph.kyberengineering.io/subgraphs/name/kybernetwork/kyberswap-exchange-scroll" } as any); -const classicGraphs = getChainVolume2({ +const classicGraphs = getChainVolume({ graphUrls: classicEndpoints, totalVolume: { factory: "dmmFactories", @@ -186,15 +205,15 @@ const classicGraphs = getChainVolume2({ }); const customeElasicVolumeFunctions: {[s: Chain]: any} = { - // [CHAIN.OPTIMISM]: optimismElastic, - // [CHAIN.ETHEREUM]: ethereumElasicVolume + [CHAIN.OPTIMISM]: optimismElastic, + [CHAIN.ETHEREUM]: ethereumElasicVolume } function buildFromEndpoints(endpoints: typeof classicEndpoints, graphs: typeof classicGraphs, volumeField:string, dailyDataField:string, isElastic: boolean){ return Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { fetch: async (options: FetchOptions) => { - const a = (customeElasicVolumeFunctions[chain] !== undefined) && isElastic ? await customeElasicVolumeFunctions[chain](options.endTimestamp) : (await graphs(chain as any)(options)) - const elasticV2 = (kyberswapElasticV2.adapter[chain as Chain]?.fetch != undefined && isElastic) ? (await kyberswapElasticV2.adapter[chain as Chain]?.fetch(options as any, {}, options)) : {} as FetchResultVolume; + const a = (customeElasicVolumeFunctions[chain] !== undefined) && isElastic ? await customeElasicVolumeFunctions[chain](options.endTimestamp) : (await graphs(chain as any)(options)) + const elasticV2 = (kyberswapElasticV2.adapter[chain as Chain]?.fetch != undefined && isElastic) ? (await kyberswapElasticV2.adapter[chain as Chain]?.fetch(options as any, {}, options)) : {} as FetchResultVolume; const dailyVolume = Number(a?.dailyVolume || 0) + Number(elasticV2?.dailyVolume || 0) const totalVolume = Number(a?.totalVolume || 0) + Number(elasticV2?.totalVolume || 0) return { @@ -216,4 +235,4 @@ const adapter: BreakdownAdapter = { } } -export default adapter; +export default adapter; \ No newline at end of file From c90c5f6f1c92348cae8a804a6b62cae4d898de7d Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 9 Sep 2024 22:50:27 +0100 Subject: [PATCH 1398/1590] sushi index revert --- dexs/sushiswap/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dexs/sushiswap/index.ts b/dexs/sushiswap/index.ts index fbdf6b4b59..3f5b34e4dc 100644 --- a/dexs/sushiswap/index.ts +++ b/dexs/sushiswap/index.ts @@ -7,10 +7,10 @@ import swap from './swap' const adapter: BreakdownAdapter = { version: 2, breakdown: { - // "agg-dex": swap, - // classic: classic, + "agg-dex": swap, + classic: classic, trident: trident, - // v3: v3 + v3: v3 } } From f9e24c9b8c4bfc89ec8b6f0b77bc1af2ebefb7f8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 10 Sep 2024 05:42:05 +0000 Subject: [PATCH 1399/1590] fix not use --- dexs/drift-protocol/index.ts | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index e4155afe5f..69fb8e96ff 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -16,34 +16,6 @@ type DimentionResult = { dailyRevenue?: number; }; -const sum = (values: number[]) => values.reduce((a, b) => a + b, 0); - -// This is the previous method for query_id 3756979 which was too slow .. saving for posterity if we manage to speed it up. -async function _getPerpDimensions(): Promise { - const resultRows = await queryDune(DUNE_QUERY_ID); - - const marketRows = resultRows.filter( - (row) => row.market_index !== null && row.market_index >= 0 - ); - - // Perp Volume - const dailyVolume = sum(marketRows.map((row) => row.total_volume as number)); - - // All taker fees paid - const dailyFees = sum(marketRows.map((row) => row.total_taker_fee as number)); - - // All taker fees paid, minus maker rebates paid - not sure if this should be used as the "dailyFees" number instead. - const dailyRevenue = sum( - marketRows.map((row) => row.total_revenue as number) - ); - - return { - dailyVolume, - dailyFees, - dailyUserFees: dailyFees, - dailyRevenue, - }; -} async function getPerpDimensions(): Promise { const resultRows = await queryDune(DUNE_QUERY_ID); @@ -94,11 +66,6 @@ async function fetch(type: "perp" | "spot") { } } -// Used to replace "fetch" to disable a query if it starts failing -const emtry = async (timestamp: number) => { - return { timestamp }; -}; - const adapter: BreakdownAdapter = { breakdown: { swap: { From cefaa32d799e13b633327344a0d90aadf3b66154 Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Tue, 10 Sep 2024 15:53:44 +0800 Subject: [PATCH 1400/1590] solv finance poolFees --- fees/solv-finance/index.ts | 130 +++++++++++++++++++++++++++++++++++-- 1 file changed, 123 insertions(+), 7 deletions(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 8f3c6d868b..0e5462d2a5 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -1,11 +1,24 @@ import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; -import { BreakdownAdapter, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions, FetchV2, SimpleAdapter } from "../../adapters/types"; import { addTokensReceived } from "../../helpers/token"; import { httpGet } from "../../utils/fetchURL"; +import { gql, request } from "graphql-request"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { getPrices } from "../../utils/prices"; +import { BigNumber } from "bignumber.js" const feesConfig = "https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solv-fees.json"; +// The Graph +const graphUrlList = { + ethereum: 'https://api.studio.thegraph.com/query/40045/solv-payable-factory-prod/version/latest', + bsc: 'https://api.studio.thegraph.com/query/40045/solv-payable-factory-bsc/version/latest', + arbitrum: 'https://api.studio.thegraph.com/query/40045/solv-payable-factory-arbitrum/version/latest', + mantle: 'https://api.0xgraph.xyz/api/public/65c5cf65-bd77-4da0-b41c-cb6d237e7e2f/subgraphs/solv-payable-factory-mantle/-/gn', + merlin: 'http://solv-subgraph-server-alb-694489734.us-west-1.elb.amazonaws.com:8000/subgraphs/name/solv-payable-factory-merlin', +} + const chains: { [chain: Chain]: { deployedAt: number }; } = { @@ -29,21 +42,124 @@ const protocol: FetchV2 = async (options) => { return { dailyFees, - dailyRevenue: dailyFees, - dailyProtocolRevenue: dailyFees, }; }; const pool: FetchV2 = async (options) => { - const dailyFees = options.createBalances(); + let dailyFees = options.createBalances(); + + const contracts: { + [chain: Chain]: { + [poolFees: string]: string[]; + } + } = await httpGet(feesConfig); + + const pools = await getGraphData(contracts[options.chain]["poolFees"], options.chain) + const concretes = await concrete(pools, options) + + const timestamp = getUniqStartOfTodayTimestamp(new Date()); + const yesterday = timestamp - 86400; + let poolNavs: any[] = []; + for (const pool of pools) { + const [yesterdayNav, todayNav] = await options.api.multiCall({ + calls: [{ + target: pool.navOracle, + params: [pool.poolId, yesterday], + }, { + target: pool.navOracle, + params: [pool.poolId, timestamp], + }], + abi: 'function getSubscribeNav(bytes32 poolId_, uint256 time_) view returns (uint256 nav_, uint256 navTime_)', + }) + + let nav = todayNav.nav_ - yesterdayNav.nav_; + if (nav < 0) { + nav = 0; + } + poolNavs.push(nav) + } + + const poolBaseInfos = await options.api.multiCall({ + abi: `function slotBaseInfo(uint256 slot_) view returns (tuple(address issuer, address currency, uint64 valueDate, uint64 maturity, uint64 createTime, bool transferable, bool isValid))`, + calls: pools.map((index: { contractAddress: string | number; openFundShareSlot: any; }) => ({ + target: concretes[index.contractAddress], + params: [index.openFundShareSlot] + })), + }) + + const totalValues = await options.api.multiCall({ + abi: 'function slotTotalValue(uint256) view returns (uint256)', + calls: pools.map((index: { contractAddress: string | number; openFundShareSlot: any; }) => ({ + target: concretes[index.contractAddress], + params: [index.openFundShareSlot] + })), + }) + + const prices = (await getPrices(poolBaseInfos.map((index: { currency: string; }) => `${options.chain}:${index.currency.toLowerCase()}`), timestamp)); + let dailyFeeUsd = 0; + for (let i = 0; i < pools.length; i++) { + const poolNav = poolNavs[i]; + const poolBaseInfo = poolBaseInfos[i]; + const totalValue = totalValues[i]; + const priceData = prices[`${options.chain}:${poolBaseInfo.currency.toLowerCase()}`]; + + const total = BigNumber(totalValue) + .div(BigNumber(10e18)) + .times( + BigNumber(poolNav).dividedBy(BigNumber(10).pow(priceData.decimals)) + ).times(priceData.price); + + dailyFeeUsd = BigNumber(dailyFeeUsd).plus(total).toNumber(); + } return { - dailyFees, - dailyRevenue: dailyFees, - dailyProtocolRevenue: dailyFees, + dailyFees: dailyFeeUsd, }; } +async function getGraphData(poolId: string[], chain: Chain) { + const query = gql`{ + poolOrderInfos(first: 1000 where:{poolId_in: ${JSON.stringify(poolId)}}) { + marketContractAddress + contractAddress + navOracle + poolId + vault + openFundShareSlot + } + }`; + let response: any; + if (graphUrlList[chain]) { + response = (await request(graphUrlList[chain], query)).poolOrderInfos; + } + + return response; +} + + +async function concrete(slots: any[], options: FetchOptions): Promise { + var slotsList: any[] = []; + var only = {}; + for (var i = 0; i < slots.length; i++) { + if (!only[slots[i].contractAddress]) { + slotsList.push(slots[i]); + only[slots[i].contractAddress] = true; + } + } + + const concreteLists = await options.api.multiCall({ + calls: slotsList.map((index) => index.contractAddress), + abi: 'address:concrete', + }) + + let concretes = {}; + for (var k = 0; k < concreteLists.length; k++) { + concretes[slotsList[k].contractAddress] = concreteLists[k]; + } + + return concretes; +} + const adapter: BreakdownAdapter = { breakdown: {}, version: 2 }; Object.keys(chains).forEach((chain: Chain) => { From e846e37f2616d740a2e7f07786c2f18883f688e2 Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Tue, 10 Sep 2024 15:56:44 +0800 Subject: [PATCH 1401/1590] fix --- fees/solv-finance/index.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 0e5462d2a5..5d62ee7d7b 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -46,16 +46,14 @@ const protocol: FetchV2 = async (options) => { }; const pool: FetchV2 = async (options) => { - let dailyFees = options.createBalances(); - const contracts: { [chain: Chain]: { [poolFees: string]: string[]; } } = await httpGet(feesConfig); - const pools = await getGraphData(contracts[options.chain]["poolFees"], options.chain) - const concretes = await concrete(pools, options) + const pools = await getGraphData(contracts[options.chain]["poolFees"], options.chain); + const concretes = await concrete(pools, options); const timestamp = getUniqStartOfTodayTimestamp(new Date()); const yesterday = timestamp - 86400; @@ -70,13 +68,13 @@ const pool: FetchV2 = async (options) => { params: [pool.poolId, timestamp], }], abi: 'function getSubscribeNav(bytes32 poolId_, uint256 time_) view returns (uint256 nav_, uint256 navTime_)', - }) + }); let nav = todayNav.nav_ - yesterdayNav.nav_; if (nav < 0) { nav = 0; } - poolNavs.push(nav) + poolNavs.push(nav); } const poolBaseInfos = await options.api.multiCall({ @@ -85,7 +83,7 @@ const pool: FetchV2 = async (options) => { target: concretes[index.contractAddress], params: [index.openFundShareSlot] })), - }) + }); const totalValues = await options.api.multiCall({ abi: 'function slotTotalValue(uint256) view returns (uint256)', @@ -93,7 +91,7 @@ const pool: FetchV2 = async (options) => { target: concretes[index.contractAddress], params: [index.openFundShareSlot] })), - }) + }); const prices = (await getPrices(poolBaseInfos.map((index: { currency: string; }) => `${options.chain}:${index.currency.toLowerCase()}`), timestamp)); let dailyFeeUsd = 0; From 3ce005803dab696d6db1ca97a844589d6069b13c Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Tue, 10 Sep 2024 16:01:59 +0800 Subject: [PATCH 1402/1590] if --- fees/solv-finance/index.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 5d62ee7d7b..6d5e9b68d2 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -34,6 +34,12 @@ const protocol: FetchV2 = async (options) => { } } = await httpGet(feesConfig); + if (!contracts[options.chain]) { + return { + timestamp: new Date().getTime(), + }; + } + const dailyFees = await addTokensReceived({ options, targets: contracts[options.chain]["protocolFees"].address, @@ -52,6 +58,12 @@ const pool: FetchV2 = async (options) => { } } = await httpGet(feesConfig); + if (!contracts[options.chain]) { + return { + timestamp: new Date().getTime(), + }; + } + const pools = await getGraphData(contracts[options.chain]["poolFees"], options.chain); const concretes = await concrete(pools, options); From e2cdf866d47ab16e97d16aa8dcd2b733db9a0123 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Tue, 10 Sep 2024 10:47:49 +0200 Subject: [PATCH 1403/1590] track predict.fun trade volume --- dexs/predict-fun/index.ts | 79 ++ package-lock.json | 2049 ++++++++++++++++++++----------------- 2 files changed, 1212 insertions(+), 916 deletions(-) create mode 100644 dexs/predict-fun/index.ts diff --git a/dexs/predict-fun/index.ts b/dexs/predict-fun/index.ts new file mode 100644 index 0000000000..a72b873382 --- /dev/null +++ b/dexs/predict-fun/index.ts @@ -0,0 +1,79 @@ +import request from "graphql-request"; +import { Fetch, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + + +const endpoints: { [key: string]: string } = { + blast: 'https://graphql.predict.fun/graphql' +} + +const query = (after?: string) => `query { + categories (pagination: { + first: 100 + ${after ? `after: "${after}"` : ''} + }) { + totalCount + pageInfo { + hasNextPage + startCursor + endCursor + } + edges { + node { + id + slug + title + statistics { + liquidityValueUsd + volume24hUsd + volumeTotalUsd + } + } + } + } +} +` + +const fetch: Fetch = async (_: any, __, { chain }) => { + const dayTimestamp = getUniqStartOfTodayTimestamp() + const categories: any = [] + let after + do { + const data = await request(endpoints[chain], query(after)) + categories.push(...data.categories.edges) + if (data.categories.pageInfo.hasNextPage) { + after = data.pageInfo.endCursor + } + } while (after) + const dailyVolume = categories.reduce((vol, category) => vol + category.node.statistics.volume24hUsd, 0) + const totalVolume = categories.reduce((vol, category) => vol + category.node.statistics.volumeTotalUsd, 0) + + + return { + timestamp: dayTimestamp, + dailyVolume, + totalVolume, + } +} + +const startTimestamps: { [chain: string]: number } = { + [CHAIN.BLAST]: 1691128800, +} + +const volume = Object.keys(endpoints).reduce( + (acc, chain) => ({ + ...acc, + [chain]: { + fetch, + start: startTimestamps[chain] + }, + }), + {} +); + +const adapter: SimpleAdapter = { + timetravel: false, + adapter: volume +}; +export default adapter; diff --git a/package-lock.json b/package-lock.json index 1cc199ebdf..c1ca15f386 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,734 +33,886 @@ } }, "node_modules/@adraffy/ens-normalize": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", - "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==" + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" }, "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@aws-crypto/crc32c": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/crc32c/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^1.11.1" + "@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" } }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@aws-crypto/sha1-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", - "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", + "@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", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^1.11.1" + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.499.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.499.0.tgz", - "integrity": "sha512-4ssQqde/iY5fTJbWuFPzPuECtihdCAA9tfluv6fXYCJS3wMLf9x21qp6b7fIbUf6vjOJ2edmYd+DXk+0CMnTFg==", - "dependencies": { - "@aws-crypto/sha1-browser": "3.0.0", - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.499.0", - "@aws-sdk/core": "3.496.0", - "@aws-sdk/credential-provider-node": "3.499.0", - "@aws-sdk/middleware-bucket-endpoint": "3.496.0", - "@aws-sdk/middleware-expect-continue": "3.496.0", - "@aws-sdk/middleware-flexible-checksums": "3.496.0", - "@aws-sdk/middleware-host-header": "3.496.0", - "@aws-sdk/middleware-location-constraint": "3.496.0", - "@aws-sdk/middleware-logger": "3.496.0", - "@aws-sdk/middleware-recursion-detection": "3.496.0", - "@aws-sdk/middleware-sdk-s3": "3.499.0", - "@aws-sdk/middleware-signing": "3.496.0", - "@aws-sdk/middleware-ssec": "3.498.0", - "@aws-sdk/middleware-user-agent": "3.496.0", - "@aws-sdk/region-config-resolver": "3.496.0", - "@aws-sdk/signature-v4-multi-region": "3.499.0", - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-endpoints": "3.496.0", - "@aws-sdk/util-user-agent-browser": "3.496.0", - "@aws-sdk/util-user-agent-node": "3.496.0", - "@aws-sdk/xml-builder": "3.496.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/eventstream-serde-browser": "^2.1.1", - "@smithy/eventstream-serde-config-resolver": "^2.1.1", - "@smithy/eventstream-serde-node": "^2.1.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-blob-browser": "^2.1.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/hash-stream-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/md5-js": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-stream": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "@smithy/util-waiter": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.496.0.tgz", - "integrity": "sha512-fuaMuxKg7CMUsP9l3kxYWCOxFsBjdA0xj5nlikaDm1661/gB4KkAiGqRY8LsQkpNXvXU8Nj+f7oCFADFyGYzyw==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.496.0", - "@aws-sdk/middleware-host-header": "3.496.0", - "@aws-sdk/middleware-logger": "3.496.0", - "@aws-sdk/middleware-recursion-detection": "3.496.0", - "@aws-sdk/middleware-user-agent": "3.496.0", - "@aws-sdk/region-config-resolver": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-endpoints": "3.496.0", - "@aws-sdk/util-user-agent-browser": "3.496.0", - "@aws-sdk/util-user-agent-node": "3.496.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.499.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.499.0.tgz", - "integrity": "sha512-Eyj9STw2DXMtXL5V/v0HYHO6+JjGPi257M5IYyxwqlvRchq6jbOsedobfxclB/gBUyBRtZdnyAIS8uCKjb4kpA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.496.0", - "@aws-sdk/credential-provider-node": "3.499.0", - "@aws-sdk/middleware-host-header": "3.496.0", - "@aws-sdk/middleware-logger": "3.496.0", - "@aws-sdk/middleware-recursion-detection": "3.496.0", - "@aws-sdk/middleware-user-agent": "3.496.0", - "@aws-sdk/region-config-resolver": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-endpoints": "3.496.0", - "@aws-sdk/util-user-agent-browser": "3.496.0", - "@aws-sdk/util-user-agent-node": "3.496.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.645.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.645.0.tgz", + "integrity": "sha512-RjT/mfNv4yr1uv/+aEXgSIxC5EB+yHPSU7hH0KZOZrvZEFASLl0i4FeoHzbMEOH5KdKGAi0uu3zRP3D1y45sKg==", + "license": "Apache-2.0", + "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.645.0", + "@aws-sdk/client-sts": "3.645.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.645.0", + "@aws-sdk/middleware-bucket-endpoint": "3.620.0", + "@aws-sdk/middleware-expect-continue": "3.620.0", + "@aws-sdk/middleware-flexible-checksums": "3.620.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-location-constraint": "3.609.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-sdk-s3": "3.635.0", + "@aws-sdk/middleware-ssec": "3.609.0", + "@aws-sdk/middleware-user-agent": "3.645.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/signature-v4-multi-region": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.645.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@aws-sdk/xml-builder": "3.609.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/eventstream-serde-browser": "^3.0.6", + "@smithy/eventstream-serde-config-resolver": "^3.0.3", + "@smithy/eventstream-serde-node": "^3.0.5", + "@smithy/fetch-http-handler": "^3.2.4", + "@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.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@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.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.645.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.645.0.tgz", + "integrity": "sha512-2rc8TjnsNddOeKQ/pfNN7deNvGLXAeKeYtHtGDAiM2qfTKxd2sNcAsZ+JCDLyshuD4xLM5fpUyR0X8As9EAouQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.645.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.645.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@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.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.645.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.645.0.tgz", + "integrity": "sha512-X9ULtdk3cO+1ysurEkJ1MSnu6U00qodXx+IVual+1jXX4RYY1WmQmfo7uDKf6FFkz7wW1DAqU+GJIBNQr0YH8A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.645.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.645.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.645.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@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.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.645.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.645.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.645.0.tgz", + "integrity": "sha512-6azXYtvtnAsPf2ShN9vKynIYVcJOpo6IoVmoMAVgNaBJyllP+s/RORzranYZzckqfmrudSxtct4rVapjLWuAMg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.645.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.645.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.645.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.645.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@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.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@aws-sdk/core": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.496.0.tgz", - "integrity": "sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A==", + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^1.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.496.0.tgz", - "integrity": "sha512-lukQMJ8SWWP5RqkRNOHi/H+WMhRvSWa3Fc5Jf/VP6xHiPLfF1XafcvthtV91e0VwPCiseI+HqChrcGq8pvnxHw==", + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.496.0.tgz", - "integrity": "sha512-2nD1jp1sIwcQaWK1y/9ruQOkW16RUxZpzgjbW/gnK3iiUXwx+/FNQWxshud+GTSx3Q4x6eIhqsbjtP4VVPPuUA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.496.0", - "@aws-sdk/credential-provider-process": "3.496.0", - "@aws-sdk/credential-provider-sso": "3.496.0", - "@aws-sdk/credential-provider-web-identity": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", + "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.645.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.645.0.tgz", + "integrity": "sha512-LlZW0qwUwNlTaAIDCNpLbPsyXvS42pRIwF92fgtCQedmdnpN3XRUC6hcwSYI7Xru3GGKp3RnceOvsdOaRJORsw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.645.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.645.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.499.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.499.0.tgz", - "integrity": "sha512-EsiSevVmcVSMIq7D9siSH/XVc5I0vMntg1rx6KQdng1Fq8X/RBL5t9wSWEwOl7KFo5HlEsWrLWIpo1WHuzIL/w==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.496.0", - "@aws-sdk/credential-provider-ini": "3.496.0", - "@aws-sdk/credential-provider-process": "3.496.0", - "@aws-sdk/credential-provider-sso": "3.496.0", - "@aws-sdk/credential-provider-web-identity": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "version": "3.645.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.645.0.tgz", + "integrity": "sha512-eGFFuNvLeXjCJf5OCIuSEflxUowmK+bCS+lK4M8ofsYOEGAivdx7C0UPxNjHpvM8wKd8vpMl5phTeS9BWX5jMQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.645.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.645.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.496.0.tgz", - "integrity": "sha512-/YZscCTGOKVmGr916Th4XF8Sz6JDtZ/n2loHG9exok9iy/qIbACsTRNLP9zexPxhPoue/oZqecY5xbVljfY34A==", + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.496.0.tgz", - "integrity": "sha512-eP7GxpT2QYubSDG7uk1GJW4eNymZCq65IxDyEFCXOP/kfqkxriCY+iVEFG6/Mo3LxvgrgHXU4jxrCAXMAWN43g==", + "version": "3.645.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.645.0.tgz", + "integrity": "sha512-d6XuChAl5NCsCrUexc6AFb4efPmb9+66iwPylKG+iMTMYgO1ackfy1Q2/f35jdn0jolkPkzKsVyfzsEVoID6ew==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.496.0", - "@aws-sdk/token-providers": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/client-sso": "3.645.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.496.0.tgz", - "integrity": "sha512-IbP+qLlvJSpNPj+zW6TtFuLRTK5Tf0hW+2pom4vFyi5YSH4pn8UOC136UdewX8vhXGS9BJQ5zBDMasIyl5VeGQ==", + "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.621.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.496.0.tgz", - "integrity": "sha512-B+ilBMSs3+LJuo2bl2KB8GFdu+8PPVtYEWtwhNkmnaU8iMisgMBp5uuM8sUDvJX7I4iSF0WbgnhguX4cJqfAew==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz", + "integrity": "sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-arn-parser": "3.495.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.496.0.tgz", - "integrity": "sha512-+exo5DVc+BeDus2iI6Fz1thefHGDXxUhHZ+4VHQ6HkStMy3Y22HugyEGHSQZmtRL86Hjr7dFbEWFsC47a2ItGA==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz", + "integrity": "sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.496.0.tgz", - "integrity": "sha512-yQIWfjEMvgsAJ7ku224vXDjXPD+f9zfKZFialJva8VUlEr7hQp4CQ0rxV3YThSaixKEDDs5k6kOjWAd2BPGr2A==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz", + "integrity": "sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA==", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.496.0", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@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.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.496.0.tgz", - "integrity": "sha512-jUdPpSJeqCYXf6hSjfwsfHway7peIV8Vz51w/BN91bF4vB/bYwAC5o9/iJiK/EoByp5asxA8fg9wFOyGjzdbLg==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.496.0.tgz", - "integrity": "sha512-i4ocJ2Zs86OtPREbB18InFukhqg2qtBxb5gywv79IHDPVmpOYE4m/3v3yGUrkjfF2GTlUL0k5FskNNqw41yfng==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz", + "integrity": "sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.496.0.tgz", - "integrity": "sha512-EwMVSY6iBMeGbVnvwdaFl/ClMS/YWtxCAo+bcEtgk8ltRuo7qgbJem8Km/fvWC1vdWvIbe4ArdJ8iGzq62ffAw==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.496.0.tgz", - "integrity": "sha512-+IuOcFsfqg2WAnaEzH6KhVbicqCxtOq9w3DH2jwTpddRlCx2Kqf6wCzg8luhHRGyjBZdsbIS+OXwyMevoppawA==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.499.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.499.0.tgz", - "integrity": "sha512-thTb47U1hYHk5ei+yO0D0aehbgQXeAcgvyyxOID9/HDuRfWuTvKdclWh/goIeDfvSS87VBukEAjnCa5JYBwzug==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-arn-parser": "3.495.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.496.0.tgz", - "integrity": "sha512-Oq73Brs4IConvWnRlh8jM1V7LHoTw9SVQklu/QW2FPlNrB3B8fuTdWHHYIWv7ybw1bykXoCY99v865Mmq/Or/g==", - "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz", + "integrity": "sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.498.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.498.0.tgz", - "integrity": "sha512-sWujXgzeTqMZzj/pRYEnnEbSzhBosqw9DXHOY1Mg2igI9NEfGlB7lPARp6aKmCaYlP3Bcj2X86vKCqF53mbyig==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz", + "integrity": "sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.496.0.tgz", - "integrity": "sha512-+iMtRxFk0GmFWNUF4ilxylOQd9PZdR4ZC9jkcPIh1PZlvKtpCyFywKlk5RRZKklSoJ/CttcqwhMvOXTNbWm/0w==", + "version": "3.645.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.645.0.tgz", + "integrity": "sha512-NpTAtqWK+49lRuxfz7st9for80r4NriCMK0RfdJSoPFVntjsSQiQ7+2nW2XL05uVY633e9DvCAw8YatX3zd1mw==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-endpoints": "3.496.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.645.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.496.0.tgz", - "integrity": "sha512-URrNVOPHPgEDm6QFu6lDC2cUFs+Jx23mA3jEwCvoKlXiEY/ZoWjH8wlX3OMUlLrF1qoUTuD03jjrJzF6zoCgug==", + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@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" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.499.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.499.0.tgz", - "integrity": "sha512-8HSFnZErRm7lAfk+Epxrf4QNdQEamg1CnbLybtKQQEjmvxLuXYvj16KlpYEZIwEENOMEvnCqMc7syTPkmjVhJA==", + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz", + "integrity": "sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.499.0", - "@aws-sdk/types": "3.496.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/middleware-sdk-s3": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.496.0.tgz", - "integrity": "sha512-fyi8RcObEa1jNETJdc2H6q9VHrrdKCj/b6+fbLvymb7mUVRd0aWUn+24SNUImnSOnrwYnwaMfyyEC388X4MbFQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.496.0", - "@aws-sdk/middleware-logger": "3.496.0", - "@aws-sdk/middleware-recursion-detection": "3.496.0", - "@aws-sdk/middleware-user-agent": "3.496.0", - "@aws-sdk/region-config-resolver": "3.496.0", - "@aws-sdk/types": "3.496.0", - "@aws-sdk/util-endpoints": "3.496.0", - "@aws-sdk/util-user-agent-browser": "3.496.0", - "@aws-sdk/util-user-agent-node": "3.496.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.1.1", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.496.0.tgz", - "integrity": "sha512-umkGadK4QuNQaMoDICMm7NKRI/mYSXiyPjcn3d53BhsuArYU/52CebGQKdt4At7SwwsiVJZw9RNBHyN5Mm0HVw==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.495.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz", - "integrity": "sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg==", + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", + "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.496.0.tgz", - "integrity": "sha512-1QzOiWHi383ZwqSi/R2KgKCd7M+6DxkxI5acqLPm8mvDRDP2jRjrnVaC0g9/tlttWousGEemDUWStwrD2mVYSw==", + "version": "3.645.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.645.0.tgz", + "integrity": "sha512-Oe+xaU4ic4PB1k3pb5VTC1/MWES13IlgpaQw01bVHGfwP6Yv6zZOxizRzca2Y3E+AyR+nKD7vXtHRY+w3bi4bg==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/types": "^2.9.1", - "@smithy/util-endpoints": "^1.1.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.495.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", - "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==", + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.496.0.tgz", - "integrity": "sha512-4j2spN+h0I0qfSMsGvJXTfQBu1e18rPdekKvzsGJxhaAE1tNgUfUT4nbvc5uVn0sNjZmirskmJ3kfbzVOrqIFg==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", + "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/types": "^2.9.1", + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.496.0.tgz", - "integrity": "sha512-h0Ax0jlDc7UIo3KoSI4C4tVLBFoiAdx3+DhTVfgLS7x93d41dMlziPoBX2RgdcFn37qnzw6AQKTVTMwDbRCGpg==", + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", + "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.496.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -771,24 +923,17 @@ } } }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dependencies": { - "tslib": "^2.3.1" - } - }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.496.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.496.0.tgz", - "integrity": "sha512-GvEjh537IIeOw1ZkZuB37sV12u+ipS5Z1dwjEC/HAvhl5ac23ULtTr1/n+U1gLNN+BAKSWjKiQ2ksj8DiUzeyw==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz", + "integrity": "sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@cspotcode/source-map-support": { @@ -1028,640 +1173,706 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.1.tgz", - "integrity": "sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.2.tgz", + "integrity": "sha512-b5g+PNujlfqIib9BjkNB108NyO5aZM/RXjfOCXRCqXQ1oPnIkfvdORrztbGgCZdPe/BN/MKDlrGA7PafKPM2jw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/chunked-blob-reader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz", - "integrity": "sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", + "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.1.tgz", - "integrity": "sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", + "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-base64": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/config-resolver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.1.tgz", - "integrity": "sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.6.tgz", + "integrity": "sha512-j7HuVNoRd8EhcFp0MzcUb4fG40C7BcyshH+fAd3Jhd8bINNFvEQYBrZoS/SK6Pun9WPlfoI8uuU2SMz8DsEGlA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.1.tgz", - "integrity": "sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.1.tgz", + "integrity": "sha512-7cts7/Oni7aCHebHGiBeWoz5z+vmH+Vx2Z/UW3XtXMslcxI3PEwBZxNinepwZjixS3n12fPc247PHWmjU7ndsQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz", - "integrity": "sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.1.tgz", + "integrity": "sha512-4z/oTWpRF2TqQI3aCM89/PWu3kim58XU4kOCTtuTJnoaS4KT95cPWMxbQfTN2vzcOe96SOKO8QouQW/+ESB1fQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.5", + "@smithy/property-provider": "^3.1.4", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-codec": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz", - "integrity": "sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.3.tgz", + "integrity": "sha512-mKBrmhg6Zd3j07G9dkKTGmrU7pdJGTNz8LbZtIOR3QoodS5yDNqEqoXU4Eg38snZcnCAh7NPBsw5ndxtJPLiCg==", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.9.1", - "@smithy/util-hex-encoding": "^2.1.1", - "tslib": "^2.5.0" + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^3.4.0", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.1.tgz", - "integrity": "sha512-JvEdCmGlZUay5VtlT8/kdR6FlvqTDUiJecMjXsBb0+k1H/qc9ME5n2XKPo8q/MZwEIA1GmGgYMokKGjVvMiDow==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.7.tgz", + "integrity": "sha512-UC4RQqyM8B0g5cX/xmWtsNgSBmZ13HrzCqoe5Ulcz6R462/egbIdfTXnayik7jkjvwOrCPL1N11Q9S+n68jPLA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/eventstream-serde-universal": "^3.0.6", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.1.tgz", - "integrity": "sha512-EqNqXYp3+dk//NmW3NAgQr9bEQ7fsu/CcxQmTiq07JlaIcne/CBWpMZETyXm9w5LXkhduBsdXdlMscfDUDn2fA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.4.tgz", + "integrity": "sha512-saIs5rtAMpifqL7u7nc5YeE/6gkenzXpSz5NwEyhIesRWtHK+zEuYn9KY8SArZEbPSHyGxvvgKk1z86VzfUGHw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.1.tgz", - "integrity": "sha512-LF882q/aFidFNDX7uROAGxq3H0B7rjyPkV6QDn6/KDQ+CG7AFkRccjxRf1xqajq/Pe4bMGGr+VKAaoF6lELIQw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.6.tgz", + "integrity": "sha512-gRKGBdZah3EjZZgWcsTpShq4cZ4Q4JTTe1OPob+jrftmbYj6CvpeydZbH0roO5SvBG8SI3aBZIet9TGN3zUxUw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/eventstream-serde-universal": "^3.0.6", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.1.tgz", - "integrity": "sha512-LR0mMT+XIYTxk4k2fIxEA1BPtW3685QlqufUEUAX1AJcfFfxNDKEvuCRZbO8ntJb10DrIFVJR9vb0MhDCi0sAQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.6.tgz", + "integrity": "sha512-1jvXd4sFG+zKaL6WqrJXpL6E+oAMafuM5GPd4qF0+ccenZTX3DZugoCCjlooQyTh+TZho2FpdVYUf5J/bB/j6Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/eventstream-codec": "^3.1.3", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz", - "integrity": "sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.5.tgz", + "integrity": "sha512-DjRtGmK8pKQMIo9+JlAKUt14Z448bg8nAN04yKIvlrrpmpRSG57s5d2Y83npks1r4gPtTRNbAFdQCoj9l3P2KQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^3.1.1", - "@smithy/querystring-builder": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-base64": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^4.1.1", + "@smithy/querystring-builder": "^3.0.4", + "@smithy/types": "^3.4.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-blob-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.1.tgz", - "integrity": "sha512-jizu1+2PAUjiGIfRtlPEU8Yo6zn+d78ti/ZHDesdf1SUn2BuZW433JlPoCOLH3dBoEEvTgLvQ8tUGSoTTALA+A==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.3.tgz", + "integrity": "sha512-im9wAU9mANWW0OP0YGqwX3lw0nXG0ngyIcKQ8V/MUz1r7A6uO2lpPqKmAsH4VPGNLP2JPUhj4aW/m5UKkxX/IA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/chunked-blob-reader": "^2.1.1", - "@smithy/chunked-blob-reader-native": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/chunked-blob-reader": "^3.0.0", + "@smithy/chunked-blob-reader-native": "^3.0.0", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.1.tgz", - "integrity": "sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.4.tgz", + "integrity": "sha512-6FgTVqEfCr9z/7+Em8BwSkJKA2y3krf1em134x3yr2NHWVCo2KYI8tcA53cjeO47y41jwF84ntsEE0Pe6pNKlg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/hash-stream-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.1.1.tgz", - "integrity": "sha512-VgDaKcfCy0iHcmtAZgZ3Yw9g37Gkn2JsQiMtFQXUh8Wmo3GfNgDwLOtdhJ272pOT7DStzpe9cNr+eV5Au8KfQA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.3.tgz", + "integrity": "sha512-Tz/eTlo1ffqYn+19VaMjDDbmEWqYe4DW1PAWaS8HvgRdO6/k9hxNPt8Wv5laXoilxE20YzKugiHvxHyO6J7kGA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz", - "integrity": "sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.4.tgz", + "integrity": "sha512-MJBUrojC4SEXi9aJcnNOE3oNAuYNphgCGFXscaCj2TA/59BTcXhzHACP8jnnEU3n4yir/NSLKzxqez0T4x4tjA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/is-array-buffer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz", - "integrity": "sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/md5-js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.1.1.tgz", - "integrity": "sha512-L3MbIYBIdLlT+MWTYrdVSv/dow1+6iZ1Ad7xS0OHxTTs17d753ZcpOV4Ro7M7tRAVWML/sg2IAp/zzCb6aAttg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.4.tgz", + "integrity": "sha512-qSlqr/+hybufIJgxQW2gYzGE6ywfOxkjjJVojbbmv4MtxfdDFfzRew+NOIOXcYgazW0f8OYBTIKsmNsjxpvnng==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz", - "integrity": "sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.6.tgz", + "integrity": "sha512-AFyHCfe8rumkJkz+hCOVJmBagNBj05KypyDwDElA4TgMSA4eYDZRjVePFZuyABrJZFDc7uVj3dpFIDCEhf59SA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz", - "integrity": "sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.1.tgz", + "integrity": "sha512-Irv+soW8NKluAtFSEsF8O3iGyLxa5oOevJb/e1yNacV9H7JP/yHyJuKST5YY2ORS1+W34VR8EuUrOF+K29Pl4g==", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/middleware-serde": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-middleware": "^3.0.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-retry": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz", - "integrity": "sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.16.tgz", + "integrity": "sha512-08kI36p1yB4CWO3Qi+UQxjzobt8iQJpnruF0K5BkbZmA/N/sJ51A1JJGJ36GgcbFyPfWw2FU48S5ZoqXt0h0jw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/service-error-classification": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "@smithy/node-config-provider": "^3.1.5", + "@smithy/protocol-http": "^4.1.1", + "@smithy/service-error-classification": "^3.0.4", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, "node_modules/@smithy/middleware-serde": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz", - "integrity": "sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.4.tgz", + "integrity": "sha512-1lPDB2O6IJ50Ucxgn7XrvZXbbuI48HmPCcMTuSoXT1lDzuTUfIuBjgAjpD8YLVMfnrjdepi/q45556LA51Pubw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-stack": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz", - "integrity": "sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.4.tgz", + "integrity": "sha512-sLMRjtMCqtVcrOqaOZ10SUnlFE25BSlmLsi4bRSGFD7dgR54eqBjfqkVkPBQyrKBortfGM0+2DJoUPcGECR+nQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/node-config-provider": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz", - "integrity": "sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.5.tgz", + "integrity": "sha512-dq/oR3/LxgCgizVk7in7FGTm0w9a3qM4mg3IIXLTCHeW3fV+ipssSvBZ2bvEx1+asfQJTyCnVLeYf7JKfd9v3Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/node-http-handler": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz", - "integrity": "sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.0.tgz", + "integrity": "sha512-5TFqaABbiY7uJMKbqR4OARjwI/l4TRoysDJ75pLpVQyO3EcmeloKYwDGyCtgB9WJniFx3BMkmGCB9+j+QiB+Ww==", + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/querystring-builder": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.1.2", + "@smithy/protocol-http": "^4.1.1", + "@smithy/querystring-builder": "^3.0.4", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/property-provider": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.1.tgz", - "integrity": "sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.4.tgz", + "integrity": "sha512-BmhefQbfkSl9DeU0/e6k9N4sT5bya5etv2epvqLUz3eGyfRBhtQq60nDkc1WPp4c+KWrzK721cUc/3y0f2psPQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/protocol-http": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.1.1.tgz", - "integrity": "sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.1.tgz", + "integrity": "sha512-Fm5+8LkeIus83Y8jTL1XHsBGP8sPvE1rEVyKf/87kbOPTbzEDMcgOlzcmYXat2h+nC3wwPtRy8hFqtJS71+Wow==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/querystring-builder": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz", - "integrity": "sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.4.tgz", + "integrity": "sha512-NEoPAsZPdpfVbF98qm8i5k1XMaRKeEnO47CaL5ja6Y1Z2DgJdwIJuJkTJypKm/IKfp8gc0uimIFLwhml8+/pAw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "@smithy/util-uri-escape": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/querystring-parser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz", - "integrity": "sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.4.tgz", + "integrity": "sha512-7CHPXffFcakFzhO0OZs/rn6fXlTHrSDdLhIT6/JIk1u2bvwguTL3fMCc1+CfcbXA7TOhjWXu3TcB1EGMqJQwHg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/service-error-classification": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz", - "integrity": "sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.4.tgz", + "integrity": "sha512-KciDHHKFVTb9A1KlJHBt2F26PBaDtoE23uTZy5qRvPzHPqrooXFi6fmx98lJb3Jl38PuUTqIuCUmmY3pacuMBQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1" + "@smithy/types": "^3.4.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz", - "integrity": "sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.5.tgz", + "integrity": "sha512-6jxsJ4NOmY5Du4FD0enYegNJl4zTSuKLiChIMqIkh+LapxiP7lmz5lYUNLE9/4cvA65mbBmtdzZ8yxmcqM5igg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/signature-v4": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.1.tgz", - "integrity": "sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.1.tgz", + "integrity": "sha512-SH9J9be81TMBNGCmjhrgMWu4YSpQ3uP1L06u/K9SDrE2YibUix1qxedPCxEQu02At0P0SrYDjvz+y91vLG0KRQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^2.1.1", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-uri-escape": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/smithy-client": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.3.1.tgz", - "integrity": "sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.0.tgz", + "integrity": "sha512-H32nVo8tIX82kB0xI2LBrIcj8jx/3/ITotNLbeG1UL0b3b440YPR/hUvqjFJiaB24pQrMjRbU8CugqH5sV0hkw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-stream": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "@smithy/util-stream": "^3.1.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/types": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.9.1.tgz", - "integrity": "sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.4.0.tgz", + "integrity": "sha512-0shOWSg/pnFXPcsSU8ZbaJ4JBHZJPPzLCJxafJvbMVFo9l1w81CqpgUqjlKGNHVrVB7fhIs+WS82JDTyzaLyLA==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/url-parser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.1.tgz", - "integrity": "sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.4.tgz", + "integrity": "sha512-XdXfObA8WrloavJYtDuzoDhJAYc5rOt+FirFmKBRKaihu7QtU/METAxJgSo7uMK6hUkx0vFnqxV75urtRaLkLg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/querystring-parser": "^3.0.4", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-base64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.1.1.tgz", - "integrity": "sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-body-length-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz", - "integrity": "sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-body-length-node": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz", - "integrity": "sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-buffer-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz", - "integrity": "sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-config-provider": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz", - "integrity": "sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz", - "integrity": "sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==", - "dependencies": { - "@smithy/property-provider": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.16.tgz", + "integrity": "sha512-Os8ddfNBe7hmc5UMWZxygIHCyAqY0aWR8Wnp/aKbti3f8Df/r0J9ttMZIxeMjsFgtVjEryB0q7SGcwBsHk8WEw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.4", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz", - "integrity": "sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.16.tgz", + "integrity": "sha512-rNhFIYRtrOrrhRlj6RL8jWA6/dcwrbGYAmy8+OAHjjzQ6zdzUBB1P+3IuJAgwWN6Y5GxI+mVXlM/pOjaoIgHow==", + "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^2.1.1", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/config-resolver": "^3.0.6", + "@smithy/credential-provider-imds": "^3.2.1", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/property-provider": "^3.1.4", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, "node_modules/@smithy/util-endpoints": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz", - "integrity": "sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.0.tgz", + "integrity": "sha512-ilS7/0jcbS2ELdg0fM/4GVvOiuk8/U3bIFXUW25xE1Vh1Ol4DP6vVHQKqM40rCMizCLmJ9UxK+NeJrKlhI3HVA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-hex-encoding": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz", - "integrity": "sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-middleware": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.1.tgz", - "integrity": "sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.4.tgz", + "integrity": "sha512-uSXHTBhstb1c4nHdmQEdkNMv9LiRNaJ/lWV2U/GO+5F236YFpdPw+hyWI9Zc0Rp9XKzwD9kVZvhZmEgp0UCVnA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-retry": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.1.tgz", - "integrity": "sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.4.tgz", + "integrity": "sha512-JJr6g0tO1qO2tCQyK+n3J18r34ZpvatlFN5ULcLranFIBZPxqoivb77EPyNTVwTGMEvvq2qMnyjm4jMIxjdLFg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/service-error-classification": "^3.0.4", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-stream": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.1.tgz", - "integrity": "sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.4.tgz", + "integrity": "sha512-txU3EIDLhrBZdGfon6E9V6sZz/irYnKFMblz4TLVjyq8hObNHNS2n9a2t7GIrl7d85zgEPhwLE0gANpZsvpsKg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/types": "^3.4.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" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-uri-escape": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz", - "integrity": "sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.1.1.tgz", - "integrity": "sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-waiter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.1.1.tgz", - "integrity": "sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.3.tgz", + "integrity": "sha512-OU0YllH51/CxD8iyr3UHSMwYqTGTyuxFdCMH/0F978t+iDmJseC/ttrWPb22zmYkhkrjqtipzC1xaMuax5QKIA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.1.2", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@supercharge/promise-pool": { @@ -1820,11 +2031,12 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -1877,7 +2089,8 @@ "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "license": "MIT" }, "node_modules/brace-expansion": { "version": "2.0.1", @@ -2124,9 +2337,9 @@ } }, "node_modules/ethers": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.10.0.tgz", - "integrity": "sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.2.tgz", + "integrity": "sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg==", "funding": [ { "type": "individual", @@ -2137,14 +2350,15 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "1.10.0", + "@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.5.0" + "ws": "8.17.1" }, "engines": { "node": ">=14.0.0" @@ -2186,19 +2400,20 @@ } }, "node_modules/fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -3425,7 +3640,8 @@ "node_modules/strnum": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "license": "MIT" }, "node_modules/supports-color": { "version": "7.2.0", @@ -3668,15 +3884,16 @@ } }, "node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { From bb198f29418379891afdb9cfff7a2e3ebdbbe006 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 10 Sep 2024 12:07:45 +0000 Subject: [PATCH 1404/1590] fix rev --- fees/goplus.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/goplus.ts b/fees/goplus.ts index 01611b2f57..0192881018 100644 --- a/fees/goplus.ts +++ b/fees/goplus.ts @@ -39,7 +39,7 @@ const fetch = async (options: FetchOptions) => { totalFees.add(USDT_MINT, totalFee); dailyProtocolRevenue.add(USDT_MINT, dailyTotal); totalProtocolRevenue.add(USDT_MINT, totalFee); - return { dailyFees, totalFees, dailyProtocolRevenue, totalProtocolRevenue }; + return { dailyFees, totalFees, dailyRevenue: dailyProtocolRevenue, dailyProtocolRevenue, totalProtocolRevenue }; }; const adapter: SimpleAdapter = { From c8231d20da24a538bec1ef4f6b38fc197daaec0e Mon Sep 17 00:00:00 2001 From: ideapacito Date: Tue, 10 Sep 2024 19:59:16 +0700 Subject: [PATCH 1405/1590] fix daily fees calculation --- fees/fwx/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/fwx/index.ts b/fees/fwx/index.ts index 60b8f58cde..e97aaaa60c 100644 --- a/fees/fwx/index.ts +++ b/fees/fwx/index.ts @@ -93,7 +93,8 @@ const fetch = (chain: Chain) => { dailyTradingFee + dailyLiquidationFee + dailyBountyFeeToLiquidator + - dailyBountyFeeToProtocol; + dailyBountyFeeToProtocol + + dailyOtfFee; const dailySupplySideRevenue = 0.1 * dailyInterestPaid + 0.8 * dailyTradingFee + From fd6568a18091e2acfcfdf43a498609a9efff207e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 10 Sep 2024 13:06:32 +0000 Subject: [PATCH 1406/1590] fix type --- dexs/spookyswap/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dexs/spookyswap/index.ts b/dexs/spookyswap/index.ts index c86275539b..b2ddc566ad 100644 --- a/dexs/spookyswap/index.ts +++ b/dexs/spookyswap/index.ts @@ -15,7 +15,11 @@ const graphs = getChainVolumeWithGasToken2({ graphUrls: { [FANTOM]: endpoints[FANTOM], }, - priceToken: "coingecko:fantom" + priceToken: "coingecko:fantom", + totalVolume: { + factory: "uniswapFactories", + field: DEFAULT_TOTAL_VOLUME_FIELD, + }, }); const graphsV3 = getChainVolume2({ From 7e3def5f7ffc1bfa828a38a7f169d6dc45d111ce Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 10 Sep 2024 13:38:23 +0000 Subject: [PATCH 1407/1590] change query query by time --- dexs/drift-protocol/index.ts | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index 69fb8e96ff..8bcfa7338f 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -1,13 +1,13 @@ import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; import { queryDune } from "../../helpers/dune"; -import { BreakdownAdapter } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions } from "../../adapters/types"; const DAILY_VOL_ENDPOINT = "https://mainnet-beta.api.drift.trade/stats/24HourVolume"; // const DUNE_QUERY_ID = "3756979"; // https://dune.com/queries/3756979/6318568 -const DUNE_QUERY_ID = "3782153"; // Should be faster than the above - https://dune.com/queries/3782153/6359334 +const DUNE_QUERY_ID = "4057938"; // Should be faster than the above - https://dune.com/queries/3782153/6359334 type DimentionResult = { dailyVolume?: number; @@ -17,8 +17,12 @@ type DimentionResult = { }; -async function getPerpDimensions(): Promise { - const resultRows = await queryDune(DUNE_QUERY_ID); +async function getPerpDimensions(options: FetchOptions): Promise { + const dayInSec = 24 * 60 * 60; + const resultRows = await queryDune(DUNE_QUERY_ID, { + start: options.startOfDay, + end: options.startOfDay + dayInSec, + }); const { perpetual_volume, total_revenue, total_taker_fee } = resultRows[0]; @@ -46,11 +50,11 @@ async function getSpotDimensions(): Promise { return { dailyVolume }; } -async function fetch(type: "perp" | "spot") { +async function fetch(type: "perp" | "spot", options: FetchOptions) { const timestamp = Date.now() / 1e3; if (type === "perp") { - const results = await getPerpDimensions(); + const results = await getPerpDimensions(options); return { ...results, @@ -70,13 +74,13 @@ const adapter: BreakdownAdapter = { breakdown: { swap: { [CHAIN.SOLANA]: { - fetch: () => fetch("spot"), + fetch: (_t: any, _tt: any, options: FetchOptions) => fetch("spot", options), start: 1690239600, }, }, derivatives: { [CHAIN.SOLANA]: { - fetch: () => fetch("perp"), + fetch: (_t: any, _tt: any, options: FetchOptions) => fetch("perp", options), start: 1690239600, }, }, From 41356f215685476f8e1dd9e5d4c8a6b4f8b9d389 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 10 Sep 2024 14:51:54 +0000 Subject: [PATCH 1408/1590] fix drift protocol --- dexs/drift-protocol/index.ts | 55 +++++++++++++----------------------- 1 file changed, 20 insertions(+), 35 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index 8bcfa7338f..2c3e67e1bb 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -1,11 +1,7 @@ import { CHAIN } from "../../helpers/chains"; -import { httpGet } from "../../utils/fetchURL"; import { queryDune } from "../../helpers/dune"; import { BreakdownAdapter, FetchOptions } from "../../adapters/types"; -const DAILY_VOL_ENDPOINT = - "https://mainnet-beta.api.drift.trade/stats/24HourVolume"; - // const DUNE_QUERY_ID = "3756979"; // https://dune.com/queries/3756979/6318568 const DUNE_QUERY_ID = "4057938"; // Should be faster than the above - https://dune.com/queries/3782153/6359334 @@ -16,53 +12,42 @@ type DimentionResult = { dailyRevenue?: number; }; +type IRequest = { + [key: string]: Promise; +} +const requests: IRequest = {} + +export async function fetchURLWithRetry(url: string, options: FetchOptions) { + if (!requests[url]) + requests[url] = queryDune("4059377", { + start: options.startOfDay, + end: options.startOfDay + 24 * 60 * 60, + }) + return requests[url] +} async function getPerpDimensions(options: FetchOptions): Promise { - const dayInSec = 24 * 60 * 60; - const resultRows = await queryDune(DUNE_QUERY_ID, { - start: options.startOfDay, - end: options.startOfDay + dayInSec, - }); - - const { perpetual_volume, total_revenue, total_taker_fee } = resultRows[0]; - - return { - dailyVolume: perpetual_volume, - dailyFees: total_taker_fee, - dailyUserFees: total_taker_fee, - dailyRevenue: total_revenue, - }; + const volumeResponse = await fetchURLWithRetry("4059377", options) + const dailyVolume = volumeResponse[0].perpetual_volume; + return { dailyVolume }; } -async function getSpotDimensions(): Promise { - const volumeResponse = await httpGet( - `${DAILY_VOL_ENDPOINT}?spotMarkets=true` - ); - - const rawVolumeQuotePrecision = volumeResponse.data.volume; - - // Volume will be returned in 10^6 precision - const dailyVolume = - rawVolumeQuotePrecision.length >= 6 - ? Number(rawVolumeQuotePrecision.slice(0, -6)) - : 0; - +async function getSpotDimensions(options: FetchOptions): Promise { + const volumeResponse = await fetchURLWithRetry("4059377", options) + const dailyVolume = volumeResponse[0].spot_volume; return { dailyVolume }; } async function fetch(type: "perp" | "spot", options: FetchOptions) { const timestamp = Date.now() / 1e3; - if (type === "perp") { const results = await getPerpDimensions(options); - return { ...results, timestamp, }; } else { - const results = await getSpotDimensions(); - + const results = await getSpotDimensions(options); return { ...results, timestamp: Date.now() / 1e3, From 0677596dad80fd1e85198bd67bf7779975e175af Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 10 Sep 2024 14:55:54 +0000 Subject: [PATCH 1409/1590] fix start time --- dexs/drift-protocol/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index 2c3e67e1bb..9ad8dae9fd 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -18,10 +18,11 @@ type IRequest = { const requests: IRequest = {} export async function fetchURLWithRetry(url: string, options: FetchOptions) { + const start = options.startOfDay; if (!requests[url]) requests[url] = queryDune("4059377", { - start: options.startOfDay, - end: options.startOfDay + 24 * 60 * 60, + start: start, + end: start + 24 * 60 * 60, }) return requests[url] } From 0794d1e2b4e0697583d27b3e5963d354bee60e18 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 10 Sep 2024 15:39:08 +0000 Subject: [PATCH 1410/1590] key promisse --- dexs/drift-protocol/index.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index 9ad8dae9fd..c78834a42d 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -19,12 +19,13 @@ const requests: IRequest = {} export async function fetchURLWithRetry(url: string, options: FetchOptions) { const start = options.startOfDay; - if (!requests[url]) - requests[url] = queryDune("4059377", { + const key = `${url}-${start}`; + if (!requests[key]) + requests[key] = queryDune("4059377", { start: start, end: start + 24 * 60 * 60, }) - return requests[url] + return requests[key] } async function getPerpDimensions(options: FetchOptions): Promise { From e676d556e6785371f55c51f125b8370b1fcedd9b Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 10 Sep 2024 16:50:30 +0100 Subject: [PATCH 1411/1590] viper --- dexs/velodrome/index.ts | 8 ++------ dexs/velodrome/v2.ts | 2 +- dexs/verse/index.ts | 8 ++------ dexs/viperswap/index.ts | 8 ++------ 4 files changed, 7 insertions(+), 19 deletions(-) diff --git a/dexs/velodrome/index.ts b/dexs/velodrome/index.ts index 6799744c16..5688ae7efc 100644 --- a/dexs/velodrome/index.ts +++ b/dexs/velodrome/index.ts @@ -1,6 +1,6 @@ import * as sdk from "@defillama/sdk"; import { FetchOptions, SimpleAdapter } from "../../adapters/types"; -import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; import { fetchV2Volume } from "./v2" @@ -9,16 +9,12 @@ const endpoints = { [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('2bam2XEb91cFqABFPSKj3RiSjpop9HvDt1MnYq5cDX5E'), }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "dayData", - field: DEFAULT_DAILY_VOLUME_FIELD, - }, }); diff --git a/dexs/velodrome/v2.ts b/dexs/velodrome/v2.ts index e474df42aa..ec00cfc08f 100644 --- a/dexs/velodrome/v2.ts +++ b/dexs/velodrome/v2.ts @@ -1,4 +1,4 @@ -import { FetchOptions, FetchResult, FetchResultV2, SimpleAdapter } from "../../adapters/types" +import { FetchOptions, FetchResultV2 } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" const sugars = { diff --git a/dexs/verse/index.ts b/dexs/verse/index.ts index eabf456a19..04c88a3ff9 100644 --- a/dexs/verse/index.ts +++ b/dexs/verse/index.ts @@ -1,23 +1,19 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; import { ChainEndpoints, SimpleAdapter, BaseAdapter } from "../../adapters/types"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints: ChainEndpoints = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('CvSasxLYUvFbYyi7VXGhXL6PNgkZPoVDo2bo66ftEA2V'), [CHAIN.SMARTBCH]: "https://analytics-dex.api.bitcoin.com/subgraphs/name/verse/exchange", }; -const fetch = getChainVolume({ +const fetch = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: "volumeUSD", }, - dailyVolume: { - factory: "dayData", - field: "volumeUSD", - }, }); const volumeAdapter: BaseAdapter = { diff --git a/dexs/viperswap/index.ts b/dexs/viperswap/index.ts index 08d2467051..0c4e34b1c7 100644 --- a/dexs/viperswap/index.ts +++ b/dexs/viperswap/index.ts @@ -3,7 +3,7 @@ import { DISABLED_ADAPTER_KEY, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import { DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume, univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const blocksGraph = "https://graph.viper.exchange/subgraphs/name/harmony/blocks"; const blockQuery = gql` @@ -42,16 +42,12 @@ const endpoints = { const DAILY_VOLUME_FACTORY = "uniswapDayData"; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "uniswapFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - }, getCustomBlock, }); From 8e29e6baaacac05ec4c25b97cfd776bafed3e99d Mon Sep 17 00:00:00 2001 From: leifu Date: Tue, 10 Sep 2024 21:54:33 +0300 Subject: [PATCH 1412/1590] Update the arbitrum endpoint --- aggregator-derivatives/kwenta/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregator-derivatives/kwenta/index.ts b/aggregator-derivatives/kwenta/index.ts index 6166dc1e01..0e8c6309ea 100644 --- a/aggregator-derivatives/kwenta/index.ts +++ b/aggregator-derivatives/kwenta/index.ts @@ -29,7 +29,7 @@ const PROVIDER_CONFIG = { }, [CHAIN.ARBITRUM]: { startTimestamp: 1696032000, - endpoint: "https://subgraph.satsuma-prod.com/7ed49092fef1/equilibria/perennial-v2-arbitrum-new/api", + endpoint: "https://subgraph.perennial.finance/arbitrum", query: gql` query aggregateStats($startTimestamp: BigInt!, $endTimestamp: BigInt!) { marketAccumulations( From f90f467712962fac90c94460f40d169d21ff6b2a Mon Sep 17 00:00:00 2001 From: TerrenceAddison Date: Wed, 11 Sep 2024 11:33:37 +0700 Subject: [PATCH 1413/1590] update to allow backfill --- options/arrow-markets/index.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/options/arrow-markets/index.ts b/options/arrow-markets/index.ts index 2a1d0e51f1..a114287e11 100644 --- a/options/arrow-markets/index.ts +++ b/options/arrow-markets/index.ts @@ -15,7 +15,7 @@ export const v2_adapter: SimpleAdapter = { adapter: { [CHAIN.AVAX]: { fetch: fetchArrowMarketsVolumeData, - start: 1702630075 + start: 1707350400 }, }, }; @@ -24,8 +24,7 @@ export async function fetchArrowMarketsVolumeData( /** Timestamp representing the end of the 24 hour period */ timestamp: number ) { - let timestamp_in_ms = timestamp * 1000 - const ArrowMarketsVolumeData = await getArrowMarketsVolumeData(arrowMarketsVolumeEndpoint); + const ArrowMarketsVolumeData = await getArrowMarketsVolumeData(arrowMarketsVolumeEndpoint, timestamp); const dailyPremiumVolume = Number(ArrowMarketsVolumeData.daily_premium_volume).toFixed(2); const dailyNotionalVolume = Number(ArrowMarketsVolumeData.daily_notional_volume).toFixed(2); @@ -39,7 +38,10 @@ export async function fetchArrowMarketsVolumeData( }; } -async function getArrowMarketsVolumeData(endpoint: string): Promise { +async function getArrowMarketsVolumeData(endpoint: string, timestamp: number): Promise { + const url = new URL(endpoint); + url.searchParams.append('timestamp', timestamp.toString()); + return fetchURL(endpoint) } From dd203e7aadffcdcd03af82ab78e3ed605afc0483 Mon Sep 17 00:00:00 2001 From: ideapacito Date: Wed, 11 Sep 2024 13:38:51 +0700 Subject: [PATCH 1414/1590] fix fwx fee --- fees/fwx/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fees/fwx/index.ts b/fees/fwx/index.ts index e97aaaa60c..feea4a5a05 100644 --- a/fees/fwx/index.ts +++ b/fees/fwx/index.ts @@ -88,6 +88,7 @@ const fetch = (chain: Chain) => { parseFloat(marginTradeResData.total_liquidation_fee) + parseFloat(perpResData.total_liquidation_fee); + // daily const dailyFees = dailyInterestPaid + dailyTradingFee + @@ -102,12 +103,15 @@ const fetch = (chain: Chain) => { dailyOtfFee; const dailyProtocolRevenue = 0.9 * dailyInterestPaid + 0.2 * dailyTradingFee; + + // total const totalFees = totalInterestPaid + totalTradingFee + totalLiquidationFee + totalBountyFeeToLiquidator + - totalBountyFeeToProtocol; + totalBountyFeeToProtocol + + totalOtfFee; const totalSupplySideRevenue = 0.1 * totalInterestPaid + 0.8 * totalTradingFee + From 34e8deb45d09706c16ce0e1f51f3eda51739e9a5 Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Wed, 11 Sep 2024 17:45:26 +0800 Subject: [PATCH 1415/1590] timestamp update --- fees/solv-finance/index.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 6d5e9b68d2..c6a9cabcfb 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -1,10 +1,10 @@ import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; -import { BreakdownAdapter, FetchOptions, FetchV2, SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions, FetchV2 } from "../../adapters/types"; +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { addTokensReceived } from "../../helpers/token"; import { httpGet } from "../../utils/fetchURL"; import { gql, request } from "graphql-request"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { getPrices } from "../../utils/prices"; import { BigNumber } from "bignumber.js" @@ -67,17 +67,18 @@ const pool: FetchV2 = async (options) => { const pools = await getGraphData(contracts[options.chain]["poolFees"], options.chain); const concretes = await concrete(pools, options); - const timestamp = getUniqStartOfTodayTimestamp(new Date()); - const yesterday = timestamp - 86400; + const fromTimestamp = getTimestampAtStartOfDayUTC(options.fromTimestamp); + const toTimestamp = getTimestampAtStartOfDayUTC(options.toTimestamp); + let poolNavs: any[] = []; for (const pool of pools) { const [yesterdayNav, todayNav] = await options.api.multiCall({ calls: [{ target: pool.navOracle, - params: [pool.poolId, yesterday], + params: [pool.poolId, toTimestamp], }, { target: pool.navOracle, - params: [pool.poolId, timestamp], + params: [pool.poolId, fromTimestamp], }], abi: 'function getSubscribeNav(bytes32 poolId_, uint256 time_) view returns (uint256 nav_, uint256 navTime_)', }); @@ -105,7 +106,7 @@ const pool: FetchV2 = async (options) => { })), }); - const prices = (await getPrices(poolBaseInfos.map((index: { currency: string; }) => `${options.chain}:${index.currency.toLowerCase()}`), timestamp)); + const prices = (await getPrices(poolBaseInfos.map((index: { currency: string; }) => `${options.chain}:${index.currency.toLowerCase()}`), toTimestamp)); let dailyFeeUsd = 0; for (let i = 0; i < pools.length; i++) { const poolNav = poolNavs[i]; From 5e35fa1797cbd032f785b1f09352821333381eb6 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 11 Sep 2024 13:11:56 +0300 Subject: [PATCH 1416/1590] added wolfswap aggregator --- aggregators/wolfswap/index.ts | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 aggregators/wolfswap/index.ts diff --git a/aggregators/wolfswap/index.ts b/aggregators/wolfswap/index.ts new file mode 100644 index 0000000000..7a073b99ef --- /dev/null +++ b/aggregators/wolfswap/index.ts @@ -0,0 +1,38 @@ +import { ChainBlocks, FetchOptions } from "../../adapters/types"; + +const abis = { + "Swapped": "event Swapped(uint indexed id, address wallet, address sourceToken, address destinationToken, uint amountOut)", +} + +const contracts = { + polygon: '0x9fB5f7Bc34cEd4dE039405D7bE26CbF1D0a420d9', + cronos: '0xeC68090566397DCC37e54B30Cc264B2d68CF0489', + cronos_zkevm: '0x7c39eAcCd16cDAD8BFE05e1874da1BD315DB766F', + base: '0xE6174feAD698da575312ae85020A3224E556f8F9', + avax: '0x643dEB007DfA43c0D7BeA2155E97E61279d9a56F', + sei: '0x1AD805e80b59C802f9D8059f904DCA6AC153de30', + blast: '0xb86a6e5702C327c5C051Bf5323Cb2bAb5E628d0c', +} + +const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions) => { + const dailyVolume = createBalances() + const logs = await getLogs({ target: contracts[chain], eventAbi: abis.Swapped, }) + logs.forEach((log: any) => { + dailyVolume.add(log.destinationToken, log.amountOut) + }) + return { timestamp, dailyVolume } +}; + +const adapter: any = { + adapter: { + polygon: { fetch, start: 1710972000, }, + cronos: { fetch, start: 1711317600, }, + cronos_zkevm: { fetch, start: 1718830800, }, + base: { fetch, start: 1713128400, }, + avax: { fetch, start: 1717189200, }, + //sei: { fetch, start: 1717189200, }, + blast: { fetch, start: 1709848800, }, + }, +}; + +export default adapter; From 5325bcfd02fc92ff1b07e743d15dc09e00686705 Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Wed, 11 Sep 2024 15:21:19 +0400 Subject: [PATCH 1417/1590] Fix API endpoint --- dexs/gaspump/index.ts | 2 +- fees/gaspump/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/gaspump/index.ts b/dexs/gaspump/index.ts index 3d2eb13f4d..dd446928ad 100644 --- a/dexs/gaspump/index.ts +++ b/dexs/gaspump/index.ts @@ -4,7 +4,7 @@ import { FetchOptions } from "../../adapters/types"; import { getPrices } from "../../utils/prices"; -const endpoint = "https://api-dev.gas111.com/api/v1/internal/tokens/volume-stats?" +const endpoint = "https://api.gas111.com/api/v1/internal/tokens/volume-stats?" const fetch = async (options: FetchOptions) => { diff --git a/fees/gaspump/index.ts b/fees/gaspump/index.ts index 69ef6c56eb..7f7a020294 100644 --- a/fees/gaspump/index.ts +++ b/fees/gaspump/index.ts @@ -4,7 +4,7 @@ import { FetchOptions } from "../../adapters/types"; import { getPrices } from "../../utils/prices"; -const endpoint = "https://api-dev.gas111.com/api/v1/internal/tokens/volume-stats?" +const endpoint = "https://api.gas111.com/api/v1/internal/tokens/volume-stats?" const fetch = async (options: FetchOptions) => { From 0451acb87dd0f531c638cc417ab4cbcedf2f8f33 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 11 Sep 2024 14:17:02 +0000 Subject: [PATCH 1418/1590] fix zeno --- dexs/zeno/index.ts | 132 +++++++++++++-------------------------------- 1 file changed, 37 insertions(+), 95 deletions(-) diff --git a/dexs/zeno/index.ts b/dexs/zeno/index.ts index bc0674d7ea..95cdafbbbe 100644 --- a/dexs/zeno/index.ts +++ b/dexs/zeno/index.ts @@ -1,10 +1,7 @@ import { Adapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { gql, GraphQLClient } from "graphql-request"; -import type { ChainEndpoints, FetchOptions } from "../../adapters/types"; -import { Chain } from "@defillama/sdk/build/general"; -import { HOUR, getTimestampAtStartOfHour } from "../../utils/date"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { FetchOptions } from "../../adapters/types"; const endpoints = { [CHAIN.METIS]: @@ -16,102 +13,47 @@ type MarketStat = { totalTradingVolume: string; }; -const graphs = (graphUrls: ChainEndpoints) => { - return (chain: Chain) => { - return async (options: FetchOptions) => { - const startTime = Date.now(); - const hourStartTime = startTime / 1e3; - - if (chain === CHAIN.METIS) { - // Get total trading volume - const totalTradingVolumeQuery = gql` - { - marketStats { - id - totalTradingVolume - } - } - `; - - const graphQLClient = new GraphQLClient(graphUrls[chain]); - graphQLClient.setHeader("origin", "https://zeno.exchange"); - const totalMarketStats = ( - await graphQLClient.request(totalTradingVolumeQuery) - ).marketStats as Array; - const totalVolume = - totalMarketStats.reduce( - (accum: number, t: MarketStat) => - accum + parseInt(t.totalTradingVolume), - 0 as number - ) / 1e30; - - const chunkSize = 40; - const splitMarket: MarketStat[][] = []; - for (let i = 0; i < totalMarketStats.length; i += chunkSize) { - const chunk = totalMarketStats.slice(i, i + chunkSize); - splitMarket.push(chunk); - } - - let last24hrVolume = 0; - for (const markets of splitMarket) { - // Get daily trading volume - const ids: Array = []; - - let latestHourIndex = Math.floor( - getTimestampAtStartOfHour(hourStartTime) / HOUR - ); - - for (let i = 0; i < 24; i++) { - for (const marketStat of markets) { - ids.push(`"${latestHourIndex - i}_${marketStat.id}"`); - } - } - - const filter = ids.join(","); - - const last24hrVolumeQuery = gql` - { - marketHourlyStats( - where: { - id_in: [${filter}] - } - ) { - tradingVolume - } - } - `; - - const last24hrMarketStats = ( - await graphQLClient.request(last24hrVolumeQuery) - ).marketHourlyStats as Array<{ tradingVolume: string }>; - last24hrVolume += - last24hrMarketStats.reduce( - (accum, t) => accum + parseInt(t.tradingVolume), - 0 as number - ) / 1e30; - } - - return { - timestamp: startTime, - totalVolume: totalVolume.toString(), - dailyVolume: last24hrVolume.toString(), - }; +type MarketDailyStat = { + day: number; + tradingVolume: string; +} + +const fetch = async (_t: any, _tt: any, options: FetchOptions) => { + const dayId = Math.floor(options.startOfDay / 86400); + const query = gql` + { + marketDailyStats(where: { day: ${dayId} }) { + day + tradingVolume } - - return { - timestamp: startTime, - totalVolume: "0", - dailyVolume: "0", - }; - }; - }; -}; + marketStats { + id + totalTradingVolume + } + } + `; + const graphQLClient = new GraphQLClient(endpoints[options.chain]); + graphQLClient.setHeader("origin", "https://zeno.exchange"); + const data = await graphQLClient.request(query); + const dailyVolume = data.marketDailyStats.reduce( + (accum: number, t: MarketDailyStat) => accum + parseInt(t.tradingVolume) / 1e30, + 0 as number + ); + const totalVolume = data.marketStats.reduce( + (accum: number, t: MarketStat) => accum + parseInt(t.totalTradingVolume) / 1e30, + 0 as number + ); + return { + timestamp: options.startOfDay, + dailyVolume: dailyVolume, + totalVolume: totalVolume, + } +} const adapter: Adapter = { - version: 2, adapter: { [CHAIN.METIS]: { - fetch: graphs(endpoints)(CHAIN.METIS), + fetch: fetch, start: 1710294153, }, }, From 3a6305c4d92ef21bbc61487b55c026bdf78c0f46 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 11 Sep 2024 17:44:03 +0100 Subject: [PATCH 1419/1590] zyber --- dexs/voltage-v3/index.ts | 12 ++---------- dexs/voltswap/index.ts | 13 +++--------- dexs/wardenswap/index.ts | 11 ++--------- dexs/warpgate/index.ts | 8 ++------ dexs/wavelength-dao/index.ts | 38 ++---------------------------------- dexs/whaleswap/index.ts | 12 ++---------- dexs/wojak-finance/index.ts | 2 +- dexs/xswap-protocol/index.ts | 4 ++-- dexs/yieldfields/index.ts | 13 ++---------- dexs/zkswap/index.ts | 17 +++------------- dexs/zyberswap/index.ts | 23 ++++------------------ 11 files changed, 25 insertions(+), 128 deletions(-) diff --git a/dexs/voltage-v3/index.ts b/dexs/voltage-v3/index.ts index 2f31d17eff..9b4217b383 100644 --- a/dexs/voltage-v3/index.ts +++ b/dexs/voltage-v3/index.ts @@ -1,27 +1,19 @@ import { SimpleAdapter } from "../../adapters/types"; import {CHAIN} from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpoint = { [CHAIN.FUSE]: "https://api.studio.thegraph.com/query/78455/exchange-v3/version/latest", }; -const v3Graph = getGraphDimensions({ +const v3Graph = getGraphDimensions2({ graphUrls: endpoint, totalVolume: { factory: "factories" }, - dailyVolume: { - factory: "pancakeDayData", - field: 'volumeUSD' - }, totalFees: { factory: "factories" }, - dailyFees: { - factory: "pancakeDayData", - field: "feesUSD" - } }) const v3StartTimes = { diff --git a/dexs/voltswap/index.ts b/dexs/voltswap/index.ts index 4ea7d9699c..07221d993d 100644 --- a/dexs/voltswap/index.ts +++ b/dexs/voltswap/index.ts @@ -1,11 +1,8 @@ import { BreakdownAdapter, DISABLED_ADAPTER_KEY } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; -const { - getChainVolume, - DEFAULT_TOTAL_VOLUME_FIELD, - DEFAULT_DAILY_VOLUME_FIELD, -} = require("../../helpers/getUniSubgraphVolume"); +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; +const { DEFAULT_TOTAL_VOLUME_FIELD } = require("../../helpers/getUniSubgraphVolume"); const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); const endpoints = { [CHAIN.METER]: "https://graph-meter.voltswap.finance/subgraphs/name/meterio/voltswapv2-subgraph", @@ -13,16 +10,12 @@ const endpoints = { const DAILY_VOLUME_FACTORY = "uniswapDayData"; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "uniswapFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - }, }); const adapter: BreakdownAdapter = { diff --git a/dexs/wardenswap/index.ts b/dexs/wardenswap/index.ts index 03381c7732..4a85c063d4 100644 --- a/dexs/wardenswap/index.ts +++ b/dexs/wardenswap/index.ts @@ -2,10 +2,8 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; -const { - getChainVolume, -} = require("../../helpers/getUniSubgraphVolume"); const endpoints = { [CHAIN.BSC]: sdk.graph.modifyEndpoint('DFn2ZaLXK4tJkXZ6AhfLF22pNobtTC88f3Ff3bC8by3r'), [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('BEKfdhcWBQQuZP5vz8jDZ8ZKRRqAeNYEGfuzdDPzzwnQ'), @@ -16,17 +14,12 @@ const endpoints = { const VOLUME_FIELD = "volumeUSD"; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "wardenSwaps", field: VOLUME_FIELD, }, - dailyVolume: { - factory: "dayData", - field: "volumeUSD", - dateField: "date" - } }); diff --git a/dexs/warpgate/index.ts b/dexs/warpgate/index.ts index 2921bff72a..10ff2ef96f 100644 --- a/dexs/warpgate/index.ts +++ b/dexs/warpgate/index.ts @@ -1,21 +1,17 @@ import { SimpleAdapter } from "../../adapters/types"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { [CHAIN.IMX]: "https://subgraph.warpgate.pro/subgraphs/name/warpgate/subgraph-v3", }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "volumeUSD", - }, }); const adapter: SimpleAdapter = { diff --git a/dexs/wavelength-dao/index.ts b/dexs/wavelength-dao/index.ts index 9aab70f54c..554929975b 100644 --- a/dexs/wavelength-dao/index.ts +++ b/dexs/wavelength-dao/index.ts @@ -1,51 +1,17 @@ -const { request, gql } = require("graphql-request"); import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill, { IGraphs } from "../../helpers/customBackfill"; -import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; - -const blocksGraph = "https://teste.testeborabora.cyou/graphql"; -const ONE_DAY_IN_SECONDS = 60 * 60 * 24 -const blockQuery = gql` - query blocks($timestampFrom: Int!, $timestampTo: Int!) { - blocks( - first: 1 - orderBy: timestamp - orderDirection: asc - where: { timestamp_gt: $timestampFrom, timestamp_lt: $timestampTo } - ) { - id - number - timestamp - __typename - } - } -`; - - -const getCustomBlock = async (timestamp: number) => { - const block = - ( - await request(blocksGraph, blockQuery, { - timestampFrom: timestamp - ONE_DAY_IN_SECONDS, - timestampTo: timestamp + ONE_DAY_IN_SECONDS, - }) - ).blocks[0].number - ; - return Number(block); -}; +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.VELAS]: "https://testeborabora.cyou/subgraphs/name/wavelength22" } -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "balancers", field: "totalSwapVolume", }, - hasDailyVolume: false, - // getCustomBlock, }); const adapter: SimpleAdapter = { diff --git a/dexs/whaleswap/index.ts b/dexs/whaleswap/index.ts index 4d540b4c53..4bac47a4cb 100644 --- a/dexs/whaleswap/index.ts +++ b/dexs/whaleswap/index.ts @@ -1,11 +1,7 @@ import * as sdk from "@defillama/sdk"; import { SimpleAdapter } from "../../adapters/types"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; -const { - getChainVolume, - DEFAULT_TOTAL_VOLUME_FIELD, - DEFAULT_DAILY_VOLUME_FIELD, -} = require("../../helpers/getUniSubgraphVolume"); const { BSC, FANTOM } = require("../../helpers/chains"); const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); const endpoints = { @@ -15,7 +11,7 @@ const endpoints = { const DAILY_VOLUME_FACTORY = "dayData"; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: { [BSC]: endpoints[BSC], [FANTOM]: endpoints[FANTOM], @@ -24,10 +20,6 @@ const graphs = getChainVolume({ factory: "whaleswapFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - }, }); const adapter: SimpleAdapter = { diff --git a/dexs/wojak-finance/index.ts b/dexs/wojak-finance/index.ts index 50e62286bc..4d258d9037 100644 --- a/dexs/wojak-finance/index.ts +++ b/dexs/wojak-finance/index.ts @@ -61,7 +61,7 @@ const graphs = getChainVolume({ }); const adapter: SimpleAdapter = { - version: 2, + version: 1, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.DOGECHAIN]: { diff --git a/dexs/xswap-protocol/index.ts b/dexs/xswap-protocol/index.ts index 6daa99921a..67defa4fe2 100644 --- a/dexs/xswap-protocol/index.ts +++ b/dexs/xswap-protocol/index.ts @@ -1,12 +1,12 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpoints = { [CHAIN.XDC]: "https://analytics.xspswap.finance/subgraphs/name/some/factory" } -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, graphRequestHeaders: { [CHAIN.XDC]: { diff --git a/dexs/yieldfields/index.ts b/dexs/yieldfields/index.ts index df900ab833..e62feaafcc 100644 --- a/dexs/yieldfields/index.ts +++ b/dexs/yieldfields/index.ts @@ -1,13 +1,8 @@ import * as sdk from "@defillama/sdk"; -const { - getChainVolume, - DEFAULT_TOTAL_VOLUME_FIELD, - DEFAULT_DAILY_VOLUME_FIELD, -} = require("../../helpers/getUniSubgraphVolume"); const { BSC } = require("../../helpers/chains"); const { getStartTimestamp } = require("../../helpers/getStartTimestamp"); - import { SimpleAdapter } from "../../adapters/types"; +import { DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [BSC]: sdk.graph.modifyEndpoint('6PGfw9826xTB8JNN9HuMyY5eaFZLq6uqUcBwH7YEytsZ'), @@ -15,7 +10,7 @@ const endpoints = { const DAILY_VOLUME_FACTORY = "yieldFieldsDayData"; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: { [BSC]: endpoints[BSC], }, @@ -23,10 +18,6 @@ const graphs = getChainVolume({ factory: "yieldFieldsFactories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - }, }); const adapter: SimpleAdapter = { diff --git a/dexs/zkswap/index.ts b/dexs/zkswap/index.ts index 7ab3d543b8..a6a4f4e223 100644 --- a/dexs/zkswap/index.ts +++ b/dexs/zkswap/index.ts @@ -1,7 +1,6 @@ -import { time } from "console"; import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpoints = { [CHAIN.ERA]: "https://api.studio.thegraph.com/query/60365/zksync-zkswap/v0.0.5" @@ -13,16 +12,12 @@ const blacklistTokens = { ] } -const graph = getGraphDimensions({ +const graph = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "uniswapFactories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "dailyVolumeUSD", - }, blacklistTokens }); @@ -30,13 +25,7 @@ const adapters: SimpleAdapter = { version: 2, adapter: { [CHAIN.ERA]: { - fetch: async (options: FetchOptions) => { - const data = await graph(CHAIN.ERA)(options); - data.totalVolume = undefined; - return { - ...data - }; - }, + fetch: graph(CHAIN.ERA), start: 1700524800, } } diff --git a/dexs/zyberswap/index.ts b/dexs/zyberswap/index.ts index 25d228111d..6516f196bd 100644 --- a/dexs/zyberswap/index.ts +++ b/dexs/zyberswap/index.ts @@ -1,56 +1,41 @@ import * as sdk from "@defillama/sdk"; import { BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; +import { DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume, getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R'), }; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: DEFAULT_TOTAL_VOLUME_FACTORY, field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: DEFAULT_DAILY_VOLUME_FIELD, - dateField: "date" - }, }); const endpointsV3 = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('7ZP9MeeuXno2y9pWR5LzA96UtYuZYWTA4WYZDZR7ghbN'), }; -const graphsV3 = getChainVolume({ +const graphsV3 = getChainVolume2({ graphUrls: endpointsV3, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "algebraDayData", - field: "volumeUSD", - dateField: "date" - }, }); const endpointsStable = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('H7QEsa69B3bbXZVtmqGaRZVUV8PCUqsKfqXGRb69LHa6') }; -const graphsStable = getChainVolume({ +const graphsStable = getChainVolume2({ graphUrls: endpointsStable, totalVolume: { factory: "tradeVolumes", field: "volume", }, - dailyVolume: { - factory: "dailyVolume", - field: "volume", - dateField: "timestamp" - }, }); From eefff16d952fd35b758036f821dcf35b7c728543 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 11 Sep 2024 18:06:28 +0100 Subject: [PATCH 1420/1590] colony --- fees/ascent-v3.ts | 24 +------- fees/beamswap.ts | 2 +- fees/cleopatra-exchange.ts | 14 +---- fees/colony/airdrops.ts | 9 +-- fees/colony/dex.ts | 12 +--- fees/colony/earlystage.ts | 7 +-- fees/colony/masterChef.ts | 7 +-- fees/colony/staking.ts | 99 ++++++++++++++------------------- fees/colony/validatorProgram.ts | 9 +-- 9 files changed, 60 insertions(+), 123 deletions(-) diff --git a/fees/ascent-v3.ts b/fees/ascent-v3.ts index 1d26faf801..e180221f6a 100644 --- a/fees/ascent-v3.ts +++ b/fees/ascent-v3.ts @@ -1,18 +1,8 @@ import { Chain } from "@defillama/sdk/build/general"; - import { SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { - DEFAULT_DAILY_VOLUME_FACTORY, - DEFAULT_TOTAL_VOLUME_FIELD, -} from "../helpers/getUniSubgraphVolume"; - -import { getGraphDimensions } from "../helpers/getUniSubgraph"; - -interface IPoolData { - id: number; - feesUSD: string; -} +import { DEFAULT_TOTAL_VOLUME_FIELD } from "../helpers/getUniSubgraphVolume"; +import { getGraphDimensions2 } from "../helpers/getUniSubgraph"; type IURL = { [l: string | Chain]: string; @@ -23,20 +13,12 @@ const endpoints: IURL = { "https://eon-graph.horizenlabs.io/subgraphs/name/surfacing8671/v3AscentFull2", }; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: "pancakeDayData", - field: "volumeUSD", - }, - dailyFees: { - factory: "pancakeDayData", - field: "feesUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 32, diff --git a/fees/beamswap.ts b/fees/beamswap.ts index 47d0f43f17..5a9df0a7d5 100644 --- a/fees/beamswap.ts +++ b/fees/beamswap.ts @@ -34,7 +34,7 @@ const feeAdapter = getDexChainFees({ }); const adapter: Adapter = { - version: 2, + version: 1, adapter: feeAdapter }; diff --git a/fees/cleopatra-exchange.ts b/fees/cleopatra-exchange.ts index de80206631..d1cc4bde89 100644 --- a/fees/cleopatra-exchange.ts +++ b/fees/cleopatra-exchange.ts @@ -1,10 +1,8 @@ -import { SimpleAdapter, FetchResultFees, BaseAdapter } from "../adapters/types"; +import { SimpleAdapter } from "../adapters/types"; import { MANTLE, CHAIN } from "../helpers/chains"; - import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, } from "../helpers/getUniSubgraph"; type TStartTime = { @@ -19,18 +17,12 @@ const v2Endpoints = { "https://subgraph-api.mantle.xyz/subgraphs/name/cleoexchange/cl-subgraph", }; -const VOLUME_USD = "volumeUSD"; - -const v2Graphs = getGraphDimensions({ +const v2Graphs = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", HoldersRevenue: 72, diff --git a/fees/colony/airdrops.ts b/fees/colony/airdrops.ts index 38fad0a196..98c530d751 100644 --- a/fees/colony/airdrops.ts +++ b/fees/colony/airdrops.ts @@ -33,18 +33,15 @@ export async function airdrops( options: FetchOptions, stakingV3SubgraphEndpoint: string, ): Promise { - const { createBalances, startTimestamp } = options; + const { createBalances, startTimestamp, endTimestamp } = options; let dailyHoldersRevenue = createBalances() let totalHoldersRevenue = createBalances() - const day = Math.floor(startTimestamp / 86400) - const date = day * 86400 - try { const res: IGraphAirdropsResponse = await request(stakingV3SubgraphEndpoint, queryAirdrops, { - timestampFrom: date, - timestampTo: date + 86400 + timestampFrom: startTimestamp, + timestampTo: endTimestamp }); if (res.rewards.length > 0) { diff --git a/fees/colony/dex.ts b/fees/colony/dex.ts index f06d2dd472..4f2ad7c4ed 100644 --- a/fees/colony/dex.ts +++ b/fees/colony/dex.ts @@ -1,4 +1,4 @@ -import { getGraphDimensions } from "../../helpers/getUniSubgraph" +import { getGraphDimensions, getGraphDimensions2 } from "../../helpers/getUniSubgraph" import { FetchOptions } from "../../adapters/types"; import { Balances } from "@defillama/sdk"; import BigNumber from "bignumber.js"; @@ -32,7 +32,7 @@ export async function dexFees( const VOLUME_USD = "volumeUSD"; const FEES_USD = "feesUSD"; - const v2Graph = getGraphDimensions({ + const v2Graph = getGraphDimensions2({ graphUrls: { [options.chain]: dexSubgraphEndpoint, }, @@ -40,18 +40,10 @@ export async function dexFees( factory: "factories", field: VOLUME_USD, }, - dailyVolume: { - factory: "dayData", - field: VOLUME_USD, - }, totalFees: { factory: "factories", field: FEES_USD, }, - dailyFees: { - factory: "dayData", - field: FEES_USD, - } }); const results = await v2Graph(options.chain)(options) diff --git a/fees/colony/earlystage.ts b/fees/colony/earlystage.ts index 633aabbe1b..a918da627f 100644 --- a/fees/colony/earlystage.ts +++ b/fees/colony/earlystage.ts @@ -49,21 +49,18 @@ export async function earlyStageFees( options: FetchOptions, earlystageSubgraphEndpoint: string, ): Promise { - const { createBalances, startTimestamp } = options; + const { createBalances, startTimestamp, endTimestamp } = options; let dailyProtocolRevenue = createBalances() let totalProtocolRevenue = createBalances() let dailyHoldersRevenue = createBalances() let totalHoldersRevenue = createBalances() - const day = Math.floor(startTimestamp / 86400) - const date = day * 86400 - try { const res: IGraphEarlyStageFeesResponse = await request(earlystageSubgraphEndpoint, queryEarlyStageFees); if (res.projectDistributions && res.projectDistributions.length) { - const todayRes = res.projectDistributions.filter(x => x.timestamp >= date && x.timestamp < date + 86400) + const todayRes = res.projectDistributions.filter(x => x.timestamp >= startTimestamp && x.timestamp < endTimestamp) // --- Protocol Revenue dailyProtocolRevenue = todayRes.reduce((acc: Balances, x) => { diff --git a/fees/colony/masterChef.ts b/fees/colony/masterChef.ts index 76ea4bb1d6..2b40954584 100644 --- a/fees/colony/masterChef.ts +++ b/fees/colony/masterChef.ts @@ -84,14 +84,11 @@ export async function masterChef( masterChefSubgraphEndpoint: string, earlyStageSubgraphEndpoint: string, ): Promise { - const { createBalances, startTimestamp } = options; + const { createBalances, startTimestamp, endTimestamp } = options; let dailySupplySideRevenue = createBalances() let totalSupplySideRevenue = createBalances() - const day = Math.floor(startTimestamp / 86400) - const date = day * 86400 - try { const ceTokenRes: ICeTokensResponse = await request(earlyStageSubgraphEndpoint, ceTokensQuery); const priceMap = new Map() @@ -101,7 +98,7 @@ export async function masterChef( const rewardersRes: IGraphAirdropsResponse = await request(masterChefSubgraphEndpoint, rewardersQuery); for (const rewarder of rewardersRes.rewarders) { - if (rewarder.startTimestamp >= date && rewarder.startTimestamp < date + 86400) { + if (rewarder.startTimestamp >= startTimestamp && rewarder.startTimestamp < endTimestamp) { addTokenBalance( dailySupplySideRevenue, priceMap, diff --git a/fees/colony/staking.ts b/fees/colony/staking.ts index 8bbb8d587d..da9f04d81e 100644 --- a/fees/colony/staking.ts +++ b/fees/colony/staking.ts @@ -2,70 +2,53 @@ import { Balances } from "@defillama/sdk"; import { FetchOptions } from "../../adapters/types"; import { request, gql } from "graphql-request"; -export interface StakingFees { - dailyHoldersRevenue: Balances; - totalHoldersRevenue: Balances; -} - -interface ITotalStakeFees { - totalStakeFees: string; - totalUnstakeFees: string; -} - -interface IDailyStakeFees { - stakeFees: string; - unstakeFees: string; -} - -interface IGraphStakeResponse { - metrics: ITotalStakeFees[]; - dailyMetrics: IDailyStakeFees[]; -} - -const queryStakingFeesMetrics = gql -`query fees($date: Int!) { - metrics { - totalStakeFees - totalUnstakeFees - } - dailyMetrics(where: {date: $date}) { - unstakeFees - stakeFees +const queryStakingFeesMetrics = gql` + query fees($block: Int!) { + metrics(block: { number: $block }) { + totalStakeFees + totalUnstakeFees + } } -}`; +`; export async function stakingFees( options: FetchOptions, stakingSubgraphEndpoint: string, - ColonyGovernanceToken: string -): Promise { - const { createBalances, startTimestamp } = options; - - let dailyHoldersRevenue = createBalances() - let totalHoldersRevenue = createBalances() - - const day = Math.floor(startTimestamp / 86400) - const date = day * 86400 - - try { - const res: IGraphStakeResponse = await request(stakingSubgraphEndpoint, queryStakingFeesMetrics, { date }); - - if (res.dailyMetrics && res.dailyMetrics.length) { - dailyHoldersRevenue.add(ColonyGovernanceToken, res.dailyMetrics[0].stakeFees); - dailyHoldersRevenue.add(ColonyGovernanceToken, res.dailyMetrics[0].unstakeFees); - } - - if (res.metrics && res.metrics.length) { - totalHoldersRevenue.add(ColonyGovernanceToken, res.metrics[0].totalStakeFees); - totalHoldersRevenue.add(ColonyGovernanceToken, res.metrics[0].totalUnstakeFees); - } - - } catch (e) { - console.error(e); - } + ColonyGovernanceToken: string, +): Promise<{ + dailyHoldersRevenue: Balances; + totalHoldersRevenue: Balances; +}> { + const { createBalances, getStartBlock, getEndBlock } = options; + + const [startBlock, endBlock] = await Promise.all([ + getStartBlock(), + getEndBlock(), + ]); + let dailyHoldersRevenue = createBalances(); + let totalHoldersRevenue = createBalances(); + + const [beforeRes, afterRes] = await Promise.all([ + request(stakingSubgraphEndpoint, queryStakingFeesMetrics, { + block: startBlock, + }), + request(stakingSubgraphEndpoint, queryStakingFeesMetrics, { + block: endBlock, + }), + ]); + + const beforeFees: number = + Number(beforeRes.metrics[0].totalStakeFees) + + Number(beforeRes.metrics[0].totalUnstakeFees); + const afterFees: number = + Number(afterRes.metrics[0].totalStakeFees) + + Number(afterRes.metrics[0].totalUnstakeFees); + + dailyHoldersRevenue.add(ColonyGovernanceToken, afterFees - beforeFees); + totalHoldersRevenue.add(ColonyGovernanceToken, afterFees); return { dailyHoldersRevenue, - totalHoldersRevenue - } + totalHoldersRevenue, + }; } diff --git a/fees/colony/validatorProgram.ts b/fees/colony/validatorProgram.ts index 330904e2ab..9dcfea487b 100644 --- a/fees/colony/validatorProgram.ts +++ b/fees/colony/validatorProgram.ts @@ -40,20 +40,17 @@ export async function validatorProgramFees( options: FetchOptions, stakingV3SubgraphEndpoint: string, ): Promise { - const { createBalances, startTimestamp } = options; + const { createBalances, startTimestamp, endTimestamp } = options; let dailyProtocolRevenue = createBalances() let totalProtocolRevenue = createBalances() let dailyHoldersRevenue = createBalances() let totalHoldersRevenue = createBalances() - const day = Math.floor(startTimestamp / 86400) - const date = day * 86400 - try { const res: IGraphEarlyStageFeesResponse = await request(stakingV3SubgraphEndpoint, queryValidatorProgramFees, { - timestampFrom: date, - timestampTo: date + 86400 + timestampFrom: startTimestamp, + timestampTo: endTimestamp }); if (res.rewards[0] !== undefined) { From a73d87a421955c804f7539639ced9ab9c7810434 Mon Sep 17 00:00:00 2001 From: nature Date: Thu, 12 Sep 2024 01:37:10 +0800 Subject: [PATCH 1421/1590] feat:add dailyFees/dailyRevenue for ref finance --- fees/ref-finance/index.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 fees/ref-finance/index.ts diff --git a/fees/ref-finance/index.ts b/fees/ref-finance/index.ts new file mode 100644 index 0000000000..4b49938874 --- /dev/null +++ b/fees/ref-finance/index.ts @@ -0,0 +1,21 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { httpGet } from "../../utils/fetchURL"; +const api_fee = "https://api.ref.finance/get-total-fee" +const api_revenue = "https://api.ref.finance/get-total-revenue" +const adapter: SimpleAdapter = { + adapter: { + "near": { + start: 1725897600, + fetch: async () => { + const fee_result = await httpGet(api_fee); + const revenue_result = await httpGet(api_revenue); + return { + dailyFees: fee_result?.data?.total_fee || '0', + dailyRevenue: revenue_result?.data.total_revenue || '0', + } + } + } + } +}; + +export default adapter; From c6f30da3586d034ab6b6623825334e82ffd5f193 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 11 Sep 2024 18:38:34 +0100 Subject: [PATCH 1422/1590] beamswap refactor --- fees/beamswap.ts | 60 ++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/fees/beamswap.ts b/fees/beamswap.ts index 5a9df0a7d5..0c9e123e47 100644 --- a/fees/beamswap.ts +++ b/fees/beamswap.ts @@ -1,42 +1,46 @@ import * as sdk from "@defillama/sdk"; - import { Adapter, ChainEndpoints } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { getStartTimestamp } from "../helpers/getStartTimestamp"; -import { getDexChainFees } from "../helpers/getUniSubgraphFees"; -import { univ2Adapter } from "../helpers/getUniSubgraphVolume"; - -const TOTAL_FEES = 0.0030; -const PROTOCOL_FEES = 0.0013; +import { + DEFAULT_TOTAL_VOLUME_FACTORY, + DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, +} from "../helpers/getUniSubgraph"; const endpoints: ChainEndpoints = { - [CHAIN.MOONBEAN]: - sdk.graph.modifyEndpoint('9CwTvN5R8sztZSBZqbDZWcHZjM41RRiz63QmRMsJBn6X'), + [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint( + "9CwTvN5R8sztZSBZqbDZWcHZjM41RRiz63QmRMsJBn6X", + ), }; - -const volumeAdapter = univ2Adapter({ - [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint('9CwTvN5R8sztZSBZqbDZWcHZjM41RRiz63QmRMsJBn6X'), -}, {}); - -volumeAdapter.adapter.moonbeam.start = getStartTimestamp({ - endpoints, - chain: CHAIN.MOONBEAN, - dailyDataField: "uniswapDayDatas", - dateField: "date", - volumeField: "dailyVolumeUSD", -}) - -const feeAdapter = getDexChainFees({ - totalFees: TOTAL_FEES, - protocolFees: PROTOCOL_FEES, - volumeAdapter +const graphs = getGraphDimensions2({ + graphUrls: endpoints, + totalVolume: { + factory: DEFAULT_TOTAL_VOLUME_FACTORY, + field: DEFAULT_TOTAL_VOLUME_FIELD, + }, + feesPercent: { + type: "fees", + ProtocolRevenue: 0.0013, + UserFees: 0.0017, + }, }); const adapter: Adapter = { - version: 1, - adapter: feeAdapter + version: 2, + adapter: { + [CHAIN.MOONBEAM]: { + fetch: graphs(CHAIN.MOONBEAM), + start: getStartTimestamp({ + endpoints, + chain: CHAIN.MOONBEAN, + dailyDataField: "uniswapDayDatas", + dateField: "date", + volumeField: "dailyVolumeUSD", + }), + }, + }, }; - export default adapter; From d5bce1af08a7f549fdc5e7791ab5329cceb0ed95 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 11 Sep 2024 18:12:20 +0000 Subject: [PATCH 1423/1590] refactor fluid --- fees/fluid/index.ts | 414 +++++++++++++++++++------------------------- 1 file changed, 174 insertions(+), 240 deletions(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index e1d867369d..ec9e88c7b4 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -1,7 +1,7 @@ import * as sdk from "@defillama/sdk"; import { getBlock } from "@defillama/sdk/build/util/blocks"; import BigNumber from "bignumber.js"; -import { Adapter, FetchV2 } from "../../adapters/types"; +import { Adapter, FetchOptions, FetchV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const abis = { @@ -130,26 +130,24 @@ const liquidityResolver = async (api: sdk.ChainApi) => { params: undefined, }); }, - getExchangePricesAndConfig: async (token: string) => { + getExchangePricesAndConfig: async (tokens: string[]) => { if (!address) { return 0; } - return await api.call({ - target: address, + return await api.multiCall({ abi: abi.getExchangePricesAndConfig, - params: [token], + calls: tokens.map((token) => ({ target: address, params: [token] })), }); }, - getTotalAmounts: async (token: string) => { + getTotalAmounts: async (tokens: string[]) => { if (!address) { return 0; } - return await api.call({ - target: address, + return await api.multiCall({ abi: abi.getTotalAmounts, - params: [token], + calls: tokens.map((token) => ({ target: address, params: [token] })), }); }, }; @@ -199,15 +197,14 @@ const vaultResolver = async (api: sdk.ChainApi) => { params: undefined, }); }, - getVaultEntireData: async (vault: string) => { + getVaultEntireData: async (vaults: string[]) => { if (!address) { return null; } - return await api.call({ - target: address, + return await api.multiCall({ abi: abi.getVaultEntireData, - params: [vault], + calls: vaults.map((vault) => ({ target: address, params: [vault] })), }); }, }; @@ -246,20 +243,10 @@ const methodologyFluid = { Revenue: "Percentage of interest going to treasury", }; -const fetch: FetchV2 = async ({ api, fromTimestamp, toTimestamp }) => { +const fetch: FetchV2 = async (options: FetchOptions) => { return { - // totalFees: await getFeesFromTo( - // api, - // config[api.chain].dataStartTimestamp, - // toTimestamp - // ), - dailyFees: await getFeesFromTo(api, fromTimestamp, toTimestamp), - // totalRevenue: await getRevenueFromTo( - // api, - // config[api.chain].dataStartTimestamp, - // toTimestamp - // ), - dailyRevenue: await getRevenueFromTo(api, fromTimestamp, toTimestamp), + dailyFees: await getFeesFromTo(options), + dailyRevenue: await getRevenueFromTo(options), }; }; const adapter: Adapter = { @@ -292,50 +279,42 @@ const adapter: Adapter = { export default adapter; const getFeesFromTo = async ( - api: sdk.ChainApi, - fromTimestamp: number, - toTimestamp: number -): Promise => { - let fromBlock = (await getBlock(api.chain, fromTimestamp)).number; - const toBlock = (await getBlock(api.chain, toTimestamp)).number; + options: FetchOptions +): Promise => { - 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({ + const liquidityOperateLogs = (await options.getLogs({ target: config.liquidity, - fromBlock, - toBlock, - chain: api.chain, onlyArgs: true, - eventAbi: - "event LogOperate(address indexed user,address indexed token,int256 supplyAmount,int256 borrowAmount,address withdrawTo,address borrowTo,uint256 totalAmounts,uint256 exchangePricesAndConfig)", + eventAbi: "event LogOperate(address indexed user,address indexed token,int256 supplyAmount,int256 borrowAmount,address withdrawTo,address borrowTo,uint256 totalAmounts,uint256 exchangePricesAndConfig)", })) as any[]; - const fromApi = new sdk.ChainApi({ - chain: api.chain, - block: fromBlock, - }); - const toApi = new sdk.ChainApi({ - chain: api.chain, - block: toBlock, - }); + const dailyFees = options.createBalances(); + + const fromApi = options.fromApi; + const toApi = options.toApi; const vaults: string[] = await ( await vaultResolver(toApi) ).getAllVaultsAddresses(); - for await (const vault of vaults) { + const vaultEntiresDataFrom: any[] = (await ( + await vaultResolver(fromApi) + ).getVaultEntireData(vaults)) as any[]; + + const vaultEntiresDataTo: any[] = (await ( + await vaultResolver(toApi) + ).getVaultEntireData(vaults)) as any[]; + + const vaultBorrowTokenCall = (await toApi.multiCall({ + abi: abis.vault.constantsView, + calls: vaults, + })) as { borrowToken: string }[]; + + + for (const [index, vault] of vaults.entries()) { let borrowBalance = new BigNumber(0); let borrowToken = ""; try { - const { constantVariables, totalSupplyAndBorrow } = await ( - await vaultResolver(fromApi) - ).getVaultEntireData(vault); + const { constantVariables, totalSupplyAndBorrow } = vaultEntiresDataFrom[index]; borrowToken = constantVariables.borrowToken; borrowBalance = new BigNumber(totalSupplyAndBorrow.totalBorrowVault); @@ -344,61 +323,46 @@ const getFeesFromTo = async ( } if (!borrowToken) { - const { borrowToken: vaultBorrowToken } = await toApi.call({ - target: vault, - abi: abis.vault.constantsView, - chain: toApi.chain, - }); + const { borrowToken: vaultBorrowToken } = vaultBorrowTokenCall[index]; borrowToken = vaultBorrowToken; } // get block numbers where an update to vault borrow amounts happened + start block and end block - let vaultOperates = liquidityOperateLogs.filter( + const vaultOperates = liquidityOperateLogs.filter( (x) => x[0] == vault && // filter user must be vault x[1] == borrowToken // filter token must be vault borrow token (ignore supply / withdraw) ); - for await (const vaultOperate of vaultOperates) { + for (const vaultOperate of vaultOperates) { borrowBalance = borrowBalance.plus(new BigNumber(vaultOperate[3])); } - try { - const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = await ( - await vaultResolver(toApi) - ).getVaultEntireData(vault); - - toApi.addToken( - borrowToken, - new BigNumber(totalSupplyAndBorrowTo.totalBorrowVault).minus( - borrowBalance - ) - ); - } catch (ex) { - // when vault is deployed but not fully configured yet, getVaultEntireData() will revert at the used version of VaultResolver. - // totalBorrow is still 0 at that point. - } + const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = vaultEntiresDataTo[index]; + + dailyFees.add( + borrowToken, + new BigNumber(totalSupplyAndBorrowTo.totalBorrowVault).minus( + borrowBalance + ) + ); } - return await toApi.getUSDValue(); + return dailyFees; }; const getRevenueFromTo = async ( - api: sdk.ChainApi, - fromTimestamp: number, - toTimestamp: number + options: FetchOptions ): Promise => { - return ( - (await getLiquidityRevenueFromTo(api, fromTimestamp, toTimestamp)) + - (await getVaultsMagnifierRevenueFromTo(api, fromTimestamp, toTimestamp)) - ); + const LPRsevenueFromTo = await getLiquidityRevenueFromTo(options); + const vaultRevenueFromTo = await getVaultsMagnifierRevenueFromTo(options); + return LPRsevenueFromTo + vaultRevenueFromTo; }; const getLiquidityRevenueFromTo = async ( - api: sdk.ChainApi, - fromTimestamp: number, - toTimestamp: number + options: FetchOptions ) => { + const { fromTimestamp, toTimestamp, api } = options; const tokens: string[] = await (await liquidityResolver(api)).listedTokens(); const collectRevenueLogs: [string, BigNumber][] = (await sdk.getEventLogs({ @@ -411,22 +375,19 @@ const getLiquidityRevenueFromTo = async ( "event LogCollectRevenue(address indexed token, uint256 indexed amount)", })) as [string, BigNumber][]; - const balancesApi = new sdk.ChainApi({ - block: await api.getBlock(), - chain: api.chain, - }); + const revenueFrom: BigNumber[] = await getLiquidityUncollectedRevenueAt( + api, + fromTimestamp, + tokens + ); - for await (const token of tokens) { - const revenueFrom = await getLiquidityUncollectedRevenueAt( - api, - fromTimestamp, - token - ); - let revenueTo = await getLiquidityUncollectedRevenueAt( - api, - toTimestamp, - token - ); + const revenueTo:BigNumber[] = await getLiquidityUncollectedRevenueAt( + api, + toTimestamp, + tokens + ); + const dailyValues = options.createBalances(); + for await (const [index, token] of tokens.entries()) { // consider case where collect revenue has been executed in the time frame const logs = collectRevenueLogs.filter((x) => x[0] == token); @@ -436,24 +397,25 @@ const getLiquidityRevenueFromTo = async ( // add collected revenue in time frame to the to time point revenue. // to revenue = uncollected at that point + all collected revenue since from - revenueTo = revenueTo.plus(collectedRevenue); + const _revenueTo = BigNumber(revenueTo[index]) + _revenueTo.plus(collectedRevenue); // get uncollected revenue in from -> to timespan - balancesApi.add( + dailyValues.add( token, - revenueTo.gt(revenueFrom) - ? revenueTo.minus(revenueFrom) + _revenueTo.gt(revenueFrom[index]) + ? _revenueTo.minus(revenueFrom[index]) : new BigNumber(0) ); } - return await balancesApi.getUSDValue(); + return await dailyValues.getUSDValue(); }; const getLiquidityUncollectedRevenueAt = async ( api: sdk.ChainApi, timestamp: number, - token: string + tokens: string[] ) => { const timestampedApi = new sdk.ChainApi({ chain: api.chain, @@ -461,110 +423,89 @@ const getLiquidityUncollectedRevenueAt = async ( }); // check if token was listed at that timestamp at Liquidity, if not, revenue is 0 - if ( - !( - (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 ( + const totalAmounts: any[] = await ( await liquidityResolver(timestampedApi) - ).getTotalAmounts(token); + ).getTotalAmounts(tokens) as any[]; - const exchangePricesAndConfig = await ( + const exchangePricesAndConfig: any[] = await ( await liquidityResolver(timestampedApi) - ).getExchangePricesAndConfig(token); + ).getExchangePricesAndConfig(tokens) as any[]; + + const ee = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"; + const findIndex = tokens.findIndex((x) => x.toLowerCase() === ee); + const liquidityTokenBalance: string[] = await timestampedApi.multiCall({ + abi: "erc20:balanceOf", + calls: tokens + .filter(e => e.toLowerCase() !== ee) + .map((token) => ({ target: token, params: [config.liquidity] })), + }); - let liquidityTokenBalance: BigNumber | string; - if (token.toLowerCase() == "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") { - liquidityTokenBalance = ( + if (findIndex != -1) { + const eeBalance = ( 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], - }); + liquidityTokenBalance.splice(findIndex, 0, eeBalance); } - // 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 ( - await revenueResolver( - new sdk.ChainApi({ - chain: api.chain, - block: config[api.chain].revenueResolverExistAfterBlock, - }) - ) - )?.calcRevenueSimulatedTime( - totalAmounts, - exchangePricesAndConfig, - liquidityTokenBalance, - timestamp - ); - return new BigNumber(uncollectedRevenue); + // // pass data into revenue resolver, available at current api block, which calculates revenue at the + // // simulated timestamp based on storage slots data + const uncollectedRevenue: BigNumber[] = [] + for(const [index, _token] of tokens.entries()) { + try { + const _uncollectedRevenue = await ( + await revenueResolver(api) + ).calcRevenueSimulatedTime( + totalAmounts[index], + exchangePricesAndConfig[index], + liquidityTokenBalance[index], + timestamp + ); + uncollectedRevenue.push(new BigNumber(_uncollectedRevenue)); + } catch (ex) { + console.error(ex); + } + } + + return uncollectedRevenue; }; const getVaultsMagnifierRevenueFromTo = async ( - api: sdk.ChainApi, - fromTimestamp: number, - toTimestamp: number + options: FetchOptions ) => { + const { fromTimestamp, toTimestamp, api } = options; if (toTimestamp < config[api.chain].vaultResolverExistAfterTimestamp) { return 0; } - let fromBalancesApi = new sdk.ChainApi({ - block: await api.getBlock(), - chain: api.chain, - }); - - let toBalancesApi = new sdk.ChainApi({ - block: (await getBlock(api.chain, toTimestamp)).number, - chain: api.chain, - }); - const vaults: string[] = await ( - await vaultResolver(toBalancesApi) + await vaultResolver(api) ).getAllVaultsAddresses(); - for await (const vault of vaults) { - fromBalancesApi = await getVaultMagnifierUncollectedRevenueAt( - api, - fromTimestamp, - vault, - fromBalancesApi - ); + const fromBalancesApi = await getVaultMagnifierUncollectedRevenueAt( + api, + fromTimestamp, + vaults, + options + ); - toBalancesApi = await getVaultMagnifierUncollectedRevenueAt( - api, - toTimestamp, - vault, - toBalancesApi - ); + let toBalancesApi = await getVaultMagnifierUncollectedRevenueAt( + api, + toTimestamp, + vaults, + options + ); - // add collected revenue in time frame to the to time point revenue. - // to revenue = uncollected at that point + all collected revenue since from - toBalancesApi = await getVaultMagnifierCollectedRevenueFromTo( - api, - vault, - fromTimestamp, - toTimestamp, - toBalancesApi - ); - } + toBalancesApi = await getVaultMagnifierCollectedRevenueFromTo( + options, + vaults + ); const revenueFrom = await fromBalancesApi.getUSDValue(); const revenueTo = await toBalancesApi.getUSDValue(); @@ -573,65 +514,60 @@ const getVaultsMagnifierRevenueFromTo = async ( }; const getVaultMagnifierCollectedRevenueFromTo = async ( - api: sdk.ChainApi, - vault: string, - fromTimestamp: number, - toTimestamp: number, - balancesApi: sdk.ChainApi + options: FetchOptions, + vaults: string[], ) => { - const rebalanceEventLogs: { colAmt: BigNumber; debtAmt: BigNumber }[] = ( - (await sdk.getEventLogs({ - target: vault, - fromBlock: (await getBlock(api.chain, fromTimestamp)).number, - toBlock: (await getBlock(api.chain, toTimestamp)).number, - chain: api.chain, - onlyArgs: true, - eventAbi: - /// @notice emitted when a `rebalance()` has been executed, balancing out total supply / borrow between Vault - /// and Fluid Liquidity pools. - /// if `colAmt_` is negative then profit, meaning withdrawn from vault and sent to rebalancer address. - /// if `debtAmt_` is positive then profit, meaning borrow from vault and sent to rebalancer address. - "event LogRebalance(int colAmt_, int debtAmt_)", - })) as [BigInt, BigInt][] - ).map((x) => ({ - colAmt: new BigNumber(x[0].toString()), - debtAmt: new BigNumber(x[1].toString()), - })); + const values = options.createBalances(); + const rebalanceEventLogs = await options.getLogs({ + targets: vaults, + onlyArgs: true, + flatten: false, + eventAbi: + /// @notice emitted when a `rebalance()` has been executed, balancing out total supply / borrow between Vault + /// and Fluid Liquidity pools. + /// if `colAmt_` is negative then profit, meaning withdrawn from vault and sent to rebalancer address. + /// if `debtAmt_` is positive then profit, meaning borrow from vault and sent to rebalancer address. + "event LogRebalance(int colAmt_, int debtAmt_)", + }) if (rebalanceEventLogs.length == 0) { - return balancesApi; + return values } + // get collateral and borrow token of the vault - const { supplyToken, borrowToken } = await api.call({ - target: vault, + const contractViews: any[] = await options.api.multiCall({ abi: abis.vault.constantsView, - chain: api.chain, + calls: vaults.map((vault) => ({ target: vault })), }); - for await (const log of rebalanceEventLogs) { - if (log.colAmt.isNegative()) { - // add collateral token amount to balances - balancesApi.addToken(supplyToken, log.colAmt.absoluteValue()); - } - if (log.debtAmt.isPositive()) { - // add borrow token amount to balances - balancesApi.addToken(borrowToken, log.debtAmt); - } - } - - return balancesApi; + rebalanceEventLogs.forEach((logs, index) => { + logs.forEach((log: any) => { + if (log.colAmt.isNegative()) { + // add collateral token amount to balances + const colAmt = new BigNumber(log.colAmt_); + values.add(contractViews[index].supplyToken, colAmt.absoluteValue()); + } + if (log.debtAmt.isPositive()) { + // add borrow token amount to balances + const debtAmt = new BigNumber(log.debtAmt_); + values.add(contractViews[index].borrowToken, debtAmt); + } + }) + }); + return values; }; const getVaultMagnifierUncollectedRevenueAt = async ( api: sdk.ChainApi, timestamp: number, - vault: string, - balancesApi: sdk.ChainApi + vaults: string[], + options: FetchOptions ) => { + const values = options.createBalances(); 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; + return values; } const targetBlock = (await getBlock(api.chain, timestamp)).number; @@ -640,12 +576,12 @@ const getVaultMagnifierUncollectedRevenueAt = async ( chain: api.chain, block: targetBlock, }); + const vaultEntiresDataFrom: any[] = await ( + await vaultResolver(timestampedApi) + ).getVaultEntireData(vaults) as any[]; - try { - const { totalSupplyAndBorrow, constantVariables } = await ( - await vaultResolver(timestampedApi) - ).getVaultEntireData(vault); - + for (const [index, _vault] of vaults.entries()) { + const { totalSupplyAndBorrow , constantVariables} = vaultEntiresDataFrom[index]; const totalSupplyVault = new BigNumber( totalSupplyAndBorrow.totalSupplyVault ); @@ -668,12 +604,10 @@ const getVaultMagnifierUncollectedRevenueAt = async ( ? totalBorrowVault.minus(totalBorrowLiquidity) : new BigNumber(0); - balancesApi.add(constantVariables.supplyToken, supplyTokenProfit); - balancesApi.add(constantVariables.borrowToken, borrowTokenProfit); - } catch (ex) { - // when vault did not exist yet, getVaultEntireData() will revert. there is no uncollected revenue at that point. + values.add(constantVariables.supplyToken, supplyTokenProfit); + values.add(constantVariables.borrowToken, borrowTokenProfit); } - return balancesApi; + return values; }; // yarn test fees fluid From b11b6ca2477ae3ff3515bb394258d8e286b2cd09 Mon Sep 17 00:00:00 2001 From: tomshear32 Date: Wed, 11 Sep 2024 23:12:34 +0300 Subject: [PATCH 1424/1590] feat(Project): Add dHEDGE Fees --- fees/dhedge/index.ts | 141 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 fees/dhedge/index.ts diff --git a/fees/dhedge/index.ts b/fees/dhedge/index.ts new file mode 100644 index 0000000000..abe9c4d499 --- /dev/null +++ b/fees/dhedge/index.ts @@ -0,0 +1,141 @@ +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, GraphQLClient } from "graphql-request"; + +const PROVIDER_CONFIG = { + [CHAIN.OPTIMISM]: { + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-optimism/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { daoFee, tokenPriceAtLastFeeMint } + }`, + managerFeeMintedEventsField: "managerFeeMinteds", + }, + [CHAIN.POLYGON]: { + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-polygon/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { daoFee, tokenPriceAtLastFeeMint } + }`, + managerFeeMintedEventsField: "managerFeeMinteds", + }, + [CHAIN.ARBITRUM]: { + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-arbitrum/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { daoFee, tokenPriceAtLastFeeMint } + }`, + managerFeeMintedEventsField: "managerFeeMinteds", + }, + [CHAIN.BASE]: { + startTimestamp: 1712227101, + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-base-mainnet/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { daoFee, tokenPriceAtLastFeeMint } + }`, + managerFeeMintedEventsField: "managerFeeMinteds", + }, +}; + +const fetchHistoricalFees = async (chainId: CHAIN, query: string, volumeField: string, startTimestamp: number, endTimestamp: number) => { + const { endpoint } = PROVIDER_CONFIG[chainId]; + + let allData = []; + let skip = 0; + const batchSize = 1000; + + while (true) { + try { + const data = await new GraphQLClient(endpoint).request(query, { + startTimestamp: startTimestamp.toString(), + endTimestamp: endTimestamp.toString(), + first: batchSize, + skip + }); + + const entries = data[volumeField]; + if (entries.length === 0) break; + allData = allData.concat(entries); + skip += batchSize; + + if (entries.length < batchSize) break; + + await sleep(500); + } catch (e) { + throw new Error(`Error fetching data for chain ${chainId}: ${e.message}`); + } + } + return allData; +}; + +const calculateFees = (data: any): number => + data.reduce((acc: number, item: any) => { + const daoFee = Number(item.daoFee); + const tokenPrice = Number(item.tokenPriceAtLastFeeMint); + const daoFeeInEth = daoFee / 1e18; + const tokenPriceInEth = tokenPrice / 1e18; + const result = daoFeeInEth * tokenPriceInEth; + return acc + result; + }, 0); + +const fetch = (chain) => { + return () => { + return async ({ endTimestamp, startTimestamp }: FetchOptions) => { + const config = PROVIDER_CONFIG[chain]; + if (!config) throw new Error(`Unsupported chain: ${chain}`); + + const [ + dailyFees + ] = await Promise.all([ + fetchHistoricalFees(chain as CHAIN, config.feeMintedEventsQuery, config.managerFeeMintedEventsField, startTimestamp, endTimestamp) + ]); + + return { + dailyFees: String(calculateFees(dailyFees)), + dailyRevenue: calculateFees(dailyFees), + timestamp: endTimestamp, + }; + } + } +}; + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.OPTIMISM]: { + fetch: fetch(CHAIN.OPTIMISM)(), + start: 1638446653, + }, + [CHAIN.POLYGON]: { + fetch: fetch(CHAIN.POLYGON)(), + start: 1627560253, + }, + [CHAIN.ARBITRUM]: { + fetch: fetch(CHAIN.ARBITRUM)(), + start: 1679918653, + }, + [CHAIN.BASE]: { + fetch: fetch(CHAIN.BASE)(), + start: 1703073853, + }, + }, + version: 2 +} + +export default adapter; From 3a8138ce72c5f1a17ea03b96ecce12f84ac58e49 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 11 Sep 2024 22:58:39 +0100 Subject: [PATCH 1425/1590] protocols --- fees/dragonswap/index.ts | 21 ++------ fees/kyotoswap.ts | 10 +--- fees/nile-exchange/index.ts | 11 ++-- fees/nuri-exchange-v2/index.ts | 13 ++--- fees/pharaoh-exchange.ts | 11 ++-- fees/quickswap.ts | 66 +++++++++++------------- fees/ramses-exchange-v2/index.ts | 11 +--- fees/zyberswap.ts | 88 ++++++++++++++------------------ protocols/pancakeswap/index.ts | 30 ++--------- protocols/smbswap/index.ts | 25 ++------- protocols/uniswap/index.ts | 37 ++------------ 11 files changed, 98 insertions(+), 225 deletions(-) diff --git a/fees/dragonswap/index.ts b/fees/dragonswap/index.ts index 9648b3661c..e1ecef611e 100644 --- a/fees/dragonswap/index.ts +++ b/fees/dragonswap/index.ts @@ -1,7 +1,7 @@ import { Chain } from "@defillama/sdk/build/types"; -import { BaseAdapter, BreakdownAdapter, FetchOptions, IJSON } from "../../adapters/types"; +import { BaseAdapter, BreakdownAdapter, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpoints = { [CHAIN.KLAYTN]: "https://graph.dgswap.io/subgraphs/name/dragonswap/exchange-v2", @@ -11,8 +11,6 @@ const v3Endpoint = { [CHAIN.KLAYTN]: "https://graph.dgswap.io/subgraphs/name/dragonswap/exchange-v3", }; -const VOLUME_USD = "volumeUSD"; - const startTimes = { [CHAIN.KLAYTN]: 1707297572, } as IJSON; @@ -30,7 +28,7 @@ const methodology = { Fees: "All fees comes from the user." } -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, graphRequestHeaders: { [CHAIN.KLAYTN]: { @@ -40,9 +38,6 @@ const graphs = getGraphDimensions({ totalVolume: { factory: "pancakeFactories" }, - dailyVolume: { - factory: "pancakeDayData" - }, feesPercent: { type: "volume", Fees: 0.3, @@ -54,22 +49,14 @@ const graphs = getGraphDimensions({ } }); -const v3Graph = getGraphDimensions({ +const v3Graph = getGraphDimensions2({ graphUrls: v3Endpoint, totalVolume: { factory: "factories", }, - dailyVolume: { - factory: "pancakeDayData", - field: VOLUME_USD - }, totalFees: { factory: "factories", }, - dailyFees: { - factory: "pancakeDayData", - field: "feesUSD" - }, }); const adapter: BreakdownAdapter = { diff --git a/fees/kyotoswap.ts b/fees/kyotoswap.ts index 15ef9b3f38..2999b680ab 100644 --- a/fees/kyotoswap.ts +++ b/fees/kyotoswap.ts @@ -1,14 +1,11 @@ import * as sdk from "@defillama/sdk"; -import { getDexChainFees } from "../helpers/getUniSubgraphFees"; -import volumeAdapter from "../dexs/spookyswap"; import { Adapter, BaseAdapter, - BreakdownAdapter, IJSON, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getGraphDimensions } from "../helpers/getUniSubgraph"; +import { getGraphDimensions, getGraphDimensions2 } from "../helpers/getUniSubgraph"; import { Chain } from "@defillama/sdk/build/general"; const endpoints = { @@ -16,14 +13,11 @@ const endpoints = { sdk.graph.modifyEndpoint('B1VWKexyptT1ixDdHsxj3EJnAxvuje7ANT39rnfq9rRG'), }; -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "pancakeFactories", }, - dailyVolume: { - factory: "pancakeDayData", - }, feesPercent: { type: "volume", Fees: 0.25, diff --git a/fees/nile-exchange/index.ts b/fees/nile-exchange/index.ts index ea38c99ce3..84533903f2 100644 --- a/fees/nile-exchange/index.ts +++ b/fees/nile-exchange/index.ts @@ -1,10 +1,11 @@ import { Adapter, FetchOptions } from "../../adapters/types"; -import { ARBITRUM, CHAIN } from "../../helpers/chains"; +import { CHAIN } from "../../helpers/chains"; import { fees_bribes } from './bribes'; import { getGraphDimensions, DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, } from "../../helpers/getUniSubgraph" type TStartTime = { @@ -31,18 +32,12 @@ const v2Endpoints = { [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/66247/nile-cl/version/latest/", }; -const VOLUME_USD = "volumeUSD"; - -const v2Graphs = getGraphDimensions({ +const v2Graphs = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", HoldersRevenue: 72, diff --git a/fees/nuri-exchange-v2/index.ts b/fees/nuri-exchange-v2/index.ts index ace7747bcb..798d67f7cd 100644 --- a/fees/nuri-exchange-v2/index.ts +++ b/fees/nuri-exchange-v2/index.ts @@ -1,10 +1,9 @@ import { Adapter, FetchOptions } from "../../adapters/types"; -import { ARBITRUM, CHAIN } from "../../helpers/chains"; +import { CHAIN } from "../../helpers/chains"; import { fees_bribes } from './bribes'; import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, } from "../../helpers/getUniSubgraph" type TStartTime = { @@ -31,18 +30,12 @@ const v2Endpoints = { [CHAIN.SCROLL]: "https://api.studio.thegraph.com/query/66247/nuri-cl/version/latest", }; -const VOLUME_USD = "volumeUSD"; - -const v2Graphs = getGraphDimensions({ +const v2Graphs = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", HoldersRevenue: 72, diff --git a/fees/pharaoh-exchange.ts b/fees/pharaoh-exchange.ts index e8c81e0de9..f3b464ec50 100644 --- a/fees/pharaoh-exchange.ts +++ b/fees/pharaoh-exchange.ts @@ -1,11 +1,10 @@ import * as sdk from "@defillama/sdk"; -import { SimpleAdapter, FetchResultFees, BaseAdapter } from "../adapters/types"; +import { SimpleAdapter } from "../adapters/types"; import { AVAX, CHAIN } from "../helpers/chains"; - import { - getGraphDimensions, DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, } from "../helpers/getUniSubgraph"; type TStartTime = { @@ -22,16 +21,12 @@ const v2Endpoints = { const VOLUME_USD = "volumeUSD"; -const v2Graphs = getGraphDimensions({ +const v2Graphs = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", HoldersRevenue: 72, diff --git a/fees/quickswap.ts b/fees/quickswap.ts index 006bb0dfd5..ee1dfa3122 100644 --- a/fees/quickswap.ts +++ b/fees/quickswap.ts @@ -2,16 +2,14 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { BreakdownAdapter, BaseAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import customBackfill from "../helpers/customBackfill"; - -import { - getGraphDimensions -} from "../helpers/getUniSubgraph" +import { getGraphDimensions2 } from "../helpers/getUniSubgraph"; const v2Endpoints = { - [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd'), -} -const v2Graph = getGraphDimensions({ + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint( + "FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd", + ), +}; +const v2Graph = getGraphDimensions2({ graphUrls: v2Endpoints, feesPercent: { type: "volume", @@ -20,41 +18,35 @@ const v2Graph = getGraphDimensions({ SupplySideRevenue: 0.3, HoldersRevenue: 0, Revenue: 0, - Fees: 0.3 - } + Fees: 0.3, + }, }); const v3Endpoints = { - [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint( + "CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7", + ), // [CHAIN.DOGECHAIN]: "https://graph-node.dogechain.dog/subgraphs/name/quickswap/dogechain-info", - [CHAIN.POLYGON_ZKEVM]:"https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7" -} + [CHAIN.POLYGON_ZKEVM]: + "https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7", +}; type TStartTime = { [s: string | Chain]: number; -} +}; const startTimeV3: TStartTime = { [CHAIN.POLYGON]: 1662425243, [CHAIN.POLYGON_ZKEVM]: 1679875200, [CHAIN.DOGECHAIN]: 1660694400, -} +}; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "algebraDayData", - field: "volumeUSD", - dateField: "date" - }, - dailyFees: { - factory: "algebraDayData", - field: "feesUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 0, @@ -62,8 +54,8 @@ const v3Graphs = getGraphDimensions({ Fees: 0, UserFees: 100, // User fees are 100% of collected fees SupplySideRevenue: 100, // 100% of fees are going to LPs - Revenue: 0 // Revenue is 100% of collected fees - } + Revenue: 0, // Revenue is 100% of collected fees + }, }); const methodology = { @@ -72,8 +64,8 @@ const methodology = { Revenue: "Protocol have no revenue", ProtocolRevenue: "Protocol have no revenue.", SupplySideRevenue: "All user fees are distributed among LPs.", - HoldersRevenue: "Holders have no revenue." -} + HoldersRevenue: "Holders have no revenue.", +}; const adapter: BreakdownAdapter = { version: 2, @@ -83,7 +75,7 @@ const adapter: BreakdownAdapter = { fetch: v2Graph(CHAIN.POLYGON), start: 1602118043, meta: { - methodology + methodology, }, }, }, @@ -92,12 +84,12 @@ const adapter: BreakdownAdapter = { fetch: v3Graphs(chain as Chain), start: startTimeV3[chain], meta: { - methodology - } - } - return acc - }, {} as BaseAdapter) - } -} + methodology, + }, + }; + return acc; + }, {} as BaseAdapter), + }, +}; export default adapter; diff --git a/fees/ramses-exchange-v2/index.ts b/fees/ramses-exchange-v2/index.ts index 470ceb83be..d4d300ff43 100644 --- a/fees/ramses-exchange-v2/index.ts +++ b/fees/ramses-exchange-v2/index.ts @@ -3,9 +3,8 @@ 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, + getGraphDimensions2, } from "../../helpers/getUniSubgraph" type TStartTime = { @@ -32,18 +31,12 @@ const v2Endpoints = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea'), }; -const VOLUME_USD = "volumeUSD"; - -const v2Graphs = getGraphDimensions({ +const v2Graphs = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", HoldersRevenue: 72, diff --git a/fees/zyberswap.ts b/fees/zyberswap.ts index f693284f26..4c2213ec4e 100644 --- a/fees/zyberswap.ts +++ b/fees/zyberswap.ts @@ -2,16 +2,14 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { BreakdownAdapter, BaseAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import customBackfill from "../helpers/customBackfill"; - -import { - getGraphDimensions -} from "../helpers/getUniSubgraph" +import { getGraphDimensions2 } from "../helpers/getUniSubgraph"; const v2Endpoints = { - [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R'), -} -const v2Graph = getGraphDimensions({ + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint( + "3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R", + ), +}; +const v2Graph = getGraphDimensions2({ graphUrls: v2Endpoints, feesPercent: { type: "volume", @@ -20,28 +18,21 @@ const v2Graph = getGraphDimensions({ SupplySideRevenue: 0.15, HoldersRevenue: 0, Revenue: 0.1, - Fees: 0.25 - } + Fees: 0.25, + }, }); const v3Endpoints = { - [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('7ZP9MeeuXno2y9pWR5LzA96UtYuZYWTA4WYZDZR7ghbN'), -} -const v3Graphs = getGraphDimensions({ + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint( + "7ZP9MeeuXno2y9pWR5LzA96UtYuZYWTA4WYZDZR7ghbN", + ), +}; +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "algebraDayData", - field: "volumeUSD", - dateField: "date" - }, - dailyFees: { - factory: "algebraDayData", - field: "feesUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 10, @@ -49,25 +40,22 @@ const v3Graphs = getGraphDimensions({ Fees: 10, UserFees: 90, // User fees are 90% of collected fees SupplySideRevenue: 90, // 90% of fees are going to LPs - Revenue: 10 // Revenue is 10% of collected fees - } + Revenue: 10, // Revenue is 10% of collected fees + }, }); const endpointsStable = { - [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('H7QEsa69B3bbXZVtmqGaRZVUV8PCUqsKfqXGRb69LHa6') + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint( + "H7QEsa69B3bbXZVtmqGaRZVUV8PCUqsKfqXGRb69LHa6", + ), }; -const stableGraph = getGraphDimensions({ +const stableGraph = getGraphDimensions2({ graphUrls: endpointsStable, totalVolume: { factory: "tradeVolumes", field: "volume", }, - dailyVolume: { - factory: "dailyVolume", - field: "volume", - dateField: "timestamp" - }, feesPercent: { type: "volume", UserFees: 0.04, @@ -75,18 +63,19 @@ const stableGraph = getGraphDimensions({ SupplySideRevenue: 0.02, HoldersRevenue: 0, Revenue: 0.02, - Fees: 0.04 - } + Fees: 0.04, + }, }); const methodology = { UserFees: "User pays 0.25% fees on each swap.", Fees: "A 0.25% of each swap is collected as trading fees", - Revenue: "Protocol receives 0.1% on each swap. A part is used to buyback and burn and a part is used to buy WETH and distribute to stakers.", + Revenue: + "Protocol receives 0.1% on each swap. A part is used to buyback and burn and a part is used to buy WETH and distribute to stakers.", ProtocolRevenue: "Protocol receives 0.1% on each swap.", SupplySideRevenue: "All user fees are distributed among LPs.", - HoldersRevenue: "Stakers receive WETH a part of protocol revenue." -} + HoldersRevenue: "Stakers receive WETH a part of protocol revenue.", +}; const methodologyV3 = { UserFees: "User pays dynamic swap fee.", @@ -94,9 +83,9 @@ const methodologyV3 = { Revenue: "Protocol receives 10% of the dynamic swap fee", ProtocolRevenue: "Protocol receives 10% of the dynamic swap fee", SupplySideRevenue: "90% of the dynamic swap fee is distributed to LPs", - HoldersRevenue: "A portion of the protocol fees is used to purchase WETH and distribute to stakers." -} - + HoldersRevenue: + "A portion of the protocol fees is used to purchase WETH and distribute to stakers.", +}; const methodologyStable = { UserFees: "User pays a 0.04% fee on each swap.", @@ -104,8 +93,9 @@ const methodologyStable = { Revenue: "Protocol receives 0.02% of the swap fee", ProtocolRevenue: "Protocol receives 0.02% of the swap fee", SupplySideRevenue: "0.02% of the swap fee is distributed to LPs", - HoldersRevenue: "A portion of the protocol fees is used to purchase WETH and distribute to stakers." -} + HoldersRevenue: + "A portion of the protocol fees is used to purchase WETH and distribute to stakers.", +}; const adapter: BreakdownAdapter = { version: 2, @@ -115,7 +105,7 @@ const adapter: BreakdownAdapter = { fetch: v2Graph(CHAIN.ARBITRUM), start: 1674432000, meta: { - methodology + methodology, }, }, }, @@ -124,21 +114,21 @@ const adapter: BreakdownAdapter = { fetch: v3Graphs(chain as Chain), start: 1676887200, meta: { - methodology: methodologyV3 - } - } - return acc + methodology: methodologyV3, + }, + }; + return acc; }, {} as BaseAdapter), stable: { [CHAIN.ARBITRUM]: { fetch: stableGraph(CHAIN.ARBITRUM), start: 1676113200, meta: { - methodology: methodologyStable + methodology: methodologyStable, }, }, }, - } -} + }, +}; export default adapter; diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index df3848e389..750fbb0532 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -1,8 +1,7 @@ import { BaseAdapter, BreakdownAdapter, DISABLED_ADAPTER_KEY, FetchOptions, FetchV2, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; - -import { getGraphDimensions } from "../../helpers/getUniSubgraph" +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph" import * as sdk from "@defillama/sdk"; import { httpGet } from "../../utils/fetchURL"; import { getEnv } from "../../helpers/env"; @@ -34,9 +33,7 @@ const v3Endpoint = { [CHAIN.OP_BNB]: `${getEnv('PANCAKESWAP_OPBNB_SUBGRAPH')}/subgraphs/name/pancakeswap/exchange-v3` } -const VOLUME_USD = "volumeUSD"; - -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, graphRequestHeaders: { [CHAIN.BSC]: { @@ -46,9 +43,6 @@ const graphs = getGraphDimensions({ totalVolume: { factory: "pancakeFactories" }, - dailyVolume: { - factory: "pancakeDayData" - }, feesPercent: { type: "volume", Fees: 0.25, @@ -60,14 +54,11 @@ const graphs = getGraphDimensions({ } }); -const graphsStableSwap = getGraphDimensions({ +const graphsStableSwap = getGraphDimensions2({ graphUrls: stablesSwapEndpoints, totalVolume: { factory: "factories" }, - dailyVolume: { - factory: "pancakeDayData" - }, feesPercent: { type: "volume", Fees: 0.25, // 0.25% volume @@ -79,23 +70,14 @@ const graphsStableSwap = getGraphDimensions({ } }); -const v3Graph = getGraphDimensions({ +const v3Graph = getGraphDimensions2({ graphUrls: v3Endpoint, totalVolume: { factory: "factories", - - }, - dailyVolume: { - factory: "pancakeDayData", - field: VOLUME_USD }, totalFees: { factory: "factories", }, - dailyFees: { - factory: "pancakeDayData", - field: "feesUSD" - }, }); const startTimes = { @@ -162,9 +144,7 @@ const getResources = async (account: string): Promise => { return data } -const fetchVolume: FetchV2 = async ({ endTimestamp: timestamp, createBalances }) => { - const fromTimestamp = timestamp - 86400; - const toTimestamp = timestamp; +const fetchVolume: FetchV2 = async ({ fromTimestamp, toTimestamp, createBalances }) => { const account_resource: any[] = (await getResources(account)) const pools = account_resource.filter(e => e.type?.includes('swap::PairEventHolder')) .map((e: any) => { diff --git a/protocols/smbswap/index.ts b/protocols/smbswap/index.ts index 770fbf195b..5c49110140 100644 --- a/protocols/smbswap/index.ts +++ b/protocols/smbswap/index.ts @@ -3,8 +3,7 @@ import { Chain } from "@defillama/sdk/build/general"; import { BaseAdapter, BreakdownAdapter, DISABLED_ADAPTER_KEY, FetchOptions, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; - -import { getGraphDimensions } from "../../helpers/getUniSubgraph" +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph" const endpoints = { [CHAIN.BSC]: sdk.graph.modifyEndpoint('9BtGwsWynjj21VyrAtNfeKG5kMhcZ7Z12T53wo7PBTLj') @@ -18,14 +17,13 @@ const v3Endpoint = { [CHAIN.BSC]: sdk.graph.modifyEndpoint('8XiGZs3G3dDL3YQJx7CsMGXdn3CUBBC9CVpCe1xrsSA7') } -const VOLUME_USD = "volumeUSD"; const blackListedPairs = { [CHAIN.BSC]: [ "0x609f59c97ddf58475c7d3f3fc829c3ff9fc4f76f" ] } -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, graphRequestHeaders: { [CHAIN.BSC]: { @@ -35,9 +33,6 @@ const graphs = getGraphDimensions({ totalVolume: { factory: "smbfactories" }, - dailyVolume: { - factory: "smbdayData" - }, feesPercent: { type: "volume", Fees: 0.25, @@ -50,14 +45,11 @@ const graphs = getGraphDimensions({ blacklistTokens: blackListedPairs }); -const graphsStableSwap = getGraphDimensions({ +const graphsStableSwap = getGraphDimensions2({ graphUrls: stablesSwapEndpoints, totalVolume: { factory: "factories" }, - dailyVolume: { - factory: "smbdayData" - }, feesPercent: { type: "volume", Fees: 0.25, // 0.25% volume @@ -69,23 +61,14 @@ const graphsStableSwap = getGraphDimensions({ } }); -const v3Graph = getGraphDimensions({ +const v3Graph = getGraphDimensions2({ graphUrls: v3Endpoint, totalVolume: { factory: "factories", - - }, - dailyVolume: { - factory: "smbdayData", - field: VOLUME_USD }, totalFees:{ factory: "factories", }, - dailyFees: { - factory: "smbdayData", - field: "feesUSD" - }, }); const startTimes = { diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 10117aef27..810f010fb0 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -4,13 +4,7 @@ import { BreakdownAdapter, FetchResultGeneric, BaseAdapter, FetchOptions } from import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import * as sdk from "@defillama/sdk"; -import {getUniV2LogAdapter} from "../../helpers/uniswap" - -import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, - DEFAULT_TOTAL_VOLUME_FIELD, -} from "../../helpers/getUniSubgraph" +import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph" import request, { gql } from 'graphql-request'; import { httpPost } from '../../utils/fetchURL'; @@ -79,18 +73,11 @@ const VOLUME_USD = "volumeUSD"; // fees results are in eth, needs to be converted to a balances objects const ETH_ADDRESS = "ethereum:" + ADDRESSES.null; -const v1Graph = getGraphDimensions({ +const v1Graph = getGraphDimensions2({ graphUrls: v1Endpoints, totalVolume: { factory: "uniswaps", }, - dailyVolume: { - field: "dailyVolumeInUSD", - }, - dailyFees: { - factory: "exchangeHistoricalData", - field: "feeInEth" - }, feesPercent: { type: "fees", UserFees: 100, @@ -102,7 +89,7 @@ const v1Graph = getGraphDimensions({ } }); -const v2Graph = getGraphDimensions({ +const v2Graph = getGraphDimensions2({ graphUrls: v2Endpoints, feesPercent: { type: "volume", @@ -116,16 +103,12 @@ const v2Graph = getGraphDimensions({ blacklistTokens: blacklisted }); -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", ProtocolRevenue: 0, @@ -158,18 +141,6 @@ const startTimeV3:TStartTime = { [CHAIN.ERA]: 1693440000 } -const v2Deployments = { - // ethereum: '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f', - optimism: '0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf', - arbitrum: '0xf1D7CC64Fb4452F05c498126312eBE29f30Fbcf9', - avax: '0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C', - base: '0x8909dc15e40173ff4699343b6eb8132c65e18ec6', - bsc: '0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6', - polygon: '0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C', - //celo: '0x79a530c8e2fA8748B7B40dd3629C0520c2cCf03f', - zora: '0x0F797dC7efaEA995bB916f268D919d0a1950eE3C' -} - const chainv2mapping: any = { [CHAIN.ARBITRUM]: "ARBITRUM", [CHAIN.ETHEREUM]: "ETHEREUM", From 70d835a0142fbcbed18e474c7f1ccc09d387cc6e Mon Sep 17 00:00:00 2001 From: ideapacito Date: Thu, 12 Sep 2024 15:02:53 +0700 Subject: [PATCH 1426/1590] update trade volume api FWX --- dexs/fwx/index.ts | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/dexs/fwx/index.ts b/dexs/fwx/index.ts index dddf4d0c78..427cf60b4b 100644 --- a/dexs/fwx/index.ts +++ b/dexs/fwx/index.ts @@ -33,13 +33,26 @@ const fetch = (chain: Chain) => { const formattedDate = date.toISOString().replace(/\.(\d{3})Z$/, ".$1Z"); // * call api for daily volume - const tradingVolumeRes = await httpPost(endpoints.tradingVolume, { + const tradingVolumePerpRes = await httpPost(endpoints.tradingVolume, { from_date: formattedDate, to_date: formattedDate, chain_id: CHAIN_ID[chain], + is_perp: true, }); - const tradingVolume = tradingVolumeRes as IRes; - const dailyVolumeData = tradingVolume?.data.find( + const tradingVolumePerp = tradingVolumePerpRes as IRes; + const dailyPerpVolumeData = tradingVolumePerp?.data.find( + (x: IDailyData) => + new Date(x.date).getTime() == new Date(formattedDate).getTime() + ); + + const tradingVolumeAphRes = await httpPost(endpoints.tradingVolume, { + from_date: formattedDate, + to_date: formattedDate, + chain_id: CHAIN_ID[chain], + is_perp: false, + }); + const tradingVolumeAph = tradingVolumeAphRes as IRes; + const dailyAphVolumeData = tradingVolumeAph?.data.find( (x: IDailyData) => new Date(x.date).getTime() == new Date(formattedDate).getTime() ); @@ -57,9 +70,12 @@ const fetch = (chain: Chain) => { ); return { - dailyVolume: convertStringNumber(dailyVolumeData?.total || "0"), + dailyVolume: convertStringNumber( + BigInt(dailyPerpVolumeData?.total || "0") + + BigInt(dailyAphVolumeData?.total || "0") + ), dailyOpenInterest: convertStringNumber( - dailyOpenInterestData?.total || "0" + BigInt(dailyOpenInterestData?.total || "0") ), timestamp: timestamp, }; @@ -82,8 +98,7 @@ const adapter: SimpleAdapter = { export default adapter; // devide by 1e18 -function convertStringNumber(inputString: string) { - let number = BigInt(inputString); +function convertStringNumber(number: bigint) { const divisor = BigInt(1e18); let integerPart = number / divisor; let fractionalPart = number % divisor; From 1f906eedfd4bd19878f0332f7d22ea9d62a5daa8 Mon Sep 17 00:00:00 2001 From: Tyler Tsai Date: Thu, 12 Sep 2024 16:47:21 +0800 Subject: [PATCH 1427/1590] feat: update lista fees --- fees/lista-lisusd/index.ts | 71 +++++++++++++++++++++++++++++++++---- fees/lista-slisbnb/index.ts | 4 +++ 2 files changed, 69 insertions(+), 6 deletions(-) diff --git a/fees/lista-lisusd/index.ts b/fees/lista-lisusd/index.ts index 047c1d45f5..1dfa647577 100644 --- a/fees/lista-lisusd/index.ts +++ b/fees/lista-lisusd/index.ts @@ -9,6 +9,10 @@ const treasury = "0x8d388136d578dCD791D081c6042284CED6d9B0c6"; * Fetches data from Lista DAO * @doc https://listaorg.notion.site/Profit-cfd754931df449eaa9a207e38d3e0a54 * @test npx ts-node --transpile-only cli/testAdapter.ts fees lista-lisusd + * + * @treasury + * https://bscscan.com/address/0x8d388136d578dcd791d081c6042284ced6d9b0c6#tokentxns + * https://bscscan.com/address/0x34b504a5cf0ff41f8a480580533b6dda687fa3da#tokentxns */ const HelioETHProvider = "0x0326c157bfF399e25dd684613aEF26DBb40D3BA4"; @@ -34,6 +38,7 @@ const fetch = async (options: FetchOptions) => { entireLog: true, }); + // enable later // const logs_fees_claim = await options.getLogs({ // target: MasterVault, // eventAbi: "event FeeClaimed(address receiver, uint256 amount)", @@ -44,7 +49,8 @@ const fetch = async (options: FetchOptions) => { eventAbi: "event Harvested(address to, uint256 amount)", }); - const logs_transfer = await options.getLogs({ + // CeETHVault + const eth_transfer1 = await options.getLogs({ target: eth, topics: [ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", @@ -53,7 +59,36 @@ const fetch = async (options: FetchOptions) => { ], }); - const logs_exit = await options.getLogs({ + const eth_transfer2 = await options.getLogs({ + target: eth, + topics: [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000a230805c28121cc97b348f8209c79bebea3839c0", + "0x00000000000000000000000034b504a5cf0ff41f8a480580533b6dda687fa3da", + ], + }); + + // flash loan + const lisusd_transfer1 = await options.getLogs({ + target: lisUSD, + topics: [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000a230805c28121cc97b348f8209c79bebea3839c0", + "0x0000000000000000000000008d388136d578dcd791d081c6042284ced6d9b0c6", + ], + }); + + const lisusd_transfer2 = await options.getLogs({ + target: lisUSD, + topics: [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000a230805c28121cc97b348f8209c79bebea3839c0", + "0x00000000000000000000000034b504a5cf0ff41f8a480580533b6dda687fa3da", + ], + }); + + // early exit + const logs_exit1 = await options.getLogs({ target: HayJoin, topics: [ "0x22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b299631", @@ -61,7 +96,16 @@ const fetch = async (options: FetchOptions) => { ], }); - const early_claim_penalty = await options.getLogs({ + const logs_exit2 = await options.getLogs({ + target: HayJoin, + topics: [ + "0x22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b299631", + "0x00000000000000000000000034b504a5cf0ff41f8a480580533b6dda687fa3da", + ], + }); + + // claim penalty + const early_claim_penalty1 = await options.getLogs({ target: lista, topics: [ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", @@ -70,7 +114,16 @@ const fetch = async (options: FetchOptions) => { ], }); - early_claim_penalty.forEach((log) => { + const early_claim_penalty2 = await options.getLogs({ + target: lista, + topics: [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000d0c380d31db43cd291e2bbe2da2fd6dc877b87b3", + "0x00000000000000000000000034b504a5cf0ff41f8a480580533b6dda687fa3da", + ], + }); + + [...early_claim_penalty1, ...early_claim_penalty2].forEach((log) => { const amount = Number(log.data); dailyFees.add(lista, amount); }); @@ -80,6 +133,7 @@ const fetch = async (options: FetchOptions) => { dailyFees.add(eth, amount); }); + // enable later // logs_fees_claim.forEach((log) => { // const amount = log.amount; // dailyFees.add(bnb, amount); @@ -90,12 +144,17 @@ const fetch = async (options: FetchOptions) => { dailyFees.add(slisBNB, amount); }); - logs_transfer.forEach((log) => { + [...eth_transfer1, ...eth_transfer2].forEach((log) => { const amount = Number(log.data); dailyFees.add(eth, amount); }); - logs_exit.forEach((log) => { + [...lisusd_transfer1, ...lisusd_transfer2].forEach((log) => { + const amount = Number(log.data); + dailyFees.add(lisUSD, amount); + }); + + [...logs_exit1, ...logs_exit2].forEach((log) => { dailyFees.add(lisUSD, Number(log.data)); }); diff --git a/fees/lista-slisbnb/index.ts b/fees/lista-slisbnb/index.ts index bec91e6669..508b0e6de6 100644 --- a/fees/lista-slisbnb/index.ts +++ b/fees/lista-slisbnb/index.ts @@ -7,6 +7,10 @@ const treasury = "0x8d388136d578dCD791D081c6042284CED6d9B0c6"; * Fetches data from Lista DAO * @doc https://listaorg.notion.site/Profit-cfd754931df449eaa9a207e38d3e0a54 * @test npx ts-node --transpile-only cli/testAdapter.ts fees lista-slisbnb + * + * @treasury + * https://bscscan.com/address/0x8d388136d578dcd791d081c6042284ced6d9b0c6#tokentxns + * https://bscscan.com/address/0x34b504a5cf0ff41f8a480580533b6dda687fa3da#tokentxns */ const ListaStakeManagerAddress = "0x1adB950d8bB3dA4bE104211D5AB038628e477fE6"; From 74482fdc34b88131ab074c42306367caff0103e8 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 12 Sep 2024 11:16:33 +0200 Subject: [PATCH 1428/1590] track pancake stableswap on ethereum --- protocols/pancakeswap/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index df3848e389..8f56b0775c 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -20,6 +20,7 @@ const endpoints = { const stablesSwapEndpoints = { [CHAIN.BSC]: sdk.graph.modifyEndpoint('C5EuiZwWkCge7edveeMcvDmdr7jjc1zG4vgn8uucLdfz'), + [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('CoKbk4ey7JFGodyx1psQ21ojW4UhSoWBVcCTxTwEuJUj'), [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('y7G5NUSq5ngsLH2jBGQajjxuLgW1bcqWiBqKmBk3MWM') } @@ -110,6 +111,7 @@ const startTimes = { } as IJSON const stableTimes = { + [CHAIN.ETHEREUM]: 1705363200, [CHAIN.BSC]: 1663718400, [CHAIN.ARBITRUM]: 1705363200 } as IJSON From 5815a7ea44f6574136d3596d98e471889fa815a6 Mon Sep 17 00:00:00 2001 From: Arpit Singh Date: Thu, 12 Sep 2024 15:04:31 +0530 Subject: [PATCH 1429/1590] removed depricated apis for logx and added new network apis --- dexs/logx/index.ts | 92 +++++++----------------------- dexs/logx/logx-aggregator/index.ts | 34 ----------- 2 files changed, 21 insertions(+), 105 deletions(-) delete mode 100644 dexs/logx/logx-aggregator/index.ts diff --git a/dexs/logx/index.ts b/dexs/logx/index.ts index 2045fdcad9..f3eb4e06ad 100644 --- a/dexs/logx/index.ts +++ b/dexs/logx/index.ts @@ -1,81 +1,31 @@ import fetchURL from "../../utils/fetchURL"; -import { BreakdownAdapter, ChainBlocks, Fetch, FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import { adapterAgg } from './logx-aggregator/index' +import { FetchResult, SimpleAdapter } from "../../adapters/types"; -const URL = "https://backend-lp.logx.trade/defillama"; - -const chain_ids: { [chain: string]: string } = { - [CHAIN.MANTLE]: "5000", - [CHAIN.MODE]: "34443", - [CHAIN.BLAST]: "81457", - [CHAIN.LINEA]: "59144", - [CHAIN.KROMA]: "255", - [CHAIN.MANTA]: "169", - [CHAIN.TELOS]: "40", - [CHAIN.FUSE]: "122", -} +const URLEndpoint = "https://apiserver.logx.network/api/v1/stats/defillama?endTime="; +const startTimestamp = 1725580800; // 06.09.2024 interface IAPIResponse { - dailyVolume: string; - totalVolume: string; + last24HourVolume: string; + totalVolume: string; } - -const getFetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions): Promise => { - const { dailyVolume, totalVolume }: IAPIResponse = ( - await fetchURL(`${URL}?chainId=${chain_ids[chain]}×tamp=${timestamp}`) - ); - return { - dailyVolume, - totalVolume, - timestamp, - }; +const fetch = async (timestamp: number): Promise => { + const { last24HourVolume, totalVolume }: IAPIResponse = ( + await fetchURL(`${URLEndpoint}${timestamp}`) + ); + return { + totalVolume: totalVolume, + dailyVolume: last24HourVolume, + timestamp: timestamp }; +}; -const adapter: any = { - adapter: { - [CHAIN.MANTLE]: { - fetch: getFetch, - start: 1701475200, - }, - [CHAIN.MODE]: { - fetch: getFetch, - start: 1707436800, - }, - [CHAIN.BLAST]: { - fetch: getFetch, - start: 1709337600, - }, - [CHAIN.LINEA]: { - fetch: getFetch, - start: 1701475200, - }, - [CHAIN.KROMA]: { - fetch: getFetch, - start: 1703548800, - }, - [CHAIN.MANTA]: { - fetch: getFetch, - start: 1705968000, - }, - [CHAIN.TELOS]: { - fetch: getFetch, - start: 1706522866, - }, - [CHAIN.FUSE]: { - fetch: getFetch, - start: 1706659200, - }, +const adapter: SimpleAdapter = { + adapter: { + "logx network": { + fetch, + start: startTimestamp, }, - }; - - - -const adapterBreakdown: BreakdownAdapter = { - breakdown: { - "derivative": adapter["adapter"], - "logx-aggregator": adapterAgg["adapter"], } -} +}; -export default adapterBreakdown; +export default adapter; \ No newline at end of file diff --git a/dexs/logx/logx-aggregator/index.ts b/dexs/logx/logx-aggregator/index.ts deleted file mode 100644 index ce70a69301..0000000000 --- a/dexs/logx/logx-aggregator/index.ts +++ /dev/null @@ -1,34 +0,0 @@ -import fetchURL from "../../../utils/fetchURL"; -import { FetchResult, SimpleAdapter } from "../../../adapters/types"; -import { CHAIN } from "../../../helpers/chains"; - -const URL = "https://logx-data-analytics-xmxmxbqxaq-uc.a.run.app/"; -const endpoint = "defillama/defillama/"; -const startTimestamp = 1686205277; // 08.06.2023 - -interface IAPIResponse { - dailyVolume: string; - totalVolume: string; -} -const fetch = async (timestamp: number): Promise => { - const { dailyVolume, totalVolume }: IAPIResponse = ( - await fetchURL(`${URL}${endpoint}${timestamp}`) - ); - return { - dailyVolume, - totalVolume, - timestamp, - }; -}; - -const adapterAgg: any = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch, - start: startTimestamp, - }, - }, -}; -export { - adapterAgg -} From 79fe26253960cd35956d2e37c5a1f33597de54f6 Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Thu, 12 Sep 2024 17:35:48 +0800 Subject: [PATCH 1430/1590] update logic --- fees/solv-finance/index.ts | 98 +++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 50 deletions(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index c6a9cabcfb..d968c6a9d8 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -1,33 +1,38 @@ import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; -import { BreakdownAdapter, FetchOptions, FetchV2 } from "../../adapters/types"; +import { FetchOptions, FetchV2, SimpleAdapter } from "../../adapters/types"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; import { addTokensReceived } from "../../helpers/token"; import { httpGet } from "../../utils/fetchURL"; import { gql, request } from "graphql-request"; import { getPrices } from "../../utils/prices"; import { BigNumber } from "bignumber.js" +import { Balances } from "@defillama/sdk"; const feesConfig = "https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solv-fees.json"; - -// The Graph -const graphUrlList = { - ethereum: 'https://api.studio.thegraph.com/query/40045/solv-payable-factory-prod/version/latest', - bsc: 'https://api.studio.thegraph.com/query/40045/solv-payable-factory-bsc/version/latest', - arbitrum: 'https://api.studio.thegraph.com/query/40045/solv-payable-factory-arbitrum/version/latest', - mantle: 'https://api.0xgraph.xyz/api/public/65c5cf65-bd77-4da0-b41c-cb6d237e7e2f/subgraphs/solv-payable-factory-mantle/-/gn', - merlin: 'http://solv-subgraph-server-alb-694489734.us-west-1.elb.amazonaws.com:8000/subgraphs/name/solv-payable-factory-merlin', -} +const graphUrl = "https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/refs/heads/main/solv-graph.json"; const chains: { [chain: Chain]: { deployedAt: number }; } = { [CHAIN.ETHEREUM]: { - deployedAt: 1718236800, - } + deployedAt: 1681084800, + }, + [CHAIN.BSC]: { + deployedAt: 1679097600, + }, + [CHAIN.ARBITRUM]: { + deployedAt: 1682380800, + }, + [CHAIN.MANTLE]: { + deployedAt: 1692835200, + }, + [CHAIN.MERLIN]: { + deployedAt: 1710892800, + }, }; -const protocol: FetchV2 = async (options) => { +const fetch: FetchV2 = async (options) => { const contracts: { [chain: Chain]: { [protocolFees: string]: { address: string[]; token: string[]; deployedAt: number }; @@ -40,30 +45,28 @@ const protocol: FetchV2 = async (options) => { }; } + const dailyFees = options.createBalances(); + const protocolFees = await protocol(options, contracts); + dailyFees.addBalances(protocolFees); + + const poolFees = await pool(options, contracts); + dailyFees.addBalances(poolFees); + return { + dailyFees + } +}; + +async function protocol(options: FetchOptions, contracts: any): Promise { const dailyFees = await addTokensReceived({ options, targets: contracts[options.chain]["protocolFees"].address, tokens: contracts[options.chain]["protocolFees"].token, }); - return { - dailyFees, - }; -}; - -const pool: FetchV2 = async (options) => { - const contracts: { - [chain: Chain]: { - [poolFees: string]: string[]; - } - } = await httpGet(feesConfig); - - if (!contracts[options.chain]) { - return { - timestamp: new Date().getTime(), - }; - } + return dailyFees; +} +async function pool(options: FetchOptions, contracts: any): Promise { const pools = await getGraphData(contracts[options.chain]["poolFees"], options.chain); const concretes = await concrete(pools, options); @@ -87,6 +90,7 @@ const pool: FetchV2 = async (options) => { if (nav < 0) { nav = 0; } + poolNavs.push(nav); } @@ -107,28 +111,32 @@ const pool: FetchV2 = async (options) => { }); const prices = (await getPrices(poolBaseInfos.map((index: { currency: string; }) => `${options.chain}:${index.currency.toLowerCase()}`), toTimestamp)); + let dailyFeeUsd = 0; + const dailyFees = options.createBalances(); for (let i = 0; i < pools.length; i++) { const poolNav = poolNavs[i]; const poolBaseInfo = poolBaseInfos[i]; const totalValue = totalValues[i]; const priceData = prices[`${options.chain}:${poolBaseInfo.currency.toLowerCase()}`]; + const token = `${options.chain}:${poolBaseInfo.currency}`; const total = BigNumber(totalValue) .div(BigNumber(10e18)) .times( BigNumber(poolNav).dividedBy(BigNumber(10).pow(priceData.decimals)) - ).times(priceData.price); + ); - dailyFeeUsd = BigNumber(dailyFeeUsd).plus(total).toNumber(); + dailyFees.addBalances({ [token]: total.toNumber() }); } - return { - dailyFees: dailyFeeUsd, - }; + return dailyFees; } async function getGraphData(poolId: string[], chain: Chain) { + const graphUrlList: { + [chain: Chain]: string; + } = (await httpGet(graphUrl)) const query = gql`{ poolOrderInfos(first: 1000 where:{poolId_in: ${JSON.stringify(poolId)}}) { marketContractAddress @@ -171,23 +179,13 @@ async function concrete(slots: any[], options: FetchOptions): Promise { return concretes; } -const adapter: BreakdownAdapter = { breakdown: {}, version: 2 }; +const adapter: SimpleAdapter = { adapter: {}, version: 2 }; Object.keys(chains).forEach((chain: Chain) => { - adapter.breakdown = { - protocolFees: { - [chain]: { - fetch: protocol, - start: chains[chain].deployedAt, - } - }, - poolFees: { - [chain]: { - fetch: pool, - start: chains[chain].deployedAt, - } - } - } + adapter.adapter[chain] = { + fetch, + start: chains[chain].deployedAt, + }; }); export default adapter; \ No newline at end of file From ebb9711c1baf29ec182a3f47487e444f49a67869 Mon Sep 17 00:00:00 2001 From: Danil Cherevashko Date: Tue, 3 Sep 2024 23:07:46 +0300 Subject: [PATCH 1431/1590] Add swap.coffee adapter --- aggregators/swap-coffee/index.ts | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 aggregators/swap-coffee/index.ts diff --git a/aggregators/swap-coffee/index.ts b/aggregators/swap-coffee/index.ts new file mode 100644 index 0000000000..8c5e84e273 --- /dev/null +++ b/aggregators/swap-coffee/index.ts @@ -0,0 +1,38 @@ +import { Adapter, FetchV2 } from "../../adapters/types"; +import { httpGet } from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; +import { DAY, getTimestampAtStartOfDay } from "../../utils/date"; + +const statisticsEndpoint = "https://backend.swap.coffee/v1/statistics/generic" + +const fetch: FetchV2 = async ({startTimestamp}) => { + const start = getTimestampAtStartOfDay(startTimestamp) + const end = start + DAY + + const statistics = await httpGet( + statisticsEndpoint, + { + params: { + from: start, + to: end + } + }) + + return { + timestamp: end, + dailyVolume: statistics?.volume, + dailyFees: statistics?.fees, + }; +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.TON]: { + fetch, + start: 1717957740, + }, + } +} + +export default adapter; From 89c83cda668b48494cdf1b15c6954bdf1fc40a1e Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Thu, 12 Sep 2024 18:28:43 +0800 Subject: [PATCH 1432/1590] add core --- fees/solv-finance/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index d968c6a9d8..9d34d3ddb8 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -30,6 +30,9 @@ const chains: { [CHAIN.MERLIN]: { deployedAt: 1710892800, }, + [CHAIN.CORE]: { + deployedAt: 1726012800, + }, }; const fetch: FetchV2 = async (options) => { From 127caaa1d002edc31e9b251f393b578bdf8a051c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 12 Sep 2024 15:12:57 +0000 Subject: [PATCH 1433/1590] fix get event logs --- options/typus/getChainData.ts | 152 ++++++---------------------------- options/typus/index.ts | 26 ++---- 2 files changed, 32 insertions(+), 146 deletions(-) diff --git a/options/typus/getChainData.ts b/options/typus/getChainData.ts index 467782e345..0d27d879e2 100644 --- a/options/typus/getChainData.ts +++ b/options/typus/getChainData.ts @@ -1,152 +1,48 @@ -import * as sdk from "@defillama/sdk"; -import { httpPost } from "../../utils/fetchURL"; +import { queryEvents } from "../../helpers/sui"; +import { FetchOptions, FetchResult } from "../../adapters/types"; -interface ChainData { - totalPremiumVolume: { [key: string]: number }; - dailyPremiumVolume: { [key: string]: number }; - totalNotionalVolume: { [key: string]: number }; - dailyNotionalVolume: { [key: string]: number }; - timestamp: string; -} async function getChainData( - timestamp: string, - backFillTimestamp: string | undefined = undefined -): Promise { - let end_timestamp = Number(timestamp); - let start_timestamp = end_timestamp - 24 * 60 * 60; - - var response = await httpPost( - "https://fullnode.mainnet.sui.io:443", - { - jsonrpc: "2.0", - id: 1, - method: "suix_queryEvents", - params: { - query: { - MoveEventType: - "0x321848bf1ae327a9e022ccb3701940191e02fa193ab160d9c0e49cd3c003de3a::typus_dov_single::DeliveryEvent", - }, - descending_order: true, - }, - }, - { - headers: { - "Content-Type": "application/json", - }, - } - ); - - var data = response.result.data; - - if (backFillTimestamp) { - while (response.result.hasNextPage) { - response = await httpPost( - "https://fullnode.mainnet.sui.io:443", - { - jsonrpc: "2.0", - id: 1, - method: "suix_queryEvents", - params: { - query: { - MoveEventType: - "0x321848bf1ae327a9e022ccb3701940191e02fa193ab160d9c0e49cd3c003de3a::typus_dov_single::DeliveryEvent", - }, - descending_order: true, - cursor: response.result.nextCursor, - }, - }, - { - headers: { - "Content-Type": "application/json", - }, - } - ); - data = data.concat(response.result.data); - - const timestamp = Number(data.at(-1).timestampMs) / 1000; - if (timestamp <= Number(backFillTimestamp)) { - break; - } - } - } - - const acc: ChainData = { - timestamp, - totalNotionalVolume: {}, - dailyNotionalVolume: {}, - totalPremiumVolume: {}, - dailyPremiumVolume: {}, - }; - - for (const curr of data) { - const parsedJson = curr.parsedJson; - - let o_token_name: string; - let dailyNotionalVolume: number; - + options: FetchOptions, +): Promise { + const events = await queryEvents({eventType:"0x321848bf1ae327a9e022ccb3701940191e02fa193ab160d9c0e49cd3c003de3a::typus_dov_single::DeliveryEvent", options}) + const dailyNotionalVolume = options.createBalances(); + const dailyPremiumVolume = options.createBalances(); + for (const curr of events) { + const parsedJson = curr; if (parsedJson.o_token.name.endsWith("MFUD")) { - o_token_name = "sui:0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD"; - dailyNotionalVolume = Number(parsedJson.delivery_size) * 10 ** 5; + const o_token_name = "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD"; + dailyNotionalVolume.add(o_token_name, Number(parsedJson.delivery_size) * 10 ** 5); } else { - o_token_name = "sui:0x" + parsedJson.o_token.name; - dailyNotionalVolume = Number(parsedJson.delivery_size); + const o_token_name = "0x" + parsedJson.o_token.name; + dailyNotionalVolume.add(o_token_name, Number(parsedJson.delivery_size)); } - let b_token_name: string; - let dailyPremiumVolume: number; - if (parsedJson.b_token.name.endsWith("MFUD")) { - b_token_name = "sui:0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD"; - dailyPremiumVolume = + const b_token_name = "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD"; + const _dailyPremiumVolume = (Number(parsedJson.bidder_bid_value) + Number(parsedJson.bidder_fee) + Number(parsedJson.incentive_bid_value) + Number(parsedJson.incentive_fee)) * 10 ** 5; + dailyPremiumVolume.add(b_token_name, _dailyPremiumVolume); } else { - b_token_name = "sui:0x" + parsedJson.b_token.name; - dailyPremiumVolume = + const b_token_name = "0x" + parsedJson.b_token.name; + const _dailyPremiumVolume = Number(parsedJson.bidder_bid_value) + Number(parsedJson.bidder_fee) + Number(parsedJson.incentive_bid_value) + Number(parsedJson.incentive_fee); - } - - if (o_token_name in acc.totalNotionalVolume) { - acc.totalNotionalVolume[o_token_name] += dailyNotionalVolume; - } else { - acc.totalNotionalVolume[o_token_name] = dailyNotionalVolume; - } - - if (b_token_name in acc.totalPremiumVolume) { - acc.totalPremiumVolume[b_token_name] += dailyPremiumVolume; - } else { - acc.totalPremiumVolume[b_token_name] = dailyPremiumVolume; - } - - const timestamp = Number(curr.timestampMs) / 1000; - if (timestamp > start_timestamp && timestamp <= end_timestamp) { - if (o_token_name in acc.dailyNotionalVolume) { - acc.dailyNotionalVolume[o_token_name] += dailyNotionalVolume; - } else { - acc.dailyNotionalVolume[o_token_name] = dailyNotionalVolume; - } - - if (b_token_name in acc.dailyPremiumVolume) { - acc.dailyPremiumVolume[b_token_name] += dailyPremiumVolume; - } else { - acc.dailyPremiumVolume[b_token_name] = dailyPremiumVolume; - } + dailyPremiumVolume.add(b_token_name, _dailyPremiumVolume); } } - acc.dailyNotionalVolume = (await sdk.Balances.getUSDString(acc.dailyNotionalVolume, end_timestamp)) as any; - acc.dailyPremiumVolume = (await sdk.Balances.getUSDString(acc.dailyPremiumVolume, end_timestamp)) as any; - acc.totalPremiumVolume = (await sdk.Balances.getUSDString(acc.totalPremiumVolume, end_timestamp)) as any; - acc.totalNotionalVolume = (await sdk.Balances.getUSDString(acc.totalNotionalVolume, end_timestamp)) as any; - - return acc; + return { + timestamp: options.endTimestamp, + dailyNotionalVolume, + dailyPremiumVolume, + }; } export default getChainData; diff --git a/options/typus/index.ts b/options/typus/index.ts index 84820c806b..ada4004015 100644 --- a/options/typus/index.ts +++ b/options/typus/index.ts @@ -1,24 +1,14 @@ import { CHAIN } from "../../helpers/chains"; -import { SimpleAdapter, ChainEndpoints } from "../../adapters/types"; +import { SimpleAdapter } from "../../adapters/types"; import getChainData from "./getChainData"; -const endpoints: ChainEndpoints = { - [CHAIN.SUI]: - "https://us-central1-aqueous-freedom-378103.cloudfunctions.net/mongodb", -}; - const adapter: SimpleAdapter = { - adapter: Object.keys(endpoints).reduce((acc, chain) => { - return { - ...acc, - [chain]: { - fetch: async (ts: string) => await getChainData(ts), - start: 1697700660, - customBackfill: async (ts: string) => - await getChainData(ts, "1697700660"), - }, - }; - }, {}), -}; + adapter: { + [CHAIN.SUI]: { + fetch: getChainData, + start: 1697700660, + } + } +} export default adapter; From e6e8febf71e9f0affe6131e129ac835314222ff9 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 12 Sep 2024 16:38:57 +0100 Subject: [PATCH 1434/1590] debug --- aggregators/1inch-agg/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregators/1inch-agg/index.ts b/aggregators/1inch-agg/index.ts index 6a569b161b..13ececa496 100644 --- a/aggregators/1inch-agg/index.ts +++ b/aggregators/1inch-agg/index.ts @@ -22,7 +22,7 @@ const fetch = const chainData = data.result.rows.find( (row: any) => chainsMap[row.blockchain] === chain ); - + if (!chainData) throw new Error(`Dune query failed: ${JSON.stringify(data)}`) return { dailyVolume: chainData.volume_24h, timestamp: unixTimestamp, From e119cd2ecc324c0558c98d04b17e4e91e1772508 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 12 Sep 2024 17:03:14 +0100 Subject: [PATCH 1435/1590] quickswap --- dexs/quickswap/index.ts | 75 ++++++++++++++++++++------------- helpers/getUniSubgraph/index.ts | 2 +- helpers/getUniSubgraphVolume.ts | 8 ++-- 3 files changed, 50 insertions(+), 35 deletions(-) diff --git a/dexs/quickswap/index.ts b/dexs/quickswap/index.ts index 59d42de4d7..2430984f86 100644 --- a/dexs/quickswap/index.ts +++ b/dexs/quickswap/index.ts @@ -2,11 +2,19 @@ import * as sdk from "@defillama/sdk"; import { BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; -import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; -import fetchURL from "../../utils/fetchURL" +import { + DEFAULT_DAILY_VOLUME_FACTORY, + DEFAULT_DAILY_VOLUME_FIELD, + DEFAULT_TOTAL_VOLUME_FACTORY, + DEFAULT_TOTAL_VOLUME_FIELD, + getChainVolume, +} from "../../helpers/getUniSubgraphVolume"; +import fetchURL from "../../utils/fetchURL"; const endpoints = { - [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint( + "FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd", + ), }; const graphs = getChainVolume({ @@ -18,20 +26,27 @@ const graphs = getChainVolume({ dailyVolume: { factory: DEFAULT_DAILY_VOLUME_FACTORY, field: DEFAULT_DAILY_VOLUME_FIELD, - dateField: "date" + dateField: "date", }, + hasDailyVolume: true, }); const endpointsAlgebraV3 = { - [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint( + "CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7", + ), // [CHAIN.DOGECHAIN]: "https://graph-node.dogechain.dog/subgraphs/name/quickswap/dogechain-info", - [CHAIN.POLYGON_ZKEVM]:"https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7", - [CHAIN.MANTA]:"https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn" + [CHAIN.POLYGON_ZKEVM]: + "https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7", + [CHAIN.MANTA]: + "https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn", }; const endpointsUniV3 = { - [CHAIN.MANTA]:"https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn", - [CHAIN.ASTAR_ZKEVM]:"https://api.studio.thegraph.com/query/44554/astar-quickswap/version/latest" + [CHAIN.MANTA]: + "https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn", + [CHAIN.ASTAR_ZKEVM]: + "https://api.studio.thegraph.com/query/44554/astar-quickswap/version/latest", }; const graphsAlgebraV3 = getChainVolume({ @@ -43,7 +58,7 @@ const graphsAlgebraV3 = getChainVolume({ dailyVolume: { factory: "algebraDayData", field: "volumeUSD", - dateField: "date" + dateField: "date", }, }); @@ -67,23 +82,23 @@ const v3GraphsUni = getGraphDimensions({ }, }); - const fetchLiquidityHub = async (timestamp: number) => { - let dailyResult = (await fetchURL('https://hub.orbs.network/analytics-daily/v1')); - - let rows = dailyResult.result.rows; - let lastDay = rows[rows.length - 1]; - let dailyVolume = lastDay.daily_total_calculated_value; - let totalVolume = (await fetchURL(`https://hub.orbs.network/analytics/v1`)).result.rows[0].total_calculated_value; - - return { - dailyVolume: `${dailyVolume}`, - totalVolume: `${totalVolume}`, - timestamp: timestamp, - }; + let dailyResult = await fetchURL( + "https://hub.orbs.network/analytics-daily/v1", + ); -} + let rows = dailyResult.result.rows; + let lastDay = rows[rows.length - 1]; + let dailyVolume = lastDay.daily_total_calculated_value; + let totalVolume = (await fetchURL(`https://hub.orbs.network/analytics/v1`)) + .result.rows[0].total_calculated_value; + return { + dailyVolume: `${dailyVolume}`, + totalVolume: `${totalVolume}`, + timestamp: timestamp, + }; +}; const adapter: BreakdownAdapter = { version: 1, @@ -91,13 +106,13 @@ const adapter: BreakdownAdapter = { v2: { [CHAIN.POLYGON]: { fetch: graphs(CHAIN.POLYGON), - start: 1602118043 + start: 1602118043, }, }, v3: { [CHAIN.POLYGON]: { fetch: graphsAlgebraV3(CHAIN.POLYGON), - start: 1662425243 + start: 1662425243, }, // [CHAIN.DOGECHAIN]: { // fetch: graphsV3(CHAIN.DOGECHAIN), @@ -105,17 +120,17 @@ const adapter: BreakdownAdapter = { // }, [CHAIN.POLYGON_ZKEVM]: { fetch: graphsAlgebraV3(CHAIN.POLYGON_ZKEVM), - start: 1679875200 + start: 1679875200, }, [CHAIN.MANTA]: { fetch: v3GraphsUni(CHAIN.MANTA), - start: 1697690974 - } + start: 1697690974, + }, }, liquidityHub: { [CHAIN.POLYGON]: { fetch: fetchLiquidityHub, - start: 1695042000 + start: 1695042000, }, }, }, diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 8380cfdbdf..ad943c289e 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -198,7 +198,7 @@ function getGraphDimensions({ } ` : undefined; - return async (options: FetchOptions) => { + return async (_a: any, _b: any, options: FetchOptions) => { const { endTimestamp, getEndBlock } = options; // ts-node --transpile-only cli/testAdapter.ts protocols uniswap const customBlockFunc = getCustomBlock ? getCustomBlock : getEndBlock; diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index 91ebcb3c16..adcc6aba29 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -107,7 +107,7 @@ function getChainVolume({ const graphQueryDailyVolume = gql`${hasDailyVolume ? `query get_daily_volume($id: Int) { ${dailyVolumeQuery} }` : ""}`; return (chain: Chain) => { - return async (options: FetchOptions) => { + return async (_a: any, _b: any, options: FetchOptions) => { const { endTimestamp, getEndBlock, getFromBlock, getToBlock } = options; const customBlockFunc = getCustomBlock ? getCustomBlock : getEndBlock; const block = (await customBlockFunc(endTimestamp).catch((e: any) => @@ -259,12 +259,12 @@ function getChainVolumeWithGasToken({ }: IGetChainVolumeParams & {priceToken:string}) { const basic = getChainVolume({graphUrls, totalVolume, dailyVolume, customDailyVolume, hasDailyVolume, hasTotalVolume, getCustomBlock}) return (chain: Chain) => { - return async (options: FetchOptions) => { + return async (_a: any, _b: any, options: FetchOptions) => { const { block, totalVolume, dailyVolume, - } = await basic(chain)(options); + } = await basic(chain)(_a, _b, options); const timestamp = options.endTimestamp const balances = new Balances({ chain, timestamp }) @@ -373,7 +373,7 @@ function univ2Adapter2(endpoints: { dailyVolumeTimestampField = DEFAULT_DATE_FIELD, gasToken = null as string|null }) { - const graphs = (gasToken === null ? getChainVolume2 : getChainVolumeWithGasToken2 as typeof getChainVolume)({ + const graphs = (gasToken === null ? getChainVolume2 : getChainVolumeWithGasToken2 as typeof getChainVolume2)({ graphUrls: endpoints, totalVolume: { factory: factoriesName, From 99dc269c85274f65393b5e0f8d196594f045f39d Mon Sep 17 00:00:00 2001 From: tomshear32 Date: Thu, 12 Sep 2024 19:06:49 +0300 Subject: [PATCH 1436/1590] feat(Project): Add Toros Fees --- fees/toros/index.ts | 147 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 fees/toros/index.ts diff --git a/fees/toros/index.ts b/fees/toros/index.ts new file mode 100644 index 0000000000..b94d5c031c --- /dev/null +++ b/fees/toros/index.ts @@ -0,0 +1,147 @@ +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, GraphQLClient } from "graphql-request"; + +const CONFIG = { + [CHAIN.OPTIMISM]: { + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-optimism/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($manager: Bytes!, $startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { manager: $manager, managerFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { managerFee, daoFee, tokenPriceAtLastFeeMint } + }`, + feeMintedEventsField: "managerFeeMinteds", + torosManagerAddress: "0x813123a13d01d3f07d434673fdc89cbba523f14d", + }, + [CHAIN.POLYGON]: { + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-polygon/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($manager: Bytes!, $startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { manager: $manager, managerFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { managerFee, daoFee, tokenPriceAtLastFeeMint } + }`, + feeMintedEventsField: "managerFeeMinteds", + torosManagerAddress: "0x090e7fbd87a673ee3d0b6ccacf0e1d94fb90da59", + }, + [CHAIN.ARBITRUM]: { + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-arbitrum/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($manager: Bytes!, $startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { manager: $manager, managerFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { managerFee, tokenPriceAtLastFeeMint } + }`, + feeMintedEventsField: "managerFeeMinteds", + torosManagerAddress: "0xfbd2b4216f422dc1eee1cff4fb64b726f099def5", + }, + [CHAIN.BASE]: { + startTimestamp: 1712227101, + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-base-mainnet/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($manager: Bytes!, $startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { manager: $manager, managerFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { managerFee, tokenPriceAtLastFeeMint } + }`, + feeMintedEventsField: "managerFeeMinteds", + torosManagerAddress: "0x5619ad05b0253a7e647bd2e4c01c7f40ceab0879", + }, +}; + +const fetchHistoricalFees = async (chainId: CHAIN, query: string, managerAddress: string, startTimestamp: number, endTimestamp: number) => { + const { endpoint, feeMintedEventsField } = CONFIG[chainId]; + + let allData = []; + let skip = 0; + const batchSize = 1000; + + while (true) { + try { + const data = await new GraphQLClient(endpoint).request(query, { + manager: managerAddress, + startTimestamp: startTimestamp.toString(), + endTimestamp: endTimestamp.toString(), + first: batchSize, + skip + }); + + const entries = data[feeMintedEventsField]; + if (entries.length === 0) break; + + allData = allData.concat(entries); + skip += batchSize; + + if (entries.length < batchSize) break; + + await sleep(500); + } catch (e) { + throw new Error(`Error fetching data for chain ${chainId}: ${e.message}`); + } + } + return allData; +}; + +const calculateFees = (data: any): number => + data.reduce((acc: number, item: any) => { + const managerFee = Number(item.managerFee); + const tokenPrice = Number(item.tokenPriceAtLastFeeMint); + const managerFeeFormatted = managerFee / 1e18; + const tokenPriceFormatted = tokenPrice / 1e18; + const managerFeeUsd = managerFeeFormatted * tokenPriceFormatted; + return acc + managerFeeUsd; + }, 0); + +const fetch = (chain) => { + return () => { + return async ({ endTimestamp, startTimestamp }: FetchOptions) => { + const config = CONFIG[chain]; + if (!config) throw new Error(`Unsupported chain: ${chain}`); + + const [ + dailyFees + ] = await Promise.all([ + fetchHistoricalFees(chain as CHAIN, config.feeMintedEventsQuery, config.torosManagerAddress, startTimestamp, endTimestamp) + ]); + + return { + dailyFees: calculateFees(dailyFees), + dailyRevenue: calculateFees(dailyFees), + timestamp: endTimestamp, + }; + } + } +}; + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.OPTIMISM]: { + fetch: fetch(CHAIN.OPTIMISM)(), + start: 1638446653, + }, + [CHAIN.POLYGON]: { + fetch: fetch(CHAIN.POLYGON)(), + start: 1627560253, + }, + [CHAIN.ARBITRUM]: { + fetch: fetch(CHAIN.ARBITRUM)(), + start: 1679918653, + }, + [CHAIN.BASE]: { + fetch: fetch(CHAIN.BASE)(), + start: 1703073853, + }, + }, + version: 2 +} + +export default adapter; From 18e31b87dca2cf3c7d41f2afe0fbe9437e8120c4 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 12 Sep 2024 17:08:23 +0100 Subject: [PATCH 1437/1590] traderjoe --- dexs/traderjoe/index.ts | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index 652f528c52..0be9ad3656 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -2,7 +2,7 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { BreakdownAdapter, FetchOptions, FetchResultVolume } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getChainVolume, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume2, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpGet } from "../../utils/fetchURL"; const endpoints = { @@ -47,35 +47,25 @@ const mapChain = (chain: Chain): string => { return chain } -const graphsV1 = getChainVolume({ +const graphsV1 = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "factories", field: "volumeUSD", }, - dailyVolume: { - factory: "dayData", - field: "volumeUSD", - dateField: "date" - }, }); -const graphsV2 = getChainVolume({ +const graphsV2 = getChainVolume2({ graphUrls: endpointsV2, totalVolume: { factory: "lbfactories", field: "volumeUSD", }, - dailyVolume: { - factory: "traderJoeDayData", - field: "volumeUSD", - dateField: "date" - }, }); const adapter: BreakdownAdapter = { - version: 1, + version: 2, breakdown: { v1: { [CHAIN.AVAX]: { From 5b933b4b94597951c5ec36cf81b4a414981d8c32 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 12 Sep 2024 17:16:59 +0100 Subject: [PATCH 1438/1590] sushi --- dexs/sushiswap/v3.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/dexs/sushiswap/v3.ts b/dexs/sushiswap/v3.ts index cd50e8375b..d8fd2076ae 100644 --- a/dexs/sushiswap/v3.ts +++ b/dexs/sushiswap/v3.ts @@ -1,7 +1,7 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpointsV3 = { // [CHAIN.ARBITRUM_NOVA]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v3/v3-arbitrum-nova', @@ -23,16 +23,12 @@ const endpointsV3 = { [CHAIN.BLAST]: "https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/v3-blast/gn", } -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: endpointsV3, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "volumeUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 0, From b2ee4c79b8e3c7d78dc1c9ab4968beb43427142c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 12 Sep 2024 17:05:23 +0000 Subject: [PATCH 1439/1590] fix query --- options/arrow-markets/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/options/arrow-markets/index.ts b/options/arrow-markets/index.ts index a114287e11..f3d67bf4b6 100644 --- a/options/arrow-markets/index.ts +++ b/options/arrow-markets/index.ts @@ -1,4 +1,4 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; @@ -22,9 +22,11 @@ export const v2_adapter: SimpleAdapter = { export async function fetchArrowMarketsVolumeData( /** Timestamp representing the end of the 24 hour period */ - timestamp: number + timestamp: number, + _t: any, + options: FetchOptions ) { - const ArrowMarketsVolumeData = await getArrowMarketsVolumeData(arrowMarketsVolumeEndpoint, timestamp); + const ArrowMarketsVolumeData = await getArrowMarketsVolumeData(arrowMarketsVolumeEndpoint, options.startOfDay); const dailyPremiumVolume = Number(ArrowMarketsVolumeData.daily_premium_volume).toFixed(2); const dailyNotionalVolume = Number(ArrowMarketsVolumeData.daily_notional_volume).toFixed(2); @@ -39,10 +41,8 @@ export async function fetchArrowMarketsVolumeData( } async function getArrowMarketsVolumeData(endpoint: string, timestamp: number): Promise { - const url = new URL(endpoint); - url.searchParams.append('timestamp', timestamp.toString()); - - return fetchURL(endpoint) + const url = `${endpoint}?timestamp=${timestamp}`; + return fetchURL(url) } export default v2_adapter; From 073974c30982acb2831356d769c76f78c3069578 Mon Sep 17 00:00:00 2001 From: degencreator <156078277+degencreator@users.noreply.github.com> Date: Fri, 13 Sep 2024 01:27:05 +0400 Subject: [PATCH 1440/1590] chore: IntentX 0.8.3 subgraph migration --- fees/intent-x/index.tsx | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/fees/intent-x/index.tsx b/fees/intent-x/index.tsx index d8c9f93e8f..5241095985 100644 --- a/fees/intent-x/index.tsx +++ b/fees/intent-x/index.tsx @@ -5,12 +5,12 @@ import { CHAIN } from "../../helpers/chains"; const endpoint_0_8_0 = "https://api.studio.thegraph.com/query/62472/perpetuals-analytics_base/version/latest"; - const endpoint = - "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-base-analytics-082/latest/gn"; +const endpoint = + "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-base-analytics-083/latest/gn"; const endpoint_blast = "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-blast-analytics-083/latest/gn"; const endpoint_mantle = - "https://subgraph-api.mantle.xyz/subgraphs/name/mantle_intentx-analytics_082"; + "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-mantle-analytics-083/latest/gn"; const query_0_8_0 = gql` query stats($from: String!, $to: String!) { @@ -132,9 +132,7 @@ const toString = (x: BigNumber) => { return x.toString(); }; -const fetchVolume = async ( - { endTimestamp, startTimestamp }: FetchOptions -) => { +const fetchVolume = async ({ endTimestamp, startTimestamp }: FetchOptions) => { const response_0_8_0: IGraphResponse = await request( endpoint_0_8_0, query_0_8_0, @@ -198,9 +196,10 @@ const fetchVolume = async ( }; }; -const fetchVolumeBlast = async ( - { endTimestamp, startTimestamp }: FetchOptions -) => { +const fetchVolumeBlast = async ({ + endTimestamp, + startTimestamp, +}: FetchOptions) => { let dailyFees = new BigNumber(0); let totalFees = new BigNumber(0); @@ -251,9 +250,10 @@ const fetchVolumeBlast = async ( }; }; -const fetchVolumeMantle = async ( - { endTimestamp, startTimestamp }: FetchOptions -) => { +const fetchVolumeMantle = async ({ + endTimestamp, + startTimestamp, +}: FetchOptions) => { let dailyFees = new BigNumber(0); let totalFees = new BigNumber(0); From b935018c2ccc2d370bcadf5eb7612ef1bd8c5a32 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 12 Sep 2024 23:44:19 +0100 Subject: [PATCH 1441/1590] add new protocol adapter --- protocols/dtx-v3.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/dtx-v3.ts diff --git a/protocols/dtx-v3.ts b/protocols/dtx-v3.ts new file mode 100644 index 0000000000..8e089679e1 --- /dev/null +++ b/protocols/dtx-v3.ts @@ -0,0 +1,7 @@ +import { uniV3Exports } from "../helpers/uniswap"; + +export default uniV3Exports({ + taiko: { + factory: '0xfCA1AEf282A99390B62Ca8416a68F5747716260c', + } +}) \ No newline at end of file From 7e319868788bbc154288712fb814b25ce65c3de8 Mon Sep 17 00:00:00 2001 From: vulntor <22735155+algtm@users.noreply.github.com> Date: Fri, 13 Sep 2024 11:46:59 +0800 Subject: [PATCH 1442/1590] new stat fetch for bsc upgrade --- aggregators/udex-agg/index.ts | 43 +++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/aggregators/udex-agg/index.ts b/aggregators/udex-agg/index.ts index dd7081f0d8..5affcd1e1d 100644 --- a/aggregators/udex-agg/index.ts +++ b/aggregators/udex-agg/index.ts @@ -2,12 +2,14 @@ import { Chain } from "@defillama/sdk/build/general"; import { FetchResult, FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; +import fetchURL from "../../utils/fetchURL"; +import { getTimestampAtStartOfPreviousDayUTC } from "../../utils/date"; let abi = ["event Swap(address indexed payer,address indexed payee,address fromToken,address toToken,uint fromAmount,uint receivedAmount)"]; -let knownTokens=new Set(["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c","0x55d398326f99059fF775485246999027B3197955","0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"]) +let knownTokens = new Set(["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", "0x55d398326f99059fF775485246999027B3197955", "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"]); type IContract = { [c: string | Chain]: string; -} +}; const contract: IContract = { [CHAIN.BSC]: '0xfCD555b55AA785d46E8c6e9bBB109b10602c431c', @@ -15,31 +17,42 @@ const contract: IContract = { [CHAIN.ETHEREUM]:'0x9556E8ce70ceA3c43e4A6c17ad2FAb258067b058', [CHAIN.BASE]:'0x334F493613c1dD33a364684802fB9C728dfcE1A5' -} - -const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise => { +}; +const bscStatsApi = "https://public.udex.one/bsc/indexer/56/udex/daliyVolume?";//return max 24 hour volume +const fetch: FetchV2 = async ({ getLogs, createBalances, chain,fromTimestamp, toTimestamp }): Promise => { const dailyVolume = createBalances(); - const logs = (await getLogs({ target: contract[chain], eventAbi: abi[0] })) - logs.map((log: any) => { - if ( knownTokens.has(log.toToken)){ - dailyVolume.add(log.toToken, log.receivedAmount) - }else{ - dailyVolume.add(log.fromToken, log.fromAmount) + const reqUrl=bscStatsApi+`from_timestamp=${fromTimestamp}&to_timestamp=${toTimestamp}` + if (chain == CHAIN.BSC) { + let data = await fetchURL(reqUrl); + if (data.data) { + return { dailyVolume: data.data}; } + return { dailyVolume: 0 }; + } else { + const logs = (await getLogs({ target: contract[chain], eventAbi: abi[0] })); + logs.map((log: any) => { + if (knownTokens.has(log.toToken)) { + dailyVolume.add(log.toToken, log.receivedAmount); + } else { + dailyVolume.add(log.fromToken, log.fromAmount); + } }); - return { dailyVolume }; + return { dailyVolume }; + } + }; + const adapter: SimpleAdapter = { adapter: Object.keys(contract).reduce((acc, chain) => { return { ...acc, [chain]: { fetch, - start: 1701388800, - runAtCurrTime:false + start: 1724889600, + runAtCurrTime: false }, - } + }; }, {}), version: 2, }; From 3157d4da9ad610e190f5a49a9a95b0548a7e3b24 Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Fri, 13 Sep 2024 17:00:18 +0800 Subject: [PATCH 1443/1590] add dailyRevenue --- fees/solv-finance/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 9d34d3ddb8..11a7ff7acf 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -11,6 +11,7 @@ import { Balances } from "@defillama/sdk"; const feesConfig = "https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/main/solv-fees.json"; const graphUrl = "https://raw.githubusercontent.com/solv-finance-dev/slov-protocol-defillama/refs/heads/main/solv-graph.json"; +const yields = 0.2; const chains: { [chain: Chain]: { deployedAt: number }; @@ -55,7 +56,8 @@ const fetch: FetchV2 = async (options) => { const poolFees = await pool(options, contracts); dailyFees.addBalances(poolFees); return { - dailyFees + dailyFees, + dailyRevenue: dailyFees.clone(yields) } }; @@ -125,7 +127,6 @@ async function pool(options: FetchOptions, contracts: any): Promise { const token = `${options.chain}:${poolBaseInfo.currency}`; const total = BigNumber(totalValue) - .div(BigNumber(10e18)) .times( BigNumber(poolNav).dividedBy(BigNumber(10).pow(priceData.decimals)) ); From b9a1920e4b0d3aef555d88e6243bd0348219a372 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 13 Sep 2024 11:58:20 +0200 Subject: [PATCH 1444/1590] fix primex --- dexs/primex-finance/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/primex-finance/index.ts b/dexs/primex-finance/index.ts index 0c90241d69..060cacb316 100644 --- a/dexs/primex-finance/index.ts +++ b/dexs/primex-finance/index.ts @@ -12,7 +12,7 @@ const abi = { OpenPosition: "event OpenPosition(uint256 indexed positionId, address indexed trader, address indexed openedBy, (uint256 id, uint256 scaledDebtAmount, address bucket, address soldAsset, uint256 depositAmountInSoldAsset, address positionAsset, uint256 positionAmount, address trader, uint256 openBorrowIndex, uint256 createdAt, uint256 updatedConditionsAt, bytes extraParams) position, address feeToken, uint256 protocolFee, uint256 entryPrice, uint256 leverage, (uint256 managerType, bytes params)[] closeConditions)", OpenPositionV2: - "event OpenPosition( uint256 indexed positionId, address indexed trader, address indexed openedBy, PositionLibrary.Position position, uint256 entryPrice, uint256 leverage, LimitOrderLibrary.Condition[] closeConditions )", + "event OpenPosition( uint256 indexed positionId, address indexed trader, address indexed openedBy, (uint256 id, uint256 scaledDebtAmount, address bucket, address soldAsset, uint256 depositAmountInSoldAsset, address positionAsset, uint256 positionAmount, address trader, uint256 openBorrowIndex, uint256 createdAt, uint256 updatedConditionsAt, bytes extraParams) position, uint256 entryPrice, uint256 leverage, (uint256 managerType, bytes params)[] closeConditions)", ClosePosition: "event ClosePosition(uint256 indexed positionId, address indexed trader, address indexed closedBy, address bucketAddress, address soldAsset, address positionAsset, uint256 decreasePositionAmount, int256 profit, uint256 positionDebt, uint256 amountOut, uint8 reason)", PartialClosePosition: From cceca58e7d205905bca081457808106d112958e1 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 13 Sep 2024 13:45:05 +0100 Subject: [PATCH 1445/1590] bmx --- dexs/bmx/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/bmx/index.ts b/dexs/bmx/index.ts index ce071df1b9..96d9d9625a 100644 --- a/dexs/bmx/index.ts +++ b/dexs/bmx/index.ts @@ -15,8 +15,8 @@ const startTimestamps: { [chain: string]: number } = { const endpoints: { [key: string]: string } = { [CHAIN.BASE]: "https://api.studio.thegraph.com/query/71696/bmx-base-stats/version/latest", - [CHAIN.MODE]: - "https://api.studio.thegraph.com/query/42444/bmx-mode-stats/version/latest", + // [CHAIN.MODE]: + // "https://api.studio.thegraph.com/query/42444/bmx-mode-stats/version/latest", }; const freestyleEndpoints: { [key: string]: string } = { [CHAIN.BASE]: From bfd80dc9db6be0694f1072ee9b32ce4a86cdceaf Mon Sep 17 00:00:00 2001 From: lil-il <> Date: Fri, 13 Sep 2024 16:00:13 +0300 Subject: [PATCH 1446/1590] added all kiloex chains --- aggregator-derivatives/vooi/index.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/aggregator-derivatives/vooi/index.ts b/aggregator-derivatives/vooi/index.ts index 9d88e45ba5..02dcad1966 100644 --- a/aggregator-derivatives/vooi/index.ts +++ b/aggregator-derivatives/vooi/index.ts @@ -20,16 +20,20 @@ const fetchArbitrum = async (timestamp: number): Promise => { if (!synfuturesItem) { synfuturesItem = {dailyVolume: 0, totalVolume: 0} } - let kiloexItem = fetchData.find(((item) => item.protocol == "kiloex")) + let kiloexItem = fetchData.filter(((item) => item.protocol == "kiloex")) if (!kiloexItem) { kiloexItem = {dailyVolume: 0, totalVolume: 0} } - let dailyVolume = Number(orderlyItem.dailyVolume) + Number(kiloexItem.dailyVolume) - let totalVolume = Number(orderlyItem.totalVolume) + Number(kiloexItem.totalVolume) + let dailyVolume = Number(orderlyItem.dailyVolume) + let totalVolume = Number(orderlyItem.totalVolume) for (let i in synfuturesItem){ dailyVolume = Number(dailyVolume) + Number(synfuturesItem[i].dailyVolume) totalVolume = Number(totalVolume) + Number(synfuturesItem[i].totalVolume) } + for (let i in kiloexItem){ + dailyVolume = Number(dailyVolume) + Number(kiloexItem[i].dailyVolume) + totalVolume = Number(totalVolume) + Number(kiloexItem[i].totalVolume) + } return { dailyVolume, totalVolume, From 375e2db4bd363fbac4da77d0ccdfccdbf10e9d7a Mon Sep 17 00:00:00 2001 From: literallymarvellous Date: Fri, 13 Sep 2024 17:05:55 +0100 Subject: [PATCH 1447/1590] add fee & volume for pear --- dexs/pear-protocol/index.ts | 45 + fees/pear-protocol/index.ts | 42 + yarn.lock | 2438 +++++++++++++++++++++++++++++++++++ 3 files changed, 2525 insertions(+) create mode 100644 dexs/pear-protocol/index.ts create mode 100644 fees/pear-protocol/index.ts create mode 100644 yarn.lock diff --git a/dexs/pear-protocol/index.ts b/dexs/pear-protocol/index.ts new file mode 100644 index 0000000000..a3d17756c2 --- /dev/null +++ b/dexs/pear-protocol/index.ts @@ -0,0 +1,45 @@ +import { IExchangeTotalVolume } from "./../flowx-finance/index"; +import { Adapter, BreakdownAdapter, FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; + +const fetch = async ( + timestamp: number, + chainBlocks: any, + options: FetchOptions +) => { + const queryParams = new URLSearchParams({ limit: "1", offset: "0" }); // Define limit and offset parameters + const url = `https://api.dune.com/api/v1/query/3779651/results?${queryParams}`; + + const opts = { + method: "GET", + headers: { + "X-DUNE-API-KEY": "aBGbHEVNlpqDCkh02NAfUXucBA7e8ROZ", + }, + }; + + const response = await httpGet(url, opts); + + const res = response.result.rows[0]; + const totalVolume = res.total_volume; + const dailyVolume = 3000000; + + return { + totalVolume, + dailyVolume, + timestamp, + }; +}; + +const adapter: BreakdownAdapter = { + breakdown: { + derivatives: { + [CHAIN.ARBITRUM]: { + fetch: fetch, + start: 1715199684, + }, + }, + }, +}; + +export default adapter; diff --git a/fees/pear-protocol/index.ts b/fees/pear-protocol/index.ts new file mode 100644 index 0000000000..826896bb03 --- /dev/null +++ b/fees/pear-protocol/index.ts @@ -0,0 +1,42 @@ +import { Adapter, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; + +const fetch = async ( + timestamp: number, + chainBlocks: any, + options: FetchOptions +) => { + const queryParams = new URLSearchParams({ limit: "1", offset: "0" }); // Define limit and offset parameters + const url = `https://api.dune.com/api/v1/query/3779651/results?${queryParams}`; + + const opts = { + method: "GET", + headers: { + "X-DUNE-API-KEY": "aBGbHEVNlpqDCkh02NAfUXucBA7e8ROZ", + }, + }; + + const response = await httpGet(url, opts); + + const res = response.result.rows[0]; + const totalfees = res.total_fees; + const dailyfees = res.daily_fees; + + return { + dailyFees, + totalFees, + timestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetch, + start: 1718841600, + }, + }, +}; + +export default adapter; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..5e116f6aa0 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2438 @@ +# 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.645.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.645.0.tgz#a0d201248ee711e79f3e515d870b02547a652102" + integrity sha512-RjT/mfNv4yr1uv/+aEXgSIxC5EB+yHPSU7hH0KZOZrvZEFASLl0i4FeoHzbMEOH5KdKGAi0uu3zRP3D1y45sKg== + 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.645.0" + "@aws-sdk/client-sts" "3.645.0" + "@aws-sdk/core" "3.635.0" + "@aws-sdk/credential-provider-node" "3.645.0" + "@aws-sdk/middleware-bucket-endpoint" "3.620.0" + "@aws-sdk/middleware-expect-continue" "3.620.0" + "@aws-sdk/middleware-flexible-checksums" "3.620.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-location-constraint" "3.609.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-sdk-s3" "3.635.0" + "@aws-sdk/middleware-ssec" "3.609.0" + "@aws-sdk/middleware-user-agent" "3.645.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/signature-v4-multi-region" "3.635.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.645.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@aws-sdk/xml-builder" "3.609.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.4.0" + "@smithy/eventstream-serde-browser" "^3.0.6" + "@smithy/eventstream-serde-config-resolver" "^3.0.3" + "@smithy/eventstream-serde-node" "^3.0.5" + "@smithy/fetch-http-handler" "^3.2.4" + "@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.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.15" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@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.15" + "@smithy/util-defaults-mode-node" "^3.0.15" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-stream" "^3.1.3" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.1.2" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.645.0": + version "3.645.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.645.0.tgz#3711a8c589f1864d18a1c08ae1bf2d5257c8964b" + integrity sha512-X9ULtdk3cO+1ysurEkJ1MSnu6U00qodXx+IVual+1jXX4RYY1WmQmfo7uDKf6FFkz7wW1DAqU+GJIBNQr0YH8A== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.635.0" + "@aws-sdk/credential-provider-node" "3.645.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.645.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.645.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.4.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.15" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@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.15" + "@smithy/util-defaults-mode-node" "^3.0.15" + "@smithy/util-endpoints" "^2.0.5" + "@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.645.0": + version "3.645.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.645.0.tgz#5e598ce4216ee8e014af8530b7b1c87db06a57aa" + integrity sha512-2rc8TjnsNddOeKQ/pfNN7deNvGLXAeKeYtHtGDAiM2qfTKxd2sNcAsZ+JCDLyshuD4xLM5fpUyR0X8As9EAouQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.635.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.645.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.645.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.4.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.15" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@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.15" + "@smithy/util-defaults-mode-node" "^3.0.15" + "@smithy/util-endpoints" "^2.0.5" + "@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.645.0": + version "3.645.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.645.0.tgz#0cd5b022c7ec360b3bc4134c8ce545322c2d09d7" + integrity sha512-6azXYtvtnAsPf2ShN9vKynIYVcJOpo6IoVmoMAVgNaBJyllP+s/RORzranYZzckqfmrudSxtct4rVapjLWuAMg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.645.0" + "@aws-sdk/core" "3.635.0" + "@aws-sdk/credential-provider-node" "3.645.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.645.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.645.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.4.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.15" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@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.15" + "@smithy/util-defaults-mode-node" "^3.0.15" + "@smithy/util-endpoints" "^2.0.5" + "@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.635.0": + version "3.635.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.635.0.tgz#74b7d0d7fa3aa39f87ea5cf4e6c97d4d84f4ef14" + integrity sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg== + dependencies: + "@smithy/core" "^2.4.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz#d4692c49a65ebc11dae3f7f8b053fee9268a953c" + integrity sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg== + 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.635.0": + version "3.635.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz#083439af1336693049958e4b61695e4712b30fd4" + integrity sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.645.0": + version "3.645.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.645.0.tgz#1226348cc4e3e5a9ab2ceb5357d6539b5598d29f" + integrity sha512-LlZW0qwUwNlTaAIDCNpLbPsyXvS42pRIwF92fgtCQedmdnpN3XRUC6hcwSYI7Xru3GGKp3RnceOvsdOaRJORsw== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.635.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.645.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.645.0": + version "3.645.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.645.0.tgz#1d8df057040ab8529dacb8f1fc6b210a441e6680" + integrity sha512-eGFFuNvLeXjCJf5OCIuSEflxUowmK+bCS+lK4M8ofsYOEGAivdx7C0UPxNjHpvM8wKd8vpMl5phTeS9BWX5jMQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.635.0" + "@aws-sdk/credential-provider-ini" "3.645.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.645.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz#10387cf85400420bb4bbda9cc56937dcc6d6d0ee" + integrity sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.645.0": + version "3.645.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.645.0.tgz#09933f31a43bfc80de1faca522fc1090721eea95" + integrity sha512-d6XuChAl5NCsCrUexc6AFb4efPmb9+66iwPylKG+iMTMYgO1ackfy1Q2/f35jdn0jolkPkzKsVyfzsEVoID6ew== + dependencies: + "@aws-sdk/client-sso" "3.645.0" + "@aws-sdk/token-providers" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz#b25878c0a05dad60cd5f91e7e5a31a145c2f14be" + integrity sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w== + 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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz#c5dc0e98b6209a91479cad6c2c74fbc5a3429fab" + integrity sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz#6a362c0f0696dc6749108a33de9998e0fa6b50ec" + integrity sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz#42cd48cdc0ad9639545be000bf537969210ce8c5" + integrity sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA== + 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.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" + integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@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.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" + integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.635.0": + version "3.635.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz#be7f61c6033a803cde59ec5a29db266b42fdbc01" + integrity sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw== + dependencies: + "@aws-sdk/core" "3.635.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/core" "^2.4.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.2.0" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-stream" "^3.1.3" + "@smithy/util-utf8" "^3.0.0" + 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.645.0": + version "3.645.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.645.0.tgz#a6b5792a1f617c749839734213a8e7f920631245" + integrity sha512-NpTAtqWK+49lRuxfz7st9for80r4NriCMK0RfdJSoPFVntjsSQiQ7+2nW2XL05uVY633e9DvCAw8YatX3zd1mw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.645.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" + integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== + dependencies: + "@aws-sdk/types" "3.609.0" + "@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" + +"@aws-sdk/signature-v4-multi-region@3.635.0": + version "3.635.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz#76e8eb66bfd9b661b4f9768b18aca2e04dd781a2" + integrity sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.635.0" + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" + integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@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.645.0": + version "3.645.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.645.0.tgz#43dba3d4b4cc9762d590903ef6bd8947aba68e1e" + integrity sha512-Oe+xaU4ic4PB1k3pb5VTC1/MWES13IlgpaQw01bVHGfwP6Yv6zZOxizRzca2Y3E+AyR+nKD7vXtHRY+w3bi4bg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + "@smithy/util-endpoints" "^2.0.5" + 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.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" + integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@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.83" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.83.tgz#f0f412410d7a99ee7b864887278e710a5479a686" + integrity sha512-JojVjzBR73GoVmyuC6gE7AfMgpWvHm2OEKEMIai53b7nkI91oFAVYu1PoX/YD+wTbOPhZwYWWhdVXR5hYPnNRQ== + 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.15.0" + resolved "https://registry.yarnpkg.com/@elastic/elasticsearch/-/elasticsearch-8.15.0.tgz#cb29b3ae33203c545d435cf3dc4b557c8b4961d5" + integrity sha512-mG90EMdTDoT6GFSdqpUAhWK9LGuiJo6tOWqs0Usd/t15mPQDj7ZqHXfCBqNkASZpwPZpbAYVjd57S6nbUBINCg== + dependencies: + "@elastic/transport" "^8.7.0" + tslib "^2.4.0" + +"@elastic/transport@^8.7.0": + version "8.7.1" + resolved "https://registry.yarnpkg.com/@elastic/transport/-/transport-8.7.1.tgz#b380f0b90ee98ff84892c0958b94477cfbf84a05" + integrity sha512-2eeMVkz57Ayxv+UAZkIKzzrUu7nm96jr3+N3kLfbBqALYe2jwDpLr9pR0jc/x9HyJKAM909YGaNlHFDZeb0+Mw== + 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.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.2.tgz#95ac6b07480d0d2afbcface3f0f1ddc3ae6373d7" + integrity sha512-b5g+PNujlfqIib9BjkNB108NyO5aZM/RXjfOCXRCqXQ1oPnIkfvdORrztbGgCZdPe/BN/MKDlrGA7PafKPM2jw== + dependencies: + "@smithy/types" "^3.4.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.5", "@smithy/config-resolver@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.6.tgz#5906cb8fcbadb784930c55a578589aaa6650a52f" + integrity sha512-j7HuVNoRd8EhcFp0MzcUb4fG40C7BcyshH+fAd3Jhd8bINNFvEQYBrZoS/SK6Pun9WPlfoI8uuU2SMz8DsEGlA== + dependencies: + "@smithy/node-config-provider" "^3.1.5" + "@smithy/types" "^3.4.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.4" + tslib "^2.6.2" + +"@smithy/core@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.4.1.tgz#6694d79ba6e4a185a0baa731ba6584420291521e" + integrity sha512-7cts7/Oni7aCHebHGiBeWoz5z+vmH+Vx2Z/UW3XtXMslcxI3PEwBZxNinepwZjixS3n12fPc247PHWmjU7ndsQ== + dependencies: + "@smithy/middleware-endpoint" "^3.1.1" + "@smithy/middleware-retry" "^3.0.16" + "@smithy/middleware-serde" "^3.0.4" + "@smithy/protocol-http" "^4.1.1" + "@smithy/smithy-client" "^3.3.0" + "@smithy/types" "^3.4.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-middleware" "^3.0.4" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.2.0", "@smithy/credential-provider-imds@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.1.tgz#f5871549d01db304c3d5c52dd6591652ebfdfa9e" + integrity sha512-4z/oTWpRF2TqQI3aCM89/PWu3kim58XU4kOCTtuTJnoaS4KT95cPWMxbQfTN2vzcOe96SOKO8QouQW/+ESB1fQ== + dependencies: + "@smithy/node-config-provider" "^3.1.5" + "@smithy/property-provider" "^3.1.4" + "@smithy/types" "^3.4.0" + "@smithy/url-parser" "^3.0.4" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.3.tgz#a1ac71108c349b6f156ff91dbbf38b4b20d95aee" + integrity sha512-mKBrmhg6Zd3j07G9dkKTGmrU7pdJGTNz8LbZtIOR3QoodS5yDNqEqoXU4Eg38snZcnCAh7NPBsw5ndxtJPLiCg== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^3.4.0" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^3.0.6": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.7.tgz#0448ada47cf7e99abdfefe980090ea2b8abbff8d" + integrity sha512-UC4RQqyM8B0g5cX/xmWtsNgSBmZ13HrzCqoe5Ulcz6R462/egbIdfTXnayik7jkjvwOrCPL1N11Q9S+n68jPLA== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.6" + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^3.0.3": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.4.tgz#1ef67a2f78da7b30ec728a8863933fa2d088330b" + integrity sha512-saIs5rtAMpifqL7u7nc5YeE/6gkenzXpSz5NwEyhIesRWtHK+zEuYn9KY8SArZEbPSHyGxvvgKk1z86VzfUGHw== + dependencies: + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^3.0.5": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.6.tgz#d04c31f8fe4aab29f2edbff8ea6519fe50405e43" + integrity sha512-gRKGBdZah3EjZZgWcsTpShq4cZ4Q4JTTe1OPob+jrftmbYj6CvpeydZbH0roO5SvBG8SI3aBZIet9TGN3zUxUw== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.6" + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.6.tgz#d233d08bf4b27d9bf4b1e727d866694470966797" + integrity sha512-1jvXd4sFG+zKaL6WqrJXpL6E+oAMafuM5GPd4qF0+ccenZTX3DZugoCCjlooQyTh+TZho2FpdVYUf5J/bB/j6Q== + dependencies: + "@smithy/eventstream-codec" "^3.1.3" + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^3.2.4", "@smithy/fetch-http-handler@^3.2.5": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.5.tgz#c9a6c6c35895ffdfd98b992ecebb1344418d1932" + integrity sha512-DjRtGmK8pKQMIo9+JlAKUt14Z448bg8nAN04yKIvlrrpmpRSG57s5d2Y83npks1r4gPtTRNbAFdQCoj9l3P2KQ== + dependencies: + "@smithy/protocol-http" "^4.1.1" + "@smithy/querystring-builder" "^3.0.4" + "@smithy/types" "^3.4.0" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^3.1.2": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.3.tgz#6649bf55590fc0489e0d91d310017b8359c0d7ae" + integrity sha512-im9wAU9mANWW0OP0YGqwX3lw0nXG0ngyIcKQ8V/MUz1r7A6uO2lpPqKmAsH4VPGNLP2JPUhj4aW/m5UKkxX/IA== + dependencies: + "@smithy/chunked-blob-reader" "^3.0.0" + "@smithy/chunked-blob-reader-native" "^3.0.0" + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/hash-node@^3.0.3": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.4.tgz#4d1770a73698292997b9ff27435ed4d51a39e758" + integrity sha512-6FgTVqEfCr9z/7+Em8BwSkJKA2y3krf1em134x3yr2NHWVCo2KYI8tcA53cjeO47y41jwF84ntsEE0Pe6pNKlg== + dependencies: + "@smithy/types" "^3.4.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.3" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.3.tgz#dfd3efb60a2bb9fe6c3131dd73cb8d0c5ecc1b4b" + integrity sha512-Tz/eTlo1ffqYn+19VaMjDDbmEWqYe4DW1PAWaS8HvgRdO6/k9hxNPt8Wv5laXoilxE20YzKugiHvxHyO6J7kGA== + dependencies: + "@smithy/types" "^3.4.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^3.0.3": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.4.tgz#aabb949b6aa15e38d8054b2397c143ef32efe14a" + integrity sha512-MJBUrojC4SEXi9aJcnNOE3oNAuYNphgCGFXscaCj2TA/59BTcXhzHACP8jnnEU3n4yir/NSLKzxqez0T4x4tjA== + dependencies: + "@smithy/types" "^3.4.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.4" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.4.tgz#6a8d40cf9e51c65fc6074aed977acd23ff4f6589" + integrity sha512-qSlqr/+hybufIJgxQW2gYzGE6ywfOxkjjJVojbbmv4MtxfdDFfzRew+NOIOXcYgazW0f8OYBTIKsmNsjxpvnng== + dependencies: + "@smithy/types" "^3.4.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^3.0.5": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.6.tgz#4837dafcfc085f1b9523d0784d05b87b569ad4ce" + integrity sha512-AFyHCfe8rumkJkz+hCOVJmBagNBj05KypyDwDElA4TgMSA4eYDZRjVePFZuyABrJZFDc7uVj3dpFIDCEhf59SA== + dependencies: + "@smithy/protocol-http" "^4.1.1" + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.1.0", "@smithy/middleware-endpoint@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.1.tgz#d718719e45e8f7087cf0d9bbfff5fc6364c5fde0" + integrity sha512-Irv+soW8NKluAtFSEsF8O3iGyLxa5oOevJb/e1yNacV9H7JP/yHyJuKST5YY2ORS1+W34VR8EuUrOF+K29Pl4g== + dependencies: + "@smithy/middleware-serde" "^3.0.4" + "@smithy/node-config-provider" "^3.1.5" + "@smithy/shared-ini-file-loader" "^3.1.5" + "@smithy/types" "^3.4.0" + "@smithy/url-parser" "^3.0.4" + "@smithy/util-middleware" "^3.0.4" + tslib "^2.6.2" + +"@smithy/middleware-retry@^3.0.15", "@smithy/middleware-retry@^3.0.16": + version "3.0.16" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.16.tgz#aca6099a2e73c9be0c7a49eccbca5d1d73eaadf3" + integrity sha512-08kI36p1yB4CWO3Qi+UQxjzobt8iQJpnruF0K5BkbZmA/N/sJ51A1JJGJ36GgcbFyPfWw2FU48S5ZoqXt0h0jw== + dependencies: + "@smithy/node-config-provider" "^3.1.5" + "@smithy/protocol-http" "^4.1.1" + "@smithy/service-error-classification" "^3.0.4" + "@smithy/smithy-client" "^3.3.0" + "@smithy/types" "^3.4.0" + "@smithy/util-middleware" "^3.0.4" + "@smithy/util-retry" "^3.0.4" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^3.0.3", "@smithy/middleware-serde@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.4.tgz#86f0d3c2bf17334b165be96f504a37357a70f576" + integrity sha512-1lPDB2O6IJ50Ucxgn7XrvZXbbuI48HmPCcMTuSoXT1lDzuTUfIuBjgAjpD8YLVMfnrjdepi/q45556LA51Pubw== + dependencies: + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^3.0.3", "@smithy/middleware-stack@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.4.tgz#85b98320fff51457e9720b2c17e8f3f97c39a88c" + integrity sha512-sLMRjtMCqtVcrOqaOZ10SUnlFE25BSlmLsi4bRSGFD7dgR54eqBjfqkVkPBQyrKBortfGM0+2DJoUPcGECR+nQ== + dependencies: + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^3.1.4", "@smithy/node-config-provider@^3.1.5": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.5.tgz#983fa77aa6782acb7d4f0facf5ff27f5bd2fac5c" + integrity sha512-dq/oR3/LxgCgizVk7in7FGTm0w9a3qM4mg3IIXLTCHeW3fV+ipssSvBZ2bvEx1+asfQJTyCnVLeYf7JKfd9v3Q== + dependencies: + "@smithy/property-provider" "^3.1.4" + "@smithy/shared-ini-file-loader" "^3.1.5" + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^3.1.4", "@smithy/node-http-handler@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.2.0.tgz#0473f3cfb88779dacdcbafa877dbf74aac4f1c82" + integrity sha512-5TFqaABbiY7uJMKbqR4OARjwI/l4TRoysDJ75pLpVQyO3EcmeloKYwDGyCtgB9WJniFx3BMkmGCB9+j+QiB+Ww== + dependencies: + "@smithy/abort-controller" "^3.1.2" + "@smithy/protocol-http" "^4.1.1" + "@smithy/querystring-builder" "^3.0.4" + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/property-provider@^3.1.3", "@smithy/property-provider@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.4.tgz#2d4f0db3a517d283c2b879f3a01673324955013b" + integrity sha512-BmhefQbfkSl9DeU0/e6k9N4sT5bya5etv2epvqLUz3eGyfRBhtQq60nDkc1WPp4c+KWrzK721cUc/3y0f2psPQ== + dependencies: + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^4.1.0", "@smithy/protocol-http@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.1.tgz#ffd9c3f8ada9b25add3277b7de84c22dc320f1a6" + integrity sha512-Fm5+8LkeIus83Y8jTL1XHsBGP8sPvE1rEVyKf/87kbOPTbzEDMcgOlzcmYXat2h+nC3wwPtRy8hFqtJS71+Wow== + dependencies: + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.4.tgz#1124dfe533e60fd131acffbf78656b8db0a38bbf" + integrity sha512-NEoPAsZPdpfVbF98qm8i5k1XMaRKeEnO47CaL5ja6Y1Z2DgJdwIJuJkTJypKm/IKfp8gc0uimIFLwhml8+/pAw== + dependencies: + "@smithy/types" "^3.4.0" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.4.tgz#2a1e2d7fb4d2ec726fb4b4dac8b63a8e5294bcf4" + integrity sha512-7CHPXffFcakFzhO0OZs/rn6fXlTHrSDdLhIT6/JIk1u2bvwguTL3fMCc1+CfcbXA7TOhjWXu3TcB1EGMqJQwHg== + dependencies: + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.4.tgz#60e07b596b38d316aca453e06bfe33464c622fb5" + integrity sha512-KciDHHKFVTb9A1KlJHBt2F26PBaDtoE23uTZy5qRvPzHPqrooXFi6fmx98lJb3Jl38PuUTqIuCUmmY3pacuMBQ== + dependencies: + "@smithy/types" "^3.4.0" + +"@smithy/shared-ini-file-loader@^3.1.4", "@smithy/shared-ini-file-loader@^3.1.5": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.5.tgz#cc44501343c395fc005ded0396446d86408c062d" + integrity sha512-6jxsJ4NOmY5Du4FD0enYegNJl4zTSuKLiChIMqIkh+LapxiP7lmz5lYUNLE9/4cvA65mbBmtdzZ8yxmcqM5igg== + dependencies: + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^4.1.0": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.1.1.tgz#b47a5cb018ff48d2fcfb846ba6d2d16a08553932" + integrity sha512-SH9J9be81TMBNGCmjhrgMWu4YSpQ3uP1L06u/K9SDrE2YibUix1qxedPCxEQu02At0P0SrYDjvz+y91vLG0KRQ== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.1.1" + "@smithy/types" "^3.4.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-middleware" "^3.0.4" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^3.2.0", "@smithy/smithy-client@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.3.0.tgz#ee15e7b5ec150f6048ee2ef0e3751c6ed38900c3" + integrity sha512-H32nVo8tIX82kB0xI2LBrIcj8jx/3/ITotNLbeG1UL0b3b440YPR/hUvqjFJiaB24pQrMjRbU8CugqH5sV0hkw== + dependencies: + "@smithy/middleware-endpoint" "^3.1.1" + "@smithy/middleware-stack" "^3.0.4" + "@smithy/protocol-http" "^4.1.1" + "@smithy/types" "^3.4.0" + "@smithy/util-stream" "^3.1.4" + tslib "^2.6.2" + +"@smithy/types@^3.3.0", "@smithy/types@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.4.0.tgz#08b7b3d6af30c66fd0682c73c206a5baf8b40a63" + integrity sha512-0shOWSg/pnFXPcsSU8ZbaJ4JBHZJPPzLCJxafJvbMVFo9l1w81CqpgUqjlKGNHVrVB7fhIs+WS82JDTyzaLyLA== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^3.0.3", "@smithy/url-parser@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.4.tgz#d24a0304117dc26b81b8a58a3d5eda79cdb09bee" + integrity sha512-XdXfObA8WrloavJYtDuzoDhJAYc5rOt+FirFmKBRKaihu7QtU/METAxJgSo7uMK6hUkx0vFnqxV75urtRaLkLg== + dependencies: + "@smithy/querystring-parser" "^3.0.4" + "@smithy/types" "^3.4.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.15": + version "3.0.16" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.16.tgz#7d4978a90cee569fdeb6c38c89a09a39371f44d7" + integrity sha512-Os8ddfNBe7hmc5UMWZxygIHCyAqY0aWR8Wnp/aKbti3f8Df/r0J9ttMZIxeMjsFgtVjEryB0q7SGcwBsHk8WEw== + dependencies: + "@smithy/property-provider" "^3.1.4" + "@smithy/smithy-client" "^3.3.0" + "@smithy/types" "^3.4.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.15": + version "3.0.16" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.16.tgz#5747d886720d4f5acdde8fdf8240a6c1bad42f1f" + integrity sha512-rNhFIYRtrOrrhRlj6RL8jWA6/dcwrbGYAmy8+OAHjjzQ6zdzUBB1P+3IuJAgwWN6Y5GxI+mVXlM/pOjaoIgHow== + dependencies: + "@smithy/config-resolver" "^3.0.6" + "@smithy/credential-provider-imds" "^3.2.1" + "@smithy/node-config-provider" "^3.1.5" + "@smithy/property-provider" "^3.1.4" + "@smithy/smithy-client" "^3.3.0" + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.5": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.0.tgz#33395d918a43f0df44a453c6bfa0cf3d35ed1367" + integrity sha512-ilS7/0jcbS2ELdg0fM/4GVvOiuk8/U3bIFXUW25xE1Vh1Ol4DP6vVHQKqM40rCMizCLmJ9UxK+NeJrKlhI3HVA== + dependencies: + "@smithy/node-config-provider" "^3.1.5" + "@smithy/types" "^3.4.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", "@smithy/util-middleware@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.4.tgz#a541edb8d3f2923ab06460ec3f1217c143ae5706" + integrity sha512-uSXHTBhstb1c4nHdmQEdkNMv9LiRNaJ/lWV2U/GO+5F236YFpdPw+hyWI9Zc0Rp9XKzwD9kVZvhZmEgp0UCVnA== + dependencies: + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/util-retry@^3.0.3", "@smithy/util-retry@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.4.tgz#281de3f89458b5e3b86ca92937eb1212bcecf67f" + integrity sha512-JJr6g0tO1qO2tCQyK+n3J18r34ZpvatlFN5ULcLranFIBZPxqoivb77EPyNTVwTGMEvvq2qMnyjm4jMIxjdLFg== + dependencies: + "@smithy/service-error-classification" "^3.0.4" + "@smithy/types" "^3.4.0" + tslib "^2.6.2" + +"@smithy/util-stream@^3.1.3", "@smithy/util-stream@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.4.tgz#f4041a979dfafcbccdc64fa7ee8c376e39c8dc41" + integrity sha512-txU3EIDLhrBZdGfon6E9V6sZz/irYnKFMblz4TLVjyq8hObNHNS2n9a2t7GIrl7d85zgEPhwLE0gANpZsvpsKg== + dependencies: + "@smithy/fetch-http-handler" "^3.2.5" + "@smithy/node-http-handler" "^3.2.0" + "@smithy/types" "^3.4.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.3" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.1.3.tgz#a633257cc65f83cf5714a0f66665070868c3aa91" + integrity sha512-OU0YllH51/CxD8iyr3UHSMwYqTGTyuxFdCMH/0F978t+iDmJseC/ttrWPb22zmYkhkrjqtipzC1xaMuax5QKIA== + dependencies: + "@smithy/abort-controller" "^3.1.2" + "@smithy/types" "^3.4.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 "22.5.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.4.tgz#83f7d1f65bc2ed223bdbf57c7884f1d5a4fa84e8" + integrity sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg== + dependencies: + undici-types "~6.19.2" + +"@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.50" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.50.tgz#8652b34ee7c0e7e2004b3f08192281808d41bf5a" + integrity sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg== + 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.1" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.12.1.tgz#8835d22f7e25b261e624d02a42fe4ade2c689a3c" + integrity sha512-w0URwf7BQb0rD/EuiG12KP0bailHKHP5YVviJG9zw3ykAokL0TuxU2TUqMB7EwZ59bDHYdeTIvjI5m0S7qHfOA== + +acorn-walk@^8.1.1: + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + 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.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +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.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" + integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== + 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.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +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.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.2.tgz#4b67d4b49e69b59893931a032560999e5e4419fe" + integrity sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg== + 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.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== + 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.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + 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.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + 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.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.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +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.12" + resolved "https://registry.yarnpkg.com/tron-format-address/-/tron-format-address-0.1.12.tgz#4c6b6ba717a57424e9d12343b1fce0e466690362" + integrity sha512-dtlfwSZEdWA9Cj3Mqypw/WNhQPlQf5JWT+/H5gYX5Viu+ntIq+7zJvcWCrmcDJ48L0EHt2xzGme2eErW9Y7spQ== + +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.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +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.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" + integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== + +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-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +undici@^6.12.0: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.8.tgz#002d7c8a28f8cc3a44ff33c3d4be4d85e15d40e1" + integrity sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g== + +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 4cc36796184bce0a2813e61b550a8c2f4c84960a Mon Sep 17 00:00:00 2001 From: literallymarvellous Date: Fri, 13 Sep 2024 17:06:10 +0100 Subject: [PATCH 1448/1590] add fee & volume for pear --- dexs/pear-protocol/index.ts | 18 ++++-------------- fees/pear-protocol/index.ts | 33 +++++++++++---------------------- 2 files changed, 15 insertions(+), 36 deletions(-) diff --git a/dexs/pear-protocol/index.ts b/dexs/pear-protocol/index.ts index a3d17756c2..f1543b6367 100644 --- a/dexs/pear-protocol/index.ts +++ b/dexs/pear-protocol/index.ts @@ -8,21 +8,11 @@ const fetch = async ( chainBlocks: any, options: FetchOptions ) => { - const queryParams = new URLSearchParams({ limit: "1", offset: "0" }); // Define limit and offset parameters - const url = `https://api.dune.com/api/v1/query/3779651/results?${queryParams}`; + const url = "https://www.api.pearprotocol.io/v1/isolated/metric"; + const response = await httpGet(url); - const opts = { - method: "GET", - headers: { - "X-DUNE-API-KEY": "aBGbHEVNlpqDCkh02NAfUXucBA7e8ROZ", - }, - }; - - const response = await httpGet(url, opts); - - const res = response.result.rows[0]; - const totalVolume = res.total_volume; - const dailyVolume = 3000000; + const totalVolume = response.totalVolume; + const dailyVolume = response.dailyVolume; return { totalVolume, diff --git a/fees/pear-protocol/index.ts b/fees/pear-protocol/index.ts index 826896bb03..88fc5a72fb 100644 --- a/fees/pear-protocol/index.ts +++ b/fees/pear-protocol/index.ts @@ -1,31 +1,20 @@ -import { Adapter, SimpleAdapter } from "../../adapters/types"; +import { Adapter, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; -const fetch = async ( - timestamp: number, - chainBlocks: any, - options: FetchOptions -) => { - const queryParams = new URLSearchParams({ limit: "1", offset: "0" }); // Define limit and offset parameters - const url = `https://api.dune.com/api/v1/query/3779651/results?${queryParams}`; - - const opts = { - method: "GET", - headers: { - "X-DUNE-API-KEY": "aBGbHEVNlpqDCkh02NAfUXucBA7e8ROZ", - }, - }; - - const response = await httpGet(url, opts); - - const res = response.result.rows[0]; - const totalfees = res.total_fees; - const dailyfees = res.daily_fees; +const fetch = async (timestamp: number) => { + const url = "https://www.api.pearprotocol.io/v1/isolated/metric"; + const response = await httpGet(url); + const totalFees = response.totalFees; + const dailyFees = response.dailyFees; + const dailyRevenue = dailyFees; + const totalRevenue = totalFees; return { dailyFees, totalFees, + dailyRevenue, + totalRevenue, timestamp, }; }; @@ -34,7 +23,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM]: { fetch: fetch, - start: 1718841600, + start: 1715199684, }, }, }; From b94a6453ba58a0ce27025a8c760640e17ea01aee Mon Sep 17 00:00:00 2001 From: daedboi <87483308+daedboi@users.noreply.github.com> Date: Fri, 13 Sep 2024 20:33:02 +0300 Subject: [PATCH 1449/1590] Update subgraphs --- dexs/bmx-freestyle/index.ts | 78 +++++++++++++------------ dexs/bmx/index.ts | 17 ++---- fees/bmx-freestyle.ts | 113 ++++++++++++++++++++++++++++++++++++ fees/bmx.ts | 9 ++- 4 files changed, 163 insertions(+), 54 deletions(-) create mode 100644 fees/bmx-freestyle.ts diff --git a/dexs/bmx-freestyle/index.ts b/dexs/bmx-freestyle/index.ts index 6feafeecf3..b0ffea9888 100644 --- a/dexs/bmx-freestyle/index.ts +++ b/dexs/bmx-freestyle/index.ts @@ -1,12 +1,15 @@ import BigNumber from "bignumber.js"; -import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { + FetchOptions, + FetchResultVolume, + SimpleAdapter, +} from "../../adapters/types"; import request, { gql } from "graphql-request"; import { CHAIN } from "../../helpers/chains"; - const freestyleEndpoints: { [key: string]: string } = { [CHAIN.BASE]: - "https://api.studio.thegraph.com/query/62454/analytics_base_8_2/version/latest", + "https://api-v2.morphex.trade/subgraph/3KhmYXgsM3CM1bbUCX8ejhcxQCtWwpUGhP7p9aDKZ94Z", }; interface IGraphResponseFreestyle { @@ -66,50 +69,53 @@ const freestyleQuery = gql` } `; -const fetchFreestyleVolume = async (timestamp: number, _t: any, options: FetchOptions): Promise => { - const startTime = options.startOfDay; - const endTime = startTime + ONE_DAY_IN_SECONDS; - const response: IGraphResponseFreestyle = await request( - freestyleEndpoints[options.chain], - freestyleQuery, - { - from: String(startTime), - to: String(endTime), - } - ); - - let dailyVolume = new BigNumber(0); - let totalVolume = new BigNumber(0); +const fetchFreestyleVolume = async ( + timestamp: number, + _t: any, + options: FetchOptions +): Promise => { + const startTime = options.startOfDay; + const endTime = startTime + ONE_DAY_IN_SECONDS; + const response: IGraphResponseFreestyle = await request( + freestyleEndpoints[options.chain], + freestyleQuery, + { + from: String(startTime), + to: String(endTime), + } + ); - response.dailyHistories.forEach((data) => { - dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); - }); - response.totalHistories.forEach((data) => { - totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); - }); + let dailyVolume = new BigNumber(0); + let totalVolume = new BigNumber(0); - dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); - totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); + response.dailyHistories.forEach((data) => { + dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)); + }); + response.totalHistories.forEach((data) => { + totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); + }); - const _dailyVolume = toString(dailyVolume); - const _totalVolume = toString(totalVolume); + dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); + totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); + const _dailyVolume = toString(dailyVolume); + const _totalVolume = toString(totalVolume); - return { - timestamp: timestamp, - dailyVolume: _dailyVolume ?? "0", - totalVolume: _totalVolume ?? "0", - }; + return { + timestamp: timestamp, + dailyVolume: _dailyVolume ?? "0", + totalVolume: _totalVolume ?? "0", }; +}; const adapter: SimpleAdapter = { version: 1, adapter: { [CHAIN.BASE]: { fetch: fetchFreestyleVolume, - start: 0 - } - } -} + start: 1714554000, + }, + }, +}; export default adapter; diff --git a/dexs/bmx/index.ts b/dexs/bmx/index.ts index ce071df1b9..cc3ff2ea5c 100644 --- a/dexs/bmx/index.ts +++ b/dexs/bmx/index.ts @@ -1,26 +1,18 @@ import request, { gql } from "graphql-request"; -import { - BreakdownAdapter, - Fetch -} from "../../adapters/types"; +import { BreakdownAdapter, Fetch } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import BigNumber from "bignumber.js"; - const startTimestamps: { [chain: string]: number } = { [CHAIN.BASE]: 1694304000, [CHAIN.MODE]: 1720627435, }; const endpoints: { [key: string]: string } = { [CHAIN.BASE]: - "https://api.studio.thegraph.com/query/71696/bmx-base-stats/version/latest", + "https://api-v2.morphex.trade/subgraph/2vZHkWfx8g27Tri5LkTbhvCExCQcXJ3f28X2BwzFhjf6", [CHAIN.MODE]: - "https://api.studio.thegraph.com/query/42444/bmx-mode-stats/version/latest", -}; -const freestyleEndpoints: { [key: string]: string } = { - [CHAIN.BASE]: - "https://api.studio.thegraph.com/query/62454/analytics_base_8_2/version/latest", + "https://api-v2.morphex.trade/subgraph/8tp7xrDSCuutJ5omjfQKHvkGJpLszqPVWg3pby9XMLEz", }; const historicalDataSwap = gql` @@ -154,7 +146,6 @@ const getFetch = }; }; - const adapter: BreakdownAdapter = { breakdown: { swap: Object.keys(endpoints).reduce((acc, chain) => { @@ -166,7 +157,7 @@ const adapter: BreakdownAdapter = { }, }; }, {}), - "derivatives": Object.keys(endpoints).reduce((acc, chain) => { + derivatives: Object.keys(endpoints).reduce((acc, chain) => { return { ...acc, [chain]: { diff --git a/fees/bmx-freestyle.ts b/fees/bmx-freestyle.ts new file mode 100644 index 0000000000..925280474a --- /dev/null +++ b/fees/bmx-freestyle.ts @@ -0,0 +1,113 @@ +import BigNumber from "bignumber.js"; +import request, { gql } from "graphql-request"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const endpoint = + "https://api-v2.morphex.trade/subgraph/3KhmYXgsM3CM1bbUCX8ejhcxQCtWwpUGhP7p9aDKZ94Z"; + +const query = gql` + query stats($from: String!, $to: String!) { + dailyHistories( + where: { + timestamp_gte: $from + timestamp_lte: $to + accountSource: "0x6D63921D8203044f6AbaD8F346d3AEa9A2719dDD" + } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + totalHistories( + where: { accountSource: "0x6D63921D8203044f6AbaD8F346d3AEa9A2719dDD" } + ) { + timestamp + platformFee + accountSource + tradeVolume + } + } +`; + +interface IGraphResponse { + dailyHistories: Array<{ + tiemstamp: string; + platformFee: string; + accountSource: string; + tradeVolume: string; + }>; + totalHistories: Array<{ + tiemstamp: string; + platformFee: string; + accountSource: string; + tradeVolume: BigNumber; + }>; +} + +const toString = (x: BigNumber) => { + if (x.isEqualTo(0)) return undefined; + return x.toString(); +}; + +const fetchVolume = async ({ endTimestamp, startTimestamp }: FetchOptions) => { + const response: IGraphResponse = await request(endpoint, query, { + from: String(startTimestamp), + to: String(endTimestamp), + }); + + // Merging both responses + let dailyFees = new BigNumber(0); + response.dailyHistories.forEach((data) => { + dailyFees = dailyFees.plus(new BigNumber(data.platformFee)); + }); + + let totalFees = new BigNumber(0); + response.totalHistories.forEach((data) => { + totalFees = totalFees.plus(new BigNumber(data.platformFee)); + }); + + dailyFees = dailyFees.dividedBy(new BigNumber(1e18)); + totalFees = totalFees.dividedBy(new BigNumber(1e18)); + + const _dailyFees = toString(dailyFees); + const _totalFees = toString(totalFees); + + const dailyUserFees = _dailyFees; + const dailyRevenue = _dailyFees; + const dailyProtocolRevenue = "0"; + const dailyHoldersRevenue = _dailyFees; + const dailySupplySideRevenue = "0"; + + const totalUserFees = _totalFees; + const totalRevenue = _totalFees; + const totalProtocolRevenue = "0"; + const totalSupplySideRevenue = "0"; + + return { + dailyFees: _dailyFees ?? "0", + totalFees: _totalFees ?? "0", + + dailyUserFees: dailyUserFees ?? "0", + dailyRevenue: dailyRevenue ?? "0", + dailyProtocolRevenue: dailyProtocolRevenue ?? "0", + dailyHoldersRevenue: dailyHoldersRevenue ?? "0", + dailySupplySideRevenue: dailySupplySideRevenue ?? "0", + totalUserFees: totalUserFees ?? "0", + totalRevenue: totalRevenue ?? "0", + totalProtocolRevenue: totalProtocolRevenue ?? "0", + totalSupplySideRevenue: totalSupplySideRevenue ?? "0", + }; +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.BASE]: { + fetch: fetchVolume, + start: 1714554000, + }, + }, +}; +export default adapter; diff --git a/fees/bmx.ts b/fees/bmx.ts index 42a7f97c46..b359527d08 100644 --- a/fees/bmx.ts +++ b/fees/bmx.ts @@ -1,14 +1,14 @@ import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; -import type { FetchV2 } from "../adapters/types" +import type { FetchV2 } from "../adapters/types"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints: { [key: string]: string } = { [CHAIN.BASE]: - "https://api.studio.thegraph.com/query/71696/bmx-base-stats/version/latest", + "https://api-v2.morphex.trade/subgraph/2vZHkWfx8g27Tri5LkTbhvCExCQcXJ3f28X2BwzFhjf6", [CHAIN.MODE]: - "https://api.studio.thegraph.com/query/42444/bmx-mode-stats/version/latest", + "https://api-v2.morphex.trade/subgraph/8tp7xrDSCuutJ5omjfQKHvkGJpLszqPVWg3pby9XMLEz", }; const methodology = { @@ -48,7 +48,6 @@ const graphs: FetchV2 = async ({ chain, endTimestamp }) => { const finalUserFee = userFee / 1e30; return { - endTimestamp, dailyFees: finalDailyFee.toString(), dailyUserFees: finalUserFee.toString(), dailyRevenue: (finalDailyFee * 0.4).toString(), @@ -73,7 +72,7 @@ const adapter: Adapter = { meta: { methodology, }, - } + }, }, }; From 56862f1227d19bb8b6a030a936e14dcef1b58f7c Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Sat, 14 Sep 2024 09:23:27 +0800 Subject: [PATCH 1450/1590] fix pool total decimals --- fees/solv-finance/index.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 11a7ff7acf..416459dc32 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -62,6 +62,9 @@ const fetch: FetchV2 = async (options) => { }; async function protocol(options: FetchOptions, contracts: any): Promise { + if (!contracts[options.chain]["protocolFees"]) { + return options.createBalances(); + } const dailyFees = await addTokensReceived({ options, targets: contracts[options.chain]["protocolFees"].address, @@ -72,6 +75,9 @@ async function protocol(options: FetchOptions, contracts: any): Promise { + if (!contracts[options.chain]["poolFees"]) { + return options.createBalances(); + } const pools = await getGraphData(contracts[options.chain]["poolFees"], options.chain); const concretes = await concrete(pools, options); @@ -117,7 +123,6 @@ async function pool(options: FetchOptions, contracts: any): Promise { const prices = (await getPrices(poolBaseInfos.map((index: { currency: string; }) => `${options.chain}:${index.currency.toLowerCase()}`), toTimestamp)); - let dailyFeeUsd = 0; const dailyFees = options.createBalances(); for (let i = 0; i < pools.length; i++) { const poolNav = poolNavs[i]; @@ -127,6 +132,8 @@ async function pool(options: FetchOptions, contracts: any): Promise { const token = `${options.chain}:${poolBaseInfo.currency}`; const total = BigNumber(totalValue) + .dividedBy(BigNumber(10).pow(18)) + .times(BigNumber(10).pow(priceData.decimals)) .times( BigNumber(poolNav).dividedBy(BigNumber(10).pow(priceData.decimals)) ); From b9232455f404c376009795014027dc4aacf727c8 Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Sat, 14 Sep 2024 09:41:04 +0800 Subject: [PATCH 1451/1590] fix timestamp decimals --- fees/solv-finance/index.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 416459dc32..7fc740bad1 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -81,8 +81,8 @@ async function pool(options: FetchOptions, contracts: any): Promise { const pools = await getGraphData(contracts[options.chain]["poolFees"], options.chain); const concretes = await concrete(pools, options); - const fromTimestamp = getTimestampAtStartOfDayUTC(options.fromTimestamp); - const toTimestamp = getTimestampAtStartOfDayUTC(options.toTimestamp); + const fromTimestamp = getTimestampAtStartOfDayUTC(options.fromTimestamp) * 1000; + const toTimestamp = getTimestampAtStartOfDayUTC(options.toTimestamp) * 1000; let poolNavs: any[] = []; for (const pool of pools) { @@ -121,21 +121,24 @@ async function pool(options: FetchOptions, contracts: any): Promise { })), }); - const prices = (await getPrices(poolBaseInfos.map((index: { currency: string; }) => `${options.chain}:${index.currency.toLowerCase()}`), toTimestamp)); + const poolDecimalList = await options.api.multiCall({ + abi: "uint8:decimals", + calls: poolBaseInfos.map(i => i[1]), + }) const dailyFees = options.createBalances(); for (let i = 0; i < pools.length; i++) { const poolNav = poolNavs[i]; const poolBaseInfo = poolBaseInfos[i]; const totalValue = totalValues[i]; - const priceData = prices[`${options.chain}:${poolBaseInfo.currency.toLowerCase()}`]; + const decimals = poolDecimalList[i]; const token = `${options.chain}:${poolBaseInfo.currency}`; const total = BigNumber(totalValue) .dividedBy(BigNumber(10).pow(18)) - .times(BigNumber(10).pow(priceData.decimals)) + .times(BigNumber(10).pow(decimals)) .times( - BigNumber(poolNav).dividedBy(BigNumber(10).pow(priceData.decimals)) + BigNumber(poolNav).dividedBy(BigNumber(10).pow(decimals)) ); dailyFees.addBalances({ [token]: total.toNumber() }); From 158b7670db90baf29209da358cc9cc6d309077c6 Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Sat, 14 Sep 2024 11:11:05 +0800 Subject: [PATCH 1452/1590] fix timesatmp edit --- fees/solv-finance/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 7fc740bad1..3e76946499 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -81,12 +81,12 @@ async function pool(options: FetchOptions, contracts: any): Promise { const pools = await getGraphData(contracts[options.chain]["poolFees"], options.chain); const concretes = await concrete(pools, options); - const fromTimestamp = getTimestampAtStartOfDayUTC(options.fromTimestamp) * 1000; - const toTimestamp = getTimestampAtStartOfDayUTC(options.toTimestamp) * 1000; + const fromTimestamp = getTimestampAtStartOfDayUTC(options.fromTimestamp); + const toTimestamp = getTimestampAtStartOfDayUTC(options.toTimestamp); let poolNavs: any[] = []; for (const pool of pools) { - const [yesterdayNav, todayNav] = await options.api.multiCall({ + const [todayNav, yesterdayNav] = await options.api.multiCall({ calls: [{ target: pool.navOracle, params: [pool.poolId, toTimestamp], From 1ab09a07ee22c074d95ac092c6fb9297963da5bf Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 15 Sep 2024 05:28:31 +0000 Subject: [PATCH 1453/1590] fix error fluid --- fees/fluid/index.ts | 74 ++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index ec9e88c7b4..552399383e 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -4,7 +4,7 @@ import BigNumber from "bignumber.js"; import { Adapter, FetchOptions, FetchV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const abis = { +const abis: any = { revenueResolver: { calcRevenueSimulatedTime: "function calcRevenueSimulatedTime(uint256 totalAmounts_,uint256 exchangePricesAndConfig_,uint256 liquidityTokenBalance_,uint256 simulatedTimestamp_) public view returns (uint256 revenueAmount_)", @@ -205,12 +205,13 @@ const vaultResolver = async (api: sdk.ChainApi) => { return await api.multiCall({ abi: abi.getVaultEntireData, calls: vaults.map((vault) => ({ target: address, params: [vault] })), + permitFailure: true, }); }, }; }; -const config = { +const config: any = { liquidity: "0x52aa899454998be5b000ad077a46bbe360f4e497", ethereum: { dataStartTimestamp: 1708246655, // ~ when liquidity resolver was deployed @@ -337,15 +338,17 @@ const getFeesFromTo = async ( for (const vaultOperate of vaultOperates) { borrowBalance = borrowBalance.plus(new BigNumber(vaultOperate[3])); } + try { + const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = vaultEntiresDataTo[index]; - const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = vaultEntiresDataTo[index]; + dailyFees.add( + borrowToken, + new BigNumber(totalSupplyAndBorrowTo.totalBorrowVault).minus( + borrowBalance + ) + ); + } catch (ex) {} - dailyFees.add( - borrowToken, - new BigNumber(totalSupplyAndBorrowTo.totalBorrowVault).minus( - borrowBalance - ) - ); } return dailyFees; @@ -581,33 +584,36 @@ const getVaultMagnifierUncollectedRevenueAt = async ( ).getVaultEntireData(vaults) as any[]; for (const [index, _vault] of vaults.entries()) { - const { totalSupplyAndBorrow , constantVariables} = vaultEntiresDataFrom[index]; - const totalSupplyVault = new BigNumber( - totalSupplyAndBorrow.totalSupplyVault - ); - const totalBorrowVault = new BigNumber( - totalSupplyAndBorrow.totalBorrowVault - ); - const totalSupplyLiquidity = new BigNumber( - totalSupplyAndBorrow.totalSupplyLiquidity - ); - const totalBorrowLiquidity = new BigNumber( - totalSupplyAndBorrow.totalBorrowLiquidity - ); + try { + const { totalSupplyAndBorrow , constantVariables} = vaultEntiresDataFrom[index]; + const totalSupplyVault = new BigNumber( + totalSupplyAndBorrow.totalSupplyVault + ); + const totalBorrowVault = new BigNumber( + totalSupplyAndBorrow.totalBorrowVault + ); + const totalSupplyLiquidity = new BigNumber( + totalSupplyAndBorrow.totalSupplyLiquidity + ); + const totalBorrowLiquidity = new BigNumber( + totalSupplyAndBorrow.totalBorrowLiquidity + ); - // if more supply at liquidity than at vault -> uncollected profit - const supplyTokenProfit = totalSupplyLiquidity.gt(totalSupplyVault) - ? totalSupplyLiquidity.minus(totalSupplyVault) - : new BigNumber(0); - // if less borrow at liquidity than at vault -> profit - const borrowTokenProfit = totalBorrowVault.gt(totalBorrowLiquidity) - ? totalBorrowVault.minus(totalBorrowLiquidity) - : new BigNumber(0); - - values.add(constantVariables.supplyToken, supplyTokenProfit); - values.add(constantVariables.borrowToken, borrowTokenProfit); + // if more supply at liquidity than at vault -> uncollected profit + const supplyTokenProfit = totalSupplyLiquidity.gt(totalSupplyVault) + ? totalSupplyLiquidity.minus(totalSupplyVault) + : new BigNumber(0); + // if less borrow at liquidity than at vault -> profit + const borrowTokenProfit = totalBorrowVault.gt(totalBorrowLiquidity) + ? totalBorrowVault.minus(totalBorrowLiquidity) + : new BigNumber(0); + + values.add(constantVariables.supplyToken, supplyTokenProfit); + values.add(constantVariables.borrowToken, borrowTokenProfit); + } catch (ex) { + // when vault did not exist yet, getVaultEntireData() will revert. at from block then we start from 0 balance. + } } - return values; }; // yarn test fees fluid From f79ad7351926e603086fbb36b0f762bb9b8e1d1e Mon Sep 17 00:00:00 2001 From: dtmkeng <0xgnek@gmail.com> Date: Sun, 15 Sep 2024 12:34:42 +0700 Subject: [PATCH 1454/1590] Delete yarn.lock --- yarn.lock | 2438 ----------------------------------------------------- 1 file changed, 2438 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 5e116f6aa0..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2438 +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.645.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.645.0.tgz#a0d201248ee711e79f3e515d870b02547a652102" - integrity sha512-RjT/mfNv4yr1uv/+aEXgSIxC5EB+yHPSU7hH0KZOZrvZEFASLl0i4FeoHzbMEOH5KdKGAi0uu3zRP3D1y45sKg== - 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.645.0" - "@aws-sdk/client-sts" "3.645.0" - "@aws-sdk/core" "3.635.0" - "@aws-sdk/credential-provider-node" "3.645.0" - "@aws-sdk/middleware-bucket-endpoint" "3.620.0" - "@aws-sdk/middleware-expect-continue" "3.620.0" - "@aws-sdk/middleware-flexible-checksums" "3.620.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-location-constraint" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-sdk-s3" "3.635.0" - "@aws-sdk/middleware-ssec" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.645.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/signature-v4-multi-region" "3.635.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.645.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@aws-sdk/xml-builder" "3.609.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.4.0" - "@smithy/eventstream-serde-browser" "^3.0.6" - "@smithy/eventstream-serde-config-resolver" "^3.0.3" - "@smithy/eventstream-serde-node" "^3.0.5" - "@smithy/fetch-http-handler" "^3.2.4" - "@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.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.15" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@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.15" - "@smithy/util-defaults-mode-node" "^3.0.15" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-stream" "^3.1.3" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.1.2" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.645.0": - version "3.645.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.645.0.tgz#3711a8c589f1864d18a1c08ae1bf2d5257c8964b" - integrity sha512-X9ULtdk3cO+1ysurEkJ1MSnu6U00qodXx+IVual+1jXX4RYY1WmQmfo7uDKf6FFkz7wW1DAqU+GJIBNQr0YH8A== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.635.0" - "@aws-sdk/credential-provider-node" "3.645.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.645.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.645.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.4.0" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.15" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@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.15" - "@smithy/util-defaults-mode-node" "^3.0.15" - "@smithy/util-endpoints" "^2.0.5" - "@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.645.0": - version "3.645.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.645.0.tgz#5e598ce4216ee8e014af8530b7b1c87db06a57aa" - integrity sha512-2rc8TjnsNddOeKQ/pfNN7deNvGLXAeKeYtHtGDAiM2qfTKxd2sNcAsZ+JCDLyshuD4xLM5fpUyR0X8As9EAouQ== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.635.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.645.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.645.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.4.0" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.15" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@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.15" - "@smithy/util-defaults-mode-node" "^3.0.15" - "@smithy/util-endpoints" "^2.0.5" - "@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.645.0": - version "3.645.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.645.0.tgz#0cd5b022c7ec360b3bc4134c8ce545322c2d09d7" - integrity sha512-6azXYtvtnAsPf2ShN9vKynIYVcJOpo6IoVmoMAVgNaBJyllP+s/RORzranYZzckqfmrudSxtct4rVapjLWuAMg== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.645.0" - "@aws-sdk/core" "3.635.0" - "@aws-sdk/credential-provider-node" "3.645.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.645.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.645.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.4.0" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.15" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@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.15" - "@smithy/util-defaults-mode-node" "^3.0.15" - "@smithy/util-endpoints" "^2.0.5" - "@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.635.0": - version "3.635.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.635.0.tgz#74b7d0d7fa3aa39f87ea5cf4e6c97d4d84f4ef14" - integrity sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg== - dependencies: - "@smithy/core" "^2.4.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - "@smithy/util-middleware" "^3.0.3" - fast-xml-parser "4.4.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.620.1": - version "3.620.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz#d4692c49a65ebc11dae3f7f8b053fee9268a953c" - integrity sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg== - 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.635.0": - version "3.635.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz#083439af1336693049958e4b61695e4712b30fd4" - integrity sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.1.3" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.645.0": - version "3.645.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.645.0.tgz#1226348cc4e3e5a9ab2ceb5357d6539b5598d29f" - integrity sha512-LlZW0qwUwNlTaAIDCNpLbPsyXvS42pRIwF92fgtCQedmdnpN3XRUC6hcwSYI7Xru3GGKp3RnceOvsdOaRJORsw== - dependencies: - "@aws-sdk/credential-provider-env" "3.620.1" - "@aws-sdk/credential-provider-http" "3.635.0" - "@aws-sdk/credential-provider-process" "3.620.1" - "@aws-sdk/credential-provider-sso" "3.645.0" - "@aws-sdk/credential-provider-web-identity" "3.621.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.645.0": - version "3.645.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.645.0.tgz#1d8df057040ab8529dacb8f1fc6b210a441e6680" - integrity sha512-eGFFuNvLeXjCJf5OCIuSEflxUowmK+bCS+lK4M8ofsYOEGAivdx7C0UPxNjHpvM8wKd8vpMl5phTeS9BWX5jMQ== - dependencies: - "@aws-sdk/credential-provider-env" "3.620.1" - "@aws-sdk/credential-provider-http" "3.635.0" - "@aws-sdk/credential-provider-ini" "3.645.0" - "@aws-sdk/credential-provider-process" "3.620.1" - "@aws-sdk/credential-provider-sso" "3.645.0" - "@aws-sdk/credential-provider-web-identity" "3.621.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.620.1": - version "3.620.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz#10387cf85400420bb4bbda9cc56937dcc6d6d0ee" - integrity sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.645.0": - version "3.645.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.645.0.tgz#09933f31a43bfc80de1faca522fc1090721eea95" - integrity sha512-d6XuChAl5NCsCrUexc6AFb4efPmb9+66iwPylKG+iMTMYgO1ackfy1Q2/f35jdn0jolkPkzKsVyfzsEVoID6ew== - dependencies: - "@aws-sdk/client-sso" "3.645.0" - "@aws-sdk/token-providers" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz#b25878c0a05dad60cd5f91e7e5a31a145c2f14be" - integrity sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w== - 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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz#c5dc0e98b6209a91479cad6c2c74fbc5a3429fab" - integrity sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz#6a362c0f0696dc6749108a33de9998e0fa6b50ec" - integrity sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz#42cd48cdc0ad9639545be000bf537969210ce8c5" - integrity sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA== - 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.1.0" - "@smithy/types" "^3.3.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" - integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@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.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" - integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.635.0": - version "3.635.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz#be7f61c6033a803cde59ec5a29db266b42fdbc01" - integrity sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw== - dependencies: - "@aws-sdk/core" "3.635.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/core" "^2.4.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/smithy-client" "^3.2.0" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-stream" "^3.1.3" - "@smithy/util-utf8" "^3.0.0" - 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.645.0": - version "3.645.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.645.0.tgz#a6b5792a1f617c749839734213a8e7f920631245" - integrity sha512-NpTAtqWK+49lRuxfz7st9for80r4NriCMK0RfdJSoPFVntjsSQiQ7+2nW2XL05uVY633e9DvCAw8YatX3zd1mw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.645.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" - integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== - dependencies: - "@aws-sdk/types" "3.609.0" - "@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" - -"@aws-sdk/signature-v4-multi-region@3.635.0": - version "3.635.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz#76e8eb66bfd9b661b4f9768b18aca2e04dd781a2" - integrity sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.635.0" - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" - integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@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.645.0": - version "3.645.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.645.0.tgz#43dba3d4b4cc9762d590903ef6bd8947aba68e1e" - integrity sha512-Oe+xaU4ic4PB1k3pb5VTC1/MWES13IlgpaQw01bVHGfwP6Yv6zZOxizRzca2Y3E+AyR+nKD7vXtHRY+w3bi4bg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - "@smithy/util-endpoints" "^2.0.5" - 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.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" - integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/node-config-provider" "^3.1.4" - "@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.83" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.83.tgz#f0f412410d7a99ee7b864887278e710a5479a686" - integrity sha512-JojVjzBR73GoVmyuC6gE7AfMgpWvHm2OEKEMIai53b7nkI91oFAVYu1PoX/YD+wTbOPhZwYWWhdVXR5hYPnNRQ== - 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.15.0" - resolved "https://registry.yarnpkg.com/@elastic/elasticsearch/-/elasticsearch-8.15.0.tgz#cb29b3ae33203c545d435cf3dc4b557c8b4961d5" - integrity sha512-mG90EMdTDoT6GFSdqpUAhWK9LGuiJo6tOWqs0Usd/t15mPQDj7ZqHXfCBqNkASZpwPZpbAYVjd57S6nbUBINCg== - dependencies: - "@elastic/transport" "^8.7.0" - tslib "^2.4.0" - -"@elastic/transport@^8.7.0": - version "8.7.1" - resolved "https://registry.yarnpkg.com/@elastic/transport/-/transport-8.7.1.tgz#b380f0b90ee98ff84892c0958b94477cfbf84a05" - integrity sha512-2eeMVkz57Ayxv+UAZkIKzzrUu7nm96jr3+N3kLfbBqALYe2jwDpLr9pR0jc/x9HyJKAM909YGaNlHFDZeb0+Mw== - 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.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.2.tgz#95ac6b07480d0d2afbcface3f0f1ddc3ae6373d7" - integrity sha512-b5g+PNujlfqIib9BjkNB108NyO5aZM/RXjfOCXRCqXQ1oPnIkfvdORrztbGgCZdPe/BN/MKDlrGA7PafKPM2jw== - dependencies: - "@smithy/types" "^3.4.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.5", "@smithy/config-resolver@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.6.tgz#5906cb8fcbadb784930c55a578589aaa6650a52f" - integrity sha512-j7HuVNoRd8EhcFp0MzcUb4fG40C7BcyshH+fAd3Jhd8bINNFvEQYBrZoS/SK6Pun9WPlfoI8uuU2SMz8DsEGlA== - dependencies: - "@smithy/node-config-provider" "^3.1.5" - "@smithy/types" "^3.4.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.4" - tslib "^2.6.2" - -"@smithy/core@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.4.1.tgz#6694d79ba6e4a185a0baa731ba6584420291521e" - integrity sha512-7cts7/Oni7aCHebHGiBeWoz5z+vmH+Vx2Z/UW3XtXMslcxI3PEwBZxNinepwZjixS3n12fPc247PHWmjU7ndsQ== - dependencies: - "@smithy/middleware-endpoint" "^3.1.1" - "@smithy/middleware-retry" "^3.0.16" - "@smithy/middleware-serde" "^3.0.4" - "@smithy/protocol-http" "^4.1.1" - "@smithy/smithy-client" "^3.3.0" - "@smithy/types" "^3.4.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-middleware" "^3.0.4" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.2.0", "@smithy/credential-provider-imds@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.1.tgz#f5871549d01db304c3d5c52dd6591652ebfdfa9e" - integrity sha512-4z/oTWpRF2TqQI3aCM89/PWu3kim58XU4kOCTtuTJnoaS4KT95cPWMxbQfTN2vzcOe96SOKO8QouQW/+ESB1fQ== - dependencies: - "@smithy/node-config-provider" "^3.1.5" - "@smithy/property-provider" "^3.1.4" - "@smithy/types" "^3.4.0" - "@smithy/url-parser" "^3.0.4" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.3.tgz#a1ac71108c349b6f156ff91dbbf38b4b20d95aee" - integrity sha512-mKBrmhg6Zd3j07G9dkKTGmrU7pdJGTNz8LbZtIOR3QoodS5yDNqEqoXU4Eg38snZcnCAh7NPBsw5ndxtJPLiCg== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^3.4.0" - "@smithy/util-hex-encoding" "^3.0.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^3.0.6": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.7.tgz#0448ada47cf7e99abdfefe980090ea2b8abbff8d" - integrity sha512-UC4RQqyM8B0g5cX/xmWtsNgSBmZ13HrzCqoe5Ulcz6R462/egbIdfTXnayik7jkjvwOrCPL1N11Q9S+n68jPLA== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.6" - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^3.0.3": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.4.tgz#1ef67a2f78da7b30ec728a8863933fa2d088330b" - integrity sha512-saIs5rtAMpifqL7u7nc5YeE/6gkenzXpSz5NwEyhIesRWtHK+zEuYn9KY8SArZEbPSHyGxvvgKk1z86VzfUGHw== - dependencies: - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^3.0.5": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.6.tgz#d04c31f8fe4aab29f2edbff8ea6519fe50405e43" - integrity sha512-gRKGBdZah3EjZZgWcsTpShq4cZ4Q4JTTe1OPob+jrftmbYj6CvpeydZbH0roO5SvBG8SI3aBZIet9TGN3zUxUw== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.6" - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.6.tgz#d233d08bf4b27d9bf4b1e727d866694470966797" - integrity sha512-1jvXd4sFG+zKaL6WqrJXpL6E+oAMafuM5GPd4qF0+ccenZTX3DZugoCCjlooQyTh+TZho2FpdVYUf5J/bB/j6Q== - dependencies: - "@smithy/eventstream-codec" "^3.1.3" - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^3.2.4", "@smithy/fetch-http-handler@^3.2.5": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.5.tgz#c9a6c6c35895ffdfd98b992ecebb1344418d1932" - integrity sha512-DjRtGmK8pKQMIo9+JlAKUt14Z448bg8nAN04yKIvlrrpmpRSG57s5d2Y83npks1r4gPtTRNbAFdQCoj9l3P2KQ== - dependencies: - "@smithy/protocol-http" "^4.1.1" - "@smithy/querystring-builder" "^3.0.4" - "@smithy/types" "^3.4.0" - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^3.1.2": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.3.tgz#6649bf55590fc0489e0d91d310017b8359c0d7ae" - integrity sha512-im9wAU9mANWW0OP0YGqwX3lw0nXG0ngyIcKQ8V/MUz1r7A6uO2lpPqKmAsH4VPGNLP2JPUhj4aW/m5UKkxX/IA== - dependencies: - "@smithy/chunked-blob-reader" "^3.0.0" - "@smithy/chunked-blob-reader-native" "^3.0.0" - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/hash-node@^3.0.3": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.4.tgz#4d1770a73698292997b9ff27435ed4d51a39e758" - integrity sha512-6FgTVqEfCr9z/7+Em8BwSkJKA2y3krf1em134x3yr2NHWVCo2KYI8tcA53cjeO47y41jwF84ntsEE0Pe6pNKlg== - dependencies: - "@smithy/types" "^3.4.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.3" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.3.tgz#dfd3efb60a2bb9fe6c3131dd73cb8d0c5ecc1b4b" - integrity sha512-Tz/eTlo1ffqYn+19VaMjDDbmEWqYe4DW1PAWaS8HvgRdO6/k9hxNPt8Wv5laXoilxE20YzKugiHvxHyO6J7kGA== - dependencies: - "@smithy/types" "^3.4.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^3.0.3": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.4.tgz#aabb949b6aa15e38d8054b2397c143ef32efe14a" - integrity sha512-MJBUrojC4SEXi9aJcnNOE3oNAuYNphgCGFXscaCj2TA/59BTcXhzHACP8jnnEU3n4yir/NSLKzxqez0T4x4tjA== - dependencies: - "@smithy/types" "^3.4.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.4" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.4.tgz#6a8d40cf9e51c65fc6074aed977acd23ff4f6589" - integrity sha512-qSlqr/+hybufIJgxQW2gYzGE6ywfOxkjjJVojbbmv4MtxfdDFfzRew+NOIOXcYgazW0f8OYBTIKsmNsjxpvnng== - dependencies: - "@smithy/types" "^3.4.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^3.0.5": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.6.tgz#4837dafcfc085f1b9523d0784d05b87b569ad4ce" - integrity sha512-AFyHCfe8rumkJkz+hCOVJmBagNBj05KypyDwDElA4TgMSA4eYDZRjVePFZuyABrJZFDc7uVj3dpFIDCEhf59SA== - dependencies: - "@smithy/protocol-http" "^4.1.1" - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.1.0", "@smithy/middleware-endpoint@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.1.tgz#d718719e45e8f7087cf0d9bbfff5fc6364c5fde0" - integrity sha512-Irv+soW8NKluAtFSEsF8O3iGyLxa5oOevJb/e1yNacV9H7JP/yHyJuKST5YY2ORS1+W34VR8EuUrOF+K29Pl4g== - dependencies: - "@smithy/middleware-serde" "^3.0.4" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/shared-ini-file-loader" "^3.1.5" - "@smithy/types" "^3.4.0" - "@smithy/url-parser" "^3.0.4" - "@smithy/util-middleware" "^3.0.4" - tslib "^2.6.2" - -"@smithy/middleware-retry@^3.0.15", "@smithy/middleware-retry@^3.0.16": - version "3.0.16" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.16.tgz#aca6099a2e73c9be0c7a49eccbca5d1d73eaadf3" - integrity sha512-08kI36p1yB4CWO3Qi+UQxjzobt8iQJpnruF0K5BkbZmA/N/sJ51A1JJGJ36GgcbFyPfWw2FU48S5ZoqXt0h0jw== - dependencies: - "@smithy/node-config-provider" "^3.1.5" - "@smithy/protocol-http" "^4.1.1" - "@smithy/service-error-classification" "^3.0.4" - "@smithy/smithy-client" "^3.3.0" - "@smithy/types" "^3.4.0" - "@smithy/util-middleware" "^3.0.4" - "@smithy/util-retry" "^3.0.4" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^3.0.3", "@smithy/middleware-serde@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.4.tgz#86f0d3c2bf17334b165be96f504a37357a70f576" - integrity sha512-1lPDB2O6IJ50Ucxgn7XrvZXbbuI48HmPCcMTuSoXT1lDzuTUfIuBjgAjpD8YLVMfnrjdepi/q45556LA51Pubw== - dependencies: - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^3.0.3", "@smithy/middleware-stack@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.4.tgz#85b98320fff51457e9720b2c17e8f3f97c39a88c" - integrity sha512-sLMRjtMCqtVcrOqaOZ10SUnlFE25BSlmLsi4bRSGFD7dgR54eqBjfqkVkPBQyrKBortfGM0+2DJoUPcGECR+nQ== - dependencies: - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^3.1.4", "@smithy/node-config-provider@^3.1.5": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.5.tgz#983fa77aa6782acb7d4f0facf5ff27f5bd2fac5c" - integrity sha512-dq/oR3/LxgCgizVk7in7FGTm0w9a3qM4mg3IIXLTCHeW3fV+ipssSvBZ2bvEx1+asfQJTyCnVLeYf7JKfd9v3Q== - dependencies: - "@smithy/property-provider" "^3.1.4" - "@smithy/shared-ini-file-loader" "^3.1.5" - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^3.1.4", "@smithy/node-http-handler@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.2.0.tgz#0473f3cfb88779dacdcbafa877dbf74aac4f1c82" - integrity sha512-5TFqaABbiY7uJMKbqR4OARjwI/l4TRoysDJ75pLpVQyO3EcmeloKYwDGyCtgB9WJniFx3BMkmGCB9+j+QiB+Ww== - dependencies: - "@smithy/abort-controller" "^3.1.2" - "@smithy/protocol-http" "^4.1.1" - "@smithy/querystring-builder" "^3.0.4" - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/property-provider@^3.1.3", "@smithy/property-provider@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.4.tgz#2d4f0db3a517d283c2b879f3a01673324955013b" - integrity sha512-BmhefQbfkSl9DeU0/e6k9N4sT5bya5etv2epvqLUz3eGyfRBhtQq60nDkc1WPp4c+KWrzK721cUc/3y0f2psPQ== - dependencies: - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^4.1.0", "@smithy/protocol-http@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.1.tgz#ffd9c3f8ada9b25add3277b7de84c22dc320f1a6" - integrity sha512-Fm5+8LkeIus83Y8jTL1XHsBGP8sPvE1rEVyKf/87kbOPTbzEDMcgOlzcmYXat2h+nC3wwPtRy8hFqtJS71+Wow== - dependencies: - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.4.tgz#1124dfe533e60fd131acffbf78656b8db0a38bbf" - integrity sha512-NEoPAsZPdpfVbF98qm8i5k1XMaRKeEnO47CaL5ja6Y1Z2DgJdwIJuJkTJypKm/IKfp8gc0uimIFLwhml8+/pAw== - dependencies: - "@smithy/types" "^3.4.0" - "@smithy/util-uri-escape" "^3.0.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.4.tgz#2a1e2d7fb4d2ec726fb4b4dac8b63a8e5294bcf4" - integrity sha512-7CHPXffFcakFzhO0OZs/rn6fXlTHrSDdLhIT6/JIk1u2bvwguTL3fMCc1+CfcbXA7TOhjWXu3TcB1EGMqJQwHg== - dependencies: - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.4.tgz#60e07b596b38d316aca453e06bfe33464c622fb5" - integrity sha512-KciDHHKFVTb9A1KlJHBt2F26PBaDtoE23uTZy5qRvPzHPqrooXFi6fmx98lJb3Jl38PuUTqIuCUmmY3pacuMBQ== - dependencies: - "@smithy/types" "^3.4.0" - -"@smithy/shared-ini-file-loader@^3.1.4", "@smithy/shared-ini-file-loader@^3.1.5": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.5.tgz#cc44501343c395fc005ded0396446d86408c062d" - integrity sha512-6jxsJ4NOmY5Du4FD0enYegNJl4zTSuKLiChIMqIkh+LapxiP7lmz5lYUNLE9/4cvA65mbBmtdzZ8yxmcqM5igg== - dependencies: - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^4.1.0": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.1.1.tgz#b47a5cb018ff48d2fcfb846ba6d2d16a08553932" - integrity sha512-SH9J9be81TMBNGCmjhrgMWu4YSpQ3uP1L06u/K9SDrE2YibUix1qxedPCxEQu02At0P0SrYDjvz+y91vLG0KRQ== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.1.1" - "@smithy/types" "^3.4.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.4" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^3.2.0", "@smithy/smithy-client@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.3.0.tgz#ee15e7b5ec150f6048ee2ef0e3751c6ed38900c3" - integrity sha512-H32nVo8tIX82kB0xI2LBrIcj8jx/3/ITotNLbeG1UL0b3b440YPR/hUvqjFJiaB24pQrMjRbU8CugqH5sV0hkw== - dependencies: - "@smithy/middleware-endpoint" "^3.1.1" - "@smithy/middleware-stack" "^3.0.4" - "@smithy/protocol-http" "^4.1.1" - "@smithy/types" "^3.4.0" - "@smithy/util-stream" "^3.1.4" - tslib "^2.6.2" - -"@smithy/types@^3.3.0", "@smithy/types@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.4.0.tgz#08b7b3d6af30c66fd0682c73c206a5baf8b40a63" - integrity sha512-0shOWSg/pnFXPcsSU8ZbaJ4JBHZJPPzLCJxafJvbMVFo9l1w81CqpgUqjlKGNHVrVB7fhIs+WS82JDTyzaLyLA== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^3.0.3", "@smithy/url-parser@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.4.tgz#d24a0304117dc26b81b8a58a3d5eda79cdb09bee" - integrity sha512-XdXfObA8WrloavJYtDuzoDhJAYc5rOt+FirFmKBRKaihu7QtU/METAxJgSo7uMK6hUkx0vFnqxV75urtRaLkLg== - dependencies: - "@smithy/querystring-parser" "^3.0.4" - "@smithy/types" "^3.4.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.15": - version "3.0.16" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.16.tgz#7d4978a90cee569fdeb6c38c89a09a39371f44d7" - integrity sha512-Os8ddfNBe7hmc5UMWZxygIHCyAqY0aWR8Wnp/aKbti3f8Df/r0J9ttMZIxeMjsFgtVjEryB0q7SGcwBsHk8WEw== - dependencies: - "@smithy/property-provider" "^3.1.4" - "@smithy/smithy-client" "^3.3.0" - "@smithy/types" "^3.4.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.15": - version "3.0.16" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.16.tgz#5747d886720d4f5acdde8fdf8240a6c1bad42f1f" - integrity sha512-rNhFIYRtrOrrhRlj6RL8jWA6/dcwrbGYAmy8+OAHjjzQ6zdzUBB1P+3IuJAgwWN6Y5GxI+mVXlM/pOjaoIgHow== - dependencies: - "@smithy/config-resolver" "^3.0.6" - "@smithy/credential-provider-imds" "^3.2.1" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/property-provider" "^3.1.4" - "@smithy/smithy-client" "^3.3.0" - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.0.5": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.0.tgz#33395d918a43f0df44a453c6bfa0cf3d35ed1367" - integrity sha512-ilS7/0jcbS2ELdg0fM/4GVvOiuk8/U3bIFXUW25xE1Vh1Ol4DP6vVHQKqM40rCMizCLmJ9UxK+NeJrKlhI3HVA== - dependencies: - "@smithy/node-config-provider" "^3.1.5" - "@smithy/types" "^3.4.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", "@smithy/util-middleware@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.4.tgz#a541edb8d3f2923ab06460ec3f1217c143ae5706" - integrity sha512-uSXHTBhstb1c4nHdmQEdkNMv9LiRNaJ/lWV2U/GO+5F236YFpdPw+hyWI9Zc0Rp9XKzwD9kVZvhZmEgp0UCVnA== - dependencies: - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/util-retry@^3.0.3", "@smithy/util-retry@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.4.tgz#281de3f89458b5e3b86ca92937eb1212bcecf67f" - integrity sha512-JJr6g0tO1qO2tCQyK+n3J18r34ZpvatlFN5ULcLranFIBZPxqoivb77EPyNTVwTGMEvvq2qMnyjm4jMIxjdLFg== - dependencies: - "@smithy/service-error-classification" "^3.0.4" - "@smithy/types" "^3.4.0" - tslib "^2.6.2" - -"@smithy/util-stream@^3.1.3", "@smithy/util-stream@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.4.tgz#f4041a979dfafcbccdc64fa7ee8c376e39c8dc41" - integrity sha512-txU3EIDLhrBZdGfon6E9V6sZz/irYnKFMblz4TLVjyq8hObNHNS2n9a2t7GIrl7d85zgEPhwLE0gANpZsvpsKg== - dependencies: - "@smithy/fetch-http-handler" "^3.2.5" - "@smithy/node-http-handler" "^3.2.0" - "@smithy/types" "^3.4.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.3" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.1.3.tgz#a633257cc65f83cf5714a0f66665070868c3aa91" - integrity sha512-OU0YllH51/CxD8iyr3UHSMwYqTGTyuxFdCMH/0F978t+iDmJseC/ttrWPb22zmYkhkrjqtipzC1xaMuax5QKIA== - dependencies: - "@smithy/abort-controller" "^3.1.2" - "@smithy/types" "^3.4.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 "22.5.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.4.tgz#83f7d1f65bc2ed223bdbf57c7884f1d5a4fa84e8" - integrity sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg== - dependencies: - undici-types "~6.19.2" - -"@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.50" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.50.tgz#8652b34ee7c0e7e2004b3f08192281808d41bf5a" - integrity sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg== - 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.1" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.12.1.tgz#8835d22f7e25b261e624d02a42fe4ade2c689a3c" - integrity sha512-w0URwf7BQb0rD/EuiG12KP0bailHKHP5YVviJG9zw3ykAokL0TuxU2TUqMB7EwZ59bDHYdeTIvjI5m0S7qHfOA== - -acorn-walk@^8.1.1: - version "8.3.4" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" - integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== - 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.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - -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.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" - integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== - 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.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - -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.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.2.tgz#4b67d4b49e69b59893931a032560999e5e4419fe" - integrity sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg== - 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.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" - integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== - 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.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - -foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== - 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.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - 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.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.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -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.12" - resolved "https://registry.yarnpkg.com/tron-format-address/-/tron-format-address-0.1.12.tgz#4c6b6ba717a57424e9d12343b1fce0e466690362" - integrity sha512-dtlfwSZEdWA9Cj3Mqypw/WNhQPlQf5JWT+/H5gYX5Viu+ntIq+7zJvcWCrmcDJ48L0EHt2xzGme2eErW9Y7spQ== - -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.7.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" - integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== - -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.6.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" - integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== - -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-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - -undici@^6.12.0: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.8.tgz#002d7c8a28f8cc3a44ff33c3d4be4d85e15d40e1" - integrity sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g== - -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 8cfba16adf202833cbe1c307b63d4344b0e45d46 Mon Sep 17 00:00:00 2001 From: literallymarvellous Date: Sun, 15 Sep 2024 06:38:26 +0100 Subject: [PATCH 1455/1590] update api endpoint --- fees/pear-protocol/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/pear-protocol/index.ts b/fees/pear-protocol/index.ts index 88fc5a72fb..7a44f8618e 100644 --- a/fees/pear-protocol/index.ts +++ b/fees/pear-protocol/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; const fetch = async (timestamp: number) => { - const url = "https://www.api.pearprotocol.io/v1/isolated/metric"; + const url = "https://www.api.pearprotocol.io/v1/metric"; const response = await httpGet(url); const totalFees = response.totalFees; const dailyFees = response.dailyFees; From 462ec5cd323cb37ab5fde18904b7ee8a27c32086 Mon Sep 17 00:00:00 2001 From: literallymarvellous Date: Sun, 15 Sep 2024 06:40:42 +0100 Subject: [PATCH 1456/1590] update dex endpoint --- dexs/pear-protocol/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/pear-protocol/index.ts b/dexs/pear-protocol/index.ts index f1543b6367..1defa6d3b4 100644 --- a/dexs/pear-protocol/index.ts +++ b/dexs/pear-protocol/index.ts @@ -8,7 +8,7 @@ const fetch = async ( chainBlocks: any, options: FetchOptions ) => { - const url = "https://www.api.pearprotocol.io/v1/isolated/metric"; + const url = "https://www.api.pearprotocol.io/v1/metric"; const response = await httpGet(url); const totalVolume = response.totalVolume; From 2af3e1a1c07dd6e405989b72d7cd3722d589a28d Mon Sep 17 00:00:00 2001 From: literallymarvellous Date: Sun, 15 Sep 2024 06:42:57 +0100 Subject: [PATCH 1457/1590] fix tests --- dexs/pear-protocol/index.ts | 4 ++-- fees/pear-protocol/index.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dexs/pear-protocol/index.ts b/dexs/pear-protocol/index.ts index 1defa6d3b4..8cff86bbe6 100644 --- a/dexs/pear-protocol/index.ts +++ b/dexs/pear-protocol/index.ts @@ -11,8 +11,8 @@ const fetch = async ( const url = "https://www.api.pearprotocol.io/v1/metric"; const response = await httpGet(url); - const totalVolume = response.totalVolume; - const dailyVolume = response.dailyVolume; + const totalVolume = response.payload.totalVolume; + const dailyVolume = response.payload.dailyVolume; return { totalVolume, diff --git a/fees/pear-protocol/index.ts b/fees/pear-protocol/index.ts index 7a44f8618e..88463c6af2 100644 --- a/fees/pear-protocol/index.ts +++ b/fees/pear-protocol/index.ts @@ -5,8 +5,8 @@ import { httpGet } from "../../utils/fetchURL"; const fetch = async (timestamp: number) => { const url = "https://www.api.pearprotocol.io/v1/metric"; const response = await httpGet(url); - const totalFees = response.totalFees; - const dailyFees = response.dailyFees; + const totalFees = response.payload.totalFees; + const dailyFees = response.payload.dailyFees; const dailyRevenue = dailyFees; const totalRevenue = totalFees; From 1db2f7e8835d120d38ba5922c35ade389d7a2d16 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 15 Sep 2024 17:17:14 +0000 Subject: [PATCH 1458/1590] fix logx --- dexs/logx/index.ts | 6 ++++-- helpers/chains.ts | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dexs/logx/index.ts b/dexs/logx/index.ts index f3eb4e06ad..e9b5502f43 100644 --- a/dexs/logx/index.ts +++ b/dexs/logx/index.ts @@ -1,5 +1,7 @@ import fetchURL from "../../utils/fetchURL"; import { FetchResult, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + const URLEndpoint = "https://apiserver.logx.network/api/v1/stats/defillama?endTime="; const startTimestamp = 1725580800; // 06.09.2024 @@ -21,11 +23,11 @@ const fetch = async (timestamp: number): Promise => { const adapter: SimpleAdapter = { adapter: { - "logx network": { + [CHAIN.LOGX]: { fetch, start: startTimestamp, }, } }; -export default adapter; \ No newline at end of file +export default adapter; diff --git a/helpers/chains.ts b/helpers/chains.ts index bbb61fb8f8..1813f08cdf 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -164,6 +164,7 @@ export enum CHAIN { IMMUTABLEX = "immutablex", CHAINFLIP = "chainflip", CRONOS_ZKEVM = "cronos_zkevm", + LOGX = "logx_network", } // Don´t use From e1a4fd614114260c6b6ba9b2ebbbee7e75c7e67f Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 13:39:12 +0100 Subject: [PATCH 1459/1590] pcs --- protocols/pancakeswap/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index 574d92424d..dd0fbc8c97 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -9,7 +9,7 @@ import { getEnv } from "../../helpers/env"; const endpoints = { [CHAIN.BSC]: "https://proxy-worker.pancake-swap.workers.dev/bsc-exchange", [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('9opY17WnEPD4REcC43yHycQthSeUMQE26wyoeMjZTLEx'), - [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45376/exchange-v2-polygon-zkevm/version/latest", + // [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45376/exchange-v2-polygon-zkevm/version/latest", [CHAIN.ERA]: "https://api.studio.thegraph.com/query/45376/exchange-v2-zksync/version/latest", [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('EsL7geTRcA3LaLLM9EcMFzYbUgnvf8RixoEEGErrodB3'), [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/pancakeswap/exhange-v2", @@ -26,7 +26,7 @@ const stablesSwapEndpoints = { const v3Endpoint = { [CHAIN.BSC]: sdk.graph.modifyEndpoint('Hv1GncLY5docZoGtXjo4kwbTvxm3MAhVZqBZE4sUT9eZ'), [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('CJYGNhb7RvnhfBDjqpRnD3oxgyhibzc7fkAMa38YV3oS'), - [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45376/exchange-v3-polygon-zkevm/version/latest", + // [CHAIN.POLYGON_ZKEVM]: "https://api.studio.thegraph.com/query/45376/exchange-v3-polygon-zkevm/version/latest", [CHAIN.ERA]: "https://api.studio.thegraph.com/query/45376/exchange-v3-zksync/version/latest", [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('251MHFNN1rwjErXD2efWMpNS73SANZN8Ua192zw6iXve'), [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/pancakeswap/exchange-v3-linea", From e1e6fcfd52be973656e8c2f612a83ad68240ad76 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 13:49:30 +0100 Subject: [PATCH 1460/1590] ramses --- dexs/ramses-exchange-v2/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dexs/ramses-exchange-v2/index.ts b/dexs/ramses-exchange-v2/index.ts index ec13885eb6..7695fbcd35 100644 --- a/dexs/ramses-exchange-v2/index.ts +++ b/dexs/ramses-exchange-v2/index.ts @@ -1,13 +1,11 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea') }, { factoriesName: "factories", - dayData: "uniswapDayData", - dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); From a3937b741401edacab71ed7db5efb3d68376bb06 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 13:58:12 +0100 Subject: [PATCH 1461/1590] joe --- dexs/traderjoe/index.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index 0be9ad3656..4f99324972 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -1,6 +1,6 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; -import { BreakdownAdapter, FetchOptions, FetchResultVolume } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getChainVolume2, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpGet } from "../../utils/fetchURL"; @@ -24,7 +24,7 @@ interface IVolume { timestamp: number; volumeUsd: number; } -const fetchV2 = async (options: FetchOptions): Promise => { +const fetchV2 = async (options: FetchOptions): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) const url = `https://api.traderjoexyz.dev/v1/dex/analytics/${mapChain(options.chain)}?startTime=${options.startTimestamp}&endTime=${options.endTimestamp}` const historicalVolume: IVolume[] = (await httpGet(url, { headers: { @@ -39,7 +39,6 @@ const fetchV2 = async (options: FetchOptions): Promise => { return { totalVolume: `${totalVolume}`, dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, - timestamp: dayTimestamp, } } const mapChain = (chain: Chain): string => { From dfa2ddfc786e82529eafc6ba21b36e99121e0f2d Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 14:03:15 +0100 Subject: [PATCH 1462/1590] sushi --- dexs/sushiswap/classic.ts | 2 +- dexs/sushiswap/v3.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index 0ac0d06235..db8c5b7387 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -55,7 +55,7 @@ const endpointsClassic = { [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('8NiXkxLRT3R22vpwLB4DXttpEf3X1LrKhe4T1tQ3jjbP'), //[CHAIN.FANTOM]: sdk.graph.modifyEndpoint('3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK'), [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('8nFDCAhdnJQEhQF3ZRnfWkJ6FkRsfAiiVabVn4eGoAZH'), - [CHAIN.CELO]: sdk.graph.modifyEndpoint('8roCC7H2tsGYGvxD52QQbUoHXXx77H9tPhNn1qcjB5yj'), + // [CHAIN.CELO]: sdk.graph.modifyEndpoint('8roCC7H2tsGYGvxD52QQbUoHXXx77H9tPhNn1qcjB5yj'), [CHAIN.AVAX]: sdk.graph.modifyEndpoint('6VAhbtW5u2sPYkJKAcMsxgqTBu4a1rqmbiVQWgtNjrvT'), [CHAIN.HARMONY]: sdk.graph.modifyEndpoint('FrcJBCCKCYGTLLXJmhppXfPKsNoyod4zqNLjHfXj1KHg'), // [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('5skUrJzgVm6vXAmdKN7gw4CjYx3pgLDeUeUqVzqLXkWT'), diff --git a/dexs/sushiswap/v3.ts b/dexs/sushiswap/v3.ts index d8fd2076ae..0a54a2d542 100644 --- a/dexs/sushiswap/v3.ts +++ b/dexs/sushiswap/v3.ts @@ -16,7 +16,7 @@ const endpointsV3 = { // [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('5WabfuUgF5k4CE9snB22HNcUHQVkUStvet76qjovKdm6'), [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('Hc3vTLxWmtyrn59t2Yv3MiXJVxjfNyZi41iKE3rXXHMf'), [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('G1Q6dviDfMm6hVLvCqbfeB19kLmvs7qrnBvXeFndjhaU'), - [CHAIN.POLYGON_ZKEVM]: 'https://api.studio.thegraph.com/query/32073/v3-polygon-zkevm/v0.0.2', + // [CHAIN.POLYGON_ZKEVM]: 'https://api.studio.thegraph.com/query/32073/v3-polygon-zkevm/v0.0.2', [CHAIN.THUNDERCORE]: 'https://graph-node.thundercore.com/subgraphs/name/sushi-v3/v3-thundercore', [CHAIN.BASE]: "https://api.studio.thegraph.com/query/32073/v3-base/v0.0.1", [CHAIN.CORE]: "https://thegraph.coredao.org/subgraphs/name/sushi-v3/v3-core", From 537991b8261105f98bf12d6608925360c352ecb9 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 14:10:24 +0100 Subject: [PATCH 1463/1590] lynex --- dexs/lynex/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dexs/lynex/index.ts b/dexs/lynex/index.ts index e196e1a0d3..75750ab084 100644 --- a/dexs/lynex/index.ts +++ b/dexs/lynex/index.ts @@ -1,12 +1,10 @@ import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/59052/lynex-cl/v1.0.1" }, { factoriesName: "factories", - dayData: "algebraDayData", - dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); From 2e540fcb888e1a94c0107b33303091591dbe149b Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 14:11:44 +0100 Subject: [PATCH 1464/1590] solidly --- dexs/solidly-v3/index.ts | 6 ++---- helpers/getUniSubgraphVolume.ts | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/dexs/solidly-v3/index.ts b/dexs/solidly-v3/index.ts index 26fb5f464f..36e6404462 100644 --- a/dexs/solidly-v3/index.ts +++ b/dexs/solidly-v3/index.ts @@ -1,8 +1,8 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('7StqFFqbxi3jcN5C9YxhRiTxQM8HA8XEHopsynqqxw3t'), // [CHAIN.BASE]: "https://api.studio.thegraph.com/query/64631/solidly-v3-base/version/latest", [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('HCThb3gJC45qUYmNEaYmZZTqJW3pSq7X6tb4MqNHEvZf'), @@ -10,8 +10,6 @@ const adapters = univ2Adapter({ [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('HDNu25S2uqr13BHrQdPv2PfTpwxJgPB7QEnC8fsgKcM9') }, { factoriesName: "factories", - dayData: "solidlyDayData", - dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index adcc6aba29..a14dc93b1d 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -356,7 +356,7 @@ function univ2Adapter(endpoints: { } } }, {} as BaseAdapter), - version: 2 + version: 1 }; return adapter; From 90926c9f611d535b6a9997138747699a08dfdc80 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 14:14:56 +0100 Subject: [PATCH 1465/1590] pharaoh --- aggregators/bebop/index.ts | 2 +- dexs/pharaoh-exchange/index.ts | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/aggregators/bebop/index.ts b/aggregators/bebop/index.ts index 187b4d44ea..f8d063d098 100644 --- a/aggregators/bebop/index.ts +++ b/aggregators/bebop/index.ts @@ -1,5 +1,5 @@ import { ethers } from "ethers"; -import { Adapter, ChainBlocks, FetchOptions } from "../../adapters/types"; +import { Adapter, FetchOptions } from "../../adapters/types"; import { getTransactions } from "../../helpers/getTxReceipts"; import JAM_ABI from "./jamAbi"; import {queryDuneSql} from "../../helpers/dune" diff --git a/dexs/pharaoh-exchange/index.ts b/dexs/pharaoh-exchange/index.ts index 7119c974f2..72533e46cf 100644 --- a/dexs/pharaoh-exchange/index.ts +++ b/dexs/pharaoh-exchange/index.ts @@ -1,13 +1,11 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.AVAX]: sdk.graph.modifyEndpoint('oM4WnuyAbSwPpjk6niUkp88AZg1hSTi9aC1ZM4RcsqR') }, { factoriesName: "factories", - dayData: "uniswapDayData", - dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); From 6ca399dc8994fc0edf7285c192471d733540064e Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 14:17:21 +0100 Subject: [PATCH 1466/1590] nile --- dexs/nile-exchange/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dexs/nile-exchange/index.ts b/dexs/nile-exchange/index.ts index 9deddc65a2..bba81755c5 100644 --- a/dexs/nile-exchange/index.ts +++ b/dexs/nile-exchange/index.ts @@ -1,12 +1,10 @@ import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/nileexchange/cl-subgraph" }, { factoriesName: "factories", - dayData: "uniswapDayData", - dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); From 65e55929b88dff6c0e90deccb7bec02f51367147 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 14:24:26 +0100 Subject: [PATCH 1467/1590] swaap --- dexs/swaap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/swaap/index.ts b/dexs/swaap/index.ts index 6e562f234a..5bed0e981b 100644 --- a/dexs/swaap/index.ts +++ b/dexs/swaap/index.ts @@ -148,7 +148,7 @@ const adapter: BreakdownAdapter = { v1: { [CHAIN.POLYGON]: { fetch: async (_t: any, _tt: any ,options: FetchOptions) => { - const { dailyVolume, totalVolume } = await v1graphs(options.chain)(options) + const { dailyVolume, totalVolume } = await v1graphs(options.chain)(_t, _tt, options) return { timestamp: options.startOfDay, dailyVolume, From afd05909053887c3257002aba3e19b9db29369c4 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 14:44:43 +0100 Subject: [PATCH 1468/1590] clipper --- dexs/clipper/index.ts | 10 ++++------ helpers/getUniSubgraphVolume.ts | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/dexs/clipper/index.ts b/dexs/clipper/index.ts index 7457ac5325..72a0e1ab12 100644 --- a/dexs/clipper/index.ts +++ b/dexs/clipper/index.ts @@ -2,26 +2,24 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const { - getChainVolume, -} = require("../../helpers/getUniSubgraphVolume"); +import { getChainVolume2 } from "../../helpers/getUniSubgraphVolume"; + const endpoints = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('2BhN8mygHMmRkceMmod7CEEsGkcxh91ExRbEfRVkpVGM'), [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('Cu6atAfi6uR9mLMEBBjkhKSUUXHCobbB83ctdooexQ9f'), [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('Brmf2gRdpLFsEF6YjSAMVrXqSfbhsaaWaWzdCYjE7iYY'), - [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint('8zRk4WV9vUU79is2tYGWq9GKh97f93LsZ8V9wy1jSMvA'), + // [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint('8zRk4WV9vUU79is2tYGWq9GKh97f93LsZ8V9wy1jSMvA'), [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('ATBQPRjT28GEK6UaBAzXy64x9kFkNk1r64CdgmDJ587W'), }; const VOLUME_FIELD = "volumeUSD"; -const graphs = getChainVolume({ +const graphs = getChainVolume2({ graphUrls: endpoints, totalVolume: { factory: "pools", field: VOLUME_FIELD, }, - hasDailyVolume: false, }); diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index a14dc93b1d..b9dcc8af2d 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -199,7 +199,7 @@ function getChainVolume2({ } `; - const graphQueryTotalVolume = gql`${hasTotalVolume ? `query get_total_volume($block: Int) { ${totalVolumeQuery} }` : ""}` + const graphQueryTotalVolume = gql`query get_total_volume($block: Int) { ${totalVolumeQuery} }` return (chain: Chain) => { return async (options: FetchOptions) => { From 432fed99b66783c69de2beaa7a64bfdbe1c708bf Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 14:46:22 +0100 Subject: [PATCH 1469/1590] vvs --- dexs/vvs-finance/index.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dexs/vvs-finance/index.ts b/dexs/vvs-finance/index.ts index 1375d9b330..ef77266859 100644 --- a/dexs/vvs-finance/index.ts +++ b/dexs/vvs-finance/index.ts @@ -1,10 +1,9 @@ -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapter = univ2Adapter({ +const adapter = univ2Adapter2({ "cronos": "https://graph.cronoslabs.com/subgraphs/name/vvs/exchange" },{ factoriesName: "vvsFactories", - dayData: "vvsDayData", }); adapter.adapter.cronos.start = 1632035122; // 1 a year ago From 1afd285e37b16691564035f95bbd963a9de47210 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 14:49:23 +0100 Subject: [PATCH 1470/1590] syncswap --- dexs/hercules-v3/index.ts | 7 ++----- dexs/syncswap/index.ts | 14 ++++++-------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/dexs/hercules-v3/index.ts b/dexs/hercules-v3/index.ts index 38b6c984d7..a6fd17f80d 100644 --- a/dexs/hercules-v3/index.ts +++ b/dexs/hercules-v3/index.ts @@ -1,13 +1,10 @@ -// https://metisapi.0xgraph.xyz/subgraphs/name/cryptoalgebra/analytics import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.METIS]: "https://metisapi.0xgraph.xyz/subgraphs/name/cryptoalgebra/analytics" }, { factoriesName: "factories", - dayData: "algebraDayData", - dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", }); diff --git a/dexs/syncswap/index.ts b/dexs/syncswap/index.ts index e1c2805b7d..8a43e7c051 100644 --- a/dexs/syncswap/index.ts +++ b/dexs/syncswap/index.ts @@ -1,18 +1,16 @@ -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { - [CHAIN.ERA]: "https://api.studio.thegraph.com/query/30365/syncswap-graph/1.4.0", + [CHAIN.ERA]: + "https://api.studio.thegraph.com/query/30365/syncswap-graph/1.4.0", }; -const adapter = univ2Adapter(endpoints, { +const adapter = univ2Adapter2(endpoints, { factoriesName: "syncSwapFactories", - dayData: "dayData", - dailyVolume: "dailyVolumeUSD", totalVolume: "totalVolumeUSD", - dailyVolumeTimestampField: "date", }); -adapter.adapter.era.start = 1679529600 +adapter.adapter.era.start = 1679529600; -export default adapter +export default adapter; From 3e6db546023a399dbf84b609e11e7d8bd287944f Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 15:27:44 +0100 Subject: [PATCH 1471/1590] based --- dexs/based-markets/index.ts | 106 ++++++++---------------------------- 1 file changed, 22 insertions(+), 84 deletions(-) diff --git a/dexs/based-markets/index.ts b/dexs/based-markets/index.ts index 5588d4c518..c774d91443 100644 --- a/dexs/based-markets/index.ts +++ b/dexs/based-markets/index.ts @@ -1,92 +1,30 @@ import * as sdk from "@defillama/sdk"; -import request, { gql } from "graphql-request"; -import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import BigNumber from "bignumber.js"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; - -const ONE_DAY_IN_SECONDS = 60 * 60 * 24 - -const endpoint = sdk.graph.modifyEndpoint('3E7EJF1zWHD3LHTKV5L6dspCno2ghxZ3WYe9MN7QVnEE') - -const query = gql` - query stats($from: String!, $to: String!) { - dailyHistories(where: {timestamp_gte: $from, timestamp_lte: $to, accountSource: "0x1c03B6480a4efC2d4123ba90d7857f0e1878B780"}){ - timestamp - platformFee - accountSource - tradeVolume - } - totalHistories(where: {accountSource: "0x1c03B6480a4efC2d4123ba90d7857f0e1878B780"}) { - timestamp - platformFee - accountSource - tradeVolume - } - } -` - - -interface IGraphResponse { - dailyHistories: Array<{ - tiemstamp: string, - platformFee: string, - accountSource: string, - tradeVolume: string - }> - totalHistories: Array<{ - tiemstamp: string, - platformFee: string, - accountSource: string, - tradeVolume: BigNumber - }> -} - -const toString = (x: BigNumber) => { - if (x.isEqualTo(0)) return undefined - return x.toString() -} - -const fetchVolume = async (timestamp: number): Promise => { - const response: IGraphResponse = await request(endpoint, query, { - from: String(timestamp - ONE_DAY_IN_SECONDS), - to: String(timestamp) - }) - - - let dailyVolume = new BigNumber(0); - response.dailyHistories.forEach(data => { - dailyVolume = dailyVolume.plus(new BigNumber(data.tradeVolume)) - }); - - let totalVolume = new BigNumber(0); - response.totalHistories.forEach(data => { - totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)) - }); - - dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)) - totalVolume = totalVolume.dividedBy(new BigNumber(1e18)) - - const _dailyVolume = toString(dailyVolume) - const _totalVolume = toString(totalVolume) - - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000))) - - return { - timestamp: dayTimestamp, - dailyVolume: _dailyVolume, - totalVolume: _totalVolume, - } - -} +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; + +const fetch = getGraphDimensions2({ + graphUrls: { + [CHAIN.BASE]: sdk.graph.modifyEndpoint( + "3E7EJF1zWHD3LHTKV5L6dspCno2ghxZ3WYe9MN7QVnEE", + ), + }, + totalVolume: { + factory: "factories", + }, + totalFees: { + factory: "factories", + }, +}); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BASE]: { - fetch: fetchVolume, - start: 1704009000 - } - } -} + fetch: fetch(CHAIN.BASE), + start: 1704009000, + }, + }, +}; export default adapter; From f91a216f9ace2e04ccb77b7bb9aae7e363f29ecf Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 15:36:36 +0100 Subject: [PATCH 1472/1590] zebra --- dexs/zebra-v2/index.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/dexs/zebra-v2/index.ts b/dexs/zebra-v2/index.ts index ac8bdc2e38..dd10418bee 100644 --- a/dexs/zebra-v2/index.ts +++ b/dexs/zebra-v2/index.ts @@ -1,18 +1,14 @@ -// https://api.studio.thegraph.com/query/55584/v3_scroll/version/latest -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; const endpoints = { [CHAIN.SCROLL]: "https://api.studio.thegraph.com/query/55584/v3_scroll/version/latest", }; -const adapter = univ2Adapter(endpoints, { +const adapter = univ2Adapter2(endpoints, { factoriesName: "factories", - dayData: "uniswapDayData", - dailyVolume: "volumeUSD", totalVolume: "totalVolumeUSD", - dailyVolumeTimestampField: "date", }); adapter.adapter.scroll.start = 1700697600 From bc8fe21a32efb791e71cc6c619129a2a8abd1b99 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 15:40:27 +0100 Subject: [PATCH 1473/1590] pulsex --- dexs/pulsex-v2/index.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dexs/pulsex-v2/index.ts b/dexs/pulsex-v2/index.ts index 8c2ca1150d..1ae6dd8092 100644 --- a/dexs/pulsex-v2/index.ts +++ b/dexs/pulsex-v2/index.ts @@ -1,11 +1,10 @@ import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.PULSECHAIN]: "https://graph.pulsechain.com/subgraphs/name/pulsechain/pulsexv2" }, { factoriesName: "pulseXFactories", - dayData: "pulsexDayData", }); adapters.adapter.pulse.start = 1685577600; From 7b24b6ff390ceec2206ba24431373cb19d3d6d5e Mon Sep 17 00:00:00 2001 From: 0xR <0xr@metavault.org> Date: Mon, 16 Sep 2024 18:02:40 +0300 Subject: [PATCH 1474/1590] Add SparkDEX V3 adapters on Flare --- dexs/sparkdex-v3/index.ts | 60 ++++++++++++++++++++++++++++++++ fees/sparkdex-v3/index.ts | 73 +++++++++++++++++++++++++++++++++++++++ helpers/chains.ts | 1 + 3 files changed, 134 insertions(+) create mode 100644 dexs/sparkdex-v3/index.ts create mode 100644 fees/sparkdex-v3/index.ts diff --git a/dexs/sparkdex-v3/index.ts b/dexs/sparkdex-v3/index.ts new file mode 100644 index 0000000000..c96b4d7ffe --- /dev/null +++ b/dexs/sparkdex-v3/index.ts @@ -0,0 +1,60 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { CHAIN } from "../../helpers/chains"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; +import { BreakdownAdapter } from "../../adapters/types"; + +const endpointsV3 = { + [CHAIN.FLARE]: + "https://api.goldsky.com/api/public/project_cly4708cqpcj601tt7gzf1jdj/subgraphs/sparkdex-v3/latest/gn", +}; + +const v3Graphs = getGraphDimensions2({ + graphUrls: endpointsV3, + totalVolume: { + factory: "factories", + field: "totalVolumeUSD", + }, + feesPercent: { + type: "fees", + ProtocolRevenue: 0, + HoldersRevenue: 0, + UserFees: 100, // User fees are 100% of collected fees + SupplySideRevenue: 100, // 100% of fees are going to LPs + Revenue: 0, // Set revenue to 0 as protocol fee is not set for all pools for now + }, +}); + +const startTimeV3: { [key: string]: number } = { + [CHAIN.FLARE]: 1719878400, +}; + +const v3 = Object.keys(endpointsV3).reduce( + (acc, chain) => ({ + ...acc, + [chain]: { + fetch: v3Graphs(chain as Chain), + start: startTimeV3[chain], + meta: { + methodology: { + Fees: "Each pool charge between 0.01% to 1% fee", + UserFees: "Users pay between 0.01% to 1% fee", + Revenue: "0 to 1/4 of the fee goes to treasury", + HoldersRevenue: "None", + ProtocolRevenue: "Treasury receives a share of the fees", + SupplySideRevenue: + "Liquidity providers get most of the fees of all trades in their pools", + }, + }, + }, + }), + {} +); + +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + v3: v3, + }, +}; + +export default adapter; diff --git a/fees/sparkdex-v3/index.ts b/fees/sparkdex-v3/index.ts new file mode 100644 index 0000000000..79665d66ef --- /dev/null +++ b/fees/sparkdex-v3/index.ts @@ -0,0 +1,73 @@ +import { gql, request } from "graphql-request"; +import type { ChainEndpoints, FetchV2 } from "../../adapters/types"; +import { Adapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +import { getTimestampAtStartOfDayUTC } from "../../utils/date"; + +const endpoints = { + [CHAIN.FLARE]: + "https://api.goldsky.com/api/public/project_cly4708cqpcj601tt7gzf1jdj/subgraphs/sparkdex-v3/latest/gn", +}; + +interface IFeeStat { + cumulativeFeeUsd: string; + feeUsd: string; + id: string; +} + +const graphs = (graphUrls: ChainEndpoints) => { + const fetch: FetchV2 = async ({ chain, startTimestamp }) => { + const todaysTimestamp = getTimestampAtStartOfDayUTC(startTimestamp); + + const graphQuery = gql` + query MyQuery { + feeStats(where: {timestamp: ${todaysTimestamp}, period: daily}) { + cumulativeFeeUsd + feeUsd + id + } + } + `; + + const graphRes = await request(graphUrls[chain], graphQuery); + const feeStats: IFeeStat[] = graphRes.feeStats; + + let dailyFeeUSD = BigInt(0); + let totalFeeUSD = BigInt(0); + + feeStats.forEach((fee) => { + dailyFeeUSD += BigInt(fee.feeUsd); + totalFeeUSD += BigInt(fee.cumulativeFeeUsd); + }); + + const finalDailyFee = parseInt(dailyFeeUSD.toString()) / 1e18; + const finalTotalFee = parseInt(totalFeeUSD.toString()) / 1e18; + + return { + timestamp: todaysTimestamp, + dailyFees: finalDailyFee.toString(), + totalFees: finalTotalFee.toString(), + }; + }; + return fetch; +}; + +const methodology = { + dailyFees: "Total cumulativeFeeUsd for specified chain for the given day", +}; + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.FLARE]: { + fetch: graphs(endpoints), + start: 1719878400, + meta: { + methodology, + }, + }, + }, +}; + +export default adapter; diff --git a/helpers/chains.ts b/helpers/chains.ts index 1813f08cdf..12ee4a3768 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -165,6 +165,7 @@ export enum CHAIN { CHAINFLIP = "chainflip", CRONOS_ZKEVM = "cronos_zkevm", LOGX = "logx_network", + FLARE = "flare", } // Don´t use From 836b85c1ad7b15c22c6b074c4aaeff618111b655 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 16:11:54 +0100 Subject: [PATCH 1475/1590] dragon v2 --- dexs/dragonswap-sei/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/dragonswap-sei/index.ts b/dexs/dragonswap-sei/index.ts index 0749418322..6bdc35cde1 100644 --- a/dexs/dragonswap-sei/index.ts +++ b/dexs/dragonswap-sei/index.ts @@ -1,7 +1,7 @@ import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.SEI]: "https://api.goldsky.com/api/public/project_clu1fg6ajhsho01x7ajld3f5a/subgraphs/dragonswap-prod/1.0.0/gn" }, {}); From e6f5dd86efd1ec0be171e1137f88aaab8f9936bb Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 16:13:40 +0100 Subject: [PATCH 1476/1590] apeswap --- dexs/apeswap/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/apeswap/index.ts b/dexs/apeswap/index.ts index 74b85b7614..96ed65c49a 100644 --- a/dexs/apeswap/index.ts +++ b/dexs/apeswap/index.ts @@ -1,8 +1,8 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.BSC]: sdk.graph.modifyEndpoint('GH4Zt29mCApHwMfavNFw5ZdQDH3owc2Wq8DdU4hGPXYe'), [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('EcLNjgAFADeXVopmhv3HY79fayzXRtK8R9imZNopRBpE'), [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('6J4fEY6pSRsqaqDbHn17HJY1viPzrGc1pjCqBKrrQXPC'), From d42012ccec22f121fbd0509ec2552b10d0b66a6e Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 16 Sep 2024 16:19:15 +0100 Subject: [PATCH 1477/1590] pangolin --- dexs/camelot/index.ts | 4 ++-- dexs/pangolin/index.ts | 16 ++++++++++------ dexs/thena/index.ts | 7 ++----- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/dexs/camelot/index.ts b/dexs/camelot/index.ts index b98070897e..fb1b521996 100644 --- a/dexs/camelot/index.ts +++ b/dexs/camelot/index.ts @@ -1,8 +1,8 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('8zagLSufxk5cVhzkzai3tyABwJh53zxn9tmUYJcJxijG') }, {}); diff --git a/dexs/pangolin/index.ts b/dexs/pangolin/index.ts index f4e0fb0195..0ad4c0f6f6 100644 --- a/dexs/pangolin/index.ts +++ b/dexs/pangolin/index.ts @@ -1,9 +1,13 @@ import * as sdk from "@defillama/sdk"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -export default univ2Adapter({ - "avax": sdk.graph.modifyEndpoint('CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq') -}, { +export default univ2Adapter2( + { + avax: sdk.graph.modifyEndpoint( + "CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq", + ), + }, + { factoriesName: "pangolinFactories", - dayData: "pangolinDayData", -}); + }, +); diff --git a/dexs/thena/index.ts b/dexs/thena/index.ts index e51d98382f..941e0abb85 100644 --- a/dexs/thena/index.ts +++ b/dexs/thena/index.ts @@ -1,15 +1,12 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.BSC]: sdk.graph.modifyEndpoint('FKEt2N5VmSdEYcz7fYLPvvnyEUkReQ7rvmXzs6tiKCz1') }, { factoriesName: "factories", totalVolume: "totalVolumeUSD", - dayData: "dayData", - dailyVolume: "dailyVolumeUSD", - dailyVolumeTimestampField: "date" }); adapters.adapter.bsc.start = 1672790400; From 066dfea626f5614d03e6cfea0f9bda9ba8e1d4df Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 16 Sep 2024 16:12:29 +0000 Subject: [PATCH 1478/1590] fix dragonswap-sei --- dexs/dragonswap-sei/index.ts | 37 ++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/dexs/dragonswap-sei/index.ts b/dexs/dragonswap-sei/index.ts index 6bdc35cde1..12a9d3828f 100644 --- a/dexs/dragonswap-sei/index.ts +++ b/dexs/dragonswap-sei/index.ts @@ -1,10 +1,35 @@ +import request, { gql } from "graphql-request"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter2({ - [CHAIN.SEI]: "https://api.goldsky.com/api/public/project_clu1fg6ajhsho01x7ajld3f5a/subgraphs/dragonswap-prod/1.0.0/gn" -}, {}); +const fetch = async (timestamp: number, _:any, options: FetchOptions): Promise => { + const dayID = Math.floor(options.startOfDay / 86400); + const query =gql` + { + uniswapDayData(id:${dayID}) { + id + dailyVolumeUSD + } + uniswapFactories { + totalVolumeUSD + } + }`; + const url = "https://api.goldsky.com/api/public/project_clu1fg6ajhsho01x7ajld3f5a/subgraphs/dragonswap-prod/1.0.0/gn"; + const req = await request(url, query); + return { + dailyVolume: req.uniswapDayData.dailyVolumeUSD, + totalVolume: req.uniswapFactories[0].totalVolumeUSD, + timestamp: timestamp, + } +} -adapters.adapter.sei.start = 1716854400; +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.SEI]: { + fetch, + start: 1716854400, + }, + } +} -export default adapters; +export default adapter; From de2973eb4e76904807ed867709ad5f3823b809e6 Mon Sep 17 00:00:00 2001 From: 0xngmi <80541789+0xngmi@users.noreply.github.com> Date: Tue, 17 Sep 2024 03:12:52 +0100 Subject: [PATCH 1479/1590] not v2 --- fees/dragonswap-sei.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/dragonswap-sei.ts b/fees/dragonswap-sei.ts index 379aa1280e..853d92e2fd 100644 --- a/fees/dragonswap-sei.ts +++ b/fees/dragonswap-sei.ts @@ -40,7 +40,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const adapter: Adapter = { - version: 2, + version: 1, adapter: { [CHAIN.SEI]: { fetch: graphs(endpoints), From 295b385a6a11de05d1ccd2776721909c54e65c68 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 17 Sep 2024 05:56:42 +0000 Subject: [PATCH 1480/1590] fix version of univ2DimensionAdapter --- fees/babydogeswap.ts | 1 + fees/biswap.ts | 3 ++- fees/elk.ts | 1 + fees/ferro.ts | 1 + fees/honeyswap.ts | 1 + fees/mimo.ts | 2 ++ fees/mojitoswap.ts | 1 + fees/pangolin.ts | 3 ++- fees/vvs-finance.ts | 1 + fees/wigoswap.ts | 1 + helpers/getUniSubgraph/index.ts | 12 ++++++------ protocols/alita-finance/index.ts | 1 + 12 files changed, 20 insertions(+), 8 deletions(-) diff --git a/fees/babydogeswap.ts b/fees/babydogeswap.ts index 0ead71e4c5..6dbb935de0 100644 --- a/fees/babydogeswap.ts +++ b/fees/babydogeswap.ts @@ -34,5 +34,6 @@ const adapters = univ2DimensionAdapter({ } }); + adapters.adapter.bsc.start = 1661780137; export default adapters; diff --git a/fees/biswap.ts b/fees/biswap.ts index 9203e1f8bf..39a85e9f6b 100644 --- a/fees/biswap.ts +++ b/fees/biswap.ts @@ -31,4 +31,5 @@ const adapters = univ2DimensionAdapter({ } }); -export default adapters; \ No newline at end of file + +export default adapters; diff --git a/fees/elk.ts b/fees/elk.ts index 124022095b..9c04ac9722 100644 --- a/fees/elk.ts +++ b/fees/elk.ts @@ -63,4 +63,5 @@ adapter.adapter.optimism.start = 1651542817; // adapter.adapter.iotex.start = 1639792417; // adapter.adapter.telos.start = 1648684800; + export default adapter; diff --git a/fees/ferro.ts b/fees/ferro.ts index 0b8557095e..7c0e16e84c 100644 --- a/fees/ferro.ts +++ b/fees/ferro.ts @@ -25,5 +25,6 @@ const adapters = univ2DimensionAdapter({ } }, { }); + adapters.adapter.cronos.start = 1661731973; export default adapters; diff --git a/fees/honeyswap.ts b/fees/honeyswap.ts index b2fd033ef1..5a3a9f0f41 100644 --- a/fees/honeyswap.ts +++ b/fees/honeyswap.ts @@ -34,4 +34,5 @@ const adapters = univ2DimensionAdapter({ adapters.adapter.polygon.start = 1622173831; adapters.adapter.xdai.start = 1599191431; + export default adapters; diff --git a/fees/mimo.ts b/fees/mimo.ts index dc090d8edd..fd2f3f7eda 100644 --- a/fees/mimo.ts +++ b/fees/mimo.ts @@ -35,4 +35,6 @@ const adapter = univ2DimensionAdapter({ }); + + export default adapter; diff --git a/fees/mojitoswap.ts b/fees/mojitoswap.ts index c1327f1a06..ba557f54b2 100644 --- a/fees/mojitoswap.ts +++ b/fees/mojitoswap.ts @@ -29,4 +29,5 @@ const adapter = univ2DimensionAdapter({ adapter.adapter.kcc.start = 1634200191; + export default adapter diff --git a/fees/pangolin.ts b/fees/pangolin.ts index 769333f713..f433eef1f9 100644 --- a/fees/pangolin.ts +++ b/fees/pangolin.ts @@ -32,4 +32,5 @@ const adapter = univ2DimensionAdapter({ } }); -export default adapter; \ No newline at end of file + +export default adapter; diff --git a/fees/vvs-finance.ts b/fees/vvs-finance.ts index 76ea751a13..96409080ab 100644 --- a/fees/vvs-finance.ts +++ b/fees/vvs-finance.ts @@ -23,4 +23,5 @@ const adapters = univ2DimensionAdapter({ }, { }); adapters.adapter.cronos.start = 1632035122; + export default adapters; diff --git a/fees/wigoswap.ts b/fees/wigoswap.ts index 557a55c46b..8a28536226 100644 --- a/fees/wigoswap.ts +++ b/fees/wigoswap.ts @@ -24,4 +24,5 @@ const adapters = univ2DimensionAdapter({ }, { }); adapters.adapter.fantom.start = 1642982400; + export default adapters; diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index ad943c289e..19cbfa1086 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -33,7 +33,7 @@ interface IGetChainVolumeParams { factory?: string, field?: string, blockGraphType?: string - filterParams?: IGetChainVolumeFilterParams[], + filterParams?: IGetChainVolumeFilterParams[], }, dailyVolume?: { factory?: string, @@ -137,7 +137,7 @@ function getGraphDimensions({ } // Queries const totalVolumeQuery = graphFieldsTotalVolume.filterParams - ? gql`query get_total_volume(${graphFieldsTotalVolume.filterParams.map(item => `$${item.name}: ${item.type}`).join(', ')}) { + ? gql`query get_total_volume(${graphFieldsTotalVolume.filterParams.map(item => `$${item.name}: ${item.type}`).join(', ')}) { ${graphFieldsTotalVolume.factory}( where: {${graphFieldsTotalVolume.filterParams.map(item => `${item.name}: $${item.name}`).join(', ')}} ) { @@ -385,17 +385,17 @@ function getGraphDimensions2({ if (totalVolume === undefined || feesPercent?.Fees === undefined) console.error(`Unable to get total fees on ${chain} from graph.`) }); - const totalFees = graphResTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) + const totalFees = graphResTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) // PREV TOTAL FEES const graphResPrevTotalFees = await request(graphUrls[chain], totalFeesQuery, { block: startBlock }, graphRequestHeaders?.[chain]).catch(_e => { if (totalVolume === undefined || feesPercent?.Fees === undefined) console.error(`Unable to get total fees on ${chain} from graph.`) }); - const prevTotalFees = graphResPrevTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) + const prevTotalFees = graphResPrevTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) const dailyFees = (totalFees == undefined && prevTotalFees == undefined) ? undefined : totalFees - prevTotalFees - + // ts-node --transpile-only cli/testAdapter.ts protocols uniswap let response: FetchResultGeneric = { timestamp: endTimestamp, @@ -443,7 +443,7 @@ function univ2DimensionAdapter(params: IGetChainVolumeParams, meta: BaseAdapter[ }, }; }, {} as BaseAdapter), - version: 2 + version: 1 }; return adapter; diff --git a/protocols/alita-finance/index.ts b/protocols/alita-finance/index.ts index f9711cf497..16b2ff8cfa 100644 --- a/protocols/alita-finance/index.ts +++ b/protocols/alita-finance/index.ts @@ -25,5 +25,6 @@ const adapter = univ2DimensionAdapter({ } }); + adapter.adapter.bsc.start = 1629947542; export default adapter; From dd7e9eea079c71eeb266a0c6393bd1be2c4cabde Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 17 Sep 2024 14:06:14 +0100 Subject: [PATCH 1481/1590] wagmi --- dexs/wagmi/wagmi.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/wagmi/wagmi.ts b/dexs/wagmi/wagmi.ts index 94038d2aca..9ee346f7cf 100644 --- a/dexs/wagmi/wagmi.ts +++ b/dexs/wagmi/wagmi.ts @@ -69,8 +69,8 @@ const getData = async (chain: Chain, timestamp: number) => { const totalVolume = Number(data.factories[0].totalVolumeUSD); const totalFee = Number(data.factories[0].totalFeesUSD); - const dailyVolume = Number(data.uniswapDayData.volumeUSD); - const dailyFees = Number(data.uniswapDayData.feesUSD); + const dailyVolume = Number(data.uniswapDayData?.volumeUSD ?? '0'); + const dailyFees = Number(data.uniswapDayData?.feesUSD ?? '0'); return { dailyFees: `${dailyFees}`, From 465c53111a7bb0035a1a338ca518b479755c67ab Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 17 Sep 2024 14:06:42 +0100 Subject: [PATCH 1482/1590] migrate to v2 --- fees/babydogeswap.ts | 7 ++----- fees/biswap.ts | 11 ++++------- fees/elk.ts | 7 ++----- fees/ferro.ts | 9 ++------- fees/honeyswap.ts | 7 ++----- fees/mimo.ts | 9 ++------- fees/mojitoswap.ts | 4 ++-- fees/pangolin.ts | 11 ++++------- fees/vvs-finance.ts | 7 ++----- fees/wigoswap.ts | 11 ++++------- helpers/getUniSubgraph/index.ts | 27 +++++++++++++++++++++++++++ protocols/alita-finance/index.ts | 9 ++++----- 12 files changed, 57 insertions(+), 62 deletions(-) diff --git a/fees/babydogeswap.ts b/fees/babydogeswap.ts index 6dbb935de0..5ffbc0fb4c 100644 --- a/fees/babydogeswap.ts +++ b/fees/babydogeswap.ts @@ -1,17 +1,14 @@ import { CHAIN } from "../helpers/chains"; -import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../helpers/getUniSubgraph"; // 0.2% to LP providers // 0.05% to treasury // 0.05% to buy back and burn BabyDoge! -const adapters = univ2DimensionAdapter({ +const adapters = univ2DimensionAdapter2({ graphUrls: { [CHAIN.BSC]: "https://graph-bsc-mainnet.babydoge.com/subgraphs/name/babydoge/exchange" }, - dailyVolume: { - factory: "factoryDayData" - }, totalVolume: { factory: "babyDogeFactories" }, diff --git a/fees/biswap.ts b/fees/biswap.ts index 39a85e9f6b..8c9ee5629c 100644 --- a/fees/biswap.ts +++ b/fees/biswap.ts @@ -1,13 +1,10 @@ -import * as sdk from "@defillama/sdk"; +import { graph } from "@defillama/sdk"; import { CHAIN } from "../helpers/chains"; -import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../helpers/getUniSubgraph"; -const adapters = univ2DimensionAdapter({ +const adapters = univ2DimensionAdapter2({ graphUrls: { - [CHAIN.BSC]: sdk.graph.modifyEndpoint('2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd') - }, - dailyVolume: { - factory: "pancakeDayData" + [CHAIN.BSC]: graph.modifyEndpoint('2D9rXpMTvAgofWngsyRE17jKr5ywrU4W3Eaa71579qkd') }, totalVolume: { factory: "pancakeFactories" diff --git a/fees/elk.ts b/fees/elk.ts index 9c04ac9722..59c9eed33a 100644 --- a/fees/elk.ts +++ b/fees/elk.ts @@ -1,8 +1,8 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../helpers/chains"; -import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../helpers/getUniSubgraph"; -const adapter = univ2DimensionAdapter({ +const adapter = univ2DimensionAdapter2({ graphUrls: { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('B8TGNwQ8xMoeFCdsv9dPkciRBpEYAy1UxmXDr7nc9fpE'), [CHAIN.AVAX]: sdk.graph.modifyEndpoint('2dyce92CewvhV17C8BMFoMCgaXdPTtwBzaz8AReQR3YV'), @@ -22,9 +22,6 @@ const adapter = univ2DimensionAdapter({ // [CHAIN.IOTEX]: "https://iotex-graph.elk.finance/subgraphs/name/elkfinance/elkdex-iotex", // [CHAIN.TELOS]: "https://telos-graph2.elk.finance/subgraphs/name/elkfinance/elkdex-telos" }, - dailyVolume: { - factory: "elkDayData" - }, totalVolume: { factory: "elkFactories" }, diff --git a/fees/ferro.ts b/fees/ferro.ts index 7c0e16e84c..765babd80d 100644 --- a/fees/ferro.ts +++ b/fees/ferro.ts @@ -1,15 +1,10 @@ import { CHAIN } from "../helpers/chains"; -import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../helpers/getUniSubgraph"; -const adapters = univ2DimensionAdapter({ +const adapters = univ2DimensionAdapter2({ graphUrls: { [CHAIN.CRONOS]: "https://graph.cronoslabs.com/subgraphs/name/ferro/swap", }, - dailyVolume: { - factory: "dailyVolume", - field: "volume", - dateField: "timestamp" - }, totalVolume: { factory: "tradeVolumes", field: "volume" diff --git a/fees/honeyswap.ts b/fees/honeyswap.ts index 5a3a9f0f41..ff81768b53 100644 --- a/fees/honeyswap.ts +++ b/fees/honeyswap.ts @@ -1,14 +1,11 @@ import { CHAIN } from "../helpers/chains"; -import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../helpers/getUniSubgraph"; -const adapters = univ2DimensionAdapter({ +const adapters = univ2DimensionAdapter2({ graphUrls: { [CHAIN.POLYGON]: " https://api.thegraph.com/subgraphs/name/1hive/honeyswap-polygon", [CHAIN.XDAI]: "https://api.thegraph.com/subgraphs/name/1hive/honeyswap-xdai" }, - dailyVolume: { - factory: "honeyswapDayData" - }, totalVolume: { factory: "honeyswapFactories" }, diff --git a/fees/mimo.ts b/fees/mimo.ts index fd2f3f7eda..9482aa1f96 100644 --- a/fees/mimo.ts +++ b/fees/mimo.ts @@ -1,7 +1,7 @@ import { CHAIN } from "../helpers/chains"; -import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../helpers/getUniSubgraph"; -const adapter = univ2DimensionAdapter({ +const adapter = univ2DimensionAdapter2({ graphUrls: { [CHAIN.IOTEX]: "https://graph.mimo.exchange/subgraphs/name/mimo/mainnet" }, @@ -9,11 +9,6 @@ const adapter = univ2DimensionAdapter({ factory: "uniswapFactories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "uniswapDayData", - field: "dailyVolumeUSD", - dateField: "date" - }, feesPercent: { type: "volume", UserFees: 0.3, diff --git a/fees/mojitoswap.ts b/fees/mojitoswap.ts index ba557f54b2..ef63df4122 100644 --- a/fees/mojitoswap.ts +++ b/fees/mojitoswap.ts @@ -1,11 +1,11 @@ import { CHAIN } from "../helpers/chains"; -import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../helpers/getUniSubgraph"; const graphUrls = { [CHAIN.KCC]: "https://thegraph.kcc.network/subgraphs/name/mojito/swap", }; -const adapter = univ2DimensionAdapter({ +const adapter = univ2DimensionAdapter2({ graphUrls, feesPercent: { type: "volume", diff --git a/fees/pangolin.ts b/fees/pangolin.ts index f433eef1f9..729b00595a 100644 --- a/fees/pangolin.ts +++ b/fees/pangolin.ts @@ -1,13 +1,10 @@ -import * as sdk from "@defillama/sdk"; +import { graph } from "@defillama/sdk"; import { CHAIN } from "../helpers/chains"; -import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../helpers/getUniSubgraph"; -const adapter = univ2DimensionAdapter({ +const adapter = univ2DimensionAdapter2({ graphUrls: { - [CHAIN.AVAX]: sdk.graph.modifyEndpoint('CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq') - }, - dailyVolume: { - factory: "pangolinDayData" + [CHAIN.AVAX]: graph.modifyEndpoint('CPXTDcwh6tVP88QvFWW7pdvZJsCN4hSnfMmYeF1sxCLq') }, totalVolume: { factory: "pangolinFactories" diff --git a/fees/vvs-finance.ts b/fees/vvs-finance.ts index 96409080ab..c9d04ec4c3 100644 --- a/fees/vvs-finance.ts +++ b/fees/vvs-finance.ts @@ -1,13 +1,10 @@ import { CHAIN } from "../helpers/chains"; -import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../helpers/getUniSubgraph"; -const adapters = univ2DimensionAdapter({ +const adapters = univ2DimensionAdapter2({ graphUrls: { [CHAIN.CRONOS]: "https://graph.cronoslabs.com/subgraphs/name/vvs/exchange" }, - dailyVolume: { - factory: "vvsDayData" - }, totalVolume: { factory: "vvsFactories" }, diff --git a/fees/wigoswap.ts b/fees/wigoswap.ts index 8a28536226..79a6f5f925 100644 --- a/fees/wigoswap.ts +++ b/fees/wigoswap.ts @@ -1,13 +1,10 @@ -import * as sdk from "@defillama/sdk"; +import { graph } from "@defillama/sdk"; import { CHAIN } from "../helpers/chains"; -import { univ2DimensionAdapter } from "../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../helpers/getUniSubgraph"; -const adapters = univ2DimensionAdapter({ +const adapters = univ2DimensionAdapter2({ graphUrls: { - [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('71os49womDk3DFcNRCAFYzATxxMgWpSMKhRn5ih6aWF1') - }, - dailyVolume: { - factory: "wigoDayData" + [CHAIN.FANTOM]: graph.modifyEndpoint('71os49womDk3DFcNRCAFYzATxxMgWpSMKhRn5ih6aWF1') }, totalVolume: { factory: "wigoswapFactories" diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 19cbfa1086..dad74e5f23 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -449,6 +449,32 @@ function univ2DimensionAdapter(params: IGetChainVolumeParams, meta: BaseAdapter[ return adapter; } +function univ2DimensionAdapter2(params: IGetChainVolumeParams, meta: BaseAdapter[string]['meta']) { + const graphs = getGraphDimensions2(params); + + const adapter: SimpleAdapter = { + adapter: Object.keys(params.graphUrls).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: graphs(chain as Chain), + start: getStartTimestamp({ + endpoints: params.graphUrls, + chain, + volumeField: params.dailyVolume?.field, + dailyDataField: params.dailyVolume?.factory + "s", + dateField: params.dailyVolume?.dateField, + }), + meta, + }, + }; + }, {} as BaseAdapter), + version: 2 + }; + + return adapter; +} + function wrapGraphError(e: Error) { const message = (e as any).response?.errors?.[0]?.message ?? e.message; return new Error(shortenString(message)); @@ -463,6 +489,7 @@ export { getGraphDimensions, getGraphDimensions2, univ2DimensionAdapter, + univ2DimensionAdapter2, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, DEFAULT_DAILY_VOLUME_FACTORY, diff --git a/protocols/alita-finance/index.ts b/protocols/alita-finance/index.ts index 16b2ff8cfa..15a38b9a56 100644 --- a/protocols/alita-finance/index.ts +++ b/protocols/alita-finance/index.ts @@ -1,11 +1,10 @@ -import * as sdk from "@defillama/sdk"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { graph } from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2DimensionAdapter } from "../../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../../helpers/getUniSubgraph"; -const adapter = univ2DimensionAdapter({ +const adapter = univ2DimensionAdapter2({ graphUrls: { - [CHAIN.BSC]: sdk.graph.modifyEndpoint('FBPHPJNE1jX18Lz8rgscvsigfxAUXakUC8w9KMid4dDz') + [CHAIN.BSC]: graph.modifyEndpoint('FBPHPJNE1jX18Lz8rgscvsigfxAUXakUC8w9KMid4dDz') }, feesPercent: { type: "volume", From f71c3fd816f18847510f7d542e9c21454a58ce90 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 17 Sep 2024 14:34:17 +0100 Subject: [PATCH 1483/1590] typus --- options/typus/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/options/typus/index.ts b/options/typus/index.ts index ada4004015..1db21660ff 100644 --- a/options/typus/index.ts +++ b/options/typus/index.ts @@ -8,7 +8,8 @@ const adapter: SimpleAdapter = { fetch: getChainData, start: 1697700660, } - } + }, + version: 2, } export default adapter; From 19ce30b5ef24504c4ad2268169694be3fe250d4b Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 17 Sep 2024 14:35:42 +0100 Subject: [PATCH 1484/1590] type --- options/typus/getChainData.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/options/typus/getChainData.ts b/options/typus/getChainData.ts index 0d27d879e2..c5eaf4ed6d 100644 --- a/options/typus/getChainData.ts +++ b/options/typus/getChainData.ts @@ -1,10 +1,10 @@ import { queryEvents } from "../../helpers/sui"; -import { FetchOptions, FetchResult } from "../../adapters/types"; +import { FetchOptions, FetchResultV2 } from "../../adapters/types"; async function getChainData( options: FetchOptions, -): Promise { +): Promise { const events = await queryEvents({eventType:"0x321848bf1ae327a9e022ccb3701940191e02fa193ab160d9c0e49cd3c003de3a::typus_dov_single::DeliveryEvent", options}) const dailyNotionalVolume = options.createBalances(); const dailyPremiumVolume = options.createBalances(); @@ -39,7 +39,6 @@ async function getChainData( } return { - timestamp: options.endTimestamp, dailyNotionalVolume, dailyPremiumVolume, }; From b8beed60d3fe7efa103134b2d072161b7a372bf7 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 17 Sep 2024 16:24:51 +0000 Subject: [PATCH 1485/1590] fix dragonswap-sei --- fees/dragonswap-sei.ts | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/fees/dragonswap-sei.ts b/fees/dragonswap-sei.ts index 853d92e2fd..ea995739d4 100644 --- a/fees/dragonswap-sei.ts +++ b/fees/dragonswap-sei.ts @@ -1,8 +1,9 @@ import { Adapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainEndpoints, FetchV2 } from "../adapters/types" +import type { ChainEndpoints, FetchOptions, FetchV2 } from "../adapters/types" import { getTimestampAtStartOfDayUTC } from "../utils/date"; +import { time } from "console"; const endpoints = { [CHAIN.SEI]: "https://api.goldsky.com/api/public/project_clu1fg6ajhsho01x7ajld3f5a/subgraphs/dragonswap-prod/1.0.0/gn" @@ -14,28 +15,29 @@ const methodology = { ProtocolAccumulation: "Fees sent to the protocol wallet (30% of total accumulated fees), is used to provide benefits to users in custom ways." } -const graphs = (graphUrls: ChainEndpoints) => { - const fetch: FetchV2 = async ({ chain, startTimestamp }) => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(startTimestamp) +const graphs = async (_t: any, _b: any, options: FetchOptions) => { - const graphQuery = gql - `{ - uniswapDayDatas(where: {date: ${todaysTimestamp}}) { - dailyFeesUSD - } - }`; - - const graphRes = await request(graphUrls[chain], graphQuery); - const dailyFee = graphRes.uniswapDayDatas[0].dailyFeesUSD; + const dayID = Math.floor(options.startOfDay / 86400); + const query =gql` + { + uniswapDayData(id:${dayID}) { + id + dailyVolumeUSD + dailyFeesUSD + } + }`; + const url = "https://api.goldsky.com/api/public/project_clu1fg6ajhsho01x7ajld3f5a/subgraphs/dragonswap-prod/1.0.0/gn"; + const req = await request(url, query); + const dailyFee = Number(req.uniswapDayData.dailyFeesUSD); return { + timestamp: options.startOfDay, dailyFees: dailyFee.toString(), - dailyLPProvidersRevenue: (dailyFee * 0.7).toString(), + // dailyLPProvidersRevenue: (dailyFee * 0.7).toString(), dailyRevenue: (dailyFee * 0.3).toString(), }; - }; - return fetch + }; @@ -43,7 +45,7 @@ const adapter: Adapter = { version: 1, adapter: { [CHAIN.SEI]: { - fetch: graphs(endpoints), + fetch: graphs, start: 79157663, meta: { methodology From dc422a27bef585a1793c1a98da5fe5e2d574abe7 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 17 Sep 2024 16:34:03 +0000 Subject: [PATCH 1486/1590] fix move to derivative ag --- {aggregators => aggregator-derivatives}/flat-money/index.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {aggregators => aggregator-derivatives}/flat-money/index.ts (100%) diff --git a/aggregators/flat-money/index.ts b/aggregator-derivatives/flat-money/index.ts similarity index 100% rename from aggregators/flat-money/index.ts rename to aggregator-derivatives/flat-money/index.ts From c38516359f8db7b1d8f407135d61f8e1fc130e77 Mon Sep 17 00:00:00 2001 From: literallymarvellous Date: Wed, 18 Sep 2024 06:07:19 +0100 Subject: [PATCH 1487/1590] fix timestamp --- dexs/pear-protocol/index.ts | 8 ++------ fees/pear-protocol/index.ts | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/dexs/pear-protocol/index.ts b/dexs/pear-protocol/index.ts index 8cff86bbe6..ad8530e63a 100644 --- a/dexs/pear-protocol/index.ts +++ b/dexs/pear-protocol/index.ts @@ -3,12 +3,8 @@ import { Adapter, BreakdownAdapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; -const fetch = async ( - timestamp: number, - chainBlocks: any, - options: FetchOptions -) => { - const url = "https://www.api.pearprotocol.io/v1/metric"; +const fetch = async (timestamp: number) => { + const url = `https://www.api.pearprotocol.io/v1/metric?timestamp=${timestamp}`; const response = await httpGet(url); const totalVolume = response.payload.totalVolume; diff --git a/fees/pear-protocol/index.ts b/fees/pear-protocol/index.ts index 88463c6af2..a0fdef061a 100644 --- a/fees/pear-protocol/index.ts +++ b/fees/pear-protocol/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; const fetch = async (timestamp: number) => { - const url = "https://www.api.pearprotocol.io/v1/metric"; + const url = `https://www.api.pearprotocol.io/v1/metric?timestamp=${timestamp}`; const response = await httpGet(url); const totalFees = response.payload.totalFees; const dailyFees = response.payload.dailyFees; From 6743d14359f1d86f1c22e914812884cf1a299b49 Mon Sep 17 00:00:00 2001 From: ryan Date: Wed, 18 Sep 2024 14:11:43 +0800 Subject: [PATCH 1488/1590] feat: Adapter, MYX-Finance (fees) --- fees/myx-finance/index.tsx | 72 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 fees/myx-finance/index.tsx diff --git a/fees/myx-finance/index.tsx b/fees/myx-finance/index.tsx new file mode 100644 index 0000000000..b5651a3bee --- /dev/null +++ b/fees/myx-finance/index.tsx @@ -0,0 +1,72 @@ +import { SimpleAdapter, FetchResultFees, FetchOptions } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; + +const DAILYURL = 'https://api.myx.finance/v2/scan/defilama/fee/all_by_chain' +const TOTALURL = 'https://api.myx.finance/v2/scan/defilama/cum_fee/all_by_chain' + +enum FetchType { + TOTAL = 1, + DAILY = 2 +} + +type Data = { + chainId: number, + time: number, + tradingFee?: string, + cumTradingFee?: string +} + +const methodology = { + totalFees: "Tracks the cumulative fees generated by all transactions.", + dailyFees: "Tracks the fees generated by transactions on a daily basis.", +} + + +const fetchApi = async (type: FetchType, startTime: number, endTime: number) => { + const rs = await fetchURL(`${type === FetchType.DAILY ? DAILYURL : TOTALURL}?startTime=${startTime}&endTime=${endTime}`) + const data: Data[] = rs?.data ?? [] + + return data +} + +const fetchFees = async (optios: FetchOptions) => { + const dailyAlls: Data[] = await fetchApi(FetchType.DAILY, optios.startTimestamp, optios.endTimestamp) + const dailyFees = dailyAlls.find((daily: Data)=> daily.chainId === optios.toApi.chainId) + + const totalAlls: Data[] = await fetchApi(FetchType.TOTAL, optios.startTimestamp, optios.endTimestamp) + const totalFees = totalAlls.find((daily: Data)=> daily.chainId === optios.toApi.chainId) + + return { + totalFees: totalFees?.tradingFee, + dailyFees: dailyFees?.tradingFee, + timestamp: optios.startTimestamp + } +} + +const startTimestamps: { [chain: string]: number } = { + [CHAIN.ARBITRUM]: 1706659200, + [CHAIN.LINEA]: 1708473600, +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: fetchFees, + start: startTimestamps[CHAIN.ARBITRUM], + meta: { + methodology + } + }, + [CHAIN.LINEA]: { + fetch: fetchFees, + start: startTimestamps[CHAIN.LINEA], + meta: { + methodology + } + }, + } +} + +export default adapter; From 78f6943e67bd4e6fbef4644d374855c6bb34aecf Mon Sep 17 00:00:00 2001 From: vulntor <22735155+algtm@users.noreply.github.com> Date: Wed, 18 Sep 2024 17:25:59 +0800 Subject: [PATCH 1489/1590] get data --- aggregators/udex-agg/index.ts | 43 ++++++++++++----------------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/aggregators/udex-agg/index.ts b/aggregators/udex-agg/index.ts index 5affcd1e1d..11748b6337 100644 --- a/aggregators/udex-agg/index.ts +++ b/aggregators/udex-agg/index.ts @@ -2,14 +2,12 @@ import { Chain } from "@defillama/sdk/build/general"; import { FetchResult, FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; -import fetchURL from "../../utils/fetchURL"; -import { getTimestampAtStartOfPreviousDayUTC } from "../../utils/date"; let abi = ["event Swap(address indexed payer,address indexed payee,address fromToken,address toToken,uint fromAmount,uint receivedAmount)"]; -let knownTokens = new Set(["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", "0x55d398326f99059fF775485246999027B3197955", "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"]); +let knownTokens=new Set(["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c","0x55d398326f99059fF775485246999027B3197955","0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"]) type IContract = { [c: string | Chain]: string; -}; +} const contract: IContract = { [CHAIN.BSC]: '0xfCD555b55AA785d46E8c6e9bBB109b10602c431c', @@ -17,42 +15,31 @@ const contract: IContract = { [CHAIN.ETHEREUM]:'0x9556E8ce70ceA3c43e4A6c17ad2FAb258067b058', [CHAIN.BASE]:'0x334F493613c1dD33a364684802fB9C728dfcE1A5' -}; -const bscStatsApi = "https://public.udex.one/bsc/indexer/56/udex/daliyVolume?";//return max 24 hour volume -const fetch: FetchV2 = async ({ getLogs, createBalances, chain,fromTimestamp, toTimestamp }): Promise => { +} + +const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise => { const dailyVolume = createBalances(); - const reqUrl=bscStatsApi+`from_timestamp=${fromTimestamp}&to_timestamp=${toTimestamp}` - if (chain == CHAIN.BSC) { - let data = await fetchURL(reqUrl); - if (data.data) { - return { dailyVolume: data.data}; + const logs = (await getLogs({ target: contract[chain], eventAbi: abi[0] })) + logs.map((log: any) => { + if ( knownTokens.has(log.toToken)){ + dailyVolume.add(log.toToken, log.receivedAmount) + }else{ + dailyVolume.add(log.fromToken, log.fromAmount) } - return { dailyVolume: 0 }; - } else { - const logs = (await getLogs({ target: contract[chain], eventAbi: abi[0] })); - logs.map((log: any) => { - if (knownTokens.has(log.toToken)) { - dailyVolume.add(log.toToken, log.receivedAmount); - } else { - dailyVolume.add(log.fromToken, log.fromAmount); - } }); - return { dailyVolume }; - } - + return { dailyVolume }; }; - const adapter: SimpleAdapter = { adapter: Object.keys(contract).reduce((acc, chain) => { return { ...acc, [chain]: { fetch, - start: 1724889600, - runAtCurrTime: false + start: 1726531200, + runAtCurrTime:false }, - }; + } }, {}), version: 2, }; From 3b8ca8eaa26898561f3d4ee3cf9cb3223095ba86 Mon Sep 17 00:00:00 2001 From: chanson Date: Wed, 18 Sep 2024 17:47:26 +0800 Subject: [PATCH 1490/1590] fix pool fees logic --- fees/solv-finance/index.ts | 72 ++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 3e76946499..1015580d5a 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -79,69 +79,65 @@ async function pool(options: FetchOptions, contracts: any): Promise { return options.createBalances(); } const pools = await getGraphData(contracts[options.chain]["poolFees"], options.chain); - const concretes = await concrete(pools, options); + const shareConcretes = await concrete(pools, options); const fromTimestamp = getTimestampAtStartOfDayUTC(options.fromTimestamp); const toTimestamp = getTimestampAtStartOfDayUTC(options.toTimestamp); - let poolNavs: any[] = []; - for (const pool of pools) { - const [todayNav, yesterdayNav] = await options.api.multiCall({ - calls: [{ - target: pool.navOracle, - params: [pool.poolId, toTimestamp], - }, { - target: pool.navOracle, - params: [pool.poolId, fromTimestamp], - }], - abi: 'function getSubscribeNav(bytes32 poolId_, uint256 time_) view returns (uint256 nav_, uint256 navTime_)', - }); - - let nav = todayNav.nav_ - yesterdayNav.nav_; - if (nav < 0) { - nav = 0; - } + const yesterdayNavs = await options.fromApi.multiCall({ + abi: 'function getSubscribeNav(bytes32 poolId_, uint256 time_) view returns (uint256 nav_, uint256 navTime_)', + calls: pools.map((pool: { navOracle: string; poolId: string }) => ({ + target: pool.navOracle, + params: [pool.poolId, fromTimestamp], + })), + }); - poolNavs.push(nav); - } + const todayNavs = await options.toApi.multiCall({ + abi: 'function getSubscribeNav(bytes32 poolId_, uint256 time_) view returns (uint256 nav_, uint256 navTime_)', + calls: pools.map((pool: { navOracle: string; poolId: string }) => ({ + target: pool.navOracle, + params: [pool.poolId, toTimestamp], + })), + }); const poolBaseInfos = await options.api.multiCall({ abi: `function slotBaseInfo(uint256 slot_) view returns (tuple(address issuer, address currency, uint64 valueDate, uint64 maturity, uint64 createTime, bool transferable, bool isValid))`, calls: pools.map((index: { contractAddress: string | number; openFundShareSlot: any; }) => ({ - target: concretes[index.contractAddress], + target: shareConcretes[index.contractAddress], params: [index.openFundShareSlot] })), }); - const totalValues = await options.api.multiCall({ + const shareTotalValues = await options.api.multiCall({ abi: 'function slotTotalValue(uint256) view returns (uint256)', calls: pools.map((index: { contractAddress: string | number; openFundShareSlot: any; }) => ({ - target: concretes[index.contractAddress], + target: shareConcretes[index.contractAddress], params: [index.openFundShareSlot] })), }); - const poolDecimalList = await options.api.multiCall({ - abi: "uint8:decimals", - calls: poolBaseInfos.map(i => i[1]), - }) - const dailyFees = options.createBalances(); for (let i = 0; i < pools.length; i++) { - const poolNav = poolNavs[i]; + const poolNavIncrease = todayNavs[i].nav_ - yesterdayNavs[i].nav_; const poolBaseInfo = poolBaseInfos[i]; - const totalValue = totalValues[i]; - const decimals = poolDecimalList[i]; + const shareTotalValue = shareTotalValues[i]; + + if (poolNavIncrease <= 0) { + console.log(`chain: ${options.chain} poolId: ${pools[i].poolId} poolNavIncrease: ${poolNavIncrease}, skip`); + continue; + } + if (shareTotalValue == 0) { + console.log(`chain: ${options.chain} poolId: ${pools[i].poolId} shareTotalValue is 0, skip`); + continue; + } const token = `${options.chain}:${poolBaseInfo.currency}`; - const total = BigNumber(totalValue) + // PoolFee = (ShareTotalValue / 10^(ShareDecimals)) * (PoolNavIncrease / 10^(PoolTokenDecimals)) * 10^(PoolFeeDecimals) + const poolFee = BigNumber(shareTotalValue) .dividedBy(BigNumber(10).pow(18)) - .times(BigNumber(10).pow(decimals)) - .times( - BigNumber(poolNav).dividedBy(BigNumber(10).pow(decimals)) - ); - - dailyFees.addBalances({ [token]: total.toNumber() }); + .times(BigNumber(poolNavIncrease)); + dailyFees.addBalances({ [token]: poolFee.toNumber() }); + console.log('chain', options.chain, 'poolId', pools[i].poolId, 'poolNavIncrease', poolNavIncrease, 'shareTotalValue', shareTotalValue, 'poolFee', poolFee.toNumber()); } return dailyFees; From 0107ce7933b2b67b5f30e8f3a83f8e170888b3cc Mon Sep 17 00:00:00 2001 From: chanson Date: Wed, 18 Sep 2024 17:50:40 +0800 Subject: [PATCH 1491/1590] Update index.ts --- fees/solv-finance/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 1015580d5a..62edf392d0 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -132,7 +132,7 @@ async function pool(options: FetchOptions, contracts: any): Promise { } const token = `${options.chain}:${poolBaseInfo.currency}`; - // PoolFee = (ShareTotalValue / 10^(ShareDecimals)) * (PoolNavIncrease / 10^(PoolTokenDecimals)) * 10^(PoolFeeDecimals) + // PoolFee = (ShareTotalValue / 10^(ShareDecimals)) * (PoolNavIncrease / 10^(PoolTokenDecimals)) * 10^(PoolTokenFeeDecimals) const poolFee = BigNumber(shareTotalValue) .dividedBy(BigNumber(10).pow(18)) .times(BigNumber(poolNavIncrease)); @@ -198,4 +198,4 @@ Object.keys(chains).forEach((chain: Chain) => { }; }); -export default adapter; \ No newline at end of file +export default adapter; From 325777c366f581a7e7da60a3ed67268e6f341e60 Mon Sep 17 00:00:00 2001 From: chanson Date: Wed, 18 Sep 2024 17:50:57 +0800 Subject: [PATCH 1492/1590] Update index.ts --- fees/solv-finance/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 62edf392d0..29a6f98826 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -132,7 +132,7 @@ async function pool(options: FetchOptions, contracts: any): Promise { } const token = `${options.chain}:${poolBaseInfo.currency}`; - // PoolFee = (ShareTotalValue / 10^(ShareDecimals)) * (PoolNavIncrease / 10^(PoolTokenDecimals)) * 10^(PoolTokenFeeDecimals) + // PoolFee = (ShareTotalValue / 10^(ShareDecimals)) * (PoolNavIncrease / 10^(PoolTokenDecimals)) * 10^(PoolTokenDecimals) const poolFee = BigNumber(shareTotalValue) .dividedBy(BigNumber(10).pow(18)) .times(BigNumber(poolNavIncrease)); From d17068a17891801774e9a56b8e2da7244e032842 Mon Sep 17 00:00:00 2001 From: buchaoqun Date: Wed, 18 Sep 2024 19:03:33 +0800 Subject: [PATCH 1493/1590] update deployed time del console.log --- fees/solv-finance/index.ts | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/fees/solv-finance/index.ts b/fees/solv-finance/index.ts index 29a6f98826..c17ff9145c 100644 --- a/fees/solv-finance/index.ts +++ b/fees/solv-finance/index.ts @@ -17,22 +17,22 @@ const chains: { [chain: Chain]: { deployedAt: number }; } = { [CHAIN.ETHEREUM]: { - deployedAt: 1681084800, + deployedAt: 1726531200, }, [CHAIN.BSC]: { - deployedAt: 1679097600, + deployedAt: 1726531200, }, [CHAIN.ARBITRUM]: { - deployedAt: 1682380800, + deployedAt: 1726531200, }, [CHAIN.MANTLE]: { - deployedAt: 1692835200, + deployedAt: 1726531200, }, [CHAIN.MERLIN]: { - deployedAt: 1710892800, + deployedAt: 1726531200, }, [CHAIN.CORE]: { - deployedAt: 1726012800, + deployedAt: 1726531200, }, }; @@ -123,11 +123,9 @@ async function pool(options: FetchOptions, contracts: any): Promise { const shareTotalValue = shareTotalValues[i]; if (poolNavIncrease <= 0) { - console.log(`chain: ${options.chain} poolId: ${pools[i].poolId} poolNavIncrease: ${poolNavIncrease}, skip`); continue; } if (shareTotalValue == 0) { - console.log(`chain: ${options.chain} poolId: ${pools[i].poolId} shareTotalValue is 0, skip`); continue; } @@ -137,7 +135,6 @@ async function pool(options: FetchOptions, contracts: any): Promise { .dividedBy(BigNumber(10).pow(18)) .times(BigNumber(poolNavIncrease)); dailyFees.addBalances({ [token]: poolFee.toNumber() }); - console.log('chain', options.chain, 'poolId', pools[i].poolId, 'poolNavIncrease', poolNavIncrease, 'shareTotalValue', shareTotalValue, 'poolFee', poolFee.toNumber()); } return dailyFees; From 9b9db2475eac8e1724c0d620bad7a6a7a774cb44 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 18 Sep 2024 18:38:24 +0200 Subject: [PATCH 1494/1590] vfat: hack to reduce #event log calls --- fees/vfat/index.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/fees/vfat/index.ts b/fees/vfat/index.ts index 184e1322bb..716314a5ff 100644 --- a/fees/vfat/index.ts +++ b/fees/vfat/index.ts @@ -54,25 +54,27 @@ const chainSettings: any = { const settings = chainSettings[chain]; - // Fetch Deploy events to get all Sickle contract addresses +/* // Fetch Deploy events to get all Sickle contract addresses const deployLogs = await getLogs({ target: settings.factory, fromBlock: settings.fromBlock, eventAbi: 'event Deploy(address indexed admin, address sickle)', + cacheInCloud: true, }); - const sickleContracts = deployLogs.map((log: any) => log.sickle); + const sickleContracts = deployLogs.map((log: any) => log.sickle); */ const logs = await getLogs({ - targets: sickleContracts, + // targets: sickleContracts, eventAbi: 'event FeeCharged(bytes32 feesHash, uint256 amount, address token)', }); const logs2 = await getLogs({ - targets: sickleContracts, + // targets: sickleContracts, eventAbi: 'event FeeCharged(address strategy, bytes4 feeDescriptor, uint256 amount, address token)', }); + logs.forEach((log: any) => { dailyFees.add(log.token, log.amount); }); From be4f45b026173173c7060d1edca50796d10d9250 Mon Sep 17 00:00:00 2001 From: Dav0808 Date: Wed, 18 Sep 2024 21:07:51 +0400 Subject: [PATCH 1495/1590] hinkal-totalVolume --- dexs/hinkal/index.ts | 173 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 dexs/hinkal/index.ts diff --git a/dexs/hinkal/index.ts b/dexs/hinkal/index.ts new file mode 100644 index 0000000000..8ea56b2d52 --- /dev/null +++ b/dexs/hinkal/index.ts @@ -0,0 +1,173 @@ +import axios from "axios"; +import { Adapter, FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const fetchEthereum = async (options: FetchOptions) => { + const timestamp = options.endTimestamp; + const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=1`; + const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=1`; + try { + const responseTotal = await axios.get(urlTotal); + const dataTotal = responseTotal.data; + const totalVolume = dataTotal.internal_volume + dataTotal.external_volume; + + const responseDaily = await axios.get(urlDaily); + const dataDaily = responseDaily.data; + const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; + return { totalVolume, dailyVolume }; + } catch (error) { + console.error("Error fetching volume:", error); + return { totalVolume: 0, dailyVolume: 0 }; + } +}; + +const fetchBase = async (options: FetchOptions) => { + const timestamp = options.endTimestamp; + const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=8453`; + const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=8453`; + try { + const responseTotal = await axios.get(urlTotal); + const dataTotal = responseTotal.data; + const totalVolume = dataTotal.internal_volume + dataTotal.external_volume; + + const responseDaily = await axios.get(urlDaily); + const dataDaily = responseDaily.data; + const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; + return { totalVolume, dailyVolume }; + } catch (error) { + console.error("Error fetching volume:", error); + return { totalVolume: 0, dailyVolume: 0 }; + } +}; + +const fetchArbitrum = async (options: FetchOptions) => { + const timestamp = options.endTimestamp; + const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=42161`; + const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=42161`; + try { + const responseTotal = await axios.get(urlTotal); + const dataTotal = responseTotal.data; + const totalVolume = dataTotal.internal_volume + dataTotal.external_volume; + + const responseDaily = await axios.get(urlDaily); + const dataDaily = responseDaily.data; + const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; + return { totalVolume, dailyVolume }; + } catch (error) { + console.error("Error fetching volume:", error); + return { totalVolume: 0, dailyVolume: 0 }; + } +}; + +const fetchPolygon = async (options: FetchOptions) => { + const timestamp = options.endTimestamp; + const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=137`; + const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=137`; + try { + const responseTotal = await axios.get(urlTotal); + const dataTotal = responseTotal.data; + const totalVolume = dataTotal.internal_volume + dataTotal.external_volume; + + const responseDaily = await axios.get(urlDaily); + const dataDaily = responseDaily.data; + const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; + return { totalVolume, dailyVolume }; + } catch (error) { + console.error("Error fetching volume:", error); + return { totalVolume: 0, dailyVolume: 0 }; + } +}; + +const fetchBNB = async (options: FetchOptions) => { + const timestamp = options.endTimestamp; + const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=56`; + const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=56`; + try { + const responseTotal = await axios.get(urlTotal); + const dataTotal = responseTotal.data; + const totalVolume = dataTotal.internal_volume + dataTotal.external_volume; + + const responseDaily = await axios.get(urlDaily); + const dataDaily = responseDaily.data; + const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; + return { totalVolume, dailyVolume }; + } catch (error) { + console.error("Error fetching volume:", error); + return { totalVolume: 0, dailyVolume: 0 }; + } +}; + +const fetchAVALANCHE = async (options: FetchOptions) => { + const timestamp = options.endTimestamp; + const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=43114`; + const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=43114`; + try { + const responseTotal = await axios.get(urlTotal); + const dataTotal = responseTotal.data; + const totalVolume = dataTotal.internal_volume + dataTotal.external_volume; + + const responseDaily = await axios.get(urlDaily); + const dataDaily = responseDaily.data; + const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; + return { totalVolume, dailyVolume }; + } catch (error) { + console.error("Error fetching volume:", error); + return { totalVolume: 0, dailyVolume: 0 }; + } +}; + +const fetchOPTIMISM = async (options: FetchOptions) => { + const timestamp = options.endTimestamp; + const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=10`; + const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=10`; + try { + const responseTotal = await axios.get(urlTotal); + const dataTotal = responseTotal.data; + const totalVolume = dataTotal.internal_volume + dataTotal.external_volume; + + const responseDaily = await axios.get(urlDaily); + const dataDaily = responseDaily.data; + const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; + return { totalVolume, dailyVolume }; + } catch (error) { + console.error("Error fetching volume:", error); + return { totalVolume: 0, dailyVolume: 0 }; + } +}; + +const fetchBLAST = async (options: FetchOptions) => { + const timestamp = options.endTimestamp; + const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=81457`; + const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=81457`; + try { + const responseTotal = await axios.get(urlTotal); + const dataTotal = responseTotal.data; + const totalVolume = dataTotal.internal_volume + dataTotal.external_volume; + + const responseDaily = await axios.get(urlDaily); + const dataDaily = responseDaily.data; + const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; + return { totalVolume, dailyVolume }; + } catch (error) { + console.error("Error fetching volume:", error); + return { totalVolume: 0, dailyVolume: 0 }; + } +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: fetchEthereum, + start: 1713561695, + }, + [CHAIN.BASE]: { fetch: fetchBase, start: 1713561695 }, + [CHAIN.ARBITRUM]: { fetch: fetchArbitrum, start: 1713561695 }, + [CHAIN.POLYGON]: { fetch: fetchPolygon, start: 1713561695 }, + [CHAIN.BSC]: { fetch: fetchBNB, start: 1713561695 }, + [CHAIN.AVAX]: { fetch: fetchAVALANCHE, start: 1713561695 }, + [CHAIN.OPTIMISM]: { fetch: fetchOPTIMISM, start: 1713561695 }, + [CHAIN.BLAST]: { fetch: fetchBLAST, start: 1713561695 }, + }, +}; + +export default adapter; From 26ccd4087799b010aaf62ab228cd2abb8cd2468b Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Thu, 19 Sep 2024 09:37:46 +0400 Subject: [PATCH 1496/1590] Add tondiamonds DEX aggregator volume adapter --- aggregators/tondiamonds/index.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 aggregators/tondiamonds/index.ts diff --git a/aggregators/tondiamonds/index.ts b/aggregators/tondiamonds/index.ts new file mode 100644 index 0000000000..3ff9b91116 --- /dev/null +++ b/aggregators/tondiamonds/index.ts @@ -0,0 +1,26 @@ +import { Adapter, FetchV2 } from "../../adapters/types"; +import { httpGet } from "../../utils/fetchURL"; +import { CHAIN } from "../../helpers/chains"; + +const statisticsEndpoint = "https://ton.diamonds/api/v2/dex/stats" + +const fetch: FetchV2 = async ({startTimestamp}) => { + const statistics = await httpGet(statisticsEndpoint) + + return { + timestamp: Math.floor(new Date(statistics?.data?.yesterday).getTime() / 1000), + dailyVolume: statistics?.data?.yesterdayVolume, + }; +} + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.TON]: { + fetch, + start: 1725148800, + }, + } +} + +export default adapter; From c6798ff92196794b52d23d88259b3c8b92f9e8d7 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Sep 2024 07:48:51 +0200 Subject: [PATCH 1497/1590] Uni v2 adapters refactor (#1925) * code refactor * bugfix --- dexs/Scale/index.ts | 18 +--- dexs/Viridian/index.ts | 19 +--- dexs/abcdefx/index.ts | 23 ++-- dexs/archly-finance-v2/index.ts | 117 +++++--------------- dexs/auroraswap/index.ts | 34 +----- dexs/canto-dex/index.ts | 25 +---- dexs/chronos-v2/index.ts | 19 +--- dexs/chronos/index.ts | 15 +-- dexs/deltaswap/index.ts | 25 ++--- dexs/dexswap/index.ts | 10 +- dexs/equalizer-exchange/index.ts | 18 +--- dexs/equilibre/index.ts | 18 +--- dexs/fvm-exchange/index.ts | 18 +--- dexs/hermes-protocol/index.ts | 18 +--- dexs/keller-cl/index.ts | 22 ++-- dexs/keller/index.ts | 20 +--- dexs/merchant-moe/index.ts | 16 +-- dexs/nearpad/index.ts | 30 +----- dexs/nile-exchange-v1/index.ts | 18 +--- dexs/nuri-exchange-v1/index.ts | 18 +--- dexs/pearlfi/index.ts | 18 +--- dexs/ramses-exchange/index.ts | 18 +--- dexs/solidly/index.ts | 18 +--- dexs/thick/index.ts | 33 +++--- dexs/trisolaris/index.ts | 33 +----- dexs/velocimeter-v2/index.ts | 21 +--- dexs/velodrome-v2/index.ts | 17 +-- dexs/velodrome-v2/v2.ts | 7 -- dexs/wannaswap/index.ts | 38 +------ dexs/wigoswap/index.ts | 15 +-- fees/Viridian/index.ts | 10 +- fees/abcdefx.ts | 30 +++--- fees/chronos.ts | 17 +-- fees/equilibre-exchange.ts | 18 +--- fees/keller-cl/index.ts | 159 ++++----------------------- fees/nile-exchange-v1/index.ts | 39 ++----- fees/nuri-exchange-v1/index.ts | 19 +--- fees/pearlfi.ts | 20 +--- fees/ramses-exchange-v1/index.ts | 10 +- fees/thick.ts | 30 ++---- helpers/dexVolumeLogs.ts | 179 ++----------------------------- helpers/uniswap.ts | 48 +++++++-- 42 files changed, 291 insertions(+), 1007 deletions(-) delete mode 100644 dexs/velodrome-v2/v2.ts diff --git a/dexs/Scale/index.ts b/dexs/Scale/index.ts index 7a2b448177..fe9c77420a 100644 --- a/dexs/Scale/index.ts +++ b/dexs/Scale/index.ts @@ -1,16 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0xEd8db60aCc29e14bC867a497D94ca6e3CeB5eC04'; - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.BASE]: { - fetch: getDexVolumeExports({ chain: CHAIN.BASE, factory: FACTORY_ADDRESS }), - start: 1695458888, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.BASE]: { factory: '0xEd8db60aCc29e14bC867a497D94ca6e3CeB5eC04', }, +}) diff --git a/dexs/Viridian/index.ts b/dexs/Viridian/index.ts index 7c26ae7e2d..72a98ebe47 100644 --- a/dexs/Viridian/index.ts +++ b/dexs/Viridian/index.ts @@ -1,17 +1,6 @@ -import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0xb54a83cfEc6052E05BB2925097FAff0EC22893F3' - -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.CORE]: { - fetch: async (options: FetchOptions) => getDexVolumeExports({ chain: CHAIN.CORE, factory: FACTORY_ADDRESS, })(options.startOfDay, null, options), - start: 1715904000, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.CORE]: { factory: '0xb54a83cfEc6052E05BB2925097FAff0EC22893F3', }, +}) diff --git a/dexs/abcdefx/index.ts b/dexs/abcdefx/index.ts index 464a0e4ddb..7c15aaaa58 100644 --- a/dexs/abcdefx/index.ts +++ b/dexs/abcdefx/index.ts @@ -1,22 +1,11 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { Chain } from "@defillama/sdk/build/general"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; const FACTORY_ADDRESS = '0x01f43d2a7f4554468f77e06757e707150e39130c'; -const graph = (_chain: Chain) => - getDexVolumeExports({ chain: _chain, factory: FACTORY_ADDRESS }) - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.KCC]: { fetch: graph(CHAIN.KCC), start: 1670188701 }, - //[CHAIN.MULTIVAC]: { fetch: graph(CHAIN.MULTIVAC), start: 1670226950 }, /// ! typeof CHAIN - [CHAIN.FANTOM]: { fetch: graph(CHAIN.FANTOM), start: 1671580916 }, - //[CHAIN.ECHELON]: { fetch: graph(CHAIN.ECHELON), start: 1671608400 }, /// ded!? - [CHAIN.KAVA]: { fetch: graph(CHAIN.KAVA), start: 1676855943 } - } -}; - -export default adapter; \ No newline at end of file +export default uniV2Exports({ + [CHAIN.FANTOM]: { factory: FACTORY_ADDRESS, }, + [CHAIN.KCC]: { factory: FACTORY_ADDRESS, }, + [CHAIN.KAVA]: { factory: FACTORY_ADDRESS, }, +}) diff --git a/dexs/archly-finance-v2/index.ts b/dexs/archly-finance-v2/index.ts index 7eaf7dd46f..84413f2e30 100644 --- a/dexs/archly-finance-v2/index.ts +++ b/dexs/archly-finance-v2/index.ts @@ -1,98 +1,31 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0x12508dd9108Abab2c5fD8fC6E4984E46a3CF7824'; +const factory = '0x12508dd9108Abab2c5fD8fC6E4984E46a3CF7824'; const FACTORY_ADDRESS_ZKSYNC = '0x30A0DD3D0D9E99BD0E67b323FB706788766dCff2'; const FACTORY_ADDRESS_ETHERUEM = '0xE8E2b714C57937E0b29c6ABEAF00B52388cAb598'; -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.ARBITRUM_NOVA]: { - fetch: getDexVolumeExports({ chain: CHAIN.ARBITRUM_NOVA, factory: FACTORY_ADDRESS }), - start: 1700784000, - }, - [CHAIN.ARBITRUM]: { - fetch: getDexVolumeExports({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS }), - start: 1700784000, - }, - [CHAIN.AVAX]: { - fetch: getDexVolumeExports({ chain: CHAIN.AVAX, factory: FACTORY_ADDRESS }), - start: 1708473600, - }, - [CHAIN.BASE]: { - fetch: getDexVolumeExports({ chain: CHAIN.BASE, factory: FACTORY_ADDRESS }), - start: 1700784000, - }, - [CHAIN.BLAST]: { - fetch: getDexVolumeExports({ chain: CHAIN.BLAST, factory: FACTORY_ADDRESS }), - start: 1710720000, - }, - [CHAIN.BSC]: { - fetch: getDexVolumeExports({ chain: CHAIN.BSC, factory: FACTORY_ADDRESS }), - start: 1700784000, - }, - [CHAIN.CRONOS]: { - fetch: getDexVolumeExports({ chain: CHAIN.CRONOS, factory: FACTORY_ADDRESS }), - start: 1708473600, - }, - [CHAIN.ETHEREUM]: { - fetch: getDexVolumeExports({ chain: CHAIN.ETHEREUM, factory: FACTORY_ADDRESS_ETHERUEM }), - start: 1713070800, - }, - [CHAIN.FANTOM]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), - start: 1700784000, - }, - [CHAIN.FILECOIN]: { - fetch: getDexVolumeExports({ chain: CHAIN.FILECOIN, factory: FACTORY_ADDRESS }), - start: 1710979200, - }, - [CHAIN.FRAXTAL]: { - fetch: getDexVolumeExports({ chain: CHAIN.FRAXTAL, factory: FACTORY_ADDRESS }), - start: 1710720000, - }, - [CHAIN.KAVA]: { - fetch: getDexVolumeExports({ chain: CHAIN.KAVA, factory: FACTORY_ADDRESS }), - start: 1700784000, - }, - [CHAIN.MANTLE]: { - fetch: getDexVolumeExports({ chain: CHAIN.MANTLE, factory: FACTORY_ADDRESS }), - start: 1708473600, - }, - [CHAIN.METIS]: { - fetch: getDexVolumeExports({ chain: CHAIN.METIS, factory: FACTORY_ADDRESS }), - start: 1708473600, - }, - [CHAIN.MODE]: { - fetch: getDexVolumeExports({ chain: CHAIN.MODE, factory: FACTORY_ADDRESS }), - start: 1711792800, - }, - [CHAIN.NEON]: { - fetch: getDexVolumeExports({ chain: CHAIN.NEON, factory: FACTORY_ADDRESS }), - start: 1708473600, - }, - [CHAIN.OPTIMISM]: { - fetch: getDexVolumeExports({ chain: CHAIN.OPTIMISM, factory: FACTORY_ADDRESS }), - start: 1700784000, - }, - [CHAIN.POLYGON]: { - fetch: getDexVolumeExports({ chain: CHAIN.POLYGON, factory: FACTORY_ADDRESS }), - start: 1700784000, - }, - [CHAIN.TELOS]: { - fetch: getDexVolumeExports({ chain: CHAIN.TELOS, factory: FACTORY_ADDRESS }), - start: 1700784000, - }, - [CHAIN.ERA]: { - fetch: getDexVolumeExports({ chain: CHAIN.ERA, factory: FACTORY_ADDRESS_ZKSYNC }), - start: 1708473600, - }, - [CHAIN.ZORA]: { - fetch: getDexVolumeExports({ chain: CHAIN.ZORA, factory: FACTORY_ADDRESS }), - start: 1711929600, - }, - } -}; -export default adapter; +export default uniV2Exports({ + [CHAIN.ARBITRUM_NOVA]: { factory }, + [CHAIN.ARBITRUM]: { factory }, + [CHAIN.AVAX]: { factory }, + [CHAIN.BASE]: { factory }, + [CHAIN.BLAST]: { factory }, + [CHAIN.BSC]: { factory }, + [CHAIN.CRONOS]: { factory }, + [CHAIN.ETHEREUM]: { factory: FACTORY_ADDRESS_ETHERUEM }, + [CHAIN.FANTOM]: { factory }, + [CHAIN.FILECOIN]: { factory }, + [CHAIN.FRAXTAL]: { factory }, + [CHAIN.KAVA]: { factory }, + [CHAIN.MANTLE]: { factory }, + [CHAIN.METIS]: { factory }, + [CHAIN.MODE]: { factory }, + [CHAIN.NEON]: { factory }, + [CHAIN.OPTIMISM]: { factory }, + [CHAIN.POLYGON]: { factory }, + [CHAIN.TELOS]: { factory }, + [CHAIN.ERA]: { factory: FACTORY_ADDRESS_ZKSYNC }, + [CHAIN.ZORA]: { factory }, +}) \ No newline at end of file diff --git a/dexs/auroraswap/index.ts b/dexs/auroraswap/index.ts index b7aaf8fe3b..b6aab258a0 100644 --- a/dexs/auroraswap/index.ts +++ b/dexs/auroraswap/index.ts @@ -1,30 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types" -import { CHAIN } from "../../helpers/chains" -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { CHAIN } from "../../helpers/chains"; +import { uniV2Exports } from "../../helpers/uniswap"; - -const pools: string[] = [ - '0xf3de9dc38f62608179c45fe8943a0ca34ba9cefc', - '0xc57ecc341ae4df32442cf80f34f41dc1782fe067', - '0x480a68ba97d70495e80e11e05d59f6c659749f27', - '0xec538fafafcbb625c394c35b11252cef732368cd', - '0xdb0363ee28a5b40bdc2f4701e399c63e00f91aa8', - '0xefcf518ca36dc3362f539965807b42a77dc26be0', - '0x5bdac608cd38c5c8738f5be20813194a3150d4ff', - '0xcb8584360dc7a4eac4878b48fb857aa794e46fa8', - '0x865c59d555e59c9f35487bbdfb22d617c67aeabd', - '0xe11a3f2bab372d88d133b64487d1772847eec4ea', - '0x23524a789f93b798a6e7011b276edf09083cfde6', - '0x30c3d6c114a350026ea0aa770788374ad6c6f765' -].map((address: string) => address.toLowerCase()); - -const adapters: SimpleAdapter = { - adapter: { - [CHAIN.AURORA]: { - fetch: getDexVolumeExports({ chain: CHAIN.AURORA, pools }), - start: 1678838400, - } - } -} - -export default adapters +export default uniV2Exports({ + [CHAIN.AURORA]: { factory: '0xC5E1DaeC2ad401eBEBdd3E32516d90Ab251A3aA3', }, +}) diff --git a/dexs/canto-dex/index.ts b/dexs/canto-dex/index.ts index 68e8d84712..5d01d5b0eb 100644 --- a/dexs/canto-dex/index.ts +++ b/dexs/canto-dex/index.ts @@ -1,23 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const lpAddress = [ - '0x9571997a66d63958e1b3de9647c22bd6b9e7228c', - '0x1d20635535307208919f0b67c3b2065965a85aa9', - '0x30838619c55b787bafc3a4cd9aea851c1cfb7b19', - '0x216400ba362d8fce640085755e47075109718c8b', - '0x35db1f3a6a6f07f82c76fcc415db6cfb1a7df833', - '0x830fbc440a0a61b429b9ece5b7a4af003537fad2', -]; - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.CANTO]: { - fetch: getDexVolumeExports({ chain: CHAIN.CANTO, pools: lpAddress }), - start: 1668988800, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.CANTO]: { factory: '0xE387067f12561e579C5f7d4294f51867E0c1cFba', }, +}) diff --git a/dexs/chronos-v2/index.ts b/dexs/chronos-v2/index.ts index 557ac6c270..b5eefeb5b6 100644 --- a/dexs/chronos-v2/index.ts +++ b/dexs/chronos-v2/index.ts @@ -1,16 +1,7 @@ -import { Fetch, SimpleAdapter } from "../../adapters/types" -import { CHAIN } from "../../helpers/chains" -import { getDexVolumeExportsV3 } from "../../helpers/dexVolumeLogs"; +import { uniV3Exports } from "../../helpers/uniswap"; -const poolFactoryAddress = '0x4Db9D624F67E00dbF8ef7AE0e0e8eE54aF1dee49'; - -const adapters: SimpleAdapter = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch: getDexVolumeExportsV3({ factory: poolFactoryAddress, factoryFromBlock: 114041129, chain: CHAIN.ARBITRUM, }) as Fetch, - start: 1690070400, - } +export default uniV3Exports({ + arbitrum: { + factory: '0x4Db9D624F67E00dbF8ef7AE0e0e8eE54aF1dee49', } -} - -export default adapters; +}) \ No newline at end of file diff --git a/dexs/chronos/index.ts b/dexs/chronos/index.ts index b7acbc6e61..2dde375259 100644 --- a/dexs/chronos/index.ts +++ b/dexs/chronos/index.ts @@ -1,16 +1,9 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; const FACTORY_ADDRESS = '0xCe9240869391928253Ed9cc9Bcb8cb98CB5B0722'; -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch: getDexVolumeExports({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS }), - start: 1679702400, - }, - } -}; +export default uniV2Exports({ + [CHAIN.ARBITRUM]: { factory: FACTORY_ADDRESS, }, +}) -export default adapter; diff --git a/dexs/deltaswap/index.ts b/dexs/deltaswap/index.ts index fb49acd714..e2a32f291c 100644 --- a/dexs/deltaswap/index.ts +++ b/dexs/deltaswap/index.ts @@ -1,21 +1,8 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const adapters: SimpleAdapter = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch: getDexVolumeExports({ chain: CHAIN.ARBITRUM, factory: '0xcb85e1222f715a81b8edaeb73b28182fa37cffa8' }), - start: 1705968000, - }, - [CHAIN.BASE]: { - fetch: getDexVolumeExports({ chain: CHAIN.BASE, factory: '0x9a9a171c69cc811dc6b59bb2f9990e34a22fc971' }), - start: 1715644800, - }, - [CHAIN.ETHEREUM]: { - fetch: getDexVolumeExports({ chain: CHAIN.ETHEREUM, factory: '0x5fbe219e88f6c6f214ce6f5b1fcaa0294f31ae1b' }), - start: 1716854400, - } - } -} -export default adapters; +export default uniV2Exports({ + [CHAIN.ARBITRUM]: { factory: '0xcb85e1222f715a81b8edaeb73b28182fa37cffa8', }, + [CHAIN.BASE]: { factory: '0x9a9a171c69cc811dc6b59bb2f9990e34a22fc971', }, + [CHAIN.ETHEREUM]: { factory: '0x5fbe219e88f6c6f214ce6f5b1fcaa0294f31ae1b', }, +}) diff --git a/dexs/dexswap/index.ts b/dexs/dexswap/index.ts index 0d3f5c6b17..339fe741f1 100644 --- a/dexs/dexswap/index.ts +++ b/dexs/dexswap/index.ts @@ -1,10 +1,10 @@ import * as sdk from "@defillama/sdk"; 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"; +import { uniV2Exports } from "../../helpers/uniswap"; const FACTORY_ADDRESS = '0x3e40739d8478c58f9b973266974c58998d4f9e8b'; @@ -14,6 +14,12 @@ const endpoints = { const startDate = 1684702800; + +const feeAdapter = uniV2Exports({ + [CHAIN.ARBITRUM]: { factory: FACTORY_ADDRESS, }, +}).adapter[CHAIN.ARBITRUM].fetch + + const fetch = async (options: FetchOptions) => { const dataFactory = await request(endpoints[options.chain], gql `{ @@ -44,7 +50,7 @@ const fetch = async (options: FetchOptions) => { }) if (dataFees.dexSwapFees.length < 1000) break; } - const dailyData = await exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options); + const dailyData = await feeAdapter(options as any, {}, options); return { ...dailyData, totalVolume, diff --git a/dexs/equalizer-exchange/index.ts b/dexs/equalizer-exchange/index.ts index 24d6a0d9de..b45dbca2f2 100644 --- a/dexs/equalizer-exchange/index.ts +++ b/dexs/equalizer-exchange/index.ts @@ -1,16 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0xc6366efd0af1d09171fe0ebf32c7943bb310832a'; - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.FANTOM]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), - start: 1670544000, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.FANTOM]: { factory: '0xc6366efd0af1d09171fe0ebf32c7943bb310832a', }, +}) diff --git a/dexs/equilibre/index.ts b/dexs/equilibre/index.ts index 52785dcce5..35d386cbae 100644 --- a/dexs/equilibre/index.ts +++ b/dexs/equilibre/index.ts @@ -1,16 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0xA138FAFc30f6Ec6980aAd22656F2F11C38B56a95' - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.KAVA]: { - fetch: getDexVolumeExports({ chain: CHAIN.KAVA, factory: FACTORY_ADDRESS }), - start: 1677888000, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.KAVA]: { factory: '0xA138FAFc30f6Ec6980aAd22656F2F11C38B56a95', }, +}) diff --git a/dexs/fvm-exchange/index.ts b/dexs/fvm-exchange/index.ts index 7dd0c3571b..dffbcc0d4d 100644 --- a/dexs/fvm-exchange/index.ts +++ b/dexs/fvm-exchange/index.ts @@ -1,16 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0x472f3C3c9608fe0aE8d702f3f8A2d12c410C881A' - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.FANTOM]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS }), - start: 1688172646, // when PairFactory was created https://ftmscan.com/address/0x472f3C3c9608fe0aE8d702f3f8A2d12c410C881A - }, - }, -} - -export default adapter \ No newline at end of file +export default uniV2Exports({ + [CHAIN.FANTOM]: { factory: '0x472f3C3c9608fe0aE8d702f3f8A2d12c410C881A', }, +}) diff --git a/dexs/hermes-protocol/index.ts b/dexs/hermes-protocol/index.ts index 63c420584e..f46dac7a20 100644 --- a/dexs/hermes-protocol/index.ts +++ b/dexs/hermes-protocol/index.ts @@ -1,16 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0x633a093C9e94f64500FC8fCBB48e90dd52F6668F' - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.METIS]: { - fetch: getDexVolumeExports({ chain: CHAIN.METIS, factory: FACTORY_ADDRESS }), - start: 1670544000, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.METIS]: { factory: '0x633a093C9e94f64500FC8fCBB48e90dd52F6668F', }, +}) diff --git a/dexs/keller-cl/index.ts b/dexs/keller-cl/index.ts index 3150372c34..b6caf5b7c6 100644 --- a/dexs/keller-cl/index.ts +++ b/dexs/keller-cl/index.ts @@ -1,17 +1,7 @@ -import { SimpleAdapter, Fetch, FetchOptions } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExportsV3 } from "../../helpers/dexVolumeLogs"; +import { uniV3Exports } from "../../helpers/uniswap"; -const FACTORY_V3_ADDRESS = '0x952aC46B2586737df679e836d9B980E43E12B2d8'; - -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.SCROLL]: { - fetch: async (options: FetchOptions) => getDexVolumeExportsV3({factory: FACTORY_V3_ADDRESS,factoryFromBlock: 4627488, chain: CHAIN.SCROLL})(options.toTimestamp, null, options), - start: 1712174400, - } - } -}; - -export default adapter; +export default uniV3Exports({ + scroll: { + factory: '0x952aC46B2586737df679e836d9B980E43E12B2d8', + } +}) \ No newline at end of file diff --git a/dexs/keller/index.ts b/dexs/keller/index.ts index ee270f17e0..496cb92dd3 100644 --- a/dexs/keller/index.ts +++ b/dexs/keller/index.ts @@ -1,17 +1,7 @@ -import { BreakdownAdapter, Fetch, FetchOptions, SimpleAdapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports, getDexVolumeExportsV3 } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367'; - -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.SCROLL]: { - fetch: async (options: FetchOptions) => getDexVolumeExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS })(options.toTimestamp, null, options), - start: 1710806400, - } +export default uniV2Exports({ + scroll: { + factory: '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367', } -}; - -export default adapter; +}) diff --git a/dexs/merchant-moe/index.ts b/dexs/merchant-moe/index.ts index d0edf02173..e9e050b37f 100644 --- a/dexs/merchant-moe/index.ts +++ b/dexs/merchant-moe/index.ts @@ -1,14 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0x5bef015ca9424a7c07b68490616a4c1f094bedec' -const adapters: SimpleAdapter = { - adapter: { - [CHAIN.MANTLE]: { - fetch: getDexVolumeExports({ chain: CHAIN.MANTLE, factory: FACTORY_ADDRESS }), - start: 1706745600, - } - } -} -export default adapters; +export default uniV2Exports({ + [CHAIN.MANTLE]: { factory: '0x5bef015ca9424a7c07b68490616a4c1f094bedec', }, +}) diff --git a/dexs/nearpad/index.ts b/dexs/nearpad/index.ts index 6927d857ab..5e6489c0b7 100644 --- a/dexs/nearpad/index.ts +++ b/dexs/nearpad/index.ts @@ -1,26 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types" -import { CHAIN } from "../../helpers/chains" -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { CHAIN } from "../../helpers/chains"; +import { uniV2Exports } from "../../helpers/uniswap"; -const pools: string[] = [ - '0xc374776cf5c497adeef6b505588b00cb298531fd', - '0x73155e476d6b857fe7722aefebad50f9f8bd0b38', - '0x63b4a0538ce8d90876b201af1020d13308a8b253', - '0xa188d79d6bdbc1120a662de9eb72384e238af104', - '0x24886811d2d5e362ff69109aed0a6ee3eeeec00b', - '0xfe28a27a95e51bb2604abd65375411a059371616', - '0x1fd6cbbfc0363aa394bd77fc74f64009bf54a7e9', - '0xb53bc2537e641c37c7b7a8d33aba1b30283cda2f', - '0xaf3f197ce82bf524dab0e9563089d443cb950048', -].map((address: string) => address.toLowerCase()); - -const adapters: SimpleAdapter = { - adapter: { - [CHAIN.AURORA]: { - fetch: getDexVolumeExports({ chain: CHAIN.AURORA, pools }), - start: 1678838400, - } - } -} - -export default adapters +export default uniV2Exports({ + [CHAIN.AURORA]: { factory: '0x34484b4E416f5d4B45D4Add0B6eF6Ca08FcED8f1', }, +}) diff --git a/dexs/nile-exchange-v1/index.ts b/dexs/nile-exchange-v1/index.ts index b23dd0aa8b..5371233b36 100644 --- a/dexs/nile-exchange-v1/index.ts +++ b/dexs/nile-exchange-v1/index.ts @@ -1,16 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0xAAA16c016BF556fcD620328f0759252E29b1AB57' - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.LINEA]: { - fetch: getDexVolumeExports({ chain: CHAIN.LINEA, factory: FACTORY_ADDRESS }), - start: 1705968000, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.LINEA]: { factory: '0xAAA16c016BF556fcD620328f0759252E29b1AB57', }, +}) diff --git a/dexs/nuri-exchange-v1/index.ts b/dexs/nuri-exchange-v1/index.ts index cd31c681de..48fea63c2b 100644 --- a/dexs/nuri-exchange-v1/index.ts +++ b/dexs/nuri-exchange-v1/index.ts @@ -1,16 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0xAAA16c016BF556fcD620328f0759252E29b1AB57' - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.SCROLL]: { - fetch: getDexVolumeExports({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS }), - start: 1714608000, - }, - } -}; - -export default adapter; \ No newline at end of file +export default uniV2Exports({ + [CHAIN.SCROLL]: { factory: '0xAAA16c016BF556fcD620328f0759252E29b1AB57', }, +}) diff --git a/dexs/pearlfi/index.ts b/dexs/pearlfi/index.ts index 6645953dd7..3697425612 100644 --- a/dexs/pearlfi/index.ts +++ b/dexs/pearlfi/index.ts @@ -1,16 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0xEaF188cdd22fEEBCb345DCb529Aa18CA9FcB4FBd' - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.POLYGON]: { - fetch: getDexVolumeExports({ chain: CHAIN.POLYGON, factory: FACTORY_ADDRESS }), - start: 1686268800, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.POLYGON]: { factory: '0xEaF188cdd22fEEBCb345DCb529Aa18CA9FcB4FBd', }, +}) diff --git a/dexs/ramses-exchange/index.ts b/dexs/ramses-exchange/index.ts index 74cbe4cbbe..1c482a5d19 100644 --- a/dexs/ramses-exchange/index.ts +++ b/dexs/ramses-exchange/index.ts @@ -1,16 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0xaaa20d08e59f6561f242b08513d36266c5a29415' - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch: getDexVolumeExports({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS }), - start: 1678752000, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.ARBITRUM]: { factory: '0xaaa20d08e59f6561f242b08513d36266c5a29415', }, +}) diff --git a/dexs/solidly/index.ts b/dexs/solidly/index.ts index b7400eda0d..68e5d7126d 100644 --- a/dexs/solidly/index.ts +++ b/dexs/solidly/index.ts @@ -1,16 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0x3fAaB499b519fdC5819e3D7ed0C26111904cbc28' - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.FANTOM]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: FACTORY_ADDRESS,}), - start: 1644462536, - }, - } -}; - -export default adapter; \ No newline at end of file +export default uniV2Exports({ + [CHAIN.FANTOM]: { factory: '0x3fAaB499b519fdC5819e3D7ed0C26111904cbc28', }, +}) diff --git a/dexs/thick/index.ts b/dexs/thick/index.ts index 530849a3e2..f664047ab6 100644 --- a/dexs/thick/index.ts +++ b/dexs/thick/index.ts @@ -1,6 +1,6 @@ -import { Fetch, SimpleAdapter } from "../../adapters/types"; +import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExportsV3 } from "../../helpers/dexVolumeLogs"; +import { uniV3Exports } from "../../helpers/uniswap"; const poolFactoryAddress = '0xE6dA85feb3B4E0d6AEd95c41a125fba859bB9d24'; @@ -11,24 +11,15 @@ const methodology = { HoldersRevenue: "Holders benefit from buyback using Protocol fees." } -const adapters: SimpleAdapter = { - adapter: { - [CHAIN.FANTOM]: { - fetch: getDexVolumeExportsV3({ factory: poolFactoryAddress, factoryFromBlock: 70309749, chain: CHAIN.FANTOM, }) as Fetch, - start: 1699300000, - meta: { methodology: { ...methodology, } }, - }, - [CHAIN.ARBITRUM]: { - fetch: getDexVolumeExportsV3({ factory: poolFactoryAddress, factoryFromBlock: 148243463, chain: CHAIN.ARBITRUM, }) as Fetch, - start: 1699300000, - meta: { methodology: { ...methodology, } }, - }, - [CHAIN.BASE]: { - fetch: getDexVolumeExportsV3({ factory: poolFactoryAddress, factoryFromBlock: 6314325, chain: CHAIN.BASE, }) as Fetch, - start: 1699300000, - meta: { methodology: { ...methodology, } }, - } - } -} +const adapters: SimpleAdapter = uniV3Exports({ + [CHAIN.FANTOM]: { factory: poolFactoryAddress, }, + [CHAIN.ARBITRUM]: { factory: poolFactoryAddress, }, + [CHAIN.BASE]: { factory: poolFactoryAddress, }, +}) + + +Object.keys(adapters.adapter).forEach((chain: any) => { + adapters.adapter[chain].meta = { methodology } +}) export default adapters; diff --git a/dexs/trisolaris/index.ts b/dexs/trisolaris/index.ts index 2c9001ec69..c56935f451 100644 --- a/dexs/trisolaris/index.ts +++ b/dexs/trisolaris/index.ts @@ -1,29 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types" -import { CHAIN } from "../../helpers/chains" -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { CHAIN } from "../../helpers/chains"; +import { uniV2Exports } from "../../helpers/uniswap"; -const pools: string[] = [ - '0x1e0e812fbcd3eb75d8562ad6f310ed94d258d008', - '0x63da4db6ef4e7c62168ab03982399f9588fcd198', - '0x03b666f3488a7992b2385b12df7f35156d7b29cd', - '0x20f8aefb5697b77e0bb835a8518be70775cda1b0', - '0xbc8a244e8fb683ec1fd6f88f3cc6e565082174eb', - '0x84b123875f0f36b966d0b6ca14b31121bd9676ad', - '0x5eec60f348cb1d661e4a5122cf4638c7db7a886e', - '0xd1654a7713617d41a8c9530fb9b948d00e162194', - '0x61c9e05d1cdb1b70856c7a2c53fa9c220830633c', - '0x48887ceea1b8ad328d5254bef774be91b90faa09', - '0x044b6b0cd3bb13d2b9057781df4459c66781dce7', - '0x5e74d85311fe2409c341ce49ce432bb950d221de' -].map((address: string) => address.toLowerCase()); - -const adapters: SimpleAdapter = { - adapter: { - [CHAIN.AURORA]: { - fetch: getDexVolumeExports({ chain: CHAIN.AURORA, pools }), - start: 1678838400, - } - } -} - -export default adapters +export default uniV2Exports({ + [CHAIN.AURORA]: { factory: '0xc66F594268041dB60507F00703b152492fb176E7', }, +}) diff --git a/dexs/velocimeter-v2/index.ts b/dexs/velocimeter-v2/index.ts index 5337e6c9af..e1b04b1492 100644 --- a/dexs/velocimeter-v2/index.ts +++ b/dexs/velocimeter-v2/index.ts @@ -1,17 +1,6 @@ -import { SimpleAdapter } from '../../adapters/types' -import { CHAIN } from '../../helpers/chains' -import { getDexVolumeExports } from '../../helpers/dexVolumeLogs' +import { CHAIN } from "../../helpers/chains"; +import { uniV2Exports } from "../../helpers/uniswap"; -// see https://docs.velocimeter.xyz/security#v2-contract-addresses -const FACTORY_ADDRESS = '0xF80909DF0A01ff18e4D37BF682E40519B21Def46' - -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.CANTO]: { - fetch: getDexVolumeExports({ chain: CHAIN.CANTO, factory: FACTORY_ADDRESS }), - start: 1678512026, // when PairFactory was created https://tuber.build/address/0xF80909DF0A01ff18e4D37BF682E40519B21Def46 - }, - }, -} - -export default adapter +export default uniV2Exports({ + [CHAIN.CANTO]: { factory: '0xF80909DF0A01ff18e4D37BF682E40519B21Def46', }, +}) diff --git a/dexs/velodrome-v2/index.ts b/dexs/velodrome-v2/index.ts index 5ccc4d82e5..53ec460e68 100644 --- a/dexs/velodrome-v2/index.ts +++ b/dexs/velodrome-v2/index.ts @@ -1,14 +1,7 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { fetchV2 } from "./v2"; +import { uniV2Exports } from "../../helpers/uniswap"; +const swapEvent = 'event Swap(address indexed sender, address indexed to, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out)'; -const adapter: SimpleAdapter = { - adapter: { - [CHAIN.OPTIMISM]: { - fetch: fetchV2, - start: 1677110400 - }, - }, -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.OPTIMISM]: { factory: '0xF1046053aa5682b4F9a81b5481394DA16BE5FF5a', swapEvent, }, +}) diff --git a/dexs/velodrome-v2/v2.ts b/dexs/velodrome-v2/v2.ts deleted file mode 100644 index 83085e5834..0000000000 --- a/dexs/velodrome-v2/v2.ts +++ /dev/null @@ -1,7 +0,0 @@ - -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; - -const FACTORY_ADDRESS = '0xF1046053aa5682b4F9a81b5481394DA16BE5FF5a'; - -const swapEvent = 'event Swap(address indexed sender, address indexed to, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out)'; -export const fetchV2 = getDexVolumeExports({ swapEvent, factory: FACTORY_ADDRESS, chain: 'optimism', pairItemAbi: 'allPools', pairLengthAbi: 'allPoolsLength' }) diff --git a/dexs/wannaswap/index.ts b/dexs/wannaswap/index.ts index bb9d560516..5779ae7caf 100644 --- a/dexs/wannaswap/index.ts +++ b/dexs/wannaswap/index.ts @@ -1,34 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types" -import { CHAIN } from "../../helpers/chains" -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { CHAIN } from "../../helpers/chains"; +import { uniV2Exports } from "../../helpers/uniswap"; - -const pools: string[] = [ -'0xf56997948d4235514dcc50fc0ea7c0e110ec255d', -'0xbf9eef63139b67fd0abf22bd5504acb0519a4212', -'0x3502eac6fa27beebdc5cd3615b7cb0784b0ce48f', -'0x256d03607eee0156b8a2ab84da1d5b283219fe97', -'0xbf58062d23f869a90c6eb04b9655f0dfca345947', -'0xca461686c711aeaadf0b516f9c2ad9d9b645a940', -'0xbf560771b6002a58477efbcdd6774a5a1947587b', -'0x957b4bc289d29129680b2d6c6d06c9106a38bb82', -'0xddccf2f096fa400ce90ba0568908233e6a950961', -'0x2a6e6d58547d2580b490445cca0ce625c4f5d84a', -'0x523fae29d7ff6fd38842c8f271edf2ebd3150435', -'0xe22606659ec950e0328aa96c7f616adc4907cbe3', -'0x2e02bea8e9118f7d2ccada1d402286cc6d54bd67', -'0x7e9ea10e5984a09d19d05f31ca3cb65bb7df359d', -'0x10c0c000b9ef01ba07d7473729a19e85e89b6246', -'0xe6c47b036f6fd0684b109b484ac46094e633af2e' -].map((address: string) => address.toLowerCase()); - -const adapters: SimpleAdapter = { - adapter: { - [CHAIN.AURORA]: { - fetch: getDexVolumeExports({ chain: CHAIN.AURORA, pools }), - start: 1678838400, - } - } -} - -export default adapters +export default uniV2Exports({ + [CHAIN.AURORA]: { factory: '0x7928D4FeA7b2c90C732c10aFF59cf403f0C38246', }, +}) diff --git a/dexs/wigoswap/index.ts b/dexs/wigoswap/index.ts index fe9deb0dff..edbf847adc 100644 --- a/dexs/wigoswap/index.ts +++ b/dexs/wigoswap/index.ts @@ -1,13 +1,6 @@ -import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexVolumeExports } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const adapters: SimpleAdapter = { - adapter: { - [CHAIN.FANTOM]: { - fetch: getDexVolumeExports({ chain: CHAIN.FANTOM, factory: '0xc831a5cbfb4ac2da5ed5b194385dfd9bf5bfcba7' }), - start: 1642982400, - }, - } -} -export default adapters; \ No newline at end of file +export default uniV2Exports({ + [CHAIN.FANTOM]: { factory: '0xc831a5cbfb4ac2da5ed5b194385dfd9bf5bfcba7', }, +}) diff --git a/fees/Viridian/index.ts b/fees/Viridian/index.ts index 37f53ea17c..d7c3d5a982 100644 --- a/fees/Viridian/index.ts +++ b/fees/Viridian/index.ts @@ -1,12 +1,16 @@ import { Adapter, FetchOptions, FetchResultV2 } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains'; import { getBribes } from './bribes'; -import { exportDexVolumeAndFees } from '../../helpers/dexVolumeLogs'; +import { uniV2Exports } from '../../helpers/uniswap'; + + +const feeAdapter = uniV2Exports({ + [CHAIN.CORE]: { factory: '0xb54a83cfEc6052E05BB2925097FAff0EC22893F3', }, +}).adapter[CHAIN.CORE].fetch -const FACTORY_ADDRESS = '0xb54a83cfEc6052E05BB2925097FAff0EC22893F3'; const getFees = async (options: FetchOptions): Promise => { - const v1Results = await exportDexVolumeAndFees({ chain: CHAIN.CORE, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options) + const v1Results = await feeAdapter(options as any, undefined as any, options); const bribesResult = await getBribes(options); v1Results.dailyBribesRevenue = bribesResult.dailyBribesRevenue; return { diff --git a/fees/abcdefx.ts b/fees/abcdefx.ts index d699831a71..596bd3e583 100644 --- a/fees/abcdefx.ts +++ b/fees/abcdefx.ts @@ -1,15 +1,8 @@ import { SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getDexFeesExports } from "../helpers/dexVolumeLogs"; -import { Chain } from "@defillama/sdk/build/general"; const FACTORY_ADDRESS = '0x01f43d2a7f4554468f77e06757e707150e39130c'; -const graph = (_chain: Chain) => { - // LPs get 0% fees, 100% goes to Guru's Treasury, which buys back ELITE - return getDexFeesExports({ chain: _chain, factory: FACTORY_ADDRESS }) -} - const methodology = { UserFees: "Users pay a Trading fee on each swap, including Flash Loans.", Fees: "Net Trading fees paid by all ABcDeFx users.", @@ -19,15 +12,16 @@ const methodology = { SupplySideRevenue: "0% of trading fees are distributed among liquidity providers." } -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.KCC]: { fetch: graph(CHAIN.KCC), start: 1670188701, meta: { methodology } }, - //[CHAIN.MULTIVAC]: { fetch: graph(CHAIN.MULTIVAC), start: 1670226950, meta: { methodology } }, /// ! typeof CHAIN - [CHAIN.FANTOM]: { fetch: graph(CHAIN.FANTOM), start: 1671580916, meta: { methodology } }, - //[CHAIN.ECHELON]: { fetch: graph(CHAIN.ECHELON), start: 1671608400, meta: { methodology } }, /// ded!? - [CHAIN.KAVA]: { fetch: graph(CHAIN.KAVA), start: 1676855943, meta: { methodology } } - } -}; +import { uniV2Exports } from "../helpers/uniswap"; + +const adapters: SimpleAdapter = uniV2Exports({ + [CHAIN.FANTOM]: { factory: FACTORY_ADDRESS, }, + [CHAIN.KCC]: { factory: FACTORY_ADDRESS, }, + [CHAIN.KAVA]: { factory: FACTORY_ADDRESS, }, +}) + -export default adapter; \ No newline at end of file +Object.keys(adapters.adapter).forEach((chain: any) => { + adapters.adapter[chain].meta = { methodology } +}) +export default adapters; \ No newline at end of file diff --git a/fees/chronos.ts b/fees/chronos.ts index 10eaa6295c..942d17cca5 100644 --- a/fees/chronos.ts +++ b/fees/chronos.ts @@ -1,17 +1,8 @@ -import { SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getDexFeesExports } from "../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../helpers/uniswap"; const FACTORY_ADDRESS = '0xCe9240869391928253Ed9cc9Bcb8cb98CB5B0722'; -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.ARBITRUM]: { - fetch: getDexFeesExports({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS }), - start: 1682380800, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.ARBITRUM]: { factory: FACTORY_ADDRESS }, +}) diff --git a/fees/equilibre-exchange.ts b/fees/equilibre-exchange.ts index 12a47f9131..2a8d20616c 100644 --- a/fees/equilibre-exchange.ts +++ b/fees/equilibre-exchange.ts @@ -1,16 +1,6 @@ -import { SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getDexFeesExports } from "../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../helpers/uniswap"; -const FACTORY_ADDRESS = '0xA138FAFc30f6Ec6980aAd22656F2F11C38B56a95' -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.KAVA]: { - fetch: getDexFeesExports({ chain: CHAIN.KAVA, factory: FACTORY_ADDRESS,}), - start: 1677888000, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.KAVA]: { factory: '0xA138FAFc30f6Ec6980aAd22656F2F11C38B56a95' }, +}) diff --git a/fees/keller-cl/index.ts b/fees/keller-cl/index.ts index d55fe5cf4f..17abd7c575 100644 --- a/fees/keller-cl/index.ts +++ b/fees/keller-cl/index.ts @@ -1,148 +1,27 @@ -import * as sdk from "@defillama/sdk"; -import { Adapter, FetchOptions, FetchResultFees, SimpleAdapter } from '../../adapters/types'; -import { CHAIN } from '../../helpers/chains'; -import { Chain } from "@defillama/sdk/build/general"; -import BigNumber from "bignumber.js"; -import request, { gql } from "graphql-request"; -import { getUniqStartOfTodayTimestamp } from '../../helpers/getUniSubgraphVolume'; -import { getTimestampAtStartOfDayUTC } from "../../utils/date"; +import { uniV3Exports } from "../../helpers/uniswap"; -interface IPoolData { - id: number; - feesUSD: string; -} - -type IURL = { - [l: string | Chain]: string; -} - -const endpoints: IURL = { - [CHAIN.SCROLL]: sdk.graph.modifyEndpoint('Fc28kX4ZY93J1hx4zv6JJSg1d3auz1j2HWHEvbkAZ9Qc'), -} -const fetch = (chain: Chain) => { - return async (timestamp: any): Promise => { - const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp.fromTimestamp * 1000)); - const dateId = Math.floor(getTimestampAtStartOfDayUTC(todayTimestamp) / 86400) - const graphQuery = gql - ` - { - uniswapDayData(id: ${dateId}) { - id - feesUSD - } - } - `; - - const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).uniswapDayData; - const dailyFeeUSD = graphRes; - console.log("🚀 ~ return ~ dailyFeeUSD:", dailyFeeUSD) - const dailyFee = dailyFeeUSD?.feesUSD ? new BigNumber(dailyFeeUSD.feesUSD) : undefined - if (dailyFee === undefined) return { timestamp } +const customLogic = async ({ pairObject, dailyFees, createBalances, filteredPairs, getLogs, }: any) => { + const collectProtocolEvent = 'event CollectProtocol(address indexed sender,address indexed recipient,uint128 amount0,uint128 amount1)'; + const dailyProtocolRevenue = createBalances(); - return { - timestamp, - dailyFees: dailyFee.toString(), - dailyUserFees: dailyFee.toString(), - dailyRevenue: dailyFee.times(0.2).toString(), - dailyHoldersRevenue: dailyFee.times(0.2).toString(), - }; - }; -} + await Promise.all(Object.keys(filteredPairs).map(async (pair) => { + const [token0, token1] = pairObject[pair] + const logs = await getLogs({ target: pair, eventAbi: collectProtocolEvent }) -const getFees = async (fetchOptions: FetchOptions): Promise => { - const v3PoolCreated = 'event PoolCreated(address indexed token0,address indexed token1,uint24 indexed fee,int24 tickSpacing,address pool)'; - const v3SwapEvent = 'event Swap(address indexed sender,address indexed recipient,int256 amount0,int256 amount1,uint160 sqrtPriceX96,uint128 liquidity,int24 tick)' - const collectProtocolEvent = 'event CollectProtocol(address indexed sender,address indexed recipient,uint128 amount0,uint128 amount1)'; - const factory = '0x952aC46B2586737df679e836d9B980E43E12B2d8'; - const timestamp = fetchOptions.fromTimestamp; - const logs = await fetchOptions.getLogs({ - target: factory, - eventAbi: v3PoolCreated, - fromBlock: 4627488, - toBlock: await fetchOptions.getToBlock(), - }); - const fees = fetchOptions.createBalances(); - const protocolFees = fetchOptions.createBalances(); - const pools = logs.map((log: any) => log.pool); - const feesPercentage = (await fetchOptions.api.multiCall({ - abi: 'function fee() view returns (uint24)', - calls: pools, - })).map((fee: any) => fee / 1000000); - for (let i = 0; i < pools.length; i++) { - const pool = pools[i]; - // Protocol Fees - const collectProtocolLogs = await fetchOptions.getLogs({ - target: pool, - eventAbi: collectProtocolEvent, - fromBlock: await fetchOptions.getFromBlock(), - toBlock: await fetchOptions.getToBlock(), - }); - // User Fees - const swapLogs = await fetchOptions.getLogs({ - target: pool, - eventAbi: v3SwapEvent, - fromBlock: await fetchOptions.getFromBlock(), - toBlock: await fetchOptions.getToBlock(), - }); - for (let j = 0; j < swapLogs.length; j++) { - const log = swapLogs[j]; - const protocolLog = collectProtocolLogs[j]; - if(!log.length) continue; - const isToken0 = log[2] > 0; - let tokenAddress; - let tokenDecimals; - let feeAccumulated = 0n; - let feeProtocol = 0n; - if (isToken0) { - tokenAddress = await fetchOptions.api.call({ - target: pool, - abi: 'address:token0', - chain: CHAIN.SCROLL, - }); - tokenDecimals = await fetchOptions.api.call({ - target: tokenAddress, - abi: 'function decimals() view returns (uint8)', - chain: CHAIN.SCROLL, - }); - feeAccumulated = BigInt((Number(log[2]) * feesPercentage[i]).toFixed(0)); - feeProtocol = BigInt((Number(protocolLog[2]) * feesPercentage[i]).toFixed(0)); - }else { - tokenAddress = await fetchOptions.api.call({ - target: pool, - abi: 'address:token1', - chain: CHAIN.SCROLL, - }); - tokenDecimals = await fetchOptions.api.call({ - target: tokenAddress, - abi: 'function decimals() view returns (uint8)', - chain: CHAIN.SCROLL, - }); - feeAccumulated = BigInt((Number(log[3]) * feesPercentage[i]).toFixed(0)); - feeProtocol = BigInt((Number(protocolLog[3]) * feesPercentage[i]).toFixed(0)); - } - fees.add(tokenAddress, feeAccumulated); - protocolFees.add(tokenAddress, feeProtocol); - }; - } + logs.forEach(log => { + dailyProtocolRevenue.add(token0, log.amount0) + dailyProtocolRevenue.add(token1, log.amount1) + }) + })) return { - timestamp, - dailyFees: fees, - dailyHoldersRevenue: fees, - dailyProtocolRevenue: protocolFees, + dailyFees, + dailyProtocolRevenue, }; } - - -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.SCROLL]: { - fetch: getFees, - start: 1712740841, +export default uniV3Exports({ + scroll: { + factory: '0x952aC46B2586737df679e836d9B980E43E12B2d8', + customLogic, } -} -}; -export default adapter; - - +}) \ No newline at end of file diff --git a/fees/nile-exchange-v1/index.ts b/fees/nile-exchange-v1/index.ts index 1b63e706c2..3c7c92f906 100644 --- a/fees/nile-exchange-v1/index.ts +++ b/fees/nile-exchange-v1/index.ts @@ -1,42 +1,17 @@ -import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexFeesExports, exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; - - -const FACTORY_ADDRESS = '0xAAA16c016BF556fcD620328f0759252E29b1AB57'; - -type TStartTime = { - [key: string]: number; -} -const startTimeV2: TStartTime = { - [CHAIN.LINEA]: 1705968000, -} +import { uniV2Exports } from "../../helpers/uniswap"; const methodology = { - UserFees: "User pays 0.3% fees on each swap.", + UserFees: "User pays 0.05%, 0.30%, or 1% on each swap.", ProtocolRevenue: "Revenue going to the protocol. 5% of collected fees. (is probably right because the distribution is dynamic.)", HoldersRevenue: "User fees are distributed among holders. 75% of collected fees. (is probably right because the distribution is dynamic.)", SupplySideRevenue: "20% of collected fees are distributed among LPs. (is probably right because the distribution is dynamic.)" } -const adapter: Adapter = { - version: 2, - adapter: { - [CHAIN.LINEA]: { - fetch: async (options: FetchOptions) => { - const v1Results = await exportDexVolumeAndFees({ chain: CHAIN.LINEA, factory: FACTORY_ADDRESS,})(options.endTimestamp, {}, options) - return v1Results; - }, - start: startTimeV2[CHAIN.LINEA], - meta: { - methodology: { - ...methodology, - UserFees: "User pays 0.05%, 0.30%, or 1% on each swap.", - }, - }, - }, - }, -}; +const adapter = uniV2Exports({ + [CHAIN.LINEA]: { factory: '0xAAA16c016BF556fcD620328f0759252E29b1AB57', }, +}) -export default adapter; +adapter.adapter[CHAIN.LINEA].meta = { methodology } +export default adapter; \ No newline at end of file diff --git a/fees/nuri-exchange-v1/index.ts b/fees/nuri-exchange-v1/index.ts index 3febcd91cf..48fea63c2b 100644 --- a/fees/nuri-exchange-v1/index.ts +++ b/fees/nuri-exchange-v1/index.ts @@ -1,17 +1,6 @@ -import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const FACTORY_ADDRESS = '0xAAA16c016BF556fcD620328f0759252E29b1AB57'; - -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.SCROLL]: { - fetch: (options: FetchOptions) => exportDexVolumeAndFees({ chain: CHAIN.SCROLL, factory: FACTORY_ADDRESS,})(options.endTimestamp, null, options), - start: 1714608000, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + [CHAIN.SCROLL]: { factory: '0xAAA16c016BF556fcD620328f0759252E29b1AB57', }, +}) diff --git a/fees/pearlfi.ts b/fees/pearlfi.ts index 3b570f6fba..61eb30a0ba 100644 --- a/fees/pearlfi.ts +++ b/fees/pearlfi.ts @@ -1,17 +1,5 @@ -import { SimpleAdapter } from "../adapters/types"; -import { CHAIN } from "../helpers/chains"; -import { getDexFeesExports } from "../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../helpers/uniswap"; -const FACTORY_ADDRESS = '0xEaF188cdd22fEEBCb345DCb529Aa18CA9FcB4FBd'; - -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.POLYGON]: { - fetch: getDexFeesExports({ chain: CHAIN.POLYGON, factory: FACTORY_ADDRESS,}), - start: 1686268800, - }, - } -}; - -export default adapter; +export default uniV2Exports({ + polygon: { factory: '0xEaF188cdd22fEEBCb345DCb529Aa18CA9FcB4FBd', }, +}); diff --git a/fees/ramses-exchange-v1/index.ts b/fees/ramses-exchange-v1/index.ts index e53ede184d..560d938cc8 100644 --- a/fees/ramses-exchange-v1/index.ts +++ b/fees/ramses-exchange-v1/index.ts @@ -1,6 +1,6 @@ import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getDexFeesExports, exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; import { fees_bribes } from './bribes'; @@ -33,12 +33,18 @@ const methodology = { SupplySideRevenue: "20% of collected fees are distributed among LPs. (is probably right because the distribution is dynamic.)" } + +const feeAdapter = uniV2Exports({ + [CHAIN.ARBITRUM]: { factory: FACTORY_ADDRESS, }, +}).adapter[CHAIN.CORE].fetch + + const adapter: Adapter = { version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: async (options: FetchOptions) => { - const v1Results = await exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS,})(options.endTimestamp, {}, options) + const v1Results = await feeAdapter(options as any, {}, options) const bribesResult = await getBribes(options); v1Results.dailyBribesRevenue = bribesResult.dailyBribesRevenue; diff --git a/fees/thick.ts b/fees/thick.ts index 2151594dc7..5c64c86c79 100644 --- a/fees/thick.ts +++ b/fees/thick.ts @@ -1,6 +1,6 @@ import { SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getDexFeesExportsV3 } from "../helpers/dexVolumeLogs"; +import { uniV3Exports } from "../helpers/uniswap"; const poolFactoryAddress = '0xE6dA85feb3B4E0d6AEd95c41a125fba859bB9d24'; @@ -13,24 +13,14 @@ const methodology = { SupplySideRevenue: "The portion of trading fees paid to liquidity providers." } -const adapters: SimpleAdapter = { - adapter: { - [CHAIN.FANTOM]: { - fetch: getDexFeesExportsV3({ chain: CHAIN.FANTOM, factory: poolFactoryAddress, factoryFromBlock: 70309749}), - start: 1699300000, - meta: { methodology: { ...methodology, } }, - }, - [CHAIN.ARBITRUM]: { - fetch: getDexFeesExportsV3({ chain: CHAIN.ARBITRUM, factory: poolFactoryAddress, factoryFromBlock: 148243463}), - start: 1699300000, - meta: { methodology: { ...methodology, } }, - }, - [CHAIN.BASE]: { - fetch: getDexFeesExportsV3({ chain: CHAIN.BASE, factory: poolFactoryAddress, factoryFromBlock: 6314325}), - start: 1699300000, - meta: { methodology: { ...methodology, } }, - } - } -} +const adapters: SimpleAdapter = uniV3Exports({ + [CHAIN.FANTOM]: { factory: poolFactoryAddress, }, + [CHAIN.ARBITRUM]: { factory: poolFactoryAddress, }, + [CHAIN.BASE]: { factory: poolFactoryAddress, }, +}) + +Object.keys(adapters.adapter).forEach((chain: any) => { + adapters.adapter[chain].meta = { methodology } +}) export default adapters; diff --git a/helpers/dexVolumeLogs.ts b/helpers/dexVolumeLogs.ts index ee647672e6..0324f90b83 100644 --- a/helpers/dexVolumeLogs.ts +++ b/helpers/dexVolumeLogs.ts @@ -1,108 +1,8 @@ -import { FetchOptions } from "../adapters/types"; - -const _swapEvent = "event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to)" -// const swapTopic = "0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822" - -type getDexVolumeParams = { chain: string, fromTimestamp: number, toTimestamp?: number, factory?: string, timestamp: number, pools?: string[], fetchOptions: FetchOptions, pairLengthAbi?: string, pairItemAbi?: string, swapEvent?: string, } -type getDexVolumeFeeParamsV3 = { chain: string, fromTimestamp: number, toTimestamp?: number, factory?: string, factoryFromBlock?: number, timestamp: number, pools?: string[], isFee?: boolean, fetchOptions: FetchOptions, } - -type getDexVolumeExportsParams = { chain: string, factory?: string, pools?: string[], pairLengthAbi?: string, pairItemAbi?: string, } -type getDexVolumeExportsParamsV3 = { chain: string, factory?: string, pools?: string[], factoryFromBlock?: number, swapEvent?: string, } - -const statbleaAbi: any = { - "inputs": [], - "name": "stable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" -}; - -export async function getDexVolumeAndFees({ factory, timestamp, pools, fetchOptions, pairLengthAbi = 'allPairsLength', pairItemAbi = 'allPairs', swapEvent = _swapEvent }: getDexVolumeParams) { - const { api, createBalances } = fetchOptions; - if (!pools) pools = await api.fetchList({ lengthAbi: pairLengthAbi, itemAbi: pairItemAbi, target: factory! }) - - const token0s = await api.multiCall({ abi: 'address:token0', calls: pools! }) - const token1s = await api.multiCall({ abi: 'address:token1', calls: pools! }) - const stables = await api.multiCall({ abi: statbleaAbi, calls: pools!, permitFailure: true }) - - const logs = await fetchOptions.getLogs({ - targets: pools, - eventAbi: swapEvent, - flatten: false, - }); - const dailyFees = createBalances(); - logs.forEach((log: any[], index: number) => { - const token0 = token0s[index] - const token1 = token1s[index] - if (!log.length) return - log.forEach((i: any) => { - // api.add(token0, i.amount0In) // we should count only one side of the swap - api.add(token0, i.amount0Out) - // api.add(token1, i.amount1In) - api.add(token1, i.amount1Out) - dailyFees.add(token0, Number(i.amount0In) * ((stables[index] ? 1 : 100) / 10000)) - dailyFees.add(token1, Number(i.amount1In) * ((stables[index] ? 1 : 100) / 10000)) - }) - }) - return { - timestamp, - dailyFees: dailyFees, - dailyVolume: api.getBalancesV2(), - } -} - -export async function getDexVolume({ factory, timestamp, pools, fetchOptions, pairLengthAbi = 'allPairsLength', pairItemAbi = 'allPairs', swapEvent = _swapEvent }: getDexVolumeParams) { - const { api } = fetchOptions; - if (!pools) pools = await api.fetchList({ lengthAbi: pairLengthAbi, itemAbi: pairItemAbi, target: factory! }) - - const token0s = await api.multiCall({ abi: 'address:token0', calls: pools! }) - const token1s = await api.multiCall({ abi: 'address:token1', calls: pools! }) - - const logs = await fetchOptions.getLogs({ - targets: pools, - eventAbi: swapEvent, - flatten: false, - }); - - logs.forEach((log: any[], index: number) => { - const token0 = token0s[index] - const token1 = token1s[index] - if (!log.length) return - log.forEach((i: any) => { - // api.add(token0, i.amount0In) // we should count only one side of the swap - api.add(token0, i.amount0Out) - // api.add(token1, i.amount1In) - api.add(token1, i.amount1Out) - }) - }) - return { - timestamp, - dailyVolume: api.getBalancesV2(), - } -} - -export function getDexVolumeExports(options: getDexVolumeExportsParams): any { - return async (timestamp: number, _cb: any, fetchOptions: FetchOptions) => { - const params = { ...options, timestamp, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, fetchOptions } - return getDexVolume(params) - } -} -export function exportDexVolumeAndFees(options: getDexVolumeExportsParams): any { - return async (timestamp: number, _cb: any, fetchOptions: FetchOptions) => { - const params = { ...options, timestamp, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, fetchOptions } - return getDexVolumeAndFees(params) - } -} +import { FetchOptions, IJSON } from "../adapters/types"; +import { filterPools, filterPools2 } from "./uniswap"; type getDexFeesParams = { chain: string, fromTimestamp?: number, toTimestamp?: number, factory?: string, timestamp: number, pools?: string[], lengthAbi?: string, itemAbi?: string, fromBlock?: number, toBlock?: number, fetchOptions: FetchOptions, } -type getDexFeesExportParams = { chain: string, factory?: string, pools?: string[], lengthAbi?: string, itemAbi?: string, } const feesEvent = "event Fees(address indexed sender, uint256 amount0, uint256 amount1)" // const feesTopic = '0x112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602' @@ -110,8 +10,13 @@ export async function getDexFees({ factory, timestamp, pools, lengthAbi = 'allPa const { api } = fetchOptions if (!pools) pools = await api.fetchList({ lengthAbi, itemAbi, target: factory! }) - const token0s = await api.multiCall({ abi: 'address:token0', calls: pools!, permitFailure: true, }) - const token1s = await api.multiCall({ abi: 'address:token1', calls: pools!, permitFailure: true, }) + let token0s = await api.multiCall({ abi: 'address:token0', calls: pools!, permitFailure: true, }) + let token1s = await api.multiCall({ abi: 'address:token1', calls: pools!, permitFailure: true, }) + + const res = await filterPools2({ fetchOptions, pairs: pools, token0s, token1s }) + pools = res.pairs + token0s = res.token0s + token1s = res.token1s const logs = await fetchOptions.getLogs({ targets: pools, @@ -135,69 +40,3 @@ export async function getDexFees({ factory, timestamp, pools, lengthAbi = 'allPa dailyHoldersRevenue: value, } } - -export function getDexFeesExports(options: getDexFeesExportParams): any { - return async (fetchOptions: FetchOptions) => { - const params = { ...options, timestamp: fetchOptions.toTimestamp, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, fetchOptions, } - return getDexFees(params) - } -} - -const v3PoolCreated = 'event PoolCreated(address indexed token0,address indexed token1,uint24 indexed fee,int24 tickSpacing,address pool)'; -const v3SwapEvent = 'event Swap(address indexed sender,address indexed recipient,int256 amount0,int256 amount1,uint160 sqrtPriceX96,uint128 liquidity,int24 tick)' - -export async function getDexVolumeFeeV3({ factory, timestamp, pools, factoryFromBlock, isFee = false, fetchOptions: { getLogs, api }, }: getDexVolumeFeeParamsV3) { - if (!pools) { - const logs = await getLogs({ - target: factory, - fromBlock: factoryFromBlock, - eventAbi: v3PoolCreated, - }); - pools = logs.map((log: any) => log.pool) - } - - let fees = [] as any - if (isFee) - fees = await api.multiCall({ abi: 'function fee() view returns (uint24)', calls: pools! }) - const token1s = await api.multiCall({ abi: 'address:token1', calls: pools! }) - - const logs = await getLogs({ - targets: pools, - eventAbi: v3SwapEvent, - flatten: false, - }); - logs.forEach((log: any[], index: number) => { - const token1 = token1s[index] - if (!log.length) return - let fee = 1 - if (isFee) { - fee = fees[index] ?? 0 - if (fee === 0) return; - fee /= 1e6 - } - log.forEach((i: any) => { - let amount = Number(i.amount1) - if (+amount < 0) amount *= -1 - api.add(token1, amount * fee) - }) - }) - return { - timestamp, - dailyVolume: await api.getBalancesV2(), - } -} - -export function getDexVolumeExportsV3(options: getDexVolumeExportsParamsV3) { - return async (timestamp: number, _cb: any, fetchOptions: FetchOptions) => { - const params = { ...options, timestamp, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, fetchOptions } - return getDexVolumeFeeV3(params) - } -} - - -export function getDexFeesExportsV3(options: getDexVolumeExportsParamsV3): any { - return async (timestamp: number, _cb: any, fetchOptions: FetchOptions) => { - const params = { ...options, timestamp, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, fetchOptions, isFee: true, } - return getDexVolumeFeeV3(params) - } -} diff --git a/helpers/uniswap.ts b/helpers/uniswap.ts index d4a6347ffc..d864994ae0 100644 --- a/helpers/uniswap.ts +++ b/helpers/uniswap.ts @@ -22,22 +22,22 @@ export async function filterPools({ api, pairs, createBalances }: { api: ChainAp const filteredPairs: IJSON = {} for (const pair of Object.keys(pairs)) { const pooledValue = await pairBalances[pair].getUSDValue() - if (pooledValue < 1000) + if (pooledValue < 100) continue; filteredPairs[pair] = pooledValue } - if (Object.keys(filteredPairs).length < 42) + if (Object.keys(filteredPairs).length < 21) return filteredPairs - // if there are more than 42 pools, we need to filter out the ones with the lowest value - const sortedPairs = Object.entries(filteredPairs).sort((a, b) => b[1] - a[1]).slice(0, 42) + // if there are more than 21 pools, we need to filter out the ones with the lowest value + const sortedPairs = Object.entries(filteredPairs).sort((a, b) => b[1] - a[1]).slice(0, 21) return Object.fromEntries(sortedPairs) } const defaultV2SwapEvent = 'event Swap(address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to)' -export const getUniV2LogAdapter: any = ({ factory, fees = 0.003, swapEvent = defaultV2SwapEvent, }: UniV2Config): FetchV2 => { +export const getUniV2LogAdapter: any = ({ factory, fees = 0.003, swapEvent = defaultV2SwapEvent, stableFees = 1 / 10000 }: UniV2Config): FetchV2 => { const fetch: FetchV2 = async ({ createBalances, getLogs, chain, api }) => { factory = factory.toLowerCase() const cacheKey = `tvl-adapter-cache/cache/uniswap-forks/${factory}-${chain}.json` @@ -49,24 +49,30 @@ export const getUniV2LogAdapter: any = ({ factory, fees = 0.003, swapEvent = def pairObject[pair] = [token0s[i], token1s[i]] }) const dailyVolume = createBalances() + const dailyFees = createBalances() const filteredPairs = await filterPools({ api, pairs: pairObject, createBalances }) - await Promise.all(Object.keys(filteredPairs).map(async (pair) => { + const pairIds = Object.keys(filteredPairs) + const isStablePair = await api.multiCall({ abi: 'bool:stable', calls: pairIds, permitFailure: true }) + await Promise.all(pairIds.map(async (pair, index) => { + let _fees = isStablePair[index] ? stableFees : fees const [token0, token1] = pairObject[pair] const logs = await getLogs({ target: pair, eventAbi: swapEvent }) logs.forEach(log => { addOneToken({ chain, balances: dailyVolume, token0, token1, amount0: log.amount0In, amount1: log.amount1In }) addOneToken({ chain, balances: dailyVolume, token0, token1, amount0: log.amount0Out, amount1: log.amount1Out }) + addOneToken({ chain, balances: dailyFees, token0, token1, amount0: Number(log.amount0In) * _fees, amount1: Number(log.amount1In) * _fees }) + addOneToken({ chain, balances: dailyFees, token0, token1, amount0: Number(log.amount0Out) * _fees, amount1: Number(log.amount1Out) * _fees }) }) })) - return { dailyVolume, dailyFees: dailyVolume.clone(fees) } + return { dailyVolume, dailyFees, } } return fetch } const defaultV3SwapEvent = 'event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)' const defaultPoolCreatedEvent = 'event PoolCreated(address indexed token0, address indexed token1, uint24 indexed fee, int24 tickSpacing, address pool)' -export const getUniV3LogAdapter: any = ({ factory, poolCreatedEvent = defaultPoolCreatedEvent, swapEvent = defaultV3SwapEvent, }: UniV3Config): FetchV2 => { +export const getUniV3LogAdapter: any = ({ factory, poolCreatedEvent = defaultPoolCreatedEvent, swapEvent = defaultV3SwapEvent, customLogic }: UniV3Config): FetchV2 => { const fetch: FetchV2 = async ({ createBalances, getLogs, chain, api }) => { factory = factory.toLowerCase() const cacheKey = `tvl-adapter-cache/cache/logs/${chain}/${factory}.json` @@ -93,6 +99,10 @@ export const getUniV3LogAdapter: any = ({ factory, poolCreatedEvent = defaultPoo addOneToken({ chain, balances: dailyFees, token0, token1, amount0: log.amount0.toString() * fee, amount1: log.amount1.toString() * fee }) }) })) + + if (customLogic) { + return customLogic({ pairObject, dailyVolume, dailyFees, filteredPairs, createBalances, getLogs, chain, api }) + } return { dailyVolume, dailyFees } } return fetch @@ -102,12 +112,14 @@ type UniV2Config = { factory: string, fees?: number, swapEvent?: string, + stableFees?: number, } type UniV3Config = { factory: string, poolCreatedEvent?: string, swapEvent?: string, + customLogic?: any, } export function uniV2Exports(config: IJSON) { @@ -131,3 +143,23 @@ export function uniV3Exports(config: IJSON) { }) return { adapter: exportObject, version: 2 } as SimpleAdapter } + + + +export async function filterPools2({ fetchOptions, pairs, token0s, token1s }: any) { + const pairObject: IJSON = {} + pairs.forEach((pair: string, i: number) => { + pairObject[pair] = [token0s[i], token1s[i]] + }) + const res = await filterPools({ ...fetchOptions, pairs: pairObject }) + pairs = [] + token0s = [] + token1s = [] + Object.keys(res).forEach((pair: any) => { + pairs.push(pair) + const [token0, token1] = pairObject[pair] + token0s.push(token0) + token1s.push(token1) + }) + return { pairs, token0s, token1s, pairObject, } +} \ No newline at end of file From 3f2a939ebc4180ed9891f59afcd1d47dfa7e6ff8 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Sep 2024 07:52:43 +0200 Subject: [PATCH 1498/1590] ramses: fix bug --- fees/ramses-exchange-v1/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/ramses-exchange-v1/index.ts b/fees/ramses-exchange-v1/index.ts index 560d938cc8..b477ed47e9 100644 --- a/fees/ramses-exchange-v1/index.ts +++ b/fees/ramses-exchange-v1/index.ts @@ -36,7 +36,7 @@ const methodology = { const feeAdapter = uniV2Exports({ [CHAIN.ARBITRUM]: { factory: FACTORY_ADDRESS, }, -}).adapter[CHAIN.CORE].fetch +}).adapter[CHAIN.ARBITRUM].fetch const adapter: Adapter = { From edc72ea2bdeeec8441d72237f1d09c893841eb9b Mon Sep 17 00:00:00 2001 From: Vinay Sagar Date: Thu, 19 Sep 2024 16:30:57 +0530 Subject: [PATCH 1499/1590] Update dailyVolume methodolgy --- dexs/wefi/index.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/dexs/wefi/index.ts b/dexs/wefi/index.ts index 8b75179342..5e9cc72f63 100644 --- a/dexs/wefi/index.ts +++ b/dexs/wefi/index.ts @@ -8,6 +8,15 @@ const address: any = { [CHAIN.BOBA]: '0x7E0DA0DECCAc2E7B9AD06E378ee09c15B5BDeefa' } +const stableToken: string[] = [ + "0x49d3f7543335cf38fa10889ccff10207e22110b5", // xdc:FXD + "0x1ebb2c8a71a9ec59bf558886a8adf8f4a565814f", // xdc:EURS + "0x66a2a913e447d6b4bf33efbec43aaef87890fbbc", // boba:USDC + "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", // linea:USDC + "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", // polygon:USDT + "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", // polygon:USDC +] + const fetchVolume: FetchV2 = async (options: FetchOptions) => { const logs = await options.getLogs({ target: address[options.chain], @@ -16,10 +25,17 @@ const fetchVolume: FetchV2 = async (options: FetchOptions) => { const dailyVolume = options.createBalances(); logs.forEach((log: any) => { const data = log.data.replace('0x', '') + const amountIn = Number('0x' + data.slice(5 * 64, 6 * 64)) const amountOut = Number('0x' + data.slice(6 * 64, 7 * 64)) const address = data.slice(4 * 64, 5 * 64); + const tokenInAddress = data.slice(3 * 64, 4 * 64); + const tokenIn = '0x' + tokenInAddress.slice(24, address.length); const tokenOut = '0x' + address.slice(24, address.length); - dailyVolume.add(tokenOut, amountOut) + if(stableToken.includes(tokenOut)) { + dailyVolume.add(tokenOut, amountOut) + } else { + dailyVolume.add(tokenIn, amountIn) + } }); return { dailyVolume: dailyVolume, From 3fdbd1b0e61d7a1e88696947970be3a30d5757ff Mon Sep 17 00:00:00 2001 From: vulntor <22735155+algtm@users.noreply.github.com> Date: Thu, 19 Sep 2024 20:29:43 +0800 Subject: [PATCH 1500/1590] add opbnb --- aggregators/udex-agg/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aggregators/udex-agg/index.ts b/aggregators/udex-agg/index.ts index 11748b6337..1435d1c972 100644 --- a/aggregators/udex-agg/index.ts +++ b/aggregators/udex-agg/index.ts @@ -13,7 +13,8 @@ const contract: IContract = { [CHAIN.BSC]: '0xfCD555b55AA785d46E8c6e9bBB109b10602c431c', [CHAIN.POLYGON]:'0x464599BDaC77E8e5843D5BbC531EC8aD75d3F7b1', [CHAIN.ETHEREUM]:'0x9556E8ce70ceA3c43e4A6c17ad2FAb258067b058', - [CHAIN.BASE]:'0x334F493613c1dD33a364684802fB9C728dfcE1A5' + [CHAIN.BASE]:'0x334F493613c1dD33a364684802fB9C728dfcE1A5', + [CHAIN.OP_BNB]:'0x8A3e34e45b76885001aa024d6F35FBAcfDBd9DB0' } From 81bf2c88a3bff1033f362fc827ad5c10aba937d9 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Sep 2024 14:49:15 +0200 Subject: [PATCH 1501/1590] remove unused code --- dexs/Omnidrome/index.ts | 54 +---------------------------------------- 1 file changed, 1 insertion(+), 53 deletions(-) diff --git a/dexs/Omnidrome/index.ts b/dexs/Omnidrome/index.ts index 1492b86bd2..622c264c26 100644 --- a/dexs/Omnidrome/index.ts +++ b/dexs/Omnidrome/index.ts @@ -1,60 +1,8 @@ -import { DISABLED_ADAPTER_KEY, FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types" +import { DISABLED_ADAPTER_KEY, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" import disabledAdapter from "../../helpers/disabledAdapter"; -const lphelper = '0x1f176AABA9c6e2014455E5C199afD15A70f9e34e'; -const abis: any = { - "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, bool stable, address token0, address token1, address factory, uint256 poolFee)[])" -} - -interface IForSwap { - lp: string; - token0: string; - token1: string; -} - -interface ILog { - address: string; - data: string; - transactionHash: string; - topics: string[]; -} -const event_swap = 'event Swap(address indexed sender,address indexed to,uint256 amount0In,uint256 amount1In,uint256 amount0Out,uint256 amount1Out)' - -const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { - const dailyVolume = createBalances() - const forSwaps: IForSwap[] = (await api.call({ - target: lphelper, - params: [1000, 0], - abi: abis.forSwaps, - chain: CHAIN.ZETA, - })).map((e: any) => { - return { - lp: e.lp, - token0: e.token0, - token1: e.token1, - } - }) - - const targets = [...new Set(forSwaps.map((forSwap: IForSwap) => forSwap.lp))] - - const logs: ILog[][] = await getLogs({ - targets, - eventAbi: event_swap, - flatten: false, - }) - - logs.forEach((logs: ILog[], idx: number) => { - const { token0, token1 } = forSwaps[idx] - logs.forEach((log: any) => { - dailyVolume.add(token0, log.amount0Out) - dailyVolume.add(token1, log.amount1Out) - }) - }) - - return { dailyVolume, timestamp } -} const adapters: SimpleAdapter = { adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, From 2db43d5a5fe0145e5887be17955099170a2fedea Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:30:11 +0200 Subject: [PATCH 1502/1590] refactor velodrome/aerodrome (#1930) --- dexs/aerodrome-slipstream/index.ts | 92 +++++------------- dexs/aerodrome/index.ts | 144 ++--------------------------- fees/Omnidrome/bribes.ts | 85 ----------------- fees/Omnidrome/index.ts | 85 ++--------------- fees/aerodrome/bribes.ts | 27 ------ fees/aerodrome/index.ts | 41 +------- fees/keller-cl/index.ts | 3 +- fees/keller/bribes.ts | 46 --------- fees/keller/index.ts | 45 +-------- fees/velodrome-v2/bribes.ts | 27 ------ fees/velodrome-v2/index.ts | 62 ++++++++----- fees/velodrome-v2/velodrome-v2.ts | 9 -- fees/velodrome/index.ts | 28 +----- fees/velodrome/v2.ts | 73 --------------- helpers/dexVolumeLogs.ts | 42 --------- helpers/solidly.ts | 22 +++-- helpers/uniswap.ts | 53 ++++++++--- 17 files changed, 146 insertions(+), 738 deletions(-) delete mode 100644 fees/Omnidrome/bribes.ts delete mode 100644 fees/aerodrome/bribes.ts delete mode 100644 fees/keller/bribes.ts delete mode 100644 fees/velodrome-v2/bribes.ts delete mode 100644 fees/velodrome-v2/velodrome-v2.ts delete mode 100644 fees/velodrome/v2.ts delete mode 100644 helpers/dexVolumeLogs.ts diff --git a/dexs/aerodrome-slipstream/index.ts b/dexs/aerodrome-slipstream/index.ts index 5708c90830..91ec0708fa 100644 --- a/dexs/aerodrome-slipstream/index.ts +++ b/dexs/aerodrome-slipstream/index.ts @@ -1,17 +1,7 @@ import { FetchOptions, FetchResult, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" - -const gurar = '0xe521fc2C55AF632cdcC3D69E7EFEd93d56c89015'; -const abis: any = { - "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" -} - -interface IForSwap { - lp: string; - token0: string; - token1: string; - pool_fee: string; -} +import { addOneToken } from "../../helpers/prices"; +import { filterPools2 } from "../../helpers/uniswap"; interface ILog { address: string; @@ -21,71 +11,37 @@ interface ILog { } const event_swap = 'event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)' -const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, }: FetchOptions): Promise => { +const fetch = async (fetchOptions: FetchOptions): Promise => { + const { api, getLogs, createBalances, } = fetchOptions + const chain = api.chain const dailyVolume = createBalances() const dailyFees = createBalances() - const chunkSize = 400; - let currentOffset = 965; // Slipstream launched after ~970 v2 pools were already created - const allForSwaps: IForSwap[] = []; - let unfinished = true; - - while (unfinished) { - const forSwapsUnfiltered: IForSwap[] = (await api.call({ - target: gurar, - params: [chunkSize, currentOffset], - abi: abis.forSwaps, - chain: CHAIN.BASE, - })); - - 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 = forSwapsUnfiltered.length !== 0; - currentOffset += chunkSize; - allForSwaps.push(...forSwaps); - } - - const targets = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) - - 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; - } - + let pairs = await api.fetchList({ lengthAbi: 'allPoolsLength', itemAbi: 'allPools', target: '0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A' }) + let token0s = await api.multiCall({ abi: 'address:token0', calls: pairs }) + let token1s = await api.multiCall({ abi: 'address:token1', calls: pairs }) + const res = await filterPools2({ fetchOptions, pairs, token0s, token1s }) + api.log(res.pairs.length, 'pairs out of', pairs.length, chain, 'aerodrome') + pairs = res.pairs + token0s = res.token0s + token1s = res.token1s + const fees = await api.multiCall({ abi: 'uint256:fee', calls: pairs }) + + let logs: ILog[][] = await getLogs({ targets: pairs, eventAbi: event_swap, flatten: false, }) logs.forEach((logs: ILog[], idx: number) => { - const { token1, pool_fee } = allForSwaps[idx] + const token0 = token0s[idx] + const token1 = token1s[idx] + const fee = fees[idx]/1e6 logs.forEach((log: any) => { - dailyVolume.add(token1, BigInt(Math.abs(Number(log.amount1)))) - dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1))) * Number(pool_fee)) / 1000000)))) // 1% fee represented as pool_fee=10000 + addOneToken({ chain, balances: dailyVolume, token0, token1, amount0: log.amount0, amount1: log.amount1 }) + addOneToken({ chain, balances: dailyFees, token0, token1, amount0: Number(log.amount0) * fee, amount1: Number(log.amount1) * fee }) }) }) - return { dailyVolume, timestamp, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } + return { dailyVolume, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } as any } + const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BASE]: { fetch: fetch as any, diff --git a/dexs/aerodrome/index.ts b/dexs/aerodrome/index.ts index 7969dc22d4..0c866acda6 100644 --- a/dexs/aerodrome/index.ts +++ b/dexs/aerodrome/index.ts @@ -1,140 +1,8 @@ -import { FetchOptions, FetchResultV2, IJSON, SimpleAdapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import { addOneToken } from "../../helpers/prices"; -import { filterPools } from "../../helpers/uniswap"; +import { CHAIN } from "../../helpers/chains" +import { uniV2Exports } from "../../helpers/uniswap"; -const sugar = '0xe521fc2C55AF632cdcC3D69E7EFEd93d56c89015'; -const sugarOld = '0x2073D8035bB2b0F2e85aAF5a8732C6f397F9ff9b'; -const abis: any = { - "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" -} -const abisOld: any = { - "forSwaps": "function forSwaps() view returns ((address lp, bool stable, address token0, address token1, address factory)[])" -} +const swapEvent = 'event Swap(address indexed sender, address indexed to, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out)' -interface IForSwap { - lp: string; - token0: string; - token1: string; - pool_fee: string; -} - -interface ILog { - address: string; - data: string; - transactionHash: string; - topics: string[]; -} -const event_swap = 'event Swap(address indexed sender,address indexed to,uint256 amount0In,uint256 amount1In,uint256 amount0Out,uint256 amount1Out)' - -const fetch = async (options: FetchOptions): Promise => { - const dailyVolume = options.createBalances() - const dailyFees = options.createBalances() - const chunkSize = 500; - let currentOffset = 0; - const allForSwaps: IForSwap[] = []; - let unfinished = true; - - if (options.startOfDay > 1714743000) { - - while (unfinished && currentOffset < 970) { - const forSwaps: IForSwap[] = (await options.api.call({ - target: sugar, - params: [chunkSize, currentOffset], - abi: abis.forSwaps, - chain: CHAIN.BASE, - })).filter(t => Number(t.type) < 1).map((e: any) => { // Regular v2 pool are types 0 and -1 - return { - lp: e.lp, - token0: e.token0, - token1: e.token1, - pool_fee: e.pool_fee, - } - }); - - unfinished = forSwaps.length !== 0; - currentOffset += chunkSize; - if (currentOffset > 970) { // slipstream launched after ~970 v2 then we need to start from the beginning - currentOffset = 970; - } - allForSwaps.push(...forSwaps.sort(() => Math.random() - 0.5)); // shuffle the array to avoid getting stuck on a single pool - } - - const pairObject: IJSON = {} - const pairs = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) - pairs.forEach((pair: string, i: number) => { - pairObject[pair] = [allForSwaps[i].token0, allForSwaps[i].token1] - }) - // filter out the pairs with less than 1000 USD pooled value - const filteredPairs = await filterPools({ api: options.api, pairs: pairObject, createBalances: options.createBalances }) - const dailyVolume = options.createBalances() - await Promise.all(Object.keys(filteredPairs).map(async (pair) => { - const [token0, token1] = pairObject[pair] - const logs = await options.getLogs({ target: pair, eventAbi: event_swap }) - logs.forEach(log => { - addOneToken({ chain: options.chain, balances: dailyVolume, token0, token1, amount0: log.amount0Out, amount1: log.amount1Out }) - }) - })) - return { dailyVolume } - } - else { - const forSwapsOld: IForSwap[] = (await options.api.call({ - target: sugarOld, - abi: abisOld.forSwaps, - chain: CHAIN.BASE, - })).map((e: any) => { - return { - lp: e.lp, - token0: e.token0, - token1: e.token1, - pool_fee: e.stable ? 5 : 30, // v2 0.05% stable swap fees, 0.3% volatile fees - } - }) - - const targets = forSwapsOld.map((forSwap: IForSwap) => forSwap.lp) - - 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 { token0, token1, pool_fee } = forSwapsOld[idx] - logs.forEach((log: any) => { - dailyVolume.add(token0, log.amount0Out) - dailyVolume.add(token1, log.amount1Out) - dailyFees.add(token0, BigInt( Math.round((((Math.abs(Number(log.amount0Out))) * Number(pool_fee)) / 10000)))) - dailyFees.add(token1, BigInt( Math.round((((Math.abs(Number(log.amount1Out))) * Number(pool_fee)) / 10000)))) - }) - }) - - return { dailyVolume, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees } - } -} -const adapters: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.BASE]: { - fetch: fetch as any, - start: 1693180800, - } - } -} -export default adapters; +export default uniV2Exports({ + [CHAIN.BASE]: { factory: '0x420DD381b31aEf6683db6B902084cB0FFECe40Da', swapEvent, }, +}) diff --git a/fees/Omnidrome/bribes.ts b/fees/Omnidrome/bribes.ts deleted file mode 100644 index bfea32d53a..0000000000 --- a/fees/Omnidrome/bribes.ts +++ /dev/null @@ -1,85 +0,0 @@ -import * as sdk from "@defillama/sdk"; -import { ethers } from "ethers"; -import { CHAIN } from "../../helpers/chains"; -import { FetchOptions } from "../../adapters/types"; - -const event_notify_reward = - "event NotifyReward(address indexed from,address indexed reward,uint256 indexed epoch,uint256 amount)"; -const event_geuge_created = - "event GaugeCreated(address indexed poolFactory,address indexed votingRewardsFactory,address indexed gaugeFactory,address pool,address bribeVotingReward,address feeVotingReward,address gauge,address creator)"; - -const contract_interface = new ethers.Interface([ - event_notify_reward, - event_geuge_created, -]); - - -interface ILog { - data: string; - transactionHash: string; - topics: string[]; -} - - -const lphelper = "0x11D66FF243715169d6C14865E18fcc30d3557830"; -const factory = "0x769d1BcB5FDf30F5a9D19f1ab8A3cF8b60a6e855"; - -const abis: any = { - "getLPDetailsPaginated": - "function getLPDetailsPaginated(uint256 pageNumber, uint256 pageLength, address factory, address account) view returns (((address lp, address factory, string symbol, uint8 decimals, string name, bool stable, uint256 totalSupply), (address token0, uint8 token0Decimals, uint256 reserve0, string token0Name, string token0Symbol), (address token1, uint8 token1Decimals, uint256 reserve1, string token1Name, string token1Symbol), (address gauge, uint256 gaugeTotalSupply, uint256 emissions, address emissionsToken, uint8 emissionsDecimals, string emissionSymbol, bool gaugeAlive), (address feeAddress, address bribeAddress, address factoryAddress, uint256 poolFee, uint256 token0Fees, uint256 token1Fees), (uint256 accountBalance, uint256 accountEarned, uint256 accountStaked, uint256 claimable0, uint256 claimable1))[])", - "allPoolsLength": "function allPoolsLength() view returns (uint256)", -}; - -export const fees_bribes = async ( - fetchOptions: FetchOptions -): Promise => { - let poolsArr: any[] = []; - const allPoolsLength = Number( - await sdk.api2.abi.call({ - target: factory, - abi: abis.allPoolsLength, - chain: CHAIN.ZETA, - }) - ); - const itemsPerPage = 15; - const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; - - if (allPoolsLength < itemsPerPage) { - poolsArr = await sdk.api2.abi.call({ - target: lphelper, - params: [1, allPoolsLength, factory, ZERO_ADDRESS], - abi: abis.getLPDetailsPaginated, - chain: CHAIN.ZETA, - }); - } else { - const numberOfPages = Math.ceil(allPoolsLength / itemsPerPage); - for (let i = 0; i < numberOfPages; i++) { - const pools4page = await sdk.api2.abi.call({ - target: lphelper, - params: [i + 1, itemsPerPage, factory, ZERO_ADDRESS], - abi: abis.getLPDetailsPaginated, - chain: CHAIN.ZETA, - }); - poolsArr = [...poolsArr, ...pools4page]; - } - } - - const bribeVotingReward: string[] = poolsArr - .map((e: any) => { - return e[4].bribeAddress; - }) - .filter((e: string) => e !== ZERO_ADDRESS); - const bribe_contracct = [...new Set(bribeVotingReward)]; - const logs: ILog[] = await fetchOptions.getLogs({ - targets: bribe_contracct, - topics: ['0x52977ea98a2220a03ee9ba5cb003ada08d394ea10155483c95dc2dc77a7eb24b'] - }) - const dailyBribesRevenue = fetchOptions.createBalances(); - logs.forEach((e: ILog) => { - const value = contract_interface.parseLog(e) - dailyBribesRevenue.add(value!.args.reward, value!.args.amount) - }) - return { - dailyBribesRevenue: dailyBribesRevenue - }; -} diff --git a/fees/Omnidrome/index.ts b/fees/Omnidrome/index.ts index 06e471b50c..481fd6e8ff 100644 --- a/fees/Omnidrome/index.ts +++ b/fees/Omnidrome/index.ts @@ -1,84 +1,15 @@ -import { - ChainBlocks, - FetchOptions, - FetchResultFees, - SimpleAdapter, -} from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import * as sdk from "@defillama/sdk"; -import { getBlock } from "../../helpers/getBlock"; -import { fees_bribes } from "./bribes"; -import { getDexFees } from "../../helpers/dexVolumeLogs"; +import { DISABLED_ADAPTER_KEY, SimpleAdapter } from "../../adapters/types" +import { CHAIN } from "../../helpers/chains" +import disabledAdapter from "../../helpers/disabledAdapter"; -const lphelper = "0x1f176AABA9c6e2014455E5C199afD15A70f9e34e"; -const abis: any = { - forSwaps: - "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, bool stable, address token0, address token1, address factory, uint256 poolFee)[])", -}; -const fetch = async ( - fetchOptions: FetchOptions -): Promise => { - const forSwaps = await sdk.api2.abi.call({ - target: lphelper, - params: [1000, 0], - abi: abis.forSwaps, - chain: CHAIN.ZETA, - }); - const pools = forSwaps.map((e: any) => e.lp); - // const pools: string[] = [ - // '0x22e48B354eA9806e46D18554fCC44dAe0E6c8e0a', - // '0x739Cd2720F35D5176EC05067739BC2533c1314a7', - // '0x6F685FFa223c96a2Be05C26defEF80339F0EdBce', - // '0x8640E4807392627a4238312920618D4c6602e7fa', - // '0x4cfF774c9eA4466463214d1D1a6E7492E9057440', - // '0x3B48FFf7Dd8b827EF300DBA5Ae79fc7a322c49Ac', - // '0x51a857F95D9AB60Ae2C8A0f121d15637fc046EE7', - // '0xD9EBfC4Ba412a0B0c9F81Ef53641f33A8ae33884', - // '0xB8567E77491964539E62788F2BC44B6c2092a9a9', - // '0x5F3b15d89Fcc91229dC0C978302151cE9a83DaA1', - // '0x5b031943a2cA4905cfa4E4EB7f6F940EC4c3f924', - // '0x542D185C63E8B04a84B53cd05B47bB11eD9f11De', - // '0x1F69A5376929C86B6d4802781bDDe82F18c0BbC9', - // '0x26FeaB16c9bC84a3f4AAaD5b3F6158d5EC012f60', - // '0xDC63883280F43f607B3E463f40914Aab54325da4', - // '0xDbeC64831fc5faEa6AbD43F1EB62b9840bb8F239', - // '0xa1EDc8F027223f1291912D3D5AE2867836617f1f', - // '0x01DbC4861D3Ab7bF2D12957eb5f0e251B20D1AdE', - // '0xD2C04cbb9D374C1f4108343867784Fb2bFDf5043', - // '0x990391699bbE5DA396e53B64FA917E89992c0A91', - // '0x47201Cf6ba8007631c2B7247DCF8a37786eF26B3', - // '0x8C0066844223C80755938623298AbbB7356AdE7c', - // '0x17E4d8D30f4082E1Ca224046D0Db725c505a1bA8', - // '0x1Aa3dB8066a555B30b4C0977F0b700a00455529D', - // '0x83C251B5a4DD9CEE6414069b888b0b25Ad646F7D', - // '0x0b0e9b5019728B543CC5B436586319E6F5946820', - // '0xba01Aaa4f51baB79AD26c83fA687B0D169aD7FBf', - // '0x7d3292145320594B48cAf8383E70d98BeEdfC90f' - // ] - - const res: any = await getDexFees({ - chain: CHAIN.ZETA, - pools, - timestamp: fetchOptions.toTimestamp, - fetchOptions, - }); - // const fromBlock = await getBlock(fromTimestamp, CHAIN.ZETA, {}); - // const toBlock = await getBlock(toTimestamp, CHAIN.ZETA, {}); - // const dailyBribesRevenue = await fees_bribes(fromBlock, toBlock, timestamp); - // res.dailyBribesRevenue = dailyBribesRevenue.toString(); - // return res; - const { dailyBribesRevenue } = await fees_bribes(fetchOptions); - res.dailyBribesRevenue = dailyBribesRevenue - return res -}; const adapters: SimpleAdapter = { - version: 2, adapter: { + [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.ZETA]: { - fetch: fetch, + fetch: async (timestamp: number) => {return {timestamp, dailyFees: '0'}}, start: 1707177600, - }, - }, -}; + } + } +} export default adapters; diff --git a/fees/aerodrome/bribes.ts b/fees/aerodrome/bribes.ts deleted file mode 100644 index da243e0481..0000000000 --- a/fees/aerodrome/bribes.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as sdk from "@defillama/sdk"; -import { FetchOptions } from '../../adapters/types'; - -const event_notify_reward = 'event NotifyReward(address indexed from,address indexed reward,uint256 indexed epoch,uint256 amount)'; -const event_geuge_created = 'event GaugeCreated(address indexed poolFactory,address indexed votingRewardsFactory,address indexed gaugeFactory,address pool,address bribeVotingReward,address feeVotingReward,address gauge,address creator)' - -export const fees_bribes = async ({ getLogs, createBalances, getToBlock }: FetchOptions): Promise => { - const voter = '0x16613524e02ad97eDfeF371bC883F2F5d6C480A5'; - const dailyFees = createBalances() - const logs_geuge_created = (await getLogs({ - target: voter, - fromBlock: 3200601, - toBlock: await getToBlock(), - eventAbi: event_geuge_created, - cacheInCloud: true, - })) - const bribes_contract: string[] = logs_geuge_created.map((e: any) => e.bribeVotingReward.toLowerCase()); - - const logs = await getLogs({ - targets: bribes_contract, - eventAbi: event_notify_reward, - }) - logs.map((e: any) => { - dailyFees.add(e.reward, e.amount) - }) - return dailyFees; -} \ No newline at end of file diff --git a/fees/aerodrome/index.ts b/fees/aerodrome/index.ts index d73a9029e2..e28d1b3549 100644 --- a/fees/aerodrome/index.ts +++ b/fees/aerodrome/index.ts @@ -1,39 +1,8 @@ -import { FetchOptions, FetchResultFees, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" -import { fees_bribes } from "./bribes"; -import { getDexFees } from "../../helpers/dexVolumeLogs"; +import { uniV2Exports } from "../../helpers/uniswap"; -const sugar = '0xe521fc2C55AF632cdcC3D69E7EFEd93d56c89015'; -const abis: any = { - "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" -} +const swapEvent = 'event Swap(address indexed sender, address indexed to, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out)' -const fetch = async (fetchOptions: FetchOptions): Promise => { - const chunkSize = 500; - let currentOffset = 0; - let unfinished = true; - const allPools: any[] = []; - - while (unfinished) { - const allPoolsChunk = await fetchOptions.api.call({ target: sugar, abi: abis.forSwaps, params: [chunkSize, currentOffset], chain: CHAIN.BASE }) - unfinished = allPoolsChunk.length !== 0; - currentOffset += chunkSize; - allPools.push(...allPoolsChunk); - } - - const pools = [...new Set(allPools.map((e: any) => e.lp))] - const timestamp = fetchOptions.startOfDay; - const res: any = await getDexFees({ chain: CHAIN.BASE, fromTimestamp: fetchOptions.fromTimestamp, toTimestamp: fetchOptions.toTimestamp, pools, timestamp, fetchOptions }) - res.dailyBribesRevenue = await fees_bribes(fetchOptions); - return res; -} -const adapters: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.BASE]: { - fetch: fetch, - start: 1693180800, - } - } -} -export default adapters; +export default uniV2Exports({ + [CHAIN.BASE]: { factory: '0x420DD381b31aEf6683db6B902084cB0FFECe40Da', swapEvent, voter: '0x16613524e02ad97eDfeF371bC883F2F5d6C480A50', maxPairSize: 65, }, +}) diff --git a/fees/keller-cl/index.ts b/fees/keller-cl/index.ts index 17abd7c575..bc128c2f8d 100644 --- a/fees/keller-cl/index.ts +++ b/fees/keller-cl/index.ts @@ -1,7 +1,8 @@ import { uniV3Exports } from "../../helpers/uniswap"; -const customLogic = async ({ pairObject, dailyFees, createBalances, filteredPairs, getLogs, }: any) => { +const customLogic = async ({ pairObject, dailyFees, fetchOptions, filteredPairs, }: any) => { const collectProtocolEvent = 'event CollectProtocol(address indexed sender,address indexed recipient,uint128 amount0,uint128 amount1)'; + const { createBalances, getLogs } = fetchOptions const dailyProtocolRevenue = createBalances(); await Promise.all(Object.keys(filteredPairs).map(async (pair) => { diff --git a/fees/keller/bribes.ts b/fees/keller/bribes.ts deleted file mode 100644 index edede3d6f8..0000000000 --- a/fees/keller/bribes.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { CHAIN } from "../../helpers/chains"; -import { FetchOptions } from "../../adapters/types"; - - -export const getBribes = async (options: FetchOptions): Promise => { - try{ - const voter = '0x30f827DECe6F25c74F37d0dD45bC245d893266e6'; - const event_notify_reward = 'event NotifyReward(address indexed from, address indexed reward, uint epoch, uint amount)'; - const event_gauge_created = 'event GaugeCreated(address indexed gauge, address creator, address internal_bribe, address indexed external_bribe, address indexed pool)' - const dailyBribesRevenue = options.createBalances(); - const logs_gauge_created = (await options.api.getLogs({ - target: voter, - fromBlock: 4265908, - toBlock: await options.getToBlock(), - eventAbi: event_gauge_created, - chain: CHAIN.SCROLL - })); - - const gauges_contracts : string[] = logs_gauge_created.map((e: any) => { - return e.args.gauge.toLowerCase(); - }); - const wrapped_external_bribes = (await options.api.multiCall({ - target: voter, - abi: 'function gaugesInfo(address) view returns (address,address,address,address,address,uint256,uint256)', - chain: CHAIN.SCROLL, - calls: gauges_contracts - })).map((e: any) => e[4]); - const logs = await options.api.getLogs({ - targets: wrapped_external_bribes, - eventAbi: event_notify_reward, - toBlock: await options.getToBlock(), - fromBlock: await options.getFromBlock(), - chain: CHAIN.SCROLL - }) - logs.map((e: any) => { - dailyBribesRevenue.add(e.args.reward, e.args.amount) - }) - return { - dailyBribesRevenue, - }; - } catch (error) { - console.error(error); - throw error; - } - -} diff --git a/fees/keller/index.ts b/fees/keller/index.ts index 60aaed8699..5f167ec1a7 100644 --- a/fees/keller/index.ts +++ b/fees/keller/index.ts @@ -1,44 +1,7 @@ -import { Adapter, FetchOptions, FetchResultFees } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains'; -import { getBribes } from './bribes'; -import { getDexFees } from '../../helpers/dexVolumeLogs'; - -const FACTORY_ADDRESS = '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367'; - -const getFees = async (fetchOptions: FetchOptions): Promise => { - const { getFromBlock, getToBlock } = fetchOptions - const fromBlock = await getFromBlock() - const toBlock = await getToBlock() - const fees = await getDexFees( - { - chain: CHAIN.SCROLL, - factory: FACTORY_ADDRESS, - fromBlock: fromBlock, - toBlock: toBlock, - lengthAbi: 'allPairsLength', - itemAbi: 'allPairs', - timestamp: fetchOptions.fromTimestamp, - fetchOptions: fetchOptions - } - ) - const bribesResult = await getBribes(fetchOptions); - - return { - timestamp: fetchOptions.fromTimestamp, - dailyFees: fees.dailyFees, - dailyBribesRevenue: bribesResult.dailyBribesRevenue, - } -} - -const adapter: Adapter = { - version: 2, - adapter: { - [CHAIN.SCROLL]: { - fetch: getFees, - start: 1710806400 - }, - }, -}; -export default adapter; +import { uniV2Exports } from '../../helpers/uniswap'; +export default uniV2Exports({ + [CHAIN.SCROLL]: { factory: '0xbc83f7dF70aE8A3e4192e1916d9D0F5C2ee86367', voter: '0x30f827DECe6F25c74F37d0dD45bC245d893266e6', }, +}) diff --git a/fees/velodrome-v2/bribes.ts b/fees/velodrome-v2/bribes.ts deleted file mode 100644 index b110a111d1..0000000000 --- a/fees/velodrome-v2/bribes.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as sdk from "@defillama/sdk"; -import { FetchOptions } from "../../adapters/types"; - -const event_notify_reward = 'event NotifyReward(address indexed from,address indexed reward,uint256 indexed epoch,uint256 amount)'; -const event_geuge_created = 'event GaugeCreated(address indexed poolFactory,address indexed votingRewardsFactory,address indexed gaugeFactory,address pool,address bribeVotingReward,address feeVotingReward,address gauge,address creator)' - -export const fees_bribes = async ({ getLogs, createBalances, getToBlock }: FetchOptions): Promise => { - const voter = '0x41c914ee0c7e1a5edcd0295623e6dc557b5abf3c'; - const dailyFees = createBalances() - const logs_geuge_created = (await getLogs({ - target: voter, - fromBlock: 105896851, - toBlock: await getToBlock(), - eventAbi: event_geuge_created, - cacheInCloud: true, - })) - const bribes_contract: string[] = logs_geuge_created.map((e: any) => e.bribeVotingReward.toLowerCase()); - - const logs = await getLogs({ - targets: bribes_contract, - eventAbi: event_notify_reward, - }) - logs.map((e: any) => { - dailyFees.add(e.reward, e.amount) - }) - return dailyFees; -} diff --git a/fees/velodrome-v2/index.ts b/fees/velodrome-v2/index.ts index 3d7ca5f18f..f9990ea07e 100644 --- a/fees/velodrome-v2/index.ts +++ b/fees/velodrome-v2/index.ts @@ -1,27 +1,45 @@ -import { Adapter, FetchOptions, FetchResultFees } from '../../adapters/types'; -import { OPTIMISM } from '../../helpers/chains'; -import { fetchV2 } from './velodrome-v2'; -import { fees_bribes } from './bribes'; +import { CHAIN } from "../../helpers/chains" +import { uniV2Exports } from "../../helpers/uniswap"; +const swapEvent = 'event Swap(address indexed sender, address indexed to, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out)' +const notifyRewardEvent = 'event NotifyReward(address indexed from,uint256 amount)'; -const getFees = async (fetchOptions: FetchOptions): Promise => { - const { getFromBlock, getToBlock, } = fetchOptions - const fromBlock = await getFromBlock() - const toBlock = await getToBlock() - const [feeV2, bribes] = await Promise.all([fetchV2(fromBlock, toBlock, fetchOptions), fees_bribes(fetchOptions)]); - return { - ...feeV2, - dailyBribesRevenue: bribes, +const config = { + [CHAIN.MODE]: { + stakingRewards: '0xD2F998a46e4d9Dd57aF1a28EBa8C34E7dD3851D7', + rewardToken: '0xDfc7C877a950e49D2610114102175A06C2e3167a', + // fromBlock: 7797181 + }, + [CHAIN.BOB]: { + stakingRewards: "0x8Eb6838B4e998DA08aab851F3d42076f21530389", + rewardTokens: "0x4200000000000000000000000000000000000006", + // fromBlock: 1723513 } } -const adapter: Adapter = { - version: 2, - adapter: { - [OPTIMISM]: { - fetch: getFees, - start: 1677110400, // TODO: Add accurate timestamp - }, - }, -}; -export default adapter; + +const customLogic = async ({ dailyFees, fetchOptions, filteredPairs, }: any) => { + const { createBalances, getLogs, chain, api, } = fetchOptions + const { stakingRewards, rewardToken, } = config[chain] + const pairs = Object.keys(filteredPairs) + const gauges = await api.multiCall({ target: stakingRewards, abi: 'function gauges(address) view returns (address)', calls: pairs }) + const dailyBribesRevenue = createBalances() + const logs = await getLogs({ targets: gauges, eventAbi: notifyRewardEvent }) + + logs.forEach(log => { + dailyBribesRevenue.add(rewardToken, log.amount) + }) + return { + dailyFees, + dailyRevenue: dailyFees, + dailyHoldersRevenue: dailyFees, + dailyBribesRevenue, + }; +} + +export default uniV2Exports({ + [CHAIN.OPTIMISM]: { factory: '0xF1046053aa5682b4F9a81b5481394DA16BE5FF5a', swapEvent, voter: '0x41c914ee0c7e1a5edcd0295623e6dc557b5abf3c', maxPairSize: 51, }, + [CHAIN.MODE]: { factory: '0x31832f2a97Fd20664D76Cc421207669b55CE4BC0', customLogic }, + [CHAIN.BOB]: { factory: '0x31832f2a97Fd20664D76Cc421207669b55CE4BC0', swapEvent, customLogic, }, +}) + diff --git a/fees/velodrome-v2/velodrome-v2.ts b/fees/velodrome-v2/velodrome-v2.ts deleted file mode 100644 index bcae11edc3..0000000000 --- a/fees/velodrome-v2/velodrome-v2.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { FetchOptions } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import { getDexFees } from "../../helpers/dexVolumeLogs"; - -const FACTORY_ADDRESS = '0xF1046053aa5682b4F9a81b5481394DA16BE5FF5a'; - -export const fetchV2 = async (fromBlock: number, toBlock: number, fetchOptions: FetchOptions): Promise => { - return getDexFees({ chain: CHAIN.OPTIMISM, fromBlock, toBlock, factory: FACTORY_ADDRESS, timestamp: fetchOptions.toTimestamp, lengthAbi: 'allPoolsLength', itemAbi: 'allPools', fetchOptions }) -} diff --git a/fees/velodrome/index.ts b/fees/velodrome/index.ts index db0c3f23db..0a16dfc275 100644 --- a/fees/velodrome/index.ts +++ b/fees/velodrome/index.ts @@ -1,36 +1,14 @@ -import { Adapter, FetchOptions, FetchResultFees } from '../../adapters/types'; -import { CHAIN, OPTIMISM } from '../../helpers/chains'; +import { Adapter, } from '../../adapters/types'; +import { OPTIMISM } from '../../helpers/chains'; import { fetchV1 } from './velodrome'; -import { fetchFees } from "./v2" - - -const getFees = async (options: FetchOptions) => { - const [feeV1] = await Promise.all([fetchV1()(options)]); - const dailyFees = Number(feeV1.dailyFees); - const dailyRevenue = Number(feeV1.dailyRevenue); - const dailyHoldersRevenue = Number(feeV1.dailyHoldersRevenue); - return { - dailyFees: `${dailyFees}`, - dailyRevenue: `${dailyRevenue}`, - dailyHoldersRevenue: `${dailyHoldersRevenue}`, - } -} const adapter: Adapter = { version: 2, adapter: { [OPTIMISM]: { - fetch: getFees, + fetch: fetchV1(), start: 1677110400, // TODO: Add accurate timestamp }, - [CHAIN.MODE]: { - fetch: fetchFees, - start: 1715763701 - }, - [CHAIN.BOB]: { - fetch: fetchFees, - start: 1715763701 - } }, }; export default adapter; diff --git a/fees/velodrome/v2.ts b/fees/velodrome/v2.ts deleted file mode 100644 index 8cff3ae11b..0000000000 --- a/fees/velodrome/v2.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Balances } from "@defillama/sdk"; -import { FetchOptions, FetchResultFees } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import { getDexFees } from "../../helpers/dexVolumeLogs"; - -const event_notify_reward = 'event NotifyReward(address indexed from,uint256 amount)'; -const event_geuge_created = 'event StakingRewardsCreated(address indexed pool,address indexed rewardToken,address indexed stakingRewards,address creator)' - -const abis: any = { - "forSwaps": "function forSwaps(uint256 _limit, uint256 _offset) view returns ((address lp, int24 type, address token0, address token1, address factory, uint256 pool_fee)[])" -} -const sugars: any = { - [CHAIN.MODE]: "0x207DfB36A449fd10d9c3bA7d75e76290a0c06731", - [CHAIN.BOB]: "0x3e71CCdf495d9628D3655A600Bcad3afF2ddea98" -} - -const stakingRewards = { - [CHAIN.MODE]: "0xD2F998a46e4d9Dd57aF1a28EBa8C34E7dD3851D7", - [CHAIN.BOB]: "0x8Eb6838B4e998DA08aab851F3d42076f21530389" -} -const rewardTokens = { - [CHAIN.MODE]: "0xDfc7C877a950e49D2610114102175A06C2e3167a", - [CHAIN.BOB]: "0x4200000000000000000000000000000000000006" -} - -export const fees_bribes = async ({ getLogs, createBalances, getToBlock, chain }: FetchOptions): Promise => { - const stakingRewardsFactory = stakingRewards[chain] ; - const rewardToken = rewardTokens[chain]; - const dailyFees = createBalances() - const logs_geuge_created = (await getLogs({ - target: stakingRewardsFactory, - fromBlock: 7797181, - toBlock: await getToBlock(), - eventAbi: event_geuge_created, - })) - const bribes_contract: string[] = logs_geuge_created.map((e: any) => e.stakingRewards.toLowerCase()); - if (bribes_contract.length === 0) { - return dailyFees; - } - const logs = await getLogs({ - targets: bribes_contract, - eventAbi: event_notify_reward, - }) - logs.map((e: any) => { - dailyFees.add(rewardToken, e.amount) - }) - return dailyFees; -} - -const fetchFees = async (options: FetchOptions): Promise => { - const chunkSize = 500; - let currentOffset = 0; - let unfinished = true; - const allPools: any[] = []; - - if (options.startOfDay > 1715763701) { // Sugar pools data helper contract created at this timestamp - while (unfinished) { - const allPoolsChunk = await options.api.call({ target: sugars[options.chain], abi: abis.forSwaps, params: [chunkSize, currentOffset], chain: options.chain}) - unfinished = allPoolsChunk.length !== 0; - currentOffset += chunkSize; - allPools.push(...allPoolsChunk); - } - } - - const pools = allPools.map((e: any) => e.lp) - const res: any = await getDexFees({ chain: options.chain, fromTimestamp: options.fromTimestamp, toTimestamp: options.toTimestamp, pools, timestamp: options.startOfDay, fetchOptions: options }) - res.dailyBribesRevenue = await fees_bribes(options); - return res; -} - -export { - fetchFees -} diff --git a/helpers/dexVolumeLogs.ts b/helpers/dexVolumeLogs.ts deleted file mode 100644 index 0324f90b83..0000000000 --- a/helpers/dexVolumeLogs.ts +++ /dev/null @@ -1,42 +0,0 @@ - -import { FetchOptions, IJSON } from "../adapters/types"; -import { filterPools, filterPools2 } from "./uniswap"; - -type getDexFeesParams = { chain: string, fromTimestamp?: number, toTimestamp?: number, factory?: string, timestamp: number, pools?: string[], lengthAbi?: string, itemAbi?: string, fromBlock?: number, toBlock?: number, fetchOptions: FetchOptions, } - -const feesEvent = "event Fees(address indexed sender, uint256 amount0, uint256 amount1)" -// const feesTopic = '0x112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602' -export async function getDexFees({ factory, timestamp, pools, lengthAbi = 'allPairsLength', itemAbi = 'allPairs', fetchOptions, }: getDexFeesParams) { - const { api } = fetchOptions - if (!pools) pools = await api.fetchList({ lengthAbi, itemAbi, target: factory! }) - - let token0s = await api.multiCall({ abi: 'address:token0', calls: pools!, permitFailure: true, }) - let token1s = await api.multiCall({ abi: 'address:token1', calls: pools!, permitFailure: true, }) - - const res = await filterPools2({ fetchOptions, pairs: pools, token0s, token1s }) - pools = res.pairs - token0s = res.token0s - token1s = res.token1s - - const logs = await fetchOptions.getLogs({ - targets: pools, - eventAbi: feesEvent, - flatten: false, - }); - logs.forEach((log: any[], index: number) => { - const token0 = token0s[index] - const token1 = token1s[index] - if (!log.length || !token0 || !token1) return - log.forEach((i: any) => { - api.add(token0, i.amount0) - api.add(token1, i.amount1) - }) - }) - const value = api.getBalancesV2() - return { - timestamp, - dailyFees: value, - dailyRevenue: value, - dailyHoldersRevenue: value, - } -} diff --git a/helpers/solidly.ts b/helpers/solidly.ts index ddc4a18272..f2b01076f0 100644 --- a/helpers/solidly.ts +++ b/helpers/solidly.ts @@ -1,5 +1,6 @@ import ADDRESSES from './coreAssets.json' import { FetchOptions, } from "../adapters/types"; +import { filterPools2 } from './uniswap'; const TOPIC_Notify = 'event NotifyReward(address indexed from, address indexed reward, uint indexed epoch, uint amount)'; @@ -19,27 +20,30 @@ const VOTER_ABI: TABI = { } export function getFeesExport({ VOTER_ADDRESS, FACTORY_ADDRESS, }: { VOTER_ADDRESS: string, FACTORY_ADDRESS: string }) { - return async ({ createBalances, api, getLogs, }: FetchOptions) => { + return async (fetchOptions: FetchOptions) => { + const { api, getLogs, createBalances, } = fetchOptions const dailyFees = createBalances() const dailyRevenue = createBalances() const dailyBribesRevenue = createBalances() - const lpTokens = await api.fetchList({ lengthAbi: ABIs.allPairsLength, itemAbi: ABIs.allPairs, target: FACTORY_ADDRESS }); + let lpTokens = await api.fetchList({ lengthAbi: ABIs.allPairsLength, itemAbi: ABIs.allPairs, target: FACTORY_ADDRESS }); - const [tokens0, tokens1] = await Promise.all( + let [token0s, token1s] = await Promise.all( ['address:token0', 'address:token1'].map((method) => api.multiCall({ abi: method, calls: lpTokens, })) ); + const res = await filterPools2({ fetchOptions, pairs: lpTokens, token0s, token1s }) + lpTokens = res.pairs + token0s = res.token0s + token1s = res.token1s + const poolsGauges = await api.multiCall({ abi: VOTER_ABI.gauges, target: VOTER_ADDRESS, calls: lpTokens, }); const voterGauges = poolsGauges.filter((_vg: string) => _vg !== ADDRESSES.null); - const voterBribes = await api.multiCall({ - abi: VOTER_ABI.bribes, target: VOTER_ADDRESS, - calls: voterGauges, - }); + const voterBribes = await api.multiCall({ abi: VOTER_ABI.bribes, target: VOTER_ADDRESS, calls: voterGauges, }); const tradefeeLogs = await getLogs({ @@ -61,8 +65,8 @@ export function getFeesExport({ VOTER_ADDRESS, FACTORY_ADDRESS, }: { VOTER_ADDRE }) lpTokens.map((_: string, index: number) => { - const token0 = tokens0[index] - const token1 = tokens1[index] + const token0 = token0s[index] + const token1 = token1s[index] tradefeeLogs[index] .map((p: any) => { dailyFees.add(token0, p.amount0) diff --git a/helpers/uniswap.ts b/helpers/uniswap.ts index d864994ae0..2b5e42d698 100644 --- a/helpers/uniswap.ts +++ b/helpers/uniswap.ts @@ -4,8 +4,9 @@ import { BaseAdapter, FetchV2, IJSON, SimpleAdapter } from "../adapters/types"; import { addOneToken } from "./prices"; import { ethers } from "ethers"; +const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; -export async function filterPools({ api, pairs, createBalances }: { api: ChainApi, pairs: IJSON, createBalances: any }): Promise> { +export async function filterPools({ api, pairs, createBalances, maxPairSize = 42, minUSDValue = 300 }: { api: ChainApi, pairs: IJSON, createBalances: any, maxPairSize?: number, minUSDValue?: number }): Promise> { const balanceCalls = Object.entries(pairs).map(([pair, tokens]) => tokens.map(i => ({ target: i, params: pair }))).flat() const res = await api.multiCall({ abi: 'erc20:balanceOf', calls: balanceCalls, permitFailure: true, }) const balances: Balances = createBalances() @@ -22,23 +23,25 @@ export async function filterPools({ api, pairs, createBalances }: { api: ChainAp const filteredPairs: IJSON = {} for (const pair of Object.keys(pairs)) { const pooledValue = await pairBalances[pair].getUSDValue() - if (pooledValue < 100) + if (pooledValue < minUSDValue) continue; filteredPairs[pair] = pooledValue } - if (Object.keys(filteredPairs).length < 21) + if (Object.keys(filteredPairs).length < maxPairSize) return filteredPairs // if there are more than 21 pools, we need to filter out the ones with the lowest value - const sortedPairs = Object.entries(filteredPairs).sort((a, b) => b[1] - a[1]).slice(0, 21) + const sortedPairs = Object.entries(filteredPairs).sort((a, b) => b[1] - a[1]).slice(0, maxPairSize) return Object.fromEntries(sortedPairs) } const defaultV2SwapEvent = 'event Swap(address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to)' +const notifyRewardEvent = 'event NotifyReward(address indexed from,address indexed reward,uint256 indexed epoch,uint256 amount)'; -export const getUniV2LogAdapter: any = ({ factory, fees = 0.003, swapEvent = defaultV2SwapEvent, stableFees = 1 / 10000 }: UniV2Config): FetchV2 => { - const fetch: FetchV2 = async ({ createBalances, getLogs, chain, api }) => { +export const getUniV2LogAdapter: any = ({ factory, fees = 0.003, swapEvent = defaultV2SwapEvent, stableFees = 1 / 10000, voter, maxPairSize, customLogic, }: UniV2Config): FetchV2 => { + const fetch: FetchV2 = async (fetchOptions) => { + const { createBalances, getLogs, chain, api } = fetchOptions factory = factory.toLowerCase() const cacheKey = `tvl-adapter-cache/cache/uniswap-forks/${factory}-${chain}.json` @@ -50,8 +53,9 @@ export const getUniV2LogAdapter: any = ({ factory, fees = 0.003, swapEvent = def }) const dailyVolume = createBalances() const dailyFees = createBalances() - const filteredPairs = await filterPools({ api, pairs: pairObject, createBalances }) + const filteredPairs = await filterPools({ api, pairs: pairObject, createBalances, maxPairSize }) const pairIds = Object.keys(filteredPairs) + api.log(`uniV2RunLog: Filtered to ${pairIds.length}/${pairs.length} pairs Factory: ${factory} Chain: ${chain}`) const isStablePair = await api.multiCall({ abi: 'bool:stable', calls: pairIds, permitFailure: true }) await Promise.all(pairIds.map(async (pair, index) => { let _fees = isStablePair[index] ? stableFees : fees @@ -64,6 +68,28 @@ export const getUniV2LogAdapter: any = ({ factory, fees = 0.003, swapEvent = def addOneToken({ chain, balances: dailyFees, token0, token1, amount0: Number(log.amount0Out) * _fees, amount1: Number(log.amount1Out) * _fees }) }) })) + if (customLogic) + return customLogic({ pairObject, dailyVolume, dailyFees, filteredPairs, fetchOptions }) + + + if (voter) { + const dailyBribesRevenue = createBalances() + const bribeContracts: string[] = await api.multiCall({ abi: 'function gauges(address) view returns (address)', calls: pairIds, target: voter }) + let feesVotingReward: string[] = await api.multiCall({ abi: 'address:feesVotingReward', calls: bribeContracts, permitFailure: true }) + if (feesVotingReward.filter((e: any) => e).length === 0) { + api.log('No feesVotingReward found, trying bribes') + feesVotingReward = bribeContracts + } + api.log(bribeContracts.length, 'bribes contracts found') + + const logs = await getLogs({ targets: feesVotingReward.filter(i => i !== ZERO_ADDRESS), eventAbi: notifyRewardEvent, }) + + logs.map((e: any) => { + dailyBribesRevenue.add(e.reward, e.amount) + }) + + return { dailyVolume, dailyFees, dailyRevenue: dailyFees, dailyHoldersRevenue: dailyFees, dailyBribesRevenue } + } return { dailyVolume, dailyFees, } } @@ -73,7 +99,8 @@ export const getUniV2LogAdapter: any = ({ factory, fees = 0.003, swapEvent = def const defaultV3SwapEvent = 'event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)' const defaultPoolCreatedEvent = 'event PoolCreated(address indexed token0, address indexed token1, uint24 indexed fee, int24 tickSpacing, address pool)' export const getUniV3LogAdapter: any = ({ factory, poolCreatedEvent = defaultPoolCreatedEvent, swapEvent = defaultV3SwapEvent, customLogic }: UniV3Config): FetchV2 => { - const fetch: FetchV2 = async ({ createBalances, getLogs, chain, api }) => { + const fetch: FetchV2 = async (fetchOptions) => { + const { createBalances, getLogs, chain, api } = fetchOptions factory = factory.toLowerCase() const cacheKey = `tvl-adapter-cache/cache/logs/${chain}/${factory}.json` const iface = new ethers.Interface([poolCreatedEvent]) @@ -101,7 +128,7 @@ export const getUniV3LogAdapter: any = ({ factory, poolCreatedEvent = defaultPoo })) if (customLogic) { - return customLogic({ pairObject, dailyVolume, dailyFees, filteredPairs, createBalances, getLogs, chain, api }) + return customLogic({ pairObject, dailyVolume, dailyFees, filteredPairs, fetchOptions }) } return { dailyVolume, dailyFees } } @@ -113,6 +140,9 @@ type UniV2Config = { fees?: number, swapEvent?: string, stableFees?: number, + voter?: string, + maxPairSize?: number, + customLogic?: any, } type UniV3Config = { @@ -145,13 +175,12 @@ export function uniV3Exports(config: IJSON) { } - -export async function filterPools2({ fetchOptions, pairs, token0s, token1s }: any) { +export async function filterPools2({ fetchOptions, pairs, token0s, token1s, minUSDValue, maxPairSize }: any) { const pairObject: IJSON = {} pairs.forEach((pair: string, i: number) => { pairObject[pair] = [token0s[i], token1s[i]] }) - const res = await filterPools({ ...fetchOptions, pairs: pairObject }) + const res = await filterPools({ ...fetchOptions, pairs: pairObject, minUSDValue, maxPairSize }) pairs = [] token0s = [] token1s = [] From 3b89a3f9cea9f2db5ebfe88f03bb92cea825d103 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:30:37 +0200 Subject: [PATCH 1503/1590] celodrome-v2: bugfix --- fees/velodrome-v2/index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fees/velodrome-v2/index.ts b/fees/velodrome-v2/index.ts index f9990ea07e..f7c08464f2 100644 --- a/fees/velodrome-v2/index.ts +++ b/fees/velodrome-v2/index.ts @@ -8,12 +8,10 @@ const config = { [CHAIN.MODE]: { stakingRewards: '0xD2F998a46e4d9Dd57aF1a28EBa8C34E7dD3851D7', rewardToken: '0xDfc7C877a950e49D2610114102175A06C2e3167a', - // fromBlock: 7797181 }, [CHAIN.BOB]: { stakingRewards: "0x8Eb6838B4e998DA08aab851F3d42076f21530389", - rewardTokens: "0x4200000000000000000000000000000000000006", - // fromBlock: 1723513 + rewardToken: "0x4200000000000000000000000000000000000006", } } From f10bcd5ffeee3eb363a09e58cf2dd3b14e858b32 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 19 Sep 2024 16:09:07 +0000 Subject: [PATCH 1504/1590] fix version of adapter --- fees/myx-finance/index.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/fees/myx-finance/index.tsx b/fees/myx-finance/index.tsx index b5651a3bee..02f32fb02e 100644 --- a/fees/myx-finance/index.tsx +++ b/fees/myx-finance/index.tsx @@ -30,11 +30,13 @@ const fetchApi = async (type: FetchType, startTime: number, endTime: number) => return data } -const fetchFees = async (optios: FetchOptions) => { - const dailyAlls: Data[] = await fetchApi(FetchType.DAILY, optios.startTimestamp, optios.endTimestamp) +const fetchFees = async (_t: any, _b: any, optios: FetchOptions) => { + const start = optios.startOfDay; + const end = start + 86400; + const dailyAlls: Data[] = await fetchApi(FetchType.DAILY, start, end) const dailyFees = dailyAlls.find((daily: Data)=> daily.chainId === optios.toApi.chainId) - const totalAlls: Data[] = await fetchApi(FetchType.TOTAL, optios.startTimestamp, optios.endTimestamp) + const totalAlls: Data[] = await fetchApi(FetchType.TOTAL, start, end) const totalFees = totalAlls.find((daily: Data)=> daily.chainId === optios.toApi.chainId) return { @@ -50,7 +52,7 @@ const startTimestamps: { [chain: string]: number } = { } const adapter: SimpleAdapter = { - version: 2, + version: 1, adapter: { [CHAIN.ARBITRUM]: { fetch: fetchFees, From 807d4e5494ed899aaf3a094c07946eb6de7063e8 Mon Sep 17 00:00:00 2001 From: Dmytro Steblyna Date: Fri, 20 Sep 2024 15:12:33 +0100 Subject: [PATCH 1505/1590] add yellow router addresses --- users/routers/routerAddresses.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index e677c446f0..833290f236 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -2408,5 +2408,16 @@ export default ( bsc: ["0x888888888889758F76e7103c6CbF23ABbF58F946"], } }, + { + id: "parent#yellow", + name: "Yellow", + addresses: { + ethereum: ["0x2A8B51821884CF9A7ea1A24C72E46Ff52dCb4F16"], + bsc: ["0x2A8B51821884CF9A7ea1A24C72E46Ff52dCb4F16"], + polygon: ["0x2A8B51821884CF9A7ea1A24C72E46Ff52dCb4F16"], + base: ["0x2A8B51821884CF9A7ea1A24C72E46Ff52dCb4F16"], + arbitrum: ["0x2A8B51821884CF9A7ea1A24C72E46Ff52dCb4F16"], + }, + }, ] as ProtocolAddresses[] ).filter(isAddressesUsable); From 0def4001e620c812e4f15f8f4ab02926b53cc7e2 Mon Sep 17 00:00:00 2001 From: Dmytro Steblyna Date: Fri, 20 Sep 2024 15:37:55 +0100 Subject: [PATCH 1506/1590] set id --- users/routers/routerAddresses.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index 833290f236..ec15ec95da 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -2409,7 +2409,7 @@ export default ( } }, { - id: "parent#yellow", + id: "5157", name: "Yellow", addresses: { ethereum: ["0x2A8B51821884CF9A7ea1A24C72E46Ff52dCb4F16"], From 241a935bf2261fc2b62965c0dc19350d9712e384 Mon Sep 17 00:00:00 2001 From: ryanC Date: Thu, 19 Sep 2024 23:17:36 +0900 Subject: [PATCH 1507/1590] feat: add xy finance volume adapter --- aggregators/xy-finance/index.ts | 187 ++++++++++++++++++++++++++++++++ helpers/chains.ts | 2 + 2 files changed, 189 insertions(+) create mode 100644 aggregators/xy-finance/index.ts diff --git a/aggregators/xy-finance/index.ts b/aggregators/xy-finance/index.ts new file mode 100644 index 0000000000..bbd5dc7c15 --- /dev/null +++ b/aggregators/xy-finance/index.ts @@ -0,0 +1,187 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +type Contract = { + [c: string | Chain]: { + yBridge: string, + xyRouter: string, + }; +} + +const contract: Contract = { + [CHAIN.ETHEREUM]: { + yBridge: '0x4315f344a905dC21a08189A117eFd6E1fcA37D57', + xyRouter: "0xFfB9faf89165585Ad4b25F81332Ead96986a2681" + }, + [CHAIN.SCROLL]: { + yBridge: "0x778C974568e376146dbC64fF12aD55B2d1c4133f", + xyRouter: "0x22bf2A9fcAab9dc96526097318f459eF74277042" + }, + [CHAIN.MANTLE]: { + yBridge: "0x73Ce60416035B8D7019f6399778c14ccf5C9c7A1", + xyRouter: "0x52075Fd1fF67f03beABCb5AcdA9679b02d98cA37" + }, + [CHAIN.LINEA]: { + yBridge: "0x73Ce60416035B8D7019f6399778c14ccf5C9c7A1", + xyRouter: "0xc693C8AAD9745588e95995fef4570d6DcEF98000" + }, + [CHAIN.BASE]: { + yBridge: "0x73Ce60416035B8D7019f6399778c14ccf5C9c7A1", + xyRouter: "0x6aCd0Ec9405CcB701c57A88849C4F1CD85a3f3ab" + }, + [CHAIN.ARBITRUM]: { + yBridge: "0x33383265290421C704c6b09F4BF27ce574DC4203", + xyRouter: "0x062b1Db694F6A437e3c028FC60dd6feA7444308c" + }, + [CHAIN.ZKSYNC]: { + yBridge: "0xe4e156167cc9C7AC4AbD8d39d203a5495F775547", + xyRouter: "0x30E63157bD0bA74C814B786F6eA2ed9549507b46" + }, + [CHAIN.BSC]: { + yBridge: "0x7D26F09d4e2d032Efa0729fC31a4c2Db8a2394b1", + xyRouter: "0xDF921bc47aa6eCdB278f8C259D6a7Fef5702f1A9" + }, + [CHAIN.POLYGON]: { + yBridge: "0x0c988b66EdEf267D04f100A879db86cdb7B9A34F", + xyRouter: "0xa1fB1F1E5382844Ee2D1BD69Ef07D5A6Abcbd388" + }, + [CHAIN.KLAYTN]: { + yBridge: "0x52075Fd1fF67f03beABCb5AcdA9679b02d98cA37", + xyRouter: "0x252eA5AebEB648e7e871DAD7E0aB6cb49096BdD5" + }, + [CHAIN.POLYGON_ZKEVM]: { + yBridge: "0x3689D3B912d4D73FfcAad3a80861e7caF2d4F049", + xyRouter: "0x218Ef86b88765df568E9D7d7Fd34B5Dc88098080" + }, + [CHAIN.AVAX]: { + yBridge: "0x2C86f0FF75673D489b7D72D9986929a2b0Ed596C", + xyRouter: "0xa0c0F962DECD78D7CDE5707895603CBA74C02989" + }, + [CHAIN.OPTIMISM]: { + yBridge: "0x7a6e01880693093abACcF442fcbED9E0435f1030", + xyRouter: "0xF8d342db903F266de73B10a1e46601Bb08a3c195" + }, + [CHAIN.CRONOS]: { + yBridge: "0xF103b5B479d2A629F422C42bb35E7eEceE1ad55E", + xyRouter: "0x5d6e7E537cb4a8858C8B733A2A307B4aAFDc42ca" + }, + [CHAIN.FANTOM]: { + yBridge: "0xDa241399697fa3F6cD496EdAFab6191498Ec37F5", + xyRouter: "0x1E1a70eDb9cd26ccc05F01C66B882cef0E4f7d2D" + }, + [CHAIN.ASTAR]: { + yBridge: "0x5C6C12Fd8b1f7E60E5B60512712cFbE0192E795E", + xyRouter: "0x9c83E6F9E8DA12af8a0Cb8E276b722EB3D7668aF" + }, + [CHAIN.KCC]: { + yBridge: "0x7e803b54295Cd113Bf48E7f069f0531575DA1139", + xyRouter: "0x562afa22b2Fc339fd7Fa03E734E7008C3EccF8CF" + }, + [CHAIN.MOONRIVER]: { + yBridge: "0xc67Dd7054915a2B0aA3e48f35DA714Ff861e71BD", + xyRouter: "0x64d17beaE666cC435B9d40a21f058b379b2a0194" + }, + [CHAIN.THUNDERCORE]: { + yBridge: "0xF103b5B479d2A629F422C42bb35E7eEceE1ad55E", + xyRouter: "0xbF26ca7cf925e9EA0765c737B066253CF80e0E09" + }, + [CHAIN.NUMBERS]: { + yBridge: "", + xyRouter: "0x1acCfC3a45313f8F862BE7fbe9aB25f20A93d598" + }, + [CHAIN.WEMIX]: { + yBridge: "0x73Ce60416035B8D7019f6399778c14ccf5C9c7A1", + xyRouter: "0x6471fAd467ac2854b403e7FE3e95FBbB3287a7ee" + }, + [CHAIN.BLAST]: { + yBridge: "0x73Ce60416035B8D7019f6399778c14ccf5C9c7A1", + xyRouter: "0x43A86823EBBe2ECF9A384aDfD989E26A30626458" + }, + [CHAIN.XLAYER]: { + yBridge: "0x73Ce60416035B8D7019f6399778c14ccf5C9c7A1", + xyRouter: "0x6A816cEE105a9409D8df0A83d8eeaeD9EB4309fE" + }, + [CHAIN.TAIKO]: { + yBridge: "0x73Ce60416035B8D7019f6399778c14ccf5C9c7A1", + xyRouter: "0xedC061306A79257f15108200C5B82ACc874C239d" + }, + [CHAIN.CRONOS_ZKEVM]: { + yBridge: "0xE22747472A565e96D0867741811193895b9538f2", + xyRouter: "0x986138f6ed1350a85De6B18280f7d139F74B7282" + }, +} +const yBridgeContractTopic = '0xb0e9a29a6096a927bd389ba0d0d1a15f82df21a331d23a33eeb7de1cf7ab2684' +const xyRouterContractTopic = '0xcfdc06da1b80f541716b9dc11dba02141fbc401b0d152e9286df44c79b9d4000' +const yBridgeContractEventAbi = 'event SwapRequested(uint256 _swapId, address indexed _aggregatorAdaptor, tuple(uint32 dstChainId, address dstChainToken, address dstAggregatorAdaptor, uint256 expectedDstChainTokenAmount, uint32 slippage) _dstChainDesc, address _srcToken, address indexed _vaultToken, uint256 _vaultTokenAmount, address _receiver, uint256 _srcTokenAmount, uint256 _expressFeeAmount, address indexed _referrer)' +const xyRouterContractEventAbi = `event XYRouterRequested( + uint256 xyRouterRequestId, + address indexed sender, + address srcToken, + uint256 amountIn, + address indexed bridgeAddress, + address bridgeToken, + uint256 bridgeAmount, + uint256 dstChainId, + bytes bridgeAssetReceiver, + tuple( + tuple(bool hasTip, address tipReceiver) tipInfo, + tuple( + bool hasDstChainSwap, + tuple( + tuple(address srcToken, address dstToken, uint256 minReturnAmount, address receiver) swapRequest, + address dexAddress, + address approveToAddress, + bytes dexCalldata + ) swapAction + ) dstChainSwapInfo, + tuple(bool hasIM, address xApp, address refundReceiver, bytes message) imInfo + ) dstChainAction, + address indexed affiliate)` + +const fetch: any = async (timestamp: number, _, { chain, getLogs, createBalances, getFromBlock, getToBlock }: FetchOptions): Promise => { + const dailyVolume = createBalances(); + try { + const yBridgeContract = contract[chain].yBridge; + const xyRouterContract = contract[chain].xyRouter; + + const logPromises: (Promise)[] = []; + if (yBridgeContract) { + logPromises.push(getLogs({ + target: yBridgeContract, + topics: [yBridgeContractTopic], + eventAbi: yBridgeContractEventAbi, + })) + } + if (xyRouterContract) { + logPromises.push(getLogs({ + target: xyRouterContract, + topics: [xyRouterContractTopic], + eventAbi: xyRouterContractEventAbi, + })) + } + const [yBridgeData, xyRouterData] = await Promise.all(logPromises); + yBridgeData?.forEach((e: any) => { + dailyVolume.add(e._vaultToken, e._vaultTokenAmount) + }); + + xyRouterData?.forEach((e: any) => { + dailyVolume.add(e.bridgeToken, e.bridgeAmount); + }); + } catch (error) { + console.error(`XY Finance fetch chain ${chain} error: ${JSON.stringify(error)}`); + } finally { + return { dailyBridgeVolume: dailyVolume , timestamp, } as any; + } +} + +const adapter: SimpleAdapter = { + adapter: Object.keys(contract).reduce((acc, chain) => { + return { + ...acc, + [chain]: { fetch, start: 1691625600, } + } + }, {}) +} + +export default adapter diff --git a/helpers/chains.ts b/helpers/chains.ts index 12ee4a3768..7aea23b254 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -141,6 +141,7 @@ export enum CHAIN { JBC = "jbc", ZKFAIR = "zkfair", ZETA = "zeta", + ASTAR = 'astar', ASTAR_ZKEVM = "astrzk", FILECOIN = "filecoin", FRAXTAL = "fraxtal", @@ -166,6 +167,7 @@ export enum CHAIN { CRONOS_ZKEVM = "cronos_zkevm", LOGX = "logx_network", FLARE = "flare", + NUMBERS = "numbers", } // Don´t use From f5ee5c8f332928947596ccd16a2a492e793ccf1f Mon Sep 17 00:00:00 2001 From: Dav0808 Date: Sat, 21 Sep 2024 10:48:07 +0400 Subject: [PATCH 1508/1590] adding adapter to display hinkal total volume --- dexs/hinkal/index.ts | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/dexs/hinkal/index.ts b/dexs/hinkal/index.ts index 8ea56b2d52..3d4b7b5c00 100644 --- a/dexs/hinkal/index.ts +++ b/dexs/hinkal/index.ts @@ -4,8 +4,8 @@ import { CHAIN } from "../../helpers/chains"; const fetchEthereum = async (options: FetchOptions) => { const timestamp = options.endTimestamp; - const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=1`; - const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=1`; + const urlTotal = `https://ethMainnet.server.hinkal.pro/totalVolume/${timestamp}/false/1`; + const urlDaily = `https://ethMainnet.server.hinkal.pro/totalVolume/${timestamp}/true/1`; try { const responseTotal = await axios.get(urlTotal); const dataTotal = responseTotal.data; @@ -23,8 +23,8 @@ const fetchEthereum = async (options: FetchOptions) => { const fetchBase = async (options: FetchOptions) => { const timestamp = options.endTimestamp; - const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=8453`; - const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=8453`; + const urlTotal = `https://base.server.hinkal.pro/totalVolume/${timestamp}/false/8453`; + const urlDaily = `https://base.server.hinkal.pro/totalVolume/${timestamp}/true/8453`; try { const responseTotal = await axios.get(urlTotal); const dataTotal = responseTotal.data; @@ -42,8 +42,8 @@ const fetchBase = async (options: FetchOptions) => { const fetchArbitrum = async (options: FetchOptions) => { const timestamp = options.endTimestamp; - const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=42161`; - const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=42161`; + const urlTotal = `https://arbMainnet.server.hinkal.pro/totalVolume/${timestamp}/false/42161`; + const urlDaily = `https://arbMainnet.server.hinkal.pro/totalVolume/${timestamp}/true/42161`; try { const responseTotal = await axios.get(urlTotal); const dataTotal = responseTotal.data; @@ -61,8 +61,8 @@ const fetchArbitrum = async (options: FetchOptions) => { const fetchPolygon = async (options: FetchOptions) => { const timestamp = options.endTimestamp; - const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=137`; - const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=137`; + const urlTotal = `https://polygon.server.hinkal.pro/totalVolume/${timestamp}/false/137`; + const urlDaily = `https://polygon.server.hinkal.pro/totalVolume/${timestamp}/true/137`; try { const responseTotal = await axios.get(urlTotal); const dataTotal = responseTotal.data; @@ -80,8 +80,8 @@ const fetchPolygon = async (options: FetchOptions) => { const fetchBNB = async (options: FetchOptions) => { const timestamp = options.endTimestamp; - const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=56`; - const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=56`; + const urlTotal = `https://bnbMainnet.server.hinkal.pro/totalVolume/${timestamp}/false/56`; + const urlDaily = `https://bnbMainnet.server.hinkal.pro/totalVolume/${timestamp}/true/56`; try { const responseTotal = await axios.get(urlTotal); const dataTotal = responseTotal.data; @@ -99,8 +99,8 @@ const fetchBNB = async (options: FetchOptions) => { const fetchAVALANCHE = async (options: FetchOptions) => { const timestamp = options.endTimestamp; - const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=43114`; - const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=43114`; + const urlTotal = `https://avalanche.server.hinkal.pro/totalVolume/${timestamp}/false/43114`; + const urlDaily = `https://avalanche.server.hinkal.pro/totalVolume/${timestamp}/true/43114`; try { const responseTotal = await axios.get(urlTotal); const dataTotal = responseTotal.data; @@ -118,8 +118,8 @@ const fetchAVALANCHE = async (options: FetchOptions) => { const fetchOPTIMISM = async (options: FetchOptions) => { const timestamp = options.endTimestamp; - const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=10`; - const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=10`; + const urlTotal = `https://optimism.server.hinkal.pro/totalVolume/${timestamp}/false/10`; + const urlDaily = `https://optimism.server.hinkal.pro/totalVolume/${timestamp}/true/10`; try { const responseTotal = await axios.get(urlTotal); const dataTotal = responseTotal.data; @@ -137,8 +137,8 @@ const fetchOPTIMISM = async (options: FetchOptions) => { const fetchBLAST = async (options: FetchOptions) => { const timestamp = options.endTimestamp; - const urlTotal = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=false&chainId=81457`; - const urlDaily = `http://localhost:3000/volume?endDate=${timestamp}&dailyVolume=true&chainId=81457`; + const urlTotal = `https://blast.server.hinkal.pro/totalVolume/${timestamp}/false/81457`; + const urlDaily = `https://blast.server.hinkal.pro/totalVolume/${timestamp}/true/81457`; try { const responseTotal = await axios.get(urlTotal); const dataTotal = responseTotal.data; From 7c3bc716a8c50c9f2b93b70b33ee03304e7bee26 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 21 Sep 2024 10:09:17 +0000 Subject: [PATCH 1509/1590] add eth v3 --- dexs/sushiswap/v3.ts | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/dexs/sushiswap/v3.ts b/dexs/sushiswap/v3.ts index 0a54a2d542..3d49511347 100644 --- a/dexs/sushiswap/v3.ts +++ b/dexs/sushiswap/v3.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpointsV3 = { - // [CHAIN.ARBITRUM_NOVA]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v3/v3-arbitrum-nova', + [CHAIN.ARBITRUM_NOVA]: "https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushi-v3/v3-arbitrum-nova/gn", [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('4vRhyrcGqN63T7FXvL9W5X72iQN8H9fDNfLcUQBG91Wi'), [CHAIN.AVAX]: sdk.graph.modifyEndpoint('HE31GSTGpXsRnuT4sAJoFayGBZX2xBQqWq4db48YuKmD'), [CHAIN.BSC]: sdk.graph.modifyEndpoint('GtUp5iLfjfYXtX76wF1yyteSSC5WqnYV8br5ixHZgFmW'), @@ -12,15 +12,25 @@ const endpointsV3 = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('7okunX6MGm2pdFK7WJSwm9o82okpBLEzfGrqHDDMWYvq'), [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('6z2W9fLTVmhpCecSMTMpRNeSBTRPJLmKsSXrtdkpeJDz'), [CHAIN.FUSE]: sdk.graph.modifyEndpoint('7E265DKJJiTn8bVF1nqmBr6C2tmo5MVQFNb9sm4cxng5'), - [CHAIN.XDAI]: sdk.graph.modifyEndpoint('hS35uHcFDVSxJQV1XWht7yMdGTRNVa9poYTpcEZ9uAQ'), - // [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('5WabfuUgF5k4CE9snB22HNcUHQVkUStvet76qjovKdm6'), + [CHAIN.XDAI]: sdk.graph.modifyEndpoint('GFvGfWBX47RNnvgwL6SjAAf2mrqrPxF91eA53F4eNegW'), + // [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('F46W9YVQXGism5iN9NZNhKm2DQCvjhr4u847rL1tRebS'), [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('Hc3vTLxWmtyrn59t2Yv3MiXJVxjfNyZi41iKE3rXXHMf'), [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('G1Q6dviDfMm6hVLvCqbfeB19kLmvs7qrnBvXeFndjhaU'), - // [CHAIN.POLYGON_ZKEVM]: 'https://api.studio.thegraph.com/query/32073/v3-polygon-zkevm/v0.0.2', + // [CHAIN.POLYGON_ZKEVM]: sdk.graph.modifyEndpoint('E2x2gmtYdm2HX3QXorUBY4KegfGu79Za6TEQYjVrx15c'), [CHAIN.THUNDERCORE]: 'https://graph-node.thundercore.com/subgraphs/name/sushi-v3/v3-thundercore', [CHAIN.BASE]: "https://api.studio.thegraph.com/query/32073/v3-base/v0.0.1", [CHAIN.CORE]: "https://thegraph.coredao.org/subgraphs/name/sushi-v3/v3-core", [CHAIN.BLAST]: "https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/v3-blast/gn", + // [CHAIN.ROOTSTOCK]: "https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/v3-rootstock/gn", + [CHAIN.BITTORRENT]: "https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushi-v3/v3-bttc/gn", + [CHAIN.FILECOIN]: "https://sushi.laconic.com/subgraphs/name/sushiswap/v3-filecoin", + [CHAIN.METIS]: "https://metisapi.0xgraph.xyz/api/public/fc1ae952-7a36-44ac-9e9b-f46d70cedf7d/subgraphs/sushi-v3/v3-metis/v0.0.1/gn", + [CHAIN.KAVA]: "https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushi-v3/v3-kava/gn", + // [CHAIN.ZETA]: "https://api.goldsky.com/api/public/project_cls39ugcfyhbq01xl9tsf6g38/subgraphs/v3-zetachain/1.0.0/gn", + // [CHAIN.HAQQ]: "https://haqq.graph.p2p.org/subgraphs/name/sushi/v3-haqq-2", + [CHAIN.LINEA]: sdk.graph.modifyEndpoint('E2vqqvSzDdUiPP1r7PFnPKZQ34pAhNZjc6rEcdj3uE5t'), + [CHAIN.SCROLL]: sdk.graph.modifyEndpoint('5gyhoHx768oHn3GxsHsEc7oKFMPFg9AH8ud1dY8EirRc'), + // [CHAIN.SKALE_EUROPA]: "https://elated-tan-skat-graph.skalenodes.com:8000/subgraphs/name/sushi/v3-skale-europa", } const v3Graphs = getGraphDimensions2({ @@ -57,6 +67,16 @@ const startTimeV3: {[key: string]: number} = { [CHAIN.BASE]: 1691020800, [CHAIN.CORE]: 1689897600, [CHAIN.BLAST]: 1709337600, + [CHAIN.ROOTSTOCK]: 1709337600, + [CHAIN.BITTORRENT]: 1711982400, + [CHAIN.FILECOIN]: 1711982400, + [CHAIN.METIS]: 1711982400, + [CHAIN.KAVA]: 1711982400, + [CHAIN.ZETA]: 1711982400, + [CHAIN.HAQQ]: 1711982400, + [CHAIN.LINEA]: 1711982400, + [CHAIN.SCROLL]: 1711982400, + [CHAIN.SKALE_EUROPA]: 1711982400, } const v3 = Object.keys(endpointsV3).reduce( From 5ba26ee85239038ce596a400a7752b7f9d0bbf25 Mon Sep 17 00:00:00 2001 From: whichghost Date: Sat, 21 Sep 2024 22:23:16 +0800 Subject: [PATCH 1510/1590] add polter base --- fees/polter/index.ts | 107 +++++++++++++++++++++++++++---------------- 1 file changed, 67 insertions(+), 40 deletions(-) diff --git a/fees/polter/index.ts b/fees/polter/index.ts index 63443e8231..7e97bad2f0 100644 --- a/fees/polter/index.ts +++ b/fees/polter/index.ts @@ -15,49 +15,66 @@ const headers: THeader = { const RECORDS_PER_PAGE = 1000 const endpoints: any = { [CHAIN.FANTOM]: "https://api.studio.thegraph.com/query/71811/polter/version/latest", + [CHAIN.BASE]: "https://api.studio.thegraph.com/query/71811/polter-base/version/latest", }; const tokens: any = { - '0x5c725631fd299703d0a74c23f89a55c6b9a0c52f': { - gecko: 'polter-finance', - decimals: 18 - }, - '0xbbce4b1513d4285bd7a59c2c63835535151c8e7c': { - gecko: 'fantom', - decimals: 18 - }, - '0x5a75a5f3a637cc9394816efc553d102302d4cfcd': { - gecko: 'usd-coin', - decimals: 6 - }, - '0xa826b29d81caef8c9aa212f172ab3ef00566e91e': { - gecko: 'magic-internet-money', - decimals: 18 - }, - '0x4bf6f3210488091a0111daf7ab7cf840a3af8022': { - gecko: 'stader-sftmx', - decimals: 18 - }, - '0x0299553df0fa396c0f6f3456d293608e189c3cf3': { - gecko: 'solana', - decimals: 18 - }, - '0xb49da25f726451ba0e7c7e1c0b273322d2656514': { - gecko: 'layerzero-usdc', - decimals: 6 - }, - '0xc60f08059586849810d9c19c67919d2d99174ecf': { - gecko: 'axlusdc', - decimals: 6 - }, - '0xa37e0d5590436bd9abd2803c18c328a650b236ee': { - gecko: 'bitcoin', - decimals: 8 + fantom: { + '0x5c725631fd299703d0a74c23f89a55c6b9a0c52f': { + gecko: 'polter-finance', + decimals: 18 + }, + '0xbbce4b1513d4285bd7a59c2c63835535151c8e7c': { + gecko: 'fantom', + decimals: 18 + }, + '0x5a75a5f3a637cc9394816efc553d102302d4cfcd': { + gecko: 'usd-coin', + decimals: 6 + }, + '0xa826b29d81caef8c9aa212f172ab3ef00566e91e': { + gecko: 'magic-internet-money', + decimals: 18 + }, + '0x4bf6f3210488091a0111daf7ab7cf840a3af8022': { + gecko: 'stader-sftmx', + decimals: 18 + }, + '0x0299553df0fa396c0f6f3456d293608e189c3cf3': { + gecko: 'solana', + decimals: 18 + }, + '0xb49da25f726451ba0e7c7e1c0b273322d2656514': { + gecko: 'layerzero-usdc', + decimals: 6 + }, + '0xc60f08059586849810d9c19c67919d2d99174ecf': { + gecko: 'axlusdc', + decimals: 6 + }, + '0xa37e0d5590436bd9abd2803c18c328a650b236ee': { + gecko: 'bitcoin', + decimals: 8 + }, + '0x328c7a684f160c089ebff07ff1b5a417f024979e': { + gecko: 'bridged-wrapped-ether-stargate', + decimals: 18 + } }, - '0x328c7a684f160c089ebff07ff1b5a417f024979e': { - gecko: 'bridged-wrapped-ether-stargate', - decimals: 18 - } + base: { + '0x4200000000000000000000000000000000000006': { + gecko: 'ethereum', + decimals: 18 + }, + '0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf': { + gecko: 'coinbase-wrapped-btc', + decimals: 8 + }, + '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913': { + gecko: 'usd-coin', + decimals: 6 + } + } } @@ -99,7 +116,7 @@ const fetch: FetchV2 = async ({ chain, startTimestamp, endTimestamp, createBalan rewardsPaids.push(...rewardsPaid) } rewardsPaids.forEach((reward: RewardsPaid) => { - const {gecko, decimals} = tokens[reward.rewardsToken] + const {gecko, decimals} = tokens[chain][reward.rewardsToken] if (!gecko) { return } @@ -126,6 +143,16 @@ const adapter: Adapter = { } } }, + [CHAIN.BASE]: { + fetch: fetch, + start: 19746482, // Sep-14-2024 02:51:51 AM +UTC + meta: { + methodology: { + Fees: "lockers' revenue = stakers' revenue + 50% penalty from early exit", + Revenue: "depositors' revenue from borrow interests", + } + } + }, }, } From cc0343409db0f867f403d81f1d069be420966822 Mon Sep 17 00:00:00 2001 From: ryanC Date: Sat, 21 Sep 2024 22:26:48 +0800 Subject: [PATCH 1511/1590] chore: move to bridge-aggregator --- {aggregators => bridge-aggregator}/xy-finance/index.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {aggregators => bridge-aggregator}/xy-finance/index.ts (100%) diff --git a/aggregators/xy-finance/index.ts b/bridge-aggregator/xy-finance/index.ts similarity index 100% rename from aggregators/xy-finance/index.ts rename to bridge-aggregator/xy-finance/index.ts From b010de238376bcd9b8eb6a375d2f3e2307edbc59 Mon Sep 17 00:00:00 2001 From: whichghost Date: Sat, 21 Sep 2024 22:31:01 +0800 Subject: [PATCH 1512/1590] update ptoken address --- fees/polter/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/polter/index.ts b/fees/polter/index.ts index 7e97bad2f0..22d73f7355 100644 --- a/fees/polter/index.ts +++ b/fees/polter/index.ts @@ -62,15 +62,15 @@ const tokens: any = { } }, base: { - '0x4200000000000000000000000000000000000006': { + '0xCa0d0CDAf75681be68Cb581301F282cbb82e7df1': { gecko: 'ethereum', decimals: 18 }, - '0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf': { + '0x2E8775d68dE5D7b5D296d2640469c322aDe06C18': { gecko: 'coinbase-wrapped-btc', decimals: 8 }, - '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913': { + '0x7D5c272E6ef7c21bF3D684A8F6C30eE4A8572bb3': { gecko: 'usd-coin', decimals: 6 } From c4d45856a1a0db283a6d97cdcf2d7d91b52b457f Mon Sep 17 00:00:00 2001 From: whichghost Date: Sat, 21 Sep 2024 22:58:14 +0800 Subject: [PATCH 1513/1590] add polter and replace token proxy --- fees/polter/index.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/fees/polter/index.ts b/fees/polter/index.ts index 22d73f7355..ac993537d8 100644 --- a/fees/polter/index.ts +++ b/fees/polter/index.ts @@ -62,15 +62,19 @@ const tokens: any = { } }, base: { - '0xCa0d0CDAf75681be68Cb581301F282cbb82e7df1': { + '0xa0820613976b441e2c6a90e4877e2fb5f7d72552': { + gecko: 'polter-finance', + decimals: 18 + }, + '0xca4e076c6d8a84a990986a3c405093087991a8fe': { gecko: 'ethereum', decimals: 18 }, - '0x2E8775d68dE5D7b5D296d2640469c322aDe06C18': { + '0x2a96e27e204ef366671232df28f147fa30e735ce': { gecko: 'coinbase-wrapped-btc', decimals: 8 }, - '0x7D5c272E6ef7c21bF3D684A8F6C30eE4A8572bb3': { + '0x1ddaeebbd69dccc92f5cf76593104976b9c62434': { gecko: 'usd-coin', decimals: 6 } From 35d3a7deb5e8771932132c93a9d2be3b054c6ba6 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 22 Sep 2024 14:40:29 +0000 Subject: [PATCH 1514/1590] fix start tine and catch error --- dexs/sushiswap/classic.ts | 2 +- dexs/sushiswap/trident.ts | 4 ++-- dexs/sushiswap/v3.ts | 24 +++++++++++++++++++++++- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index db8c5b7387..28cefb3d49 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -109,7 +109,7 @@ const classic = Object.keys(endpointsClassic).reduce( ...acc, [chain]: { fetch: chain == "boba" ? graphsClassicBoba(chain as Chain) : graphsClassic(chain as Chain), - start: chain == "boba" ? getStartTimestamp({ ...startTimeQueryClassic, dailyDataField: "factoryDaySnapshots", chain }) : getStartTimestamp({ ...startTimeQueryClassic, chain }), + start: 1711982400, meta: { methodology: { Fees: "SushiSwap charges a flat 0.3% fee", diff --git a/dexs/sushiswap/trident.ts b/dexs/sushiswap/trident.ts index 15aa5a6218..afe056a0b9 100644 --- a/dexs/sushiswap/trident.ts +++ b/dexs/sushiswap/trident.ts @@ -25,7 +25,7 @@ const startTimeQueryTrident = { const tridentQuery = gql` query trident($number: Int) { - factory( + factory( id: "ALL" block: { number: $number } ) { @@ -60,7 +60,7 @@ const trident = Object.keys(endpointsTrident).reduce( dailyUserFees: afterRes.factory.feesUSD - beforeRes.factory.feesUSD } }, - start: getStartTimestamp({ ...startTimeQueryTrident, chain }), + start: 1711982400, }, }), {} diff --git a/dexs/sushiswap/v3.ts b/dexs/sushiswap/v3.ts index 3d49511347..6df8c9a090 100644 --- a/dexs/sushiswap/v3.ts +++ b/dexs/sushiswap/v3.ts @@ -2,6 +2,7 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; +import { FetchOptions } from "../../adapters/types"; const endpointsV3 = { [CHAIN.ARBITRUM_NOVA]: "https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushi-v3/v3-arbitrum-nova/gn", @@ -83,7 +84,28 @@ const v3 = Object.keys(endpointsV3).reduce( (acc, chain) => ({ ...acc, [chain]: { - fetch: v3Graphs(chain as Chain), + fetch: async (options: FetchOptions) => { + try { + const res = (await v3Graphs(chain as Chain)(options)) + return { + totalVolume: res?.totalVolume || 0, + dailyVolume: res?.dailyVolume || 0, + totalFees: res?.totalFees || 0, + totalUserFees: res?.totalUserFees || 0, + dailyFees: res?.dailyFees, + dailyUserFees: res?.dailyUserFees || 0 + } + } catch { + return { + totalVolume: 0, + dailyVolume: 0, + totalFees: 0, + totalUserFees: 0, + dailyFees: 0, + dailyUserFees: 0 + } + } + }, start: startTimeV3[chain], meta: { methodology: { From 28dd9db0b1113b5f4166921eceb3ed04b6823c46 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sun, 22 Sep 2024 15:59:40 +0000 Subject: [PATCH 1515/1590] fix breakdown --- dexs/pear-protocol/index.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/dexs/pear-protocol/index.ts b/dexs/pear-protocol/index.ts index ad8530e63a..c47449ac30 100644 --- a/dexs/pear-protocol/index.ts +++ b/dexs/pear-protocol/index.ts @@ -1,5 +1,4 @@ -import { IExchangeTotalVolume } from "./../flowx-finance/index"; -import { Adapter, BreakdownAdapter, FetchOptions } from "../../adapters/types"; +import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; @@ -17,14 +16,12 @@ const fetch = async (timestamp: number) => { }; }; -const adapter: BreakdownAdapter = { - breakdown: { - derivatives: { +const adapter: SimpleAdapter = { + adapter: { [CHAIN.ARBITRUM]: { fetch: fetch, start: 1715199684, }, - }, }, }; From 59a5b79fa6550e80182289c19491411e75743b0a Mon Sep 17 00:00:00 2001 From: 0xBluePingu <0xBluePingu@gmail.com> Date: Sun, 22 Sep 2024 19:13:59 +0200 Subject: [PATCH 1516/1590] update subgraph --- dexs/pingu/index.ts | 2 +- fees/pingu/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/pingu/index.ts b/dexs/pingu/index.ts index bee60c00ba..7cf38f610f 100644 --- a/dexs/pingu/index.ts +++ b/dexs/pingu/index.ts @@ -11,7 +11,7 @@ interface IGraph { id: string; } -const URL = 'https://api.studio.thegraph.com/query/43986/pingu-sg/0.1.1'; +const URL = 'https://api.studio.thegraph.com/query/75208/pingu-sg-v2/0.0.1/'; const fetch = async (timestamp: number): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); const chain = CHAIN.ARBITRUM; diff --git a/fees/pingu/index.ts b/fees/pingu/index.ts index bff0625ee2..d5f5deafa4 100644 --- a/fees/pingu/index.ts +++ b/fees/pingu/index.ts @@ -11,7 +11,7 @@ interface IGraph { id: string; } -const URL = 'https://api.studio.thegraph.com/query/43986/pingu-sg/0.1.1'; +const URL = 'https://api.studio.thegraph.com/query/75208/pingu-sg-v2/0.0.1/'; const fetch = async (timestamp: number): Promise => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); From 02f9fc3712875fbeee4ccdee3116c41f91df0b19 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 23 Sep 2024 12:07:09 +0200 Subject: [PATCH 1517/1590] update wefi --- dexs/wefi/index.ts | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/dexs/wefi/index.ts b/dexs/wefi/index.ts index 5e9cc72f63..8315456cc4 100644 --- a/dexs/wefi/index.ts +++ b/dexs/wefi/index.ts @@ -1,5 +1,6 @@ import { FetchOptions, FetchV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import { addOneToken } from "../../helpers/prices"; const address: any = { [CHAIN.LINEA]: '0x7e0da0deccac2e7b9ad06e378ee09c15b5bdeefa', @@ -8,34 +9,14 @@ const address: any = { [CHAIN.BOBA]: '0x7E0DA0DECCAc2E7B9AD06E378ee09c15B5BDeefa' } -const stableToken: string[] = [ - "0x49d3f7543335cf38fa10889ccff10207e22110b5", // xdc:FXD - "0x1ebb2c8a71a9ec59bf558886a8adf8f4a565814f", // xdc:EURS - "0x66a2a913e447d6b4bf33efbec43aaef87890fbbc", // boba:USDC - "0x176211869ca2b568f2a7d4ee941e073a821ee1ff", // linea:USDC - "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", // polygon:USDT - "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", // polygon:USDC -] - const fetchVolume: FetchV2 = async (options: FetchOptions) => { const logs = await options.getLogs({ target: address[options.chain], - topics: ['0x83b12020cebd1d9ce669793959a6d6d48f26757609759d2bb7a45590a158c657'], + eventAbi: 'event Swap(uint8 dex, address sender, address recipient, address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut)', }) const dailyVolume = options.createBalances(); logs.forEach((log: any) => { - const data = log.data.replace('0x', '') - const amountIn = Number('0x' + data.slice(5 * 64, 6 * 64)) - const amountOut = Number('0x' + data.slice(6 * 64, 7 * 64)) - const address = data.slice(4 * 64, 5 * 64); - const tokenInAddress = data.slice(3 * 64, 4 * 64); - const tokenIn = '0x' + tokenInAddress.slice(24, address.length); - const tokenOut = '0x' + address.slice(24, address.length); - if(stableToken.includes(tokenOut)) { - dailyVolume.add(tokenOut, amountOut) - } else { - dailyVolume.add(tokenIn, amountIn) - } + addOneToken({ chain: options.chain, balances: dailyVolume, token0: log.tokenIn, token1: log.tokenOut, amount0: log.amountIn, amount1: log.amountOut }) }); return { dailyVolume: dailyVolume, From ca1165135832412cd1ac14bbe4905624cb7beddd Mon Sep 17 00:00:00 2001 From: Gor1994 Date: Mon, 23 Sep 2024 17:32:03 +0400 Subject: [PATCH 1518/1590] Add adapter for Erinaceus VRF, add Bahamut network in chains list --- fees/erinaceus/index.ts | 87 +++++++++++++++++++++++++++++++++++++++++ helpers/chains.ts | 1 + 2 files changed, 88 insertions(+) create mode 100644 fees/erinaceus/index.ts diff --git a/fees/erinaceus/index.ts b/fees/erinaceus/index.ts new file mode 100644 index 0000000000..73a2455f0f --- /dev/null +++ b/fees/erinaceus/index.ts @@ -0,0 +1,87 @@ +import { Adapter, FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getPrices } from "../../utils/prices"; +import { Chain } from "@defillama/sdk/build/general"; +import getTxReceipts from "../../helpers/getTxReceipts"; +const sdk = require('@defillama/sdk') + + +const topic0_v2 = '0x221ad2e5b871cead1dd7f75c2fb223c0cfa34bdc049a15f3f82a1f0e943e605a'; + +type TAddrress = { + [l: string | Chain]: string; +} + + +const address_v2: TAddrress = { + [CHAIN.BAHAMUT]: '0x7fDBF4fe2DBBDf956C010b3dD83177CB86Eb1b14', +} + +interface ITx { + data: string; + transactionHash: string; + topics: string[]; +} + +type IGasTokenId = { + [l: string | Chain]: string; +} +const gasTokenId: IGasTokenId = { + [CHAIN.BAHAMUT]: "coingecko:fasttoken", +} + + +const fetch = (chain: Chain) => { + return async ({ getFromBlock, getToBlock, toTimestamp }: FetchOptions) => { + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + const logs_1: ITx[] = (await sdk.getEventLogs({ + target: address_v2[chain], + fromBlock: fromBlock, + toBlock: toBlock, + topics: [topic0_v2], + chain: chain + })).map((e: any) => { return { data: e.data.replace('0x', ''), transactionHash: e.transactionHash } as ITx }); + + const amount_fullfill = logs_1.map((e: ITx) => { + const payment = Number('0x' + e.data.slice(64, 128)) / 10 ** 18 + return payment; + }).reduce((a: number, b: number) => a + b, 0); + + const tx_hash: string[] = [...new Set([...logs_1].map((e: ITx) => e.transactionHash))] + const txReceipt: number[] = (await getTxReceipts(chain, tx_hash, { cacheKey: '' })) + .map((e: any) => { + const amount = (Number(e?.gasUsed || 0) * Number(e.effectiveGasPrice || 0)) / 10 ** 18 + return amount + }) + const gasToken = gasTokenId[chain]; + const prices = (await getPrices([gasToken], toTimestamp)); + const dailyGas = txReceipt.reduce((a: number, b: number) => a + b, 0); + const gagPrice = prices[gasToken].price + const dailyGasUsd = dailyGas * gagPrice; + const totalExFees = (amount_fullfill * gagPrice); + const dailyFees = (totalExFees) + const dailyRevenue = dailyFees - dailyGasUsd; + + return { + dailyFees: dailyFees.toString(), + dailyRevenue: dailyRevenue.toString(), + } + + } +} + + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.BAHAMUT]: { + fetch: fetch(CHAIN.BAHAMUT), + start: 1716364800, + meta: { + methodology: 'All Fees generated from activity on Erinaceus VRF Coordinator contract.' + }, + } + } +} +export default adapter; + diff --git a/helpers/chains.ts b/helpers/chains.ts index 12ee4a3768..74a6cabee9 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -3,6 +3,7 @@ export enum CHAIN { ARBITRUM = "arbitrum", AVAX = "avax", BLAST = "blast", + BAHAMUT = "ftn", BOBA = "boba", BOBA_BNB = "boba_bnb", BSC = "bsc", From aa335e14af1491c65ce4e42f103309d98dd34ff1 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 23 Sep 2024 15:27:02 +0000 Subject: [PATCH 1519/1590] fix add catch --- protocols/uniswap/index.ts | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 810f010fb0..ea7765e843 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -256,7 +256,28 @@ const adapter: BreakdownAdapter = { }, v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { - fetch: v3Graphs(chain as Chain), + fetch: async (options: FetchOptions) => { + try { + const res = (await v3Graphs(chain as Chain)(options)) + return { + totalVolume: res?.totalVolume || 0, + dailyVolume: res?.dailyVolume || 0, + totalFees: res?.totalFees || 0, + totalUserFees: res?.totalUserFees || 0, + dailyFees: res?.dailyFees || 0, + dailyUserFees: res?.dailyUserFees || 0 + } + } catch { + return { + totalVolume: 0, + dailyVolume: 0, + totalFees: 0, + totalUserFees: 0, + dailyFees: 0, + dailyUserFees: 0 + } + } + }, start: startTimeV3[chain], meta: { methodology: { From 8fb57965be14e00bd66b4043227a121e58ac4e4b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 23 Sep 2024 16:01:59 +0000 Subject: [PATCH 1520/1590] remove total volume is stuck when run --- dexs/clober-v2/index.ts | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/dexs/clober-v2/index.ts b/dexs/clober-v2/index.ts index f2a6745755..63a592472e 100644 --- a/dexs/clober-v2/index.ts +++ b/dexs/clober-v2/index.ts @@ -8,12 +8,8 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => const dayTimestamp = getTimestampAtStartOfDayUTC(options.toTimestamp) const dailyVolume = options.createBalances() - const totalVolume = options.createBalances() const bookInfos: any = {} - - const fromBlock = await options.getFromBlock(); - const toBlock = await options.getToBlock(); const CONTRACT_INFO = CONTRACT_INFOS[options.chain]; const openEvents = await options.getLogs({ @@ -30,25 +26,12 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => } } - const totalTakeEvents = await options.getLogs({ - target: CONTRACT_INFO.bookManagerContract.address, - fromBlock: CONTRACT_INFO.bookManagerContract.fromBlock, - toBlock: toBlock, - eventAbi: CONTRACT_INFO.bookManagerContract.abi.takeEvent, - onlyArgs: true, - }) const dailyTakeEvents = await options.getLogs({ target: CONTRACT_INFO.bookManagerContract.address, - fromBlock: fromBlock, - toBlock: toBlock, eventAbi: CONTRACT_INFO.bookManagerContract.abi.takeEvent, onlyArgs: true, }) const takeEvents = [ - { - events: totalTakeEvents, - volume: totalVolume, - }, { events: dailyTakeEvents, volume: dailyVolume, @@ -69,7 +52,6 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => return { dailyVolume: dailyVolume, - totalVolume: totalVolume, timestamp: dayTimestamp, }; }; From 452022a52d64e6baed2e4653e116378b5d13b79f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 23 Sep 2024 16:22:50 +0000 Subject: [PATCH 1521/1590] fix dodo --- aggregators/dodo-agg/index.ts | 47 +++++++++++++++++++++++++++++++++++ dexs/dodo/index.ts | 18 +++++++------- 2 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 aggregators/dodo-agg/index.ts diff --git a/aggregators/dodo-agg/index.ts b/aggregators/dodo-agg/index.ts new file mode 100644 index 0000000000..88c2e8d7e0 --- /dev/null +++ b/aggregators/dodo-agg/index.ts @@ -0,0 +1,47 @@ +import { ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; + +// https://api.dodoex.io/dodo-contract/list +const config: any = { + ethereum: { DODOFeeRouteProxys: ['0x21b9F852534Fb9DdC3A0A7B24f067B50d8AC9a99', '0x50f9bDe1c76bba997a5d6e7FEFff695ec8536194']}, + optimism: { DODOFeeRouteProxys: ['0x716fcc67dcA500A91B4a28c9255262c398D8f971', '0xc7d7CC1e9f5E823887980c9C51F9c418ee3A3e28']}, + bsc: { DODOFeeRouteProxys: ['0xa8b034301Bb5DD3610db585Def3e7C0d52f2319F', '0x0656fD85364d03b103CEEda192FB2D3906A6ac15']}, + polygon: { DODOFeeRouteProxys: ['0x39E3e49C99834C9573c9FC7Ff5A4B226cD7B0E63', '0xA103206E7f19d1C1c0e31eFC4DFc7b299630F100']}, + boba: { DODOFeeRouteProxys: ['0x64842A3EbC09bB69429c1a34ae181375fea5f17F', '0xfcA520C94078b65F8237d4F566c438a9468917A1']}, + conflux: { DODOFeeRouteProxys: ['0x3037e79FCe8817A6F21196d8D93C80F53ABB9267', '0x5a71a8524477Acd1807CFefD114Bf8904CD8dF96']}, + moonriver: { DODOFeeRouteProxys: ['0x003B18357460e789e711849749A793c430d14f97', '0x2144BF2003bFd9Aa0950716333fBb5B7A1Caeda4']}, + mantle: { DODOFeeRouteProxys: ['0xB4E598688eC724DD00a8944E7c7b259BbB992c61', '0x70B9C57E1fF24761C1C3ced57Ddae9A3F3570698']}, + base: { DODOFeeRouteProxys: ['0x987bFBE33c9cF18cAA665B792Db66339a9c16D32', '0xA376762070F7fCE8f3646AAe90e6e375e6daF128']}, + avax: { DODOFeeRouteProxys: ['0xbce44767af0a53A108b3B7ba4F740E03D228Ec0A', '0x1F076a800005c758a505E759720eb6737136e893']}, + arbitrum: { DODOFeeRouteProxys: ['0xe05dd51e4eB5636f4f0E8e7Fbe82eA31a2ecef16', '0xc4A1a152812dE96b2B1861E433f42290CDD7f113']}, + linea: { DODOFeeRouteProxys: ['0x70B9C57E1fF24761C1C3ced57Ddae9A3F3570698', '0x03e89fC55A5ad0531576E5a502c4CA52c8bf391B']}, + scroll: { DODOFeeRouteProxys: ['0xf0512872fEc0173d1d99c2dd8CDCb770054b675b', '0x4e998615aD430C1cA46A69d813edE6EB3EC55eDb']}, +} + +const abis = { + "OrderHistory": "event OrderHistory (address fromToken, address toToken, address sender, uint256 fromAmount, uint256 returnAmount)", +} + +const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain }: FetchOptions) => { + const dailyVolume = createBalances() + try { + const logs = await getLogs({ targets: config[chain].DODOFeeRouteProxys, eventAbi: abis.OrderHistory, }) + logs.forEach((log: any) => { + dailyVolume.add(log.toToken, log.returnAmount) + }) + return { timestamp, dailyVolume } + } catch (e) { + return { timestamp, dailyVolume } + } +}; + +const adapter_agg = { + adapter: {}, +}; + +Object.keys(config).forEach((chain) => adapter_agg.adapter[chain] = { fetch, start: 1690848000, }); + +const adapter: SimpleAdapter = { + adapter: adapter_agg.adapter, +} + +export default adapter diff --git a/dexs/dodo/index.ts b/dexs/dodo/index.ts index 31c9158844..3f8042b37e 100644 --- a/dexs/dodo/index.ts +++ b/dexs/dodo/index.ts @@ -1,5 +1,5 @@ import * as sdk from "@defillama/sdk"; -import { BreakdownAdapter, ChainBlocks, Fetch, FetchOptions, IStartTimestamp } from "../../adapters/types"; +import { BreakdownAdapter, ChainBlocks, Fetch, FetchOptions, IStartTimestamp, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { postURL } from "../../utils/fetchURL"; @@ -137,15 +137,15 @@ const adapter_agg: any = { Object.keys(config).forEach((chain) => adapter_agg.adapter[chain] = { fetch, start: 1690848000, }); -const adapter: any = { +const adapter: SimpleAdapter = { adapter: volume }; -const adapterBreakdown: BreakdownAdapter = { - breakdown: { - "dodo": adapter.adapter, - "dodo-agg": adapter_agg["adapter"], - } -} +// const adapterBreakdown: BreakdownAdapter = { +// breakdown: { +// "dodo": adapter.adapter, +// "dodo-agg": adapter_agg["adapter"], +// } +// } -export default adapterBreakdown +export default adapter From c4280ee9a041b875b174228404ce0ae280fbff5f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 23 Sep 2024 16:52:01 +0000 Subject: [PATCH 1522/1590] fix remove not use --- dexs/dodo/index.ts | 54 +++------------------------------------------- 1 file changed, 3 insertions(+), 51 deletions(-) diff --git a/dexs/dodo/index.ts b/dexs/dodo/index.ts index 3f8042b37e..c43ef6d1c8 100644 --- a/dexs/dodo/index.ts +++ b/dexs/dodo/index.ts @@ -1,5 +1,4 @@ -import * as sdk from "@defillama/sdk"; -import { BreakdownAdapter, ChainBlocks, Fetch, FetchOptions, IStartTimestamp, SimpleAdapter } from "../../adapters/types"; +import { Fetch, FetchOptions, IStartTimestamp, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { postURL } from "../../utils/fetchURL"; @@ -53,8 +52,8 @@ interface ITotalResponse { } } -const getFetch = (chain: string): Fetch => async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) +const getFetch = (chain: string): Fetch => async (_ts: number, _t: any, options: FetchOptions) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.startOfDay * 1000)) const dailyResponse = (await postURL(dailyEndpoint, dailyVolumePayload(chain))) as IDailyResponse // const totalResponse = (await postURL(totalEndpoint, totalVolumePayload(chain))) as ITotalResponse @@ -96,56 +95,9 @@ const volume = chains.reduce( ); -// https://api.dodoex.io/dodo-contract/list -const config: any = { - ethereum: { DODOFeeRouteProxys: ['0x21b9F852534Fb9DdC3A0A7B24f067B50d8AC9a99', '0x50f9bDe1c76bba997a5d6e7FEFff695ec8536194']}, - optimism: { DODOFeeRouteProxys: ['0x716fcc67dcA500A91B4a28c9255262c398D8f971', '0xc7d7CC1e9f5E823887980c9C51F9c418ee3A3e28']}, - bsc: { DODOFeeRouteProxys: ['0xa8b034301Bb5DD3610db585Def3e7C0d52f2319F', '0x0656fD85364d03b103CEEda192FB2D3906A6ac15']}, - polygon: { DODOFeeRouteProxys: ['0x39E3e49C99834C9573c9FC7Ff5A4B226cD7B0E63', '0xA103206E7f19d1C1c0e31eFC4DFc7b299630F100']}, - boba: { DODOFeeRouteProxys: ['0x64842A3EbC09bB69429c1a34ae181375fea5f17F', '0xfcA520C94078b65F8237d4F566c438a9468917A1']}, - conflux: { DODOFeeRouteProxys: ['0x3037e79FCe8817A6F21196d8D93C80F53ABB9267', '0x5a71a8524477Acd1807CFefD114Bf8904CD8dF96']}, - moonriver: { DODOFeeRouteProxys: ['0x003B18357460e789e711849749A793c430d14f97', '0x2144BF2003bFd9Aa0950716333fBb5B7A1Caeda4']}, - mantle: { DODOFeeRouteProxys: ['0xB4E598688eC724DD00a8944E7c7b259BbB992c61', '0x70B9C57E1fF24761C1C3ced57Ddae9A3F3570698']}, - base: { DODOFeeRouteProxys: ['0x987bFBE33c9cF18cAA665B792Db66339a9c16D32', '0xA376762070F7fCE8f3646AAe90e6e375e6daF128']}, - avax: { DODOFeeRouteProxys: ['0xbce44767af0a53A108b3B7ba4F740E03D228Ec0A', '0x1F076a800005c758a505E759720eb6737136e893']}, - arbitrum: { DODOFeeRouteProxys: ['0xe05dd51e4eB5636f4f0E8e7Fbe82eA31a2ecef16', '0xc4A1a152812dE96b2B1861E433f42290CDD7f113']}, - linea: { DODOFeeRouteProxys: ['0x70B9C57E1fF24761C1C3ced57Ddae9A3F3570698', '0x03e89fC55A5ad0531576E5a502c4CA52c8bf391B']}, - scroll: { DODOFeeRouteProxys: ['0xf0512872fEc0173d1d99c2dd8CDCb770054b675b', '0x4e998615aD430C1cA46A69d813edE6EB3EC55eDb']}, -} - -const abis = { - "OrderHistory": "event OrderHistory (address fromToken, address toToken, address sender, uint256 fromAmount, uint256 returnAmount)", -} - -const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain }: FetchOptions) => { - const dailyVolume = createBalances() - try { - const logs = await getLogs({ targets: config[chain].DODOFeeRouteProxys, eventAbi: abis.OrderHistory, }) - logs.forEach((log: any) => { - dailyVolume.add(log.toToken, log.returnAmount) - }) - return { timestamp, dailyVolume } - } catch (e) { - return { timestamp, dailyVolume } - } -}; - -const adapter_agg: any = { - adapter: {}, -}; - -Object.keys(config).forEach((chain) => adapter_agg.adapter[chain] = { fetch, start: 1690848000, }); - - const adapter: SimpleAdapter = { adapter: volume }; -// const adapterBreakdown: BreakdownAdapter = { -// breakdown: { -// "dodo": adapter.adapter, -// "dodo-agg": adapter_agg["adapter"], -// } -// } export default adapter From eef8b59100db9e3f2ed38d77c2a74b17c43ef03a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 24 Sep 2024 17:04:15 +0000 Subject: [PATCH 1523/1590] fix error --- dexs/sushiswap/classic.ts | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index 28cefb3d49..fdee10fb47 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -108,7 +108,31 @@ const classic = Object.keys(endpointsClassic).reduce( (acc, chain) => ({ ...acc, [chain]: { - fetch: chain == "boba" ? graphsClassicBoba(chain as Chain) : graphsClassic(chain as Chain), + fetch: async (options: FetchOptions) => { + try { + const call = chain === CHAIN.BOBA ? graphsClassicBoba : graphsClassic; + const values = (await call(chain)(options)); + return { + dailyVolume: values?.dailyVolume || 0, + dailyFees: values?.dailyFees || 0, + dailyUserFees: values?.dailyUserFees || 0, + dailyProtocolRevenue: values?.dailyProtocolRevenue || 0, + dailySupplySideRevenue: values?.dailySupplySideRevenue || 0, + dailyHoldersRevenue: values?.dailyHoldersRevenue || 0, + dailyRevenue: values?.dailyRevenue || 0, + } + } catch { + return { + dailyVolume: 0, + dailyFees: 0, + dailyUserFees: 0, + dailyProtocolRevenue: 0, + dailySupplySideRevenue: 0, + dailyHoldersRevenue: 0, + dailyRevenue: 0, + } + } + }, start: 1711982400, meta: { methodology: { From ec42eac87c1b0d299e214631b08e19a57e389f56 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 24 Sep 2024 17:23:19 +0000 Subject: [PATCH 1524/1590] fix get date --- dexs/ref-finance/index.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dexs/ref-finance/index.ts b/dexs/ref-finance/index.ts index cc258c57fe..1ec6f27ffe 100644 --- a/dexs/ref-finance/index.ts +++ b/dexs/ref-finance/index.ts @@ -1,4 +1,4 @@ -import type { SimpleAdapter } from "../../adapters/types"; +import type { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpGet } from "../../utils/fetchURL"; @@ -13,16 +13,16 @@ const adapter: SimpleAdapter = { const data = await httpGet(api) return dateToTs(data[0].date) }, - fetch: async(ts)=>{ + fetch: async(ts, _t: any, options: FetchOptions)=>{ const data = await httpGet(api) - const cleanTimestamp = getUniqStartOfTodayTimestamp(new Date(ts * 1000)) - const dailyVolume = data.find((t:any)=>dateToTs(t.date) === cleanTimestamp)?.volume + const dateStr = new Date(options.startOfDay * 1000).toISOString().split('T')[0] + const dailyVolume = data.find((t:any)=> t.date.split('T')[0] === dateStr)?.volume if (!dailyVolume || Number(dailyVolume) < 0 || Number((dailyVolume)) > 1_000_000_000) { throw new Error(`Invalid daily volume: ${dailyVolume}`) } return { - timestamp: cleanTimestamp, - dailyVolume: data.find((t:any)=>dateToTs(t.date) === cleanTimestamp)?.volume + timestamp: options.startOfDay , + dailyVolume: dailyVolume } } } From e8b0a7ad4021bfdddcb4eeb2f5e1a03f4f163cc1 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 25 Sep 2024 00:18:58 +0200 Subject: [PATCH 1525/1590] update mux --- dexs/mux-protocol/index.ts | 46 ++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/dexs/mux-protocol/index.ts b/dexs/mux-protocol/index.ts index 600409987b..a02b364ad5 100644 --- a/dexs/mux-protocol/index.ts +++ b/dexs/mux-protocol/index.ts @@ -1,11 +1,11 @@ import type { BreakdownAdapter, ChainBlocks, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { adapteragges } from "./agge"; +import { adapteragges } from "./agge"; type TChainAddress = { [chain: string]: string; } -const contract_address: TChainAddress = { +const contract_address: TChainAddress = { [CHAIN.ARBITRUM]: "0x3e0199792ce69dc29a0a36146bfa68bd7c8d6633", [CHAIN.BSC]: "0x855e99f768fad76dd0d3eb7c446c0b759c96d520", [CHAIN.AVAX]: "0x0ba2e492e8427fad51692ee8958ebf936bee1d84", @@ -13,45 +13,37 @@ const contract_address: TChainAddress = { [CHAIN.FANTOM]: "0x2e81f443a11a943196c88afcb5a0d807721a88e6", } -const fetchVolume = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions) => { +const fetchVolume = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, }: FetchOptions) => { const dailyVolume = createBalances(); - const logs_openposition = await getLogs({ - target: contract_address[chain], - topics: ["0xdb27855d3e94a6c985e1e59c77870a73484ef3c40d29fbfe14bb3e686da86efb"], - }); - const logs_closeposition = await getLogs({ - target: contract_address[chain], - topics: ["0x645156066afee3ede009256908a9e96538cc1ad681c46b10114f6ce98ebd0600"] - }); - const logs_liqposition = await getLogs({ - target: contract_address[chain], - topics: ["0xd63e21d9ddaf46f8d28d121f06e7ed33fcc0300af1f8c794e69056dbf37e2d6a"] - }); - const hash: string[] = []; + const logs_openposition = await getLogs({ target: contract_address[chain], topics: ["0xdb27855d3e94a6c985e1e59c77870a73484ef3c40d29fbfe14bb3e686da86efb"], }); + const logs_closeposition = await getLogs({ target: contract_address[chain], topics: ["0x645156066afee3ede009256908a9e96538cc1ad681c46b10114f6ce98ebd0600"] }); + const logs_liqposition = await getLogs({ target: contract_address[chain], topics: ["0xd63e21d9ddaf46f8d28d121f06e7ed33fcc0300af1f8c794e69056dbf37e2d6a"] }); + const hash = new Set() logs_openposition.forEach((log) => { - if (hash.includes(log.transactionHash)) return; + if (hash.has(log.transactionHash)) return; const data = log.data.replace('0x', ''); - const amount = Number('0x'+data.slice(3 * 64, 4 * 64)) / 1e18; - const assetPrice = Number('0x'+data.slice(4 * 64, 5 * 64)) / 1e18; + const amount = Number('0x' + data.slice(3 * 64, 4 * 64)) / 1e18; + const assetPrice = Number('0x' + data.slice(4 * 64, 5 * 64)) / 1e18; dailyVolume.addCGToken('tether', amount * assetPrice); - hash.push(log.transactionHash); + hash.add(log.transactionHash); }); logs_closeposition.forEach((log) => { - if (hash.includes(log.transactionHash)) return; + if (hash.has(log.transactionHash)) return; const data = log.data.replace('0x', ''); - const amount = Number('0x'+data.slice(4 * 64, 5 * 64)) / 1e18; - const assetPrice = Number('0x'+data.slice(5 * 64, 6 * 64)) / 1e18; + const amount = Number('0x' + data.slice(4 * 64, 5 * 64)) / 1e18; + const assetPrice = Number('0x' + data.slice(5 * 64, 6 * 64)) / 1e18; dailyVolume.addCGToken('tether', amount * assetPrice); - hash.push(log.transactionHash); + hash.add(log.transactionHash); }); logs_liqposition.forEach((log) => { - if (hash.includes(log.transactionHash)) return; + if (hash.has(log.transactionHash)) return; const data = log.data.replace('0x', ''); - const amount = Number('0x'+data.slice(4 * 64, 5 * 64)) / 1e18; - const assetPrice = Number('0x'+data.slice(5 * 64, 6 * 64)) / 1e18; + const amount = Number('0x' + data.slice(4 * 64, 5 * 64)) / 1e18; + const assetPrice = Number('0x' + data.slice(5 * 64, 6 * 64)) / 1e18; dailyVolume.addCGToken('tether', amount * assetPrice); }); + return { dailyVolume, timestamp, From fad0614a70cf8ee26b3e350c74ab92f32f70ad30 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 25 Sep 2024 02:48:17 +0200 Subject: [PATCH 1526/1590] update package version --- package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c1ca15f386..d5aba8bcc9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -949,9 +949,10 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.80", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.80.tgz", - "integrity": "sha512-XG1tm90rWmTnv55Du6cUHvSI3XVCSbVVjAHcDh9f2hOHuoKezx1zTjBrDUirYQ4yCCe2zl2g4QmUgD6JR96ibA==", + "version": "5.0.89", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.89.tgz", + "integrity": "sha512-Op8+Fcn0PBXwxA2l1XOTj2m+FhdhIzFH79OJY9p12oO6srOnC6XtfIZMhUXvbh4gI2/SWSihg+t78fkAK8JBxw==", + "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From cd534d83db18703e2387aceb760a9d9861e67295 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:19:38 +0200 Subject: [PATCH 1527/1590] refactor maverick code --- adapters/utils/runAdapter.ts | 2 +- cli/testAdapter.ts | 2 +- dexs/maverick/maverick-v1.ts | 57 +++++++++++++++--------------------- 3 files changed, 26 insertions(+), 35 deletions(-) diff --git a/adapters/utils/runAdapter.ts b/adapters/utils/runAdapter.ts index ea3dd2863b..df4a2bc0d0 100644 --- a/adapters/utils/runAdapter.ts +++ b/adapters/utils/runAdapter.ts @@ -91,7 +91,7 @@ export default async function runAdapter(volumeAdapter: BaseAdapter, cleanCurren } async function getOptionsObject(timestamp: number, chain: string, chainBlocks: ChainBlocks): Promise { - const withinTwoHours = Math.trunc(Date.now() / 1000) - timestamp < 2 * 60 * 60 // 2 hours + const withinTwoHours = Math.trunc(Date.now() / 1000) - timestamp < 24 * 60 * 60 // 24 hours const createBalances: () => Balances = () => { return new Balances({ timestamp: closeToCurrentTime ? undefined : timestamp, chain }) } diff --git a/cli/testAdapter.ts b/cli/testAdapter.ts index dfb50e5fa3..083e5f5b69 100644 --- a/cli/testAdapter.ts +++ b/cli/testAdapter.ts @@ -29,7 +29,7 @@ process.on('uncaughtException', handleError) checkArguments(process.argv) function getTimestamp30MinutesAgo() { - return Math.trunc(Date.now() / 1000) - 60 * 30 + return Math.trunc(Date.now() / 1000) - 60 * 60 * 2.5 } // Get path of module import diff --git a/dexs/maverick/maverick-v1.ts b/dexs/maverick/maverick-v1.ts index 32eeff98ef..ac83bc312e 100644 --- a/dexs/maverick/maverick-v1.ts +++ b/dexs/maverick/maverick-v1.ts @@ -1,5 +1,6 @@ import { CHAIN } from "../../helpers/chains"; -import { ChainBlocks, FetchOptions } from "../../adapters/types"; +import { FetchOptions } from "../../adapters/types"; +import { filterPools2 } from "../../helpers/uniswap"; export const maverickV1Factories: { [key: string]: any } = { [CHAIN.ETHEREUM]: { @@ -35,47 +36,39 @@ const getData = async (options: any, dataType: "volume" | "fee") => { const factoryFromBlock = maverickV1Factories[options.chain].startBlock; let pools: string[]; - const logs = await options.getLogs({ - target: factory, - fromBlock: factoryFromBlock, - eventAbi: mavV2PoolCreated, - }); + const logs = await options.getLogs({ target: factory, fromBlock: factoryFromBlock, eventAbi: mavV2PoolCreated, }); - pools = logs.map((log: any) => log.poolAddress); - const tokenAs = await options.api.multiCall({ - abi: "address:tokenA", - calls: pools!, - }); - const tokenBs = await options.api.multiCall({ - abi: "address:tokenB", - calls: pools!, - }); + pools = logs.map((log: any) => log.poolAddress.toLowerCase()); + const tokenAs = await options.api.multiCall({ abi: "address:tokenA", calls: pools!, }); + const tokenBs = await options.api.multiCall({ abi: "address:tokenB", calls: pools!, }); + let fees = await options.api.multiCall({ abi: "function fee() view returns (uint256)", calls: pools!, }); + const poolInfos = { } as any + pools.forEach((pool, idx) => { + poolInfos[pool] = { + tokenA: tokenAs[idx], + tokenB: tokenBs[idx], + fee: fees[idx] / 1e18, + } + }) - const swapLogs = await options.getLogs({ - targets: pools, - eventAbi: mavV2SwapEvent, - flatten: false, - }); + const filteredPoolsRes = await filterPools2({ fetchOptions: options, pairs: pools, token0s: tokenAs, token1s: tokenBs }) + pools = filteredPoolsRes.pairs - let fees = [] as any; - if (dataType == "fee") { - fees = await options.api.multiCall({ - abi: "function fee() view returns (uint256)", - calls: pools!, - }); + const swapLogs = [] as any + for (const pool of pools) { + const logs = await options.getLogs({ target: pool, eventAbi: mavV2SwapEvent, }); + swapLogs.push(logs) } - + swapLogs.forEach((log: any[], index: number) => { - const tokenA = tokenAs[index]; - const tokenB = tokenBs[index]; + const { tokenA, tokenB, fee } = poolInfos[pools[index]] if (!log.length) return; log.forEach((i: any) => { let amount = Number(i.amountIn); let tokenAIn = Boolean(i.tokenAIn); if (dataType == "fee") { - let fee = fees[index]; - options.api.add(tokenAIn ? tokenA : tokenB, (amount * fee) / 1e18); + options.api.add(tokenAIn ? tokenA : tokenB, amount * fee); } else { options.api.add(tokenAIn ? tokenA : tokenB, amount); } @@ -85,13 +78,11 @@ const getData = async (options: any, dataType: "volume" | "fee") => { let amount = await options.api.getBalancesV2(); if (dataType == "fee") { return { - timestamp: options.startOfDay, dailyFees: amount, dailyUserFees: amount, }; } else { return { - timestamp: options.startOfDay, dailyVolume: amount, }; } From 2be23e5815ff39c291855f053908df8d2009f5c2 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:20:13 +0200 Subject: [PATCH 1528/1590] cache block calls --- helpers/getBlock.ts | 125 +++++++++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 54 deletions(-) diff --git a/helpers/getBlock.ts b/helpers/getBlock.ts index 045df6420b..5461926dff 100644 --- a/helpers/getBlock.ts +++ b/helpers/getBlock.ts @@ -52,75 +52,92 @@ const blacklistedChains: string[] = [ "dymension" ]; +const cache = { + +} as any + async function getBlock(timestamp: number, chain: Chain, chainBlocks = {} as ChainBlocks) { - if (chain === CHAIN.DOGECHAIN) throw new Error("DOGECHAIN not supported") - if (blacklistedChains.includes(chain)) { - return null - } - if (chainBlocks[chain] !== undefined) - return chainBlocks[chain] + try { + if (!cache[chain]) cache[chain] = {} + if (!cache[chain][timestamp]) cache[chain][timestamp] = _getBlock(timestamp, chain, {}) + const block = await cache[chain][timestamp] + if (block) chainBlocks[chain] = block + return block + } catch (e) { + console.error('error fetching block' + chain + ' ' + (e as any)?.message) + return null + } +} +async function _getBlock(timestamp: number, chain: Chain, chainBlocks = {} as ChainBlocks) { + if (chain === CHAIN.DOGECHAIN) throw new Error("DOGECHAIN not supported") + if (blacklistedChains.includes(chain)) { + return null + } + if (chainBlocks[chain] !== undefined) + return chainBlocks[chain] - let block: number | undefined - try { - if (chain === CHAIN.WAVES) - timestamp = Math.floor(timestamp * 1000) - block = await sdk.blocks.getBlockNumber(chain, timestamp) - } catch (e) { - console.log('error fetching block', e) - if (chain === CHAIN.SEI) { - return null - } - } - if (block) { - chainBlocks[chain] = block - return block + let block: number | undefined + try { + if (chain === CHAIN.WAVES) + timestamp = Math.floor(timestamp * 1000) + block = await sdk.blocks.getBlockNumber(chain, timestamp) + } catch (e) { + if (chain === CHAIN.SEI) { + return null } + console.log('error fetching block', e) + } - if (chain === CHAIN.CELO) - block = Number((await retry(async () => (await httpGet("https://explorer.celo.org/api?module=block&action=getblocknobytime×tamp=" + timestamp + "&closest=before").catch((e) => { - throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.result?.blockNumber, { retries: 3 }))); - else if (chain === CHAIN.ONUS) - block = Number((await retry(async () => (await httpGet(`https://explorer.onuschain.io/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { - throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.result?.blockNumber, { retries: 3 }))); - else if (chain as CHAIN === CHAIN.POLYGON_ZKEVM || chain === CHAIN.VISION || chain as CHAIN === CHAIN.ERA) - return sdk.api.util.lookupBlock(timestamp, { chain }).then((blockData: any) => blockData.block) // TODO after get block support chain polygon_zkevm then swith to use api https://coins.llama.fi/block - else if (chain as CHAIN === CHAIN.WAVES) - block = Number((await retry(async () => (await httpGet(`https://nodes.wavesnodes.com/blocks/heightByTimestamp/${(timestamp * 1000)}`).catch((e) => { - throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.height, { retries: 3 }))); - else if (chain === CHAIN.BASE) - block = Number((await retry(async () => (await httpGet(`https://base.blockscout.com/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { - throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.result?.blockNumber, { retries: 3 }))); - else if (chain === CHAIN.SCROLL) - block = Number((await retry(async () => (await httpGet(`https://blockscout.scroll.io/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { - throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.result?.blockNumber, { retries: 3 }))); - else - block = Number((await retry(async () => (await httpGet(`https://coins.llama.fi/block/${chain}/${timestamp}`, { timeout: 10000 }).catch((e) => { - throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) - }))?.height, { retries: 1 }))); - if (block) chainBlocks[chain] = block + if (block) { + chainBlocks[chain] = block return block - // https://base.blockscout.com - // https://explorer.kava.io - //return sdk.api.util.lookupBlock(timestamp, { chain }).then(blockData => blockData.block) + } + + if (chain === CHAIN.CELO) + block = Number((await retry(async () => (await httpGet("https://explorer.celo.org/api?module=block&action=getblocknobytime×tamp=" + timestamp + "&closest=before").catch((e) => { + throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) + }))?.result?.blockNumber, { retries: 3 }))); + else if (chain === CHAIN.ONUS) + block = Number((await retry(async () => (await httpGet(`https://explorer.onuschain.io/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { + throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) + }))?.result?.blockNumber, { retries: 3 }))); + else if (chain as CHAIN === CHAIN.POLYGON_ZKEVM || chain === CHAIN.VISION || chain as CHAIN === CHAIN.ERA) + return sdk.api.util.lookupBlock(timestamp, { chain }).then((blockData: any) => blockData.block) // TODO after get block support chain polygon_zkevm then swith to use api https://coins.llama.fi/block + else if (chain as CHAIN === CHAIN.WAVES) + block = Number((await retry(async () => (await httpGet(`https://nodes.wavesnodes.com/blocks/heightByTimestamp/${(timestamp * 1000)}`).catch((e) => { + throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) + }))?.height, { retries: 3 }))); + else if (chain === CHAIN.BASE) + block = Number((await retry(async () => (await httpGet(`https://base.blockscout.com/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { + throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) + }))?.result?.blockNumber, { retries: 3 }))); + else if (chain === CHAIN.SCROLL) + block = Number((await retry(async () => (await httpGet(`https://blockscout.scroll.io/api?module=block&action=getblocknobytime×tamp=${timestamp}&closest=before`).catch((e) => { + throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) + }))?.result?.blockNumber, { retries: 3 }))); + else + block = Number((await retry(async () => (await httpGet(`https://coins.llama.fi/block/${chain}/${timestamp}`, { timeout: 10000 }).catch((e) => { + throw new Error(`Error getting block: ${chain} ${timestamp} ${e.message}`) + }))?.height, { retries: 1 }))); + if (block) chainBlocks[chain] = block + return block + // https://base.blockscout.com + // https://explorer.kava.io + //return sdk.api.util.lookupBlock(timestamp, { chain }).then(blockData => blockData.block) } async function getBlocks(chain: Chain, timestamps: number[]) { - return Promise.all(timestamps.map(t => getBlock(t, chain, {}))) + return Promise.all(timestamps.map(t => getBlock(t, chain, {}))) } const canGetBlock = (chain: string) => Object.keys(providers).includes(chain) export { - getBlock, - canGetBlock, - getBlocks + getBlock, + canGetBlock, + getBlocks } From d8b617a473a71beb345c5c8c542cd2be89fe2304 Mon Sep 17 00:00:00 2001 From: rajeebkm Date: Wed, 25 Sep 2024 14:03:42 +0530 Subject: [PATCH 1529/1590] Add: Filament fees adapter --- fees/filament/index.tsx | 114 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 fees/filament/index.tsx diff --git a/fees/filament/index.tsx b/fees/filament/index.tsx new file mode 100644 index 0000000000..4e9279b4fe --- /dev/null +++ b/fees/filament/index.tsx @@ -0,0 +1,114 @@ +import BigNumber from "bignumber.js"; +import request, { gql } from "graphql-request"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const endpoint = + "https://api.goldsky.com/api/public/project_cm0qvthsz96sp01utcnk55ib0/subgraphs/filament-sei/v1/gn"; + +const queryDaily = gql` + query stats($from: String!, $to: String!) { + totalTradingFees( + where: { + timestamp_gte: $from + timestamp_lte: $to + } + ) { + timestamp_ + block_number + account + totalFees + } + } +`; +const queryTotal = gql` + query stats($from: String!, $to: String!) { + totalTradingFees( + where: { + timestamp_gte: $from + timestamp_lte: $to + # orderBy: block_number + # orderDirection: asc + # first: 500 + # skip: 1000 + } + ) { + timestamp_ + block_number + account + totalFees + } + } +`; + +interface IGraphResponse { + totalTradingFees: Array<{ + tiemstamp: string; + blocknumber: string; + account: string; + totalFees: string; + }>; +} + +const methodology = { + totalFees: "Tracks the cumulative fees (borrowing fees + trading fees) generated by all transactions.", + dailyFees: "Tracks the fees (borrowing fees + trading fees) generated by transactions on a daily basis.", +}; + +const toString = (x: BigNumber) => { + if (x.isEqualTo(0)) return undefined; + return x.toString(); +}; + +const fetchProtocolFees = async ({ + endTimestamp, + startTimestamp, +}: FetchOptions) => { + const responseDaily: IGraphResponse = await request(endpoint, queryDaily, { + from: String(startTimestamp), + to: String(endTimestamp), + }); + + // Merging both responses + let dailyFees = new BigNumber(0); + responseDaily.totalTradingFees.forEach((data) => { + totalFees = totalFees.plus(new BigNumber(data.totalFees)); + }); + + // Total + const responseTotal: IGraphResponse = await request(endpoint, queryTotal, { + from: String(startTimestamp), + to: String(endTimestamp), + }); + + // Merging both responses + let totalFees = new BigNumber(0); + responseTotal.totalTradingFees.forEach((data) => { + totalFees = totalFees.plus(new BigNumber(data.totalFees)); + }); + + dailyFees = dailyFees.dividedBy(new BigNumber(1e18)); + totalFees = totalFees.dividedBy(new BigNumber(1e18)); + + const _dailyFees = toString(dailyFees); + const _totalFees = toString(totalFees); + + return { + dailyFees: _dailyFees ?? "0", + totalFees: _totalFees ?? "0", + }; +}; + +const adapter: SimpleAdapter = { + // version: 2, + adapter: { + [CHAIN.SEI]: { + fetch: fetchProtocolFees, + start: 100601154, + meta: { + methodology, + }, + }, + }, +}; +export default adapter; From 6653176ae952a57fe24461404faf979709bb1e37 Mon Sep 17 00:00:00 2001 From: rajeebkm Date: Wed, 25 Sep 2024 14:11:49 +0530 Subject: [PATCH 1530/1590] timestamp updated --- fees/filament/index.tsx | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/fees/filament/index.tsx b/fees/filament/index.tsx index 4e9279b4fe..68616e5fe3 100644 --- a/fees/filament/index.tsx +++ b/fees/filament/index.tsx @@ -27,10 +27,6 @@ const queryTotal = gql` where: { timestamp_gte: $from timestamp_lte: $to - # orderBy: block_number - # orderDirection: asc - # first: 500 - # skip: 1000 } ) { timestamp_ @@ -43,7 +39,7 @@ const queryTotal = gql` interface IGraphResponse { totalTradingFees: Array<{ - tiemstamp: string; + timestamp: string; blocknumber: string; account: string; totalFees: string; @@ -64,24 +60,28 @@ const fetchProtocolFees = async ({ endTimestamp, startTimestamp, }: FetchOptions) => { + // Ensure startTimestamp and endTimestamp are defined + if (!startTimestamp || !endTimestamp) { + throw new Error("startTimestamp and endTimestamp must be provided"); + } + + // Fetch daily fees const responseDaily: IGraphResponse = await request(endpoint, queryDaily, { from: String(startTimestamp), to: String(endTimestamp), }); - // Merging both responses let dailyFees = new BigNumber(0); responseDaily.totalTradingFees.forEach((data) => { - totalFees = totalFees.plus(new BigNumber(data.totalFees)); + dailyFees = dailyFees.plus(new BigNumber(data.totalFees)); }); - // Total + // Fetch total fees const responseTotal: IGraphResponse = await request(endpoint, queryTotal, { from: String(startTimestamp), to: String(endTimestamp), }); - // Merging both responses let totalFees = new BigNumber(0); responseTotal.totalTradingFees.forEach((data) => { totalFees = totalFees.plus(new BigNumber(data.totalFees)); @@ -100,11 +100,10 @@ const fetchProtocolFees = async ({ }; const adapter: SimpleAdapter = { - // version: 2, adapter: { [CHAIN.SEI]: { fetch: fetchProtocolFees, - start: 100601154, + start: 1725741586, meta: { methodology, }, From 2bc18b5147ed5d8a4ee28866dc859ea118deee0b Mon Sep 17 00:00:00 2001 From: rajeebkm Date: Wed, 25 Sep 2024 14:16:51 +0530 Subject: [PATCH 1531/1590] timestamp debugged --- dexs/filament/fetch.ts | 61 +++++++++++++++++++++++++++++++++++++++++ dexs/filament/index.ts | 30 ++++++++++++++++++++ fees/filament/index.tsx | 2 ++ 3 files changed, 93 insertions(+) create mode 100644 dexs/filament/fetch.ts create mode 100644 dexs/filament/index.ts diff --git a/dexs/filament/fetch.ts b/dexs/filament/fetch.ts new file mode 100644 index 0000000000..c78331346e --- /dev/null +++ b/dexs/filament/fetch.ts @@ -0,0 +1,61 @@ +import { getEnv } from "../../helpers/env"; +import { httpGet } from "../../utils/fetchURL"; + +const INDEXER_URL = "https://indexer-mainnet.levana.finance"; +const QUERIER_URL = "https://querier-mainnet.levana.finance"; + +type Chain = "osmosis" | "injective" | "sei" | "neutron" + +const factoryAddr:Record = { + osmosis: "osmo1ssw6x553kzqher0earlkwlxasfm2stnl3ms3ma2zz4tnajxyyaaqlucd45", + sei: "sei18rdj3asllguwr6lnyu2sw8p8nut0shuj3sme27ndvvw4gakjnjqqper95h", + injective: "inj1vdu3s39dl8t5l88tyqwuhzklsx9587adv8cnn9", + neutron: "neutron1an8ls6d57c4qcvjq0jmm27jtrpk65twewfjqzdn7annefv7gadqsjs7uc3", +} + +const networkName:Record = { + osmosis: "osmosis-mainnet", + sei: "sei-mainnet", + injective: "injective-mainnet", + neutron: "neutron-mainnet" +} + +export interface MarketInfo { + id: string, + addr: string, +} + +export async function fetchVolume(kind: "daily" | "total", marketInfos: MarketInfo[], timestampSeconds: number) { + const timestamp = new Date(timestampSeconds * 1000).toISOString(); + // it's either 1 day back or "all the days" back + const intervalDays = kind === "daily" ? 1 : Math.floor(timestampSeconds / (24 * 60 * 60)); + + const url = (marketsStr: string) => `${INDEXER_URL}/rolling_trade_volume?market=${marketsStr}×tamp=${timestamp}&interval_days=${intervalDays}`; + + const result = (await Promise.all(marketInfos.map(marketInfo => httpGet(url(marketInfo.addr), { + headers: { + 'x-levana-access': getEnv('LEVANA_API_KEY') + } + })))) + + return result.reduce((a: number, b: number) => a + +b, 0) +} + +export async function fetchMarketInfos(chain: Chain): Promise { + + interface FactoryResponse { + [addr: string]: { + market_id: string + } + } + const url = `${QUERIER_URL}/v1/perps/factory-market-status?network=${networkName[chain]}&factory=${factoryAddr[chain]}` + const result:FactoryResponse = await httpGet(url); + + return Object.entries(result).reduce((acc, [addr, {market_id}]) => { + acc.push({ + id: market_id, + addr + }) + return acc; + }, [] as MarketInfo[]) +} \ No newline at end of file diff --git a/dexs/filament/index.ts b/dexs/filament/index.ts new file mode 100644 index 0000000000..639192f821 --- /dev/null +++ b/dexs/filament/index.ts @@ -0,0 +1,30 @@ +import fetchURL from '../../utils/fetchURL' + +const fetch = async () => { + const volumeApiResult = await fetchURL( + 'https://api.pixelswap.ip-dynamic.org/apis/pairs', + ); + const volumeResult = volumeApiResult.data.pairs; + let dailyVolumeResult = 0; + let totalVolumeResult = 0; + volumeResult.forEach((pairs: { volume: { dailyVolume: number; totalVolume: number; }; token1: { decimals: any; usdPrice: number; }; }) => { + dailyVolumeResult += Number(pairs.volume.dailyVolume / (10 ^ Number(pairs.token1.decimals)) * pairs.token1.usdPrice); + totalVolumeResult += Number(pairs.volume.totalVolume / (10 ^ Number(pairs.token1.decimals)) * pairs.token1.usdPrice); + }); + + return { + dailyVolume: dailyVolumeResult, + totalVolume: totalVolumeResult, + } +} + +const adapter = { + adapter: { + ton: { + fetch, + start: 1726034340, + }, + }, +} + +export default adapter \ No newline at end of file diff --git a/fees/filament/index.tsx b/fees/filament/index.tsx index 68616e5fe3..d8932bfffd 100644 --- a/fees/filament/index.tsx +++ b/fees/filament/index.tsx @@ -61,6 +61,8 @@ const fetchProtocolFees = async ({ startTimestamp, }: FetchOptions) => { // Ensure startTimestamp and endTimestamp are defined + console.log(startTimestamp) + console.log(endTimestamp) if (!startTimestamp || !endTimestamp) { throw new Error("startTimestamp and endTimestamp must be provided"); } From 8ab350600d661237d862c4cba68b43218c63a2be Mon Sep 17 00:00:00 2001 From: rajeebkm Date: Wed, 25 Sep 2024 14:25:10 +0530 Subject: [PATCH 1532/1590] timestamp debugged --- fees/filament/index.tsx | 41 ++++++++++++++--------------------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/fees/filament/index.tsx b/fees/filament/index.tsx index d8932bfffd..ca8e4e590f 100644 --- a/fees/filament/index.tsx +++ b/fees/filament/index.tsx @@ -7,12 +7,10 @@ const endpoint = "https://api.goldsky.com/api/public/project_cm0qvthsz96sp01utcnk55ib0/subgraphs/filament-sei/v1/gn"; const queryDaily = gql` - query stats($from: String!, $to: String!) { + query stats() { totalTradingFees( - where: { - timestamp_gte: $from - timestamp_lte: $to - } + orderBy: block_number + orderDirection: asc ) { timestamp_ block_number @@ -22,12 +20,10 @@ const queryDaily = gql` } `; const queryTotal = gql` - query stats($from: String!, $to: String!) { + query stats() { totalTradingFees( - where: { - timestamp_gte: $from - timestamp_lte: $to - } + orderBy: block_number + orderDirection: asc ) { timestamp_ block_number @@ -56,22 +52,16 @@ const toString = (x: BigNumber) => { return x.toString(); }; -const fetchProtocolFees = async ({ - endTimestamp, - startTimestamp, -}: FetchOptions) => { +const fetchProtocolFees = async () => { // Ensure startTimestamp and endTimestamp are defined - console.log(startTimestamp) - console.log(endTimestamp) - if (!startTimestamp || !endTimestamp) { - throw new Error("startTimestamp and endTimestamp must be provided"); - } +// console.log(startTimestamp) +// console.log(endTimestamp) +// if (!startTimestamp || !endTimestamp) { +// throw new Error("startTimestamp and endTimestamp must be provided"); +// } // Fetch daily fees - const responseDaily: IGraphResponse = await request(endpoint, queryDaily, { - from: String(startTimestamp), - to: String(endTimestamp), - }); + const responseDaily: IGraphResponse = await request(endpoint, queryDaily); let dailyFees = new BigNumber(0); responseDaily.totalTradingFees.forEach((data) => { @@ -79,10 +69,7 @@ const fetchProtocolFees = async ({ }); // Fetch total fees - const responseTotal: IGraphResponse = await request(endpoint, queryTotal, { - from: String(startTimestamp), - to: String(endTimestamp), - }); + const responseTotal: IGraphResponse = await request(endpoint, queryTotal); let totalFees = new BigNumber(0); responseTotal.totalTradingFees.forEach((data) => { From 66490d42b41b3997c7e4d21a34dfb6cfa09e5cf3 Mon Sep 17 00:00:00 2001 From: rajeebkm Date: Wed, 25 Sep 2024 14:30:18 +0530 Subject: [PATCH 1533/1590] timestamp debugged and removed redundant file --- dexs/filament/fetch.ts | 61 ----------------------------------------- dexs/filament/index.ts | 30 -------------------- fees/filament/index.tsx | 19 ++++--------- 3 files changed, 6 insertions(+), 104 deletions(-) delete mode 100644 dexs/filament/fetch.ts delete mode 100644 dexs/filament/index.ts diff --git a/dexs/filament/fetch.ts b/dexs/filament/fetch.ts deleted file mode 100644 index c78331346e..0000000000 --- a/dexs/filament/fetch.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { getEnv } from "../../helpers/env"; -import { httpGet } from "../../utils/fetchURL"; - -const INDEXER_URL = "https://indexer-mainnet.levana.finance"; -const QUERIER_URL = "https://querier-mainnet.levana.finance"; - -type Chain = "osmosis" | "injective" | "sei" | "neutron" - -const factoryAddr:Record = { - osmosis: "osmo1ssw6x553kzqher0earlkwlxasfm2stnl3ms3ma2zz4tnajxyyaaqlucd45", - sei: "sei18rdj3asllguwr6lnyu2sw8p8nut0shuj3sme27ndvvw4gakjnjqqper95h", - injective: "inj1vdu3s39dl8t5l88tyqwuhzklsx9587adv8cnn9", - neutron: "neutron1an8ls6d57c4qcvjq0jmm27jtrpk65twewfjqzdn7annefv7gadqsjs7uc3", -} - -const networkName:Record = { - osmosis: "osmosis-mainnet", - sei: "sei-mainnet", - injective: "injective-mainnet", - neutron: "neutron-mainnet" -} - -export interface MarketInfo { - id: string, - addr: string, -} - -export async function fetchVolume(kind: "daily" | "total", marketInfos: MarketInfo[], timestampSeconds: number) { - const timestamp = new Date(timestampSeconds * 1000).toISOString(); - // it's either 1 day back or "all the days" back - const intervalDays = kind === "daily" ? 1 : Math.floor(timestampSeconds / (24 * 60 * 60)); - - const url = (marketsStr: string) => `${INDEXER_URL}/rolling_trade_volume?market=${marketsStr}×tamp=${timestamp}&interval_days=${intervalDays}`; - - const result = (await Promise.all(marketInfos.map(marketInfo => httpGet(url(marketInfo.addr), { - headers: { - 'x-levana-access': getEnv('LEVANA_API_KEY') - } - })))) - - return result.reduce((a: number, b: number) => a + +b, 0) -} - -export async function fetchMarketInfos(chain: Chain): Promise { - - interface FactoryResponse { - [addr: string]: { - market_id: string - } - } - const url = `${QUERIER_URL}/v1/perps/factory-market-status?network=${networkName[chain]}&factory=${factoryAddr[chain]}` - const result:FactoryResponse = await httpGet(url); - - return Object.entries(result).reduce((acc, [addr, {market_id}]) => { - acc.push({ - id: market_id, - addr - }) - return acc; - }, [] as MarketInfo[]) -} \ No newline at end of file diff --git a/dexs/filament/index.ts b/dexs/filament/index.ts deleted file mode 100644 index 639192f821..0000000000 --- a/dexs/filament/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import fetchURL from '../../utils/fetchURL' - -const fetch = async () => { - const volumeApiResult = await fetchURL( - 'https://api.pixelswap.ip-dynamic.org/apis/pairs', - ); - const volumeResult = volumeApiResult.data.pairs; - let dailyVolumeResult = 0; - let totalVolumeResult = 0; - volumeResult.forEach((pairs: { volume: { dailyVolume: number; totalVolume: number; }; token1: { decimals: any; usdPrice: number; }; }) => { - dailyVolumeResult += Number(pairs.volume.dailyVolume / (10 ^ Number(pairs.token1.decimals)) * pairs.token1.usdPrice); - totalVolumeResult += Number(pairs.volume.totalVolume / (10 ^ Number(pairs.token1.decimals)) * pairs.token1.usdPrice); - }); - - return { - dailyVolume: dailyVolumeResult, - totalVolume: totalVolumeResult, - } -} - -const adapter = { - adapter: { - ton: { - fetch, - start: 1726034340, - }, - }, -} - -export default adapter \ No newline at end of file diff --git a/fees/filament/index.tsx b/fees/filament/index.tsx index ca8e4e590f..dd838a58af 100644 --- a/fees/filament/index.tsx +++ b/fees/filament/index.tsx @@ -7,10 +7,10 @@ const endpoint = "https://api.goldsky.com/api/public/project_cm0qvthsz96sp01utcnk55ib0/subgraphs/filament-sei/v1/gn"; const queryDaily = gql` - query stats() { + query stats { totalTradingFees( - orderBy: block_number - orderDirection: asc + orderBy: block_number + orderDirection: asc ) { timestamp_ block_number @@ -20,10 +20,10 @@ const queryDaily = gql` } `; const queryTotal = gql` - query stats() { + query stats { totalTradingFees( - orderBy: block_number - orderDirection: asc + orderBy: block_number + orderDirection: asc ) { timestamp_ block_number @@ -53,13 +53,6 @@ const toString = (x: BigNumber) => { }; const fetchProtocolFees = async () => { - // Ensure startTimestamp and endTimestamp are defined -// console.log(startTimestamp) -// console.log(endTimestamp) -// if (!startTimestamp || !endTimestamp) { -// throw new Error("startTimestamp and endTimestamp must be provided"); -// } - // Fetch daily fees const responseDaily: IGraphResponse = await request(endpoint, queryDaily); From c1d615d92014445ec3992f0a6890221dec5a1426 Mon Sep 17 00:00:00 2001 From: rajeebkm Date: Wed, 25 Sep 2024 14:40:04 +0530 Subject: [PATCH 1534/1590] fees script updated --- fees/filament/index.tsx | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/fees/filament/index.tsx b/fees/filament/index.tsx index dd838a58af..e18e1c6379 100644 --- a/fees/filament/index.tsx +++ b/fees/filament/index.tsx @@ -6,11 +6,16 @@ import { CHAIN } from "../../helpers/chains"; const endpoint = "https://api.goldsky.com/api/public/project_cm0qvthsz96sp01utcnk55ib0/subgraphs/filament-sei/v1/gn"; +// Get timestamps for yesterday and today +const now = Math.floor(Date.now() / 1000); // Current timestamp in seconds +const yesterday = now - 86400; // 24 hours ago + const queryDaily = gql` - query stats { + query stats($yesterday: Int!, $now: Int!) { totalTradingFees( orderBy: block_number orderDirection: asc + where: { timestamp__gte: $yesterday, timestamp__lte: $now } ) { timestamp_ block_number @@ -19,11 +24,13 @@ const queryDaily = gql` } } `; + const queryTotal = gql` query stats { totalTradingFees( orderBy: block_number orderDirection: asc + where: { timestamp__gte: $yesterday, timestamp__lte: $now } ) { timestamp_ block_number @@ -43,8 +50,10 @@ interface IGraphResponse { } const methodology = { - totalFees: "Tracks the cumulative fees (borrowing fees + trading fees) generated by all transactions.", - dailyFees: "Tracks the fees (borrowing fees + trading fees) generated by transactions on a daily basis.", + totalFees: + "Tracks the cumulative fees (borrowing fees + trading fees) generated by all transactions.", + dailyFees: + "Tracks the fees (borrowing fees + trading fees) generated by transactions on a daily basis.", }; const toString = (x: BigNumber) => { @@ -54,7 +63,10 @@ const toString = (x: BigNumber) => { const fetchProtocolFees = async () => { // Fetch daily fees - const responseDaily: IGraphResponse = await request(endpoint, queryDaily); + const responseDaily: IGraphResponse = await request(endpoint, queryDaily, { + yesterday, + now, + }); let dailyFees = new BigNumber(0); responseDaily.totalTradingFees.forEach((data) => { From 14b3549803b8b589c3ff0e2b442396bc6f495e32 Mon Sep 17 00:00:00 2001 From: rajeebkm Date: Wed, 25 Sep 2024 14:45:45 +0530 Subject: [PATCH 1535/1590] timestamp debug --- fees/filament/index.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/fees/filament/index.tsx b/fees/filament/index.tsx index e18e1c6379..4426d7363e 100644 --- a/fees/filament/index.tsx +++ b/fees/filament/index.tsx @@ -8,7 +8,9 @@ const endpoint = // Get timestamps for yesterday and today const now = Math.floor(Date.now() / 1000); // Current timestamp in seconds +console.log(now); const yesterday = now - 86400; // 24 hours ago +console.log(yesterday); const queryDaily = gql` query stats($yesterday: Int!, $now: Int!) { @@ -27,11 +29,7 @@ const queryDaily = gql` const queryTotal = gql` query stats { - totalTradingFees( - orderBy: block_number - orderDirection: asc - where: { timestamp__gte: $yesterday, timestamp__lte: $now } - ) { + totalTradingFees(orderBy: block_number, orderDirection: asc) { timestamp_ block_number account @@ -63,6 +61,9 @@ const toString = (x: BigNumber) => { const fetchProtocolFees = async () => { // Fetch daily fees + console.log(now); + const yesterday = now - 86400; // 24 hours ago + console.log(yesterday); const responseDaily: IGraphResponse = await request(endpoint, queryDaily, { yesterday, now, From de067a4ecb0f2636c367c75fd9379436378050ed Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 25 Sep 2024 12:43:44 +0200 Subject: [PATCH 1536/1590] refactor maverick code --- dexs/maverick/maverick-v1.ts | 6 +----- package-lock.json | 6 +++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/dexs/maverick/maverick-v1.ts b/dexs/maverick/maverick-v1.ts index ac83bc312e..cc807a9aff 100644 --- a/dexs/maverick/maverick-v1.ts +++ b/dexs/maverick/maverick-v1.ts @@ -54,11 +54,7 @@ const getData = async (options: any, dataType: "volume" | "fee") => { const filteredPoolsRes = await filterPools2({ fetchOptions: options, pairs: pools, token0s: tokenAs, token1s: tokenBs }) pools = filteredPoolsRes.pairs - const swapLogs = [] as any - for (const pool of pools) { - const logs = await options.getLogs({ target: pool, eventAbi: mavV2SwapEvent, }); - swapLogs.push(logs) - } + const swapLogs = await options.getLogs({ targets: pools, eventAbi: mavV2SwapEvent, flatten: false, }); swapLogs.forEach((log: any[], index: number) => { const { tokenA, tokenB, fee } = poolInfos[pools[index]] diff --git a/package-lock.json b/package-lock.json index d5aba8bcc9..b0ca016810 100644 --- a/package-lock.json +++ b/package-lock.json @@ -949,9 +949,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.89", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.89.tgz", - "integrity": "sha512-Op8+Fcn0PBXwxA2l1XOTj2m+FhdhIzFH79OJY9p12oO6srOnC6XtfIZMhUXvbh4gI2/SWSihg+t78fkAK8JBxw==", + "version": "5.0.91", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.91.tgz", + "integrity": "sha512-wghsiqtF+0orJKbIKOwAJFoJec+Q793uvPwZVvJJ2WiZOlAZ1tSwu1wE8Q4LqsV2AAOsZx7NYvjrCpOP4nhm8Q==", "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", From 0479ebe310af7c19bb0eb5f33133ff86fcfd87a3 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 25 Sep 2024 11:50:31 +0000 Subject: [PATCH 1537/1590] fix chain to eth --- dexs/rabbitx/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/rabbitx/index.ts b/dexs/rabbitx/index.ts index b1f65a3921..55c33b8893 100644 --- a/dexs/rabbitx/index.ts +++ b/dexs/rabbitx/index.ts @@ -43,7 +43,7 @@ const fetchVolume = async (timestamp: number): Promise => { const adapter: SimpleAdapter = { adapter: { - [CHAIN.STARKNET]: { + [CHAIN.ETHEREUM]: { fetch: fetchVolume, start: 1700179200, // Replace with actual start timestamp }, From 83508d0842056b726e9c6f0ead3f3bc721c0af5d Mon Sep 17 00:00:00 2001 From: rajeebkm Date: Wed, 25 Sep 2024 17:39:09 +0530 Subject: [PATCH 1538/1590] feat: filament daily and total trading volume added --- dexs/filament/index.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 dexs/filament/index.ts diff --git a/dexs/filament/index.ts b/dexs/filament/index.ts new file mode 100644 index 0000000000..ae72b5a11c --- /dev/null +++ b/dexs/filament/index.ts @@ -0,0 +1,29 @@ +import type { SimpleAdapter } from "../../adapters/types"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { httpGet } from "../../utils/fetchURL"; + +const api = "https://orderbook.filament.finance/sei/api/v1/orderbook/tradeVolumeStats/BTC"; + +const fetch = async () => { + const timestamp = getUniqStartOfTodayTimestamp(); + const res = await httpGet(api); + const { allTimeVolume, volumeIn24Hours } = res.data; + + return { + timestamp, + dailyVolume: volumeIn24Hours, + totalVolume: allTimeVolume, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + near: { + fetch, + start: 100601154, + runAtCurrTime: true, + }, + }, +}; + +export default adapter; \ No newline at end of file From 2efd4a19da2e191ab916dd19e141a622e871badc Mon Sep 17 00:00:00 2001 From: rajeebkm Date: Wed, 25 Sep 2024 17:42:39 +0530 Subject: [PATCH 1539/1590] volume script updated --- dexs/filament/index.ts | 2 +- fees/filament/index.tsx | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/dexs/filament/index.ts b/dexs/filament/index.ts index ae72b5a11c..12e634d824 100644 --- a/dexs/filament/index.ts +++ b/dexs/filament/index.ts @@ -7,7 +7,7 @@ const api = "https://orderbook.filament.finance/sei/api/v1/orderbook/tradeVolume const fetch = async () => { const timestamp = getUniqStartOfTodayTimestamp(); const res = await httpGet(api); - const { allTimeVolume, volumeIn24Hours } = res.data; + const { allTimeVolume, volumeIn24Hours } = res; return { timestamp, diff --git a/fees/filament/index.tsx b/fees/filament/index.tsx index 4426d7363e..42430fd411 100644 --- a/fees/filament/index.tsx +++ b/fees/filament/index.tsx @@ -8,9 +8,7 @@ const endpoint = // Get timestamps for yesterday and today const now = Math.floor(Date.now() / 1000); // Current timestamp in seconds -console.log(now); const yesterday = now - 86400; // 24 hours ago -console.log(yesterday); const queryDaily = gql` query stats($yesterday: Int!, $now: Int!) { From 92117171ae26a743cd574add99e8cf7c7ee1743d Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:17:16 +0200 Subject: [PATCH 1540/1590] fix dhedge --- fees/dhedge/index.ts | 50 +++++++++----------------------------------- 1 file changed, 10 insertions(+), 40 deletions(-) diff --git a/fees/dhedge/index.ts b/fees/dhedge/index.ts index abe9c4d499..e0b31c8eee 100644 --- a/fees/dhedge/index.ts +++ b/fees/dhedge/index.ts @@ -1,52 +1,27 @@ import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { gql, GraphQLClient } from "graphql-request"; +import { GraphQLClient } from "graphql-request"; +const query = ` + query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!, $first: Int!, $skip: Int!) { + managerFeeMinteds( + where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: $first, skip: $skip, orderBy: blockTimestamp, orderDirection: desc + ) { daoFee, tokenPriceAtLastFeeMint } + }` const PROVIDER_CONFIG = { [CHAIN.OPTIMISM]: { endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-optimism/version/latest", - feeMintedEventsQuery: gql` - query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { - managerFeeMinteds( - where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, - first: 1000, orderBy: blockTimestamp, orderDirection: asc - ) { daoFee, tokenPriceAtLastFeeMint } - }`, - managerFeeMintedEventsField: "managerFeeMinteds", }, [CHAIN.POLYGON]: { endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-polygon/version/latest", - feeMintedEventsQuery: gql` - query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { - managerFeeMinteds( - where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, - first: 1000, orderBy: blockTimestamp, orderDirection: asc - ) { daoFee, tokenPriceAtLastFeeMint } - }`, - managerFeeMintedEventsField: "managerFeeMinteds", }, [CHAIN.ARBITRUM]: { endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-arbitrum/version/latest", - feeMintedEventsQuery: gql` - query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { - managerFeeMinteds( - where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, - first: 1000, orderBy: blockTimestamp, orderDirection: asc - ) { daoFee, tokenPriceAtLastFeeMint } - }`, - managerFeeMintedEventsField: "managerFeeMinteds", }, [CHAIN.BASE]: { startTimestamp: 1712227101, endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-base-mainnet/version/latest", - feeMintedEventsQuery: gql` - query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { - managerFeeMinteds( - where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, - first: 1000, orderBy: blockTimestamp, orderDirection: asc - ) { daoFee, tokenPriceAtLastFeeMint } - }`, - managerFeeMintedEventsField: "managerFeeMinteds", }, }; @@ -73,7 +48,6 @@ const fetchHistoricalFees = async (chainId: CHAIN, query: string, volumeField: s if (entries.length < batchSize) break; - await sleep(500); } catch (e) { throw new Error(`Error fetching data for chain ${chainId}: ${e.message}`); } @@ -100,11 +74,11 @@ const fetch = (chain) => { const [ dailyFees ] = await Promise.all([ - fetchHistoricalFees(chain as CHAIN, config.feeMintedEventsQuery, config.managerFeeMintedEventsField, startTimestamp, endTimestamp) + fetchHistoricalFees(chain as CHAIN, query, 'managerFeeMinteds', startTimestamp, endTimestamp) ]); return { - dailyFees: String(calculateFees(dailyFees)), + dailyFees: calculateFees(dailyFees), dailyRevenue: calculateFees(dailyFees), timestamp: endTimestamp, }; @@ -112,10 +86,6 @@ const fetch = (chain) => { } }; -function sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); -} - const adapter: SimpleAdapter = { adapter: { [CHAIN.OPTIMISM]: { From 3fa48bda0963d4d9fc1cbd33dcc0cc870639165b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:35:32 +0200 Subject: [PATCH 1541/1590] fix toros bug --- fees/dhedge/index.ts | 67 ++++++++++--------------- fees/toros/index.ts | 116 +++++++++++++------------------------------ 2 files changed, 59 insertions(+), 124 deletions(-) diff --git a/fees/dhedge/index.ts b/fees/dhedge/index.ts index e0b31c8eee..67676ddfb4 100644 --- a/fees/dhedge/index.ts +++ b/fees/dhedge/index.ts @@ -9,6 +9,9 @@ const query = ` ) { daoFee, tokenPriceAtLastFeeMint } }` + +// if graph goes down, can be pulled via event logs, example: +// https://optimistic.etherscan.io/tx/0x265e1eeb9a2c68ef8f58fe5e1d7e3f1151dd5e6686d4147445bf1bd8895deb38#eventlog check topic: 0x755a8059d66d8d243bc9f6913f429a811f154599d0538bb0b6a2ac23f23d2ccd const PROVIDER_CONFIG = { [CHAIN.OPTIMISM]: { endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-optimism/version/latest", @@ -56,54 +59,34 @@ const fetchHistoricalFees = async (chainId: CHAIN, query: string, volumeField: s }; const calculateFees = (data: any): number => - data.reduce((acc: number, item: any) => { - const daoFee = Number(item.daoFee); - const tokenPrice = Number(item.tokenPriceAtLastFeeMint); - const daoFeeInEth = daoFee / 1e18; - const tokenPriceInEth = tokenPrice / 1e18; - const result = daoFeeInEth * tokenPriceInEth; - return acc + result; - }, 0); + data.reduce((acc: number, item: any) => { + const daoFee = Number(item.daoFee); + const tokenPrice = Number(item.tokenPriceAtLastFeeMint); + const daoFeeInEth = daoFee / 1e18; + const tokenPriceInEth = tokenPrice / 1e18; + const result = daoFeeInEth * tokenPriceInEth; + return acc + result; + }, 0); -const fetch = (chain) => { - return () => { - return async ({ endTimestamp, startTimestamp }: FetchOptions) => { - const config = PROVIDER_CONFIG[chain]; - if (!config) throw new Error(`Unsupported chain: ${chain}`); +const fetch = async ({ chain, endTimestamp, startTimestamp }: FetchOptions) => { + const config = PROVIDER_CONFIG[chain]; + if (!config) throw new Error(`Unsupported chain: ${chain}`); - const [ - dailyFees - ] = await Promise.all([ - fetchHistoricalFees(chain as CHAIN, query, 'managerFeeMinteds', startTimestamp, endTimestamp) - ]); + const dailyFees = await fetchHistoricalFees(chain as CHAIN, query, 'managerFeeMinteds', startTimestamp, endTimestamp) - return { - dailyFees: calculateFees(dailyFees), - dailyRevenue: calculateFees(dailyFees), - timestamp: endTimestamp, - }; - } - } -}; + return { + dailyFees: calculateFees(dailyFees), + dailyRevenue: calculateFees(dailyFees), + timestamp: endTimestamp, + }; +} const adapter: SimpleAdapter = { adapter: { - [CHAIN.OPTIMISM]: { - fetch: fetch(CHAIN.OPTIMISM)(), - start: 1638446653, - }, - [CHAIN.POLYGON]: { - fetch: fetch(CHAIN.POLYGON)(), - start: 1627560253, - }, - [CHAIN.ARBITRUM]: { - fetch: fetch(CHAIN.ARBITRUM)(), - start: 1679918653, - }, - [CHAIN.BASE]: { - fetch: fetch(CHAIN.BASE)(), - start: 1703073853, - }, + [CHAIN.OPTIMISM]: { fetch, start: 1638446653, }, + [CHAIN.POLYGON]: { fetch, start: 1627560253, }, + [CHAIN.ARBITRUM]: { fetch, start: 1679918653, }, + [CHAIN.BASE]: { fetch, start: 1703073853, }, }, version: 2 } diff --git a/fees/toros/index.ts b/fees/toros/index.ts index b94d5c031c..3b49887979 100644 --- a/fees/toros/index.ts +++ b/fees/toros/index.ts @@ -1,61 +1,38 @@ import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { gql, GraphQLClient } from "graphql-request"; +import { GraphQLClient } from "graphql-request"; +const query = ` + query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!, $first: Int!, $skip: Int!) { + managerFeeMinteds( + where: { manager: $manager, managerFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: $first, skip: $skip, orderBy: blockTimestamp, orderDirection: desc + ) { managerFee, tokenPriceAtLastFeeMint } + }` +// if graph goes down, can be pulled via event logs, example: +// https://optimistic.etherscan.io/tx/0x265e1eeb9a2c68ef8f58fe5e1d7e3f1151dd5e6686d4147445bf1bd8895deb38#eventlog check topic: 0x755a8059d66d8d243bc9f6913f429a811f154599d0538bb0b6a2ac23f23d2ccd const CONFIG = { [CHAIN.OPTIMISM]: { endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-optimism/version/latest", - feeMintedEventsQuery: gql` - query managerFeeMinteds($manager: Bytes!, $startTimestamp: BigInt!, $endTimestamp: BigInt!) { - managerFeeMinteds( - where: { manager: $manager, managerFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, - first: 1000, orderBy: blockTimestamp, orderDirection: asc - ) { managerFee, daoFee, tokenPriceAtLastFeeMint } - }`, - feeMintedEventsField: "managerFeeMinteds", torosManagerAddress: "0x813123a13d01d3f07d434673fdc89cbba523f14d", }, [CHAIN.POLYGON]: { endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-polygon/version/latest", - feeMintedEventsQuery: gql` - query managerFeeMinteds($manager: Bytes!, $startTimestamp: BigInt!, $endTimestamp: BigInt!) { - managerFeeMinteds( - where: { manager: $manager, managerFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, - first: 1000, orderBy: blockTimestamp, orderDirection: asc - ) { managerFee, daoFee, tokenPriceAtLastFeeMint } - }`, - feeMintedEventsField: "managerFeeMinteds", torosManagerAddress: "0x090e7fbd87a673ee3d0b6ccacf0e1d94fb90da59", }, [CHAIN.ARBITRUM]: { endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-arbitrum/version/latest", - feeMintedEventsQuery: gql` - query managerFeeMinteds($manager: Bytes!, $startTimestamp: BigInt!, $endTimestamp: BigInt!) { - managerFeeMinteds( - where: { manager: $manager, managerFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, - first: 1000, orderBy: blockTimestamp, orderDirection: asc - ) { managerFee, tokenPriceAtLastFeeMint } - }`, - feeMintedEventsField: "managerFeeMinteds", torosManagerAddress: "0xfbd2b4216f422dc1eee1cff4fb64b726f099def5", }, [CHAIN.BASE]: { startTimestamp: 1712227101, endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-base-mainnet/version/latest", - feeMintedEventsQuery: gql` - query managerFeeMinteds($manager: Bytes!, $startTimestamp: BigInt!, $endTimestamp: BigInt!) { - managerFeeMinteds( - where: { manager: $manager, managerFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, - first: 1000, orderBy: blockTimestamp, orderDirection: asc - ) { managerFee, tokenPriceAtLastFeeMint } - }`, - feeMintedEventsField: "managerFeeMinteds", torosManagerAddress: "0x5619ad05b0253a7e647bd2e4c01c7f40ceab0879", }, }; -const fetchHistoricalFees = async (chainId: CHAIN, query: string, managerAddress: string, startTimestamp: number, endTimestamp: number) => { - const { endpoint, feeMintedEventsField } = CONFIG[chainId]; +const fetchHistoricalFees = async (chainId: CHAIN, managerAddress: string, startTimestamp: number, endTimestamp: number) => { + const { endpoint, } = CONFIG[chainId]; let allData = []; let skip = 0; @@ -71,7 +48,7 @@ const fetchHistoricalFees = async (chainId: CHAIN, query: string, managerAddress skip }); - const entries = data[feeMintedEventsField]; + const entries = data.managerFeeMinteds if (entries.length === 0) break; allData = allData.concat(entries); @@ -79,7 +56,6 @@ const fetchHistoricalFees = async (chainId: CHAIN, query: string, managerAddress if (entries.length < batchSize) break; - await sleep(500); } catch (e) { throw new Error(`Error fetching data for chain ${chainId}: ${e.message}`); } @@ -88,58 +64,34 @@ const fetchHistoricalFees = async (chainId: CHAIN, query: string, managerAddress }; const calculateFees = (data: any): number => - data.reduce((acc: number, item: any) => { - const managerFee = Number(item.managerFee); - const tokenPrice = Number(item.tokenPriceAtLastFeeMint); - const managerFeeFormatted = managerFee / 1e18; - const tokenPriceFormatted = tokenPrice / 1e18; - const managerFeeUsd = managerFeeFormatted * tokenPriceFormatted; - return acc + managerFeeUsd; - }, 0); + data.reduce((acc: number, item: any) => { + const managerFee = Number(item.managerFee); + const tokenPrice = Number(item.tokenPriceAtLastFeeMint); + const managerFeeFormatted = managerFee / 1e18; + const tokenPriceFormatted = tokenPrice / 1e18; + const managerFeeUsd = managerFeeFormatted * tokenPriceFormatted; + return acc + managerFeeUsd; + }, 0); -const fetch = (chain) => { - return () => { - return async ({ endTimestamp, startTimestamp }: FetchOptions) => { - const config = CONFIG[chain]; - if (!config) throw new Error(`Unsupported chain: ${chain}`); +const fetch = async ({ chain, endTimestamp, startTimestamp }: FetchOptions) => { + const config = CONFIG[chain]; + if (!config) throw new Error(`Unsupported chain: ${chain}`); - const [ - dailyFees - ] = await Promise.all([ - fetchHistoricalFees(chain as CHAIN, config.feeMintedEventsQuery, config.torosManagerAddress, startTimestamp, endTimestamp) - ]); - - return { - dailyFees: calculateFees(dailyFees), - dailyRevenue: calculateFees(dailyFees), - timestamp: endTimestamp, - }; - } - } -}; + const dailyFees = await fetchHistoricalFees(chain as CHAIN, config.torosManagerAddress, startTimestamp, endTimestamp) -function sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); + return { + dailyFees: calculateFees(dailyFees), + dailyRevenue: calculateFees(dailyFees), + timestamp: endTimestamp, + }; } const adapter: SimpleAdapter = { adapter: { - [CHAIN.OPTIMISM]: { - fetch: fetch(CHAIN.OPTIMISM)(), - start: 1638446653, - }, - [CHAIN.POLYGON]: { - fetch: fetch(CHAIN.POLYGON)(), - start: 1627560253, - }, - [CHAIN.ARBITRUM]: { - fetch: fetch(CHAIN.ARBITRUM)(), - start: 1679918653, - }, - [CHAIN.BASE]: { - fetch: fetch(CHAIN.BASE)(), - start: 1703073853, - }, + [CHAIN.OPTIMISM]: { fetch, start: 1638446653, }, + [CHAIN.POLYGON]: { fetch, start: 1627560253, }, + [CHAIN.ARBITRUM]: { fetch, start: 1679918653, }, + [CHAIN.BASE]: { fetch, start: 1703073853, }, }, version: 2 } From 611f33f0c673c22b09706ec41ce529f5a67d0ab6 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:45:54 +0200 Subject: [PATCH 1542/1590] dhege: add backup --- fees/dhedge/index.ts | 11 +++++++++++ fees/toros/index.ts | 13 +++++++++++++ 2 files changed, 24 insertions(+) diff --git a/fees/dhedge/index.ts b/fees/dhedge/index.ts index 67676ddfb4..072e560d74 100644 --- a/fees/dhedge/index.ts +++ b/fees/dhedge/index.ts @@ -12,6 +12,17 @@ const query = ` // if graph goes down, can be pulled via event logs, example: // https://optimistic.etherscan.io/tx/0x265e1eeb9a2c68ef8f58fe5e1d7e3f1151dd5e6686d4147445bf1bd8895deb38#eventlog check topic: 0x755a8059d66d8d243bc9f6913f429a811f154599d0538bb0b6a2ac23f23d2ccd +/* const fetch = async ({ chain, createBalances, getLogs }: FetchOptions) => { + const dailyFees = createBalances(); + const logs = await getLogs({ + eventAbi: 'event ManagerFeeMinted (address pool, address manager, uint256 available, uint256 daoFee, uint256 managerFee, uint256 tokenPriceAtLastFeeMint)', + }); + logs.forEach(i => { + dailyFees.addUSDValue(i.daoFee.toString() * i.tokenPriceAtLastFeeMint.toString() / 1e36) + }); + + return { dailyFees, dailyRevenue: dailyFees }; +} */ const PROVIDER_CONFIG = { [CHAIN.OPTIMISM]: { endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-optimism/version/latest", diff --git a/fees/toros/index.ts b/fees/toros/index.ts index 3b49887979..8580648d68 100644 --- a/fees/toros/index.ts +++ b/fees/toros/index.ts @@ -11,6 +11,19 @@ const query = ` // if graph goes down, can be pulled via event logs, example: // https://optimistic.etherscan.io/tx/0x265e1eeb9a2c68ef8f58fe5e1d7e3f1151dd5e6686d4147445bf1bd8895deb38#eventlog check topic: 0x755a8059d66d8d243bc9f6913f429a811f154599d0538bb0b6a2ac23f23d2ccd +/* const fetch = async ({ chain, createBalances, getLogs }: FetchOptions) => { + let torosManagerAddress = CONFIG[chain].torosManagerAddress.toLowerCase(); + const dailyFees = createBalances(); + const logs = await getLogs({ + eventAbi: 'event ManagerFeeMinted (address pool, address manager, uint256 available, uint256 daoFee, uint256 managerFee, uint256 tokenPriceAtLastFeeMint)', + }); + logs.forEach(i => { + if (i.manager.toLowerCase() !== torosManagerAddress) return; + dailyFees.addUSDValue(i.daoFee.toString() * i.tokenPriceAtLastFeeMint.toString() / 1e36) + }); + + return { dailyFees, dailyRevenue: dailyFees }; +} */ const CONFIG = { [CHAIN.OPTIMISM]: { endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-optimism/version/latest", From af188f8c1a4d1aede9943dd66e244f3a775c6e74 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 26 Sep 2024 15:04:18 +0200 Subject: [PATCH 1543/1590] code refactor --- dexs/gambit/index.ts | 112 ++++++------------------ dexs/nlx/index.ts | 23 ++--- dexs/nlx/nlx-trade/index.ts | 24 +----- fees/Viridian/bribes.ts | 76 ----------------- fees/Viridian/index.ts | 32 +------ fees/chainlink-keepers.ts | 9 +- fees/chainlink-vrf-v2.ts | 8 +- fees/cryptex-v2.ts | 166 ++++++++++-------------------------- fees/emdx.ts | 42 +++------ fees/fluid/index.ts | 6 +- fees/goku-money/index.ts | 23 ++--- fees/goldfinch.ts | 118 +++++++------------------ fees/hopr/index.ts | 2 +- fees/lybra-finance.ts | 41 ++------- fees/lybra-v2.ts | 41 ++------- fees/monarchpay/index.ts | 25 ++---- fees/perpetual-protocol.ts | 49 ++--------- fees/radiant.ts | 91 ++++---------------- fees/usdo.ts | 26 ++---- fees/vaultka.ts | 60 +++---------- 20 files changed, 204 insertions(+), 770 deletions(-) delete mode 100644 fees/Viridian/bribes.ts diff --git a/dexs/gambit/index.ts b/dexs/gambit/index.ts index 1a39f86106..7240300d6b 100644 --- a/dexs/gambit/index.ts +++ b/dexs/gambit/index.ts @@ -1,7 +1,5 @@ -import { FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import * as sdk from "@defillama/sdk"; -import { getBlock } from "../../helpers/getBlock"; import { Chain } from "@defillama/sdk/build/general"; const topic0_limit_ex = @@ -9,18 +7,10 @@ const topic0_limit_ex = const topic0_market_ex = "0x2739a12dffae5d66bd9e126a286078ed771840f2288f0afa5709ce38c3330997"; -const USDC_DECIMAL = 6; -const LEVERAGE_DECIMAL = 18; - type IAddress = { [s: string | Chain]: string[]; }; -interface ILog { - data: string; - transactionHash: string; - topics: string[]; -} // GambitTradingCallbacksV1 address const CONTRACT_ADDRESS: IAddress = { @@ -40,86 +30,34 @@ const CONTRACT_ADDRESS: IAddress = { ], }; -const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24; - const toTimestamp = timestamp; - - const fromBlock = await getBlock(fromTimestamp, chain, {}); - const toBlock = await getBlock(toTimestamp, chain, {}); - const contractAddressList = CONTRACT_ADDRESS[chain]; - const logs_limit_ex: ILog[] = ( - await Promise.all( - contractAddressList.map(async (address) => { - return sdk.getEventLogs({ - target: address, - toBlock: toBlock, - fromBlock: fromBlock, - chain: chain, - topics: [topic0_limit_ex], - }); - }) - ) - ).flatMap((response) => response as any) as ILog[]; - - const logs_market_ex: ILog[] = ( - await Promise.all( - contractAddressList.map(async (address) => { - return sdk.getEventLogs({ - target: address, - toBlock: toBlock, - fromBlock: fromBlock, - chain: chain, - topics: [topic0_market_ex], - }); - }) - ) - ).flatMap((response) => response as any) as ILog[]; - const limit_volume = logs_limit_ex - .map((e: ILog) => { - const data = e.data.replace("0x", ""); - let leverage = Number("0x" + data.slice(448, 512)); - if (leverage > 1000) { - leverage = leverage / 10 ** LEVERAGE_DECIMAL; - } - const positionSizeUsdc = - Number("0x" + data.slice(896, 960)) / 10 ** USDC_DECIMAL; - return leverage * positionSizeUsdc; - }) - .reduce((a: number, b: number) => a + b, 0); - - const market_volume = logs_market_ex - .map((e: ILog) => { - const data = e.data.replace("0x", ""); - let leverage = Number("0x" + data.slice(448, 512)); - if (leverage > 1000) { - leverage = leverage / 10 ** LEVERAGE_DECIMAL; - } - const positionSizeUsdc = - Number("0x" + data.slice(832, 896)) / 10 ** USDC_DECIMAL; - return leverage * positionSizeUsdc; - }) - .reduce((a: number, b: number) => a + b, 0); - - const dailyVolume = limit_volume + market_volume; - return { - dailyVolume: `${dailyVolume}`, - timestamp, - }; - }; -}; +const fetch = async ({ chain, createBalances, getLogs }: FetchOptions) => { + const dailyVolume = createBalances(); + const marketLogs = await getLogs({ + targets: CONTRACT_ADDRESS[chain], + eventAbi: "event MarketExecuted(uint256 indexed orderId, (address trader, uint256 pairIndex, uint256 index, uint256 initialPosToken, uint256 positionSizeUsdc, uint256 openPrice, bool buy, uint256 leverage, uint256 tp, uint256 sl) t, bool open, uint256 price, uint256 priceImpactP, uint256 positionSizeUsdc, int256 percentProfit, uint256 usdcSentToTrader)", + topics: [topic0_market_ex], + }); + const limitLogs = await getLogs({ + targets: CONTRACT_ADDRESS[chain], + eventAbi: "event LimitExecuted(uint256 indexed orderId, uint256 limitIndex, (address trader, uint256 pairIndex, uint256 index, uint256 initialPosToken, uint256 positionSizeUsdc, uint256 openPrice, bool buy, uint256 leverage, uint256 tp, uint256 sl) t, address indexed nftHolder, uint8 orderType, uint256 price, uint256 priceImpactP, uint256 positionSizeUsdc, int256 percentProfit, uint256 usdcSentToTrader)", + topics: [topic0_limit_ex], + }); + marketLogs.concat(limitLogs).forEach(i => { + let leverage = Number(i.t.leverage) + if (leverage > 1000) + leverage = leverage / 1e18 + dailyVolume.addUSDValue(leverage * i.positionSizeUsdc.toString() / 1e6) + }); + + return { dailyVolume }; +} const adapter: SimpleAdapter = { adapter: { - [CHAIN.ERA]: { - fetch: fetch(CHAIN.ERA), - start: 1690848000, // 2023/08/01 00:00:00 - }, - [CHAIN.ARBITRUM]: { - fetch: fetch(CHAIN.ARBITRUM), - start: 1698883200, // 2023/11/02 00:00:00 - }, + [CHAIN.ERA]: { fetch, start: 1690848000, }, + [CHAIN.ARBITRUM]: { fetch, start: 1698883200, }, }, + version: 2 }; export default adapter; diff --git a/dexs/nlx/index.ts b/dexs/nlx/index.ts index f4bc6e340b..52fcea8525 100644 --- a/dexs/nlx/index.ts +++ b/dexs/nlx/index.ts @@ -1,7 +1,5 @@ -import { BreakdownAdapter, FetchOptions, FetchResultVolume, SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions, FetchResultVolume, } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import * as sdk from "@defillama/sdk"; -import { getBlock } from "../../helpers/getBlock"; import { Chain } from "@defillama/sdk/build/general"; import { adapter_trade } from './nlx-trade/index' @@ -28,18 +26,12 @@ const contract: TChain = { } const fetch = (chain: Chain) => { - return async ({ fromTimestamp, toTimestamp }: FetchOptions): Promise => { + return async ({ getLogs, createBalances, }: FetchOptions): Promise => { - const balances = new sdk.Balances({ chain, timestamp: toTimestamp }) - - const fromBlock = (await getBlock(fromTimestamp, chain, {})); - const toBlock = (await getBlock(toTimestamp, chain, {})); + const dailyVolume = createBalances() - const swap_logs: ILog[] = (await sdk.getEventLogs({ + const swap_logs: ILog[] = (await getLogs({ target: contract[chain], - toBlock: toBlock, - fromBlock: fromBlock, - chain: chain, topics: [topic0_ins, topic1_ins] })) as ILog[]; @@ -55,13 +47,10 @@ const fetch = (chain: Chain) => { }) raw_in.map((e: IToken) => { - balances.add(e.token, e.amount) + dailyVolume.add(e.token, e.amount) }) - return { - dailyVolume: await balances.getUSDString(), - timestamp: toTimestamp - } + return { dailyVolume } as any } } diff --git a/dexs/nlx/nlx-trade/index.ts b/dexs/nlx/nlx-trade/index.ts index af811be541..7eb76d6950 100644 --- a/dexs/nlx/nlx-trade/index.ts +++ b/dexs/nlx/nlx-trade/index.ts @@ -1,7 +1,5 @@ -import { FetchOptions, FetchResultVolume, SimpleAdapter } from "../../../adapters/types"; +import { FetchOptions, } from "../../../adapters/types"; import { CHAIN } from "../../../helpers/chains"; -import * as sdk from "@defillama/sdk"; -import { getBlock } from "../../../helpers/getBlock"; import { Chain } from "@defillama/sdk/build/general"; interface ILog { @@ -16,9 +14,6 @@ const topic1_ins = '0xf94196ccb31f81a3e67df18f2a62cbfb50009c80a7d3c728a3f542e3ab const topic0_des = '0x137a44067c8961cd7e1d876f4754a5a3a75989b4552f1843fc69c3b372def160'; const topic1_des = '0x07d51b51b408d7c62dcc47cc558da5ce6a6e0fd129a427ebce150f52b0e5171a'; -const topic0_fees = '0x137a44067c8961cd7e1d876f4754a5a3a75989b4552f1843fc69c3b372def160'; -const topic1_fees = '0xe096982abd597114bdaa4a60612f87fabfcc7206aa12d61c50e7ba1e6c291100'; - type TChain = { [s: Chain | string]: string; } @@ -28,24 +23,15 @@ const contract: TChain = { } const fetch = (chain: Chain) => { - return async ({ fromTimestamp, toTimestamp }: FetchOptions): Promise => { - - const fromBlock = (await getBlock(fromTimestamp, chain, {})); - const toBlock = (await getBlock(toTimestamp, chain, {})); + return async ({ getLogs, }: FetchOptions) => { - const posistion_logs: ILog[] = (await sdk.getEventLogs({ + const posistion_logs: ILog[] = (await getLogs({ target: contract[chain], - toBlock: toBlock, - fromBlock: fromBlock, - chain: chain, topics: [topic0_ins, topic1_ins] })) as ILog[]; - const decress_logs: ILog[] = (await sdk.getEventLogs({ + const decress_logs: ILog[] = (await getLogs({ target: contract[chain], - toBlock: toBlock, - fromBlock: fromBlock, - chain: chain, topics: [topic0_des, topic1_des] })) as ILog[]; @@ -73,7 +59,6 @@ const fetch = (chain: Chain) => { return { dailyVolume: `${dailyVolume}`, - timestamp:toTimestamp } } } @@ -85,7 +70,6 @@ const adapter_trade: any = { fetch: fetch(CHAIN.CORE), start: 1713916800, }, - }, }; export { diff --git a/fees/Viridian/bribes.ts b/fees/Viridian/bribes.ts deleted file mode 100644 index bdd436ea7c..0000000000 --- a/fees/Viridian/bribes.ts +++ /dev/null @@ -1,76 +0,0 @@ -import * as sdk from "@defillama/sdk"; -import { ethers } from "ethers"; -import { CHAIN } from "../../helpers/chains"; -import { FetchOptions } from "../../adapters/types"; - -const event_notify_reward = 'event NotifyReward(address indexed from,address indexed reward,uint256 indexed epoch,uint256 amount)'; -const event_geuge_created = 'event GaugeCreated(address indexed poolFactory,address indexed votingRewardsFactory,address indexed gaugeFactory,address pool,address bribeVotingReward,address feeVotingReward,address gauge,address creator)' - -const topic0_geuge_created = '0xef9f7d1ffff3b249c6b9bf2528499e935f7d96bb6d6ec4e7da504d1d3c6279e1'; -const contract_interface = new ethers.Interface([ - event_notify_reward, - event_geuge_created -]); - -interface ILog { - data: string; - transactionHash: string; - topics: string[]; -} - -interface IBribes { - token: string; - amount: number; -} - - -export const getBribes = async (options: FetchOptions): Promise => { - try { - const dailyBribesRevenue = options.createBalances(); - const fromBlock = await options.getFromBlock(); - const toBlock = await options.getToBlock(); - const voter = '0xbB7855fA0Ad297EC6e4aa1d4BE30f148447eD68c'; - const logs_geuge_created: ethers.EventLog[] = (await sdk.api.util.getLogs({ - target: voter, - fromBlock: 14188569, //Block number of the contract's creation - toBlock: toBlock, - topic: '', - topics: [topic0_geuge_created], - chain: CHAIN.CORE, - keys: [] - })).output; - const bribes_contract: string[] = logs_geuge_created.map((e: ethers.EventLog) => { - const value = contract_interface.parseLog(e as any); - return value?.args.bribeVotingReward; - }) - - const logs: ILog[] = (await Promise.all(bribes_contract.map((address: string) => sdk.api.util.getLogs({ - target: address, - topic: '', - toBlock: toBlock, - fromBlock: fromBlock, - keys: [], - chain: CHAIN.CORE, - topics: ['0x52977ea98a2220a03ee9ba5cb003ada08d394ea10155483c95dc2dc77a7eb24b'] - })))) - .map((p: any) => p) - .map((a: any) => a.output).flat(); - - const logs_bribes = logs.map((e: ILog) => { - const value = contract_interface.parseLog(e) - return { - token: value?.args.reward, - amount: Number(value?.args.amount._hex) - } as IBribes - }) - logs_bribes.forEach((e: IBribes) => { - dailyBribesRevenue.add(e.token, e.amount) - }); - return { - dailyBribesRevenue - }; - } catch (error) { - console.error(error); - throw error; - } -} \ No newline at end of file diff --git a/fees/Viridian/index.ts b/fees/Viridian/index.ts index d7c3d5a982..579a7f5dde 100644 --- a/fees/Viridian/index.ts +++ b/fees/Viridian/index.ts @@ -1,33 +1,7 @@ -import { Adapter, FetchOptions, FetchResultV2 } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains'; -import { getBribes } from './bribes'; import { uniV2Exports } from '../../helpers/uniswap'; -const feeAdapter = uniV2Exports({ - [CHAIN.CORE]: { factory: '0xb54a83cfEc6052E05BB2925097FAff0EC22893F3', }, -}).adapter[CHAIN.CORE].fetch - - -const getFees = async (options: FetchOptions): Promise => { - const v1Results = await feeAdapter(options as any, undefined as any, options); - const bribesResult = await getBribes(options); - v1Results.dailyBribesRevenue = bribesResult.dailyBribesRevenue; - return { - dailyFees: v1Results.dailyFees, - dailyRevenue: v1Results.dailyRevenue, - dailyHoldersRevenue: v1Results.dailyFees, - dailyBribesRevenue: v1Results.dailyBribesRevenue, - } -} - -const adapter: Adapter = { - version: 2, - adapter: { - [CHAIN.CORE]: { - fetch: getFees, - start: 1715904000 - }, - }, -}; -export default adapter; \ No newline at end of file +export default uniV2Exports({ + [CHAIN.CORE]: { factory: '0xb54a83cfEc6052E05BB2925097FAff0EC22893F3', voter: '0xbB7855fA0Ad297EC6e4aa1d4BE30f148447eD68c', }, +}) diff --git a/fees/chainlink-keepers.ts b/fees/chainlink-keepers.ts index 30c0fabae7..0d10a66c78 100644 --- a/fees/chainlink-keepers.ts +++ b/fees/chainlink-keepers.ts @@ -3,7 +3,6 @@ import { CHAIN } from "../helpers/chains"; import { getPrices } from "../utils/prices"; import { getTxReceipts } from "../helpers/getTxReceipts"; import { Chain } from "@defillama/sdk/build/general"; -import * as sdk from "@defillama/sdk"; type TAddrress = { [l: string | Chain]: string; @@ -40,14 +39,10 @@ const gasTokenId: IGasTokenId = { } const fetchKeeper = (chain: Chain) => { - return async ({ getFromBlock, getToBlock, toTimestamp }: FetchOptions) => { - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) - const logs: ITx[] = (await sdk.getEventLogs({ + return async ({ toTimestamp, getLogs, }: FetchOptions) => { + const logs: ITx[] = (await getLogs({ target: address_keeper[chain], - fromBlock: fromBlock, - toBlock: toBlock, topics: [topic0_keeper], - chain: chain })).map((e: any) => { return { ...e, data: e.data.replace('0x', ''), transactionHash: e.transactionHash, } as ITx }) .filter((e: ITx) => e.topics.includes(success_topic)); const tx_hash: string[] = [...new Set([...logs].map((e: ITx) => e.transactionHash))] diff --git a/fees/chainlink-vrf-v2.ts b/fees/chainlink-vrf-v2.ts index 0421138957..e0a7770207 100644 --- a/fees/chainlink-vrf-v2.ts +++ b/fees/chainlink-vrf-v2.ts @@ -65,14 +65,10 @@ const gasTokenId: IGasTokenId = { const fetch = (chain: Chain, version: number) => { - return async ({ getFromBlock, getToBlock, toTimestamp }: FetchOptions) => { - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) - const logs_1: ITx[] = (await sdk.getEventLogs({ + return async ({ toTimestamp, getLogs }: FetchOptions) => { + const logs_1: ITx[] = (await getLogs({ target: version === 1 ? address_v1[chain] : address_v2[chain], - fromBlock: fromBlock, - toBlock: toBlock, topics: version === 1 ? [topic0_v1] : [topic0_v2], - chain: chain })).map((e: any) => { return { data: e.data.replace('0x', ''), transactionHash: e.transactionHash } as ITx }); const amount_fullfill = logs_1.map((e: ITx) => { diff --git a/fees/cryptex-v2.ts b/fees/cryptex-v2.ts index b831101ef8..fd92b9d7c3 100644 --- a/fees/cryptex-v2.ts +++ b/fees/cryptex-v2.ts @@ -1,24 +1,11 @@ import { Adapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import * as sdk from "@defillama/sdk"; -import { ethers } from "ethers"; - -interface ILog { - data: string; - transactionHash: string; - topics: string[]; - address: string; -} const products: string[] = [ '0x4243b34374cfb0a12f184b92f52035d03d4f7056', // TCAP '0x1cd33f4e6edeee8263aa07924c2760cf2ec8aad0', // TCAP ]; -const make_closed_topic0 = '0x39854479080fac0b5e7c0ecedb0fb02308a72a43cd102c6b9f918653d3400367' -const make_opened_topic0 = '0xf98b31465ac12e92b5cb136ade913276c267463c4395bb1a3999bc88fb837806' -const take_closed_topic0 = '0x63625b85818a29587ee919ee6a968ee0b32f3513f2884b3968001062ba49eb6b' -const take_opened_topic0 = '0xb9726781b72c53f23217f424d70445b222951f008aeac7eece8139caed71ed2d' const make_closed_event = 'event MakeClosed(address indexed account,uint256 version,uint256 amount)' const make_opened_event = 'event MakeOpened(address indexed account,uint256 version,uint256 amount)' @@ -26,12 +13,6 @@ const make_opened_event = 'event MakeOpened(address indexed account,uint256 vers const take_closed_event = 'event TakeClosed(address indexed account,uint256 version,uint256 amount)' const take_opened_event = 'event TakeOpened(address indexed account,uint256 version,uint256 amount)' -const contract_interface = new ethers.Interface([ - make_closed_event, - make_opened_event, - take_closed_event, - take_opened_event -]); const abis: any = { "makerFee": "uint256:makerFee", @@ -42,109 +23,52 @@ type IPrice = { [s: string]: number; } -const fetch = async ({ getToBlock, getFromBlock }: FetchOptions) => { - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) - const make_closed_topic0_logs: ILog[] = (await Promise.all(products.map((address: string) => sdk.getEventLogs({ - target: address, - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.ARBITRUM, - topics: [make_closed_topic0] - })))).flat(); - - const make_opened_topic0_logs: ILog[] = (await Promise.all(products.map((address: string) => sdk.getEventLogs({ - target: address, - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.ARBITRUM, - topics: [make_opened_topic0] - })))).flat(); - - const take_closed_topic0_logs: ILog[] = (await Promise.all(products.map((address: string) => sdk.getEventLogs({ - target: address, - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.ARBITRUM, - topics: [take_closed_topic0] - })))).flat(); - - const take_opened_topic0_logs: ILog[] = (await Promise.all(products.map((address: string) => sdk.getEventLogs({ - target: address, - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.ARBITRUM, - topics: [take_opened_topic0] - })))).flat(); - - const [makerFee, takerFee] = await Promise.all( - ['makerFee', 'takerFee'].map((method: string) => - sdk.api2.abi.multiCall({ - abi: abis[method], - calls: products.map((address: string) => ({ - target: address, - })), - chain: CHAIN.ARBITRUM - }) - ) - ); - - const makerFees = makerFee.map((res: any) => Number(res) / 10 ** 18); - const takerFees = takerFee.map((res: any) => Number(res) / 10 ** 18); - - const all: ILog[] = [ - ...make_closed_topic0_logs, - ...make_opened_topic0_logs, - ...take_closed_topic0_logs, - ...take_opened_topic0_logs - ] - const versions = [...new Set(all.map(e => contract_interface.parseLog(e)).map(e => Number(e!.args.version)))]; - const price_ = (await sdk.api2.abi.multiCall({ - abi: abis.atVersion, - calls: versions.map((version: number) => ({ - target: products[0], - params: [version] - })), - chain: CHAIN.ARBITRUM - })) - const _prices: IPrice = {} - price_.forEach((e: any) => { - const raw_price: string = e.price; - const version: string = e.version; - const price = Number(raw_price.toString().replace('-', '')) / 10 ** 18; - _prices[version] = price; - }); - - const maker_logs: ILog[] = [ - ...make_closed_topic0_logs, - ...make_opened_topic0_logs, - ] - const taker_logs: ILog[] = [ - ...take_closed_topic0_logs, - ...take_opened_topic0_logs - ] - - const makerFeesAmount = maker_logs.map((a: ILog) => { - const value = contract_interface.parseLog(a); - const price = _prices[value!.args.version] - const findIndex = products.findIndex(p => p.toLowerCase() === a.address.toLowerCase()); - const fees = makerFees[findIndex] - return ((Number(value!.args.amount) / 1e18) * price) * fees; - }).reduce((a: number, b: number) => a + b, 0) - - const takerFeesAmount = taker_logs.map((a: ILog) => { - const value = contract_interface.parseLog(a); - const price = _prices[value!.args.version] - const findIndex = products.findIndex(p => p.toLowerCase() === a.address.toLowerCase()); - const fees = takerFees[findIndex] - return ((Number(value!.args.amount) / 1e18) * price) * fees; - }).reduce((a: number, b: number) => a + b, 0) - - const dailyFees = (makerFeesAmount + takerFeesAmount); - const dailyRevenue = dailyFees; - return { - dailyFees: `${dailyFees}`, - dailyRevenue: `${dailyRevenue}`, +const fetch = async ({ getLogs, api, createBalances }: FetchOptions) => { + const dailyFees = createBalances(); + for (const product of products) { + const make_closed_topic0_logs = await getLogs({ target: product, eventAbi: make_closed_event }) + const make_opened_topic0_logs = await getLogs({ target: product, eventAbi: make_opened_event }) + const take_closed_topic0_logs = await getLogs({ target: product, eventAbi: take_closed_event }) + const take_opened_topic0_logs = await getLogs({ target: product, eventAbi: take_opened_event }) + + const [makerFees, takerFees] = await Promise.all( + ['makerFee', 'takerFee'].map((method: string) => api.multiCall({ abi: abis[method], calls: [product], })) + ); + + const all = [make_closed_topic0_logs, make_opened_topic0_logs, take_closed_topic0_logs, take_opened_topic0_logs].flat() + const versions = [...new Set(all.map(e => Number(e.version)))]; + const price_ = (await api.multiCall({ abi: abis.atVersion, target: products[0], calls: versions, })) + const _prices: IPrice = {} + price_.forEach((e: any) => { + const raw_price: string = e.price; + const version: string = e.version; + const price = Number(raw_price.toString().replace('-', '')) / 10 ** 18; + _prices[version] = price; + }); + + const maker_logs = [ + ...make_closed_topic0_logs, + ...make_opened_topic0_logs, + ] + const taker_logs = [ + ...take_closed_topic0_logs, + ...take_opened_topic0_logs + ] + + maker_logs.forEach((value: any) => { + const price = _prices[value!.version] + const fees = makerFees[0].toString() + dailyFees.addUSDValue(value.amount.toString() * price * fees / 1e36) + }) + + taker_logs.forEach((value: any) => { + const price = _prices[value!.version] + const fees = takerFees[0].toString() + dailyFees.addUSDValue(value.amount.toString() * price * fees / 1e36) + }) } + + return { dailyFees, dailyRevenue: dailyFees, } } const adapter: Adapter = { diff --git a/fees/emdx.ts b/fees/emdx.ts index 42d7517d84..410d681fa5 100644 --- a/fees/emdx.ts +++ b/fees/emdx.ts @@ -1,42 +1,24 @@ -import { Adapter, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../utils/date"; -import * as sdk from "@defillama/sdk"; -import { getBlock } from "../helpers/getBlock"; const address = '0xbfb083840b0507670b92456264164e5fecd0430b'; -const topic0 = '0x4c7b764f428c13bbea8cc8da90ebe6eef4dafeb27a4e3d9041d64208c47ca7c2'; -interface ITx { - data: string; - transactionHash: string; -} - -const fetch = async (timestamp: number): Promise => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp) - const yesterdaysTimestamp = getTimestampAtStartOfNextDayUTC(timestamp) +const fetch = async ({ createBalances, getLogs, }: FetchOptions) => { + const dailyFees = await createBalances(); - const fromBlock = (await getBlock(todaysTimestamp, CHAIN.AVAX, {})); - const toBlock = (await getBlock(yesterdaysTimestamp, CHAIN.AVAX, {})); - const logs: ITx[] = (await sdk.getEventLogs({ + const logs = (await getLogs({ target: address, - fromBlock: fromBlock, - toBlock: toBlock, - topics: [topic0], - chain: CHAIN.AVAX - })).map((e: any) => { return { data: e.data.replace('0x', ''), transactionHash: e.transactionHash } as ITx}); - const dailyFees = logs.map((tx: ITx) => { - const amount = Number('0x' + tx.data.slice(192, 256)) / 10 ** 18; - return amount; - }).reduce((a: number, b: number) => a+b,0); - return { - timestamp: timestamp, - dailyFees: `${dailyFees}`, - }; + eventAbi: 'event PositionChanged (address indexed trader, address indexed amm, uint256 margin, uint256 positionNotional, int256 exchangedPositionSize, uint256 fee, int256 positionSizeAfter, int256 realizedPnl, int256 unrealizedPnlAfter, uint256 badDebt, uint256 liquidationPenalty, uint256 spotPrice, int256 fundingPayment)' + })) + logs.forEach((tx: any) => { + const fee = Number(tx.fee) / 10 ** 18; + dailyFees.addUSDValue(fee); + }) + return { dailyFees, }; } const adapter: Adapter = { - version: 1, + version: 2, adapter: { [CHAIN.AVAX]: { fetch: fetch, diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index 552399383e..04028af8e9 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -368,12 +368,8 @@ const getLiquidityRevenueFromTo = async ( const { fromTimestamp, toTimestamp, api } = options; const tokens: string[] = await (await liquidityResolver(api)).listedTokens(); - const collectRevenueLogs: [string, BigNumber][] = (await sdk.getEventLogs({ + const collectRevenueLogs: [string, BigNumber][] = (await options.getLogs({ target: config.liquidity, - fromBlock: (await getBlock(api.chain, fromTimestamp)).number, - toBlock: (await getBlock(api.chain, toTimestamp)).number, - chain: api.chain, - onlyArgs: true, eventAbi: "event LogCollectRevenue(address indexed token, uint256 indexed amount)", })) as [string, BigNumber][]; diff --git a/fees/goku-money/index.ts b/fees/goku-money/index.ts index c88d259445..c934e8b6a7 100644 --- a/fees/goku-money/index.ts +++ b/fees/goku-money/index.ts @@ -37,28 +37,20 @@ const PYTH_CONFIG = { type PYTH_CONFIG_TYPE = typeof PYTH_CONFIG; type PYTH_CONFIG_KEYS = keyof PYTH_CONFIG_TYPE; -const fetchGaiRevenue = async (fromBlock: number, toBlock: number, balances: sdk.Balances) => { - const logs = await sdk.getEventLogs({ +const fetchGaiRevenue = async (getLogs: any, balances: sdk.Balances) => { + const logs = await getLogs({ targets: BORROW_CONTRACT_ADDRESS, - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.MANTA as Chain, eventAbi: "event GAIBorrowingFeePaid(address indexed _borrower, uint256 _GAIFee)", - onlyArgs: true, }); logs.forEach(log => balances.add('0xcd91716ef98798A85E79048B78287B13ae6b99b2', log._GAIFee)) }; -const fetchCollateralRedemptionRevenue = async (fromBlock: number, toBlock: number, balances: sdk.Balances) => { +const fetchCollateralRedemptionRevenue = async (getLogs: any, balances: sdk.Balances) => { for (const token of Object.keys(PYTH_CONFIG) as PYTH_CONFIG_KEYS[]) { const { contractAddress, address, } = PYTH_CONFIG[token]; - const logs = await sdk.getEventLogs({ + const logs = await getLogs({ target: contractAddress, - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.MANTA as Chain, - onlyArgs: true, eventAbi: "event Redemption(uint256 _attemptedGAIAmount, uint256 _actualGAIAmount, uint256 _COLSent, uint256 _COLFee)", }); @@ -71,11 +63,10 @@ const adapter: Adapter = { version: 2, adapter: { [CHAIN.MANTA]: { - fetch: async ({ getFromBlock, getToBlock }: FetchOptions) => { + fetch: async ({getLogs }: FetchOptions) => { const balances = new sdk.Balances({ chain: CHAIN.MANTA as Chain }); - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) - await fetchGaiRevenue(fromBlock, toBlock, balances); - await fetchCollateralRedemptionRevenue(fromBlock, toBlock, balances); + await fetchGaiRevenue(getLogs, balances); + await fetchCollateralRedemptionRevenue(getLogs, balances); const totalRevenue = await balances.getUSDString() return { diff --git a/fees/goldfinch.ts b/fees/goldfinch.ts index 6278a11d2d..d4446356c8 100644 --- a/fees/goldfinch.ts +++ b/fees/goldfinch.ts @@ -1,35 +1,5 @@ -// contract -// 0xb01b315e32d1d9b5ce93e296d483e1f0aad39e75 -// topic: 0x9bbd517758fbae61197f1c1c04c8614064e89512dbaf4350dcdf76fcaa5e2161 -// poolAmount / 1e6 - -// 0xd20508E1E971b80EE172c73517905bfFfcBD87f9 -// topic: 0x4f2ce4e40f623ca765fc0167a25cb7842ceaafb8d82d3dec26ca0d0e0d2d4896 // poolCreated -// topic: 1 // pool address - -// pool address -// topic: 0xd1055dc2c2a003a83dfacb1c38db776eab5ef89d77a8f05a3512e8cf57f953ce -// (interestAmount - reserveAmount) / 1e6 - -// --- rev -// 0xb01b315e32d1d9b5ce93e296d483e1f0aad39e75 -// topic: 0xf3583f178a8d4f8888c3683f8e948faf9b6eb701c4f1fab265a6ecad1a1ddebb -// amount / 1e6 - -// 0x8481a6ebaf5c7dabc3f7e09e44a89531fd31f822 -// topic: 0xf3583f178a8d4f8888c3683f8e948faf9b6eb701c4f1fab265a6ecad1a1ddebb -// amount / 1e6 - - -// pool address -// topic: 0xf3583f178a8d4f8888c3683f8e948faf9b6eb701c4f1fab265a6ecad1a1ddebb -// amount / 1e6 - -import { FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getBlock } from "../helpers/getBlock"; -import * as sdk from "@defillama/sdk"; -import { EventLog } from "ethers"; const pools: string[] = [ @@ -69,64 +39,37 @@ const pools: string[] = [ const core_pool = '0xb01b315e32d1d9b5ce93e296d483e1f0aad39e75'; const senior_pool = '0x8481a6ebaf5c7dabc3f7e09e44a89531fd31f822'; -const topic0_interest_collected = '0x9bbd517758fbae61197f1c1c04c8614064e89512dbaf4350dcdf76fcaa5e2161'; -const topic0_payment_appli = '0xd1055dc2c2a003a83dfacb1c38db776eab5ef89d77a8f05a3512e8cf57f953ce'; -const topic0_reserve_fund_collect = '0xf3583f178a8d4f8888c3683f8e948faf9b6eb701c4f1fab265a6ecad1a1ddebb' -const fetchFees = async (timestamp: number): Promise => { - const ONE_DAY_IN_SECONDS = 86400; - const toTimestamp = timestamp; - const fromTimestamp = timestamp - ONE_DAY_IN_SECONDS; - const toBlock = await getBlock(toTimestamp, 'ethereum', {}); - const fromBlock = await getBlock(fromTimestamp, 'ethereum', {}); +const fetchFees = async ({ createBalances, getLogs, }: FetchOptions) => { + const dailyFees = createBalances(); + const dailyRevenue = createBalances(); + const dailySupplySideRevenue = createBalances(); - const logs_interest_collect: EventLog[] = (await sdk.getEventLogs({ + const InterestCollected = (await getLogs({ target: core_pool, - fromBlock: fromBlock, - toBlock: toBlock, - topics: [topic0_interest_collected], - chain: 'ethereum' - })) as EventLog[]; - const pool_interest_collected = logs_interest_collect - .reduce((a: number, b: EventLog) => a + Number('0x' + b.data.replace('0x', '').slice(0, 64)), 0) / 1e6; - - const logs_pool_payment_applie: EventLog[] = (await Promise.all(pools.map(async (pool: string) => sdk.getEventLogs({ - target: pool, - fromBlock: fromBlock, - toBlock: toBlock, - topics: [topic0_payment_appli], - chain: 'ethereum' - })))).flat() as EventLog[]; - - const logs_reserve_fund_collect: EventLog[] = (await Promise.all([...pools, core_pool, senior_pool].map(async (pool: string) => sdk.getEventLogs({ - target: pool, - fromBlock: fromBlock, - toBlock: toBlock, - topics: [topic0_reserve_fund_collect], - chain: 'ethereum' - })))).flat() as EventLog[]; - - const pool_payment_applied = logs_pool_payment_applie.map((log: EventLog) => { - const data = log.data.replace('0x', '') - const interestAmount = Number('0x' + data.slice(0, 64)) / 1e6; - const reserveAmount = Number('0x' + data.slice(64 * 3, (64 * 3) + 64)) / 1e6; - return interestAmount - reserveAmount; - }).reduce((a: number, b: number) => a + b, 0); - - const pool_reserve_fund_collect = logs_reserve_fund_collect.map((log: EventLog) => { - const amount = Number(log.data) / 1e6; - return amount; - }).reduce((a: number, b: number) => a + b, 0); - const dailyFees = pool_interest_collected + pool_payment_applied + pool_reserve_fund_collect; - const dailyRevenue = pool_reserve_fund_collect; - const dailySupplySideRevenue = dailyFees - dailyRevenue; - - return { - dailyFees: dailyFees.toString(), - dailyRevenue: dailyRevenue.toString(), - dailySupplySideRevenue: dailySupplySideRevenue > 0 ? dailySupplySideRevenue.toString() : '0', - timestamp - } + eventAbi: 'event InterestCollected (address indexed payer, uint256 poolAmount, uint256 reserveAmount)' + })) + const PaymentApplied = (await getLogs({ + targets: pools, + eventAbi: 'event PaymentApplied (address indexed payer, address indexed pool, uint256 interestAmount, uint256 principalAmount, uint256 remainingAmount, uint256 reserveAmount)' + })) + const ReserveFundsCollected = (await getLogs({ + targets: pools.concat([core_pool, senior_pool]), + eventAbi: 'event ReserveFundsCollected (address indexed user, uint256 amount)' + })) + InterestCollected.forEach((log: any) => { + dailyFees.addUSDValue(log.poolAmount.toString() / 1e6) + dailySupplySideRevenue.addUSDValue(log.poolAmount.toString() / 1e6) + }); + PaymentApplied.forEach((log: any) => { + dailyFees.addUSDValue((log.interestAmount.toString() - log.reserveAmount.toString()) / 1e6) + dailySupplySideRevenue.addUSDValue((log.interestAmount.toString() - log.reserveAmount.toString()) / 1e6) + }); + ReserveFundsCollected.forEach((log: any) => dailyFees.addUSDValue(log.amount.toString() / 1e6)); + ReserveFundsCollected.forEach((log: any) => dailyRevenue.addUSDValue(log.amount.toString() / 1e6)); + + + return { dailyFees, dailyRevenue, dailySupplySideRevenue } as any } const adapters: SimpleAdapter = { @@ -135,6 +78,7 @@ const adapters: SimpleAdapter = { fetch: fetchFees, start: 1629331200 } - } + }, + version: 2, } export default adapters; diff --git a/fees/hopr/index.ts b/fees/hopr/index.ts index ff1c9f91be..7a835e409f 100644 --- a/fees/hopr/index.ts +++ b/fees/hopr/index.ts @@ -25,7 +25,7 @@ interface ITx { transactionHash: string; } -const fetch = async ({ getFromBlock, getToBlock, toTimestamp }: FetchOptions) => { +const fetch = async ({ getFromBlock, getToBlock, toTimestamp, }: FetchOptions) => { const provider = getProvider('xdai'); const iface = new ethers.Interface(['function execTransactionFromModule(address to,uint256 value,bytes data,uint8 operation)']) diff --git a/fees/lybra-finance.ts b/fees/lybra-finance.ts index d91112d73b..4fcb2a3d6c 100644 --- a/fees/lybra-finance.ts +++ b/fees/lybra-finance.ts @@ -1,47 +1,20 @@ -import { FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import * as sdk from "@defillama/sdk"; -import { getBlock } from "../helpers/getBlock"; -import { getPrices } from "../utils/prices"; -import { Chain } from "@defillama/sdk/build/general"; -import { ethers } from "ethers"; - const address = '0x97de57eC338AB5d51557DA3434828C5DbFaDA371' -const topic0_fees_distibute = '0xec0804e8e1decb589af9c4ba8ebfbacd3be98929d4d53457dfd186061f489f04'; const event_fees_distibute = 'event FeeDistribution(address indexed feeAddress,uint256 feeAmount,uint256 timestamp)'; -const contract_interface = new ethers.Interface([ - event_fees_distibute -]); -const fetch = async (timestamp: number): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - const fromBlock = (await getBlock(fromTimestamp, CHAIN.ETHEREUM, {})); - const toBlock = (await getBlock(toTimestamp, CHAIN.ETHEREUM, {})); - const dailyFees = (await sdk.getEventLogs({ - target: address, - fromBlock: fromBlock, - toBlock: toBlock, - topics: [topic0_fees_distibute], - chain: CHAIN.ETHEREUM - })).map((e: any) => contract_interface.parseLog(e)) - .map((e: any) => { - return Number(e!.args.feeAmount) / 10 ** 18; - }).reduce((a: number, b: number) => a + b, 0) +const fetch = async ({ createBalances, getLogs, }: FetchOptions) => { + const logs = await getLogs({ target: address, eventAbi: event_fees_distibute }) + const dailyFees = createBalances() + logs.forEach((tx: any) => dailyFees.addUSDValue(Number(tx.feeAmount) / 10 ** 18)) const dailyRevenue = dailyFees; const dailyHoldersRevenue = dailyFees; - return { - dailyFees: `${dailyFees}`, - dailyRevenue: `${dailyRevenue}`, - dailyHoldersRevenue: `${dailyHoldersRevenue}`, - timestamp - } - + return { dailyRevenue, dailyHoldersRevenue, dailyFees, }; } - const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch, diff --git a/fees/lybra-v2.ts b/fees/lybra-v2.ts index 9447186bd3..b9dcf7b450 100644 --- a/fees/lybra-v2.ts +++ b/fees/lybra-v2.ts @@ -1,47 +1,22 @@ -import { FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import * as sdk from "@defillama/sdk"; -import { getBlock } from "../helpers/getBlock"; -import { getPrices } from "../utils/prices"; -import { Chain } from "@defillama/sdk/build/general"; -import { ethers } from "ethers"; + const address = '0xa980d4c0C2E48d305b582AA439a3575e3de06f0E' -const topic0_fees_distibute = '0xec0804e8e1decb589af9c4ba8ebfbacd3be98929d4d53457dfd186061f489f04'; const event_fees_distibute = 'event FeeDistribution(address indexed feeAddress,uint256 feeAmount,uint256 timestamp)'; -const contract_interface = new ethers.Interface([ - event_fees_distibute -]); -const fetch = async (timestamp: number): Promise => { - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - const fromBlock = (await getBlock(fromTimestamp, CHAIN.ETHEREUM, {})); - const toBlock = (await getBlock(toTimestamp, CHAIN.ETHEREUM, {})); - const dailyFees = (await sdk.getEventLogs({ - target: address, - fromBlock: fromBlock, - toBlock: toBlock, - topics: [topic0_fees_distibute], - chain: CHAIN.ETHEREUM - })).map((e: any) => contract_interface.parseLog(e)) - .map((e: any) => { - return Number(e!.args.feeAmount) / 10 ** 18; - }).reduce((a: number, b: number) => a + b, 0) +const fetch = async ({ createBalances, getLogs, }: FetchOptions) => { + const logs = await getLogs({ target: address, eventAbi: event_fees_distibute }) + const dailyFees = createBalances() + logs.forEach((tx: any) => dailyFees.addUSDValue(Number(tx.feeAmount) / 10 ** 18)) const dailyRevenue = dailyFees; const dailyHoldersRevenue = dailyFees; - return { - dailyFees: `${dailyFees}`, - dailyRevenue: `${dailyRevenue}`, - dailyHoldersRevenue: `${dailyHoldersRevenue}`, - timestamp - } - + return { dailyRevenue, dailyHoldersRevenue, dailyFees, }; } - const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: fetch, diff --git a/fees/monarchpay/index.ts b/fees/monarchpay/index.ts index ad5910b5a6..a060ec70b0 100644 --- a/fees/monarchpay/index.ts +++ b/fees/monarchpay/index.ts @@ -1,29 +1,18 @@ import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import * as sdk from "@defillama/sdk"; const address = '0x0296fD8b25D2f7B0B434eD4423BFA0CC47D08276'; -interface ITx { - data: string; - transactionHash: string; -} - -const fetch = async ({ getFromBlock, getToBlock }: FetchOptions) => { - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) - const logs: ITx[] = (await sdk.getEventLogs({ +const fetch = async ({ getLogs }: FetchOptions) => { + const logs = (await getLogs({ target: address, - fromBlock: fromBlock, - toBlock: toBlock, topics: ['0xfee17e5caac7cbef9c34199cc11ac3c5a17abb3b07d5835053be283278606e43'], - chain: CHAIN.KAVA - })).map((e: any) => { return { data: e.data.replace('0x', ''), transactionHash: e.transactionHash } as ITx}); - const dailyFees = logs.map((tx: ITx) => { - const amount = Number('0x' + tx.data) / 10 ** 6; - return amount; - }).reduce((a: number, b: number) => a+b,0); + })) + const dailyFees = logs.map((tx: any) => { + return Number('0x' + tx.data) / 10 ** 6; + }).reduce((a: number, b: number) => a + b, 0); return { - dailyFees: `${dailyFees}` + dailyFees: dailyFees }; } diff --git a/fees/perpetual-protocol.ts b/fees/perpetual-protocol.ts index 90bfd0e155..bea056aab6 100644 --- a/fees/perpetual-protocol.ts +++ b/fees/perpetual-protocol.ts @@ -1,53 +1,22 @@ -import { FetchResultFees, SimpleAdapter } from "../adapters/types"; -import * as sdk from "@defillama/sdk"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { ethers } from "ethers"; -import { getBlock } from "../helpers/getBlock"; const address = '0x82ac2ce43e33683c58be4cdc40975e73aa50f459'; -const topic0_position_change = '0x968bc4f738eae0486dc6736c4b427dbafa4acfdf6eaf223337791ddeb3a56247' const event_postion_change = 'event PositionChanged(address indexed trader,address indexed baseToken,int256 exchangedPositionSize,int256 exchangedPositionNotional,uint256 fee,int256 openNotional,int256 realizedPnl,uint256 sqrtPriceAfterX96)'; -const contract_interface = new ethers.Interface([ - event_postion_change, -]); -interface ILog { - data: string; - transactionHash: string; - topics: string[]; -} - -const fetchFees = async (timestamp: number): Promise => { - const toTimestamp = timestamp - const fromTimestamp = timestamp - 60 * 60 * 24 - const fromBlock = (await getBlock(fromTimestamp, CHAIN.OPTIMISM, {})) - const toBlock = (await getBlock(toTimestamp, CHAIN.OPTIMISM, {})) - const logs_position_chnage: ILog[] = (await sdk.getEventLogs({ - target: address, - topics: [topic0_position_change], - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.OPTIMISM - })) as ILog[]; +const fetchFees = async ({ createBalances, getLogs, }: FetchOptions) => { + const logs = await getLogs({ target: address, eventAbi: event_postion_change }) + const dailyFees = createBalances() + logs.map((e: any) => { dailyFees.addUSDValue(Number(e.fee) / 10 ** 18) }) - const fees_details = logs_position_chnage.map((e: ILog) => { - const value = contract_interface.parseLog(e); - return Number(value!.args.fee) / 10 ** 18; - }).reduce((a: number, b: number) => a + b, 0) - - const dailyFees = fees_details - const dailyRevenue = dailyFees * 0.2; - const dailySupplySideRevenue = dailyFees * 0.8; - return { - dailyFees: `${dailyFees}`, - dailyRevenue: `${dailyRevenue}`, - dailySupplySideRevenue: `${dailySupplySideRevenue}`, - timestamp - } + const dailyRevenue = dailyFees.clone(0.2) + const dailySupplySideRevenue = dailyFees.clone(0.8) + return { dailyFees, dailyRevenue, dailySupplySideRevenue, } } const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.OPTIMISM]: { fetch: fetchFees, diff --git a/fees/radiant.ts b/fees/radiant.ts index bd84077234..e1de3297e3 100644 --- a/fees/radiant.ts +++ b/fees/radiant.ts @@ -1,98 +1,39 @@ -import { Adapter, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getTimestampAtStartOfDayUTC, getTimestampAtStartOfNextDayUTC } from "../utils/date"; -import * as sdk from "@defillama/sdk"; -import { getBlock } from "../helpers/getBlock"; import { Chain } from "@defillama/sdk/build/general"; -const topic0NewTransferAdded = '0xc5e1cdb94ac0a9f4f65e1a23fd59354025cffdf472eb03020ac4ba0e92d9969f'; type TAddress = { [l: string | Chain]: string; } -const address: TAddress = { +const address: TAddress = { [CHAIN.ARBITRUM]: '0xE10997B8d5C6e8b660451f61accF4BBA00bc901f', [CHAIN.BSC]: '0xcebdff400A23E5Ad1CDeB11AfdD0087d5E9dFed8', [CHAIN.ETHEREUM]: '0x28E395a54a64284DBA39652921Cd99924f4e3797', [CHAIN.BASE]: '0xC49b4D1e6CbbF4cAEf542f297449696d8B47E411' } -interface ITx { - data: string; - transactionHash: string; - topics: string[]; -} - -interface IData { - contract_address: string; - amount: number; -} - +const fetch = async ({ chain, createBalances, getLogs }: FetchOptions) => { + const dailyFees = createBalances() + const logs = await getLogs({ target: address[chain], eventAbi: 'event NewTransferAdded (address indexed asset, uint256 lpUsdValue)' }) + logs.forEach((log) => dailyFees.addUSDValue(Number(log.lpUsdValue) / 1e18)) + const dailySupplySideRevenue = dailyFees.clone(0.25); + const dailyHoldersRevenue = dailyFees.clone(0.60); + const dailyProtocolRevenue = dailyFees.clone(0.15); + const dailyRevenue = dailyFees.clone(0.85); -const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { - const todaysTimestamp = getTimestampAtStartOfDayUTC(timestamp) - const yesterdaysTimestamp = getTimestampAtStartOfNextDayUTC(timestamp) - - const fromBlock = (await getBlock(todaysTimestamp, chain, {})); - const toBlock = (await getBlock(yesterdaysTimestamp, chain, {})); - const logs: ITx[] = (await sdk.getEventLogs({ - target: address[chain], - fromBlock: fromBlock, - toBlock: toBlock, - topics: [topic0NewTransferAdded], - chain: chain - })).map((e: any) => { return { data: e.data.replace('0x', ''), transactionHash: e.transactionHash, topics: e.topics } as ITx}); - const raw_data_logs: IData[] = logs.map((tx: ITx) => { - const amount = Number('0x'+tx.data); - const address = tx.topics[1]; - const contract_address = '0x' + address.slice(26, address.length); - return { - amount, - contract_address, - tx: tx.transactionHash - }; - }) - const feesAmuntsUSD: any[] = raw_data_logs.map((d: any) => { - return {amount: d.amount / 10 ** 18, tx: d.tx, a: d.contract_address} // debug - }); - const dailyFee = feesAmuntsUSD.reduce((a: number, b: any) => a+b.amount, 0); - const supplySideRev = dailyFee * 0.25; - const dailyHoldersRevenue = dailyFee * .60; - const protocolRev = dailyFee * .15; - - return { - dailyFees: dailyFee.toString(), - dailySupplySideRevenue: supplySideRev.toString(), - dailyHoldersRevenue: dailyHoldersRevenue.toString(), - dailyProtocolRevenue: protocolRev.toString(), - dailyRevenue: (protocolRev + dailyHoldersRevenue).toString(), - timestamp - } - } + return { dailyRevenue, dailyHoldersRevenue, dailyProtocolRevenue, dailySupplySideRevenue, dailyFees, }; } const adapter: Adapter = { + version: 2, adapter: { - [CHAIN.ARBITRUM]: { - fetch: fetch(CHAIN.ARBITRUM), - start: 1679097600, - }, - [CHAIN.BSC]: { - fetch: fetch(CHAIN.BSC), - start: 1679788800, - }, - [CHAIN.ETHEREUM]: { - fetch: fetch(CHAIN.ETHEREUM), - start: 1698796800, - }, - [CHAIN.BASE]: { - fetch: fetch(CHAIN.BASE), - start: 1719592253, - }, + [CHAIN.ARBITRUM]: { fetch, start: 1679097600, }, + [CHAIN.BSC]: { fetch, start: 1679788800, }, + [CHAIN.ETHEREUM]: { fetch, start: 1698796800, }, + [CHAIN.BASE]: { fetch, start: 1719592253, }, } } - export default adapter; diff --git a/fees/usdo.ts b/fees/usdo.ts index b3dae9427d..3ddaef545d 100644 --- a/fees/usdo.ts +++ b/fees/usdo.ts @@ -1,4 +1,4 @@ -import { FetchResultFees, SimpleAdapter } from "../adapters/types" +import { FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types" import * as sdk from "@defillama/sdk"; import { CHAIN } from "../helpers/chains"; import { getBlock } from "../helpers/getBlock"; @@ -35,34 +35,21 @@ const contract_interface = new ethers.Interface([ event_increase_value, ]); -const fetch = async (timestamp: number): Promise => { +const fetch = async ({ getLogs }: FetchOptions) => { throw new Error("I think neither of these should be counted as fees? or we just count 0.5% of redeemed USDO as fees?") - const fromTimestamp = timestamp - 60 * 60 * 24 - const toTimestamp = timestamp - const fromBlock = (await getBlock(fromTimestamp, CHAIN.ONUS, {})); - const toBlock = (await getBlock(toTimestamp, CHAIN.ONUS, {})); - const logs_increase_value = (await sdk.getEventLogs({ + const logs_increase_value = (await getLogs({ target: usdo, - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.ONUS, topics: [topic0_increase_value] })).map(((e: any) => contract_interface.parseLog(e))); - const logs_tx: string[] = (await sdk.getEventLogs({ + const logs_tx: string[] = (await getLogs({ target: usdo, - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.ONUS, topics: [topic0_withdraw] })).map((e: any) => e.transactionHash.toLowerCase()); - const logs: ILog[][] = (await Promise.all(pools.map((address: string) => sdk.getEventLogs({ + const logs: ILog[][] = (await Promise.all(pools.map((address: string) => getLogs({ target: address, - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.ONUS, topics: [topic0_swap] })))) as any; @@ -82,7 +69,7 @@ const fetch = async (timestamp: number): Promise => { const tokens1 = underlyingToken1; const rawCoins = [...tokens0, ...tokens1].map((e: string) => `${CHAIN.ONUS}:${e}`); const coins = [...new Set(rawCoins)] - const prices = await getPrices(coins, timestamp); + const prices = await getPrices(coins); const untrackVolumes: number[] = pools.map((_: string, index: number) => { const token0Decimals = (prices[`${CHAIN.ONUS}:${tokens0[index]}`]?.decimals || 0) @@ -128,6 +115,7 @@ const fetch = async (timestamp: number): Promise => { } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ONUS]: { fetch, diff --git a/fees/vaultka.ts b/fees/vaultka.ts index d3afb7d155..4d75f31177 100644 --- a/fees/vaultka.ts +++ b/fees/vaultka.ts @@ -1,61 +1,23 @@ -import { FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getBlock } from "../helpers/getBlock"; -import * as sdk from "@defillama/sdk"; +import { addTokensReceived } from "../helpers/token"; -const topic0_evt_transfer = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"; -const topic2_evt_transfer = "0x0000000000000000000000001b5e59759577fa0079e2a35bc89143bc0603d546"; -const topic2_evt_transfer_2 = "0x000000000000000000000000d5ac6419635aa6352ebade0ab42d25fbfa570d21"; const usdc = "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"; const usdce = "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8"; -interface ILog { - data: string; - transactionHash: string; - topics: string[]; - address: string; -} +const fetchFees = async (options: FetchOptions) => { + const dailyFees = await addTokensReceived({ + options, tokens: [usdc, usdce], targets: [ + '0x1b5e59759577fa0079e2a35bc89143bc0603d546', + '0xD5aC6419635Aa6352EbaDe0Ab42d25FbFa570D21', + ] + }) -const fetchFees = async (timestamp: number): Promise => { - const toTimestamp = timestamp; - const fromTimestamp = timestamp - 60 * 60 * 24; // 24 hours before - const fromBlock = await getBlock(fromTimestamp, CHAIN.ARBITRUM, {}); - const toBlock = await getBlock(toTimestamp, CHAIN.ARBITRUM, {}); - - // Fetch logs for the first topic - const logsForFirstTopic: ILog[] = (await sdk.getEventLogs({ - targets: [usdc, usdce], - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.ARBITRUM, - topics: [topic0_evt_transfer, null, topic2_evt_transfer], // Adjusted for a single topic - })) as ILog[]; - - // Fetch logs for the second topic - const logsForSecondTopic: ILog[] = (await sdk.getEventLogs({ - targets: [usdc, usdce], - toBlock: toBlock, - fromBlock: fromBlock, - chain: CHAIN.ARBITRUM, - topics: [topic0_evt_transfer, null, topic2_evt_transfer_2], // Adjusted for a single topic - })) as ILog[]; - - // Combine logs from both calls - const combinedLogs = [...logsForFirstTopic, ...logsForSecondTopic]; - - // Calculate daily fees from combined logs - const dailyFees = combinedLogs.reduce((acc: number, log: ILog) => { - const amount = Number(log.data) / 10 ** 6; // Assuming 6 decimals for USDC and USDC.e - return acc + amount; - }, 0); - - return { - dailyFees: `${dailyFees}`, - timestamp, - }; + return { dailyFees, } }; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: fetchFees, From 74104534cc82292a833e6c6dd7cbf111cb56299d Mon Sep 17 00:00:00 2001 From: cheng Date: Thu, 26 Sep 2024 21:26:07 +0200 Subject: [PATCH 1544/1590] feat: add bifrost fees adapter --- fees/bifrost-liquid-staking/index.ts | 27 +++++++++++++++++++++++++++ helpers/chains.ts | 1 + 2 files changed, 28 insertions(+) create mode 100644 fees/bifrost-liquid-staking/index.ts diff --git a/fees/bifrost-liquid-staking/index.ts b/fees/bifrost-liquid-staking/index.ts new file mode 100644 index 0000000000..948560990a --- /dev/null +++ b/fees/bifrost-liquid-staking/index.ts @@ -0,0 +1,27 @@ +import { CHAIN } from "../../helpers/chains"; +import { FetchOptions } from "../../adapters/types"; +import fetchURL from "../../utils/fetchURL"; + + + + +const fetch = async (options: FetchOptions) => { + const startTime = new Date(options.startTimestamp * 1000).toISOString().split("T")[0] + const res = await fetchURL('https://dapi.bifrost.io/api/dapp/stats') + const { dailyFees, dailyRevenue, totalRevenue, totalFees } = res.find(v => v.date === startTime) + + return { dailyFees, dailyRevenue, totalRevenue, totalFees, timestamp: options.startTimestamp }; +}; + + +const adapter: any = { + version: 2, + adapter: { + [CHAIN.BIFROST]: { + fetch, + start: 1640995200, + }, + }, +}; + +export default adapter; diff --git a/helpers/chains.ts b/helpers/chains.ts index 12ee4a3768..05a1f83ab6 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -6,6 +6,7 @@ export enum CHAIN { BOBA = "boba", BOBA_BNB = "boba_bnb", BSC = "bsc", + BIFROST = "bifrost", CELO = "celo", ETHEREUM = "ethereum", FANTOM = "fantom", From d9ec4268598e472f492ce05c2bb35c6b1499c757 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 27 Sep 2024 01:36:16 +0000 Subject: [PATCH 1545/1590] fix error type check --- fees/usdo.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fees/usdo.ts b/fees/usdo.ts index 3ddaef545d..762ea5b24a 100644 --- a/fees/usdo.ts +++ b/fees/usdo.ts @@ -35,7 +35,7 @@ const contract_interface = new ethers.Interface([ event_increase_value, ]); -const fetch = async ({ getLogs }: FetchOptions) => { +const fetch = async ({ getLogs, startOfDay }: FetchOptions) => { throw new Error("I think neither of these should be counted as fees? or we just count 0.5% of redeemed USDO as fees?") const logs_increase_value = (await getLogs({ @@ -69,7 +69,7 @@ const fetch = async ({ getLogs }: FetchOptions) => { const tokens1 = underlyingToken1; const rawCoins = [...tokens0, ...tokens1].map((e: string) => `${CHAIN.ONUS}:${e}`); const coins = [...new Set(rawCoins)] - const prices = await getPrices(coins); + const prices = await getPrices(coins, startOfDay); const untrackVolumes: number[] = pools.map((_: string, index: number) => { const token0Decimals = (prices[`${CHAIN.ONUS}:${tokens0[index]}`]?.decimals || 0) @@ -110,7 +110,6 @@ const fetch = async ({ getLogs }: FetchOptions) => { return { dailyFees: `${dailyFee}`, dailyRevenue: `${dailyFee}`, - timestamp } } From 8b0db349712e3653b83d65ed29658f31bf487617 Mon Sep 17 00:00:00 2001 From: Rajeeb Kumar Malik Date: Fri, 27 Sep 2024 13:28:34 +0530 Subject: [PATCH 1546/1590] Update index.ts --- dexs/filament/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/filament/index.ts b/dexs/filament/index.ts index 12e634d824..7c3ef58e11 100644 --- a/dexs/filament/index.ts +++ b/dexs/filament/index.ts @@ -18,7 +18,7 @@ const fetch = async () => { const adapter: SimpleAdapter = { adapter: { - near: { + sei: { fetch, start: 100601154, runAtCurrTime: true, @@ -26,4 +26,4 @@ const adapter: SimpleAdapter = { }, }; -export default adapter; \ No newline at end of file +export default adapter; From 3d918b1370ede612a4862ed3bc5f6f90bae66e63 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 27 Sep 2024 19:20:52 +0200 Subject: [PATCH 1547/1590] Use Indexer's token transfer api --- adapters/types.ts | 2 +- fees/gnd-protocol.ts | 6 +-- fees/pendle.ts | 36 +++++++------- fees/pocket-universe.ts | 24 ++++++++++ fees/sharpe-earn/index.ts | 4 -- fees/synthetix.ts | 6 +-- fees/tangible-rwa.ts | 11 ++--- fees/woofi.ts | 6 +-- fees/y2k/y2k-finance-v2.ts | 3 +- fees/y2k/y2k-finance.ts | 3 +- fees/zerion-wallet.ts | 7 +-- helpers/token.ts | 97 +++++++++++++++++++++++++++----------- package-lock.json | 7 ++- 13 files changed, 134 insertions(+), 78 deletions(-) create mode 100644 fees/pocket-universe.ts diff --git a/adapters/types.ts b/adapters/types.ts index 7c9f4fa55b..ded25b0476 100644 --- a/adapters/types.ts +++ b/adapters/types.ts @@ -69,7 +69,7 @@ export type IStartTimestamp = () => Promise export type BaseAdapter = { [chain: string]: { - start: IStartTimestamp | number + start?: IStartTimestamp | number fetch: Fetch | FetchV2; runAtCurrTime?: boolean; customBackfill?: Fetch | FetchV2; diff --git a/fees/gnd-protocol.ts b/fees/gnd-protocol.ts index 20be25da44..80cac092ed 100644 --- a/fees/gnd-protocol.ts +++ b/fees/gnd-protocol.ts @@ -1,6 +1,6 @@ import ADDRESSES from '../helpers/coreAssets.json' import { Chain } from "@defillama/sdk/build/general"; -import { Adapter, ChainBlocks, FetchOptions, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { addTokensReceived } from '../helpers/token'; @@ -13,7 +13,7 @@ const address_buyback: TAddress = { } const fetch = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { + return async (options: FetchOptions) => { const dividends = await addTokensReceived({ tokens: [ADDRESSES.arbitrum.WETH], options, fromAddressFilter: '0xd70811f1e4992aa051d54e29a04c8925b32fba7d', target: '0x535ec56479892d9c02fe2bb86cebf7ed62e81131' }) const logs_fund_disposit = (await options.getLogs({ @@ -31,7 +31,6 @@ const fetch = (chain: Chain) => { dailyRevenue: dailyRevenue, dailyHoldersRevenue: dailyRevenue, dailySupplySideRevenue: dividends, - timestamp } } } @@ -44,6 +43,7 @@ const methodology = { } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: fetch(CHAIN.ARBITRUM), diff --git a/fees/pendle.ts b/fees/pendle.ts index 80510599e6..98e22c25c0 100644 --- a/fees/pendle.ts +++ b/fees/pendle.ts @@ -103,23 +103,21 @@ const fetch = (chain: Chain) => { } const dailySupplySideFees = createBalances(); - await Promise.all( - markets.map(async (market) => { - const allSwapEvent = await getLogs({ - target: market, - eventAbi: ABI.marketSwapEvent, - }); + const allSwapEvents = await getLogs({ + targets: markets, + eventAbi: ABI.marketSwapEvent, + flatten: false, + }); - for (const swapEvent of allSwapEvent) { - const netSyFee = swapEvent.netSyFee; - const netSyToReserve = swapEvent.netSyToReserve; - dailySupplySideFees.add( - marketToSy.get(market)!, - netSyFee - netSyToReserve - ); // excluding revenue fee - } + markets.forEach((market, i) => { + const token = marketToSy.get(market); + const logs = allSwapEvents[i] + logs.forEach((log: any) => { + const netSyFee = log.netSyFee; + const netSyToReserve = log.netSyToReserve; + dailySupplySideFees.add(token!, netSyFee - netSyToReserve); // excluding revenue fee }) - ); + }) const dailyRevenue = await addTokensReceived({ options, @@ -172,8 +170,8 @@ const fetch = (chain: Chain) => { assetAmountRevenue, isBridged ? { - skipChain: true, - } + skipChain: true, + } : undefined ); @@ -183,8 +181,8 @@ const fetch = (chain: Chain) => { assetAmountSupplySide, isBridged ? { - skipChain: true, - } + skipChain: true, + } : undefined ); } diff --git a/fees/pocket-universe.ts b/fees/pocket-universe.ts new file mode 100644 index 0000000000..4598981aba --- /dev/null +++ b/fees/pocket-universe.ts @@ -0,0 +1,24 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { addTokensReceived } from "../helpers/token"; + +const fetch: any = async (options: FetchOptions) => { + const dailyFees = await addTokensReceived({ + options, targets: [ + '0x77777D91c0B8Ec9984a05302E4Ef041dcCf77FeE', + ] + }) + + return { dailyFees, } +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ETHEREUM]: { + fetch, + start: 0, + }, + }, +}; +export default adapter; diff --git a/fees/sharpe-earn/index.ts b/fees/sharpe-earn/index.ts index bfec300eba..8f6bc4a7c4 100644 --- a/fees/sharpe-earn/index.ts +++ b/fees/sharpe-earn/index.ts @@ -1,9 +1,5 @@ -import { ethers } from "ethers"; -import * as sdk from "@defillama/sdk"; import { SimpleAdapter, FetchOptions, ChainBlocks } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { promises } from "dns"; -import { getBlock } from "../../helpers/getBlock"; import { addTokensReceived } from "../../helpers/token"; const supportedERC20Tokens: Record = { diff --git a/fees/synthetix.ts b/fees/synthetix.ts index bbe51c4eb7..eb26ead658 100644 --- a/fees/synthetix.ts +++ b/fees/synthetix.ts @@ -1,5 +1,5 @@ import ADDRESSES from '../helpers/coreAssets.json' -import { Adapter, ChainBlocks, FetchOptions } from "../adapters/types"; +import { Adapter, FetchOptions } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { Chain } from '@defillama/sdk/build/general'; import { addTokensReceived } from '../helpers/token'; @@ -20,12 +20,11 @@ const contract_address: IContract = { [CHAIN.OPTIMISM]: ADDRESSES.optimism.sUSD } const graphs = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, options: FetchOptions) => { + return async (options: FetchOptions) => { const token = contract_address[chain] const dailyFee = await addTokensReceived({ tokens: [token], options, target: '0xfeefeefeefeefeefeefeefeefeefeefeefeefeef' }) return { - timestamp, dailyUserFees: dailyFee, dailyFees: dailyFee, dailyRevenue: dailyFee, @@ -36,6 +35,7 @@ const graphs = (chain: Chain) => { const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: { fetch: graphs(CHAIN.ETHEREUM), diff --git a/fees/tangible-rwa.ts b/fees/tangible-rwa.ts index a0efff8ac3..19b4039dd2 100644 --- a/fees/tangible-rwa.ts +++ b/fees/tangible-rwa.ts @@ -1,27 +1,24 @@ import ADDRESSES from '../helpers/coreAssets.json' -import { ChainBlocks, FetchOptions, FetchResultFees, SimpleAdapter } from "../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains" import { addTokensReceived } from '../helpers/token'; - -const fetchFees = async (timestamp: number, _: ChainBlocks, options: FetchOptions): Promise => { +const fetchFees = async (options: FetchOptions) => { const fromAdddesses = [ '0x43e656716cf49c008435a8196d8f825f66f37254', '0xcb7daa45ed2a9253ad3c900583b33bed822e8283', '0x49c7371daecb7f06fc7303a14ab80174453df4cf', ]; const dailyFees = options.createBalances() - for (const fromAdddress of fromAdddesses) { - await addTokensReceived({ options, target: '0x6ceD48EfBb581A141667D7487222E42a3FA17cf7', fromAddressFilter: fromAdddress, balances: dailyFees, tokens: [ADDRESSES.polygon.USDC] }) - } + await addTokensReceived({ options, target: '0x6ceD48EfBb581A141667D7487222E42a3FA17cf7', fromAdddesses: fromAdddesses, balances: dailyFees, tokens: [ADDRESSES.polygon.USDC] }) return { dailyFees: dailyFees, dailyRevenue: dailyFees, - timestamp } } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.POLYGON]: { fetch: fetchFees, diff --git a/fees/woofi.ts b/fees/woofi.ts index bf9b819f2a..8342c0c2aa 100644 --- a/fees/woofi.ts +++ b/fees/woofi.ts @@ -1,4 +1,4 @@ -import { Adapter, ChainBlocks, FetchOptions, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; import { addTokensReceived } from '../helpers/token'; @@ -44,7 +44,7 @@ const fee_detail: TFeeDetail = { } const fetch = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, options: FetchOptions): Promise => { + return async (options: FetchOptions) => { const { api } = options; const { from, } = fee_detail[chain]; const token = await api.call({ abi: 'address:quoteToken', target: from }) @@ -58,12 +58,12 @@ const fetch = (chain: Chain) => { dailyFees, dailyRevenue, dailyHoldersRevenue, - timestamp } } } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.AVAX]: { fetch: fetch(CHAIN.AVAX), diff --git a/fees/y2k/y2k-finance-v2.ts b/fees/y2k/y2k-finance-v2.ts index 8d0246449b..2b9fc7a2cd 100644 --- a/fees/y2k/y2k-finance-v2.ts +++ b/fees/y2k/y2k-finance-v2.ts @@ -27,8 +27,7 @@ const fetch = async (options: FetchOptions) => { const vaults = [...new Set([...premium, ...collateral])]; const dailyFees = createBalances() - for (const vault of vaults) - await addTokensReceived({ options, tokens, fromAddressFilter: vault, target: treasury, balances: dailyFees }) + await addTokensReceived({ options, tokens, fromAdddesses: vaults, target: treasury, balances: dailyFees }) return { dailyFees, dailyRevenue: dailyFees }; diff --git a/fees/y2k/y2k-finance.ts b/fees/y2k/y2k-finance.ts index 0a7e8c8a3c..7fa084daca 100644 --- a/fees/y2k/y2k-finance.ts +++ b/fees/y2k/y2k-finance.ts @@ -23,8 +23,7 @@ const fetch = async (options: FetchOptions) => { const vaults = vaultRes.flat() const dailyFees = createBalances() - for (const vault of vaults) - await addTokensReceived({ options, tokens, fromAddressFilter: vault, target: treasury, balances: dailyFees }) + await addTokensReceived({ options, tokens, fromAdddesses: vaults, target: treasury, balances: dailyFees }) return { dailyFees, dailyRevenue: dailyFees, }; diff --git a/fees/zerion-wallet.ts b/fees/zerion-wallet.ts index 470c92cab2..a888afba46 100644 --- a/fees/zerion-wallet.ts +++ b/fees/zerion-wallet.ts @@ -1,4 +1,4 @@ -import { Adapter, FetchOptions, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { addGasTokensReceived, addTokensReceived } from "../helpers/token"; @@ -17,10 +17,10 @@ const multisigs: TMulitsig = { [CHAIN.BSC]: [multisig1] } -const fetch: any = async (timestamp: number, _: any, options: FetchOptions): Promise => { +const fetch: any = async (options: FetchOptions) => { const dailyFees = await addGasTokensReceived({ multisigs: multisigs[options.chain], options }) await addTokensReceived({ targets: multisigs[options.chain], options, balances: dailyFees,}) - return { timestamp, dailyFees, dailyRevenue: dailyFees, dailyProtocolRevenue: dailyFees, } + return { dailyFees, dailyRevenue: dailyFees, dailyProtocolRevenue: dailyFees, } } const methodology = { @@ -30,6 +30,7 @@ const methodology = { const chainAdapter = { fetch, start: 1672531200, meta: { methodology } } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ETHEREUM]: chainAdapter, [CHAIN.OPTIMISM]: chainAdapter, diff --git a/helpers/token.ts b/helpers/token.ts index a92220a6b8..cc158173e7 100644 --- a/helpers/token.ts +++ b/helpers/token.ts @@ -17,21 +17,16 @@ export async function addGasTokensReceived(params: { balances?: sdk.Balances; }) { let { multisig, multisigs, options, balances } = params; + if (multisig) multisigs = [multisig] if (!balances) balances = options.createBalances() - if (multisigs?.length) { - const clonedOptions = { ...params } - delete clonedOptions.multisigs - clonedOptions.balances = balances - await Promise.all(multisigs.map(multisig => addGasTokensReceived({ ...clonedOptions, multisig }))) - return balances - } else if (!multisig) { + if (!multisigs?.length) { throw new Error('multisig or multisigs required') } const logs = await options.getLogs({ - target: multisig, + targets: multisigs, eventAbi: 'event SafeReceived (address indexed sender, uint256 value)' }) @@ -39,7 +34,8 @@ export async function addGasTokensReceived(params: { return balances } -export async function addTokensReceived(params: { +type AddTokensReceivedParams = { + fromAdddesses?: string[]; fromAddressFilter?: string | null; target?: string; targets?: string[]; @@ -50,13 +46,40 @@ export async function addTokensReceived(params: { tokenTransform?: (token: string) => string; fetchTokenList?: boolean; token?: string; -}) { - let { target, targets, options, balances, tokens, fromAddressFilter = null, tokenTransform = (i: string) => i, fetchTokenList = false, token } = params; + skipIndexer?: boolean; +} + +export async function addTokensReceived(params: AddTokensReceivedParams) { + + if (!params.skipIndexer) { + try { + const balances = await _addTokensReceivedIndexer(params) + return balances + } catch (e) { + console.error('Token transfers: Failed to use indexer, falling back to logs', (e as any)?.message) + } + } + + + + let { target, targets, options, balances, tokens, fromAddressFilter = null, tokenTransform = (i: string) => i, fetchTokenList = false, token, fromAdddesses, } = params; const { chain, createBalances, getLogs, } = options - if (!tokens && token) tokens = [token] if (!balances) balances = createBalances() + if (fromAdddesses && fromAdddesses.length) { + if (fromAdddesses.length === 1) fromAddressFilter = fromAdddesses[0] + else { + const clonedOptions = { ...params, balances, skipIndexer: true } + delete clonedOptions.fromAdddesses + await Promise.all(fromAdddesses.map(fromAddressFilter => addTokensReceived({ ...clonedOptions, fromAddressFilter }))) + return balances + } + } + + if (!tokens && token) tokens = [token] + + if (targets?.length) { const clonedOptions = { ...params } delete clonedOptions.targets @@ -69,9 +92,9 @@ export async function addTokensReceived(params: { const toAddressFilter = target ? ethers.zeroPadValue(target, 32) : null if (fromAddressFilter) fromAddressFilter = ethers.zeroPadValue(fromAddressFilter, 32) - + if (!tokens && target) { - if(fetchTokenList){ + if (fetchTokenList) { if (!ankrChainMapping[chain]) throw new Error('Chain Not supported: ' + chain) const ankrTokens = await ankrGetTokens(target, { onlyWhitelisted: true }) tokens = ankrTokens[ankrChainMapping[chain]] ?? [] @@ -98,6 +121,26 @@ export async function addTokensReceived(params: { return balances } +async function _addTokensReceivedIndexer(params: AddTokensReceivedParams) { + let { balances, fromAddressFilter, target, targets, options, fromAdddesses, tokenTransform = (i: string) => i, tokens } = params + const { createBalances, chain, getFromBlock, getToBlock } = options + if (!balances) balances = createBalances() + if (fromAdddesses && fromAdddesses.length) (fromAddressFilter as any) = fromAdddesses + const logs = await sdk.indexer.getTokenTransfers({ + fromBlock: await getFromBlock(), + toBlock: await getToBlock(), + chain, + target, targets, + fromAddressFilter: fromAddressFilter as any, + tokens, + }) + logs.forEach((i: any) => { + balances!.add(tokenTransform(i.token), i.value) + }) + + return balances +} + const ankrTokenCalls: any = {} const ankrChainMapping: { @@ -179,8 +222,8 @@ async function ankrGetTokens(address: string, { onlyWhitelisted = true }: { } } -async function getAllTransfers(fromAddressFilter: string|null, toAddressFilter: string|null, - balances:sdk.Balances, tokenTransform: (token:string)=>string, options: FetchOptions) { +async function getAllTransfers(fromAddressFilter: string | null, toAddressFilter: string | null, + balances: sdk.Balances, tokenTransform: (token: string) => string, options: FetchOptions) { const logs = await options.getLogs({ topics: [ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", // Transfer(address,address,uint256) @@ -247,19 +290,19 @@ export async function getTokenDiff(params: { } -export const evmReceivedGasAndTokens = (receiverWallet:string, tokens:string[]) => - async (options: FetchOptions) => { - let dailyFees = options.createBalances() - if(tokens.length > 0){ - dailyFees = await addTokensReceived({ options, tokens: tokens, target: receiverWallet }) - } - const nativeTransfers = await queryDuneSql(options, `select sum(value) as received from CHAIN.traces +export const evmReceivedGasAndTokens = (receiverWallet: string, tokens: string[]) => + async (options: FetchOptions) => { + let dailyFees = options.createBalances() + if (tokens.length > 0) { + dailyFees = await addTokensReceived({ options, tokens: tokens, target: receiverWallet }) + } + const nativeTransfers = await queryDuneSql(options, `select sum(value) as received from CHAIN.traces where to = ${receiverWallet} AND tx_success = TRUE AND TIME_RANGE`) - dailyFees.add(nullAddress, nativeTransfers[0].received) + dailyFees.add(nullAddress, nativeTransfers[0].received) - return { + return { dailyFees, dailyRevenue: dailyFees, - } -} \ No newline at end of file + } + } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b0ca016810..3e87d23b18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -949,10 +949,9 @@ } }, "node_modules/@defillama/sdk": { - "version": "5.0.91", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.91.tgz", - "integrity": "sha512-wghsiqtF+0orJKbIKOwAJFoJec+Q793uvPwZVvJJ2WiZOlAZ1tSwu1wE8Q4LqsV2AAOsZx7NYvjrCpOP4nhm8Q==", - "license": "ISC", + "version": "5.0.92", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-5.0.92.tgz", + "integrity": "sha512-t6A4qSX9y1VPIaiVE7/O1UPrkDmljjiGv8DrtKZuzuCpwMsL2uMDNIn5a8WLnQizft8mUV3YY4aojx6WC7L7Sw==", "dependencies": { "@aws-sdk/client-s3": "^3.400.0", "@elastic/elasticsearch": "^8.13.1", From aa8f4ffebd456e3fd7194225fa48dff676228369 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 27 Sep 2024 17:35:02 +0000 Subject: [PATCH 1548/1590] add moonshot-money --- fees/moonshot-money.ts | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 fees/moonshot-money.ts diff --git a/fees/moonshot-money.ts b/fees/moonshot-money.ts new file mode 100644 index 0000000000..31aab38860 --- /dev/null +++ b/fees/moonshot-money.ts @@ -0,0 +1,32 @@ +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("3986808", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: '5wkyL2FLEcyUUgc3UeGntHTAfWfzDrVuxMnaMm7792Gk', + token_mint_address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' + })); + dailyFees.add('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', value[0].received*1e6); + return { + dailyFees, + dailyRevenue: dailyFees, + } + +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.SOLANA]: { + fetch: fetch, + start: 0, + }, + }, + isExpensiveAdapter: true +}; + +export default adapter; From 299124dd4d2f8a44af43f18673cecc4fc81bfce5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 27 Sep 2024 19:40:36 +0200 Subject: [PATCH 1549/1590] track bluemove dex --- dexs/bluemove.ts | 40 ++++++++++++++++++++++++++++++++++++++++ fees/bluemove/index.ts | 2 -- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 dexs/bluemove.ts diff --git a/dexs/bluemove.ts b/dexs/bluemove.ts new file mode 100644 index 0000000000..7269e2293f --- /dev/null +++ b/dexs/bluemove.ts @@ -0,0 +1,40 @@ +import fetchURL from "../utils/fetchURL" +import { SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; + +const historicalVolumeEndpoint = "https://aptos-mainnet-api.bluemove.net/api/histogram"; + +interface IVolumeall { + num: string; + date: string; +} + +const fetch = async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + const historicalVolume: IVolumeall[] = (await fetchURL(historicalVolumeEndpoint))?.data.list; + const totalVolume = historicalVolume + .filter(volItem => (new Date(volItem.date.split('T')[0]).getTime() / 1000) <= dayTimestamp) + .reduce((acc, { num }) => acc + Number(num), 0) + + const dailyVolume = historicalVolume + .find(dayItem => (new Date(dayItem.date.split('T')[0]).getTime() / 1000) === dayTimestamp)?.num + return { + totalVolume: `${totalVolume}`, + dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, + timestamp: dayTimestamp, + }; +}; + + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.APTOS]: { + fetch, + start: 1666224000, + }, + }, + version: 1 +}; + +export default adapter; diff --git a/fees/bluemove/index.ts b/fees/bluemove/index.ts index 239343fb55..6d267b8dd1 100644 --- a/fees/bluemove/index.ts +++ b/fees/bluemove/index.ts @@ -23,8 +23,6 @@ const fetch = async (timestamp: number) => { const dailyFees = Number(dailyVolume) * rateFees; const totalFees = Number(totalVolume) * rateFees; return { - totalVolume: `${totalVolume}`, - dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, totalFees: `${totalFees}`, dailyFees: dailyFees ? `${dailyFees}` : undefined, timestamp: dayTimestamp, From 48b05294fd80d032600bc9ecfeda12d8b87c01d2 Mon Sep 17 00:00:00 2001 From: Mario Reder Date: Fri, 27 Sep 2024 21:30:53 +0200 Subject: [PATCH 1550/1590] add memedotcooking --- fees/memecooking/index.ts | 80 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 fees/memecooking/index.ts diff --git a/fees/memecooking/index.ts b/fees/memecooking/index.ts new file mode 100644 index 0000000000..a2e4f6ac34 --- /dev/null +++ b/fees/memecooking/index.ts @@ -0,0 +1,80 @@ +import { formatUnits } from "ethers"; +import { Adapter, FetchV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { httpGet } from "../../utils/fetchURL"; + +const API_BASE_URL = "https://api.meme.cooking"; + +type MemeCookingStats = { + total_volume: string; + total_protocol_fees: string; + total_referral_fees: string; + total_withdraw_fees: string; +}; + +const fetch: FetchV2 = async ({ endTimestamp, createBalances }) => { + const dateString = new Date(endTimestamp * 1000).toISOString().split("T")[0]; + const { + total_volume: daily_volume, + total_protocol_fees: daily_protocol_fees, + total_referral_fees: daily_referral_fees, + total_withdraw_fees: daily_withdraw_fees, + }: MemeCookingStats = await httpGet( + `${API_BASE_URL}/info/daily-stats?date=${dateString}` + ); + + const dailyVolume = createBalances(); + dailyVolume.addCGToken("near", +formatUnits(daily_volume, 24)); + + const dailyFees = createBalances(); + dailyFees.addCGToken( + "near", + +formatUnits( + ( + BigInt(daily_protocol_fees) + + BigInt(daily_referral_fees) + + BigInt(daily_withdraw_fees) + ).toString(), + 24 + ) + ); + + const dailyRevenue = createBalances(); + dailyRevenue.addCGToken("near", +formatUnits(daily_protocol_fees, 24)); + + const dailySupplySideRevenue = createBalances(); + dailySupplySideRevenue.addCGToken( + "near", + +formatUnits(daily_withdraw_fees, 24) + ); + + return { + dailyVolume, + dailyFees, + dailyRevenue, + dailySupplySideRevenue, + }; +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.NEAR]: { + start: 1727708400, + fetch, + meta: { + methodology: { + Volume: + "All deposits and withdrawals into currently ongoing auctions", + Fees: "Fees from deposits (0.5%), withdrawals (2%) and referrals (shares 50% of deposit fee)", + Revenue: "All fees from deposits are for the protocol", + SupplySideRevenue: + "There is a 2% withdrawal fee, which gets redistributed to all depositors of the same auction", + }, + }, + runAtCurrTime: true, + }, + }, + version: 2, +}; + +export default adapter; From 3bd01453828096a2a6b3f93f5aab1b000ac0c36d Mon Sep 17 00:00:00 2001 From: Suro Date: Mon, 30 Sep 2024 13:37:44 +0300 Subject: [PATCH 1551/1590] *added scribe exchange --- protocols/scribe-exchange-v4.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 protocols/scribe-exchange-v4.ts diff --git a/protocols/scribe-exchange-v4.ts b/protocols/scribe-exchange-v4.ts new file mode 100644 index 0000000000..a262364174 --- /dev/null +++ b/protocols/scribe-exchange-v4.ts @@ -0,0 +1,10 @@ +import { uniV3Exports } from '../helpers/uniswap'; + +const poolEvent = + 'event Pool(address indexed token0,address indexed token1,address pool)'; +export default uniV3Exports({ + scroll: { + poolCreatedEvent: poolEvent, + factory: '0xDc62aCDF75cc7EA4D93C69B2866d9642E79d5e2e', + }, +}); From 572745b0f2401659a122ec3f06fbda660d3a5835 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 30 Sep 2024 14:10:19 +0100 Subject: [PATCH 1552/1590] ash-perp --- dexs/ash-perp/index.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/dexs/ash-perp/index.ts b/dexs/ash-perp/index.ts index d997b6ad86..01391259e8 100644 --- a/dexs/ash-perp/index.ts +++ b/dexs/ash-perp/index.ts @@ -11,11 +11,10 @@ interface IVolume { } const VolumeQuery = ` -query GetAllPairStatisticsToday { - pairs { - getAllPairStatistics { - volume - timestamp +query getVolume { + overview { + getPrevious24h { + volume_24h } } } @@ -23,12 +22,9 @@ query GetAllPairStatisticsToday { const fetch = async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + 86400; - const results: IVolume[] = (await request(API_URL, VolumeQuery)).pairs.getAllPairStatistics; - let dailyVolume = results.filter((volumeInfo)=>{ - return volumeInfo.timestamp === dayTimestamp; - }) + const dailyVolume: number = (await request(API_URL, VolumeQuery)).overview.getPrevious24h.volume_24h; return { - dailyVolume: dailyVolume ? `${dailyVolume[0].volume}` : undefined, + dailyVolume, timestamp: dayTimestamp, }; } From 9a213b8f858b098bcb175b2923f53aac3e27a28f Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 30 Sep 2024 15:02:17 +0100 Subject: [PATCH 1553/1590] rollup --- fees/rollup-finace.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fees/rollup-finace.ts b/fees/rollup-finace.ts index 99799a978e..15f2d97f7b 100644 --- a/fees/rollup-finace.ts +++ b/fees/rollup-finace.ts @@ -65,7 +65,11 @@ const graphs = (graphUrls: ChainEndpoints) => { const adapter: Adapter = { adapter: { [CHAIN.ERA]: { - fetch: graphs(endpoints)(CHAIN.ERA), + // sunset 24 Sept 2024 + fetch: async () => ({ + dailyFees: 0, + dailyUserFees: 0 + }), start: 1682035200, }, } From 20ab908287843a8829c9fcabca9035afee9605de Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 30 Sep 2024 16:02:11 +0100 Subject: [PATCH 1554/1590] equation --- dexs/equation/index.ts | 98 +++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/dexs/equation/index.ts b/dexs/equation/index.ts index 2a5c7241ce..cba4cedee0 100644 --- a/dexs/equation/index.ts +++ b/dexs/equation/index.ts @@ -1,69 +1,69 @@ - import { CHAIN } from "../../helpers/chains"; -import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; +import { FetchV2, SimpleAdapter } from "../../adapters/types"; import request, { gql } from "graphql-request"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; const endpoints: { [key: string]: string } = { - [CHAIN.ARBITRUM]: "https://graph-arbitrum.equation.trade/subgraphs/name/equation-stats-arbitrum", -} + [CHAIN.ARBITRUM]: + "https://graph-arbitrum.equation.trade/subgraphs/name/equation-stats-arbitrum", +}; const methodology = { - DailyVolume: "Volume from the sum of the open/close/liquidation of positions and liquidity positions.", -} - -const queryVolume = gql` - query query_volume($id: String!) { - protocolStatistics(where: {id: $id}) { - volumeUSD - } - } -` + DailyVolume: + "Volume from the sum of the open/close/liquidation of positions and liquidity positions.", +}; const queryTotalVolume = gql` - query query_total { - protocolState(id: "protocol_state") { - totalVolumeUSD + query query_total($block: Int) { + protocolState(id: "protocol_state", block: { number: $block }) { + totalVolumeUSD } } -` - -interface IDailyResponse { - protocolStatistics: [{ - volumeUSD: string, - }] -} +`; interface ITotalResponse { - protocolState: { - totalVolumeUSD: string, - } + protocolState: { + totalVolumeUSD: number; + }; } +const getFetch = + () => + (chain: string): FetchV2 => + async ({ getStartBlock, getEndBlock }) => { + const [startBlock, endBlock] = await Promise.all([ + getStartBlock(), + getEndBlock(), + ]); + const [prevData, totalData]: ITotalResponse[] = await Promise.all([ + request(endpoints[chain], queryTotalVolume, { + block: startBlock, + }), + request(endpoints[chain], queryTotalVolume, { + block: endBlock, + }), + ]); + + const dailyVolume = + totalData.protocolState.totalVolumeUSD - + prevData.protocolState.totalVolumeUSD; -const getFetch = () => (chain: string): Fetch => async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000))) - const dailyData: IDailyResponse = await request(endpoints[chain], queryVolume, { - id: 'Daily:' + dayTimestamp, - }) - const totalData: ITotalResponse = await request(endpoints[chain], queryTotalVolume) return { - timestamp: dayTimestamp, - dailyVolume: dailyData.protocolStatistics[0].volumeUSD, - totalVolume: totalData.protocolState.totalVolumeUSD, - } -} + dailyVolume, + totalVolume: totalData.protocolState.totalVolumeUSD, + }; + }; const adapter: SimpleAdapter = { - adapter: { - [CHAIN.ARBITRUM]: { - fetch: getFetch()(CHAIN.ARBITRUM), - start: 1697760000, - meta:{ - methodology: methodology, - }, - }, + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: getFetch()(CHAIN.ARBITRUM), + start: 1697760000, + meta: { + methodology: methodology, + }, }, -} + }, +}; -export default adapter; \ No newline at end of file +export default adapter; From ec6916f18a42d9add0efc1e99e261210848128bd Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Mon, 30 Sep 2024 16:14:36 +0100 Subject: [PATCH 1555/1590] equation --- fees/equation/index.ts | 101 +++++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 49 deletions(-) diff --git a/fees/equation/index.ts b/fees/equation/index.ts index 509e381d76..55cf54940f 100644 --- a/fees/equation/index.ts +++ b/fees/equation/index.ts @@ -1,65 +1,68 @@ import { request, gql } from "graphql-request"; -import { Chain } from '@defillama/sdk/build/general'; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; -import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; +import { FetchV2, SimpleAdapter } from "../../adapters/types"; const endpoints: { [key: string]: string } = { - [CHAIN.ARBITRUM]: "https://graph-arbitrum.equation.trade/subgraphs/name/equation-stats-arbitrum", -} + [CHAIN.ARBITRUM]: + "https://graph-arbitrum.equation.trade/subgraphs/name/equation-stats-arbitrum", +}; const methodology = { - Fees: "Fees from open/close position and placed limit order (0.05%), with invitation code (0.045%)", - Revenue: "Revenue is 50% of all collected fees", - ProtocolRevenue: "Revenue is 50% of all collected fees" -} + Fees: "Fees from open/close position and placed limit order (0.05%), with invitation code (0.045%)", + Revenue: "Revenue is 50% of all collected fees", + ProtocolRevenue: "Revenue is 50% of all collected fees", +}; -const queryFee = gql` -query query_volume($id: String!) { - protocolStatistics(where: {id: $id}) { - stakeFee - architectFee - protocolFee +const queryTotalFee = gql` + query query_total($block: Int) { + protocolState(id: "protocol_state", block: { number: $block }) { + totalFee } -} -` + } +`; -interface IDailyResponse { - protocolStatistics: [ - { - protocolFee: string, - architectFee: string, - stakeFee: string, - } - ] -} +const getFetch = + () => + (chain: string): FetchV2 => + async ({ getStartBlock, getEndBlock }) => { + const [startBlock, endBlock] = await Promise.all([ + getStartBlock(), + getEndBlock(), + ]); + const [prevData, totalData] = await Promise.all([ + request(endpoints[chain], queryTotalFee, { + block: startBlock, + }), + request(endpoints[chain], queryTotalFee, { + block: endBlock, + }), + ]); -const getFetch = () => (chain: string): Fetch => async (timestamp: number) => { - const todaysTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000))) - const graphRes: IDailyResponse = await request(endpoints[chain], queryFee, { - id: 'Daily:' + todaysTimestamp, - }) - const dailyFee = graphRes.protocolStatistics[0].protocolFee - const dailyProtocolRevenue = parseFloat(graphRes.protocolStatistics[0].architectFee) + parseFloat(graphRes.protocolStatistics[0].stakeFee) + const dailyFees = + totalData.protocolState.totalFee - prevData.protocolState.totalFee; + const totalFees = totalData.protocolState.totalFee; return { - timestamp: todaysTimestamp, - dailyFees: dailyFee.toString(), - dailyProtocolRevenue: dailyProtocolRevenue.toString(), + dailyFees, + dailyRevenue: dailyFees / 2, + dailyProtocolRevenue: dailyFees / 2, + totalFees, + totalRevenue: totalFees / 2, + totalProtocolRevenue: totalFees / 2, }; -}; + }; const adapter: SimpleAdapter = { - version: 1, - adapter: { - [CHAIN.ARBITRUM]: { - fetch: getFetch()(CHAIN.ARBITRUM), - start: 1697760000, - meta: { - methodology - } - }, - } -} + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch: getFetch()(CHAIN.ARBITRUM), + start: 1697760000, + meta: { + methodology, + }, + }, + }, +}; -export default adapter; \ No newline at end of file +export default adapter; From a70bb7fddd6a23c39eedc2fedb68c2fd5ab2b9cc Mon Sep 17 00:00:00 2001 From: Ben Date: Mon, 30 Sep 2024 20:40:16 +0000 Subject: [PATCH 1556/1590] added ethereum and updated api url --- dexs/apestore/index.ts | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/dexs/apestore/index.ts b/dexs/apestore/index.ts index 072bd5c15b..33f6f52a0f 100644 --- a/dexs/apestore/index.ts +++ b/dexs/apestore/index.ts @@ -1,8 +1,6 @@ import { httpPost } from "../../utils/fetchURL" import { FetchOptions, FetchResultV2, Adapter } from "../../adapters/types"; -const URL = 'https://test.ape.store/api/public/base/volume' - interface VolumeInfo { dailyVolume: string; totalVolume: string; @@ -14,7 +12,23 @@ const adapter: Adapter = { adapter: { base: { fetch: async (options: FetchOptions): Promise => { - const volumeData: VolumeInfo = await httpPost(URL, { date: options.startOfDay }, { + const volumeData: VolumeInfo = await httpPost('https://api.ape.store/base/volume', { date: options.startOfDay }, { + headers: { + "Authorization": "92ff54fa-80b7-4f2c-bae1-f862ea7525ae" + }, + }); + + return { + totalVolume: volumeData.totalVolume, + dailyVolume: volumeData.dailyVolume, + timestamp: volumeData.timeStamp, + }; + }, + start: 1712265900, + }, + ethereum: { + fetch: async (options: FetchOptions): Promise => { + const volumeData: VolumeInfo = await httpPost('https://api.ape.store/eth/volume', { date: options.startOfDay }, { headers: { "Authorization": "92ff54fa-80b7-4f2c-bae1-f862ea7525ae" }, From 32fbc66c98d5d0ff923828dc8c5b59db132266d3 Mon Sep 17 00:00:00 2001 From: h2-finance-dev Date: Tue, 1 Oct 2024 14:44:11 +0800 Subject: [PATCH 1557/1590] add h2-finance & h2-finance-v3 --- dexs/h2-finance-v3/index.ts | 12 ++++++++++++ dexs/h2-finance/index.ts | 12 ++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 dexs/h2-finance-v3/index.ts create mode 100644 dexs/h2-finance/index.ts diff --git a/dexs/h2-finance-v3/index.ts b/dexs/h2-finance-v3/index.ts new file mode 100644 index 0000000000..fcbd1916d6 --- /dev/null +++ b/dexs/h2-finance-v3/index.ts @@ -0,0 +1,12 @@ +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; + +const adapter = univ2Adapter2({ + [CHAIN.CRONOS_ZKEVM]: "https://api.goldsky.com/api/public/project_clwrfupe2elf301wlhnd7bvva/subgraphs/h2-exchange-v3-cronos-zkevm/latest/gn" +},{ + factoriesName: "factories", +}); + +adapter.adapter[CHAIN.CRONOS_ZKEVM].start = 1; + +export default adapter diff --git a/dexs/h2-finance/index.ts b/dexs/h2-finance/index.ts new file mode 100644 index 0000000000..5af768e778 --- /dev/null +++ b/dexs/h2-finance/index.ts @@ -0,0 +1,12 @@ +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; +import { CHAIN } from "../../helpers/chains"; + +const adapter = univ2Adapter2({ + [CHAIN.CRONOS_ZKEVM]: "https://api.goldsky.com/api/public/project_clwrfupe2elf301wlhnd7bvva/subgraphs/h2-exchange-v2-cronos-zkevm/latest/gn" +},{ + factoriesName: "vvsFactories", +}); + +adapter.adapter[CHAIN.CRONOS_ZKEVM].start = 1; + +export default adapter From 636024a73ad52102a537b091d53c1034a8164368 Mon Sep 17 00:00:00 2001 From: degencreator Date: Tue, 1 Oct 2024 11:18:05 +0200 Subject: [PATCH 1558/1590] fix: Dexs subgraph for intentx --- dexs/intent-x/index.tsx | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/dexs/intent-x/index.tsx b/dexs/intent-x/index.tsx index 7dfe3ea32c..85857769ca 100644 --- a/dexs/intent-x/index.tsx +++ b/dexs/intent-x/index.tsx @@ -9,11 +9,11 @@ const ONE_DAY_IN_SECONDS = 60 * 60 * 24; const endpoint_0_8_0 = "https://api.studio.thegraph.com/query/62472/perpetuals-analytics_base/version/latest"; const endpoint = - "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-base-analytics-082/latest/gn"; + "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-base-analytics-083/latest/gn"; const endpoint_blast = "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-blast-analytics-083/latest/gn"; const endpoint_mantle = - "https://subgraph-api.mantle.xyz/subgraphs/name/mantle_intentx-analytics_082"; + "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-mantle-analytics-083/latest/gn"; const query_0_8_0 = gql` query stats($from: String!, $to: String!) { @@ -171,8 +171,12 @@ const fetchVolume = async (timestamp: number): Promise => { totalTakerVolume = totalTakerVolume.plus(new BigNumber(data.tradeVolume)); }); - const dailyVolume = dailyMakerVolume.plus(dailyTakerVolume).dividedBy(new BigNumber(1e18)); - const totalVolume = totalMakerVolume.plus(totalTakerVolume).dividedBy(new BigNumber(1e18)); + const dailyVolume = dailyMakerVolume + .plus(dailyTakerVolume) + .dividedBy(new BigNumber(1e18)); + const totalVolume = totalMakerVolume + .plus(totalTakerVolume) + .dividedBy(new BigNumber(1e18)); const _dailyVolume = toString(dailyVolume); const _totalVolume = toString(totalVolume); @@ -211,8 +215,12 @@ const fetchVolumeBlast = async ( totalTakerVolume = totalTakerVolume.plus(new BigNumber(data.tradeVolume)); }); - const dailyVolume = dailyMakerVolume.plus(dailyTakerVolume).dividedBy(new BigNumber(1e18)); - const totalVolume = totalMakerVolume.plus(totalTakerVolume).dividedBy(new BigNumber(1e18)); + const dailyVolume = dailyMakerVolume + .plus(dailyTakerVolume) + .dividedBy(new BigNumber(1e18)); + const totalVolume = totalMakerVolume + .plus(totalTakerVolume) + .dividedBy(new BigNumber(1e18)); const _dailyVolume = toString(dailyVolume); const _totalVolume = toString(totalVolume); @@ -251,8 +259,12 @@ const fetchVolumeMantle = async ( totalTakerVolume = totalTakerVolume.plus(new BigNumber(data.tradeVolume)); }); - const dailyVolume = dailyMakerVolume.plus(dailyTakerVolume).dividedBy(new BigNumber(1e18)); - const totalVolume = totalMakerVolume.plus(totalTakerVolume).dividedBy(new BigNumber(1e18)); + const dailyVolume = dailyMakerVolume + .plus(dailyTakerVolume) + .dividedBy(new BigNumber(1e18)); + const totalVolume = totalMakerVolume + .plus(totalTakerVolume) + .dividedBy(new BigNumber(1e18)); const _dailyVolume = toString(dailyVolume); const _totalVolume = toString(totalVolume); From 189cc7233532648b8c7a5e8ca828187b569a882c Mon Sep 17 00:00:00 2001 From: 0xCrumbs <97379465+0xcrumb@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:56:43 +0100 Subject: [PATCH 1559/1590] Add gTrade Base deployment --- dexs/gains-network/index.ts | 38 ++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/dexs/gains-network/index.ts b/dexs/gains-network/index.ts index 5484fa2930..3bfd435d9f 100644 --- a/dexs/gains-network/index.ts +++ b/dexs/gains-network/index.ts @@ -6,6 +6,12 @@ type IAddresses = { [s: string | Chain]: string[]; }; +type IPrecisionException = { + [chain in CHAIN]?: { + [key: string | number]: number; + }; +}; + interface ILog { address: string; data: string; @@ -30,15 +36,26 @@ const topic0_partials = [ "0xe74b50af866d7f8e3577bc959bf73a2690841f0abce22ab0cfb1b1c84122a7d7", // PositionSizeDecreaseExecuted ]; -const precisionException: { [a: string | number]: number } = { - "0x2ac6749d0affd42c8d61ef25e433f92e375a1aef": 1e6, - "0x4542256c583bcad66a19a525b57203773a6485bf": 1e6, - 3: 1e6, // v8 USDC +const precisionException: IPrecisionException = { + [CHAIN.POLYGON]: { + "0x2ac6749d0affd42c8d61ef25e433f92e375a1aef": 1e6, + "0x4542256c583bcad66a19a525b57203773a6485bf": 1e6, + 3: 1e6, // v8 USDC + }, + [CHAIN.ARBITRUM]: { + "0x2ac6749d0affd42c8d61ef25e433f92e375a1aef": 1e6, + "0x4542256c583bcad66a19a525b57203773a6485bf": 1e6, + 3: 1e6, // v8 USDC + }, + [CHAIN.BASE]: { + 1: 1e6, // USDC is collateralIndex 1 on Base + }, }; const diamonds = { [CHAIN.POLYGON]: "0x209a9a01980377916851af2ca075c2b170452018", [CHAIN.ARBITRUM]: "0xff162c694eaa571f685030649814282ea457f169", + [CHAIN.BASE]: "0x6cD5aC19a07518A8092eEFfDA4f1174C72704eeb", }; const contract_addresses: IAddresses = { @@ -54,9 +71,11 @@ const contract_addresses: IAddresses = { "0x4542256c583bcad66a19a525b57203773a6485bf", // USDC TradingCallbacks diamonds[CHAIN.ARBITRUM], // v8 Diamond ], + [CHAIN.BASE]: [diamonds[CHAIN.BASE]], }; const fetch: any = async (timestamp: number, _, { getLogs, chain }): Promise => { + const chainPrecisionExceptions = precisionException[chain]; const [limitLogs, marketLogs, partialsLogs] = ( await Promise.all([ // Limit Executed logs @@ -99,13 +118,13 @@ const fetch: any = async (timestamp: number, _, { getLogs, chain }): Promise 0) return 0; - const collateralPrecision = precisionException[Number(e.topics[1])] ?? 1e18; + const collateralPrecision = chainPrecisionExceptions[Number(e.topics[1])] ?? 1e18; const collateralPriceUsd = Number("0x" + data.slice(384, 448)) / 1e8; const positionSizeDelta = Number("0x" + data.slice(576, 640)) / collateralPrecision; @@ -156,6 +175,7 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM]: { fetch, start: 1684972800 }, [CHAIN.POLYGON]: { fetch, start: 1684972800 }, + [CHAIN.BASE]: { fetch, start: 1727351131 }, }, }; From 25c8539d3b3af226a3534d342ee2f5150bc5fd7d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 1 Oct 2024 11:16:22 +0000 Subject: [PATCH 1560/1590] fix adapter version --- dexs/hinkal/index.ts | 69 ++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/dexs/hinkal/index.ts b/dexs/hinkal/index.ts index 3d4b7b5c00..1643d5dff3 100644 --- a/dexs/hinkal/index.ts +++ b/dexs/hinkal/index.ts @@ -1,9 +1,9 @@ import axios from "axios"; -import { Adapter, FetchOptions } from "../../adapters/types"; +import { Adapter, FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const fetchEthereum = async (options: FetchOptions) => { - const timestamp = options.endTimestamp; +const fetchEthereum = async (_t: any, _ta: any,options: FetchOptions) => { + const timestamp = options.startOfDay; const urlTotal = `https://ethMainnet.server.hinkal.pro/totalVolume/${timestamp}/false/1`; const urlDaily = `https://ethMainnet.server.hinkal.pro/totalVolume/${timestamp}/true/1`; try { @@ -14,15 +14,15 @@ const fetchEthereum = async (options: FetchOptions) => { const responseDaily = await axios.get(urlDaily); const dataDaily = responseDaily.data; const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; - return { totalVolume, dailyVolume }; + return {timestamp: options.startOfDay, totalVolume, dailyVolume }; } catch (error) { console.error("Error fetching volume:", error); - return { totalVolume: 0, dailyVolume: 0 }; + return {timestamp: options.startOfDay, totalVolume: 0, dailyVolume: 0 }; } }; -const fetchBase = async (options: FetchOptions) => { - const timestamp = options.endTimestamp; +const fetchBase = async (_t: any, _ta: any,options: FetchOptions) => { + const timestamp = options.startOfDay; const urlTotal = `https://base.server.hinkal.pro/totalVolume/${timestamp}/false/8453`; const urlDaily = `https://base.server.hinkal.pro/totalVolume/${timestamp}/true/8453`; try { @@ -33,15 +33,15 @@ const fetchBase = async (options: FetchOptions) => { const responseDaily = await axios.get(urlDaily); const dataDaily = responseDaily.data; const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; - return { totalVolume, dailyVolume }; + return {timestamp: options.startOfDay, totalVolume, dailyVolume }; } catch (error) { console.error("Error fetching volume:", error); - return { totalVolume: 0, dailyVolume: 0 }; + return {timestamp: options.startOfDay, totalVolume: 0, dailyVolume: 0 }; } }; -const fetchArbitrum = async (options: FetchOptions) => { - const timestamp = options.endTimestamp; +const fetchArbitrum = async (_t: any, _ta: any,options: FetchOptions) => { + const timestamp = options.startOfDay; const urlTotal = `https://arbMainnet.server.hinkal.pro/totalVolume/${timestamp}/false/42161`; const urlDaily = `https://arbMainnet.server.hinkal.pro/totalVolume/${timestamp}/true/42161`; try { @@ -52,15 +52,15 @@ const fetchArbitrum = async (options: FetchOptions) => { const responseDaily = await axios.get(urlDaily); const dataDaily = responseDaily.data; const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; - return { totalVolume, dailyVolume }; + return {timestamp: options.startOfDay, totalVolume, dailyVolume }; } catch (error) { console.error("Error fetching volume:", error); - return { totalVolume: 0, dailyVolume: 0 }; + return {timestamp: options.startOfDay, totalVolume: 0, dailyVolume: 0 }; } }; -const fetchPolygon = async (options: FetchOptions) => { - const timestamp = options.endTimestamp; +const fetchPolygon = async (_t: any, _ta: any,options: FetchOptions) => { + const timestamp = options.startOfDay; const urlTotal = `https://polygon.server.hinkal.pro/totalVolume/${timestamp}/false/137`; const urlDaily = `https://polygon.server.hinkal.pro/totalVolume/${timestamp}/true/137`; try { @@ -71,15 +71,15 @@ const fetchPolygon = async (options: FetchOptions) => { const responseDaily = await axios.get(urlDaily); const dataDaily = responseDaily.data; const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; - return { totalVolume, dailyVolume }; + return {timestamp: options.startOfDay, totalVolume, dailyVolume }; } catch (error) { console.error("Error fetching volume:", error); - return { totalVolume: 0, dailyVolume: 0 }; + return {timestamp: options.startOfDay, totalVolume: 0, dailyVolume: 0 }; } }; -const fetchBNB = async (options: FetchOptions) => { - const timestamp = options.endTimestamp; +const fetchBNB = async (_t: any, _ta: any,options: FetchOptions) => { + const timestamp = options.startOfDay; const urlTotal = `https://bnbMainnet.server.hinkal.pro/totalVolume/${timestamp}/false/56`; const urlDaily = `https://bnbMainnet.server.hinkal.pro/totalVolume/${timestamp}/true/56`; try { @@ -90,15 +90,15 @@ const fetchBNB = async (options: FetchOptions) => { const responseDaily = await axios.get(urlDaily); const dataDaily = responseDaily.data; const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; - return { totalVolume, dailyVolume }; + return {timestamp: options.startOfDay, totalVolume, dailyVolume }; } catch (error) { console.error("Error fetching volume:", error); - return { totalVolume: 0, dailyVolume: 0 }; + return {timestamp: options.startOfDay, totalVolume: 0, dailyVolume: 0 }; } }; -const fetchAVALANCHE = async (options: FetchOptions) => { - const timestamp = options.endTimestamp; +const fetchAVALANCHE = async (_t: any, _ta: any,options: FetchOptions) => { + const timestamp = options.startOfDay; const urlTotal = `https://avalanche.server.hinkal.pro/totalVolume/${timestamp}/false/43114`; const urlDaily = `https://avalanche.server.hinkal.pro/totalVolume/${timestamp}/true/43114`; try { @@ -109,15 +109,15 @@ const fetchAVALANCHE = async (options: FetchOptions) => { const responseDaily = await axios.get(urlDaily); const dataDaily = responseDaily.data; const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; - return { totalVolume, dailyVolume }; + return {timestamp: options.startOfDay, totalVolume, dailyVolume }; } catch (error) { console.error("Error fetching volume:", error); - return { totalVolume: 0, dailyVolume: 0 }; + return {timestamp: options.startOfDay, totalVolume: 0, dailyVolume: 0 }; } }; -const fetchOPTIMISM = async (options: FetchOptions) => { - const timestamp = options.endTimestamp; +const fetchOPTIMISM = async (_t: any, _ta: any,options: FetchOptions) => { + const timestamp = options.startOfDay; const urlTotal = `https://optimism.server.hinkal.pro/totalVolume/${timestamp}/false/10`; const urlDaily = `https://optimism.server.hinkal.pro/totalVolume/${timestamp}/true/10`; try { @@ -128,15 +128,15 @@ const fetchOPTIMISM = async (options: FetchOptions) => { const responseDaily = await axios.get(urlDaily); const dataDaily = responseDaily.data; const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; - return { totalVolume, dailyVolume }; + return {timestamp: options.startOfDay, totalVolume, dailyVolume }; } catch (error) { console.error("Error fetching volume:", error); - return { totalVolume: 0, dailyVolume: 0 }; + return {timestamp: options.startOfDay, totalVolume: 0, dailyVolume: 0 }; } }; -const fetchBLAST = async (options: FetchOptions) => { - const timestamp = options.endTimestamp; +const fetchBLAST = async (_t: any, _ta: any,options: FetchOptions) => { + const timestamp = options.startOfDay; const urlTotal = `https://blast.server.hinkal.pro/totalVolume/${timestamp}/false/81457`; const urlDaily = `https://blast.server.hinkal.pro/totalVolume/${timestamp}/true/81457`; try { @@ -147,14 +147,15 @@ const fetchBLAST = async (options: FetchOptions) => { const responseDaily = await axios.get(urlDaily); const dataDaily = responseDaily.data; const dailyVolume = dataDaily.internal_volume + dataDaily.external_volume; - return { totalVolume, dailyVolume }; + return {timestamp: options.startOfDay, totalVolume, dailyVolume }; } catch (error) { console.error("Error fetching volume:", error); - return { totalVolume: 0, dailyVolume: 0 }; + return {timestamp: options.startOfDay, totalVolume: 0, dailyVolume: 0 }; } }; -const adapter: Adapter = { +const adapter: SimpleAdapter = { + version: 1, adapter: { [CHAIN.ETHEREUM]: { fetch: fetchEthereum, From f11b1b8cdcb1705eeb0379e6265c02609a950017 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Tue, 1 Oct 2024 15:26:30 +0100 Subject: [PATCH 1561/1590] dexible --- aggregators/dexible/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/aggregators/dexible/index.ts b/aggregators/dexible/index.ts index b291d7ea74..f985b5790a 100644 --- a/aggregators/dexible/index.ts +++ b/aggregators/dexible/index.ts @@ -1,6 +1,7 @@ -import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types"; +import { BreakdownAdapter, DISABLED_ADAPTER_KEY, Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { httpGet } from "../../utils/fetchURL"; +import disabledAdapter from "../../helpers/disabledAdapter"; const chains = [ CHAIN.ETHEREUM, @@ -76,6 +77,7 @@ const getFetch = (chain: string): Fetch => async (timestamp: number) => { const adapter: BreakdownAdapter = { breakdown: { "Dexible_v2": { + [DISABLED_ADAPTER_KEY]: disabledAdapter, ...chains.reduce((acc, chain) => { return { ...acc, From a4915b4b8360911b103d11553662bf011a474ea9 Mon Sep 17 00:00:00 2001 From: 0xCrumbs <97379465+0xcrumb@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:28:02 +0100 Subject: [PATCH 1562/1590] Add gTrade Base deployment (fees) --- fees/gains-network.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fees/gains-network.ts b/fees/gains-network.ts index d0d25ac973..f836779433 100644 --- a/fees/gains-network.ts +++ b/fees/gains-network.ts @@ -42,6 +42,7 @@ const addressConfig: { [a: string]: string } = { const collateralIndexMap: { [s: string | Chain]: { [a: number]: string } } = { [CHAIN.POLYGON]: { 1: ADDRESSES.polygon.DAI, 2: ADDRESSES.polygon.WETH, 3: ADDRESSES.polygon.USDC_CIRCLE }, [CHAIN.ARBITRUM]: { 1: ADDRESSES.arbitrum.DAI, 2: ADDRESSES.arbitrum.WETH, 3: ADDRESSES.arbitrum.USDC_CIRCLE }, + [CHAIN.BASE]: { 1: ADDRESSES.base.USDC }, }; const contract_addresses: IAddresses = { @@ -57,6 +58,9 @@ const contract_addresses: IAddresses = { "0x4542256c583bcad66a19a525b57203773a6485bf", // USDC TradingCallbacks "0xff162c694eaa571f685030649814282ea457f169", // v8 Diamond ], + [CHAIN.BASE]: [ + "0x6cD5aC19a07518A8092eEFfDA4f1174C72704eeb", // v9.3 Diamond + ], }; const fetch = (chain: Chain) => { @@ -108,6 +112,10 @@ const adapter: Adapter = { fetch: fetch(CHAIN.ARBITRUM), start: 1672358400, }, + [CHAIN.BASE]: { + fetch: fetch(CHAIN.BASE), + start: 1727351131, + }, }, }; From 13b3043a1b1dea982c3ce77a3d5f3dd14ad35da4 Mon Sep 17 00:00:00 2001 From: Leonardo Nagasaki <56836200+Leoakin43@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:19:43 -0300 Subject: [PATCH 1563/1590] Added handling for when the market does not exist --- fees/moonwell/index.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fees/moonwell/index.ts b/fees/moonwell/index.ts index eab3494d0d..e8c29e5b28 100644 --- a/fees/moonwell/index.ts +++ b/fees/moonwell/index.ts @@ -29,7 +29,12 @@ async function getFees(market: string, { createBalances, api, getLogs, }: FetchO }) { if (!dailyFees) dailyFees = createBalances() if (!dailyRevenue) dailyRevenue = createBalances() - const markets = await api.call({ target: market, abi: comptrollerABI.getAllMarkets, }) + let markets + try { + markets = await api.call({ target: market, abi: comptrollerABI.getAllMarkets, }) + } catch (error) { + return { dailyFees, dailyRevenue } + } const liquidationIncentiveMantissa = await api.call({ target: market, abi: comptrollerABI.liquidationIncentiveMantissa, }) const underlyings = await api.multiCall({ calls: markets, abi: comptrollerABI.underlying, permitFailure: true, }); const exchangeRatesCurrent = await api.multiCall({ calls: markets, abi: comptrollerABI.exchangeRateCurrent, permitFailure: true, }); From d3e9c86607e1fdb804c6e3b17b58c8a9bab3ff00 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 1 Oct 2024 16:26:38 +0000 Subject: [PATCH 1564/1590] fix missing fees --- dexs/drift-protocol/index.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dexs/drift-protocol/index.ts b/dexs/drift-protocol/index.ts index c78834a42d..a55e241857 100644 --- a/dexs/drift-protocol/index.ts +++ b/dexs/drift-protocol/index.ts @@ -21,7 +21,7 @@ export async function fetchURLWithRetry(url: string, options: FetchOptions) { const start = options.startOfDay; const key = `${url}-${start}`; if (!requests[key]) - requests[key] = queryDune("4059377", { + requests[key] = queryDune("4117889", { start: start, end: start + 24 * 60 * 60, }) @@ -29,13 +29,15 @@ export async function fetchURLWithRetry(url: string, options: FetchOptions) { } async function getPerpDimensions(options: FetchOptions): Promise { - const volumeResponse = await fetchURLWithRetry("4059377", options) + const volumeResponse = await fetchURLWithRetry("4117889", options) const dailyVolume = volumeResponse[0].perpetual_volume; - return { dailyVolume }; + const dailyFees = volumeResponse[0].total_taker_fee; + const dailyRevenue = volumeResponse[0].total_revenue; + return { dailyVolume, dailyFees, dailyRevenue }; } async function getSpotDimensions(options: FetchOptions): Promise { - const volumeResponse = await fetchURLWithRetry("4059377", options) + const volumeResponse = await fetchURLWithRetry("4117889", options) const dailyVolume = volumeResponse[0].spot_volume; return { dailyVolume }; } From f0975623cc92653ac1a3fd680202a19af642cb62 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 1 Oct 2024 17:24:46 +0000 Subject: [PATCH 1565/1590] fix trader joe v2 --- dexs/traderjoe/index.ts | 20 ++++++---- fees/traderjoe.ts | 87 +++++++++++++++++++++++++++++++---------- 2 files changed, 79 insertions(+), 28 deletions(-) diff --git a/dexs/traderjoe/index.ts b/dexs/traderjoe/index.ts index 4f99324972..bfe26bdeb8 100644 --- a/dexs/traderjoe/index.ts +++ b/dexs/traderjoe/index.ts @@ -1,8 +1,8 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; -import { BreakdownAdapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { BreakdownAdapter, FetchOptions, FetchResult, FetchResultV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getChainVolume2, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; +import { getChainVolume, getChainVolume2, getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpGet } from "../../utils/fetchURL"; const endpoints = { @@ -24,12 +24,15 @@ interface IVolume { timestamp: number; volumeUsd: number; } -const fetchV2 = async (options: FetchOptions): Promise => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(options.endTimestamp * 1000)) - const url = `https://api.traderjoexyz.dev/v1/dex/analytics/${mapChain(options.chain)}?startTime=${options.startTimestamp}&endTime=${options.endTimestamp}` +const fetchV2 = async (_t: any, _tt: any, options: FetchOptions): Promise => { + const dayTimestamp = options.startOfDay; + const start = options.startOfDay; + const end = start + 24 * 60 * 60; + const url = `https://api.traderjoexyz.dev/v1/dex/analytics/${mapChain(options.chain)}?startTime=${start}&endTime=${end}` const historicalVolume: IVolume[] = (await httpGet(url, { headers: { 'x-traderjoe-api-key': process.env.TRADERJOE_API_KEY }})); + const totalVolume = historicalVolume .filter(volItem => volItem.timestamp <= dayTimestamp) .reduce((acc, { volumeUsd }) => acc + Number(volumeUsd), 0) @@ -39,6 +42,7 @@ const fetchV2 = async (options: FetchOptions): Promise => { return { totalVolume: `${totalVolume}`, dailyVolume: dailyVolume !== undefined ? `${dailyVolume}` : undefined, + timestamp: dayTimestamp, } } const mapChain = (chain: Chain): string => { @@ -46,7 +50,7 @@ const mapChain = (chain: Chain): string => { return chain } -const graphsV1 = getChainVolume2({ +const graphsV1 = getChainVolume({ graphUrls: endpoints, totalVolume: { factory: "factories", @@ -55,7 +59,7 @@ const graphsV1 = getChainVolume2({ }); -const graphsV2 = getChainVolume2({ +const graphsV2 = getChainVolume({ graphUrls: endpointsV2, totalVolume: { factory: "lbfactories", @@ -64,7 +68,7 @@ const graphsV2 = getChainVolume2({ }); const adapter: BreakdownAdapter = { - version: 2, + version: 1, breakdown: { v1: { [CHAIN.AVAX]: { diff --git a/fees/traderjoe.ts b/fees/traderjoe.ts index 4a138848b8..706614fb7f 100644 --- a/fees/traderjoe.ts +++ b/fees/traderjoe.ts @@ -1,12 +1,9 @@ -import { - getDexChainFees, - getUniqStartOfTodayTimestamp, -} from "../helpers/getUniSubgraphFees"; -import volumeAdapter from "../dexs/traderjoe"; -import { Adapter, FetchOptions, FetchResultFees } from "../adapters/types"; +import { Adapter, FetchOptions } from "../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; import { CHAIN } from "../helpers/chains"; -import {httpGet} from "../utils/fetchURL"; +import { httpGet } from "../utils/fetchURL"; +import * as sdk from "@defillama/sdk"; +import { getChainVolume } from "../helpers/getUniSubgraphVolume"; const TOTAL_FEES = 0.003; const LP_FEE = 0.0025; @@ -33,18 +30,24 @@ const endpointsV2: TEndpoint = { "https://barn.traderjoexyz.com/v1/dex/analytics/ethereum?startTime=1695513600&aggregateBy=daily", }; -const adapterV1 = getDexChainFees({ - totalFees: TOTAL_FEES, - protocolFees: PROTOCOL_FEES, - revenue: PROTOCOL_FEES, - supplySideRevenue: LP_FEE, - holdersRevenue: HOLDER_REV, - volumeAdapter: { adapter: volumeAdapter.breakdown.v1 }, -}); +const endpoints = { + [CHAIN.AVAX]: sdk.graph.modifyEndpoint('9ZjERoA7jGANYNz1YNuFMBt11fK44krveEhzssJTWokM'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('3VgCBQh13PseR81hPNAbKua3gD8b8r33LauKjVnMbSAs'), + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('3jFnXqk6UXZyciPu5jfUuPR7kzGXPSndsLNrWXQ6xAxk'), +}; -const graph = async (options: FetchOptions) => { - const dayTimestamp = options.startOfDay * 1000 - const url = `https://api.traderjoexyz.dev/v1/dex/analytics/${mapChain(options.chain)}?startTime=${options.startTimestamp}&endTime=${options.endTimestamp}` +const graphsV1 = getChainVolume({ + graphUrls: endpoints, + totalVolume: { + factory: "factories", + field: "volumeUSD", + }, +}); +const graph = async (_t: any, _tt: any, options: FetchOptions) => { + const dayTimestamp = options.startOfDay; + const start = options.startOfDay; + const end = start + 24 * 60 * 60; + const url = `https://api.traderjoexyz.dev/v1/dex/analytics/${mapChain(options.chain)}?startTime=${start}&endTime=${end}` const historical: IData[] = (await httpGet(url, { headers: { 'x-traderjoe-api-key': process.env.TRADERJOE_API_KEY }})); @@ -63,6 +66,7 @@ const graph = async (options: FetchOptions) => { ? `${(dailyFees || 0) - (dailyRevenue || 0)}` : undefined, dailyProtocolRevenue: `${dailyRevenue}`, + timestamp: options.startOfDay, }; }; @@ -73,9 +77,52 @@ const mapChain = (chain: Chain): string => { }; const adapter: Adapter = { - version: 2, + version: 1, breakdown: { - v1: adapterV1, + v1: { + [CHAIN.ARBITRUM]: { + fetch: async (_t: any, _tt: any, options: FetchOptions) => { + const data = await graphsV1(CHAIN.ARBITRUM)(_t, _tt, options); + return { + dailyFees: data.dailyVolume ? `${Number(data.dailyVolume) * TOTAL_FEES}` : "0", + dailyUserFees: data.dailyVolume ? `${Number(data.dailyVolume) * TOTAL_FEES}` : "0", + dailyRevenue: data.dailyVolume ? `${Number(data.dailyVolume) * PROTOCOL_FEES}` : "0", + dailyHoldersRevenue: data.dailyVolume ? `${Number(data.dailyVolume) * HOLDER_REV}` : "0", + dailySupplySideRevenue: data.dailyVolume ? `${Number(data.dailyVolume) * LP_FEE}` : "0", + timestamp: options.startOfDay, + }; + }, + start: 1672012800, + }, + [CHAIN.BSC]: { + fetch: async (_t: any, _tt: any, options: FetchOptions) => { + const data = await graphsV1(CHAIN.BSC)(_t, _tt, options); + return { + dailyFees: data.dailyVolume ? `${Number(data.dailyVolume) * TOTAL_FEES}` : "0", + dailyUserFees: data.dailyVolume ? `${Number(data.dailyVolume) * TOTAL_FEES}` : "0", + dailyRevenue: data.dailyVolume ? `${Number(data.dailyVolume) * PROTOCOL_FEES}` : "0", + dailyHoldersRevenue: data.dailyVolume ? `${Number(data.dailyVolume) * HOLDER_REV}` : "0", + dailySupplySideRevenue: data.dailyVolume ? `${Number(data.dailyVolume) * LP_FEE}` : "0", + timestamp: options.startOfDay, + }; + }, + start: 1664841600, + }, + [CHAIN.AVAX]: { + fetch: async (_t: any, _tt: any, options: FetchOptions) => { + const data = await graphsV1(CHAIN.AVAX)(_t, _tt, options); + return { + dailyFees: data.dailyVolume ? `${Number(data.dailyVolume) * TOTAL_FEES}` : "0", + dailyUserFees: data.dailyVolume ? `${Number(data.dailyVolume) * TOTAL_FEES}` : "0", + dailyRevenue: data.dailyVolume ? `${Number(data.dailyVolume) * PROTOCOL_FEES}` : "0", + dailyHoldersRevenue: data.dailyVolume ? `${Number(data.dailyVolume) * HOLDER_REV}` : "0", + dailySupplySideRevenue: data.dailyVolume ? `${Number(data.dailyVolume) * LP_FEE}` : "0", + timestamp: options.startOfDay, + }; + }, + start: 1669420800, + }, + }, v2: { [CHAIN.AVAX]: { fetch: graph, From 6243ed36ae3729dddcd0e42a6add2d91dc1f01ee Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 1 Oct 2024 17:34:41 +0000 Subject: [PATCH 1566/1590] fix remove get block from code --- dexs/joe-v2.1/index.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/dexs/joe-v2.1/index.ts b/dexs/joe-v2.1/index.ts index fc6a145569..ee3991ded9 100644 --- a/dexs/joe-v2.1/index.ts +++ b/dexs/joe-v2.1/index.ts @@ -53,15 +53,11 @@ const fetch: FetchV2 = async (options: FetchOptions): Promise => try { const tokens0 = await options.api.multiCall({ abi: 'address:getTokenX', calls: lpTokens! }) const tokens1 = await options.api.multiCall({ abi: 'address:getTokenY', calls: lpTokens! }) - const fromBlock = await options.getBlock(options.fromTimestamp, options.chain, {}); - const toBlock = await options.getBlock(options.toTimestamp, options.chain, {}); const logs: any[][] = (await Promise.all(lpTokens.map((lp: string) => options.getLogs({ target: lp, eventAbi: event_swap, - flatten: false, - fromBlock, - toBlock, + flatten: false })))) logs.map((log: any, index: number) => { From d755860ee9b203970169df01aab7740fcea34380 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 1 Oct 2024 18:01:42 +0000 Subject: [PATCH 1567/1590] fix chain name --- bridge-aggregator/xy-finance/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bridge-aggregator/xy-finance/index.ts b/bridge-aggregator/xy-finance/index.ts index bbd5dc7c15..f1065e18c0 100644 --- a/bridge-aggregator/xy-finance/index.ts +++ b/bridge-aggregator/xy-finance/index.ts @@ -34,7 +34,7 @@ const contract: Contract = { yBridge: "0x33383265290421C704c6b09F4BF27ce574DC4203", xyRouter: "0x062b1Db694F6A437e3c028FC60dd6feA7444308c" }, - [CHAIN.ZKSYNC]: { + [CHAIN.ERA]: { yBridge: "0xe4e156167cc9C7AC4AbD8d39d203a5495F775547", xyRouter: "0x30E63157bD0bA74C814B786F6eA2ed9549507b46" }, From 62d428e3b5cf95cf4f1ecdcc678ecece8d40020a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 1 Oct 2024 18:06:07 +0000 Subject: [PATCH 1568/1590] rename --- {bridge-aggregator => bridge-aggregators}/bungee/index.ts | 0 .../jumper.exchange/index.ts | 0 {bridge-aggregator => bridge-aggregators}/sharpe-bridge/index.ts | 0 {bridge-aggregator => bridge-aggregators}/xy-finance/index.ts | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {bridge-aggregator => bridge-aggregators}/bungee/index.ts (100%) rename {bridge-aggregator => bridge-aggregators}/jumper.exchange/index.ts (100%) rename {bridge-aggregator => bridge-aggregators}/sharpe-bridge/index.ts (100%) rename {bridge-aggregator => bridge-aggregators}/xy-finance/index.ts (100%) diff --git a/bridge-aggregator/bungee/index.ts b/bridge-aggregators/bungee/index.ts similarity index 100% rename from bridge-aggregator/bungee/index.ts rename to bridge-aggregators/bungee/index.ts diff --git a/bridge-aggregator/jumper.exchange/index.ts b/bridge-aggregators/jumper.exchange/index.ts similarity index 100% rename from bridge-aggregator/jumper.exchange/index.ts rename to bridge-aggregators/jumper.exchange/index.ts diff --git a/bridge-aggregator/sharpe-bridge/index.ts b/bridge-aggregators/sharpe-bridge/index.ts similarity index 100% rename from bridge-aggregator/sharpe-bridge/index.ts rename to bridge-aggregators/sharpe-bridge/index.ts diff --git a/bridge-aggregator/xy-finance/index.ts b/bridge-aggregators/xy-finance/index.ts similarity index 100% rename from bridge-aggregator/xy-finance/index.ts rename to bridge-aggregators/xy-finance/index.ts From 57ac7f8406b26c5cc27e2d6e80d4cc1443c43e74 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 1 Oct 2024 18:13:23 +0000 Subject: [PATCH 1569/1590] add brigg --- adapters/types.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/adapters/types.ts b/adapters/types.ts index ded25b0476..c4756f9aa0 100644 --- a/adapters/types.ts +++ b/adapters/types.ts @@ -172,7 +172,8 @@ export enum AdapterType { OPTIONS = 'options', PROTOCOLS = 'protocols', ROYALTIES = 'royalties', - AGGREGATOR_DERIVATIVES = 'aggregator-derivatives' + AGGREGATOR_DERIVATIVES = 'aggregator-derivatives', + BRIDGE_AGGREGATORS = 'bridge-aggregators', } export type FetchResult = FetchResultVolume & FetchResultFees & FetchResultAggregators & FetchResultOptions & FetchResultIncentives From b03e4086835ec73452bce79d60f483634fe6d577 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 1 Oct 2024 18:30:36 +0000 Subject: [PATCH 1570/1590] fix chain name --- bridge-aggregators/jumper.exchange/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bridge-aggregators/jumper.exchange/index.ts b/bridge-aggregators/jumper.exchange/index.ts index b20d99f4ca..aa2200cc32 100644 --- a/bridge-aggregators/jumper.exchange/index.ts +++ b/bridge-aggregators/jumper.exchange/index.ts @@ -21,7 +21,7 @@ const contract: IContract = { [CHAIN.FANTOM]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.MODE]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.SCROLL]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', - [CHAIN.ZKSYNC]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', + [CHAIN.ERA]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.METIS]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', [CHAIN.XDAI]: '0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae', } From 892414f08ce14b9d8e7e1b621b1b1c3091aca24e Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 2 Oct 2024 10:01:21 +0100 Subject: [PATCH 1571/1590] fjord --- fees/fjord-foundry/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/fjord-foundry/index.ts b/fees/fjord-foundry/index.ts index 684828ab1d..250e1ccc80 100644 --- a/fees/fjord-foundry/index.ts +++ b/fees/fjord-foundry/index.ts @@ -26,7 +26,7 @@ const getV2Data = async (endTimestamp: number, chainId: number) => { const dayTimestamp = getTimestampAtStartOfDayUTC(endTimestamp) const historicalFees = (await fetchURL(feeEndpoint)) - const chainData = historicalFees.stats.find(cd => cd.chainId === chainId); + const chainData = [...historicalFees.stats.evm, ...historicalFees.stats.svm].find(cd => cd.chainId === chainId); const totalFee = chainData.stats .filter(item => item.timestamp <= dayTimestamp) From c43c8a3c34194c4bbd313aa99b92d11d15726111 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:05:17 +0200 Subject: [PATCH 1572/1590] code refactor --- dexs/pika-protocol-v4/index.ts | 2 +- fees/0x0dex.ts | 5 +- fees/across.ts | 126 ++++++++++++--------------------- fees/airswap.ts | 5 +- fees/cakepie.ts | 7 +- fees/hopr/index.ts | 75 +++++++------------- fees/magpie.ts | 7 +- fees/penpie.ts | 9 +-- fees/radpie.ts | 7 +- fees/size-credit.ts | 9 +-- 10 files changed, 80 insertions(+), 172 deletions(-) diff --git a/dexs/pika-protocol-v4/index.ts b/dexs/pika-protocol-v4/index.ts index 0a56e0b9a4..59607272b3 100644 --- a/dexs/pika-protocol-v4/index.ts +++ b/dexs/pika-protocol-v4/index.ts @@ -23,7 +23,7 @@ interface IValume { } const endpoints: IURL = { - [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('5dP9FpbXxmNPRaERfzyKEGuRKh2NRQuwPBWfMLGoSRX5') + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('6Z7dcfhWCWxvM5EWYtS9ZRmJSKmButFjuTvvDoCWEef') } const fetch = (chain: Chain) => { diff --git a/fees/0x0dex.ts b/fees/0x0dex.ts index 453f2f7626..14bbbfd0d9 100644 --- a/fees/0x0dex.ts +++ b/fees/0x0dex.ts @@ -9,13 +9,10 @@ const discount = 0.0045; // Deposit Event const discountThreshold = 1000000 * (9 ** 18); -const fetch: any = async ({ getLogs, api, getFromBlock, getToBlock }: FetchOptions) => { - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) +const fetch: any = async ({ getLogs, api,}: FetchOptions) => { const logs = await getLogs({ target: OxOPoolETHAddress, eventAbi: "event Deposit (address sender, uint256 tokenAmount, uint256 ringIndex)", - fromBlock, - toBlock }) const senders = logs.map((log: any) => log.sender); const balances = await api.multiCall({ abi: 'erc20:balanceOf', calls: senders, target: OxOToken }) diff --git a/fees/across.ts b/fees/across.ts index 16b1a30e4a..6880b539ca 100644 --- a/fees/across.ts +++ b/fees/across.ts @@ -1,8 +1,5 @@ -import { Chain } from "@defillama/sdk/build/general"; import { - ChainBlocks, FetchOptions, - FetchResultFees, SimpleAdapter, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; @@ -17,10 +14,6 @@ const abis = { FilledV3Relay: "event FilledV3Relay(address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount, uint256 repaymentChainId, uint256 indexed originChainId, uint32 indexed depositId, uint32 fillDeadline, uint32 exclusivityDeadline, address exclusiveRelayer, address indexed relayer, address depositor, address recipient, bytes message, (address updatedRecipient, bytes updatedMessage, uint256 updatedOutputAmount, uint8 fillType) relayExecutionInfo)", }; -const topic0_fund_disposit_v2 = - "0xafc4df6845a4ab948b492800d3d8a25d538a102a2bc07cd01f1cfa097fddcff6"; -const topic0_fund_disposit_v3 = - "0xa123dc29aebf7d0c3322c8eeb5b999e859f39937950ed31056532713d0de396f"; const topic0_filled_replay_v2 = "0x8ab9dc6c19fe88e69bc70221b339c84332752fdd49591b7c51e66bae3947b73c"; const topic0_filled_replay_v3 = @@ -32,92 +25,67 @@ const address: any = { [CHAIN.OPTIMISM]: "0x6f26Bf09B1C792e3228e5467807a900A503c0281", [CHAIN.POLYGON]: "0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096", }; -const graph = (chain: Chain) => { - return async ({ createBalances, getLogs, getFromBlock, getToBlock }: FetchOptions) => { - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) - const dailyFees = createBalances(); - const logs_fund_disposit = ( - await getLogs({ - target: address[chain], - eventAbi: abis.FundsDeposited, - topic: topic0_fund_disposit_v2, - fromBlock, - toBlock - }) - ).filter((a: any) => Number(a!.destinationChainId) === 288); - - const logs_fund_disposit_v3 = ( - await getLogs({ - target: address[chain], - eventAbi: abis.V3FundsDeposited, - topic: topic0_fund_disposit_v3, - fromBlock, - toBlock - }) - ).filter((a: any) => Number(a!.destinationChainId) === 288); - - const logs_filled_replay = await getLogs({ +const graph = async ({ createBalances, getLogs, chain }: FetchOptions) => { + const dailyFees = createBalances(); + const logs_fund_disposit = ( + await getLogs({ target: address[chain], - eventAbi: abis.FilledRelay, - topic: topic0_filled_replay_v2, - fromBlock, - toBlock - }); + eventAbi: abis.FundsDeposited, + }) + ).filter((a: any) => Number(a!.destinationChainId) === 288); - const logs_filled_replay_v3 = await getLogs({ + const logs_fund_disposit_v3 = ( + await getLogs({ target: address[chain], - eventAbi: abis.FilledV3Relay, - topic: topic0_filled_replay_v3, - fromBlock, - toBlock - }); + eventAbi: abis.V3FundsDeposited, + }) + ).filter((a: any) => Number(a!.destinationChainId) === 288); + + const logs_filled_replay = await getLogs({ + target: address[chain], + eventAbi: abis.FilledRelay, + topic: topic0_filled_replay_v2, + }); + + const logs_filled_replay_v3 = await getLogs({ + target: address[chain], + eventAbi: abis.FilledV3Relay, + topic: topic0_filled_replay_v3, + }); - logs_fund_disposit.map((a: any) => - dailyFees.add(a.originToken, Number(a.amount * a.relayerFeePct) / 1e18), - ); + logs_fund_disposit.map((a: any) => + dailyFees.add(a.originToken, Number(a.amount * a.relayerFeePct) / 1e18), + ); - logs_fund_disposit_v3.map((a: any) => - dailyFees.add(a.outputToken, Number(a.inputAmount - a.outputAmount)), - ); + logs_fund_disposit_v3.map((a: any) => + dailyFees.add(a.outputToken, Number(a.inputAmount - a.outputAmount)), + ); - logs_filled_replay.map((a: any) => - dailyFees.add( - a.destinationToken, - (Number(a.amount) * Number(a.relayerFeePct + a.realizedLpFeePct)) / - 1e18, - ), - ); + logs_filled_replay.map((a: any) => + dailyFees.add( + a.destinationToken, + (Number(a.amount) * Number(a.relayerFeePct + a.realizedLpFeePct)) / + 1e18, + ), + ); - logs_filled_replay_v3.map((a: any) => - dailyFees.add(a.outputToken, Number(a.inputAmount - a.outputAmount)), - ); + logs_filled_replay_v3.map((a: any) => + dailyFees.add(a.outputToken, Number(a.inputAmount - a.outputAmount)), + ); - return { - dailyFees, - dailySupplySideRevenue: dailyFees, - }; + return { + dailyFees, + dailySupplySideRevenue: dailyFees, }; }; const adapter: SimpleAdapter = { version: 2, adapter: { - [CHAIN.ETHEREUM]: { - fetch: graph(CHAIN.ETHEREUM), - start: 1682840443, - }, - [CHAIN.ARBITRUM]: { - fetch: graph(CHAIN.ARBITRUM), - start: 1682840443, - }, - // [CHAIN.OPTIMISM]: { - // fetch: graph(CHAIN.OPTIMISM), - // start: 1682840443, - // }, - [CHAIN.POLYGON]: { - fetch: graph(CHAIN.POLYGON), - start: 1682840443, - }, + [CHAIN.ETHEREUM]: { fetch: graph, start: 1682840443, }, + [CHAIN.ARBITRUM]: { fetch: graph, start: 1682840443, }, + [CHAIN.OPTIMISM]: { fetch: graph, start: 1682840443, }, + [CHAIN.POLYGON]: { fetch: graph, start: 1682840443, }, }, }; diff --git a/fees/airswap.ts b/fees/airswap.ts index 4ac91cf66e..9b63e8f088 100644 --- a/fees/airswap.ts +++ b/fees/airswap.ts @@ -16,15 +16,12 @@ const address: TAddress = { } const graph = (chain: Chain) => { - return async ({ createBalances, getLogs, getFromBlock, getToBlock }: FetchOptions) => { - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + return async ({ createBalances, getLogs,}: FetchOptions) => { const dailyFees = createBalances(); (await getLogs({ target: address[chain], eventAbi: event_swap, - fromBlock, - toBlock })).map((e: any) => { dailyFees.add(e.signerToken, e.signerAmount.toString() * e.protocolFee.toString() / 10000) }) diff --git a/fees/cakepie.ts b/fees/cakepie.ts index 374109ccae..f7d90e2e48 100644 --- a/fees/cakepie.ts +++ b/fees/cakepie.ts @@ -23,15 +23,12 @@ const address_bribe: TAddress = { //cake emissions and vote incentives for pools are the revenue const graph = (chain: Chain) => { - return async ({ createBalances, getLogs, getFromBlock, getToBlock }: FetchOptions) => { - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + return async ({ createBalances, getLogs, }: FetchOptions) => { const dailyFees = createBalances(); if (chain=='BSC'){ (await getLogs({ target: address_reward[chain], eventAbi: event_paid_stream, - fromBlock, - toBlock })).map((e: any) => { // check if it is cake address if (e.token === '0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82') { @@ -42,8 +39,6 @@ const graph = (chain: Chain) => { (await getLogs({ target: address_bribe[chain], eventAbi: event_paid_bribe, - fromBlock, - toBlock })).map((e: any) => { dailyFees.add(e._bribeToken, e._amount) }) diff --git a/fees/hopr/index.ts b/fees/hopr/index.ts index 7a835e409f..7c965f85cb 100644 --- a/fees/hopr/index.ts +++ b/fees/hopr/index.ts @@ -1,11 +1,8 @@ import ADDRESSES from '../../helpers/coreAssets.json' -import { Adapter, FetchOptions, FetchResultFees } from "../../adapters/types"; +import { Adapter, FetchOptions, } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import * as sdk from "@defillama/sdk"; import { ethers } from "ethers"; import { getProvider } from "@defillama/sdk/build/general"; -import { getBlock } from "../../helpers/getBlock"; -import { getPrices } from "../../utils/prices"; const channels_address = '0x693Bac5ce61c720dDC68533991Ceb41199D8F8ae'; const wxHOPR_address = ADDRESSES.xdai.XHOPR; @@ -25,70 +22,48 @@ interface ITx { transactionHash: string; } -const fetch = async ({ getFromBlock, getToBlock, toTimestamp, }: FetchOptions) => { +const fetch = async ({ toTimestamp, getLogs, createBalances, }: FetchOptions) => { const provider = getProvider('xdai'); const iface = new ethers.Interface(['function execTransactionFromModule(address to,uint256 value,bytes data,uint8 operation)']) - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) - - const ticketRedeemedLogs: ITx[] = (await sdk.getEventLogs({ + const ticketRedeemedLogs: ITx[] = await getLogs({ target: channels_address, - topic: topic0, - fromBlock, - toBlock, - topics: [topic0], - chain: CHAIN.XDAI - }))as ITx[]; + eventAbi: 'event TicketRedeemed (bytes32 indexed channelId, uint48 newTicketIndex)', entireLog: true, + }) + const ticketRedeemedHashSet = new Set(ticketRedeemedLogs.map(ticket => ticket.transactionHash.toLowerCase())); + console.log('ticketRedeemedHashSet', ticketRedeemedHashSet.size); - const batchSize = 4500; - const batches = Math.ceil((toBlock - fromBlock) / batchSize); - const erc20transferLog: ITx[] = await Promise.all( - Array.from({ length: batches }, (_, index) => - sdk.getEventLogs({ - target: wxHOPR_address, - topic: topic1, - toBlock: fromBlock + (index + 1) * batchSize, - fromBlock: fromBlock + index * batchSize, - topics: [topic1, topic2], - chain: CHAIN.XDAI - }) - ) - ).then((responses) => responses.flatMap((response) => response as ITx[])); + const erc20transferLog: ITx[] = await getLogs({ + target: wxHOPR_address, topics: [topic1, topic2], entireLog: true, + eventAbi: 'event Transfer (address indexed from, address indexed to, uint256 value)', + }); + const erc20transferHashSet = new Set(erc20transferLog.map(transaction => transaction.transactionHash.toLowerCase())); + console.log('erc20transferHashSet', erc20transferHashSet.size); + const erc20TransferMap = new Map(erc20transferLog.map(transaction => [transaction.transactionHash.toLowerCase(), transaction.data])); let dailyRevenueStayedInChannelsTXs: string[] = []; const dailyRevenueArrayPaidToSafe = ticketRedeemedLogs.map(ticket => { - const transactionHash = ticket.transactionHash; - const index = erc20transferLog.findIndex(transaction => transaction.transactionHash === transactionHash); - if(index !== -1) { - return erc20transferLog[index].data; - } else { - dailyRevenueStayedInChannelsTXs.push(ticket.transactionHash); - } + const transactionHash = ticket.transactionHash.toLowerCase(); + const data = erc20TransferMap[transactionHash]; + if (data) + return data.args.value + dailyRevenueStayedInChannelsTXs.push(ticket.transactionHash); }).filter(elem => elem !== undefined) as string[]; - const dailyRevenueStayedInChannels = await Promise.all(dailyRevenueStayedInChannelsTXs.map(async(transactionHash) => { + const dailyRevenueStayedInChannels = await Promise.all(dailyRevenueStayedInChannelsTXs.map(async (transactionHash) => { const tx = await provider.getTransaction(transactionHash) as any; const data = tx!.input; const decodedInput = iface.decodeFunctionData('execTransactionFromModule', data) - const hexValue = '0x' + decodedInput[2].substring(138,202); + const hexValue = '0x' + decodedInput[2].substring(138, 202); return hexValue; })); - const dailyRevenue = [...dailyRevenueArrayPaidToSafe, ...dailyRevenueStayedInChannels].map((data: string) => { - const amount = Number(data) / 10 ** 18; - return amount; - }).reduce((a: number, b: number) => a+b,0); - - const prices: any = (await getPrices([`${chain}:${xHOPR_address}`], toTimestamp)); - const price = prices[`${chain}:${xHOPR_address}`]?.price || 0; - const dailyRevenueUSD = dailyRevenue * price; + const dailyRevenue = dailyRevenueArrayPaidToSafe.concat(dailyRevenueStayedInChannels) - return { - dailyFees: `${dailyRevenueUSD}`, - dailyUserFees: `${dailyRevenueUSD}`, - dailyRevenue: `${dailyRevenueUSD}` - }; + const dailyFees = createBalances(); + dailyFees.add(xHOPR_address, dailyRevenue); + return { dailyFees, dailyUserFees: dailyFees, dailyRevenue: dailyFees }; } const adapter: Adapter = { diff --git a/fees/magpie.ts b/fees/magpie.ts index 83d102ff21..2c9d7b440b 100644 --- a/fees/magpie.ts +++ b/fees/magpie.ts @@ -21,22 +21,17 @@ const address_base: TAddress = { //all revenue is from bribes and is given to governance token holders 100% const graph = (chain: Chain) => { - return async ({ createBalances, getLogs, getFromBlock, getToBlock }: FetchOptions) => { - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + return async ({ createBalances, getLogs, }: FetchOptions) => { const dailyFees = createBalances(); (await getLogs({ target: address_stream[chain], eventAbi: event_paid_stream, - fromBlock, - toBlock })).map((e: any) => { dailyFees.add(e._rewardToken, e._reward) }), (await getLogs({ target: address_base[chain], eventAbi: event_paid_base, - fromBlock, - toBlock })).map((e: any) => { dailyFees.add(e._token, e._reward) }) diff --git a/fees/penpie.ts b/fees/penpie.ts index 6421ae0485..23ea9a658a 100644 --- a/fees/penpie.ts +++ b/fees/penpie.ts @@ -37,15 +37,12 @@ const address_bribe: TAddress = { //all revenue is from bribes and is given to governance token holders 100% const graph = (chain: Chain) => { - return async ({ createBalances, getLogs, getFromBlock, getToBlock }: FetchOptions) => { - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + return async ({ createBalances, getLogs, }: FetchOptions) => { const dailyFees = createBalances(); if (chain=='ETHEREUM'){ (await getLogs({ target:reward_eth_pendle , eventAbi: event_pendle_fee, - fromBlock, - toBlock })).map((e: any) => { // check if it is penpie if (e.user === '0x6e799758cee75dae3d84e09d40dc416ecf713652') { @@ -56,8 +53,6 @@ const graph = (chain: Chain) => { (await getLogs({ target: address_reward[chain], eventAbi: event_paid_stream, - fromBlock, - toBlock })).map((e: any) => { if (exclude[chain].includes(e._rewardToken)) { return @@ -67,8 +62,6 @@ const graph = (chain: Chain) => { (await getLogs({ target: address_bribe[chain], eventAbi: event_paid_bribe, - fromBlock, - toBlock })).map((e: any) => { if (exclude[chain].includes(e.token)) { return diff --git a/fees/radpie.ts b/fees/radpie.ts index 6fa763452b..1d80a5c457 100644 --- a/fees/radpie.ts +++ b/fees/radpie.ts @@ -29,8 +29,7 @@ const address_rdnt: TAddress = { } const graph = (chain: Chain) => { - return async ({ createBalances, getLogs, getFromBlock, getToBlock,api }: FetchOptions) => { - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + return async ({ createBalances, getLogs, api }: FetchOptions) => { const dailyFees = createBalances(); let poolLength = await api.call({ abi: 'uint256:poolLength', target:address_reward[chain], }); // console.log(poolLength); @@ -43,8 +42,6 @@ const graph = (chain: Chain) => { const logs = await getLogs({ target: i.rewarder, eventAbi: event_paid_stream, - fromBlock, - toBlock }); // console.log(logs) logs.forEach((e: any) => { @@ -56,8 +53,6 @@ const graph = (chain: Chain) => { (await getLogs({ target: address_rdnt_reward[chain], eventAbi: event_paid_rdnt, - fromBlock, - toBlock })).map((e: any) => { // console.log(e) dailyFees.add(address_rdnt[chain], e._amount) diff --git a/fees/size-credit.ts b/fees/size-credit.ts index dbe94b9394..e2c0bff3f8 100644 --- a/fees/size-credit.ts +++ b/fees/size-credit.ts @@ -7,9 +7,8 @@ const SZAUSDC_CONTRACT = '0x38978038a06a21602a4202dfa66968e7f525bf3e'; const AUSDC_CONTRACT = '0x4e65fe4dba92790696d040ac24aa414708f5c0ab'; const SIZE_PROXY_CONTRACT = '0xC2a429681CAd7C1ce36442fbf7A4a68B11eFF940'; -const fetch: any = async ({ createBalances, getLogs, api, getFromBlock, getToBlock }: FetchOptions) => { +const fetch: any = async ({ createBalances, getLogs, api, }: FetchOptions) => { const fees = createBalances() - const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) const FEE_MAPPING = [ ADDRESSES.base.WETH, AUSDC_CONTRACT @@ -18,20 +17,15 @@ const fetch: any = async ({ createBalances, getLogs, api, getFromBlock, getToBlo 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) => { @@ -41,7 +35,6 @@ const fetch: any = async ({ createBalances, getLogs, api, getFromBlock, getToBlo } }) }) - console.log(await fees.getUSDJSONs()) return { dailyFees: fees, From 4d97ce8522e51b921140523458f8b92fc2a6b521 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@proton.me> Date: Wed, 2 Oct 2024 13:29:56 +0200 Subject: [PATCH 1573/1590] update endpoint base --- protocols/uniswap/index.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index ea7765e843..559a4ef56b 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -1,11 +1,11 @@ -import ADDRESSES from '../../helpers/coreAssets.json' +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; -import { BreakdownAdapter, FetchResultGeneric, BaseAdapter, FetchOptions } from "../../adapters/types"; +import request, { gql } from 'graphql-request'; +import { BaseAdapter, BreakdownAdapter, FetchOptions, FetchResultGeneric } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import ADDRESSES from '../../helpers/coreAssets.json'; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; -import * as sdk from "@defillama/sdk"; -import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph" -import request, { gql } from 'graphql-request'; +import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph"; import { httpPost } from '../../utils/fetchURL'; const v1Endpoints = { @@ -65,7 +65,7 @@ const v3Endpoints = { // [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.BASE]: sdk.graph.modifyEndpoint('GqzP4Xaehti8KSfQmv3ZctFSjnSUYZ4En5NRsiTbvZpz'), [CHAIN.ERA]: "https://api.thegraph.com/subgraphs/name/freakyfractal/uniswap-v3-zksync-era" }; From e39d9c10d431fd9154bdf38dca004f2aa564a29b Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 2 Oct 2024 12:53:22 +0100 Subject: [PATCH 1574/1590] apeswap --- aggregators/dexible/index.ts | 2 +- dexs/apeswap/index.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aggregators/dexible/index.ts b/aggregators/dexible/index.ts index f985b5790a..2b5d2528c8 100644 --- a/aggregators/dexible/index.ts +++ b/aggregators/dexible/index.ts @@ -77,7 +77,7 @@ const getFetch = (chain: string): Fetch => async (timestamp: number) => { const adapter: BreakdownAdapter = { breakdown: { "Dexible_v2": { - [DISABLED_ADAPTER_KEY]: disabledAdapter, + [DISABLED_ADAPTER_KEY]: disabledAdapter, // site has been sunset and discord is dead ...chains.reduce((acc, chain) => { return { ...acc, diff --git a/dexs/apeswap/index.ts b/dexs/apeswap/index.ts index 96ed65c49a..74b85b7614 100644 --- a/dexs/apeswap/index.ts +++ b/dexs/apeswap/index.ts @@ -1,8 +1,8 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter2({ +const adapters = univ2Adapter({ [CHAIN.BSC]: sdk.graph.modifyEndpoint('GH4Zt29mCApHwMfavNFw5ZdQDH3owc2Wq8DdU4hGPXYe'), [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('EcLNjgAFADeXVopmhv3HY79fayzXRtK8R9imZNopRBpE'), [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('6J4fEY6pSRsqaqDbHn17HJY1viPzrGc1pjCqBKrrQXPC'), From 89dba8d5e5c3cd81c9bdbcba9c48eafbbecf03d4 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 2 Oct 2024 13:26:22 +0100 Subject: [PATCH 1575/1590] osmo fees --- fees/osmosis.ts | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/fees/osmosis.ts b/fees/osmosis.ts index 2b93e7ea5c..63a7b77bb1 100644 --- a/fees/osmosis.ts +++ b/fees/osmosis.ts @@ -1,35 +1,40 @@ -import { Adapter, FetchV2 } from "../adapters/types"; -import { getTimestampAtStartOfPreviousDayUTC } from "../utils/date"; +import { Adapter, FetchResultV2, FetchV2 } from "../adapters/types"; import fetchURL from "../utils/fetchURL"; import { CHAIN } from "../helpers/chains"; -const feeEndpoint = "https://api-osmosis.imperator.co/fees/v1/total/historical"; - interface IChartItem { - time: string; - fees_spent: number; + labels: string; + protorev: number; + swap_fees: number; + taker_fees: number; } -const fetch: FetchV2 = async ({ endTimestamp }) => { - const dayTimestamp = getTimestampAtStartOfPreviousDayUTC(endTimestamp); +const fetch: FetchV2 = async ({ + startTimestamp, + endTimestamp, +}): Promise => { + const startDate = new Date(startTimestamp * 1000).toISOString().slice(0, 10); + const endDate = new Date(endTimestamp * 1000).toISOString().slice(0, 10); + const feeEndpoint = `https://www.datalenses.zone/numia/osmosis/lenses/hourly_revenue?start_date=${startDate}&end_date=${endDate}`; const historicalFees: IChartItem[] = await fetchURL(feeEndpoint); - const totalFee = historicalFees - .filter( - (feeItem) => new Date(feeItem.time).getTime() / 1000 <= dayTimestamp, - ) - .reduce((acc, { fees_spent }) => acc + fees_spent, 0); + let dailyFees: number = 0; + let dailyRevenue: number = 0; - const dailyFee = historicalFees.find( - (dayItem) => new Date(dayItem.time).getTime() / 1000 === dayTimestamp, - )?.fees_spent; + historicalFees + .filter((feeItem) => { + const date = new Date(feeItem.labels).getTime() / 1000; + return date >= startTimestamp && date <= endTimestamp; + }) + .map(({ protorev, swap_fees, taker_fees }) => { + dailyRevenue += protorev; + dailyFees += swap_fees; + dailyFees += taker_fees; + }); return { - timestamp: dayTimestamp, - totalFees: `${totalFee}`, - dailyFees: dailyFee ? `${dailyFee}` : undefined, - totalRevenue: "0", - dailyRevenue: "0", + dailyFees, + dailyRevenue, }; }; From 7e658803bf43c665d1ffadb9fad309e1284aebab Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 2 Oct 2024 12:38:18 +0000 Subject: [PATCH 1576/1590] fix enable prerich-app --- fees/prerich-app.ts | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 fees/prerich-app.ts diff --git a/fees/prerich-app.ts b/fees/prerich-app.ts new file mode 100644 index 0000000000..2e8f17b877 --- /dev/null +++ b/fees/prerich-app.ts @@ -0,0 +1,39 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { queryDune } from "../helpers/dune"; + +const fethcFeesSolana = async (options: FetchOptions) => { + try { + const dailyFees = options.createBalances(); + const dailyRevenue = options.createBalances(); + const value = (await queryDune("3521814", { + start: options.startTimestamp, + end: options.endTimestamp, + receiver: '2F6oCWmo44sxTzg228GkqKhwuhFTrUNTPCnSFBsyLZeg' + })); + dailyFees.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); + dailyRevenue.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); + return { + dailyFees: dailyFees, + dailyRevenue: dailyRevenue, + } + } catch (error: any) { + console.error('Error fetching fees for Solana', error); + return { + dailyFees: "0", + } + } +} + + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.SOLANA]: { + fetch: fethcFeesSolana, + start: 1685577600, + }, + } +} + +export default adapter; From 2cf345854eae2f927bc532418daff06a4deb5a98 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 2 Oct 2024 13:49:03 +0100 Subject: [PATCH 1577/1590] canto --- fees/canto.ts | 2 +- helpers/blockscoutFees.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fees/canto.ts b/fees/canto.ts index 8062aa9054..7daa9c618e 100644 --- a/fees/canto.ts +++ b/fees/canto.ts @@ -1,4 +1,4 @@ import { CHAIN } from "../helpers/chains"; import { blockscoutFeeAdapter } from "../helpers/blockscoutFees"; -export default blockscoutFeeAdapter(CHAIN.CANTO, "https://evm.explorer.canto.io/api?module=stats&action=totalfees", "canto") \ No newline at end of file +export default blockscoutFeeAdapter(CHAIN.CANTO, "https://explorer.plexnode.wtf/api/v2/stats?module=stats&action=totalfees", "canto") \ No newline at end of file diff --git a/helpers/blockscoutFees.ts b/helpers/blockscoutFees.ts index 70028a19bc..fd34a41928 100644 --- a/helpers/blockscoutFees.ts +++ b/helpers/blockscoutFees.ts @@ -1,5 +1,6 @@ import { Adapter, ChainBlocks, FetchOptions, ProtocolType } from "../adapters/types"; import { httpGet } from '../utils/fetchURL'; +import { CHAIN } from "./chains"; export function blockscoutFeeAdapter(chain: string, url: string, CGToken?: string) { const adapter: Adapter = { @@ -10,7 +11,8 @@ export function blockscoutFeeAdapter(chain: string, url: string, CGToken?: strin const dailyFees = createBalances() const date = new Date(startOfDay * 1000).toISOString().slice(0, "2011-10-05".length) const fees = await httpGet(`${url}&date=${date}`) - if (CGToken) dailyFees.addCGToken(CGToken, fees.result/1e18) + if (chain == CHAIN.CANTO && CGToken) dailyFees.addCGToken(CGToken, fees.gas_used_today * fees.gas_prices.average /1e18) + else if (CGToken) dailyFees.addCGToken(CGToken, fees.result/1e18) else dailyFees.addGasToken(fees.result) return { From b055f398dfd778383c335b0d458587755ebbf88c Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 2 Oct 2024 14:28:09 +0100 Subject: [PATCH 1578/1590] arrakis --- fees/arrakis-v2/index.ts | 46 ++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/fees/arrakis-v2/index.ts b/fees/arrakis-v2/index.ts index a537c39efb..e333f77d32 100644 --- a/fees/arrakis-v2/index.ts +++ b/fees/arrakis-v2/index.ts @@ -68,11 +68,11 @@ async function getVaultsFees( vaults.forEach((_: string, index: number) => { const token0 = token0s[index]; - const prevFee0 = prevBals[index].fee0; + const prevFee0 = prevBals[index]?.fee0 ?? 0; const currFee0 = currBals[index].fee0; - const token1 = token1s[index]; - const prevFee1 = prevBals[index].fee1; + const token1 = token1s[index]; + const prevFee1 = prevBals[index]?.fee1 ?? 0; const currFee1 = currBals[index].fee1; if (token0 && prevFee0 && currFee0) { @@ -102,26 +102,26 @@ const adapter: Adapter = { getVaultsFees(options, contracts[CHAIN.ETHEREUM]), start: 1693039022, }, - [CHAIN.POLYGON]: { - fetch: (options: FetchOptions) => - getVaultsFees(options, contracts[CHAIN.POLYGON]), - start: 1693039022, - }, - [CHAIN.OPTIMISM]: { - fetch: (options: FetchOptions) => - getVaultsFees(options, contracts[CHAIN.OPTIMISM]), - start: 1693039022, - }, - [CHAIN.BASE]: { - fetch: (options: FetchOptions) => - getVaultsFees(options, contracts[CHAIN.BASE]), - start: 1693039022, - }, - [CHAIN.ARBITRUM]: { - fetch: (options: FetchOptions) => - getVaultsFees(options, contracts[CHAIN.ARBITRUM]), - start: 1693039022, - }, + // [CHAIN.POLYGON]: { + // fetch: (options: FetchOptions) => + // getVaultsFees(options, contracts[CHAIN.POLYGON]), + // start: 1693039022, + // }, + // [CHAIN.OPTIMISM]: { + // fetch: (options: FetchOptions) => + // getVaultsFees(options, contracts[CHAIN.OPTIMISM]), + // start: 1693039022, + // }, + // [CHAIN.BASE]: { + // fetch: (options: FetchOptions) => + // getVaultsFees(options, contracts[CHAIN.BASE]), + // start: 1693039022, + // }, + // [CHAIN.ARBITRUM]: { + // fetch: (options: FetchOptions) => + // getVaultsFees(options, contracts[CHAIN.ARBITRUM]), + // start: 1693039022, + // }, }, version: 2, }; From 412e8c1721cbef98d1fcef47d9769a554c8d7c8f Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 2 Oct 2024 14:31:23 +0100 Subject: [PATCH 1579/1590] liquid bolt --- fees/liquid-bolt.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fees/liquid-bolt.ts b/fees/liquid-bolt.ts index d0b95a521a..1ab016e99e 100644 --- a/fees/liquid-bolt.ts +++ b/fees/liquid-bolt.ts @@ -72,8 +72,10 @@ const getAdapter = () => { methodology } }, - [CHAIN.POLYGON]: { - fetch: fetch(CHAIN.POLYGON), + [CHAIN.POLYGON]: { // no longer in api response + fetch: async (timestamp: number) => ({ + timestamp + }), start: 1669312800, runAtCurrTime: true, meta: { From 5376a4bee5752fa632292e9a53b06fa6539998f0 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 2 Oct 2024 15:45:54 +0100 Subject: [PATCH 1580/1590] polter --- fees/polter/index.ts | 177 +++++++++++++++++++++++-------------------- 1 file changed, 94 insertions(+), 83 deletions(-) diff --git a/fees/polter/index.ts b/fees/polter/index.ts index ac993537d8..f60fdc4b6f 100644 --- a/fees/polter/index.ts +++ b/fees/polter/index.ts @@ -5,98 +5,108 @@ import { FetchV2 } from "../../adapters/types"; type THeader = { [s: string]: string; -} +}; const headers: THeader = { - 'origin': 'https://polter.finance/', - 'referer': 'https://polter.finance/', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' + origin: "https://polter.finance/", + referer: "https://polter.finance/", + "user-agent": + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", }; -const RECORDS_PER_PAGE = 1000 +const RECORDS_PER_PAGE = 1000; const endpoints: any = { - [CHAIN.FANTOM]: "https://api.studio.thegraph.com/query/71811/polter/version/latest", - [CHAIN.BASE]: "https://api.studio.thegraph.com/query/71811/polter-base/version/latest", + [CHAIN.FANTOM]: + "https://api.studio.thegraph.com/query/71811/polter/version/latest", + [CHAIN.BASE]: + "https://api.studio.thegraph.com/query/71811/polter-base/version/latest", }; const tokens: any = { fantom: { - '0x5c725631fd299703d0a74c23f89a55c6b9a0c52f': { - gecko: 'polter-finance', - decimals: 18 + "0x5c725631fd299703d0a74c23f89a55c6b9a0c52f": { + gecko: "polter-finance", + decimals: 18, }, - '0xbbce4b1513d4285bd7a59c2c63835535151c8e7c': { - gecko: 'fantom', - decimals: 18 + "0xbbce4b1513d4285bd7a59c2c63835535151c8e7c": { + gecko: "fantom", + decimals: 18, }, - '0x5a75a5f3a637cc9394816efc553d102302d4cfcd': { - gecko: 'usd-coin', - decimals: 6 + "0x5a75a5f3a637cc9394816efc553d102302d4cfcd": { + gecko: "usd-coin", + decimals: 6, }, - '0xa826b29d81caef8c9aa212f172ab3ef00566e91e': { - gecko: 'magic-internet-money', - decimals: 18 + "0xa826b29d81caef8c9aa212f172ab3ef00566e91e": { + gecko: "magic-internet-money", + decimals: 18, }, - '0x4bf6f3210488091a0111daf7ab7cf840a3af8022': { - gecko: 'stader-sftmx', - decimals: 18 + "0x4bf6f3210488091a0111daf7ab7cf840a3af8022": { + gecko: "stader-sftmx", + decimals: 18, }, - '0x0299553df0fa396c0f6f3456d293608e189c3cf3': { - gecko: 'solana', - decimals: 18 + "0x0299553df0fa396c0f6f3456d293608e189c3cf3": { + gecko: "solana", + decimals: 18, }, - '0xb49da25f726451ba0e7c7e1c0b273322d2656514': { - gecko: 'layerzero-usdc', - decimals: 6 + "0xb49da25f726451ba0e7c7e1c0b273322d2656514": { + gecko: "layerzero-usdc", + decimals: 6, }, - '0xc60f08059586849810d9c19c67919d2d99174ecf': { - gecko: 'axlusdc', - decimals: 6 + "0xc60f08059586849810d9c19c67919d2d99174ecf": { + gecko: "axlusdc", + decimals: 6, }, - '0xa37e0d5590436bd9abd2803c18c328a650b236ee': { - gecko: 'bitcoin', - decimals: 8 + "0xa37e0d5590436bd9abd2803c18c328a650b236ee": { + gecko: "bitcoin", + decimals: 8, + }, + "0x328c7a684f160c089ebff07ff1b5a417f024979e": { + gecko: "bridged-wrapped-ether-stargate", + decimals: 18, }, - '0x328c7a684f160c089ebff07ff1b5a417f024979e': { - gecko: 'bridged-wrapped-ether-stargate', - decimals: 18 - } }, base: { - '0xa0820613976b441e2c6a90e4877e2fb5f7d72552': { - gecko: 'polter-finance', - decimals: 18 + "0xa0820613976b441e2c6a90e4877e2fb5f7d72552": { + gecko: "polter-finance", + decimals: 18, }, - '0xca4e076c6d8a84a990986a3c405093087991a8fe': { - gecko: 'ethereum', - decimals: 18 + "0xca4e076c6d8a84a990986a3c405093087991a8fe": { + gecko: "ethereum", + decimals: 18, }, - '0x2a96e27e204ef366671232df28f147fa30e735ce': { - gecko: 'coinbase-wrapped-btc', - decimals: 8 + "0x2a96e27e204ef366671232df28f147fa30e735ce": { + gecko: "coinbase-wrapped-btc", + decimals: 8, }, - '0x1ddaeebbd69dccc92f5cf76593104976b9c62434': { - gecko: 'usd-coin', - decimals: 6 - } - } -} + "0x1ddaeebbd69dccc92f5cf76593104976b9c62434": { + gecko: "usd-coin", + decimals: 6, + }, + }, +}; +const nonTokens: string[] = [ + "0x6f78d5d203ee7f4f3821ea7ae507e3e20b0930ef", // pAERO +]; type RewardsPaid = { - id: number - reward: BigInt - rewardsToken: string - blockTimestamp: number -} + id: number; + reward: BigInt; + rewardsToken: string; + blockTimestamp: number; +}; -const fetch: FetchV2 = async ({ chain, startTimestamp, endTimestamp, createBalances }) => { - let skip = 0 - const dailyFees = createBalances() - const dailyRevenue = createBalances() - const rewardsPaids: RewardsPaid[] = [] +const fetch: FetchV2 = async ({ + chain, + startTimestamp, + endTimestamp, + createBalances, +}) => { + let skip = 0; + const dailyFees = createBalances(); + const dailyRevenue = createBalances(); + const rewardsPaids: RewardsPaid[] = []; while (true) { - const graphQuery = gql - `{ + const graphQuery = gql`{ rewardPaids( first: ${RECORDS_PER_PAGE}, skip: ${skip} @@ -109,30 +119,31 @@ const fetch: FetchV2 = async ({ chain, startTimestamp, endTimestamp, createBalan rewardsToken blockTimestamp } - }` + }`; const graphRes = await request(endpoints[chain], graphQuery, {}, headers); - const rewardsPaid = graphRes.rewardPaids + const rewardsPaid = graphRes.rewardPaids; if (rewardsPaid.length == 0) { - break + break; } - skip += RECORDS_PER_PAGE - rewardsPaids.push(...rewardsPaid) + skip += RECORDS_PER_PAGE; + rewardsPaids.push(...rewardsPaid); } rewardsPaids.forEach((reward: RewardsPaid) => { - const {gecko, decimals} = tokens[chain][reward.rewardsToken] + if (nonTokens.includes(reward.rewardsToken.toLowerCase())) return; + const { gecko, decimals } = tokens[chain][reward.rewardsToken]; if (!gecko) { - return + return; } - dailyFees.addCGToken(gecko, Number(reward.reward) / 10 ** decimals) - dailyRevenue.addCGToken(gecko,Number(reward.reward) / 10 ** decimals) - }) - dailyRevenue.resizeBy(0.5) + dailyFees.addCGToken(gecko, Number(reward.reward) / 10 ** decimals); + dailyRevenue.addCGToken(gecko, Number(reward.reward) / 10 ** decimals); + }); + dailyRevenue.resizeBy(0.5); return { dailyFees, dailyRevenue, - } -} + }; +}; const adapter: Adapter = { version: 2, @@ -144,8 +155,8 @@ const adapter: Adapter = { methodology: { Fees: "lockers' revenue = stakers' revenue + 50% penalty from early exit", Revenue: "depositors' revenue from borrow interests", - } - } + }, + }, }, [CHAIN.BASE]: { fetch: fetch, @@ -154,10 +165,10 @@ const adapter: Adapter = { methodology: { Fees: "lockers' revenue = stakers' revenue + 50% penalty from early exit", Revenue: "depositors' revenue from borrow interests", - } - } + }, + }, }, }, -} +}; export default adapter; From 291ec4fec8b000041400d6a0ff3fed617aa9c66e Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 2 Oct 2024 16:28:16 +0100 Subject: [PATCH 1581/1590] is expensive adapter --- fees/prerich-app.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/fees/prerich-app.ts b/fees/prerich-app.ts index 2e8f17b877..027890d676 100644 --- a/fees/prerich-app.ts +++ b/fees/prerich-app.ts @@ -28,6 +28,7 @@ const fethcFeesSolana = async (options: FetchOptions) => { const adapter: SimpleAdapter = { version: 2, + isExpensiveAdapter: true, adapter: { [CHAIN.SOLANA]: { fetch: fethcFeesSolana, From c5b9cc673a4ade78a68d24d2f9b61da2e79929b0 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 2 Oct 2024 19:34:59 +0100 Subject: [PATCH 1582/1590] defiswap --- dexs/defi-swap/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/defi-swap/index.ts b/dexs/defi-swap/index.ts index eb11352c98..f5da1304d4 100644 --- a/dexs/defi-swap/index.ts +++ b/dexs/defi-swap/index.ts @@ -1,8 +1,8 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapter = univ2Adapter({ +const adapter = univ2Adapter2({ [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('G7W3G1JGcFbWseucNkHHvQorxyjQLEQt7vt9yPN97hri') }, { factoriesName: "factories", From 98bc79d07c23d4eeafdf357ed19e70f01333f129 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 2 Oct 2024 19:36:54 +0100 Subject: [PATCH 1583/1590] fwx dex --- fees/fwx-dex/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/fwx-dex/index.ts b/fees/fwx-dex/index.ts index 97bde0a1f7..636537711d 100644 --- a/fees/fwx-dex/index.ts +++ b/fees/fwx-dex/index.ts @@ -1,6 +1,6 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2DimensionAdapter } from "../../helpers/getUniSubgraph"; +import { univ2DimensionAdapter2 } from "../../helpers/getUniSubgraph"; import { SimpleAdapter } from "../../adapters/types"; const chainConfigs = { @@ -53,7 +53,7 @@ const adapters: SimpleAdapter = { Object.entries(chainConfigs).reduce((acc, [chain, value]) => { adapters.adapter[chain] = { - ...univ2DimensionAdapter( + ...univ2DimensionAdapter2( { graphUrls: { [chain]: sdk.graph.modifyEndpoint(value.graphUrl), From 9e32a04d247efa5f829d1ba23a3b543719e60cf6 Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 2 Oct 2024 22:29:27 +0100 Subject: [PATCH 1584/1590] fix version --- aggregators/zrx/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregators/zrx/index.ts b/aggregators/zrx/index.ts index 12e6218877..a3a33645ab 100644 --- a/aggregators/zrx/index.ts +++ b/aggregators/zrx/index.ts @@ -72,7 +72,7 @@ const fetch = async (options: FetchOptions) => { }; const adapter: any = { - version: 2, + version: 1, adapter: { ...Object.values(CHAINS).reduce((acc, chain) => { return { From a74ff0e1e7444d354b02c7bbe1e4ae19053d509a Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Wed, 2 Oct 2024 22:58:25 +0100 Subject: [PATCH 1585/1590] add okx --- aggregators/okx/index.ts | 84 ++++++++++++++++++++++++++++++++++++++++ helpers/env.ts | 3 +- 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 aggregators/okx/index.ts diff --git a/aggregators/okx/index.ts b/aggregators/okx/index.ts new file mode 100644 index 0000000000..bd51bde138 --- /dev/null +++ b/aggregators/okx/index.ts @@ -0,0 +1,84 @@ +import { CHAIN } from "../../helpers/chains"; +import { FetchOptions } from "../../adapters/types"; +import { getEnv } from "../../helpers/env"; +import axios from "axios"; +import { createHmac } from "crypto"; +const plimit = require('p-limit'); +const limits = plimit(1); + +type TChain = { + [key: string]: number; +}; +const CHAINS: TChain = { + [CHAIN.ETHEREUM]: 1, + [CHAIN.BSC]: 56, + [CHAIN.OKEXCHAIN]: 66, + [CHAIN.POLYGON]: 137, + [CHAIN.TRON]: 195, + [CHAIN.AVAX]: 43114, + [CHAIN.FANTOM]: 250, + [CHAIN.ARBITRUM]: 42161, + [CHAIN.OPTIMISM]: 10, + [CHAIN.CRONOS]: 25, + [CHAIN.SOLANA]: 501, + [CHAIN.OSMOSIS]: 706, + // 10001, "EthereumPoW" + [CHAIN.APTOS]: 637, + //[CHAIN.FLARE]: 14, // broken + [CHAIN.ERA]: 324, + [CHAIN.CONFLUX]: 1030, // Conflux eSpace + [CHAIN.SUI]: 784, + //[CHAIN.BITCOIN]: 0, // broken + [CHAIN.POLYGON_ZKEVM]: 1101, + [CHAIN.SEI]: 70000029, + [CHAIN.LINEA]: 59144, + [CHAIN.MANTLE]: 5000, + [CHAIN.BASE]: 8453, + [CHAIN.STACKS]: 5757, + [CHAIN.STARKNET]: 9004, + [CHAIN.SCROLL]: 534352, + [CHAIN.XLAYER]: 196, + [CHAIN.MANTA]: 169, + [CHAIN.METIS]: 1088, + [CHAIN.ZETA]: 7000, + [CHAIN.MERLIN]: 4200, + [CHAIN.BLAST]: 81457, + [CHAIN.MODE]: 34443, + [CHAIN.TON]: 607, +}; + +const fetch = async (_timestampParam: number, block: any, options: FetchOptions) => { + const timestamp = new Date().toISOString() + const path = `/api/v5/dex/aggregator/volume?timestamp=${options.endTimestamp * 1e3}&chainId=${CHAINS[options.chain]}` + const [secretKey, passphrase] = getEnv("0KX_API_KEY").split(":") + const data = await limits(() => axios.get(`https://www.okx.com${path}`, { + headers: { + 'OK-ACCESS-PROJECT': 'be0ee327bbc230c3977c6868a77cd894', + 'OK-ACCESS-KEY': 'feb1a319-69e0-4c00-96df-d1188d8a616a', + 'OK-ACCESS-SIGN': createHmac('sha256', secretKey) + .update(timestamp + 'GET' + path) + .digest('base64'), + 'OK-ACCESS-PASSPHRASE': passphrase, + 'OK-ACCESS-TIMESTAMP': timestamp + } + })); + return { + dailyVolume: data.data.data.volumeUsdLast24hour, + timestamp: options.endTimestamp, + }; +}; + +const adapter: any = { + version: 1, // api supports other timestamps but if you try using current timestamps, it breaks, so sticking to v1 even though it should be able to support v2 + adapter: Object.keys(CHAINS).reduce((acc, chain) => { + return { + ...acc, + [chain]: { + fetch: fetch, + start: 1652745600, + }, + }; + }, {}), +}; + +export default adapter; diff --git a/helpers/env.ts b/helpers/env.ts index 64396dde32..f98149f203 100644 --- a/helpers/env.ts +++ b/helpers/env.ts @@ -27,7 +27,8 @@ export const ENV_KEYS = new Set([ 'ZEROx_API_KEY', 'ZEROX_API_KEY', 'AGGREGATOR_0X_API_KEY', - 'SUI_RPC' + 'SUI_RPC', + '0KX_API_KEY' ]) // This is done to support both ZEROx_API_KEY and ZEROX_API_KEY From 4caa666babc3d911647f2fb3a4d624f5370a3254 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 3 Oct 2024 09:50:49 +0100 Subject: [PATCH 1586/1590] pcso --- options/pancakeswap-options/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options/pancakeswap-options/index.ts b/options/pancakeswap-options/index.ts index 27bfb4001e..d144427c0b 100644 --- a/options/pancakeswap-options/index.ts +++ b/options/pancakeswap-options/index.ts @@ -3,7 +3,7 @@ import { CHAIN } from "../../helpers/chains"; import { FetchOptions, SimpleAdapter } from "../../adapters/types"; const url: { [s: string]: string } = { - [CHAIN.ARBITRUM]: "https://api.0xgraph.xyz/api/public/e2146f32-5728-4755-b1d1-84d17708c119/subgraphs/dopex-v2-clamm-public/v0.0.2/gn" + [CHAIN.ARBITRUM]: "https://api.0xgraph.xyz/api/public/e2146f32-5728-4755-b1d1-84d17708c119/subgraphs/dopex-v2-clamm-public/-/gn" } const query = gql` From fd56f3815c5cee45ef1e094cb00b9e6a9161667a Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 3 Oct 2024 10:06:26 +0100 Subject: [PATCH 1587/1590] jibswap --- dexs/jibswap/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/jibswap/index.ts b/dexs/jibswap/index.ts index a37dad0986..0d2aa44cc0 100644 --- a/dexs/jibswap/index.ts +++ b/dexs/jibswap/index.ts @@ -1,7 +1,7 @@ import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.JBC]: "https://graph.jibswap.com/subgraphs/name/jibswap", }, {}); From 1bbba947f9eeb116a75023ba8411ed15da8ca389 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 3 Oct 2024 10:13:29 +0100 Subject: [PATCH 1588/1590] v2 --- dexs/mm-stableswap-polygon/index.ts | 4 ++-- dexs/shibaswap/index.ts | 4 ++-- dexs/solarbeam/index.ts | 5 ++--- dexs/stellaswap/index.ts | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/dexs/mm-stableswap-polygon/index.ts b/dexs/mm-stableswap-polygon/index.ts index 64e58b781b..400f46be1d 100644 --- a/dexs/mm-stableswap-polygon/index.ts +++ b/dexs/mm-stableswap-polygon/index.ts @@ -1,8 +1,8 @@ import * as sdk from "@defillama/sdk"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; import { CHAIN } from "../../helpers/chains"; -export default univ2Adapter({ +export default univ2Adapter2({ [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('HTJcrXUUtrVFKyNHZH99ywRx3TQm5ChSFVbn3oBiqGq6') }, { factoriesName: "pancakeFactories", diff --git a/dexs/shibaswap/index.ts b/dexs/shibaswap/index.ts index 18d82f4df5..cebac52d6a 100644 --- a/dexs/shibaswap/index.ts +++ b/dexs/shibaswap/index.ts @@ -1,12 +1,12 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; const endpoints = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('FvP7tK71rX51wsb663j5GRx2YTtDRa1Adq8QSCi5akLS'), }; -const adapter = univ2Adapter(endpoints, { +const adapter = univ2Adapter2(endpoints, { factoriesName: "factories", dayData: "dayData", dailyVolume: "volumeUSD", diff --git a/dexs/solarbeam/index.ts b/dexs/solarbeam/index.ts index c657c8fc69..27594fec41 100644 --- a/dexs/solarbeam/index.ts +++ b/dexs/solarbeam/index.ts @@ -1,11 +1,10 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapter = univ2Adapter({ +const adapter = univ2Adapter2({ [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('71vx2Ph76RyX8y7RRqzNKToMm4w6now3YBJjAWpGyUCP') },{ - hasTotalVolume: false, }); adapter.adapter.moonriver.start = 1630903340; export default adapter; diff --git a/dexs/stellaswap/index.ts b/dexs/stellaswap/index.ts index 5b3f9b743b..2b73a4ed20 100644 --- a/dexs/stellaswap/index.ts +++ b/dexs/stellaswap/index.ts @@ -1,8 +1,8 @@ import * as sdk from "@defillama/sdk"; import { CHAIN } from "../../helpers/chains"; -import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; +import { univ2Adapter2 } from "../../helpers/getUniSubgraphVolume"; -const adapters = univ2Adapter({ +const adapters = univ2Adapter2({ [CHAIN.MOONBEAN]: sdk.graph.modifyEndpoint('HgSAfZvHEDbAVuZciPUYEqFzhAUnjJWmyix5C1R2tmTp') }, {}); adapters.adapter.moonbeam.start = 1641960253; From cf93610eab9d4b497e71f2b47547a5306d107e28 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 3 Oct 2024 15:32:01 +0200 Subject: [PATCH 1589/1590] refactor looksrare --- fees/looksrare.ts | 56 ++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/fees/looksrare.ts b/fees/looksrare.ts index 5bef9d3628..c5b1af0c21 100644 --- a/fees/looksrare.ts +++ b/fees/looksrare.ts @@ -1,6 +1,5 @@ -import { Adapter, ChainBlocks, FetchOptions } from "../adapters/types"; +import { Adapter, FetchOptions } from "../adapters/types"; import { ETHEREUM } from "../helpers/chains"; -import { Chain } from '@defillama/sdk/build/general'; const address = "0x0000000000e655fae4d56241588680f86e3b2377"; const topic0_taker_bid = "0x3ee3de4684413690dee6fff1a0a4f92916a1b97d1c5a83cdf24671844306b2e3"; @@ -10,40 +9,37 @@ const eventAbis = { "TakerBid": "event TakerBid((bytes32 orderHash, uint256 orderNonce, bool isNonceInvalidated) nonceInvalidationParameters, address bidUser, address bidRecipient, uint256 strategyId, address currency, address collection, uint256[] itemIds, uint256[] amounts, address[2] feeRecipients, uint256[3] feeAmounts)", } -const graphs = (_chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, }: FetchOptions) => { - - const logs_bid = await getLogs({ - target: address, - topics: [topic0_taker_bid], - eventAbi:eventAbis.TakerBid - }) - - const logs_ask = await getLogs({ - target: address, - topics: [topic0_taker_ask], - eventAbi:eventAbis.TakerAsk, - }) - const logs = logs_bid.concat(logs_ask) - const dailyFees = createBalances() - logs.map((tx: any) => { - dailyFees.add(tx.currency, tx.feeAmounts[2]) - }); - - return { - timestamp, - dailyFees: dailyFees, - dailyRevenue: dailyFees, - dailyHoldersRevenue: dailyFees, - }; +const fetch = async ({ createBalances, getLogs, }: FetchOptions) => { + + const logs_bid = await getLogs({ + target: address, + topics: [topic0_taker_bid], + eventAbi: eventAbis.TakerBid + }) + + const logs_ask = await getLogs({ + target: address, + topics: [topic0_taker_ask], + eventAbi: eventAbis.TakerAsk, + }) + const logs = logs_bid.concat(logs_ask) + const dailyFees = createBalances() + logs.map((tx: any) => { + dailyFees.add(tx.currency, tx.feeAmounts[2]) + }); + + return { + dailyFees: dailyFees, + dailyRevenue: dailyFees, + dailyHoldersRevenue: dailyFees, }; }; - const adapter: Adapter = { + version: 2, adapter: { [ETHEREUM]: { - fetch: graphs(ETHEREUM), + fetch, start: 1640775864, }, } From 72d1598c23a5af48cb85a988fad10a8b99ee1ab7 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 3 Oct 2024 16:15:45 +0000 Subject: [PATCH 1590/1590] add harmony-swap --- aggregators/arcane-dex/index.ts | 1 - dexs/harmony-swap/index.ts | 44 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 dexs/harmony-swap/index.ts diff --git a/aggregators/arcane-dex/index.ts b/aggregators/arcane-dex/index.ts index b4ecf8a7b2..7f06334040 100644 --- a/aggregators/arcane-dex/index.ts +++ b/aggregators/arcane-dex/index.ts @@ -5,7 +5,6 @@ import request from "graphql-request" import { FetchResultVolume, SimpleAdapter } from "../../adapters/types" import { CHAIN } from "../../helpers/chains" import { getBlock } from "../../helpers/getBlock" -import * as sdk from "@defillama/sdk" interface IResponse { today: { diff --git a/dexs/harmony-swap/index.ts b/dexs/harmony-swap/index.ts new file mode 100644 index 0000000000..3de229a9a8 --- /dev/null +++ b/dexs/harmony-swap/index.ts @@ -0,0 +1,44 @@ +import * as sdk from "@defillama/sdk"; +import { CHAIN } from "../../helpers/chains"; +import { DEFAULT_TOTAL_VOLUME_FIELD } from "../../helpers/getUniSubgraphFees"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; + +const endpoint: any = { + [CHAIN.HARMONY]: sdk.graph.modifyEndpoint("GVkp9F6TzzC5hY4g18Ukzb6gGcYDfQrpMpcj867jsenJ"), +}; + +const v3Graphs = getGraphDimensions2({ + graphUrls: endpoint, + totalVolume: { + factory: "factories", + field: DEFAULT_TOTAL_VOLUME_FIELD, + }, +}); + +const adapters: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.HARMONY]: { + fetch: async (options: FetchOptions) => { + try { + const res = await v3Graphs(CHAIN.HARMONY)(options); + return { + totalVolume: res?.totalVolume || 0, + dailyVolume: res?.dailyVolume || 0, + }; + } catch(e) { + console.error("Error fetching volume:", e); + return { + totalVolume: 0, + dailyVolume: 0, + }; + } + }, + start: 0, + }, + }, +}; + + +export default adapters;

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 z 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